CanadaMes-ui/src/lang/locales/zh-CN.json
@@ -442,5 +442,12 @@ "D04.State": "D04.状态", "D05.State": "D05.状态", "D06.State": "D06.状态" } }, "Automatic State":"自动状态", "ManualJog":"开关控制", "ManualonePosition":"手动定位", "Servomanualone":"半自动", "Address parameter settings":"地址参数设置", "Speed parameter settings":"速度参数设置" } CanadaMes-ui/src/layout/index.vue
@@ -66,7 +66,7 @@ <el-menu-item index="1-1" @click="logout">{{ $t('exit') }}</el-menu-item> <el-menu-item index="1-2" @click="showChangePasswordDialog">{{ $t('changePassword') }}</el-menu-item> </el-submenu> </template> <template> <el-dialog :title="$t('changePassword')" :visible.sync="dialogVisible" width="30%"> @@ -102,11 +102,19 @@ <el-table-column prop="timeons" :label="$t('timeon')"></el-table-column> </el-table> </el-dialog> <el-dialog :visible.sync="dialogFormVisible3" > <el-button :class="{ 'blue-button': receivedData === 1 }" @click="toggleButtonValue(1)">{{ $t('A01Abort/ResumeTasks') }}</el-button> <el-button :class="{ 'blue-button': receivedData2 === 1 }" @click="toggleButtonValue(2)">{{ $t('A02Abort/ResumeTasks') }}</el-button> <el-dialog :visible.sync="dialogFormCountDown" :title="$t('Approximately resettable time')" top="5vh"> <div :style="'font-size: ' + PromptSize + 'px;text-align: center;'"> <!-- {{ this.CountDowns }} --> {{ this.CountDowns }} </div> </el-dialog> <el-dialog :visible.sync="dialogFormVisible3"> <el-button :class="{ 'blue-button': receivedData === 1 }" @click="toggleButtonValue(1)">{{ $t('A01Abort/ResumeTasks') }}</el-button> <el-button :class="{ 'blue-button': receivedData2 === 1 }" @click="toggleButtonValue(2)">{{ $t('A02Abort/ResumeTasks') }}</el-button> </el-dialog> </el-container> @@ -131,8 +139,8 @@ return { activeTag: '', // 当前激活的标签 dialogVisible: false, receivedData:0, receivedData2:0, receivedData: 0, receivedData2: 0, formData: { oldPassword: '', newPassword: '', @@ -149,7 +157,12 @@ dialogFormVisible2: false, dialogFormVisible3: false, alarm: [], alarm2: [] alarm2: [], CountDowns: "0", EmergencyStop: false, PromptSize: 250, dialogFormCountDown:false } }, // components: { @@ -157,8 +170,8 @@ // }, created() { selectList(this.menuListForm).then(res => { this.menuList = res.data @@ -178,25 +191,25 @@ toggleButtonValue(buttonNumber) { MessageBox.confirm(this.$t('Are you sure to perform this operation?'), this.$t('prompt'), { confirmButtonText: this.$t('confirm'), cancelButtonText: this.$t('cancel'), type: 'warning' }).then(() => { // 点击确认按钮后执行的操作 if (buttonNumber === 1) { this.receivedData = this.receivedData === 0 ? 1 : 0; } else if (buttonNumber === 2) { this.receivedData2 = this.receivedData2 === 0 ? 1 : 0; } console.log(this.receivedData,this.receivedData2) confirmButtonText: this.$t('confirm'), cancelButtonText: this.$t('cancel'), type: 'warning' }).then(() => { // 点击确认按钮后执行的操作 if (buttonNumber === 1) { this.receivedData = this.receivedData === 0 ? 1 : 0; } else if (buttonNumber === 2) { this.receivedData2 = this.receivedData2 === 0 ? 1 : 0; } console.log(this.receivedData, this.receivedData2) const data3 = []; const resetButtonValues3 = [this.receivedData,this.receivedData2]; const resetButtonValues3 = [this.receivedData, this.receivedData2]; // 将得到的值添加到 data 数组中 data3.push(resetButtonValues3.flat()); // 在 data3 数组前面添加两个空数组 // 创建 jsonObject3 对象,并添加 data3 属性 @@ -207,13 +220,13 @@ console.log("急停后中止/继续选择:", jsonString3); socket?.send(jsonString3); setTimeout(() => { this.dialogFormVisible3 = false; }, 1000); // 延迟时间为1秒(1000毫秒) this.dialogFormVisible3 = false; }, 1000); // 延迟时间为1秒(1000毫秒) }).catch(() => { // 点击取消按钮后执行的操作 }); // 点击取消按钮后执行的操作 }); }, @@ -238,40 +251,56 @@ socket.onmessage = function (msg) { //console.log("收到数据====" + msg.data); let obj = JSON.parse(msg.data); if(obj.alarmmg){ if (obj.alarmmg) { if (obj.alarmmg[0].length > 0) { if (this.alarm.length > 0) { if (this.alarm[this.alarm.length - 1].id != obj.alarmmg[0][obj.alarmmg[0].length-1].id) { if (obj.alarmmg[0].length > 0) { if (this.alarm.length > 0) { if (this.alarm[this.alarm.length - 1].id != obj.alarmmg[0][obj.alarmmg[0].length - 1].id) { this.alarm = obj.alarmmg[0]; this.dialogFormVisible2 = true; } } else { this.alarm = obj.alarmmg[0]; this.dialogFormVisible2 = true; } } else { this.alarm = obj.alarmmg[0]; this.dialogFormVisible2 = true; } }else{ this.alarm = obj.alarmmg[0]; this.dialogFormVisible2 = false; } //是否急停 if (obj.emergencystop != null) { this.EmergencyStop = obj.emergencystop[0]; } //复位倒计时 if (obj.countdown != null) { if ((obj.countdown[0] == true && this.CountDowns == 0) || this.EmergencyStop == true) { this.CountDown(); } } //复位完成信号 if (obj.reset != null) { this.reset = obj.reset[0]; } } } if(obj.Abort){ if (obj.Abort[0].length > 0) { this.receivedData=obj.Abort[0][0]; this.receivedData2=obj.Abort[0][1]; this.dialogFormVisible3 = true; if (obj.Abort) { if (obj.Abort[0].length > 0) { this.receivedData = obj.Abort[0][0]; this.receivedData2 = obj.Abort[0][1]; this.dialogFormVisible3 = true; } } } this.$forceUpdate(); this.$forceUpdate(); }.bind(this); //关闭事件 @@ -283,6 +312,36 @@ console.log("websocket发生了错误"); } } }, //45秒复位倒数计时 CountDown() { let count = 45; let timer = setInterval( () => { if (this.EmergencyStop == true) { this.dialogFormCountDown = false; clearInterval(timer); this.CountDowns = "0"; } else { if (count > 0) { this.PromptSize = 500; this.CountDowns = count; count--; this.dialogFormCountDown = true; } else { this.PromptSize = 200; this.CountDowns = "Waiting for reset"; if (this.reset == true) { clearInterval(timer); this.dialogFormCountDown = false; } } } }, 1000 ); }, logout: function () { removeToken() @@ -436,10 +495,12 @@ margin-left: 10px; } } .blue-button { background-color: green; color: white; } .el-header { background-color: #576574; springboot-vue3/src/main/java/com/example/springboot/component/MessageHandler.java
@@ -204,6 +204,17 @@ public short[] convertBooleanListToShortArray(List<Boolean> booleanList) { short[] shortArray = new short[booleanList.size()]; for (int i = 0; i < booleanList.size(); i++) { boolean value = booleanList.get(i); shortArray[i] = value ? (short) 1 : (short) 0; } return shortArray; } springboot-vue3/src/main/java/com/example/springboot/component/PlcManualonePosition.java
@@ -206,7 +206,6 @@ // 写入A02 customS7Control.WriteWordToPLC(messageArray, addresses2, 1); // 写入B01 customS7Control.WriteWordToPLC(messageArray, addresses3, 2); springboot-vue3/src/main/java/com/example/springboot/component/PlcParameter2.java
@@ -15,20 +15,13 @@ import java.util.List; public class PlcParameter2 extends Thread { @Autowired StorageCageService storageCageService; // 用于存储应用程序的配置信息 private Configuration config; // 创建一个自定义的 S7 控制器消息处理器对象 MessageHandler customS7Control = new MessageHandler(); // 用于存储应用程序的配置信息 private Configuration config; public PlcParameter2() throws IOException { @@ -44,12 +37,12 @@ } catch (InterruptedException e) { e.printStackTrace(); } storageCageService = WebSocketServer.applicationContext.getBean(StorageCageService .class); storageCageService = WebSocketServer.applicationContext.getBean(StorageCageService.class); // id List<String> addressList1 = Arrays.asList(config.getProperty("Parameter2.id").split(",")); List<String> paramlist = S7control.getinstance().readStrings(addressList1); // System.out.println("addressList:" + paramlist); // System.out.println(paramlist); //手动状态 List<String> addresses = Arrays.asList(config.getProperty("Parameter2.state").split(",")); @@ -82,7 +75,7 @@ List<Short> data4 = S7control.getinstance().readWords(addresses4); //System.out.println(data); // List<Long> TIME2 = Collections.singletonList(S7control.getinstance().readtime("DB100.194")); // System.out.println("addressList:" + TIME2); @@ -104,19 +97,22 @@ // List<Short> data4 = new ArrayList<>(Arrays.asList(values4)); // // // JSONObject jsonObject = new JSONObject(); // short[] params = new short[data2.size()]; // for (int i = 0; i < data2.size(); i++) { // boolean value = data2.get(i); // params[i] = value ? (short) 1 : (short) 0; // } //// // short[] anniuparams = new short[anniuread.size()]; // for (int i = 0; i < anniuread.size(); i++) { // boolean value = anniuread.get(i); // anniuparams[i] = value ? (short) 1 : (short) 0; // } //boolean转为0 1 short[] params = customS7Control.convertBooleanListToShortArray(data2); short[] anniuparams = customS7Control.convertBooleanListToShortArray(anniuread); JSONObject jsonObject = new JSONObject(); short[] params = new short[data2.size()]; for (int i = 0; i < data2.size(); i++) { boolean value = data2.get(i); params[i] = value ? (short) 1 : (short) 0; } // short[] anniuparams = new short[anniuread.size()]; for (int i = 0; i < anniuread.size(); i++) { boolean value = anniuread.get(i); anniuparams[i] = value ? (short) 1 : (short) 0; } jsonObject.append("params", params); jsonObject.append("params", paramlist); jsonObject.append("params", data); @@ -142,16 +138,15 @@ if (webserver != null) { List<String> messages = webserver.getMessages(); if (!messages.isEmpty()) { // 将最后一个消息转换为整数类型的列表 String lastMessage = messages.get(messages.size() - 1); // System.out.println("lastMessage:" + lastMessage); JSONArray messageArray = new JSONArray(lastMessage); //清除ID // customS7Control.writeBitToPLC(messageArray, addressList0, 0); // customS7Control.writeBitToPLC(messageArray, addressList0, 0); try { @@ -177,10 +172,6 @@ System.out.println("messageValue: " + Arrays.asList(val) + " added to the list"); } catch (NumberFormatException e) { // 如果无法解析为 boolean 类型,则忽略该部分 System.err.println("Could not parse value: " + value); @@ -191,47 +182,44 @@ boolean containsOne = data.stream().anyMatch(number -> number == 1); for (int i = 1; i <= 5; i++) { boolean value = sValue.get(i); String id=paramlist.get(i); String id = paramlist.get(i); //判断是否自动状态 if(!containsOne) { //判断id是否包含数字 if(id.matches(".*\\d.*")){ //判断清楚id是否true if (value) { System.out.println(id); switch (i) { case 1: storageCageService.UpdateTask(2, 0, paramlist.get(i)); break; case 2: case 3: case 4: case 5: storageCageService.UpdateTask(3, 0, paramlist.get(i)); break; default: // 处理索引值不在范围内的情况 break; if (!containsOne) { //判断id是否包含数字 if (id.matches(".*\\d.*")) { //判断清楚id是否true if (value) { System.out.println(id); switch (i) { case 1: storageCageService.UpdateTask(2, 0, paramlist.get(i)); break; case 2: case 3: case 4: case 5: storageCageService.UpdateTask(3, 0, paramlist.get(i)); break; default: // 处理索引值不在范围内的情况 break; } } } } } // 检查布尔值列表是否为空 if (!sValue.isEmpty()) { } // 检查布尔值列表是否为空 if (!sValue.isEmpty()) { // 调用 S7control.getinstance().WriteBit 方法将布尔值列表写入地址列表 S7control.getinstance().WriteBit(addressList0, sValue); System.out.println("Values " + sValue + " written to PLC at address " + addressList0); } // 调用 S7control.getinstance().WriteBit 方法将布尔值列表写入地址列表 S7control.getinstance().WriteBit(addressList0, sValue); System.out.println("Values " + sValue + " written to PLC at address " + addressList0); } } } } catch (Exception e) { System.err.println("An error occurred while writing bit to PLC: " + e.getMessage()); } //急停 @@ -289,8 +277,6 @@ } catch (Exception e) { System.err.println("An error occurred while writing bit to PLC: " + e.getMessage()); } //存片等待延迟 springboot-vue3/src/main/java/com/example/springboot/component/S7control.java
@@ -353,7 +353,7 @@ try { return s7PLC.readTime(address); } catch (Exception e) { e.printStackTrace(); System.out.println("读取 " + address + " 失败:" + e.getMessage()); return null; } } springboot-vue3/src/main/java/com/example/springboot/config/AppRunnerConfig.java
@@ -19,22 +19,22 @@ //new PlcHold().start(); // new Plchome().start(); // // new Plcalarm().start(); // // new Plcsign().start(); // // // new Plcstate().start(); // new PlcPositioning1().start(); // // new PlcParameter2().start(); // // new PLCAutomaticParameterSetting().start(); // new PlcManualonePosition().start(); // new PlcManualonePosition2().start(); // new PlcServoManualone().start(); // new PLCManualJog().start(); new Plchome().start(); new Plcalarm().start(); new Plcsign().start(); new Plcstate().start(); new PlcPositioning1().start(); new PlcParameter2().start(); new PLCAutomaticParameterSetting().start(); new PlcManualonePosition().start(); new PlcManualonePosition2().start(); new PlcServoManualone().start(); new PLCManualJog().start(); } } springboot-vue3/src/main/java/com/example/springboot/mapper/HomeMapper.java
@@ -35,6 +35,8 @@ @Select("SELECT case when tier=1 then cage else 0 end as cage,case when tier=1 then state else 0 end as state,sum(case when tier=1 then glasswidth/2750*2 else 0 end) as glasswidth,sum(case when tier=2 then glasswidth/2750*2 else 0 end) as width from storage_cage where cage<=5 group by cage,cell order by cage desc,cell desc") List<StorageCage> selectRack4(); // 根据任务类型查询当前正在出片,进片的玻璃信息 @Select("select * from storage_cage where state=#{task_type}") List<StorageCage> selectinout(@Param("task_type") Integer task_type);