wu
2023-12-11 7f1806c6a01318f3b1eff38da7c7c41ae82ff8c0
Merge branch 'master' of http://10.153.19.25:10101/r/CanadaMes

# Conflicts:
# springboot-vue3/src/main/java/com/example/springboot/component/PlcHold.java
# springboot-vue3/src/main/java/com/example/springboot/config/AppRunnerConfig.java
37个文件已修改
7063 ■■■■ 已修改文件
CanadaMes-ui/src/api/home.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/configuration/Manualoneposition.json 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/configuration/Manualoneposition2.json 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/configuration/ServoManualone.json 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/lang/locales/en-US.json 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/lang/locales/zh-CN.json 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/layout/index.vue 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/Electrical/ManualJog.vue 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/Electrical/ManualonePosition.vue 65 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/Electrical/ManualonePosition2.vue 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/Electrical/Parameter2.vue 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/Electrical/ServoManualone.vue 135 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/home/index.vue 49 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/AuthorityApplication.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/PLCAutomaticParameterSetting.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/PLCManualJog.java 189 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/PlcHold.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/PlcManualonePosition.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/PlcManualonePosition2.java 342 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/PlcParameter.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/PlcParameter1.java 165 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/PlcParameter2.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/PlcPositioning1.java 79 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/PlcPositioning2.java 82 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/PlcServoManualone.java 398 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/Plcaction.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/Plcalarm.java 61 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/Plchome.java 126 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/Plcsign.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/Plcstate.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/WebSocketServer.java 311 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/config/AppRunnerConfig.java 45 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/controller/HomeController.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/mapper/HomeMapper.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/service/OutSliceServive.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/resources/config.properties 111 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/resources/sql/canadames.sql 4534 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/api/home.js
@@ -222,9 +222,9 @@
    })
}
export function CompleteQueue(id,frameid) {
export function CompleteQueue(id,frameid,glassid) {
    return request({
        url: '/home/CompleteQueue?id=' + id+'&frameid='+frameid,
        url: '/home/CompleteQueue?id=' + id+'&frameid='+frameid+'&glassid='+glassid,
        method: 'post',
        data:""
    })
CanadaMes-ui/src/configuration/Manualoneposition.json
@@ -154,7 +154,7 @@
    {
      "button": {
        "name": "未回零",
        "value": 0,
        "value": 1,
        "address": "DB10.0",
        "state": 1
      }
@@ -221,7 +221,7 @@
    {
      "button": {
        "name": "未回零",
        "value": 0,
        "value": 1,
        "address": "DB10.0",
        "state": 1
      }
CanadaMes-ui/src/configuration/Manualoneposition2.json
@@ -49,7 +49,7 @@
    {
      "button": {
        "name": "未回零",
        "value": 0,
        "value": 1,
        "address": "DB10.0",
        "state": 1
      }
@@ -113,7 +113,7 @@
    {
      "button": {
        "name": "未回零",
        "value": 0,
        "value": 1,
        "address": "DB10.0",
        "state": 1
      }
CanadaMes-ui/src/configuration/ServoManualone.json
@@ -195,7 +195,7 @@
        {
          "button": {
            "name": "未回零",
            "value":0,
            "value":1,
            "address":"DB10.0",
            "type":"66"
          }
@@ -236,7 +236,7 @@
      {
        "button": {
          "name": "未回零",
          "value":0,
          "value":1,
          "address":"DB10.0",
          "type":"66"
        }
@@ -283,7 +283,7 @@
      "button": {
        "name": "未回零",
        
        "value":0,
        "value":1,
        "address":"DB10.0",
        "type":"66"
      }
@@ -332,7 +332,7 @@
          } ,{
            "button": {
              "name": "未回零",
              "value":0,
              "value":1,
              "address":"DB10.0",
              "type":"66"
            }
CanadaMes-ui/src/lang/locales/en-US.json
@@ -325,7 +325,8 @@
  "Unable to find whether the aluminum frame is flipped or not":"Unable to find whether the aluminum frame is flipped or not",
  "You do not have this permission":"You do not have this permission",
  "This glass is already in the Queue":"This glass is already in the Queue",
  "complete":"complete",
  "Complete":"Complete",
  "Not Allow":"Not Allow",
    "ServoManualone": {
      "A01 所在格子": "A01 Current Grid",
      "数量": "Quantity",
CanadaMes-ui/src/lang/locales/zh-CN.json
@@ -317,7 +317,8 @@
  "Unable to find the placement method of the aluminum frame":"查询不到铝框摆放方式",
  "Unable to find whether the aluminum frame is flipped or not":"查询不到铝框是否翻转",
  "This glass is already in the Queue":"此玻璃已在出片队列中",
  "complete":"完成",
  "Complete":"完成",
  "Not Allow":"不允许",
  "langparameter": {
    "conveyor Velocity(Auto FAST)": "D01-D06 皮带输送自动快速",
    "conveyor Velocity(Auto SLOW)": "D01-D06 皮带输送自动慢速",
CanadaMes-ui/src/layout/index.vue
@@ -228,15 +228,15 @@
      });
    }
  },
  watch: {
    '$route'(to) {
      // 切换路由时更新激活的标签
      const tag = this.menuList.some(item => item.menuLists.some(menu => '/' + menu.router === to.path));
      if (tag) {
        this.activeTag = tag;
      }
    }
  }
  // watch: {
  //   '$route'(to) {
  //     // 切换路由时更新激活的标签
  //     const tag = this.menuList.some(item => item.menuLists.some(menu => '/' + menu.router === to.path));
  //     if (tag) {
  //       this.activeTag = tag;
  //     }
  //   }
  // }
}
</script>
CanadaMes-ui/src/views/Electrical/ManualJog.vue
@@ -49,8 +49,8 @@
      
    </el-breadcrumb>
    <el-row :gutter="1">
      <el-col :span="24" v-for="(dataGroup, groupIndex) in jsonData" :key="groupIndex">
    <el-row :gutter="40" style="width:100%;">
      <el-col :span="18" v-for="(dataGroup, groupIndex) in jsonData" :key="groupIndex">
        <el-card class="json-block" style="width:100%;">
          <div class="button-row" style="display: flex; justify-content: flex-start;flex-wrap:wrap;">
@@ -128,16 +128,16 @@
    },
    //根据读取PLC的值,根据名称改变颜色1打开,0关闭
    getStatusClass (zhuangtai) {
// console.log(zhuangtai);
      if (zhuangtai === 1) {
        return "op";
      }
      else {
        return "dow";
      }
//     getStatusClass (zhuangtai) {
// // console.log(zhuangtai);
//       if (zhuangtai === 1) {
//         return "op";
//       }
//       else {
//         return "dow";
//       }
    },
//     },
    initWebSocket () {
      let viewname = "ManualJog";
CanadaMes-ui/src/views/Electrical/ManualonePosition.vue
@@ -50,7 +50,7 @@
    <el-row :gutter="10">
      <el-col :span="12" v-for="(dataGroup, groupIndex) in jsonData" :key="groupIndex">
        <el-card class="json-block" style="width:585px;">
        <el-card class="json-block" style="width:585px;margin-bottom: 10px;">
          <div v-for="(item, itemIndex) in dataGroup" :key="itemIndex" class="item-container">
            <div class="item-row">
              <span class="name" style="width:300px;">{{ item.name }}</span>
@@ -62,12 +62,12 @@
            <div v-for="(item, itemIndex) in dataGroup" :key="itemIndex">
              <el-button v-if="item.button && language === 'en-US' && item.state != 0" :name="item.button.name"
                v-model="item.button.value"
                :class="{ 'action-button': true, 'error-button': item.button.name === 'Fault' && item.button.value === 1, 'error-button2': item.button.name === 'NotZero' && item.button.value === 0,'greenbutton': item.button.name !== 'NotZero' && item.button.name !== 'Fault' && item.button.value === 1 }"
                :class="{ 'action-button': true, 'error-button': item.button.name === 'Fault' && item.button.value === 1, 'error-button2': item.button.name === 'NotZero' && item.button.value === 0,'error-button3': item.button.name === 'NotZero' && item.button.value === 1,'greenbutton': item.button.name !== 'NotZero' && item.button.name !== 'Fault' && item.button.value === 1 }"
                @click="updateButtonValue(dataGroup, itemIndex); submitDataToBackend(item.button.name);">{{
                  item.button.name }}</el-button>
              <el-button v-if="item.button && language === 'zh-CN' && item.state != 0" :name="item.button.name"
                v-model="item.button.value"
                :class="{ 'action-button': true, 'error-button': item.button.name === '故障' && item.button.value === 1, 'error-button2': item.button.name === '未回零' && item.button.value === 0,'greenbutton': item.button.name !== '未回零' && item.button.name !== '故障' && item.button.value === 1 }"
                :class="{ 'action-button': true, 'error-button': item.button.name === '故障' && item.button.value === 1, 'error-button2': item.button.name === '未回零' && item.button.value === 0,'error-button3': item.button.name === '未回零' && item.button.value === 1,'greenbutton': item.button.name !== '未回零' && item.button.name !== '故障' && item.button.value === 1 }"
                @click="updateButtonValue(dataGroup, itemIndex); submitDataToBackend(item.button.name);">{{
                  item.button.name }}</el-button>
            </div>
@@ -351,8 +351,39 @@
                });
              }
              //更新实时位置
              jsonData2.forEach((item) => {
              //改变状态文字
// for (let i = 2; i < jsonData2.length; i++) {
//   let arr6 = jsonData2[i];
//   for (let j = 2; j < arr6.length; j++) {
//     let obj6 = arr6[j];
//     if (obj6.button&& (obj6.button.name === "未回零" || obj6.button.name === "NotZero")) {
//       if ( obj6.button.name.includes("未")&& this.language==="zh-CN") {
//         console.log(obj6.button.name)
//       obj6.button.name =obj6.button.name.replace("未","已") ;
//     }
//     if ( obj6.button.name.includes("NotZero")) {
//       obj6.button.name =obj6.button.name.replace("NotZero","Zero") ;
//     }
//   }
// }
// }
            }
          }, 50);
          document.addEventListener('mouseover', handleMouseMove);
           //更新实时位置
           jsonData2.forEach((item) => {
                item.forEach((subItem) => {
                  if (subItem.sending === 4) {
                    subItem.value = obj.shishi1[0][0];
@@ -413,12 +444,26 @@
              }
//改变未回零文字
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.button && obj.button.value===1) {
      if ( obj.button.name.includes("未回零")&& this.language==="zh-CN") {
      obj.button.name =obj.button.name.replace("未回零","已回零") ;
    }
    if ( obj.button.name.includes("NotZero")) {
      obj.button.name =obj.button.name.replace("NotZero","Zero") ;
    }
  }
}
}
            }
          }, 200);
          document.addEventListener('mouseover', handleMouseMove);
        };
@@ -506,4 +551,8 @@
  background-color: green;
}
.error-button3{
  background-color: green;
}
</style>
CanadaMes-ui/src/views/Electrical/ManualonePosition2.vue
@@ -125,6 +125,7 @@
    },
    //提交方法
    submitDataToBackend (currentButtonName) {
      if (currentButtonName === 'A01翻转启动' || currentButtonName === 'A01 SERVE TURN') {
        const data = [];
@@ -308,8 +309,18 @@
                });
              });
              // 遍历guzhang数组
              for (let i = 0; i < jsonData2.length; i++) {
            }
          }, 50);
          document.addEventListener('mouseover', handleMouseMove);
  // 遍历guzhang数组
  for (let i = 0; i < jsonData2.length; i++) {
                let arr = jsonData2[i];
                for (let j = 0; j < arr.length; j++) {
                  let obj2 = arr[j];
@@ -324,7 +335,7 @@
                
//未回零
              for (let i = 0; i < jsonData2.length; i++) {
                let arr2 = jsonData2[i];
                for (let j = 0; j < arr2.length; j++) {
@@ -356,13 +367,24 @@
              }
              //改变未回零文字
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.button && obj.button.value===1) {
      if ( obj.button.name.includes("未回零")&& this.language==="zh-CN") {
      obj.button.name =obj.button.name.replace("未回零","已回零") ;
    }
    if ( obj.button.name.includes("NotZero")) {
      obj.button.name =obj.button.name.replace("NotZero","Zero") ;
    }
  }
}
}
            }
          }, 50);
          document.addEventListener('mouseover', handleMouseMove);
        };
CanadaMes-ui/src/views/Electrical/Parameter2.vue
@@ -254,7 +254,7 @@
      const parms = obj.params;
   
  //  console.log(obj);
     console.log(obj);
@@ -264,8 +264,7 @@
  // if (parms && inputBox && Array.from(inputBox).every(box => !box.contains(target))) {
//急停按钮
    jsonData2[13][0].button.value = obj.jiting[0][0];
    // jsonData2[13][0].button.value = obj.jiting[0][0];
    //清除id
@@ -434,7 +433,6 @@
},
    send () {
     
      socket?.send(JSON.stringify(this.messagepack));
    }
CanadaMes-ui/src/views/Electrical/ServoManualone.vue
@@ -63,8 +63,8 @@
      </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 && language === 'en-US' " :name="item.button.name" v-model="item.button.value" :class="{'action-button': true, 'error-button': item.button.name === 'Fault' && item.button.value === 1,'error-button2': item.button.name === 'NotZero' && item.button.value === 0,'fuwei': item.button.name === 'Reset' && item.button.value === 1,'huiling': item.button.name === 'Home' && item.button.value === 1,'qidong': item.button.name === 'A01 Semi-Auto' && item.button.value === 1,'qidong2': item.button.name === 'A02 Semi-Auto' && item.button.value === 1,'qidong3': item.button.name === 'A01 Semi-Auto Start' && item.button.value === 1,'qidong4': item.button.name === 'A02 Semi-Auto Start' && item.button.value === 1,'qidong5': item.button.name === 'A02 Semi-Auto Start' && item.button.value === 1,'jiting': item.button.name === 'Abort/ResumeTasks' && item.button.value === 1}" @click="updateButtonValue(dataGroup, itemIndex); submitDataToBackend(item.button.name);">{{ item.button.name }}</el-button>
          <el-button v-if="item.button && language === 'zh-CN' " :name="item.button.name" v-model="item.button.value" :class="{'action-button': true, 'error-button': item.button.name === '故障' && item.button.value === 1,'error-button2': item.button.name === '未回零' && item.button.value === 0,'fuwei': item.button.name === '复位' && item.button.value === 1,'huiling': item.button.name === '回零' && item.button.value === 1,'qidong': item.button.name === 'A01半自动' && item.button.value === 1,'qidong2': item.button.name === 'A02半自动' && item.button.value === 1,'qidong3': item.button.name === 'A01半自动启动' && item.button.value === 1,'qidong4': item.button.name === 'A02半自动启动' && item.button.value === 1,'qidong5': item.button.name === 'A02半自动' && item.button.value === 1,'jiting': 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 && language === 'en-US' " :name="item.button.name" v-model="item.button.value" :class="{'action-button': true, 'error-button': item.button.name === 'Fault' && item.button.value === 1,'error-button2': item.button.name === 'NotZero' && item.button.value === 0,'error-button3': item.button.name === 'NotZero' && item.button.value === 1,'fuwei': item.button.name === 'Reset' && item.button.value === 1,'huiling': item.button.name === 'Home' && item.button.value === 1,'qidong': item.button.name === 'A01 Semi-Auto' && item.button.value === 1,'qidong2': item.button.name === 'A02 Semi-Auto' && item.button.value === 1,'qidong3': item.button.name === 'A01 Semi-Auto Start' && item.button.value === 1,'qidong4': item.button.name === 'A02 Semi-Auto Start' && item.button.value === 1,'qidong5': item.button.name === 'A02 Semi-Auto Start' && item.button.value === 1,'jiting': item.button.name === 'Abort/ResumeTasks' && item.button.value === 1}" @click="updateButtonValue(dataGroup, itemIndex); submitDataToBackend(item.button.name);">{{ item.button.name }}</el-button>
          <el-button v-if="item.button && language === 'zh-CN' " :name="item.button.name" v-model="item.button.value" :class="{'action-button': true, 'error-button': item.button.name === '故障' && item.button.value === 1,'error-button3': item.button.name === '未回零' && item.button.value === 1,'error-button2': item.button.name === '未回零' && item.button.value === 0,'fuwei': item.button.name === '复位' && item.button.value === 1,'huiling': item.button.name === '回零' && item.button.value === 1,'qidong': item.button.name === 'A01半自动' && item.button.value === 1,'qidong2': item.button.name === 'A02半自动' && item.button.value === 1,'qidong3': item.button.name === 'A01半自动启动' && item.button.value === 1,'qidong4': item.button.name === 'A02半自动启动' && item.button.value === 1,'qidong5': item.button.name === 'A02半自动' && item.button.value === 1,'jiting': item.button.name === '急停后中止/继续选择' && item.button.value === 1  }" @click="updateButtonValue(dataGroup, itemIndex); submitDataToBackend(item.button.name);">{{ item.button.name }}</el-button>
        </div>
      </div>
    </el-card>
