添加新界面,配置新界面json文件,补充IO状态界面地址,添加报警信息界面json
10个文件已修改
436 ■■■■ 已修改文件
CanadaMes-ui/src/configuration/AutomaticParameterSetting.json 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/Electrical/AutomaticParameterSetting.vue 134 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/Electrical/Parameter1.vue 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/Electrical/Parameter2.vue 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/Electrical/Positioning1.vue 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/Electrical/Positioning2.vue 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/Electrical/ServoManualone.vue 55 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/Electrical/Servomanual.vue 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/PlcParameter1.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/config/AppRunnerConfig.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/configuration/AutomaticParameterSetting.json
@@ -1,52 +1,37 @@
[
  [
    {
      "name": "大车自动速度",
      "read": 33,
      "sending": "",
      "type": "0",
      "address": "DB100.0",
      "count": 3
    }
  ],
  [
    {
      "name": "小车自动速度",
      "read": 11,
      "sending": "",
      "address": "DB100.0",
      "type": "0"
    }
  ],
  [
    {
      "name": "A01行走高速角度",
      "read": 33,
      "sending": "",
      "type": "0",
      "address": "DB100.0",
      "count": 3
      "count": 3,
      "value": ""
    },
    {
      "name": "A01行走低速角度",
      "read": 11,
      "sending": "",
      "address": "DB100.0",
      "type": "0"
      "type": "0",
      "value": ""
    },
    {
      "name": "A01输送接片角度",
      "read": 22,
      "sending": "",
      "address": "DB100.0",
      "type": "0"
      "type": "0",
      "value": ""
    },
    {
      "name": "A01笼子角度",
      "read": 22,
      "sending": "",
      "address": "DB100.0",
      "type": "0"
      "type": "0",
      "value": ""
    }
  ],
  [
@@ -56,28 +41,53 @@
      "sending": "",
      "type": "0",
      "address": "DB100.0",
      "count": 3
      "count": 3,
      "value": ""
    },
    {
      "name": "A02行走低速角度",
      "read": 11,
      "sending": "",
      "address": "DB100.0",
      "type": "0"
      "type": "0",
      "value": ""
    },
    {
      "name": "A02输送接片角度",
      "read": 22,
      "sending": "",
      "address": "DB100.0",
      "type": "0"
      "type": "0",
      "value": ""
    },
    {
      "name": "A02笼子角度",
      "read": 22,
      "sending": "",
      "address": "DB100.0",
      "type": "0"
      "type": "0",
      "value": ""
    }
  ],
  [
    {
      "name": "大车自动速度",
      "read": 100,
      "sending": "",
      "type": "0",
      "address": "DB100.0",
      "count": 3,
      "value": ""
    }
  ],
  [
    {
      "name": "小车自动速度",
      "read": 11,
      "sending": "",
      "address": "DB100.0",
      "type": "0",
      "value": ""
    }
  ],
  [
@@ -86,7 +96,8 @@
      "read": 33,
      "sending": "",
      "address": "DB100.0",
      "type": "0"
      "type": "0",
      "value": ""
    }
  ]
]
CanadaMes-ui/src/views/Electrical/AutomaticParameterSetting.vue
@@ -51,8 +51,8 @@
          <div v-for="(item, itemIndex) in dataGroup" :key="itemIndex" class="item-container">
            <div class="item-row" v-if="item.type === '0'">
              <span class="name" v-if="item.type === '0'" style="width:150px;">{{ item.name }}</span>
              <el-input style="width:150px;" v-if="item.type === '0'" v-model="item.read" class="input-box"></el-input>
              <el-input style="width:150px;" v-if="item.type === '0'" v-model="item.sending" class="input-box"></el-input>
              <el-input style="width:250px;" v-if="item.type === '0'" v-model="item.value" class="input-box"
                @keyup.enter.native="submitDataToBackend"></el-input>
            </div>
          </div>
        </el-card>
@@ -65,6 +65,8 @@
<script>
import LanguageMixin from '../../lang/LanguageMixin'
import data from '../../configuration/AutomaticParameterSetting'
import { throttle } from 'lodash';
let socket;
export default {
  name: "AutomaticParameterSetting",
@@ -73,6 +75,11 @@
    return {
      jsonData: data // 加载整个data.json文件作为jsonData
    }
  },
  created () {
    this.initWebSocket();
    // console.log('jsonData:', this.jsonData);
  },
  methods: {
    updateButtonValue (dataGroup, itemIndex) {
@@ -90,10 +97,129 @@
        });
      });
      // 模拟提交数据到后端的操作,实际情况下需要根据你的后端API进行修改
      console.log('提交以下数据到后端:', inputData);
      // 将inputData转换为整数数组
      const integerArray = inputData.map(dataGroup => {
        return dataGroup.map(item => {
          if (item !== null) {
            return item.value;
          }
          return null;
        });
      });
      // 构建JSON对象
      const jsonObject = { data: integerArray };
      // 提交数据到后端
      const jsonString = JSON.stringify(jsonObject);
      console.log('提交以下数据到后端:', jsonString);
      socket?.send(jsonString);
    },
    initWebSocket () {
      let viewname = "AutomaticParameterSetting";
      if (typeof WebSocket === "undefined") {
        console.log("您的浏览器不支持WebSocket");
      } else {
        let socketUrl = "ws://" + "localhost:8888" + "/springboot-vue3/api/talk/" + viewname;
        if (socket != null) {
          socket.close();
          socket = null;
        }
        // 开启一个websocket服务
        socket = new WebSocket(socketUrl);
        // 打开事件
        socket.onopen = function () {
          console.log("websocket已打开");
        };
        // 收到消息
        socket.onmessage = (msg) => {
          if (!msg.data) {
            return; // 如果收到空数据,则直接返回,不执行后续逻辑
          }
          let obj = JSON.parse(msg.data);
          const jsonData2 = this.jsonData;
          const handleMouseMove = throttle(function (event) {
            const inputBox = document.querySelectorAll('.el-card__body');
            const target = event.target;
            if (inputBox && Array.from(inputBox).every(box => !box.contains(target))) {
              const parms = obj.params;
              const fanzhuan = obj.fanzhuan;
              const xiaoche = obj.xiaoche;
              const dache = obj.dache1;
              // console.log('parms:', parms);
              // console.log('fanzhuan:', fanzhuan);
              // console.log('xiaoche:', xiaoche);
              // console.log('dache:', dache);
              let index = 0;
              for (let i = 0; i < jsonData2.length - 1; i++) {
                let arr = jsonData2[i];
                for (let j = 0; j < arr.length; j++) {
                  let obj = arr[j];
                  if (obj.type === '0' && Object.prototype.hasOwnProperty.call(obj, 'value')) {
                    if (Array.isArray(parms) && Array.isArray(parms[0]) && parms[0][index] !== undefined) {
                      obj.value = parms[0][index];
                      index++;
                    }
                  }
                }
              }
              if (Array.isArray(fanzhuan) && Array.isArray(fanzhuan[0]) && fanzhuan[0][0] !== undefined) {
                jsonData2[4][0]['value'] = fanzhuan[0][0];
              }
              if (Array.isArray(xiaoche) && Array.isArray(xiaoche[0]) && xiaoche[0][0] !== undefined) {
                jsonData2[3][0]['value'] = xiaoche[0][0];
              }
              if (Array.isArray(dache) && Array.isArray(dache[0]) && dache[0][0] !== undefined) {
                jsonData2[2][0]['value'] = dache[0][0];
              }
            }
          }, 50);
          document.addEventListener('mouseover', handleMouseMove);
        };
        // 关闭事件
        socket.onclose = function () {
          console.log("websocket已关闭");
        };
        // 发生错误事件
        socket.onerror = function () {
          console.log("websocket发生了错误");
        };
    }
    },
    replaceChineseWithEnglish () {
      const translation = this.$t('AutomaticParameterSetting');
      this.jsonData = this.jsonData.map(item => { return { name: translation[item.name] || item.name, value: item.value }; });
      // console.log(translation);
    },
    send () {
      socket?.send(JSON.stringify(this.messagepack));
    },
  }
}
</script>
CanadaMes-ui/src/views/Electrical/Parameter1.vue
@@ -11,20 +11,36 @@
      }}</router-link>
      <router-link to="/Electrical/Sign" tag="el-button" type="text" active-class="blue-button">{{ $t('Sign')
      }}</router-link>
       <router-link to="/Electrical/Servomanual" tag="el-button" type="text" active-class="blue-button">{{ $t('Servo Manual')
      <router-link to="/Electrical/Servomanual" tag="el-button" type="text" active-class="blue-button">{{
        $t('ServoManual')
      }}</router-link>
    </el-breadcrumb>
    <el-breadcrumb separator-class="el-icon-arrow-right" class="el-breadcrumb">
      <router-link to="/Electrical/Servomanualone" tag="el-button" type="text" active-class="blue-button">{{ $t('Servomanualone')
      <router-link to="/Electrical/Servomanualone" tag="el-button" type="text" active-class="blue-button">{{
        $t('Servomanualone')
      }}</router-link>
        <router-link to="/Electrical/Parameter1" tag="el-button" type="text" active-class="blue-button">{{ $t('Parameter1')
        }}</router-link>
         <router-link to="/Electrical/Parameter2" tag="el-button" type="text" active-class="blue-button">{{ $t('Parameter2')
        }}</router-link> 
          <router-link to="/Electrical/Positioning1" tag="el-button" type="text" active-class="blue-button">{{ $t('Positioning1')
      <router-link to="/Electrical/Positioning1" tag="el-button" type="text" active-class="blue-button">{{
        $t('Positioning1')
          }}</router-link>
           <router-link to="/Electrical/Positioning2" tag="el-button" type="text" active-class="blue-button">{{ $t('Positioning2')
      <router-link to="/Electrical/Positioning2" tag="el-button" type="text" active-class="blue-button">{{
        $t('Positioning2')
      }}</router-link>
      <router-link to="/Electrical/ManualonePosition" tag="el-button" type="text" active-class="blue-button">{{
        $t('ManualonePosition')
      }}</router-link>
      <router-link to="/Electrical/ManualonePosition2" tag="el-button" type="text" active-class="blue-button">{{
        $t('ManualonePosition2')
      }}</router-link>
      <router-link to="/Electrical/AutomaticParameterSetting" tag="el-button" type="text" active-class="blue-button">{{
        $t('AutomaticParameterSetting')
      }}</router-link>
      <router-link to="/Electrical/ManualJog" tag="el-button" type="text" active-class="blue-button">{{
        $t('ManualJog')
          }}</router-link>
  </el-breadcrumb>
@@ -39,7 +55,8 @@
        <div v-for="(item, itemIndex) in dataGroup" :key="itemIndex" class="item-container">
          <div class="item-row">
            <span class="name" style="width:250px;">{{ item.name }}</span>
            <el-input v-if="item.type === '0'" v-model="item.value" class="input-box"  @keyup.enter.native="submitDataToBackend"></el-input>
              <el-input v-if="item.type === '0'" v-model="item.value" class="input-box"
                @keyup.enter.native="submitDataToBackend"></el-input>
          </div>
        </div>
      
@@ -146,6 +163,7 @@
      let index = 0;
      for (let i = 0; i < jsonData2.length; i++) {
        let arr = jsonData2[i];
        for (let j = 0; j < arr.length; j++) {
          let obj = arr[j];
          if (obj.type === '0' && Object.prototype.hasOwnProperty.call(obj, 'value')) {
@@ -206,7 +224,8 @@
.item-row {
display: flex;
align-items: center;
margin-bottom: 5px; /* 调整每个项目之间的间距 */
  margin-bottom: 5px;
  /* 调整每个项目之间的间距 */
}
.action-button {
@@ -214,6 +233,7 @@
background: #66b1ff;
color: #FFF;
}
.blue-button {
  background-color: skyblue;
}
CanadaMes-ui/src/views/Electrical/Parameter2.vue
@@ -11,20 +11,36 @@
        }}</router-link>
        <router-link to="/Electrical/Sign" tag="el-button" type="text" active-class="blue-button">{{ $t('Sign')
        }}</router-link>
         <router-link to="/Electrical/Servomanual" tag="el-button" type="text" active-class="blue-button">{{ $t('Servo Manual')
      <router-link to="/Electrical/Servomanual" tag="el-button" type="text" active-class="blue-button">{{
        $t('ServoManual')
        }}</router-link>
      </el-breadcrumb>
  
      <el-breadcrumb separator-class="el-icon-arrow-right" class="el-breadcrumb">
        <router-link to="/Electrical/Servomanualone" tag="el-button" type="text" active-class="blue-button">{{ $t('Servomanualone')
      <router-link to="/Electrical/Servomanualone" tag="el-button" type="text" active-class="blue-button">{{
        $t('Servomanualone')
        }}</router-link>
          <router-link to="/Electrical/Parameter1" tag="el-button" type="text" active-class="blue-button">{{ $t('Parameter1')
          }}</router-link>
         <router-link to="/Electrical/Parameter2" tag="el-button" type="text" active-class="blue-button">{{ $t('Parameter2')
          }}</router-link> 
            <router-link to="/Electrical/Positioning1" tag="el-button" type="text" active-class="blue-button">{{ $t('Positioning1')
      <router-link to="/Electrical/Positioning1" tag="el-button" type="text" active-class="blue-button">{{
        $t('Positioning1')
          }}</router-link>
            <router-link to="/Electrical/Positioning2" tag="el-button" type="text" active-class="blue-button">{{ $t('Positioning2')
      <router-link to="/Electrical/Positioning2" tag="el-button" type="text" active-class="blue-button">{{
        $t('Positioning2')
      }}</router-link>
      <router-link to="/Electrical/ManualonePosition" tag="el-button" type="text" active-class="blue-button">{{
        $t('ManualonePosition')
      }}</router-link>
      <router-link to="/Electrical/ManualonePosition2" tag="el-button" type="text" active-class="blue-button">{{
        $t('ManualonePosition2')
      }}</router-link>
      <router-link to="/Electrical/AutomaticParameterSetting" tag="el-button" type="text" active-class="blue-button">{{
        $t('AutomaticParameterSetting')
      }}</router-link>
      <router-link to="/Electrical/ManualJog" tag="el-button" type="text" active-class="blue-button">{{
        $t('ManualJog')
          }}</router-link>
    </el-breadcrumb>
  
@@ -41,14 +57,16 @@
            <div v-for="(item, itemIndex) in dataGroup" :key="itemIndex">
              <el-button v-if="item.button" :name="item.button.name" v-model="item.button.value" class="action-button"
  @click="updateButtonValue(dataGroup, itemIndex);submitDataToBackend(item.button.name)"
  :class="{ 'green-button': item.button.value === 0  && item.button.name !== '清除ID','red-button': item.button.value === 1 && item.button.name !== '清除ID' }">{{ item.button.name }}</el-button>
                :class="{ 'green-button': item.button.value === 0 && item.button.name !== '清除ID', 'red-button': item.button.value === 1 && item.button.name !== '清除ID' }">{{
                  item.button.name }}</el-button>
            </div>
          </div>
          <div v-for="(item, itemIndex) in dataGroup" :key="itemIndex" class="item-container">
            <div class="item-row">
              <span class="name" style="width:150px;">{{ item.name }}</span>
              <el-input v-if="item.type === '0'" v-model="item.value" readonly="readonly"    style="width:150px;" class="input-box"></el-input>
              <el-input v-if="item.type === '0'" v-model="item.value" readonly="readonly" style="width:150px;"
                class="input-box"></el-input>
            </div>
          </div>
        
@@ -216,7 +234,8 @@
  .item-row {
  display: flex;
  align-items: center;
  margin-bottom: 5px; /* 调整每个项目之间的间距 */
  margin-bottom: 5px;
  /* 调整每个项目之间的间距 */
  }
  
  .action-button {
@@ -224,6 +243,7 @@
  background: #66b1ff;
  color: #FFF;
  }
  .blue-button {
  background-color: skyblue;
}
@@ -235,5 +255,4 @@
.red-button{
  background-color: red;
}
  </style>
CanadaMes-ui/src/views/Electrical/Positioning1.vue
@@ -11,20 +11,36 @@
        }}</router-link>
        <router-link to="/Electrical/Sign" tag="el-button" type="text" active-class="blue-button">{{ $t('Sign')
        }}</router-link>
         <router-link to="/Electrical/Servomanual" tag="el-button" type="text" active-class="blue-button">{{ $t('Servo Manual')
      <router-link to="/Electrical/Servomanual" tag="el-button" type="text" active-class="blue-button">{{
        $t('ServoManual')
        }}</router-link>
      </el-breadcrumb>
  
      <el-breadcrumb separator-class="el-icon-arrow-right" class="el-breadcrumb">
        <router-link to="/Electrical/Servomanualone" tag="el-button" type="text" active-class="blue-button">{{ $t('Servomanualone')
      <router-link to="/Electrical/Servomanualone" tag="el-button" type="text" active-class="blue-button">{{
        $t('Servomanualone')
        }}</router-link>
          <router-link to="/Electrical/Parameter1" tag="el-button" type="text" active-class="blue-button">{{ $t('Parameter1')
          }}</router-link>
         <router-link to="/Electrical/Parameter2" tag="el-button" type="text" active-class="blue-button">{{ $t('Parameter2')
          }}</router-link>
           <router-link to="/Electrical/Positioning1" tag="el-button" type="text" active-class="blue-button">{{ $t('Positioning1')
      <router-link to="/Electrical/Positioning1" tag="el-button" type="text" active-class="blue-button">{{
        $t('Positioning1')
          }}</router-link>
            <router-link to="/Electrical/Positioning2" tag="el-button" type="text" active-class="blue-button">{{ $t('Positioning2')
      <router-link to="/Electrical/Positioning2" tag="el-button" type="text" active-class="blue-button">{{
        $t('Positioning2')
      }}</router-link>
      <router-link to="/Electrical/ManualonePosition" tag="el-button" type="text" active-class="blue-button">{{
        $t('ManualonePosition')
      }}</router-link>
      <router-link to="/Electrical/ManualonePosition2" tag="el-button" type="text" active-class="blue-button">{{
        $t('ManualonePosition2')
      }}</router-link>
      <router-link to="/Electrical/AutomaticParameterSetting" tag="el-button" type="text" active-class="blue-button">{{
        $t('AutomaticParameterSetting')
      }}</router-link>
      <router-link to="/Electrical/ManualJog" tag="el-button" type="text" active-class="blue-button">{{
        $t('ManualJog')
          }}</router-link>
    </el-breadcrumb>
  
@@ -43,7 +59,9 @@
              
              
              <el-button v-if="item.type === '0' && item.name !== '格子间距'  && item.name !== '出片接片地址'   && item.name !== '存片接片地址'"  class="input-box"  @click="submitDataToBackend();">取地址</el-button>
              <el-button
                v-if="item.type === '0' && item.name !== '格子间距' && item.name !== '出片接片地址' && item.name !== '存片接片地址'"
                class="input-box" @click="submitDataToBackend();">取地址</el-button>
            </div>
          </div>
        
@@ -196,7 +214,8 @@
  .item-row {
  display: flex;
  align-items: center;
  margin-bottom: 5px; /* 调整每个项目之间的间距 */
  margin-bottom: 5px;
  /* 调整每个项目之间的间距 */
  }
  
  .action-button {
@@ -204,6 +223,7 @@
  background: #66b1ff;
  color: #FFF;
  }
  .blue-button {
  background-color: skyblue;
}
CanadaMes-ui/src/views/Electrical/Positioning2.vue
@@ -11,20 +11,36 @@
      }}</router-link>
      <router-link to="/Electrical/Sign" tag="el-button" type="text" active-class="blue-button">{{ $t('Sign')
      }}</router-link>
       <router-link to="/Electrical/Servomanual" tag="el-button" type="text" active-class="blue-button">{{ $t('Servo Manual')
      <router-link to="/Electrical/Servomanual" tag="el-button" type="text" active-class="blue-button">{{
        $t('ServoManual')
      }}</router-link>
    </el-breadcrumb>
    <el-breadcrumb separator-class="el-icon-arrow-right" class="el-breadcrumb">
      <router-link to="/Electrical/Servomanualone" tag="el-button" type="text" active-class="blue-button">{{ $t('Servomanualone')
      <router-link to="/Electrical/Servomanualone" tag="el-button" type="text" active-class="blue-button">{{
        $t('Servomanualone')
      }}</router-link>
        <router-link to="/Electrical/Parameter1" tag="el-button" type="text" active-class="blue-button">{{ $t('Parameter1')
        }}</router-link>
       <router-link to="/Electrical/Parameter2" tag="el-button" type="text" active-class="blue-button">{{ $t('Parameter2')
        }}</router-link>
         <router-link to="/Electrical/Positioning1" tag="el-button" type="text" active-class="blue-button">{{ $t('Positioning1')
      <router-link to="/Electrical/Positioning1" tag="el-button" type="text" active-class="blue-button">{{
        $t('Positioning1')
        }}</router-link>
          <router-link to="/Electrical/Positioning2" tag="el-button" type="text" active-class="blue-button">{{ $t('Positioning2')
      <router-link to="/Electrical/Positioning2" tag="el-button" type="text" active-class="blue-button">{{
        $t('Positioning2')
      }}</router-link>
      <router-link to="/Electrical/ManualonePosition" tag="el-button" type="text" active-class="blue-button">{{
        $t('ManualonePosition')
      }}</router-link>
      <router-link to="/Electrical/ManualonePosition2" tag="el-button" type="text" active-class="blue-button">{{
        $t('ManualonePosition2')
      }}</router-link>
      <router-link to="/Electrical/AutomaticParameterSetting" tag="el-button" type="text" active-class="blue-button">{{
        $t('AutomaticParameterSetting')
      }}</router-link>
      <router-link to="/Electrical/ManualJog" tag="el-button" type="text" active-class="blue-button">{{
        $t('ManualJog')
        }}</router-link>
  </el-breadcrumb>
@@ -187,7 +203,8 @@
.item-row {
display: flex;
align-items: center;
margin-bottom: 5px; /* 调整每个项目之间的间距 */
  margin-bottom: 5px;
  /* 调整每个项目之间的间距 */
}
.action-button {
@@ -195,6 +212,7 @@
background: #66b1ff;
color: #FFF;
}
.blue-button {
background-color: skyblue;
}
CanadaMes-ui/src/views/Electrical/ServoManualone.vue
@@ -11,21 +11,50 @@
        }}</router-link>
        <router-link to="/Electrical/Sign" tag="el-button" type="text" active-class="blue-button">{{ $t('Sign')
        }}</router-link>
         <router-link to="/Electrical/Servomanual" tag="el-button" type="text" active-class="blue-button">{{ $t('Servo Manual')
      <router-link to="/Electrical/Servomanual" tag="el-button" type="text" active-class="blue-button">{{
        $t('ServoManual')
        }}</router-link>
      </el-breadcrumb>
      <el-breadcrumb separator-class="el-icon-arrow-right" class="el-breadcrumb">
   
        <router-link to="/Electrical/Servomanualone" tag="el-button" type="text" active-class="blue-button">{{ $t('Servomanualone')
      <router-link to="/Electrical/Servomanualone" tag="el-button" type="text" active-class="blue-button">{{
        $t('Servomanualone')
      }}</router-link>
        <router-link to="/Electrical/Parameter1" tag="el-button" type="text" active-class="blue-button">{{ $t('Parameter1')
        }}</router-link>
           <router-link to="/Electrical/Parameter2" tag="el-button" type="text" active-class="blue-button">{{ $t('Parameter2')
        }}</router-link> 
          <router-link to="/Electrical/Positioning1" tag="el-button" type="text" active-class="blue-button">{{ $t('Positioning1')
      <router-link to="/Electrical/Positioning1" tag="el-button" type="text" active-class="blue-button">{{
        $t('Positioning1')
          }}</router-link>
            <router-link to="/Electrical/Positioning2" tag="el-button" type="text" active-class="blue-button">{{ $t('Positioning2')
      <router-link to="/Electrical/Positioning2" tag="el-button" type="text" active-class="blue-button">{{
        $t('Positioning2')
      }}</router-link>
      <router-link to="/Electrical/ManualonePosition" tag="el-button" type="text" active-class="blue-button">{{
        $t('ManualonePosition')
      }}</router-link>
      <router-link to="/Electrical/ManualonePosition2" tag="el-button" type="text" active-class="blue-button">{{
        $t('ManualonePosition2')
      }}</router-link>
      <router-link to="/Electrical/AutomaticParameterSetting" tag="el-button" type="text" active-class="blue-button">{{
        $t('AutomaticParameterSetting')
      }}</router-link>
      <router-link to="/Electrical/ManualJog" tag="el-button" type="text" active-class="blue-button">{{
        $t('ManualJog')
      }}</router-link>
      <router-link to="/Electrical/ManualonePosition" tag="el-button" type="text" active-class="blue-button">{{
        $t('ManualonePosition')
      }}</router-link>
      <router-link to="/Electrical/ManualonePosition2" tag="el-button" type="text" active-class="blue-button">{{
        $t('ManualonePosition2')
      }}</router-link>
      <router-link to="/Electrical/AutomaticParameterSetting" tag="el-button" type="text" active-class="blue-button">{{
        $t('AutomaticParameterSetting')
      }}</router-link>
      <router-link to="/Electrical/ManualJog" tag="el-button" type="text" active-class="blue-button">{{
        $t('ManualJog')
          }}</router-link>
    </el-breadcrumb>
@@ -37,14 +66,19 @@
          <div class="item-container">
            <div class="item-row">
              <span class="name" style='width:230px;'>{{ item.name }}</span>
              <el-input v-if="item.type === '0'" v-model="item.value"   class='input-box' :class="{ 'special-class': groupIndex === 0,'special-class2': groupIndex === 1 }" v-show="groupIndex !== 0 && groupIndex !== 1"  ></el-input>
                  <el-input v-if="item.type === '0'" v-model="item.value" class='input-box'
                    :class="{ 'special-class': groupIndex === 0, 'special-class2': groupIndex === 1 }"
                    v-show="groupIndex !== 0 && groupIndex !== 1"></el-input>
            </div>
          </div>
        </el-col>
      </el-row>
      <div class="button-row" style="display: flex; justify-content: space-between;">
        <div v-for="(item, itemIndex) in dataGroup" :key="itemIndex">
          <el-button v-if="item.button" :name="item.button.name" v-model="item.button.value" :class="{'action-button': true, 'error-button': item.button.name === '故障' && item.button.value === 1}" @click="updateButtonValue(dataGroup, itemIndex); submitDataToBackend(item.button.name);">{{ item.button.name }}</el-button>
              <el-button v-if="item.button" :name="item.button.name" v-model="item.button.value"
                :class="{ 'action-button': true, 'error-button': item.button.name === '故障' && item.button.value === 1 }"
                @click="updateButtonValue(dataGroup, itemIndex); submitDataToBackend(item.button.name);">{{
                  item.button.name }}</el-button>
        </div>
      </div>
@@ -258,12 +292,11 @@
</script>
<style scoped>
.item-row {
  display: flex;
  align-items: center;
  margin-bottom: 2px; /* 调整每个项目之间的间距 */
  margin-bottom: 2px;
  /* 调整每个项目之间的间距 */
}
.action-button {
@@ -271,12 +304,12 @@
  background: #66b1ff;
  color: #FFF;
}
.blue-button {
  background-color: skyblue;
}
.error-button {
  background-color: red;
}
</style>
CanadaMes-ui/src/views/Electrical/Servomanual.vue
@@ -11,29 +11,43 @@
        }}</router-link>
        <router-link to="/Electrical/Sign" tag="el-button" type="text" active-class="blue-button">{{ $t('Sign')
        }}</router-link>
         <router-link to="/Electrical/Servomanual" tag="el-button" type="text" active-class="blue-button">{{ $t('Servo Manual')
      <router-link to="/Electrical/Servomanual" tag="el-button" type="text" active-class="blue-button">{{
        $t('ServoManual')
        }}</router-link>
        
      </el-breadcrumb>
      <el-breadcrumb separator-class="el-icon-arrow-right" class="el-breadcrumb">
   
       <router-link to="/Electrical/Servomanualone" tag="el-button" type="text" active-class="blue-button">{{ $t('Servomanualone')
      <router-link to="/Electrical/Servomanualone" tag="el-button" type="text" active-class="blue-button">{{
        $t('Servomanualone')
      }}</router-link>
        <router-link to="/Electrical/Parameter1" tag="el-button" type="text" active-class="blue-button">{{ $t('Parameter1')
        }}</router-link>
          <router-link to="/Electrical/Parameter2" tag="el-button" type="text" active-class="blue-button">{{ $t('Parameter2')
          }}</router-link> 
            <router-link to="/Electrical/Positioning1" tag="el-button" type="text" active-class="blue-button">{{ $t('Positioning1')
      <router-link to="/Electrical/Positioning1" tag="el-button" type="text" active-class="blue-button">{{
        $t('Positioning1')
          }}</router-link>
            <router-link to="/Electrical/Positioning2" tag="el-button" type="text" active-class="blue-button">{{ $t('Positioning2')
      <router-link to="/Electrical/Positioning2" tag="el-button" type="text" active-class="blue-button">{{
        $t('Positioning2')
      }}</router-link>
      <router-link to="/Electrical/ManualonePosition" tag="el-button" type="text" active-class="blue-button">{{
        $t('ManualonePosition')
      }}</router-link>
      <router-link to="/Electrical/ManualonePosition2" tag="el-button" type="text" active-class="blue-button">{{
        $t('ManualonePosition2')
      }}</router-link>
      <router-link to="/Electrical/AutomaticParameterSetting" tag="el-button" type="text" active-class="blue-button">{{
        $t('AutomaticParameterSetting')
      }}</router-link>
      <router-link to="/Electrical/ManualJog" tag="el-button" type="text" active-class="blue-button">{{
        $t('ManualJog')
          }}</router-link>
    </el-breadcrumb>
 
  </div >
</template>
<script>
import LanguageMixin from '../../lang/LanguageMixin'
@@ -58,13 +72,16 @@
.item-row {
  display: flex;
  align-items: center;
  margin-bottom: 10px; /* 调整每个项目之间的间距 */
  margin-bottom: 10px;
  /* 调整每个项目之间的间距 */
}
.action-button {
  margin-right: 60px; /* 调整按钮之间的间距 */
  margin-right: 60px;
  /* 调整按钮之间的间距 */
}
.blue-button {
  background-color: skyblue;
}
springboot-vue3/src/main/java/com/example/springboot/component/PlcParameter1.java
@@ -81,8 +81,6 @@
      Short[] xiaoche = {5};
      List<Short> xiaoche1 = new ArrayList<>(Arrays.asList(xiaoche));
      JSONObject jsonObject = new JSONObject();
      // new short[]{1,1, 1, 1, 1, 1, 2, 33, 2,3, 4, 5}
      // new short[]{0,0, 0, 0, 0, 0, 0, 0, 0, 0}
@@ -92,13 +90,16 @@
      jsonObject.append("xiaoche", xiaoche1);
      WebSocketServer sendwServer = WebSocketServer.sessionMap.get("Parameter1");
      // System.out.println(sendwServer);
      if (sendwServer != null) {
        sendwServer.sendMessage(jsonObject.toString());
      }
      WebSocketServer webSocketServer = WebSocketServer.sessionMap.get("Parameter1");
      if (webSocketServer != null) {
        List<String> messages = webSocketServer.getMessages();
        // System.out.println(messages);
        String addressList1 = "DB100.0";
        String addressList2 = "DB100.8";
        String addressList3 = "DB100.12";
@@ -108,7 +109,7 @@
          String lastMessage = messages.get(messages.size() - 1);
//        System.out.println("lastMessage:" + lastMessage);
          JSONArray messageArray = new JSONArray(lastMessage);
          // System.out.println(messageArray);
          // 整合第 1 到 3 个数组并去掉 null 元素
          List<Short> mergedList = new ArrayList<>();
          for (int i = 0; i < 3; i++) {
@@ -136,7 +137,8 @@
                String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                short sValue = Short.parseShort(cleanedValue.trim());
//                S7control.getinstance().WriteWord(addressList1, Arrays.asList(sValue));
                System.out.println("messageValue:" + Arrays.asList(sValue) + " written to PLC at address " + addressList1);
                System.out
                    .println("messageValue:" + Arrays.asList(sValue) + " written to PLC at address " + addressList1);
              } catch (NumberFormatException e) {
                // 如果无法解析为 short 类型,则忽略该部分
                System.err.println("Could not parse value: " + value);
@@ -152,7 +154,8 @@
                String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                short sValue = Short.parseShort(cleanedValue.trim());
//                S7control.getinstance().WriteWord(addressList2, Arrays.asList(sValue));
                System.out.println("messageValue:" + Arrays.asList(sValue) + " written to PLC at address " + addressList2);
                System.out
                    .println("messageValue:" + Arrays.asList(sValue) + " written to PLC at address " + addressList2);
              } catch (NumberFormatException e) {
                // 如果无法解析为 short 类型,则忽略该部分
                System.err.println("Could not parse value: " + value);
@@ -169,7 +172,6 @@
          // 清空消息列表
          webSocketServer.clearMessages();
        }
    }
springboot-vue3/src/main/java/com/example/springboot/config/AppRunnerConfig.java
@@ -6,6 +6,7 @@
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import com.example.springboot.component.PLCAutomaticParameterSetting;
import com.example.springboot.component.PlcHold;
import com.example.springboot.component.PlcParameter;
import com.example.springboot.component.Plcaction;
@@ -17,7 +18,7 @@
import com.example.springboot.component.PlcPositioning2;
import com.example.springboot.component.PlcParameter2;
import com.example.springboot.component.PlcParameter1;
import com.example.springboot.component.PlcServoManualone;
//import com.example.springboot.component.PlcServoManualone;
@Component
@Order(1)
@@ -47,6 +48,7 @@
      new PlcPositioning2().start();
      new PlcParameter2().start();
      new PlcParameter1().start();
      new PlcServoManualone().start();
    new PLCAutomaticParameterSetting().start();
    // new PlcServoManualone().start();
  }
}