@@ -157,7 +157,7 @@
  data.push(values);
 
}
data.push([],[], [],);
data.push([], [],[]);
const jsonObject = { data };
@@ -185,7 +185,7 @@
}
data2.unshift([]);
data2.push([], []);
data2.push([], [],[]);
for (let i = 1; i < 2; i++) {
  const inputData = this.jsonData[i].filter(item => item.type === '0' && item.read == 8888).map(item => {
@@ -195,7 +195,7 @@
  const values2 = inputData.map(item => item.value);
  data2.push(values2);
  data2.push([], [],[], []);
  data2.push( [],[], []);
 
}
@@ -468,7 +468,7 @@
  }
  let obj = JSON.parse(msg.data);
   console.log(obj)
  //  console.log(obj)
const weihuiling=obj.weihuiling;
  const jsonData2 = this.jsonData;
@@ -478,29 +478,10 @@
  if (obj.zuhe1 && inputBox && Array.from(inputBox).every(box => !box.contains(target))) {
    
    //启动按钮
 
    jsonData2[0][9].button.value = obj.qidong[0][0];  // 第一个子数组中第一个 type=66 的 button
jsonData2[0][10].button.value = obj.qidong[0][1]; // 第一个子数组中第二个 type=66 的 button
jsonData2[1][7].button.value = obj.qidong[0][2];  // 第二个子数组中第一个 type=66 的 button
jsonData2[1][8].button.value = obj.qidong[0][3];
// 输出更新后的 jsonData2
    
    // 执行更新逻辑
    for (let i = 0; i < 6; i++) {
@@ -511,8 +492,41 @@
  });
}
//进片id
jsonData2.forEach((item) => {
  item.forEach((subItem) => {
    if (subItem.read === 9999) {
      subItem.value = obj.jinpianid[0];
    }
  });
});
//取片id
jsonData2.forEach((item) => {
  item.forEach((subItem) => {
    if (subItem.read === 8888) {
      subItem.value = obj.qupianid[0];
    }
  });
});
//故障更新
  }
}, 50);
  document.addEventListener('mouseover', handleMouseMove);
  jsonData2[0][9].button.value = obj.qidong[0][0];  // 第一个子数组中第一个 type=66 的 button
jsonData2[0][10].button.value = obj.qidong[0][1]; // 第一个子数组中第二个 type=66 的 button
jsonData2[1][7].button.value = obj.qidong[0][2];  // 第二个子数组中第一个 type=66 的 button
jsonData2[1][8].button.value = obj.qidong[0][3];
  //故障更新
for (let i = 0; i < jsonData2.length; i++) {
  let arr = jsonData2[i];
@@ -542,11 +556,6 @@
}
//未回零更新
jsonData2[2][3].button.value = weihuiling[0][0]; 
@@ -554,53 +563,32 @@
jsonData2[4][4].button.value = weihuiling[0][2];  
jsonData2[5][4].button.value = weihuiling[0][3];
// for (let i = 3; i < jsonData2.length; i++) {
//   let arr2 = jsonData2[i];
//   for (let j = 3; j < arr2.length; j++) {
//     let obj3 = arr2[j];
//     if(obj3.button){
//       if (obj3.button && (obj3.button.name === "未回零" || obj3.button.name === "NotZero" )) {
//       obj3.button.value = weihuiling[0][i];
//       //  console.log(obj3.button.value)
//     }
//     }
//   }
// if(jsonData2[2][3].button.value===1){
//   jsonData2[2][3].button.name.replace("未回零","回零") ;
// }
// console.log(jsonData2)
//进片id
jsonData2.forEach((item) => {
  item.forEach((subItem) => {
    if (subItem.read === 9999) {
      subItem.value = obj.jinpianid[0];
    }
  });
});
//取片id
jsonData2.forEach((item) => {
  item.forEach((subItem) => {
    if (subItem.read === 8888) {
      subItem.value = obj.qupianid[0];
    }
  });
});
//急停
// console.log(jsonData2[5][4].button.value)
if(jsonData2[2][3].button.value===1){
  jsonData2[2][3].button.name=jsonData2[2][3].button.name.replace("未回零","已回零") ;
  jsonData2[2][3].button.name=jsonData2[2][3].button.name.replace("NotZero","Zero") ;
}
if(jsonData2[3][3].button.value===1){
  jsonData2[3][3].button.name=jsonData2[3][3].button.name.replace("未回零","已回零") ;
  jsonData2[3][3].button.name=jsonData2[3][3].button.name.replace("NotZero","Zero") ;
}
if(jsonData2[4][4].button.value===1){
  jsonData2[4][4].button.name=jsonData2[4][4].button.name.replace("未回零","已回零") ;
  jsonData2[4][4].button.name=jsonData2[4][4].button.name.replace("NotZero","Zero") ;
}
if(jsonData2[5][4].button.value===1){
  jsonData2[5][4].button.name=jsonData2[5][4].button.name.replace("未回零","已回零") ;
  jsonData2[5][4].button.name=jsonData2[5][4].button.name.replace("NotZero","Zero") ;
}
  }
}, 50);
  document.addEventListener('mouseover', handleMouseMove);
   
};
@@ -716,4 +704,9 @@
.jiting{
  background-color: green;
}
.error-button3{
  background-color: green;
}
</style>
CanadaMes-ui/src/views/home/index.vue
@@ -634,7 +634,7 @@
            <el-button type="primary" @click="isAllowReorderingState()" :disabled="this.isAllowQueue">{{
                this.isAllowReordering == true ? $t('Not Allow') : $t('Allow')
            }}</el-button>
            <el-table :data="this.OutSlice" :height="700" :span-method="objectSpanMethod" border
            <el-table :data="this.OutSlice" :height="700" :span-method="objectSpanMethod" border :cell-style="cellStyle"
                style="width: 100%;overflow: auto;">
                <el-table-column prop="glassId" :label="$t('Barcode')"></el-table-column>
                <el-table-column prop="storageCage.orderId" :label="$t('Order No')"></el-table-column>
@@ -648,13 +648,22 @@
                    </template>
                </el-table-column>
                <el-table-column prop="sequence" :label="$t('Sequence')"></el-table-column>
                <el-table-column prop="position" :label="$t('Position')"></el-table-column>
                <el-table-column prop="position" :label="$t('Position')">
                    <template slot-scope='scope'>
                        {{ scope.row.position==1?$t('Yes'):$t('No') }}
                    </template>
                </el-table-column>
                <el-table-column prop="position" :label="$t('Flip')">
                    <template slot-scope='scope'>
                        {{ scope.row.flip==1?$t('Yes'):$t('No') }}
                    </template>
                </el-table-column>
                <el-table-column prop="barcode" :label="$t('Frame No')"></el-table-column>
                <el-table-column prop="barcode" :label="$t('Complete')">
                    <template slot-scope='scope'>
                        <el-button type="primary" style="padding: 4px 10px;font-size: 12px;" :disabled="!isAllowQueue"
                            @click="CompleteQueue(scope.row.id,scope.row.barcode)">{{ $t('Complete') }}</el-button>
                            @click="CompleteQueue(scope.row.id,scope.row.barcode,scope.row.glassId)">{{ $t('Complete') }}</el-button>
                    </template>
                </el-table-column>
                <el-table-column :width="280" :label="$t('Operate')">
@@ -809,14 +818,18 @@
            ManuallyInfeedGlass: true,
            OutingQueue: true,
            OrderInfo: true,
            CageDetails: true
            CageDetails: true,
        };
    },
    created() {
        this.load();
        this.init();
    },
    }
    ,
    methods: {
        init() {
            let viewname = "Home";
            if (typeof (WebSocket) == "undefined") {
@@ -927,13 +940,13 @@
                        if (item.permissionId == "32" && item.state == 1) {
                            this.ManuallyInfeedGlass = false;
                        }
                        if (item.permissionId == "32" && item.state == 1) {
                        if (item.permissionId == "33" && item.state == 1) {
                            this.OutingQueue = false;
                        }
                        if (item.permissionId == "33" && item.state == 1) {
                        if (item.permissionId == "34" && item.state == 1) {
                            this.OrderInfo = false;
                        }
                        if (item.permissionId == "34" && item.state == 1) {
                        if (item.permissionId == "35" && item.state == 1) {
                            this.CageDetails = false;
                        }
                    });
@@ -1575,6 +1588,20 @@
            });
        }
        ,
         cellStyle({ row, column, rowIndex, columnIndex }) {
 // console.log(row, column, "ss");
 column=rowIndex;
 rowIndex=column;
 let style="";
 if (columnIndex === 8&&row.position==1) {
 style="background-Color:yellow;";
 }
 if (columnIndex === 9&&row.flip==1) {
 style="background-Color:yellow;";
 }
 return style;
 }
        ,
        //合并行
        objectSpanMethod({ row, column, rowIndex, columnIndex }) {
            // console.log(row, column, "ss");
@@ -1589,7 +1616,7 @@
            if (rowIndex != 0) {
                barcode2 = arrOutSlice[rowIndex - 1].barcode;
            }
            if (columnIndex === 11) {
            if (columnIndex === 12) {
                if (barcode != barcode2) {
                    // this.FrameNoFlag = barcode;
                    for (let i = rowIndex; i < this.OutSlice.length; i++) {
@@ -1651,8 +1678,8 @@
            this.form5 = {};
        },
        //手动完成出片任务
        CompleteQueue(id,frameid) {
            CompleteQueue(id,frameid).then(res => {
        CompleteQueue(id,frameid,glassid) {
            CompleteQueue(id,frameid,glassid).then(res => {
                if (res.data.message == 200) {
                    this.$message.success(this.$t('Operation successful'));
                }
springboot-vue3/src/main/java/com/example/springboot/AuthorityApplication.java
@@ -4,7 +4,7 @@
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import com.example.springboot.component.WebSocketServer;
import com.example.springboot.component.*;
@SpringBootApplication
springboot-vue3/src/main/java/com/example/springboot/component/PLCAutomaticParameterSetting.java
@@ -92,15 +92,19 @@
      jsonObject.append("dache1", dache1);
      jsonObject.append("xiaoche", xiaoche1);
      jsonObject.append("fanzhuan", fanzhuan1);
      WebSocketServer sendwServer = WebSocketServer.sessionMap.get("AutomaticParameterSetting");
//
//      WebSocketServer sendwServer = WebSocketServer.sessionMap.get("AutomaticParameterSetting");
//      if (sendwServer != null) {
//        sendwServer.sendMessage(jsonObject.toString());
//      }
      ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("AutomaticParameterSetting");
      if (sendwServer != null) {
        sendwServer.sendMessage(jsonObject.toString());
      }
        for (WebSocketServer webserver : sendwServer) {
          webserver.sendMessage(jsonObject.toString());
      WebSocketServer webSocketServer = WebSocketServer.sessionMap.get("AutomaticParameterSetting");
      if (webSocketServer != null) {
        List<String> messages = webSocketServer.getMessages();
//      WebSocketServer webSocketServer = WebSocketServer.sessionMap.get("AutomaticParameterSetting");
      if (webserver != null) {
        List<String> messages = webserver.getMessages();
        String addressList1 = "DB100.120";
        String addressList2 = "DB100.18";
        String addressList3 = "DB100.22";
@@ -140,7 +144,7 @@
                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);
                        .println("messageValue:" + Arrays.asList(sValue) + " written to PLC at address " + addressList2);
              } catch (NumberFormatException e) {
                // 如果无法解析为 short 类型,则忽略该部分
                System.err.println("Could not parse value: " + value);
@@ -157,7 +161,7 @@
                short sValue = Short.parseShort(cleanedValue.trim());
                S7control.getinstance().WriteWord(addressList3, Arrays.asList(sValue));
                System.out
                    .println("messageValue:" + Arrays.asList(sValue) + " written to PLC at address " + addressList3);
                        .println("messageValue:" + Arrays.asList(sValue) + " written to PLC at address " + addressList3);
              } catch (NumberFormatException e) {
                // 如果无法解析为 short 类型,则忽略该部分
                System.err.println("Could not parse value: " + value);
@@ -174,7 +178,7 @@
                short sValue = Short.parseShort(cleanedValue.trim());
                S7control.getinstance().WriteWord(addressList4, Arrays.asList(sValue));
                System.out
                    .println("messageValue:" + Arrays.asList(sValue) + " written to PLC at address " + addressList4);
                        .println("messageValue:" + Arrays.asList(sValue) + " written to PLC at address " + addressList4);
              } catch (NumberFormatException e) {
                // 如果无法解析为 short 类型,则忽略该部分
                System.err.println("Could not parse value: " + value);
@@ -189,8 +193,9 @@
          }
          // 清空消息列表
          webSocketServer.clearMessages();
          webserver.clearMessages();
        }
      }}
      }
springboot-vue3/src/main/java/com/example/springboot/component/PLCManualJog.java
@@ -125,109 +125,116 @@
      jsonObject.append("params", params);
//      System.out.println("messageValue:" + arraylist +"messageValue2:" + arraylist2 );
      WebSocketServer sendwServer = WebSocketServer.sessionMap.get("ManualJog");
//      WebSocketServer sendwServer = WebSocketServer.sessionMap.get("ManualJog");
//      if (sendwServer != null) {
//        sendwServer.sendMessage(jsonObject.toString());
//      }
      ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("ManualJog");
      if (sendwServer != null) {
        sendwServer.sendMessage(jsonObject.toString());
      }
        for (WebSocketServer webserver : sendwServer) {
          webserver.sendMessage(jsonObject.toString());
      WebSocketServer webSocketServer = WebSocketServer.sessionMap.get("ManualJog");
//      WebSocketServer webSocketServer = WebSocketServer.sessionMap.get("ManualJog");
      if (webSocketServer != null) {
 //       String addressList1 = "DB101.0.0";
          if (webserver != null) {
            //       String addressList1 = "DB101.0.0";
//        String addressList2 = "DB101.2.6";
        String addressList3 = "DB101.5.2";
            String addressList3 = "DB101.5.2";
        List<String> addressList2 = new ArrayList<>();
        addressList2.add("DB101.2.6");
        addressList2.add("DB101.2.7");
        addressList2.add("DB101.3.0");
        addressList2.add("DB101.3.1");
        addressList2.add("DB101.3.2");
        addressList2.add("DB101.3.3");
        addressList2.add("DB101.3.4");
        addressList2.add("DB101.3.5");
            List<String> addressList2 = new ArrayList<>();
            addressList2.add("DB101.2.6");
            addressList2.add("DB101.2.7");
            addressList2.add("DB101.3.0");
            addressList2.add("DB101.3.1");
            addressList2.add("DB101.3.2");
            addressList2.add("DB101.3.3");
            addressList2.add("DB101.3.4");
            addressList2.add("DB101.3.5");
        List<String> addressList211 = new ArrayList<>();
        addressList211.add("DB101.0.0");
        addressList211.add("DB101.0.1");
        addressList211.add("DB101.0.2");
        addressList211.add("DB101.0.3");
        addressList211.add("DB101.0.4");
        addressList211.add("DB101.0.5");
        addressList211.add("DB101.0.6");
        addressList211.add("DB101.0.7");
        addressList211.add("DB101.1.0");
        addressList211.add("DB101.1.1");
        addressList211.add("DB101.1.2");
        addressList211.add("DB101.1.3");
        addressList211.add("DB101.1.4");
        addressList211.add("DB101.1.5");
        addressList211.add("DB101.1.6");
        addressList211.add("DB101.1.7");
            List<String> addressList211 = new ArrayList<>();
            addressList211.add("DB101.0.0");
            addressList211.add("DB101.0.1");
            addressList211.add("DB101.0.2");
            addressList211.add("DB101.0.3");
            addressList211.add("DB101.0.4");
            addressList211.add("DB101.0.5");
            addressList211.add("DB101.0.6");
            addressList211.add("DB101.0.7");
            addressList211.add("DB101.1.0");
            addressList211.add("DB101.1.1");
            addressList211.add("DB101.1.2");
            addressList211.add("DB101.1.3");
            addressList211.add("DB101.1.4");
            addressList211.add("DB101.1.5");
            addressList211.add("DB101.1.6");
            addressList211.add("DB101.1.7");
        List<String> addressList311 = new ArrayList<>();
        addressList311.add("DB101.5.2");
        addressList311.add("DB101.5.3");
            List<String> addressList311 = new ArrayList<>();
            addressList311.add("DB101.5.2");
            addressList311.add("DB101.5.3");
        List<String> messages = webSocketServer.getMessages();
        if (!messages.isEmpty()) {
          // 将最后一个消息转换为整数类型的列表
          String lastMessage = messages.get(messages.size() - 1);
          // System.out.println("messages:" + messages);
          String[] parts = lastMessage.split(",");
          List<Integer> messageValues = new ArrayList<>();
          for (String part : parts) {
            try {
              // 使用正则表达式清除非数字字符
              String cleanedPart = part.replaceAll("[^0-9-]", "");
              Integer value = Integer.parseInt(cleanedPart.trim());
              messageValues.add(value);
            } catch (NumberFormatException e) {
              // 如果无法解析为整数类型,则忽略该部分
              // e.printStackTrace();
            List<String> messages = webserver.getMessages();
            if (!messages.isEmpty()) {
              // 将最后一个消息转换为整数类型的列表
              String lastMessage = messages.get(messages.size() - 1);
              // System.out.println("messages:" + messages);
              String[] parts = lastMessage.split(",");
              List<Integer> messageValues = new ArrayList<>();
              for (String part : parts) {
                try {
                  // 使用正则表达式清除非数字字符
                  String cleanedPart = part.replaceAll("[^0-9-]", "");
                  Integer value = Integer.parseInt(cleanedPart.trim());
                  messageValues.add(value);
                } catch (NumberFormatException e) {
                  // 如果无法解析为整数类型,则忽略该部分
                  // e.printStackTrace();
                }
              }
              // 将消息值转换为布尔列表
              List<Boolean> messageBooleans = new ArrayList<>();
              for (Integer value : messageValues) {
                messageBooleans.add(value == 1 ? true : false);
              }
              // System.out.println(messageBooleans);
              List<Boolean> bolList = new ArrayList<>();
              List<Boolean> bolList2 = new ArrayList<>();
              List<Boolean> bolList3 = new ArrayList<>();
              for (int i = 0; i < 16 && i < messageBooleans.size(); i++) {
                bolList.add(messageBooleans.get(i));
              }
              for (int i = 16; i < 24 && i < messageBooleans.size(); i++) {
                bolList2.add(messageBooleans.get(i));
              }
              for (int i = 24; i < 26 && i < messageBooleans.size(); i++) {
                bolList3.add(messageBooleans.get(i));
              }
              // System.out.println(bolList);
              // System.out.println(bolList2);
              // System.out.println(bolList3);
              if (!bolList.isEmpty()) {
                S7control.getinstance().WriteBit(addressList211, bolList);
                System.out.println("messageValue:" + bolList + " written to PLC at address " + addressList211);
              }
              if (!bolList2.isEmpty()) {
                S7control.getinstance().WriteBit(addressList2, bolList2);
                System.out.println("messageValue:" + bolList2 + " written to PLC at address " + addressList2);
              }
              if (!bolList3.isEmpty()) {
                S7control.getinstance().WriteBit(addressList311, bolList3);
                System.out.println("messageValue:" + bolList3 + " written to PLC at address " + addressList311);
              }
              webserver.clearMessages();
            }
          }
          // 将消息值转换为布尔列表
          List<Boolean> messageBooleans = new ArrayList<>();
          for (Integer value : messageValues) {
            messageBooleans.add(value == 1 ? true : false);
          }
          // System.out.println(messageBooleans);
          List<Boolean> bolList = new ArrayList<>();
          List<Boolean> bolList2 = new ArrayList<>();
          List<Boolean> bolList3 = new ArrayList<>();
          for (int i = 0; i < 16 && i < messageBooleans.size(); i++) {
            bolList.add(messageBooleans.get(i));
          }
          for (int i = 16; i < 24 && i < messageBooleans.size(); i++) {
            bolList2.add(messageBooleans.get(i));
          }
          for (int i = 24; i < 26 && i < messageBooleans.size(); i++) {
            bolList3.add(messageBooleans.get(i));
          }
          // System.out.println(bolList);
          // System.out.println(bolList2);
          // System.out.println(bolList3);
          if (!bolList.isEmpty()) {
            S7control.getinstance().WriteBit(addressList211, bolList);
            System.out.println("messageValue:" + bolList + " written to PLC at address " + addressList211);
          }
          if (!bolList2.isEmpty()) {
          S7control.getinstance().WriteBit(addressList2, bolList2);
            System.out.println("messageValue:" + bolList2 + " written to PLC at address " + addressList2);
          }
          if (!bolList3.isEmpty()) {
           S7control.getinstance().WriteBit(addressList311, bolList3);
            System.out.println("messageValue:" + bolList3 + " written to PLC at address " + addressList311);
          }
          webSocketServer.clearMessages();
        }
      }
springboot-vue3/src/main/java/com/example/springboot/component/PlcHold.java
@@ -39,7 +39,7 @@
      // // TODO Auto-generated catch block
      // e.printStackTrace(); 
      // }
      spianService.selectAll("X12345610102GV");
      //spianService.selectAll("X12345610102GV");
      List<Short> datas1List = S7control.getinstance().ReadWord("DB106.24", 1);// 获取prc进片请求数据
      List<Short> datas1ListState = S7control.getinstance().ReadWord("DB106.8", 1);// 获取进片车状态
      List<Short> datas1ListState2 = S7control.getinstance().ReadWord("DB105.16", 1);// 获取进片车任务是否启动
springboot-vue3/src/main/java/com/example/springboot/component/PlcManualonePosition.java
@@ -84,10 +84,10 @@
      addresses4.add("DB103.40");
      List<Short> arraylist4 = S7control.getinstance().readWords(addresses4);
      List<Short> arraylist5 = S7control.getinstance().ReadWord("DB103.40", 1);
      List<Short> arraylist6 = S7control.getinstance().ReadWord("DB103.44", 1);
      List<Short> arraylist7 = S7control.getinstance().ReadWord("DB103.48", 1);
      List<Short> arraylist8 = S7control.getinstance().ReadWord("DB103.50", 1);
      List<Short> arraylist5 = S7control.getinstance().ReadWord("DB106.0", 1);
      List<Short> arraylist6 = S7control.getinstance().ReadWord("DB106.12", 1);
      List<Short> arraylist7 = S7control.getinstance().ReadWord("DB106.40", 1);
      List<Short> arraylist8 = S7control.getinstance().ReadWord("DB106.50", 1);
      List<String> addresses9 = new ArrayList<>();
      addresses9.add("DB104.1.2");
      addresses9.add("DB104.1.3");
@@ -116,7 +116,7 @@
      List<Boolean> B01readstart = S7control.getinstance().readBits(B01start);
      List<Boolean> B02readstart = S7control.getinstance().readBits(B02start);
      short[] combinedBinaryShortArray = PlcManualonePosition.PLCBooleanConverter.convertListsToBinaryShortArray(
      short[] combinedBinaryShortArray = PLCBooleanConverter.convertListsToBinaryShortArray(
              A01readstart,  A02readstart,B01readstart, B02readstart
      );
@@ -167,14 +167,19 @@
      jsonObject.append("weihuiling", params3);
      jsonObject.append("qidong", combinedBinaryShortArray);
      WebSocketServer sendwServer = WebSocketServer.sessionMap.get("ManualonePosition");
      if (sendwServer != null) {
        sendwServer.sendMessage(jsonObject.toString());
      }
//      WebSocketServer sendwServer = WebSocketServer.sessionMap.get("ManualonePosition");
//      if (sendwServer != null) {
//        sendwServer.sendMessage(jsonObject.toString());
//      }
      WebSocketServer webSocketServer = WebSocketServer.sessionMap.get("ManualonePosition");
      if (webSocketServer != null) {
        List<String> messages = webSocketServer.getMessages();
      ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("ManualonePosition");
      if (sendwServer != null) {
        for (WebSocketServer webserver : sendwServer) {
          webserver.sendMessage(jsonObject.toString());
//      WebSocketServer webSocketServer = WebSocketServer.sessionMap.get("ManualonePosition");
      if (webserver != null) {
        List<String> messages = webserver.getMessages();
        List<String> waddresses1 = new ArrayList<>();
        waddresses1.add("DB100.108");
        waddresses1.add("DB100.20");
@@ -183,12 +188,12 @@
        List<String> waddresses2 = new ArrayList<>();
        waddresses2.add("DB100.110");
        waddresses2.add("DB100.176");
       waddresses2.add("DB103.34");
        waddresses2.add("DB103.34");
        List<String> waddresses3 = new ArrayList<>();
        waddresses3.add("DB100.112");
        waddresses3.add("DB100.24");
       waddresses3.add("DB103.36");
        waddresses3.add("DB103.36");
        List<String> waddresses4 = new ArrayList<>();
        waddresses4.add("DB100.114");
@@ -256,14 +261,13 @@
              }
              System.out.println("Values " + sValue + " written to PLC at address " + waddresses1);
            }
          }
          // 写入A02
          if (  messageArray.getJSONArray(1).size() > 0) {
          if (messageArray.getJSONArray(1).size() > 0) {
            JSONArray jsonArray = messageArray.getJSONArray(1);
            List<Short> sValue2 = new ArrayList<>();
            for (int i = 0; i < jsonArray.size(); i++) {
@@ -293,7 +297,6 @@
                // 写入新的位值列表
                S7control.getinstance().WriteBit(A02start, a02startval);
              }
              System.out.println("Values " + sValue2 + " written to PLC at address " + waddresses2);
@@ -444,8 +447,9 @@
          }
          // 清空消息列表
          webSocketServer.clearMessages();
          webserver.clearMessages();
        }
      }}
      }
    }
  }
springboot-vue3/src/main/java/com/example/springboot/component/PlcManualonePosition2.java
@@ -122,7 +122,7 @@
      List<Boolean> A02readstart = S7control.getinstance().readBits(A02start);
      short[] combinedBinaryShortArray = PlcManualonePosition2.PLCBooleanConverter.convertListsToBinaryShortArray(
      short[] combinedBinaryShortArray = PLCBooleanConverter.convertListsToBinaryShortArray(
              A01readstart,  A02readstart
      );
@@ -134,189 +134,195 @@
      jsonObject.append("weihuiling", params3);
      jsonObject.append("qidong", combinedBinaryShortArray);
      // System.out.println(jsonObject);
      WebSocketServer sendwServer = WebSocketServer.sessionMap.get("ManualonePosition2");
//      WebSocketServer sendwServer = WebSocketServer.sessionMap.get("ManualonePosition2");
//      if (sendwServer != null) {
//        sendwServer.sendMessage(jsonObject.toString());
//      }
      ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("ManualonePosition2");
      if (sendwServer != null) {
        sendwServer.sendMessage(jsonObject.toString());
      }
        for (WebSocketServer webserver : sendwServer) {
          webserver.sendMessage(jsonObject.toString());
      WebSocketServer webSocketServer = WebSocketServer.sessionMap.get("ManualonePosition2");
      if (webSocketServer != null) {
        List<String> messages = webSocketServer.getMessages();
        List<String> waddresses1 = new ArrayList<>();
        waddresses1.add("DB100.116");
        waddresses1.add("DB100.16");
//      WebSocketServer webSocketServer = WebSocketServer.sessionMap.get("ManualonePosition2");
          if (webserver != null) {
            List<String> messages = webserver.getMessages();
            List<String> waddresses1 = new ArrayList<>();
            waddresses1.add("DB100.116");
            waddresses1.add("DB100.16");
        List<String> waddresses2 = new ArrayList<>();
        waddresses2.add("DB100.118");
        waddresses2.add("DB100.192");
            List<String> waddresses2 = new ArrayList<>();
            waddresses2.add("DB100.118");
            waddresses2.add("DB100.192");
        // 故障地址
        List<String> waddresses3 = new ArrayList<>();
        waddresses3.add("DB103.242");
        waddresses3.add("DB103.248");
            // 故障地址
            List<String> waddresses3 = new ArrayList<>();
            waddresses3.add("DB103.242");
            waddresses3.add("DB103.248");
        // 复位地址
        List<String> waddresses4 = new ArrayList<>();
        waddresses4.add("DB101.3.6");
        waddresses4.add("DB101.4.1");
            // 复位地址
            List<String> waddresses4 = new ArrayList<>();
            waddresses4.add("DB101.3.6");
            waddresses4.add("DB101.4.1");
        // 回零地址
        List<String> waddresses5 = new ArrayList<>();
        waddresses5.add("DB101.3.7");
        waddresses5.add("DB101.4.2");
            // 回零地址
            List<String> waddresses5 = new ArrayList<>();
            waddresses5.add("DB101.3.7");
            waddresses5.add("DB101.4.2");
        if (!messages.isEmpty()) {
          // 将最后一个消息转换为 short 类型的列表
          String lastMessage = messages.get(messages.size() - 1);
          // System.out.println("lastMessage:" + lastMessage);
          JSONArray messageArray = new JSONArray(lastMessage);
            if (!messages.isEmpty()) {
              // 将最后一个消息转换为 short 类型的列表
              String lastMessage = messages.get(messages.size() - 1);
              // System.out.println("lastMessage:" + lastMessage);
              JSONArray messageArray = new JSONArray(lastMessage);
          // A01下发
          if (messageArray.getJSONArray(0).size() > 0) {
            JSONArray jsonArray = messageArray.getJSONArray(0);
            List<Short> sValue = new ArrayList<>();
            for (int i = 0; i < jsonArray.size(); i++) {
              Object value = jsonArray.get(i);
              if (value != null && !value.toString().equals("null")) {
                try {
                  String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                  short val = Short.parseShort(cleanedValue.trim());
                  sValue.add(val);
                  System.out.println("messageValue:" + Arrays.asList(val) + " added to the list");
                } catch (NumberFormatException e) {
                  // 如果无法解析为 short 类型,则忽略该部分
                  System.err.println("Could not parse value: " + value);
              // A01下发
              if (messageArray.getJSONArray(0).size() > 0) {
                JSONArray jsonArray = messageArray.getJSONArray(0);
                List<Short> sValue = new ArrayList<>();
                for (int i = 0; i < jsonArray.size(); i++) {
                  Object value = jsonArray.get(i);
                  if (value != null && !value.toString().equals("null")) {
                    try {
                      String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                      short val = Short.parseShort(cleanedValue.trim());
                      sValue.add(val);
                      System.out.println("messageValue:" + Arrays.asList(val) + " added to the list");
                    } catch (NumberFormatException e) {
                      // 如果无法解析为 short 类型,则忽略该部分
                      System.err.println("Could not parse value: " + value);
                    }
                  }
                }
                if (!sValue.isEmpty()) {
                  S7control.getinstance().WriteWord(waddresses1, sValue);
                  if (A01readstart != null && !A01readstart.isEmpty()) {
                    // 创建一个新的列表用于写入新值
                    List<Boolean> a01startval = new ArrayList<>();
                    // 遍历所有读取到的位值
                    for (Boolean bit : A01readstart) {
                      // 取反当前位的值并添加到新的列表中
                      a01startval.add(!bit);
                    }
                    // 写入新的位值列表
                    S7control.getinstance().WriteBit(A01start, a01startval);
                  }
                  System.out.println("Values " + sValue + " written to PLC at address " + waddresses1);
                }
              }
            }
            if (!sValue.isEmpty()) {
              S7control.getinstance().WriteWord(waddresses1, sValue);
              if (A01readstart != null && !A01readstart.isEmpty()) {
                // 创建一个新的列表用于写入新值
                List<Boolean> a01startval = new ArrayList<>();
                // 遍历所有读取到的位值
                for (Boolean bit : A01readstart) {
                  // 取反当前位的值并添加到新的列表中
                  a01startval.add(!bit);
              // A02下发
              if (messageArray.getJSONArray(1).size() > 0) {
                JSONArray jsonArray = messageArray.getJSONArray(1);
                List<Short> sValue2 = new ArrayList<>();
                for (int i = 0; i < jsonArray.size(); i++) {
                  Object value = jsonArray.get(i);
                  if (value != null && !value.toString().equals("null")) {
                    try {
                      String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                      short val = Short.parseShort(cleanedValue.trim());
                      sValue2.add(val);
                      System.out.println("messageValue:" + Arrays.asList(val) + " added to the list");
                    } catch (NumberFormatException e) {
                      // 如果无法解析为 short 类型,则忽略该部分
                      System.err.println("Could not parse value: " + value);
                    }
                  }
                }
                // 写入新的位值列表
                S7control.getinstance().WriteBit(A01start, a01startval);
                if (!sValue2.isEmpty()) {
                  S7control.getinstance().WriteWord(waddresses2, sValue2);
                  if (A02readstart != null && !A02readstart.isEmpty()) {
                    // 创建一个新的列表用于写入新值
                    List<Boolean> a02startval = new ArrayList<>();
                    // 遍历所有读取到的位值
                    for (Boolean bit : A02readstart) {
                      // 取反当前位的值并添加到新的列表中
                      a02startval.add(!bit);
                    }
                    // 写入新的位值列表
                    S7control.getinstance().WriteBit(A02start, a02startval);
                  }
                  System.out.println("Values " + sValue2 + " written to PLC at address " + waddresses2);
                }
              }
              System.out.println("Values " + sValue + " written to PLC at address " + waddresses1);
              // 写入故障地址
              if (messageArray.getJSONArray(2).size() > 0) {
                JSONArray jsonArray = messageArray.getJSONArray(2);
                List<Short> sValue2 = new ArrayList<>();
                for (int i = 0; i < jsonArray.size(); i++) {
                  Object value = jsonArray.get(i);
                  if (value != null && !value.toString().equals("null")) {
                    try {
                      String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                      short val = Short.parseShort(cleanedValue.trim());
                      sValue2.add(val);
                      System.out.println("messageValue:" + Arrays.asList(val) + " added to the list");
                    } catch (NumberFormatException e) {
                      // 如果无法解析为 short 类型,则忽略该部分
                      System.err.println("Could not parse value: " + value);
                    }
                  }
                }
                if (!sValue2.isEmpty()) {
                  S7control.getinstance().WriteWord(waddresses3, sValue2);
                  System.out.println("Values " + sValue2 + " written to PLC at address " + waddresses3);
                }
              }
              // 写入复位地址
              if (messageArray.getJSONArray(3).size() > 0) {
                JSONArray jsonArray3 = messageArray.getJSONArray(3);
                List<Boolean> sValue3 = new ArrayList<>();
                for (int i = 0; i < jsonArray3.size(); i++) {
                  Object value = jsonArray3.get(i);
                  if (value != null && !value.toString().equals("null")) {
                    try {
                      String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                      boolean val = "1".equals(cleanedValue.trim());
                      sValue3.add(val);
                      System.out.println("messageValue: " + Arrays.asList(val) + " added to the list");
                    } catch (NumberFormatException e) {
                      // 如果无法解析为 boolean 类型,则忽略该部分
                      System.err.println("Could not parse value: " + value);
                    }
                  }
                }
                if (!sValue3.isEmpty()) {
                  S7control.getinstance().WriteBit(waddresses4, sValue3);
                  System.out.println("Values " + sValue3 + " written to PLC at address " + waddresses4);
                }
              }
              // 写入回零地址
              if (messageArray.getJSONArray(4).size() > 0) {
                JSONArray jsonArray3 = messageArray.getJSONArray(4);
                List<Boolean> sValue3 = new ArrayList<>();
                for (int i = 0; i < jsonArray3.size(); i++) {
                  Object value = jsonArray3.get(i);
                  if (value != null && !value.toString().equals("null")) {
                    try {
                      String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                      boolean val = "1".equals(cleanedValue.trim());
                      sValue3.add(val);
                      System.out.println("messageValue: " + Arrays.asList(val) + " added to the list");
                    } catch (NumberFormatException e) {
                      // 如果无法解析为 boolean 类型,则忽略该部分
                      System.err.println("Could not parse value: " + value);
                    }
                  }
                }
                if (!sValue3.isEmpty()) {
                  S7control.getinstance().WriteBit(waddresses5, sValue3);
                  System.out.println("Values " + sValue3 + " written to PLC at address " + waddresses5);
                }
              }
              // 清空消息列表
              webserver.clearMessages();
            }
          }
          // A02下发
          if (messageArray.getJSONArray(1).size() > 0) {
            JSONArray jsonArray = messageArray.getJSONArray(1);
            List<Short> sValue2 = new ArrayList<>();
            for (int i = 0; i < jsonArray.size(); i++) {
              Object value = jsonArray.get(i);
              if (value != null && !value.toString().equals("null")) {
                try {
                  String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                  short val = Short.parseShort(cleanedValue.trim());
                  sValue2.add(val);
                  System.out.println("messageValue:" + Arrays.asList(val) + " added to the list");
                } catch (NumberFormatException e) {
                  // 如果无法解析为 short 类型,则忽略该部分
                  System.err.println("Could not parse value: " + value);
                }
              }
            }
            if (!sValue2.isEmpty()) {
              S7control.getinstance().WriteWord(waddresses2, sValue2);
              if (A02readstart != null && !A02readstart.isEmpty()) {
                // 创建一个新的列表用于写入新值
                List<Boolean> a02startval = new ArrayList<>();
                // 遍历所有读取到的位值
                for (Boolean bit : A02readstart) {
                  // 取反当前位的值并添加到新的列表中
                  a02startval.add(!bit);
                }
                // 写入新的位值列表
                S7control.getinstance().WriteBit(A02start, a02startval);
              }
              System.out.println("Values " + sValue2 + " written to PLC at address " + waddresses2);
            }
          }
          // 写入故障地址
          if (messageArray.getJSONArray(2).size() > 0) {
            JSONArray jsonArray = messageArray.getJSONArray(2);
            List<Short> sValue2 = new ArrayList<>();
            for (int i = 0; i < jsonArray.size(); i++) {
              Object value = jsonArray.get(i);
              if (value != null && !value.toString().equals("null")) {
                try {
                  String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                  short val = Short.parseShort(cleanedValue.trim());
                  sValue2.add(val);
                  System.out.println("messageValue:" + Arrays.asList(val) + " added to the list");
                } catch (NumberFormatException e) {
                  // 如果无法解析为 short 类型,则忽略该部分
                  System.err.println("Could not parse value: " + value);
                }
              }
            }
            if (!sValue2.isEmpty()) {
              S7control.getinstance().WriteWord(waddresses3, sValue2);
              System.out.println("Values " + sValue2 + " written to PLC at address " + waddresses3);
            }
          }
          // 写入复位地址
          if (messageArray.getJSONArray(3).size() > 0) {
            JSONArray jsonArray3 = messageArray.getJSONArray(3);
            List<Boolean> sValue3 = new ArrayList<>();
            for (int i = 0; i < jsonArray3.size(); i++) {
              Object value = jsonArray3.get(i);
              if (value != null && !value.toString().equals("null")) {
                try {
                  String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                  boolean val = "1".equals(cleanedValue.trim());
                  sValue3.add(val);
                  System.out.println("messageValue: " + Arrays.asList(val) + " added to the list");
                } catch (NumberFormatException e) {
                  // 如果无法解析为 boolean 类型,则忽略该部分
                  System.err.println("Could not parse value: " + value);
                }
              }
            }
            if (!sValue3.isEmpty()) {
              S7control.getinstance().WriteBit(waddresses4, sValue3);
              System.out.println("Values " + sValue3 + " written to PLC at address " + waddresses4);
            }
          }
          // 写入回零地址
          if (messageArray.getJSONArray(4).size() > 0) {
            JSONArray jsonArray3 = messageArray.getJSONArray(4);
            List<Boolean> sValue3 = new ArrayList<>();
            for (int i = 0; i < jsonArray3.size(); i++) {
              Object value = jsonArray3.get(i);
              if (value != null && !value.toString().equals("null")) {
                try {
                  String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                  boolean val = "1".equals(cleanedValue.trim());
                  sValue3.add(val);
                  System.out.println("messageValue: " + Arrays.asList(val) + " added to the list");
                } catch (NumberFormatException e) {
                  // 如果无法解析为 boolean 类型,则忽略该部分
                  System.err.println("Could not parse value: " + value);
                }
              }
            }
            if (!sValue3.isEmpty()) {
              S7control.getinstance().WriteBit(waddresses5, sValue3);
              System.out.println("Values " + sValue3 + " written to PLC at address " + waddresses5);
            }
          }
          // 清空消息列表
          webSocketServer.clearMessages();
        }
      }
    }
springboot-vue3/src/main/java/com/example/springboot/component/PlcParameter.java
@@ -106,42 +106,49 @@
      jsonObject.append("params", arraylist);
      jsonObject.append("state", state);
      // jsonObject.append("action", sholist);
      WebSocketServer sendwServer = WebSocketServer.sessionMap.get("Parameter");
//      WebSocketServer sendwServer = WebSocketServer.sessionMap.get("Parameter");
//      if (sendwServer != null) {
//        sendwServer.sendMessage(jsonObject.toString());
//      }
      ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("Parameter");
      if (sendwServer != null) {
        sendwServer.sendMessage(jsonObject.toString());
      }
        for (WebSocketServer webserver : sendwServer) {
          webserver.sendMessage(jsonObject.toString());
      WebSocketServer webSocketServer = WebSocketServer.sessionMap.get("Parameter");
      if (webSocketServer != null) {
        List<String> messages = webSocketServer.getMessages();
//      WebSocketServer webSocketServer = WebSocketServer.sessionMap.get("Parameter");
          if (webserver != null) {
            List<String> messages = webserver.getMessages();
        String addressList = "DB100.0";
            String addressList = "DB100.0";
        if (!messages.isEmpty()) {
          // 将最后一个消息转换为 short 类型的列表
          String lastMessage = messages.get(messages.size() - 1);
          System.out.println("messages:" + messages);
          String[] parts = lastMessage.split(",");
          List<Short> messageValues = new ArrayList<>();
          for (String part : parts) {
            try {
              // 使用正则表达式清除非数字字符
              String cleanedPart = part.replaceAll("[^0-9-]", "");
              short value = Short.parseShort(cleanedPart.trim());
              messageValues.add(value);
            } catch (NumberFormatException e) {
              // 如果无法解析为 short 类型,则忽略该部分
            if (!messages.isEmpty()) {
              // 将最后一个消息转换为 short 类型的列表
              String lastMessage = messages.get(messages.size() - 1);
              System.out.println("messages:" + messages);
              String[] parts = lastMessage.split(",");
              List<Short> messageValues = new ArrayList<>();
              for (String part : parts) {
                try {
                  // 使用正则表达式清除非数字字符
                  String cleanedPart = part.replaceAll("[^0-9-]", "");
                  short value = Short.parseShort(cleanedPart.trim());
                  messageValues.add(value);
                } catch (NumberFormatException e) {
                  // 如果无法解析为 short 类型,则忽略该部分
              e.printStackTrace();
                  e.printStackTrace();
                }
              }
              // 将消息值写入 PLC
              S7control.getinstance().WriteWord(addressList, messageValues);
              System.out.println("messageValues:" + messageValues);
              System.out.println("addressList:" + addressList);
              // 清空消息列表
              webserver.clearMessages();
            }
          }
          // 将消息值写入 PLC
       S7control.getinstance().WriteWord(addressList, messageValues);
          System.out.println("messageValues:" + messageValues);
          System.out.println("addressList:" + addressList);
          // 清空消息列表
          webSocketServer.clearMessages();
        }
      }
    }
springboot-vue3/src/main/java/com/example/springboot/component/PlcParameter1.java
@@ -103,98 +103,105 @@
     jsonObject.append("fanzhuan", fanzhuan1);
     jsonObject.append("xiaoche", xiaoche1);
      WebSocketServer sendwServer = WebSocketServer.sessionMap.get("Parameter1");
//      WebSocketServer sendwServer = WebSocketServer.sessionMap.get("Parameter1");
//      if (sendwServer != null) {
//        sendwServer.sendMessage(jsonObject.toString());
//      }
      ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("Parameter1");
      if (sendwServer != null) {
        sendwServer.sendMessage(jsonObject.toString());
      }
        for (WebSocketServer webserver : sendwServer) {
          webserver.sendMessage(jsonObject.toString());
      WebSocketServer webSocketServer = WebSocketServer.sessionMap.get("Parameter1");
      if (webSocketServer != null) {
        List<String> messages = webSocketServer.getMessages();
        List<String> waddresses1 = new ArrayList<>();
        waddresses1.add("DB100.0");
        waddresses1.add("DB100.2");
        waddresses1.add("DB100.4");
        waddresses1.add("DB100.6");
        waddresses1.add("DB100.26");
        waddresses1.add("DB100.28");
        waddresses1.add("DB100.30");
        waddresses1.add("DB100.32");
        waddresses1.add("DB100.34");
        waddresses1.add("DB100.36");
        waddresses1.add("DB100.38");
        waddresses1.add("DB100.40");
        String addressList2 = "DB100.8";
        String addressList3 = "DB100.12";
          if (webserver != null) {
            List<String> messages = webserver.getMessages();
            List<String> waddresses1 = new ArrayList<>();
            waddresses1.add("DB100.0");
            waddresses1.add("DB100.2");
            waddresses1.add("DB100.4");
            waddresses1.add("DB100.6");
            waddresses1.add("DB100.26");
            waddresses1.add("DB100.28");
            waddresses1.add("DB100.30");
            waddresses1.add("DB100.32");
            waddresses1.add("DB100.34");
            waddresses1.add("DB100.36");
            waddresses1.add("DB100.38");
            waddresses1.add("DB100.40");
        if (!messages.isEmpty()) {
          // 将最后一个消息转换为 short 类型的列表
          String lastMessage = messages.get(messages.size() - 1);
          // System.out.println("lastMessage:" + lastMessage);
          JSONArray messageArray = new JSONArray(lastMessage);
            String addressList2 = "DB100.8";
            String addressList3 = "DB100.12";
          // 整合第 1 到 3 个数组并去掉 null 元素
          List<Short> mergedList = new ArrayList<>();
          for (int i = 0; i < 3; i++) {
            JSONArray sublist = messageArray.getJSONArray(i);
            for (int j = 0; j < sublist.size(); j++) {
              Object value = sublist.get(j);
              if (value != null && !value.toString().equals("null")) {
                try {
                  String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                  short sValue = Short.parseShort(cleanedValue.trim());
                  mergedList.add(sValue);
                } catch (NumberFormatException e) {
                  // 如果无法解析为 short 类型,则忽略该部分
                  System.err.println("Could not parse value: " + value);
            if (!messages.isEmpty()) {
              // 将最后一个消息转换为 short 类型的列表
              String lastMessage = messages.get(messages.size() - 1);
              // System.out.println("lastMessage:" + lastMessage);
              JSONArray messageArray = new JSONArray(lastMessage);
              // 整合第 1 到 3 个数组并去掉 null 元素
              List<Short> mergedList = new ArrayList<>();
              for (int i = 0; i < 3; i++) {
                JSONArray sublist = messageArray.getJSONArray(i);
                for (int j = 0; j < sublist.size(); j++) {
                  Object value = sublist.get(j);
                  if (value != null && !value.toString().equals("null")) {
                    try {
                      String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                      short sValue = Short.parseShort(cleanedValue.trim());
                      mergedList.add(sValue);
                    } catch (NumberFormatException e) {
                      // 如果无法解析为 short 类型,则忽略该部分
                      System.err.println("Could not parse value: " + value);
                    }
                  }
                }
              }
            }
          }
          // 写入第一个地址
          if (messageArray.getJSONArray(3).size() > 0) {
            Object value = messageArray.getJSONArray(3).get(0);
            if (value != null && !value.toString().equals("null")) {
              try {
                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);
              } catch (NumberFormatException e) {
                // 如果无法解析为 short 类型,则忽略该部分
                System.err.println("Could not parse value: " + value);
              // 写入第一个地址
              if (messageArray.getJSONArray(3).size() > 0) {
                Object value = messageArray.getJSONArray(3).get(0);
                if (value != null && !value.toString().equals("null")) {
                  try {
                    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);
                  } catch (NumberFormatException e) {
                    // 如果无法解析为 short 类型,则忽略该部分
                    System.err.println("Could not parse value: " + value);
                  }
                }
              }
            }
          }
          // 写入第二个地址
          if (messageArray.getJSONArray(4).size() > 0) {
            Object value = messageArray.getJSONArray(4).get(0);
            if (value != null && !value.toString().equals("null")) {
              try {
                String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                short sValue = Short.parseShort(cleanedValue.trim());
                S7control.getinstance().WriteWord(addressList3, Arrays.asList(sValue));
                System.out
                    .println("messageValue:" + Arrays.asList(sValue) + " written to PLC at address " + addressList3);
              } catch (NumberFormatException e) {
                // 如果无法解析为 short 类型,则忽略该部分
                System.err.println("Could not parse value: " + value);
              // 写入第二个地址
              if (messageArray.getJSONArray(4).size() > 0) {
                Object value = messageArray.getJSONArray(4).get(0);
                if (value != null && !value.toString().equals("null")) {
                  try {
                    String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                    short sValue = Short.parseShort(cleanedValue.trim());
                    S7control.getinstance().WriteWord(addressList3, Arrays.asList(sValue));
                    System.out
                            .println("messageValue:" + Arrays.asList(sValue) + " written to PLC at address " + addressList3);
                  } catch (NumberFormatException e) {
                    // 如果无法解析为 short 类型,则忽略该部分
                    System.err.println("Could not parse value: " + value);
                  }
                }
              }
              // 写入第三个地址
              if (!mergedList.isEmpty()) {
                S7control.getinstance().WriteWord(waddresses1, mergedList);
                System.out.println("messageValue:" + mergedList + " written to PLC at address " + waddresses1);
              }
              // 清空消息列表
              webserver.clearMessages();
            }
          }
          // 写入第三个地址
          if (!mergedList.isEmpty()) {
            S7control.getinstance().WriteWord(waddresses1, mergedList);
            System.out.println("messageValue:" + mergedList + " written to PLC at address " + waddresses1);
          }
          // 清空消息列表
          webSocketServer.clearMessages();
        }
      }
springboot-vue3/src/main/java/com/example/springboot/component/PlcParameter2.java
@@ -10,6 +10,7 @@
import java.util.Collections;
import java.util.List;
public class PlcParameter2 extends Thread {
  String name = "";
  Integer count = 0;
@@ -68,7 +69,7 @@
        e.printStackTrace();
      }
     //  手动状态地址
   //    手动状态地址
      List<String> addressList1 = new ArrayList<>();
      addressList1.add("DB103.44");//D01
@@ -136,10 +137,10 @@
      List<String> data3 = S7control.getinstance().readStrings(addressList3);
// A01 A02 B01 B02
      List<String> addresses4 = new ArrayList<>();
      addresses4.add("DB103.52");
      addresses4.add("DB103.54");
      addresses4.add("DB103.56");
      addresses4.add("DB103.60");
      addresses4.add("DB103.32");
      addresses4.add("DB103.34");
      addresses4.add("DB103.36");
      addresses4.add("DB103.40");
    List<Short> data4 = S7control.getinstance().readWords(addresses4);
@@ -186,15 +187,16 @@
      jsonObject.append("jiting", anniuparams);
      WebSocketServer sendwServer = WebSocketServer.sessionMap.get("Parameter2");
      if (sendwServer != null) {
        sendwServer.sendMessage(jsonObject.toString());
      }
      WebSocketServer webSocketServer = WebSocketServer.sessionMap.get("Parameter2");
      if (webSocketServer != null) {
      ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("Parameter2");
 if (sendwServer != null) {
 for (WebSocketServer webserver : sendwServer) {
 webserver.sendMessage(jsonObject.toString());
        List<String> messages = webSocketServer.getMessages();
        List<String> messages = webserver.getMessages();
        List<String> addressList = new ArrayList<>();
        addressList.add("DB101.9.2");
@@ -234,7 +236,7 @@
              }
            }
            if (!sValue3.isEmpty()) {
              S7control.getinstance().WriteBit(addressList, sValue3);
             S7control.getinstance().WriteBit(addressList, sValue3);
              System.out.println("Values " + sValue3 + " written to PLC at address " + sValue3);
            }
          }
@@ -257,7 +259,7 @@
              }
            }
            if (!sValue3.isEmpty()) {
              S7control.getinstance().WriteBit(niuanaddressList3, sValue3);
            S7control.getinstance().WriteBit(niuanaddressList3, sValue3);
              System.out.println("Values " + sValue3 + " written to PLC at address " + sValue3);
            }
@@ -265,9 +267,11 @@
          // 清空消息列表
          webSocketServer.clearMessages();
            webserver.clearMessages();
        }
      }
 }
    }
    }
  }
}
springboot-vue3/src/main/java/com/example/springboot/component/PlcPositioning1.java
@@ -98,51 +98,58 @@
            jsonObject.append("params", arraylist);
            WebSocketServer sendwServer = WebSocketServer.sessionMap.get("Positioning1");
//            WebSocketServer sendwServer = WebSocketServer.sessionMap.get("Positioning1");
//            if (sendwServer != null) {
//                sendwServer.sendMessage(jsonObject.toString());
//            }
//            WebSocketServer webSocketServer = WebSocketServer.sessionMap.get("Positioning1");
            ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("Positioning1");
            if (sendwServer != null) {
                sendwServer.sendMessage(jsonObject.toString());
            }
                for (WebSocketServer webserver : sendwServer) {
                    webserver.sendMessage(jsonObject.toString());
            WebSocketServer webSocketServer = WebSocketServer.sessionMap.get("Positioning1");
            if (webSocketServer != null) {
                List<String> messages = webSocketServer.getMessages();
                //存片格  出片格地址
                String addressList3 = "DB100.42";
                    if (webserver != null) {
                        List<String> messages = webserver.getMessages();
                        //存片格  出片格地址
                        String addressList3 = "DB100.42";
                if (!messages.isEmpty()) {
                    // 将最后一个消息转换为 short 类型的列表
                    String lastMessage = messages.get(messages.size() - 1);
                        if (!messages.isEmpty()) {
                            // 将最后一个消息转换为 short 类型的列表
                            String lastMessage = messages.get(messages.size() - 1);
//        System.out.println("lastMessage:" + lastMessage);
                    JSONArray messageArray = new JSONArray(lastMessage);
                            JSONArray messageArray = new JSONArray(lastMessage);
                    // 整合第 1 到 3 个数组并去掉 null 元素
                    List<Short> mergedList = new ArrayList<>();
                    for (int i = 0; i < 5; i++) {
                        JSONArray sublist = messageArray.getJSONArray(i);
                        for (int j = 0; j < sublist.size(); j++) {
                            Object value = sublist.get(j);
                            if (value != null && !value.toString().equals("null")) {
                                try {
                                    String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                                    short sValue = Short.parseShort(cleanedValue.trim());
                                    mergedList.add(sValue);
                                } catch (NumberFormatException e) {
                                    // 如果无法解析为 short 类型,则忽略该部分
                                    System.err.println("Could not parse value: " + value);
                            // 整合第 1 到 3 个数组并去掉 null 元素
                            List<Short> mergedList = new ArrayList<>();
                            for (int i = 0; i < 5; i++) {
                                JSONArray sublist = messageArray.getJSONArray(i);
                                for (int j = 0; j < sublist.size(); j++) {
                                    Object value = sublist.get(j);
                                    if (value != null && !value.toString().equals("null")) {
                                        try {
                                            String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                                            short sValue = Short.parseShort(cleanedValue.trim());
                                            mergedList.add(sValue);
                                        } catch (NumberFormatException e) {
                                            // 如果无法解析为 short 类型,则忽略该部分
                                            System.err.println("Could not parse value: " + value);
                                        }
                                    }
                                }
                            }
                            // 写入存片格  出片格位置设定数据
                            if (!mergedList.isEmpty()) {
                                S7control.getinstance().WriteWord(addressList3, mergedList);
                                System.out.println("messageValue:" + mergedList + " written to PLC at address " + addressList3);
                            }
                            // 清空消息列表
                            webserver.clearMessages();
                        }
                    }
                    // 写入存片格  出片格位置设定数据
                    if (!mergedList.isEmpty()) {
          S7control.getinstance().WriteWord(addressList3, mergedList);
                        System.out.println("messageValue:" + mergedList + " written to PLC at address " + addressList3);
                    }
                    // 清空消息列表
                    webSocketServer.clearMessages();
                }
springboot-vue3/src/main/java/com/example/springboot/component/PlcPositioning2.java
@@ -86,54 +86,60 @@
            jsonObject.append("params", arraylist);
            WebSocketServer sendwServer = WebSocketServer.sessionMap.get("Positioning2");
//            WebSocketServer sendwServer = WebSocketServer.sessionMap.get("Positioning2");
//            if (sendwServer != null) {
//                sendwServer.sendMessage(jsonObject.toString());
//            }
            ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("Positioning2");
            if (sendwServer != null) {
                sendwServer.sendMessage(jsonObject.toString());
            }
                for (WebSocketServer webserver : sendwServer) {
                    webserver.sendMessage(jsonObject.toString());
            WebSocketServer webSocketServer = WebSocketServer.sessionMap.get("Positioning2");
            if (webSocketServer != null) {
                List<String> messages = webSocketServer.getMessages();
               //B01  B02 地址
                String addressList3 = "DB100.88";
                if (!messages.isEmpty()) {
                    // 将最后一个消息转换为 short 类型的列表
                    String lastMessage = messages.get(messages.size() - 1);
                    if (webserver != null) {
                        List<String> messages = webserver.getMessages();
                        //B01  B02 地址
                        String addressList3 = "DB100.88";
                        if (!messages.isEmpty()) {
                            // 将最后一个消息转换为 short 类型的列表
                            String lastMessage = messages.get(messages.size() - 1);
//        System.out.println("lastMessage:" + lastMessage);
                    JSONArray messageArray = new JSONArray(lastMessage);
                            JSONArray messageArray = new JSONArray(lastMessage);
                    // 整合第 1 到 3 个数组并去掉 null 元素
                    List<Short> mergedList = new ArrayList<>();
                    for (int i = 0; i < 2; i++) {
                        JSONArray sublist = messageArray.getJSONArray(i);
                        for (int j = 0; j < sublist.size(); j++) {
                            Object value = sublist.get(j);
                            if (value != null && !value.toString().equals("null")) {
                                try {
                                    String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                                    short sValue = Short.parseShort(cleanedValue.trim());
                                    mergedList.add(sValue);
                                } catch (NumberFormatException e) {
                                    // 如果无法解析为 short 类型,则忽略该部分
                                    System.err.println("Could not parse value: " + value);
                            // 整合第 1 到 3 个数组并去掉 null 元素
                            List<Short> mergedList = new ArrayList<>();
                            for (int i = 0; i < 2; i++) {
                                JSONArray sublist = messageArray.getJSONArray(i);
                                for (int j = 0; j < sublist.size(); j++) {
                                    Object value = sublist.get(j);
                                    if (value != null && !value.toString().equals("null")) {
                                        try {
                                            String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                                            short sValue = Short.parseShort(cleanedValue.trim());
                                            mergedList.add(sValue);
                                        } catch (NumberFormatException e) {
                                            // 如果无法解析为 short 类型,则忽略该部分
                                            System.err.println("Could not parse value: " + value);
                                        }
                                    }
                                }
                            }
                            // 写入b01  b02地址
                            if (!mergedList.isEmpty()) {
                                S7control.getinstance().WriteWord(addressList3, mergedList);
                                System.out.println("messageValue:" + mergedList + " written to PLC at address " + addressList3);
                            }
                            // 清空消息列表
                            webserver.clearMessages();
                        }
                    }
                    // 写入b01  b02地址
                    if (!mergedList.isEmpty()) {
            S7control.getinstance().WriteWord(addressList3, mergedList);
                        System.out.println("messageValue:" + mergedList + " written to PLC at address " + addressList3);
                    }
                    // 清空消息列表
                    webSocketServer.clearMessages();
                }
            }
        }
    }
springboot-vue3/src/main/java/com/example/springboot/component/PlcServoManualone.java
@@ -235,245 +235,231 @@
      WebSocketServer sendwServer = WebSocketServer.sessionMap.get("ServoManualone");
//      WebSocketServer sendwServer = WebSocketServer.sessionMap.get("ServoManualone");
//      if (sendwServer != null) {
//        sendwServer.sendMessage(jsonObject.toString());
//      }
      ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("ServoManualone");
      if (sendwServer != null) {
        sendwServer.sendMessage(jsonObject.toString());
      }
      WebSocketServer webSocketServer = WebSocketServer.sessionMap.get("ServoManualone");
      if (webSocketServer != null) {
        List<String> messages = webSocketServer.getMessages();
        for (WebSocketServer webserver : sendwServer) {
          webserver.sendMessage(jsonObject.toString());
          if (webserver != null) {
            List<String> messages = webserver.getMessages();
        if (!messages.isEmpty()) {
          // 将最后一个消息转换为 short 类型的列表
          String lastMessage = messages.get(messages.size() - 1);
            if (!messages.isEmpty()) {
              // 将最后一个消息转换为 short 类型的列表
              String lastMessage = messages.get(messages.size() - 1);
//        System.out.println("lastMessage:" + lastMessage);
          JSONArray messageArray = new JSONArray(lastMessage);
              JSONArray messageArray = new JSONArray(lastMessage);
          // 写入AO1组合
          if (messageArray.getJSONArray(0).size() > 0 ) {
            JSONArray jsonArray = messageArray.getJSONArray(0);
            List<Short> sValue = new ArrayList<>();
            for (int i = 0; i < jsonArray.size(); i++) {
              Object value = jsonArray.get(i);
              if (value != null && !value.toString().equals("null")) {
                try {
                  String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                  short val = Short.parseShort(cleanedValue.trim());
                  sValue.add(val);
                  System.out.println("messageValue:" + Arrays.asList(val) + " added to the list");
                } catch (NumberFormatException e) {
                  // 如果无法解析为 short 类型,则忽略该部分
                  System.err.println("Could not parse value: " + value);
              // 写入AO1组合
              if (messageArray.getJSONArray(0).size() > 0) {
                JSONArray jsonArray = messageArray.getJSONArray(0);
                List<Short> sValue = new ArrayList<>();
                for (int i = 0; i < jsonArray.size(); i++) {
                  Object value = jsonArray.get(i);
                  if (value != null && !value.toString().equals("null")) {
                    try {
                      String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                      short val = Short.parseShort(cleanedValue.trim());
                      sValue.add(val);
                      System.out.println("messageValue:" + Arrays.asList(val) + " added to the list");
                    } catch (NumberFormatException e) {
                      // 如果无法解析为 short 类型,则忽略该部分
                      System.err.println("Could not parse value: " + value);
                    }
                  }
                }
                if (!sValue.isEmpty()) {
                  S7control.getinstance().WriteWord(addresses, sValue);
                  // 检查是否读取到了位值,并且列表不为空
                  if (A01readstart != null && !A01readstart.isEmpty()) {
                    // 创建一个新的列表用于写入新值
                    List<Boolean> a01startval = new ArrayList<>();
                    // 遍历所有读取到的位值
                    for (Boolean bit : A01readstart) {
                      // 取反当前位的值并添加到新的列表中
                      a01startval.add(!bit);
                    }
                    // 写入新的位值列表
                    S7control.getinstance().WriteBit(A01start, a01startval);
                  }
                  System.out.println("Values " + sValue + " written to PLC at address " + addresses);
                }
              }
            }
            if (!sValue.isEmpty()) {
          S7control.getinstance().WriteWord(addresses, sValue);
              // 检查是否读取到了位值,并且列表不为空
              if (A01readstart != null && !A01readstart.isEmpty()) {
                // 创建一个新的列表用于写入新值
                List<Boolean> a01startval = new ArrayList<>();
                // 遍历所有读取到的位值
                for (Boolean bit : A01readstart) {
                  // 取反当前位的值并添加到新的列表中
                  a01startval.add(!bit);
              //// 写入AO2组合
              if (messageArray.getJSONArray(1).size() > 0) {
                JSONArray jsonArray2 = messageArray.getJSONArray(1);
                List<Short> sValue2 = new ArrayList<>();
                for (int i = 0; i < jsonArray2.size(); i++) {
                  Object value = jsonArray2.get(i);
                  if (value != null && !value.toString().equals("null")) {
                    try {
                      String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                      short val = Short.parseShort(cleanedValue.trim());
                      sValue2.add(val);
                      System.out.println("messageValue:" + Arrays.asList(val) + " added to the list");
                    } catch (NumberFormatException e) {
                      // 如果无法解析为 short 类型,则忽略该部分
                      System.err.println("Could not parse value: " + value);
                    }
                  }
                }
                // 写入新的位值列表
                S7control.getinstance().WriteBit(A01start, a01startval);
              }
              System.out.println("Values " + sValue + " written to PLC at address " + addresses);
            }
          }
                if (!sValue2.isEmpty()) {
                  S7control.getinstance().WriteWord(addresses2, sValue2);
          //// 写入AO2组合
          if (messageArray.getJSONArray(1).size() > 0) {
            JSONArray jsonArray2 = messageArray.getJSONArray(1);
            List<Short> sValue2 = new ArrayList<>();
            for (int i = 0; i < jsonArray2.size(); i++) {
              Object value = jsonArray2.get(i);
              if (value != null && !value.toString().equals("null")) {
                try {
                  String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                  short val = Short.parseShort(cleanedValue.trim());
                  sValue2.add(val);
                  System.out.println("messageValue:" + Arrays.asList(val) + " added to the list");
                } catch (NumberFormatException e) {
                  // 如果无法解析为 short 类型,则忽略该部分
                  System.err.println("Could not parse value: " + value);
                  if (A02readstart != null && !A02readstart.isEmpty()) {
                    // 创建一个新的列表用于写入新值
                    List<Boolean> a02startval = new ArrayList<>();
                    // 遍历所有读取到的位值
                    for (Boolean bit : A02readstart) {
                      // 取反当前位的值并添加到新的列表中
                      a02startval.add(!bit);
                    }
                    // 写入新的位值列表
                    S7control.getinstance().WriteBit(A02start, a02startval);
                  }
                  System.out.println("Values " + sValue2 + " written to PLC at address " + addresses2);
                }
              }
            }
            if (!sValue2.isEmpty()) {
            S7control.getinstance().WriteWord(addresses2, sValue2);
              if (A02readstart != null && !A02readstart.isEmpty()) {
                // 创建一个新的列表用于写入新值
                List<Boolean> a02startval = new ArrayList<>();
                // 遍历所有读取到的位值
                for (Boolean bit : A02readstart) {
                  // 取反当前位的值并添加到新的列表中
                  a02startval.add(!bit);
              // 复位按钮写入
              if (messageArray.getJSONArray(2).size() > 0) {
                JSONArray jsonArray3 = messageArray.getJSONArray(2);
                List<Boolean> sValue3 = new ArrayList<>();
                for (int i = 0; i < jsonArray3.size(); i++) {
                  Object value = jsonArray3.get(i);
                  if (value != null && !value.toString().equals("null")) {
                    try {
                      String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                      boolean val = "1".equals(cleanedValue.trim());
                      sValue3.add(val);
                      System.out.println("messageValue: " + Arrays.asList(val) + " added to the list");
                    } catch (NumberFormatException e) {
                      // 如果无法解析为 boolean 类型,则忽略该部分
                      System.err.println("Could not parse value: " + value);
                    }
                  }
                }
                // 写入新的位值列表
                S7control.getinstance().WriteBit(A02start, a02startval);
              }
              System.out.println("Values " + sValue2 + " written to PLC at address " + addresses2);
            }
          }
         // 复位按钮写入
          if (messageArray.getJSONArray(2).size() > 0) {
            JSONArray jsonArray3 = messageArray.getJSONArray(2);
            List<Boolean> sValue3 = new ArrayList<>();
            for (int i = 0; i < jsonArray3.size(); i++) {
              Object value = jsonArray3.get(i);
              if (value != null && !value.toString().equals("null")) {
                try {
                  String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                  boolean val = "1".equals(cleanedValue.trim());
                  sValue3.add(val);
                  System.out.println("messageValue: " + Arrays.asList(val) + " added to the list");
                } catch (NumberFormatException e) {
                  // 如果无法解析为 boolean 类型,则忽略该部分
                  System.err.println("Could not parse value: " + value);
                if (!sValue3.isEmpty()) {
                  S7control.getinstance().WriteBit(Reset, sValue3);
                  System.out.println("Values " + sValue3 + " written to PLC at address " + Reset);
                }
              }
            }
            if (!sValue3.isEmpty()) {
              S7control.getinstance().WriteBit(Reset, sValue3);
              System.out.println("Values " + sValue3 + " written to PLC at address " + Reset);
            }
          }
        //回零按钮写入
          if (messageArray.getJSONArray(3).size() > 0) {
            JSONArray jsonArray4 = messageArray.getJSONArray(3);
            List<Boolean> sValue4 = new ArrayList<>();
            for (int i = 0; i < jsonArray4.size(); i++) {
              Object value = jsonArray4.get(i);
              if (value != null && !value.toString().equals("null")) {
                try {
                  String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                  boolean val = "1".equals(cleanedValue.trim());
                  sValue4.add(val);
                  System.out.println("messageValue: " + Arrays.asList(val) + " added to the list");
                } catch (NumberFormatException e) {
                  // 如果无法解析为 boolean 类型,则忽略该部分
                  System.err.println("Could not parse value: " + value);
              //回零按钮写入
              if (messageArray.getJSONArray(3).size() > 0) {
                JSONArray jsonArray4 = messageArray.getJSONArray(3);
                List<Boolean> sValue4 = new ArrayList<>();
                for (int i = 0; i < jsonArray4.size(); i++) {
                  Object value = jsonArray4.get(i);
                  if (value != null && !value.toString().equals("null")) {
                    try {
                      String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                      boolean val = "1".equals(cleanedValue.trim());
                      sValue4.add(val);
                      System.out.println("messageValue: " + Arrays.asList(val) + " added to the list");
                    } catch (NumberFormatException e) {
                      // 如果无法解析为 boolean 类型,则忽略该部分
                      System.err.println("Could not parse value: " + value);
                    }
                  }
                }
                if (!sValue4.isEmpty()) {
                  S7control.getinstance().WriteBit(waddresses4, sValue4);
                  System.out.println("Values " + sValue4 + " written to PLC at address " + waddresses4);
                }
              }
            }
            if (!sValue4.isEmpty()) {
             S7control.getinstance().WriteBit(waddresses4, sValue4);
              System.out.println("Values " + sValue4 + " written to PLC at address " + waddresses4);
            }
          }
          //进片ID写入
          if (messageArray.getJSONArray(4).size() > 0) {
              //取片ID写入
              if (messageArray.getJSONArray(5).size() > 0) {
//            JSONArray jsonArray5 = messageArray.getJSONArray(4);
            String jsonArray5 = String.valueOf(messageArray.getJSONArray(4));
            if (!jsonArray5.isEmpty()) {
                String jsonArray5 = String.valueOf(messageArray.getJSONArray(5));
                if (!jsonArray5.isEmpty()) {
//              String value = (String) jsonArray5.get(0);
              jsonArray5 = jsonArray5.replaceAll("[\\[\\]\"]", ""); // 去除方括号和双引号
            outmesid( jsonArray5,inputGlassIdAddress);
              System.out.println("Values " + jsonArray5 + " written to PLC at address " + inputGlassIdAddress);
            }
          }
         // 存片ID写入
          if (messageArray.getJSONArray(5).size() > 0) {
            JSONArray jsonArray6 = messageArray.getJSONArray(5);
            if (!jsonArray6.isEmpty()) {
              String value2 = (String) jsonArray6.get(0);
             outmesid( value2,outputGlassIdAddress);
              System.out.println("Values " + value2 + " written to PLC at address " + outputGlassIdAddress);
            }
          }
          if (messageArray.getJSONArray(6).size() > 0) {
            JSONArray jsonArray4 = messageArray.getJSONArray(6);
            List<Boolean> sValueb4 = new ArrayList<>();
            for (int i = 0; i < jsonArray4.size(); i++) {
              Object value = jsonArray4.get(i);
              if (value != null && !value.toString().equals("null")) {
                try {
                  String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                  boolean val = "1".equals(cleanedValue.trim());
                  sValueb4.add(val);
                  System.out.println("messageValue: " + Arrays.asList(val) + " added to the list");
                } catch (NumberFormatException e) {
                  // 如果无法解析为 boolean 类型,则忽略该部分
                  System.err.println("Could not parse value: " + value);
                  jsonArray5 = jsonArray5.replaceAll("[\\[\\]\"]", ""); // 去除方括号和双引号
                  outmesid(jsonArray5, outputGlassIdAddress);
                  System.out.println("Values1 " + jsonArray5 + " written to PLC at address " + outputGlassIdAddress);
                }
              }
            }
            if (!sValueb4.isEmpty()) {
              // 进片ID写入
              if (messageArray.getJSONArray(4).size() > 0) {
                JSONArray jsonArray6 = messageArray.getJSONArray(4);
              S7control.getinstance().WriteBit(A01Bstart, sValueb4);
              System.out.println("Values " + sValueb4 + " written to PLC at address " + A01Bstart);
            }
          }
          if (messageArray.getJSONArray(7).size() > 0) {
            JSONArray jsonArray4 = messageArray.getJSONArray(7);
            List<Boolean> sValueb5 = new ArrayList<>();
            for (int i = 0; i < jsonArray4.size(); i++) {
              Object value = jsonArray4.get(i);
              if (value != null && !value.toString().equals("null")) {
                try {
                  String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                  boolean val = "1".equals(cleanedValue.trim());
                  sValueb5.add(val);
                  System.out.println("messageValue: " + Arrays.asList(val) + " added to the list");
                } catch (NumberFormatException e) {
                  // 如果无法解析为 boolean 类型,则忽略该部分
                  System.err.println("Could not parse value: " + value);
                if (!jsonArray6.isEmpty()) {
                  String value2 = (String) jsonArray6.get(0);
                  outmesid(value2.trim(), inputGlassIdAddress);
                  System.out.println("Values2 " + value2 + " written to PLC at address " + inputGlassIdAddress);
                }
              }
            }
            if (!sValueb5.isEmpty()) {
              S7control.getinstance().WriteBit(A02Bstart, sValueb5);
              System.out.println("Values " + sValueb5 + " written to PLC at address " + A02Bstart);
              if (messageArray.getJSONArray(6).size() > 0) {
                JSONArray jsonArray4 = messageArray.getJSONArray(6);
                List<Boolean> sValueb4 = new ArrayList<>();
                for (int i = 0; i < jsonArray4.size(); i++) {
                  Object value = jsonArray4.get(i);
                  if (value != null && !value.toString().equals("null")) {
                    try {
                      String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                      boolean val = "1".equals(cleanedValue.trim());
                      sValueb4.add(val);
                      System.out.println("messageValue: " + Arrays.asList(val) + " added to the list");
                    } catch (NumberFormatException e) {
                      // 如果无法解析为 boolean 类型,则忽略该部分
                      System.err.println("Could not parse value: " + value);
                    }
                  }
                }
                if (!sValueb4.isEmpty()) {
                  S7control.getinstance().WriteBit(A01Bstart, sValueb4);
                  System.out.println("Values " + sValueb4 + " written to PLC at address " + A01Bstart);
                }
              }
              if (messageArray.getJSONArray(7).size() > 0 && !messageArray.isNull(7)) {
                JSONArray jsonArray4 = messageArray.getJSONArray(7);
                List<Boolean> sValueb5 = new ArrayList<>();
                for (int i = 0; i < jsonArray4.size(); i++) {
                  Object value = jsonArray4.get(i);
                  if (value != null && !value.toString().equals("null")) {
                    try {
                      String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                      boolean val = "1".equals(cleanedValue.trim());
                      sValueb5.add(val);
                      System.out.println("messageValue: " + Arrays.asList(val) + " added to the list");
                    } catch (NumberFormatException e) {
                      // 如果无法解析为 boolean 类型,则忽略该部分
                      System.err.println("Could not parse value: " + value);
                    }
                  }
                }
                if (!sValueb5.isEmpty()) {
                  S7control.getinstance().WriteBit(A02Bstart, sValueb5);
                  System.out.println("Values " + sValueb5 + " written to PLC at address " + A02Bstart);
                }
              }
              // 清空消息列表
              webserver.clearMessages();
            }
          }
//          if (messageArray.getJSONArray(8).size() > 0  ) {
//            JSONArray jsonArray5 = messageArray.getJSONArray(8);
//            List<Boolean> sValueb5 = new ArrayList<>();
//            for (int i = 0; i < jsonArray5.size(); i++) {
//              Object value = jsonArray5.get(i);
//              if (value != null && !value.toString().equals("null")) {
//                try {
//                  String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
//                  boolean val = "1".equals(cleanedValue.trim());
//                  sValueb5.add(val);
//                  System.out.println("messageValue: " + Arrays.asList(val) + " added to the list");
//                } catch (NumberFormatException e) {
//                  // 如果无法解析为 boolean 类型,则忽略该部分
//                  System.err.println("Could not parse value: " + value);
//                }
//              }
//            }
//            if (!sValueb5.isEmpty()) {
//
//              S7control.getinstance().WriteBit(abortresumeTasks, sValueb5);
//              System.out.println("Values " + sValueb5 + " written to PLC at address " + A02Bstart);
//            }
//          }
          // 清空消息列表
          webSocketServer.clearMessages();
        }
      }
    }
springboot-vue3/src/main/java/com/example/springboot/component/Plcaction.java
@@ -88,16 +88,18 @@
        JSONObject jsonObject = new JSONObject();
        jsonObject.append("params", params);
        WebSocketServer sendwServer = WebSocketServer.sessionMap.get("action");
        if (sendwServer != null) {
          sendwServer.sendMessage(jsonObject.toString());
        }
      }
      WebSocketServer webSocketServer = WebSocketServer.sessionMap.get("action");
      if (webSocketServer != null) {
        List<String> messages = webSocketServer.getMessages();
      ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("action");
      if (sendwServer != null) {
        for (WebSocketServer webserver : sendwServer) {
          webserver.sendMessage(jsonObject.toString());
        List<String> messages = webserver.getMessages();
        String addressList = "DB2.0.0";
@@ -130,8 +132,10 @@
          System.out.println("messageValues:" + messageBooleans);
          System.out.println("addressList:" + addressList);
          // 清空消息列表
          webSocketServer.clearMessages();
          webserver.clearMessages();
        }
        }
      }
      }
    }
  }
springboot-vue3/src/main/java/com/example/springboot/component/Plcalarm.java
@@ -28,7 +28,7 @@
    FileInputStream fileInputStream;
    try {
      // 从文件中读取字节数据存入 fileInputStream
      fileInputStream = new FileInputStream("src/main/resources/Alarm.json");
      fileInputStream = new FileInputStream("D:/canadames/Alarm.json");
      // 读取 fileInputStream 中字节并将其解码为字符
      InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "utf-8");
      // 提高读取效率,在 BufferedReader 内包装 InputStreamReader
@@ -101,39 +101,42 @@
        JSONObject jsonObject = new JSONObject();
        jsonObject.append("params", plclist);
        WebSocketServer sendwServer = WebSocketServer.sessionMap.get("alarm");
        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("alarm");
        if (sendwServer != null) {
          sendwServer.sendMessage(jsonObject.toString());
        }
          for (WebSocketServer webserver : sendwServer) {
            webserver.sendMessage(jsonObject.toString());
        // 将获取的布尔类型转换为整数类型
        List<Integer> Intlist = new ArrayList<>();
        for (Boolean value : plclist) {
          Intlist.add(value == true ? 1 : 0);
        }
            // 将获取的布尔类型转换为整数类型
            List<Integer> Intlist = new ArrayList<>();
            for (Boolean value : plclist) {
              Intlist.add(value == true ? 1 : 0);
        // 将Intlist转换为数组
        // System.out.println(Intlist);
        Integer[] shuzu1 = Intlist.toArray(new Integer[0]);
            }
        // 定义的报警内容数组,获取json返回的集合
        List<String> myCollection;
        myCollection = readValue();
        String[] array1 = myCollection.toArray(new String[myCollection.size()]);
      //  System.out.println(array1.length);
        alarmMapper = WebSocketServer.applicationContext.getBean(AlarmMapper.class);
        for (short i = 0; i < array1.length; i++) {
          // 查询对应报警信息结束时间为null的条数
          short result = alarmMapper.selectnullti(array1[i]);
          // 读取到PLC的值为1并且对应报警信息结束时间为null的条数的条数为0
          // System.out.println(result);
          if (shuzu1[i] == 1 && result == 0) {
            // 填加一条报警信息,有开始时间
             alarmMapper.Insertalarm(array1[i]);
          } else if (shuzu1[i] == 0 && result > 0) {
            // 修改该条报警信息的结束时间
            alarmMapper.updatealarm(array1[i]);
            // 将Intlist转换为数组
            // System.out.println(Intlist);
            Integer[] shuzu1 = Intlist.toArray(new Integer[0]);
            // 定义的报警内容数组,获取json返回的集合
            List<String> myCollection;
            myCollection = readValue();
            String[] array1 = myCollection.toArray(new String[myCollection.size()]);
            //  System.out.println(array1.length);
            alarmMapper = WebSocketServer.applicationContext.getBean(AlarmMapper.class);
            for (short i = 0; i < array1.length; i++) {
              // 查询对应报警信息结束时间为null的条数
              short result = alarmMapper.selectnullti(array1[i]);
              // 读取到PLC的值为1并且对应报警信息结束时间为null的条数的条数为0
              // System.out.println(result);
              if (shuzu1[i] == 1 && result == 0) {
                // 填加一条报警信息,有开始时间
                alarmMapper.Insertalarm(array1[i]);
              } else if (shuzu1[i] == 0 && result > 0) {
                // 修改该条报警信息的结束时间
                alarmMapper.updatealarm(array1[i]);
              }
            }
          }
        }
      }
springboot-vue3/src/main/java/com/example/springboot/component/Plchome.java
@@ -17,7 +17,6 @@
import com.example.springboot.service.OutSliceServive;
import com.example.springboot.service.SpianService;
public class Plchome extends Thread {
    @Autowired
@@ -27,12 +26,13 @@
    private SpianService spianService;
    private North_Glass_Buffer1Service north_Glass_Buffer1Service;
    private JdbcConnections dbserve;
    //出片队列是否允许出片
    public static Boolean isAllowQueue=true;
    //铝框id
    // 出片队列是否允许出片
    public static Boolean isAllowQueue = true;
    // 铝框id
    public static String FrameNo;
    //是否需要手动确认玻璃
    public static Boolean isConfirm=false;
    // 是否需要手动确认玻璃
    public static Boolean isConfirm = false;
    // public static Map b=new HashMap<>();
    // b.put()
    @Override
@@ -71,26 +71,26 @@
            // 查询报警信息
            List<alarmmg> alarmmg = homeMapper.SelectAlarmmgInfo();
            jsonObject.append("alarmmg", alarmmg);
            // 读去Plc进片车与出片车位置W
             List<String> addressList = new ArrayList<String>();
             addressList.add("DB106.12");
             addressList.add("DB106.0");
             List<Short> paramlist = S7control.getinstance().ReadWord(addressList);
             if (paramlist != null) {
             jsonObject.append("params", paramlist);
             }
             // 获取进片车状态
             List<Short> datas1ListState = S7control.getinstance().ReadWord("DB106.8",
             1);// 获取进片车状态
             boolean exist1 = datas1ListState.contains((short) 0);
             jsonObject.append("zhuangtai", exist1);
             //获取进片玻璃信息
             List<Short> inglassInfo = S7control.getinstance().ReadWord("DB106.24", 1);
             if (inglassInfo != null) {
             if (inglassInfo.size() > 0)
             jsonObject.append("loadglassheight", inglassInfo.get(0) * 70);
             }
            // // 读去Plc进片车与出片车位置W
            // List<String> addressList = new ArrayList<String>();
            // addressList.add("DB106.12");
            // addressList.add("DB106.0");
            // List<Short> paramlist = S7control.getinstance().ReadWord(addressList);
            // if (paramlist != null) {
            //     jsonObject.append("params", paramlist);
            // }
            // // 获取进片车状态
            // List<Short> datas1ListState = S7control.getinstance().ReadWord("DB106.8",
            //         1);// 获取进片车状态
            // boolean exist1 = datas1ListState.contains((short) 0);
            // jsonObject.append("zhuangtai", exist1);
            // // 获取进片玻璃信息
            // List<Short> inglassInfo = S7control.getinstance().ReadWord("DB106.24", 1);
            // if (inglassInfo != null) {
            //     if (inglassInfo.size() > 0)
            //         jsonObject.append("loadglassheight", inglassInfo.get(0) * 70);
            // }
            // 伍 获取进是否有待确认的玻璃id
            String queid = spianMapper.Selectqueueid();
            int state = spianMapper.Selectqueuestate();
@@ -99,66 +99,60 @@
            // 获取扫码位与上片位玻璃信息
            Queue form2 = homeMapper.GetQueueInfo(2);
            Queue form3 = homeMapper.GetQueueInfo(1);
            if(form2.getglassId()!=null&&form2.getglassId()!=""){
            if (form2.getglassId() != null && form2.getglassId() != "") {
                jsonObject.append("form2", form2);
            }
            if(form3.getglassId()!=null&&form3.getglassId()!=""){
            if (form3.getglassId() != null && form3.getglassId() != "") {
                jsonObject.append("form3", form3);
            }
            // 获取出片队列信息
            List<Out_slice> listoutslice=outSliceServive.SelectProductionqueue();
            List<Out_slice> listoutslice = outSliceServive.SelectProductionqueue();
            // List<Out_slice> listoutslice = homeMapper.SelectProductionqueue();
            // for (Out_slice out_slice : listoutslice) {
            //     out_slice.setstorageCage(homeMapper.SelectStorageGlassById(out_slice.getGlassId()));
            // out_slice.setstorageCage(homeMapper.SelectStorageGlassById(out_slice.getGlassId()));
            // }
            jsonObject.append("listoutslice", listoutslice);
            //获取当前出片队列状态
            jsonObject.append("isAllowQueue",Plchome.isAllowQueue);
            // 获取当前出片队列状态
            jsonObject.append("isAllowQueue", Plchome.isAllowQueue);
            //获取铝框idDB106.DBW64
            // // 获取铝框idDB106.DBW64
            // String frameno=spianService.queGlassid("DB106.24",14).toString();
            // if(frameno!=Plchome.FrameNo){
            //     Plchome.FrameNo=frameno;
            // Plchome.FrameNo=frameno;
            // }
            // Plchome.FrameNo="123";
            // try {
            //     north_Glass_Buffer1Service.AddOutSliceS(Plchome.FrameNo);
            // north_Glass_Buffer1Service.AddOutSliceS(Plchome.FrameNo);
            // } catch (SQLException e) {
            //     // TODO Auto-generated catch block
            //     e.printStackTrace();
            // // TODO Auto-generated catch block
            // e.printStackTrace();
            // }
            //是否需要人工确认上片玻璃
            // 是否需要人工确认上片玻璃
            jsonObject.append("isConfirm", isConfirm);
            //铝框线交互
            // 铝框线交互
            // //铝框id请求字
            // List<Short> framerequest = S7control.getinstance().ReadWord("铝框id请求字地址", 1);
            // if(framerequest!=null){
            //     //铝框id
            //     String franmeno= spianService.queGlassid("铝框id地址", 14).toString();
            //     String position;
            //         try {
            //             position=dbserve.SelectPositionByFrameBarcode(franmeno);
            //         } catch (SQLException e) {
            //             // TODO Auto-generated catch block
            //             position="0";
            //             e.printStackTrace();
            //         }
            //     Short send;
            //     if(position=="0"){
            //         send=0;
            //     }else{
            //         send=1;
            //     }
            //     S7control.getinstance().WriteWord("铝框翻转发送地址", (short)send);
            // //铝框id
            // String franmeno= spianService.queGlassid("铝框id地址", 14).toString();
            // String position;
            // try {
            // position=dbserve.SelectPositionByFrameBarcode(franmeno);
            // } catch (SQLException e) {
            // // TODO Auto-generated catch block
            // position="0";
            // e.printStackTrace();
            // }
            // Short send;
            // if(position=="0"){
            // send=0;
            // }else{
            // send=1;
            // }
            // S7control.getinstance().WriteWord("铝框翻转发送地址", (short)send);
            // }
            dbserve = WebSocketServer.applicationContext.getBean(JdbcConnections.class);
            boolean dbconnected = false;
            try {
@@ -170,13 +164,13 @@
            }
            jsonObject.append("dbconnected", dbconnected);
            // jsonObject.append("params", new short[] { 30, 40, });
            WebSocketServer sendwServer = WebSocketServer.sessionMap.get("Home");
            ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("Home");
            if (sendwServer != null) {
                sendwServer.sendMessage(jsonObject.toString());
                for (WebSocketServer webserver : sendwServer) {
                    webserver.sendMessage(jsonObject.toString());
                }
            }
        }
    }
}
springboot-vue3/src/main/java/com/example/springboot/component/Plcsign.java
@@ -95,11 +95,17 @@
        }
        JSONObject jsonObject = new JSONObject();
        jsonObject.append("sig", Intlist);
        WebSocketServer sendwServer3 = WebSocketServer.sessionMap.get("Sign");
        if (sendwServer3 != null) {
          sendwServer3.sendMessage(jsonObject.toString());
        }
//        WebSocketServer sendwServer3 = WebSocketServer.sessionMap.get("Sign");
//        if (sendwServer3 != null) {
//          sendwServer3.sendMessage(jsonObject.toString());
//        }
        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("Sign");
        if (sendwServer != null) {
          for (WebSocketServer webserver : sendwServer) {
            webserver.sendMessage(jsonObject.toString());
          }
        }
      }
    }
  }
springboot-vue3/src/main/java/com/example/springboot/component/Plcstate.java
@@ -84,9 +84,15 @@
        }
        JSONObject jsonObject = new JSONObject();
        jsonObject.append("sta", Intlist);
        WebSocketServer sendwServer = WebSocketServer.sessionMap.get("State");
//        WebSocketServer sendwServer = WebSocketServer.sessionMap.get("State");
//        if (sendwServer != null) {
//          sendwServer.sendMessage(jsonObject.toString());
//        }
        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("State");
        if (sendwServer != null) {
          sendwServer.sendMessage(jsonObject.toString());
          for (WebSocketServer webserver : sendwServer) {
            webserver.sendMessage(jsonObject.toString());
          }
        }
      }
springboot-vue3/src/main/java/com/example/springboot/component/WebSocketServer.java
@@ -1,144 +1,167 @@
package com.example.springboot.component;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.stereotype.Component;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
@ServerEndpoint(value = "/api/talk/{username}")
@Component
public class WebSocketServer {
    // @Autowired
    // HomeMapper homeMapper;
    static ConfigurableApplicationContext applicationContext;
    //解决无法注入mapper问题  //使用方法 homeMapper=WebSocketServer.applicationContext.getBean(HomeMapper.class);
    public static void setApplicationContext(ConfigurableApplicationContext configurableApplicationContext) {
        WebSocketServer.applicationContext = configurableApplicationContext;
    }
   private static final Logger log = LoggerFactory.getLogger(WebSocketServer.class);
    private List<String> messages;
    /**
     * 记录当前在线连接数
     */
    public static final Map<String, WebSocketServer> sessionMap = new ConcurrentHashMap<>();
    String username;
    Session session;
    public WebSocketServer() {
        this.messages = new ArrayList<>();
    }
    /**
     * 连接建立成功调用的方法
     */
    @OnOpen
    public void onOpen(Session session, @PathParam("username") String username) {
        this.username=username;
        this.session=session;
        sessionMap.put(username, this);
        log.info("有新用户加入,username={}, 当前在线人数为:{}", username, sessionMap.size());
        // JSONObject result = new JSONObject();
        // JSONArray array = new JSONArray();
        // result.set("users", array);
        // for (Object key : sessionMap.keySet()) {
        //     JSONObject jsonObject = new JSONObject();
        //     jsonObject.set("username", key);
        //     array.add(jsonObject);
        // }
        //sendAllMessage(JSONUtil.toJsonStr(result));  // 后台发送消息给所有的客户端
    }
    /**
     * 连接关闭调用的方法
     */
    @OnClose
    public void onClose(Session session, @PathParam("username") String username) {
        sessionMap.remove(username);
        log.info("有一连接关闭,移除username={}的用户session, 当前在线人数为:{}", username, sessionMap.size());
    }
    /**
     * 收到客户端消息后调用的方法
     * 后台收到客户端发送过来的消息
     * onMessage 是一个消息的中转站
     * 接受 浏览器端 socket.send 发送过来的 json数据
     * @param message 客户端发送过来的消息
     */
    @OnMessage
    public void onMessage(String message, Session session, @PathParam("username") String username) {
        log.info("服务端收到用户username={}的消息:{}", username, message);
        JSONObject obj = JSONUtil.parseObj(message);
         String text = obj.getStr("data");
         JSONObject jsonObject = new JSONObject();
         jsonObject.set("message", text);
        this.messages.add(text);
         this.sendMessage(jsonObject.toString()); //JSONUtil.toJsonStr(jsonObject)
    }
    @OnError
    public void onError(Session session, Throwable error) {
        log.error("发生错误");
        error.printStackTrace();
    }
    /**
     * 服务端发送消息给客户端
     */
    public void sendMessage(String message) {
        try {
           // log.info("服务端给客户端[{}]发送消息{}", this.session.getId(), message);
            this.session.getBasicRemote().sendText(message);
        } catch (Exception e) {
            log.error("服务端发送消息给客户端失败", e);
        }
    }
    /**
     * 服务端发送消息给所有客户端
     */
    public void sendAllMessage(String message) {
        try {
            for (WebSocketServer webSocketServer : sessionMap.values()) {
                //log.info("服务端给客户端[{}]发送消息{}", this.session.getId(), message);
                webSocketServer.sendMessage(message);
            }
        } catch (Exception e) {
            log.error("服务端发送消息给客户端失败", e);
        }
    }
    public List<String> getMessages() {
        return messages;
    }
    public void clearMessages() {
        messages.clear();
    }
}
package com.example.springboot.component;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.stereotype.Component;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
@ServerEndpoint(value = "/api/talk/{username}")
@Component
public class WebSocketServer {
    // @Autowired
    // HomeMapper homeMapper;
    static ConfigurableApplicationContext applicationContext;
    // 解决无法注入mapper问题 //使用方法
    // homeMapper=WebSocketServer.applicationContext.getBean(HomeMapper.class);
    public static void setApplicationContext(ConfigurableApplicationContext configurableApplicationContext) {
        WebSocketServer.applicationContext = configurableApplicationContext;
    }
    private static final Logger log = LoggerFactory.getLogger(WebSocketServer.class);
    private List<String> messages;
    /**
     * 记录当前在线连接数
     */
    public static final Map<String, ArrayList<WebSocketServer>> sessionMap = new ConcurrentHashMap<>();
    String username;
    Session session;
    public WebSocketServer() {
        this.messages = new ArrayList<>();
    }
    /**
     * 连接建立成功调用的方法
     */
    @OnOpen
    public void onOpen(Session session, @PathParam("username") String username) {
        this.username = username;
        this.session = session;
        List<WebSocketServer> webSocketServers = sessionMap.get(username);
        if (webSocketServers == null) {
            ArrayList<WebSocketServer> arrayListwebserver = new ArrayList<WebSocketServer>();
            arrayListwebserver.add(this);
            sessionMap.put(username, arrayListwebserver);
        } else {
            webSocketServers.add(this);
        }
        log.info("有新用户加入,username={}, 当前在线人数为:{}", username, sessionMap.get(username).size());
        // JSONObject result = new JSONObject();
        // JSONArray array = new JSONArray();
        // result.set("users", array);
        // for (Object key : sessionMap.keySet()) {
        // JSONObject jsonObject = new JSONObject();
        // jsonObject.set("username", key);
        // array.add(jsonObject);
        // }
        // sendAllMessage(JSONUtil.toJsonStr(result)); // 后台发送消息给所有的客户端
    }
    /**
     * 连接关闭调用的方法
     */
    @OnClose
    public void onClose(Session session, @PathParam("username") String username) {
        List<WebSocketServer> webSocketServers = sessionMap.get(username);
        ArrayList<WebSocketServer> arrayListwebserver = new ArrayList<WebSocketServer>();
        if (webSocketServers.size()>1) {
            for (WebSocketServer webSocketServer : webSocketServers) {
                if(webSocketServer!=this){
                    arrayListwebserver.add(webSocketServer);
                }
            }
            sessionMap.put(username, arrayListwebserver);
            log.info("移除username={}一名用户session, {}的当前在线人数为:{}", username, username, sessionMap.get(username).size());
        }else{
            sessionMap.remove(username);
            log.info("移除username={}一名用户session, {}连接关闭, 当前连接数为:{}", username, username, sessionMap.size());
        }
    }
    /**
     * 收到客户端消息后调用的方法
     * 后台收到客户端发送过来的消息
     * onMessage 是一个消息的中转站
     * 接受 浏览器端 socket.send 发送过来的 json数据
     *
     * @param message 客户端发送过来的消息
     */
    @OnMessage
    public void onMessage(String message, Session session, @PathParam("username") String username) {
        log.info("服务端收到用户username={}的消息:{}", username, message);
        JSONObject obj = JSONUtil.parseObj(message);
        String text = obj.getStr("data");
        JSONObject jsonObject = new JSONObject();
        jsonObject.set("message", text);
        this.messages.add(text);
        this.sendMessage(jsonObject.toString()); // JSONUtil.toJsonStr(jsonObject)
    }
    @OnError
    public void onError(Session session, Throwable error) {
        log.error("发生错误");
        error.printStackTrace();
    }
    /**
     * 服务端发送消息给客户端
     */
    public void sendMessage(String message) {
        try {
            // log.info("服务端给客户端[{}]发送消息{}", this.session.getId(), message);
            this.session.getBasicRemote().sendText(message);
        } catch (Exception e) {
            log.error("服务端发送消息给客户端失败", e);
        }
    }
    // /**
    //  * 服务端发送消息给所有客户端
    //  */
    // public void sendAllMessage(String message) {
    //     try {
    //         for (WebSocketServer webSocketServer : sessionMap.values()) {
    //             // log.info("服务端给客户端[{}]发送消息{}", this.session.getId(), message);
    //             webSocketServer.sendMessage(message);
    //         }
    //     } catch (Exception e) {
    //         log.error("服务端发送消息给客户端失败", e);
    //     }
    // }
    public List<String> getMessages() {
        return messages;
    }
    public void clearMessages() {
        messages.clear();
    }
}
springboot-vue3/src/main/java/com/example/springboot/config/AppRunnerConfig.java
@@ -17,29 +17,28 @@
    //
    System.out.println("启动完成");
     new PlcHold().start();
//new PlcHold().start();
//
    //
    //
    //new PlcPositioning2().start();
    new Plchome().start();
    // //
    // new PlcParameter().start();
    // //
    // new Plcalarm().start();
    // //
    // new Plcsign().start();
    // //
    // new Plcaction().start();
    // new Plcstate().start();
    // new PlcPositioning1().start();
    // new PlcPositioning2().start();
    // new PlcParameter2().start();
    // new PlcParameter1().start();
    // new PLCAutomaticParameterSetting().start();
    // new PlcManualonePosition().start();
    // new PlcManualonePosition2().start();
    // new PlcServoManualone().start();
    // new PLCManualJog().start();
  new Plchome().start();
////    //
//      new PlcParameter().start();
//      //
//      new Plcalarm().start();
//      //
//      new Plcsign().start();
//      //
//      new Plcaction().start();
//      new Plcstate().start();
//      new PlcPositioning1().start();
//      new PlcPositioning2().start();
    //  new PlcParameter2().start();
//      new PlcParameter1().start();
//      new PLCAutomaticParameterSetting().start();
//
//      new PlcManualonePosition().start();
//      new PlcManualonePosition2().start();
//      new PlcServoManualone().start();
//      new PLCManualJog().start();
  }
}
springboot-vue3/src/main/java/com/example/springboot/controller/HomeController.java
@@ -140,7 +140,7 @@
  @GetMapping("/UpdateTask")
  public Result UpdateTask(Integer types, Integer shelfrack, String glassid) {
    Map<String, Object> map = new HashMap<>();
    homeMapper.UpdateTask(types);
    homeMapper.UpdateTask(types,glassid);
    StorageCage glass = homeMapper.SelectGlassInfo(glassid);
    if (types == 0) {
      homeMapper.UpdateCageTask1(glassid);
@@ -374,8 +374,8 @@
  //手动完成任务
  @PostMapping("/CompleteQueue")
  public Result CompleteQueue(String id,String frameid) {
    return outSliceServive.CompleteQueue(id,frameid);
  public Result CompleteQueue(String id,String frameid,String glassid) {
    return outSliceServive.CompleteQueue(id,frameid,glassid);
    
  }
  
springboot-vue3/src/main/java/com/example/springboot/mapper/HomeMapper.java
@@ -55,8 +55,8 @@
  short SelectInTask();
  // 手动完成任务
  @Update("update storage_task set task_state=1 where task_type=#{task_type} and task_state=0")
  void UpdateTask(@Param("task_type") Integer task_type);
  @Update("update storage_task set task_state=1 where task_type=#{task_type} and task_state=0 and glass_id=#{glassid}")
  void UpdateTask(@Param("task_type") Integer task_type,String glassid);
  // 手动完成进片任务修改笼子数据
  @Update("update storage_cage set state=1 where glass_id=#{glassid} and state=2")
@@ -168,8 +168,8 @@
  @Select("select ifnull(max(sequence),0)+1 from out_slice ")
  Short SelectMaxSquence();
  //查询用户权限
  @Select("select rp.* from role_permission rp inner join role r on rp.role_id=r.id and r.name=#{token} and (permission_id=32 or permission_id=33 or permission_id=34 or permission_id=35)")
  List<RolePermission> SelectPermissionByUserName(String token);
  @Select("select rp.* from role_permission rp inner join user r on rp.role_id=r.role_id and r.username=#{username} and (permission_id=32 or permission_id=33 or permission_id=34 or permission_id=35)")
  List<RolePermission> SelectPermissionByUserName(String username);
  //完成出片任务
  @Update("update out_slice set state=2 where id=#{id}")
  void CompleteQueue(String id);
springboot-vue3/src/main/java/com/example/springboot/service/OutSliceServive.java
@@ -6,17 +6,23 @@
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoProperties.Storage;
import org.springframework.stereotype.Service;
import com.example.springboot.common.Result;
import com.example.springboot.component.S7control;
import com.example.springboot.entity.Out_slice;
import com.example.springboot.entity.StorageCage;
import com.example.springboot.mapper.HomeMapper;
import com.example.springboot.mapper.SpianMapper;
@Service
public class OutSliceServive {
  @Autowired
  private HomeMapper homeMapper;
  @Autowired
  private SpianMapper spianMapper;
  @Autowired
  private JdbcConnections jdbcConnections;
@@ -43,15 +49,20 @@
    return listoutslice;
  }
public Result CompleteQueue(String id, String frameid) {
  homeMapper.CompleteQueue(id);
  Short num=homeMapper.SelectCountByFrameNo(frameid);
  if(num==0){
    homeMapper.CompleteQueueByFrameNo(frameid);
  public Result CompleteQueue(String id, String frameid, String glassid) {
    homeMapper.CompleteQueue(id);
    Short num = homeMapper.SelectCountByFrameNo(frameid);
    if (num == 0) {
      homeMapper.CompleteQueueByFrameNo(frameid);
    }
    StorageCage storageCage = homeMapper.SelectGlassInfo(glassid);
    spianMapper.UpdataOutCage1(storageCage.getGlassWidth(), storageCage.getCage(), storageCage.getCell());
    homeMapper.UpdateCageTask2(glassid);
    S7control.getinstance().WriteWord("DB105.12", (short) 0);
    Map<String, Object> map = new HashMap<>();
    map.put("message", "200");
    return Result.success(map);
  }
  Map<String, Object> map = new HashMap<>();
  map.put("message", "200");
  return Result.success(map);
}
}
springboot-vue3/src/main/resources/config.properties
@@ -1,57 +1,56 @@
#PlcServoManualone 地址 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
# A01组合中地址表集合
A01.addresses=DB103.32,DB100.144,DB100.184,DB100.186,DB100.180,DB100.182
# A02组合中地址表集合
A02.addresses=DB103.26,DB100.188,DB100.190,DB100.146
# A01翻转地址
A01.flipAddress=DB103.42
# A02翻转地址
A02.flipAddress=DB103.46
# B01组合中地址
B01.address=DB103.27
# B02组合地址
B02.address=DB103.29
# 所有故障按钮地址
faultButtonAddresses=DB104.1.4,DB104.1.5,DB104.1.2,DB104.1.3,DB104.1.6,DB104.1.7
# 复位按钮地址
resetButtonAddresses=DB101.4.0,DB101.4.3,DB101.3.6,DB101.4.1,DB101.4.4,DB101.4.6
# 所有未回零按钮地址
notHomedButtonAddresses=DB104.9.0,DB104.9.1,DB104.9.4,DB104.9.5
# 进片id地址
inputGlassIdAddress=DB100.148
# 存片id地址
outputGlassIdAddress=DB100.162
#回零按钮地址
HomedButtonAddresses=DB101.3.7,DB101.4.2,DB101.4.5,DB101.4.7
#A02start
A02start=DB101.5.1
#A01start
A01start=DB101.5.0
#A02start
A02Bstart=DB101.11.1
#A01start
A01Bstart=DB101.11.0
#abort/resumeTasks
abortresumeTasks=DB101.10.4
#------------------------------------------------------------
#A02start
mlp.A02start=DB101.2.3
#A01start
mlp.A01start=DB101.2.2
#A02start
mlp.B02start=DB101.2.5
#A01start
mlp.B01start=DB101.2.4
#--------------------------
#A02start
mlp2.A02start=DB101.2.1
#A01start
mlp2.A01start=DB101.2.0
#PlcServoManualone 地址 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
# A01组合中地址表集合
A01.addresses=DB103.32,DB100.144,DB100.184,DB100.186,DB100.180,DB100.182
# A02组合中地址表集合
A02.addresses=DB103.34,DB100.188,DB100.190,DB100.146
# A01翻转地址
A01.flipAddress=DB106.2
# A02翻转地址
A02.flipAddress=DB106.14
# B01组合中地址
B01.address=DB103.36
# B02组合地址
B02.address=DB103.40
# 所有故障按钮地址
faultButtonAddresses=DB104.1.4,DB104.1.5,DB104.1.2,DB104.1.3,DB104.1.6,DB104.1.7
# 复位按钮地址
resetButtonAddresses=DB101.4.0,DB101.4.3,DB101.3.6,DB101.4.1,DB101.4.4,DB101.4.6
# 所有未回零按钮地址
notHomedButtonAddresses=DB104.9.0,DB104.9.1,DB104.9.4,DB104.9.5
# 进片id地址
inputGlassIdAddress=DB100.148
# 存片id地址
outputGlassIdAddress=DB100.162
#回零按钮地址
HomedButtonAddresses=DB101.3.7,DB101.4.2,DB101.4.5,DB101.4.7
#A02start
A02start=DB101.5.1
#A01start
A01start=DB101.5.0
#A02start
A02Bstart=DB101.11.1
#A01start
A01Bstart=DB101.11.0
#abort/resumeTasks
abortresumeTasks=DB101.10.4
#------------------------------------------------------------
#A02start
mlp.A02start=DB101.2.3
#A01start
mlp.A01start=DB101.2.2
#A02start
mlp.B02start=DB101.2.5
#A01start
mlp.B01start=DB101.2.4
#--------------------------
#A02start
mlp2.A02start=DB101.2.1
#A01start
mlp2.A01start=DB101.2.0
#PLCManualJog--------------------------
springboot-vue3/src/main/resources/sql/canadames.sql
Diff too large