wuyouming666
2023-11-29 d973e1b1509da56217a47fa74d4860fbf854c172
Merge branch 'master' of http://10.153.19.25:10101/r/CanadaMes

# Conflicts:
# CanadaMes-ui/src/configuration/Alarm.json
# CanadaMes-ui/src/configuration/ServoManualone.json
# CanadaMes-ui/src/views/Electrical/Parameter1.vue
# CanadaMes-ui/src/views/Electrical/Parameter2.vue
# CanadaMes-ui/src/views/Electrical/ServoManualone.vue
# springboot-vue3/src/main/java/com/example/springboot/component/PlcParameter2.java
# springboot-vue3/src/main/java/com/example/springboot/component/PlcPositioning1.java
# springboot-vue3/src/main/java/com/example/springboot/component/PlcServoManualone.java
# springboot-vue3/src/main/java/com/example/springboot/component/Plcalarm.java
# springboot-vue3/src/main/java/com/example/springboot/component/Plcsign.java
# springboot-vue3/src/main/java/com/example/springboot/config/AppRunnerConfig.java
# springboot-vue3/src/main/java/com/example/springboot/controller/HomeController.java
# springboot-vue3/src/main/java/com/example/springboot/entity/north_glass_buffer1.java
# springboot-vue3/src/main/java/com/example/springboot/mapper/HomeMapper.java
# springboot-vue3/src/main/java/com/example/springboot/mapper/SpianMapper.java
32个文件已修改
3104 ■■■■■ 已修改文件
.vscode/launch.json 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.vscode/settings.json 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/configuration/Action.json 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/configuration/Alarm.json 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/configuration/ManualJog.json 260 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/configuration/Manualoneposition.json 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/configuration/Manualoneposition2.json 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/configuration/Parameter.json 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/configuration/parameter2.json 570 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/lang/locales/en-US.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/Electrical/Action.vue 89 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/Electrical/ManualJog.vue 100 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/Electrical/ManualonePosition.vue 319 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/Electrical/ManualonePosition2.vue 242 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/Electrical/Parameter.vue 65 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/Electrical/Positioning1.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/Electrical/Positioning2.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/home/index.vue 187 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/PLCAutomaticParameterSetting.java 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/PlcHold.java 204 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/PlcManualonePosition.java 353 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/PlcParameter.java 23 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/PlcParameter1.java 45 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/Plcalarm.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/Plchome.java 81 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/Plcsign.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/controller/HomeController.java 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/entity/north_glass_buffer1.java 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/mapper/HomeMapper.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/mapper/SpianMapper.java 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/service/JdbcConnections.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/service/SpianService.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.vscode/launch.json
@@ -4,25 +4,32 @@
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "type": "java",
            "name": "Current File",
            "request": "launch",
            "mainClass": "${file}"
        },
        {
            "type": "java",
            "name": "MyGenerator",
            "request": "launch",
            "mainClass": "MyGenerator",
            "projectName": "springboot-vue3"
        },
        {
            "type": "java",
            "name": "AuthorityApplication",
            "request": "launch",
            "mainClass": "com.example.springboot.AuthorityApplication",
            "projectName": "springboot-vue3"
        }
      {
        "type": "java",
        "name": "AuthorityApplication",
        "request": "launch",
        "mainClass": "com.example.springboot.AuthorityApplication",
        "projectName": "canadames"
      },
      {
        "type": "java",
        "name": "Current File",
        "request": "launch",
        "mainClass": "${file}"
      },
      {
        "type": "java",
        "name": "MyGenerator",
        "request": "launch",
        "mainClass": "MyGenerator",
        "projectName": "springboot-vue3"
      },
      {
        "type": "java",
        "name": "AuthorityApplication",
        "request": "launch",
        "mainClass": "com.example.springboot.AuthorityApplication",
        "projectName": "springboot-vue3"
      }
    ]
}
.vscode/settings.json
@@ -1,3 +1,4 @@
{
    "java.configuration.updateBuildConfiguration": "interactive"
    "java.configuration.updateBuildConfiguration": "interactive",
    "java.debug.settings.onBuildFailureProceed": true
}
CanadaMes-ui/src/configuration/Action.json
@@ -587,6 +587,13 @@
      "state": "1",
      "type": "1",
      "page": "1"
    },
    {
      "name": "abort/resumeTasks",
      "value": 1,
      "state": "1",
      "type": "1",
      "page": "1"
    }
  ],
  "address": [
CanadaMes-ui/src/configuration/Alarm.json
@@ -496,19 +496,12 @@
      "state": "1",
      "type": "3",
      "page": "1"
    },
    {
      "name": "B02.SR right in pos error",
      "value": "1",
      "state": "1",
      "type": "3",
      "page": "1"
    }
  ],
  "address": [
    {
      "name": "DB104.0.0",
      "count": 72
      "count": 71
    }
  ]
}
CanadaMes-ui/src/configuration/ManualJog.json
@@ -3,10 +3,11 @@
    {
      "button": {
        "name": "D01输送",
        "value": 1,
        "value": 0,
        "address": "DB10.0",
        "state": 0
      }
      },
      "type": "3"
    },
    {
      "button": {
@@ -14,7 +15,8 @@
        "value": 1,
        "address": "DB10.0",
        "state": 0
      }
      },
      "type": "3"
    },
    {
      "button": {
@@ -22,7 +24,8 @@
        "value": 1,
        "address": "DB10.0",
        "state": 1
      }
      },
      "type": "3"
    },
    {
      "button": {
@@ -30,7 +33,8 @@
        "value": 0,
        "address": "DB10.0",
        "state": 1
      }
      },
      "type": "3"
    },
    {
      "button": {
@@ -38,7 +42,8 @@
        "value": 0,
        "address": "DB10.0",
        "state": 1
      }
      },
      "type": "3"
    },
    {
      "button": {
@@ -46,109 +51,35 @@
        "value": 0,
        "address": "DB10.0",
        "state": 1
      }
    }
  ],
  [
    {
      "button": {
        "name": "A01注油泵",
        "value": 0,
        "address": "DB10.0",
        "state": 0
      }
    },
    {
      "button": {
        "name": "A01翻转",
        "value": 0,
        "address": "DB10.0",
        "state": 0
      }
    },
    {
      "button": {
        "name": "A01行走点动",
        "value": 0,
        "address": "DB10.0",
        "state": 1
      }
      },
      "type": "3"
    },
    {
      "button": {
        "name": "A01输送正向",
        "value": 0,
        "address": "DB10.0",
        "state": 1
      }
    },
    {
      "button": {
        "name": "A01输送反向",
        "value": 0,
        "address": "DB10.0",
        "state": 1
      }
    }
  ],
  [
    {
      "button": {
        "name": "A02注油泵",
        "value": 0,
        "address": "DB10.0",
        "state": 0
      }
    },
    {
      "button": {
        "name": "A02翻转",
        "value": 0,
        "address": "DB10.0",
        "state": 0
      }
    },
    {
      "button": {
        "name": "A02行走点动",
        "value": 0,
        "address": "DB10.0",
        "state": 1
      }
      },
      "type": "3"
    },
    {
      "button": {
        "name": "A02输送正向",
        "value": 0,
        "address": "DB10.0",
        "state": 1
      }
        "state": 0
      },
      "type": "3"
    },
    {
      "button": {
        "name": "A02输送反向",
        "value": 0,
        "address": "DB10.0",
        "state": 1
      }
    }
  ],
  [
    {
      "button": {
        "name": "B01输送",
        "value": 0,
        "address": "DB10.0",
        "state": 0
      }
    },
    {
      "button": {
        "name": "B01行走点动",
        "value": 0,
        "address": "DB10.0",
        "state": 0
      }
        "state": 1
      },
      "type": "3"
    },
    {
      "button": {
@@ -156,7 +87,53 @@
        "value": 0,
        "address": "DB10.0",
        "state": 1
      }
      },
      "type": "3"
    },
    {
      "button": {
        "name": "A01翻转",
        "value": 0,
        "address": "DB10.0",
        "state": 1
      },
      "type": "3"
    },
    {
      "button": {
        "name": "A02翻转",
        "value": 0,
        "address": "DB10.0",
        "state": 1
      },
      "type": "3"
    },
    {
      "button": {
        "name": "A01行走点动",
        "value": 0,
        "address": "DB10.0",
        "state": 0
      },
      "type": "3"
    },
    {
      "button": {
        "name": "A02行走点动",
        "value": 0,
        "address": "DB10.0",
        "state": 0
      },
      "type": "3"
    },
    {
      "button": {
        "name": "B01行走点动",
        "value": 0,
        "address": "DB10.0",
        "state": 1
      },
      "type": "3"
    },
    {
      "button": {
@@ -164,33 +141,8 @@
        "value": 0,
        "address": "DB10.0",
        "state": 1
      }
    }
  ],
  [
    {
      "button": {
        "name": "B01翻转气缸",
        "value": 0,
        "address": "DB10.0",
        "state": 0
      }
    },
    {
      "button": {
        "name": "B01升降气缸",
        "value": 0,
        "address": "DB10.0",
        "state": 0
      }
    },
    {
      "button": {
        "name": "B01电磁阀",
        "value": 0,
        "address": "DB10.0",
        "state": 1
      }
      },
      "type": "3"
    },
    {
      "button": {
@@ -198,7 +150,8 @@
        "value": 0,
        "address": "DB10.0",
        "state": 0
      }
      },
      "type": "3"
    },
    {
      "button": {
@@ -206,7 +159,8 @@
        "value": 0,
        "address": "DB10.0",
        "state": 0
      }
      },
      "type": "3"
    },
    {
      "button": {
@@ -214,7 +168,71 @@
        "value": 0,
        "address": "DB10.0",
        "state": 1
      }
      },
      "type": "3"
    },
    {
      "button": {
        "name": "B01翻转气缸",
        "value": 0,
        "address": "DB10.0",
        "state": 0
      },
      "type": "3"
    },
    {
      "button": {
        "name": "B01升降气缸",
        "value": 0,
        "address": "DB10.0",
        "state": 0
      },
      "type": "3"
    },
    {
      "button": {
        "name": "B01电磁阀",
        "value": 0,
        "address": "DB10.0",
        "state": 1
      },
      "type": "3"
    },
    {
      "button": {
        "name": "A01输送反向",
        "value": 0,
        "address": "DB10.0",
        "state": 1
      },
      "type": "3"
    },
    {
      "button": {
        "name": "A02输送反向",
        "value": 0,
        "address": "DB10.0",
        "state": 1
      },
      "type": "3"
    },
    {
      "button": {
        "name": "A01注电泵",
        "value": 0,
        "address": "DB10.0",
        "state": 0
      },
      "type": "3"
    },
    {
      "button": {
        "name": "A02注电泵",
        "value": 0,
        "address": "DB10.0",
        "state": 0
      },
      "type": "3"
    }
  ]
]
CanadaMes-ui/src/configuration/Manualoneposition.json
@@ -2,7 +2,7 @@
  [
    {
      "name": "A01手动格子",
      "read": 33,
      "value": 33,
      "sending": 0,
      "type": "0",
      "address": "DB100.0",
@@ -11,7 +11,7 @@
    },
    {
      "name": "A01定位速度",
      "read": 11,
      "value": 11,
      "sending": 0,
      "address": "DB100.0",
      "type": "0",
@@ -19,7 +19,7 @@
    },
    {
      "name": "A01当前格子",
      "read": 22,
      "value": 22,
      "sending": 0,
      "address": "DB100.0",
      "type": "0",
@@ -36,7 +36,7 @@
    {
      "button": {
        "name": "故障",
        "value": 0,
        "value": 1,
        "address": "DB10.0",
        "state": 1
      }
@@ -69,7 +69,7 @@
  [
    {
      "name": "A02手动格子",
      "read": 33,
      "value": 33,
      "sending": 0,
      "type": "0",
      "address": "DB100.0",
@@ -78,7 +78,7 @@
    },
    {
      "name": "A02定位速度",
      "read": 11,
      "value": 11,
      "sending": 0,
      "address": "DB100.0",
      "type": "0",
@@ -86,7 +86,7 @@
    },
    {
      "name": "A02当前格子",
      "read": 22,
      "value": 22,
      "sending": 0,
      "address": "DB100.0",
      "type": "0",
@@ -136,7 +136,7 @@
  [
    {
      "name": "B01手动格子",
      "read": 33,
      "value": 33,
      "sending": 0,
      "type": "0",
      "address": "DB100.0",
@@ -145,7 +145,7 @@
    },
    {
      "name": "B01定位速度",
      "read": 11,
      "value": 11,
      "sending": 0,
      "address": "DB100.0",
      "type": "0",
@@ -153,7 +153,7 @@
    },
    {
      "name": "B01当前格子",
      "read": 22,
      "value": 22,
      "sending": 0,
      "address": "DB100.0",
      "type": "0",
@@ -203,7 +203,7 @@
  [
    {
      "name": "B02手动格子",
      "read": 33,
      "value": 33,
      "sending": 0,
      "type": "0",
      "address": "DB100.0",
@@ -212,7 +212,7 @@
    },
    {
      "name": "B02定位速度",
      "read": 11,
      "value": 11,
      "sending": 0,
      "address": "DB100.0",
      "type": "0",
@@ -220,7 +220,7 @@
    },
    {
      "name": "B02当前格子",
      "read": 22,
      "value": 22,
      "sending": 0,
      "address": "DB100.0",
      "type": "0",
@@ -237,9 +237,9 @@
    {
      "button": {
        "name": "故障",
        "value": 0,
        "value": 1,
        "address": "DB10.0",
        "state": 0
        "state": 1
      }
    },
    {
@@ -270,8 +270,8 @@
  [
    {
      "name": "A01实时位置",
      "read": 33,
      "sending": 0,
      "value": 33,
      "sending": 4,
      "type": "0",
      "address": "DB100.0",
      "count": 3,
@@ -281,8 +281,8 @@
  [
    {
      "name": "A02实时位置",
      "read": 33,
      "sending": 0,
      "value": 33,
      "sending": 5,
      "type": "0",
      "address": "DB100.0",
      "count": 3,
@@ -292,8 +292,8 @@
  [
    {
      "name": "B01实时位置",
      "read": 33,
      "sending": 0,
      "value": 33,
      "sending": 6,
      "type": "0",
      "address": "DB100.0",
      "count": 3,
@@ -303,8 +303,8 @@
  [
    {
      "name": "B02实时位置",
      "read": 33,
      "sending": 0,
      "value": 33,
      "sending": 7,
      "type": "0",
      "address": "DB100.0",
      "count": 3,
CanadaMes-ui/src/configuration/Manualoneposition2.json
@@ -2,7 +2,7 @@
  [
    {
      "name": "手动位置",
      "read": 33,
      "value": 33,
      "sending": 0,
      "type": "0",
      "address": "DB100.0",
@@ -10,14 +10,14 @@
    },
    {
      "name": "定位速度",
      "read": 11,
      "value": 11,
      "sending": 0,
      "address": "DB100.0",
      "type": "0"
    },
    {
      "name": "A01翻转实时位置",
      "read": 22,
      "value": 22,
      "sending": 0,
      "address": "DB100.0",
      "type": "0"
@@ -27,7 +27,7 @@
        "name": "A01翻转启动",
        "value": 0,
        "address": "DB10.0",
        "state": 0
        "state": 1
      }
    },
    {
@@ -35,7 +35,7 @@
        "name": "故障",
        "value": 0,
        "address": "DB10.0",
        "state": 0
        "state": 1
      }
    },
    {
@@ -43,7 +43,7 @@
        "name": "复位",
        "value": 0,
        "address": "DB10.0",
        "state": 0
        "state": 1
      }
    },
    {
@@ -66,7 +66,7 @@
  [
    {
      "name": "手动位置",
      "read": 33,
      "value": 33,
      "sending": 0,
      "type": "0",
      "address": "DB100.0",
@@ -74,14 +74,14 @@
    },
    {
      "name": "定位速度",
      "read": 11,
      "value": 11,
      "sending": 0,
      "address": "DB100.0",
      "type": "0"
    },
    {
      "name": "A02翻转实时位置",
      "read": 22,
      "value": 22,
      "sending": 0,
      "address": "DB100.0",
      "type": "0"
@@ -91,7 +91,7 @@
        "name": "A02翻转启动",
        "value": 0,
        "address": "DB10.0",
        "state": 0
        "state": 1
      }
    },
    {
@@ -99,7 +99,7 @@
        "name": "故障",
        "value": 0,
        "address": "DB10.0",
        "state": 0
        "state": 1
      }
    },
    {
@@ -107,7 +107,7 @@
        "name": "复位",
        "value": 0,
        "address": "DB10.0",
        "state": 0
        "state": 1
      }
    },
    {
CanadaMes-ui/src/configuration/Parameter.json
@@ -526,7 +526,7 @@
      "name": "A01 turn Target Angle(Manual)",
      "value": 0,
      "sending": 0,
      "unit": "°",
      "unit": "°",
      "state": "1",
      "type": "1",
      "page": "1"
@@ -535,7 +535,7 @@
      "name": "A02 turn Target Angle(Manual)",
      "value": 0,
      "sending": 0,
      "unit": "°",
      "unit": "°",
      "state": "1",
      "type": "1",
      "page": "1"
@@ -544,7 +544,7 @@
      "name": "A01 turn Angle1",
      "value": 0,
      "sending": 0,
      "unit": "°",
      "unit": "°",
      "state": "1",
      "type": "1",
      "page": "1"
@@ -553,7 +553,7 @@
      "name": "A01 turn Angle2",
      "value": 0,
      "sending": 0,
      "unit": "°",
      "unit": "°",
      "state": "1",
      "type": "1",
      "page": "1"
@@ -562,7 +562,7 @@
      "name": "A01 turn Angle3",
      "value": 0,
      "sending": 0,
      "unit": "°",
      "unit": "°",
      "state": "1",
      "type": "1",
      "page": "1"
@@ -571,7 +571,7 @@
      "name": "A01 turn Angle4",
      "value": 0,
      "sending": 0,
      "unit": "°",
      "unit": "°",
      "state": "1",
      "type": "1",
      "page": "1"
@@ -580,7 +580,7 @@
      "name": "A02 turn Angle1",
      "value": 0,
      "sending": 0,
      "unit": "°",
      "unit": "°",
      "state": "1",
      "type": "1",
      "page": "1"
@@ -589,7 +589,7 @@
      "name": "A02 turn Angle2",
      "value": 0,
      "sending": 0,
      "unit": "°",
      "unit": "°",
      "state": "1",
      "type": "1",
      "page": "1"
@@ -598,7 +598,7 @@
      "name": "A02 turn Angle3",
      "value": 0,
      "sending": 0,
      "unit": "°",
      "unit": "°",
      "state": "1",
      "type": "1",
      "page": "1"
@@ -607,7 +607,7 @@
      "name": "A02 turn Angle4",
      "value": 0,
      "sending": 0,
      "unit": "°",
      "unit": "°",
      "state": "1",
      "type": "1",
      "page": "1"
CanadaMes-ui/src/configuration/parameter2.json
@@ -1,316 +1,298 @@
[
    [
      {
        "button": {
          "name": "D01手动状态",
          "value":0,
      "address":"DB10.0"
      },"type": "4"
  [
    {
      "button": {
        "name": "D01手动状态",
        "value": 0,
        "address": "DB10.0"
      },
      {
        "button": {
          "name": "清除ID",
          "value":0,
      "address":"DB10.0"
        },"type": "3"
      "type": "4"
    },
    {
      "button": {
        "name": "清除ID",
        "value": 0,
        "address": "DB10.0"
      },
      {
        "name": "ID",
        "read": 33,
        "sending": 0,
        "type": "0",
        "value":0
      }]
      ,[
      {
        "button": {
          "name": "D02手动状态",
          "value":0,
      "address":"DB10.0"
      },"type": "4"
      "type": "3"
    },
    {
      "name": "ID",
      "read": 33,
      "sending": 0,
      "type": "0",
      "value": 0
    }
  ],
  [
    {
      "button": {
        "name": "D02手动状态",
        "value": 0,
        "address": "DB10.0"
      },
      {
        "button": {
          "name": "清除ID",
          "value":0,
      "address":"DB10.0"
        },"type": "3"
      "type": "4"
    },
    {
      "button": {
        "name": "清除ID",
        "value": 0,
        "address": "DB10.0"
      },
      {
        "name": "ID",
        "read": 33,
        "sending": 0,
        "type": "0",
        "value":0
      }
    ]
    ,[
      {
        "button": {
          "name": "D03手动状态",
          "value":0,
      "address":"DB10.0"
      },"type": "4"
      "type": "3"
    },
    {
      "name": "ID",
      "read": 33,
      "sending": 0,
      "type": "0",
      "value": 0
    }
  ],
  [
    {
      "button": {
        "name": "D03手动状态",
        "value": 0,
        "address": "DB10.0"
      },
      {
        "button": {
          "name": "清除ID",
          "value":0,
      "address":"DB10.0"
        },"type": "3"
      "type": "4"
    },
    {
      "button": {
        "name": "清除ID",
        "value": 0,
        "address": "DB10.0"
      },
      {
        "name": "ID",
        "read": 33,
        "sending": 0,
        "type": "0",
        "value":0
      }
    ]
    ,[
      {
        "button": {
          "name": "D04手动状态",
          "value":0,
      "address":"DB10.0"
      },"type": "4"
      "type": "3"
    },
    {
      "name": "ID",
      "read": 33,
      "sending": 0,
      "type": "0",
      "value": 0
    }
  ],
  [
    {
      "button": {
        "name": "D04手动状态",
        "value": 0,
        "address": "DB10.0"
      },
      {
        "button": {
          "name": "清除ID",
          "value":0,
      "address":"DB10.0"
        },"type": "3"
      "type": "4"
    },
    {
      "button": {
        "name": "清除ID",
        "value": 0,
        "address": "DB10.0"
      },
      {
        "name": "ID",
        "read": 33,
        "sending": 0,
        "type": "0",
        "value":0
      }
    ]
     ,[
      {
        "button": {
          "name": "D05手动状态",
          "value":0,
      "address":"DB10.0"
      },"type": "4"
      "type": "3"
    },
    {
      "name": "ID",
      "read": 33,
      "sending": 0,
      "type": "0",
      "value": 0
    }
  ],
  [
    {
      "button": {
        "name": "D05手动状态",
        "value": 0,
        "address": "DB10.0"
      },
      {
        "button": {
          "name": "清除ID",
          "value":0,
      "address":"DB10.0"
        },"type": "3"
      "type": "4"
    },
    {
      "button": {
        "name": "清除ID",
        "value": 0,
        "address": "DB10.0"
      },
      {
        "name": "ID",
        "read": 33,
        "sending": 0,
        "type": "0",
        "value":0
      }
    ]
    ,[
      {
        "button": {
          "name": "D06手动状态",
          "value":0,
      "address":"DB10.0"
      },"type": "4"
      "type": "3"
    },
    {
      "name": "ID",
      "read": 33,
      "sending": 0,
      "type": "0",
      "value": 0
    }
  ],
  [
    {
      "button": {
        "name": "D06手动状态",
        "value": 0,
        "address": "DB10.0"
      },
      {
        "button": {
          "name": "清除ID",
          "value":0,
      "address":"DB10.0"
        },"type": "3"
      "type": "4"
    },
    {
      "button": {
        "name": "清除ID",
        "value": 0,
        "address": "DB10.0"
      },
      {
        "name": "ID",
        "read": 33,
        "sending": 0,
        "type": "0",
        "value":0
      }
    ] ,[
      {
        "button": {
          "name": "A01手动状态",
          "value":0,
      "address":"DB10.0"
      },"type": "4"
      "type": "3"
    },
    {
      "name": "ID",
      "read": 33,
      "sending": 0,
      "type": "0",
      "value": 0
    }
  ],
  [
    {
      "button": {
        "name": "A01手动状态",
        "value": 0,
        "address": "DB10.0"
      },
      {
        "button": {
          "name": "清除ID",
          "value":0,
      "address":"DB10.0"
        },"type": "3"
      "type": "4"
    },
    {
      "button": {
        "name": "清除ID",
        "value": 0,
        "address": "DB10.0"
      },
      {
        "name": "ID1",
        "read": 33,
        "sending": 0,
        "type": "0",
        "value":0
      },{
        "name": "ID2",
        "read": 33,
        "sending": 0,
        "type": "0",
        "value":0
      }
    ]
    ,[
      {
        "button": {
          "name": "A02手动状态",
          "value":0,
      "address":"DB10.0"
      },"type": "4"
      "type": "3"
    },
    {
      "name": "ID1",
      "read": 33,
      "sending": 0,
      "type": "0",
      "value": 0
    },
    {
      "name": "ID2",
      "read": 33,
      "sending": 0,
      "type": "0",
      "value": 0
    }
  ],
  [
    {
      "button": {
        "name": "A02手动状态",
        "value": 0,
        "address": "DB10.0"
      },
      {
        "button": {
          "name": "清除ID",
          "value":0,
      "address":"DB10.0"
        },"type": "3"
      "type": "4"
    },
    {
      "button": {
        "name": "清除ID",
        "value": 0,
        "address": "DB10.0"
      },
      {
        "name": "ID",
        "read": 33,
        "sending": 0,
        "type": "0",
        "value":0
      }
    ]
    ,[
      {
        "button": {
          "name": "B01手动状态",
          "value":0,
      "address":"DB10.0"
        },"type": "4"
      "type": "3"
    },
    {
      "name": "ID",
      "read": 33,
      "sending": 0,
      "type": "0",
      "value": 0
    }
  ],
  [
    {
      "button": {
        "name": "B01手动状态",
        "value": 0,
        "address": "DB10.0"
      },
      {
        "button": {
          "name": "清除ID",
          "value":0,
      "address":"DB10.0"
        },"type": "3"
      "type": "4"
    },
    {
      "button": {
        "name": "清除ID",
        "value": 0,
        "address": "DB10.0"
      },
      {
        "name": "ID",
        "read": 33,
        "sending": 0,
        "type": "0",
        "value":0
      }
    ],[
      {
        "button": {
          "name": "B02手动状态",
          "value":0,
      "address":"DB10.0"
      },"type": "4"
      "type": "3"
    },
    {
      "name": "ID",
      "read": 33,
      "sending": 0,
      "type": "0",
      "value": 0
    }
  ],
  [
    {
      "button": {
        "name": "B02手动状态",
        "value": 0,
        "address": "DB10.0"
      },
      {
        "button": {
          "name": "清除ID",
          "value":0,
      "address":"DB10.0"
        },"type": "3"
      "type": "4"
    },
    {
      "button": {
        "name": "清除ID",
        "value": 0,
        "address": "DB10.0"
      },
      {
        "name": "ID",
        "read": 33,
        "sending": 0,
        "type": "0",
        "value":0
      }
    ]
    ,[
      {
        "name": "扫描枪扫码的ID",
        "read": 66,
        "sending": 0,
        "type": "0",
        "value":0
      }
    ]
    ,[
      {
        "name": "A01当前格子",
        "read": 333,
        "sending": 0,
        "type": "0",
        "value":0
      },
      {
        "name": "A02所在格子",
        "read": 333,
        "sending": 0,
        "type": "0",
        "value":0
      },
      {
        "name": "B01所在格子",
        "read": 333,
        "sending": 0,
        "type": "0",
        "value":0
      },
      {
        "name": "B02所在格子",
        "read": 333,
        "sending": 0,
        "type": "0",
        "value":0
      }
    ]
      "type": "3"
    },
    {
      "name": "ID",
      "read": 33,
      "sending": 0,
      "type": "0",
      "value": 0
    }
  ],
  [
    {
      "name": "扫描枪扫码的ID",
      "read": 66,
      "sending": 0,
      "type": "0",
      "value": 0
    }
  ],
  [
    {
      "name": "A01当前格子",
      "read": 333,
      "sending": 0,
      "type": "0",
      "value": 0
    },
    {
      "name": "A02所在格子",
      "read": 333,
      "sending": 0,
      "type": "0",
      "value": 0
    },
    {
      "name": "B01所在格子",
      "read": 333,
      "sending": 0,
      "type": "0",
      "value": 0
    },
    {
      "name": "B02所在格子",
      "read": 333,
      "sending": 0,
      "type": "0",
      "value": 0
    }
  ]
]
CanadaMes-ui/src/lang/locales/en-US.json
@@ -254,7 +254,7 @@
  "endTime":"endTime",
  "The Side":"The Side",
  "barcode":"barcode",
  "Barcode":"Barcode",
  "Order No":"Order No",
  "List No":"List No",
  "Box No":"Box No",
CanadaMes-ui/src/views/Electrical/Action.vue
@@ -12,10 +12,11 @@
      }}</router-link>
      <router-link to="/Electrical/Sign" tag="el-button" type="text" active-class="blue-button">{{ $t('Sign')
      }}</router-link>
       <router-link to="/Electrical/Servomanual" tag="el-button" type="text" active-class="blue-button">{{ $t('Servo Manual')
      <router-link to="/Electrical/Servomanual" tag="el-button" type="text" active-class="blue-button">{{
        $t('ServoManual')
      }}</router-link>
    </el-breadcrumb>
    <div>Action</div>
    <el-form label-width="100px" style="display: flex;flex-wrap: wrap;" :model="{ messagepack }">
      <!-- <div class="kuai_div" v-for="item in record.xyData" :key="item.value">
@@ -47,62 +48,10 @@
      jsonData: data,
      activeButton: '',
      record: {
        params: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
        canshu: [
          'D01 VFD conveyor',
          'D02 VFD conveyor',
          'D03 VFD conveyor',
          'D04 VFD conveyor',
          'D05 VFD conveyor',
          'D06 VFD conveyor',
          'A01 VFD conveyor',
          'A02 VFD conveyor',
          'B01 VFD conveyor',
          'B02 VFD conveyor',
          'A01 SERVE TURN JOG+',
          'A02 SERVE TURN JOG-',
          'A01 SERVE TRAVEL JOG+',
          'A02 SERVE TRAVEL JOG-',
          'B01 SERVE TRAVEL JOG+',
          'B02 SERVE TRAVEL JOG-',
          'A01 SERVE TURN POS',
          'A02 SERVE TURN POS',
          'A01 SERVE TRAVEL POS',
          'A02 SERVE TRAVEL POS',
          'B01 SERVE TRAVEL POS',
          'B02 SERVE TRAVEL POS',
          'B01 YV TURN',
          'B01 YV UP DOWN',
          'B02 YV TURN',
          'B02 YV UP DOWN',
        ],
        params: [],
        xyData: [
          { name: 'D01 VFD conveyor', value: "0" },
          { name: 'D02 VFD conveyor', value: "0" },
          { name: 'D03 VFD conveyor', value: "0" },
          { name: 'D04 VFD conveyor', value: "0" },
          { name: 'D05 VFD conveyor', value: "0" },
          { name: 'D06 VFD conveyor', value: "0" },
          { name: 'A01 VFD conveyor', value: "0" },
          { name: 'A02 VFD conveyor', value: "0" },
          { name: 'B01 VFD conveyor', value: "0" },
          { name: 'B02 VFD conveyor', value: "0" },
          { name: 'A01 SERVE TURN JOG+', value: "0" },
          { name: 'A02 SERVE TURN JOG-', value: "0" },
          { name: 'A01 SERVE TRAVEL JOG+', value: "0" },
          { name: 'A02 SERVE TRAVEL JOG-', value: "0" },
          { name: 'B01 SERVE TRAVEL JOG+', value: "0" },
          { name: 'B02 SERVE TRAVEL JOG-', value: "0" },
          { name: 'A01 SERVE TURN POS', value: "0" },
          { name: 'A02 SERVE TURN POS', value: "0" },
          { name: 'A01 SERVE TRAVEL POS', value: "0" },
          { name: 'A02 SERVE TRAVEL POS', value: "0" },
          { name: 'B01 SERVE TRAVEL POS', value: "0" },
          { name: 'B02 SERVE TRAVEL POS', value: "0" },
          { name: 'B01 YV TURN', value: "0" },
          { name: 'B01 YV UP DOWN', value: "0" },
          { name: 'B02 YV TURN', value: "0" },
          { name: 'B02 YV UP DOWN', value: "0" },
        ]
        ,
      },
@@ -153,13 +102,25 @@
          }
          let obj = JSON.parse(msg.data);
          this.record.params[0] = obj.params[0];
          // console.log(obj.params);
          if (obj.params) {
            this.record.params[0] = obj.params[0];
            for (let a = 0; a <= this.record.params[0].length - 1; a++) {
              this.record.xyData[a].name = this.jsonData.action[a].name;
              this.record.xyData[a].value = this.record.params[0][a].toString();
            this.record.xyData = this.jsonData.action;
            for (let a = 0; a < this.record.xyData.length; a++) {
              if (this.record.params[0][a]) {
                this.record.xyData[a].value = this.record.params[0][a].toString();
              }
            }
            this.record.xyData = this.jsonData.action.filter(item => {
              return item.state != 0;
            }
            );
            const language = this.$i18n.locale;
            if (language === 'en-US') {
              this.replaceChineseWithEnglish();
@@ -184,14 +145,14 @@
    },
    send () {
      this.messagepack.data = this.record.xyData.map(item => parseInt(item.value)); // 转换为整数数组
      //console.log(this.messagepack);
      console.log(this.messagepack);
      socket?.send(JSON.stringify(this.messagepack));
    },
    //语言转换
    replaceChineseWithEnglish () {
      const translation = this.$t('langActions');
      this.record.xyData = this.record.xyData.map(item => { return { name: translation[item.name] || item.name, value: item.value }; });
      console.log(translation);
    },
  }
CanadaMes-ui/src/views/Electrical/ManualJog.vue
@@ -45,12 +45,12 @@
      }}</router-link>
    </el-breadcrumb>
    <el-row :gutter="20">
      <el-col :span="18" v-for="(dataGroup, groupIndex) in jsonData" :key="groupIndex">
    <el-row :gutter="1">
      <el-col :span="24" 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: space-between;">
            <div v-for="(item, itemIndex) in dataGroup" :key="itemIndex">
          <div class="button-row" style="display: flex; justify-content: flex-start;flex-wrap:wrap;">
            <div v-for="(item, itemIndex) in dataGroup" :key="itemIndex" style="margin: 10px;">
              <el-button v-if="item.button" :name="item.button.name" :class="getStatusClass(item.button.value)"
                class="action-button" @click="updateButtonValue(dataGroup, itemIndex); submitDataToBackend();">{{
                  item.button.name
@@ -67,7 +67,7 @@
<script>
import LanguageMixin from '../../lang/LanguageMixin'
import data from '../../configuration/ManualJog'
let socket;
export default {
  name: "ManualJog",
  mixins: [LanguageMixin],
@@ -76,6 +76,11 @@
      jsonData: data // 加载整个data.json文件作为jsonData
    }
  },
  created () {
    this.initWebSocket();
    // console.log('jsonData:', this.jsonData);
  },
  methods: {
    updateButtonValue (dataGroup, itemIndex) {
      this.$set(dataGroup[itemIndex].button, 'value', 1); // 点击按钮后将值改为1
@@ -83,17 +88,21 @@
    submitDataToBackend () {
      const inputData = this.jsonData.map(dataGroup => {
        return dataGroup.map(item => {
          if (item.type === '0') {
            return { name: item.name, value: item.value, address: item.address };
          } else if (item.button) {
            return { name: item.button.name, value: item.button.value, address: item.button.address };
          if (item.type === '3') {
            return { value: item.button.value };
          }
          return null;
        });
      });
      // 模拟提交数据到后端的操作,实际情况下需要根据你的后端API进行修改
      console.log('提交以下数据到后端:', inputData);
      const values = inputData.flat().filter(item => item !== null).map(item => item.value);
      const jsonObject = { data: values };
      // 提交数据到后端
      const jsonString = JSON.stringify(jsonObject);
      console.log('Type为3的value:', jsonString);
      socket?.send(jsonString);
    },
    //根据读取PLC的值,根据名称改变颜色1打开,0关闭
@@ -106,6 +115,75 @@
        return "dow";
      }
    },
    initWebSocket () {
      let viewname = "ManualJog";
      if (typeof WebSocket === "undefined") {
        console.log("您的浏览器不支持WebSocket");
      } else {
        let socketUrl = "ws://" + "localhost:8888" + "/springboot-vue3/api/talk/" + viewname;
        if (socket != null) {
          socket.close();
          socket = null;
        }
        // 开启一个websocket服务
        socket = new WebSocket(socketUrl);
        // 打开事件
        socket.onopen = function () {
          console.log("websocket已打开");
        };
        // 收到消息
        socket.onmessage = (msg) => {
          if (!msg.data) {
            return; // 如果收到空数据,则直接返回,不执行后续逻辑
          }
          let obj = JSON.parse(msg.data);
          const jsonData2 = this.jsonData;
          // 如果鼠标不在输入框内,更新输入框的值
          // this.submitDataToBackend()
          const parms = obj.params;
          // const xiaoche = obj.params[3];
          //console.log(parms);
          for (let i = 0; i < jsonData2.length; i++) {
            let arr = jsonData2[i];
            for (let j = 0; j < arr.length; j++) {
              let obj = arr[j];
              obj.button.value = parms[0][j];
            }
          }
        };
        // 关闭事件
        socket.onclose = function () {
          console.log("websocket已关闭");
        };
        // 发生错误事件
        socket.onerror = function () {
          console.log("websocket发生了错误");
        };
      }
    },
    send () {
      socket?.send(JSON.stringify(this.messagepack));
    }
  }
}
CanadaMes-ui/src/views/Electrical/ManualonePosition.vue
@@ -57,9 +57,10 @@
          </div>
          <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 && item.button.state != 0" :name="item.button.name" class="action-button"
                @click="updateButtonValue(dataGroup, itemIndex); submitDataToBackend();">{{ item.button.name
                }}</el-button>
              <el-button v-if="item.button && item.button.state != 0" :name="item.button.name" v-model="item.button.value"
                :class="{ 'action-button': true, 'error-button': item.button.name === '故障' && item.button.value === 1 }"
                @click="updateButtonValue(dataGroup, itemIndex); submitDataToBackend(item.button.name);">{{
                  item.button.name }}</el-button>
            </div>
          </div>
        </el-card>
@@ -72,35 +73,313 @@
<script>
import LanguageMixin from '../../lang/LanguageMixin'
import data from '../../configuration/Manualoneposition'
import { throttle } from 'lodash';
let socket;
export default {
  name: "ManualonePosition",
  mixins: [LanguageMixin],
  data () {
    return {
      jsonData: data, // 加载整个data.json文件作为jsonData
      RenderingCollections: []
      jsonData: data,
      // 加载整个data.json文件作为jsonData
    }
  },
  created () {
    this.initWebSocket();
    // console.log('jsonData:', this.jsonData);
  },
  methods: {
    updateButtonValue (dataGroup, itemIndex) {
      this.$set(dataGroup[itemIndex].button, 'value', 1); // 点击按钮后将值改为1
      // 将当前按钮的值设为1
      this.$set(dataGroup[itemIndex].button, 'value', 1);
    },
    submitDataToBackend () {
      const inputData = this.jsonData.map(dataGroup => {
        return dataGroup.map(item => {
          if (item.type === '0') {
            return { name: item.name, value: item.value, address: item.address };
          } else if (item.button) {
            return { name: item.button.name, value: item.button.value, address: item.button.address };
    submitDataToBackend (currentButtonName) {
      if (currentButtonName === 'A01启动') {
        const data = [];
        for (let i = 0; i < 1; i++) {
          const inputData = this.jsonData[i].filter(item => item.type === '0').map(item => {
            return { value: item.value };
          });
          const values = inputData.map(item => item.value);
          data.push(values);
        }
        const jsonObject = { data };
        // 提交数据到后端
        const jsonString = JSON.stringify(jsonObject);
        console.log('所有Type为0的value:', jsonString);
        socket?.send(jsonString);
      }
      if (currentButtonName === 'A02启动') {
        const data = [];
        for (let i = 1; i < 2; i++) {
          const inputData = this.jsonData[i].filter(item => item.type === '0').map(item => {
            return { value: item.value };
          });
          const values = inputData.map(item => item.value);
          data.unshift([]);
          data.push(values);
        }
        const jsonObject = { data };
        // 提交数据到后端
        const jsonString = JSON.stringify(jsonObject);
        console.log('所有Type为0的value:', jsonString);
        socket?.send(jsonString);
      }
      if (currentButtonName === 'B01启动') {
        const data = [];
        for (let i = 2; i < 3; i++) {
          const inputData = this.jsonData[i].filter(item => item.type === '0').map(item => {
            return { value: item.value };
          });
          const values = inputData.map(item => item.value);
          data.unshift([], []);
          data.push(values);
        }
        const jsonObject = { data };
        // 提交数据到后端
        const jsonString = JSON.stringify(jsonObject);
        console.log('所有Type为0的value:', jsonString);
        socket?.send(jsonString);
      }
      if (currentButtonName === 'B02启动') {
        const data = [];
        for (let i = 3; i < 4; i++) {
          const inputData = this.jsonData[i].filter(item => item.type === '0').map(item => {
            return { value: item.value };
          });
          const values = inputData.map(item => item.value);
          data.unshift([], [], []);
          data.push(values);
        }
        const jsonObject = { data };
        // 提交数据到后端
        const jsonString = JSON.stringify(jsonObject);
        console.log('所有Type为0的value:', jsonString);
        socket?.send(jsonString);
      }
      if (currentButtonName === '故障') {
        const data2 = [];
        const resetButtonValues = this.jsonData.map(item => {
          const buttonItem = item.find(subItem => subItem.button && subItem.button.name === '故障');
          return buttonItem ? buttonItem.button.value : null;
        }).filter(value => value !== null);
        // 将得到的值添加到 data 数组中
        data2.push(...resetButtonValues);
        data2.unshift([], [], [], []);
        const jsonObject2 = { data2 };
        // 提交数据到后端
        const jsonString2 = JSON.stringify(jsonObject2);
        console.log('所有故障的value:', jsonString2);
        socket?.send(jsonString2);
      }
      if (currentButtonName === '复位') {
        const data2 = [];
        const resetButtonValues = this.jsonData.map(item => {
          const buttonItem = item.find(subItem => subItem.button && subItem.button.name === '复位');
          return buttonItem ? buttonItem.button.value : null;
        }).filter(value => value !== null);
        // 将得到的值添加到 data 数组中
        data2.push(...resetButtonValues);
        data2.unshift([], [], [], [], []);
        const jsonObject2 = { data2 };
        // 提交数据到后端
        const jsonString2 = JSON.stringify(jsonObject2);
        console.log('所有复位的value:', jsonString2);
        socket?.send(jsonString2);
      }
      if (currentButtonName === '回零') {
        const data2 = [];
        const resetButtonValues = this.jsonData.map(item => {
          const buttonItem = item.find(subItem => subItem.button && subItem.button.name === '回零');
          return buttonItem ? buttonItem.button.value : null;
        }).filter(value => value !== null);
        // 将得到的值添加到 data 数组中
        data2.push(...resetButtonValues);
        data2.unshift([], [], [], [], [], []);
        const jsonObject2 = { data2 };
        // 提交数据到后端
        const jsonString2 = JSON.stringify(jsonObject2);
        console.log('所有回零的value:', jsonString2);
        socket?.send(jsonString2);
      }
    },
    initWebSocket () {
      let viewname = "ManualonePosition";
      if (typeof WebSocket === "undefined") {
        console.log("您的浏览器不支持WebSocket");
      } else {
        let socketUrl = "ws://" + "localhost:8888" + "/springboot-vue3/api/talk/" + viewname;
        if (socket != null) {
          socket.close();
          socket = null;
        }
        // 开启一个websocket服务
        socket = new WebSocket(socketUrl);
        // 打开事件
        socket.onopen = function () {
          console.log("websocket已打开");
        };
        // 收到消息
        socket.onmessage = (msg) => {
          if (!msg.data) {
            return; // 如果收到空数据,则直接返回,不执行后续逻辑
          }
          return null;
        });
      });
      // 模拟提交数据到后端的操作,实际情况下需要根据你的后端API进行修改
      console.log('提交以下数据到后端:', inputData);
          let obj = JSON.parse(msg.data);
          //console.log(obj)
          const jsonData2 = this.jsonData;
          const handleMouseMove = throttle(function (event) {
            const inputBox = document.querySelectorAll('.el-card__body');
            const target = event.target;
            if (inputBox && Array.from(inputBox).every(box => !box.contains(target))) {
              // 执行更新逻辑
              for (let i = 0; i < 4; i++) {
                jsonData2[i].forEach((item, index) => {
                  if (typeof item.value !== 'undefined' && typeof obj[`zuhe${i + 1}`][0][index] !== 'undefined') {
                    item.value = obj[`zuhe${i + 1}`][0][index];
                  }
                });
              }
              //更新实时位置
              jsonData2.forEach((item) => {
                item.forEach((subItem) => {
                  if (subItem.sending === 4) {
                    subItem.value = obj.shishi1[0][0];
                  }
                  if (subItem.sending === 5) {
                    subItem.value = obj.shishi1[0][1];
                  }
                  if (subItem.sending === 6) {
                    subItem.value = obj.shishi1[0][2];
                  }
                  if (subItem.sending === 7) {
                    subItem.value = obj.shishi1[0][3];
                  }
                });
              });
              // 遍历guzhang数组
              for (let i = 0; i < obj.guzhang[0].length; i++) {
                const guzhangValue = obj.guzhang[0][i];
                // 查找jsonData2中带有"button"的对象,并且name等于"故障"
                for (let j = 0; j < jsonData2.length; j++) {
                  const section = jsonData2[j];
                  for (let k = 0; k < section.length; k++) {
                    const item = section[k];
                    if (item.button && item.button.name === "故障") {
                      // 更新value属性
                      item.button.value = guzhangValue;
                      break;
                    }
                  }
                }
              }
            }
          }, 200);
          document.addEventListener('mouseover', handleMouseMove);
        };
        // 关闭事件
        socket.onclose = function () {
          console.log("websocket已关闭");
        };
        // 发生错误事件
        socket.onerror = function () {
          console.log("websocket发生了错误");
        };
      }
    },
    send () {
      socket?.send(JSON.stringify(this.messagepack));
    }
  }
}
</script>
@@ -126,4 +405,8 @@
.el-card ::v-deep .el-card__body {
  padding: 13px;
}
.error-button {
  background-color: red;
}
</style>
CanadaMes-ui/src/views/Electrical/ManualonePosition2.vue
@@ -51,14 +51,16 @@
          <div v-for="(item, itemIndex) in dataGroup" :key="itemIndex" class="item-container">
            <div class="item-row">
              <span class="name" style="width:100px;">{{ item.name }}</span>
              <el-input style="width:250px;" v-if="item.type === '0'" v-model="item.value" class="input-box"></el-input>
              <el-input style="width:250px;" v-if="item.state != 0 && item.type === '0'" v-model="item.value"
                class="input-box"></el-input>
            </div>
          </div>
          <div class="button-row" style="display: flex; justify-content: space-between;">
            <div v-for="(item, itemIndex) in dataGroup" :key="itemIndex">
              <el-button v-if="item.button" :name="item.button.name" class="action-button"
                @click="updateButtonValue(dataGroup, itemIndex); submitDataToBackend();">{{ item.button.name
                }}</el-button>
              <el-button v-if="item.button && item.button.state != 0" :name="item.button.name" v-model="item.button.value"
                :class="{ 'action-button': true, 'error-button': item.button.name === '故障' && item.button.value === 1 }"
                @click="updateButtonValue(dataGroup, itemIndex); submitDataToBackend(item.button.name);">{{
                  item.button.name }}</el-button>
            </div>
          </div>
        </el-card>
@@ -71,7 +73,8 @@
<script>
import LanguageMixin from '../../lang/LanguageMixin'
import data from '../../configuration/Manualoneposition2'
import { throttle } from 'lodash';
let socket;
export default {
  name: "ManualonePosition2",
  mixins: [LanguageMixin],
@@ -80,26 +83,229 @@
      jsonData: data // 加载整个data.json文件作为jsonData
    }
  },
  created () {
    this.initWebSocket();
    // console.log('jsonData:', this.jsonData);
  },
  methods: {
    updateButtonValue (dataGroup, itemIndex) {
      this.$set(dataGroup[itemIndex].button, 'value', 1); // 点击按钮后将值改为1
      // 将当前按钮的值设为1
      this.$set(dataGroup[itemIndex].button, 'value', 1);
    },
    submitDataToBackend () {
      const inputData = this.jsonData.map(dataGroup => {
        return dataGroup.map(item => {
          if (item.type === '0') {
            return { name: item.name, value: item.value, address: item.address };
          } else if (item.button) {
            return { name: item.button.name, value: item.button.value, address: item.button.address };
    submitDataToBackend (currentButtonName) {
      if (currentButtonName === 'A01翻转启动') {
        const data = [];
        for (let i = 0; i < 1; i++) {
          const inputData = this.jsonData[i].filter(item => item.type === '0').map(item => {
            return { value: item.value };
          });
          const values = inputData.map(item => item.value);
          data.push(values);
        }
        const jsonObject = { data };
        // 提交数据到后端
        const jsonString = JSON.stringify(jsonObject);
        console.log('所有Type为0的value:', jsonString);
        socket?.send(jsonString);
      }
      if (currentButtonName === 'A02翻转启动') {
        const data = [];
        for (let i = 1; i < 2; i++) {
          const inputData = this.jsonData[i].filter(item => item.type === '0').map(item => {
            return { value: item.value };
          });
          const values = inputData.map(item => item.value);
          data.unshift([]);
          data.push(values);
        }
        const jsonObject = { data };
        // 提交数据到后端
        const jsonString = JSON.stringify(jsonObject);
        console.log('所有Type为0的value:', jsonString);
        socket?.send(jsonString);
      }
      if (currentButtonName === '故障') {
        const data2 = [];
        const resetButtonValues = this.jsonData.map(item => {
          const buttonItem = item.find(subItem => subItem.button && subItem.button.name === '故障');
          return buttonItem ? buttonItem.button.value : null;
        }).filter(value => value !== null);
        // 将得到的值添加到 data 数组中
        data2.push(...resetButtonValues);
        data2.unshift([], []);
        const jsonObject2 = { data2 };
        // 提交数据到后端
        const jsonString2 = JSON.stringify(jsonObject2);
        console.log('所有故障的value:', jsonString2);
        socket?.send(jsonString2);
      }
      if (currentButtonName === '复位') {
        const data2 = [];
        const resetButtonValues = this.jsonData.map(item => {
          const buttonItem = item.find(subItem => subItem.button && subItem.button.name === '复位');
          return buttonItem ? buttonItem.button.value : null;
        }).filter(value => value !== null);
        // 将得到的值添加到 data 数组中
        data2.push(...resetButtonValues);
        data2.unshift([], [], []);
        const jsonObject2 = { data2 };
        // 提交数据到后端
        const jsonString2 = JSON.stringify(jsonObject2);
        console.log('所有Type为0的value:', jsonString2);
        socket?.send(jsonString2);
      }
    },
    initWebSocket () {
      let viewname = "ManualonePosition2";
      if (typeof WebSocket === "undefined") {
        console.log("您的浏览器不支持WebSocket");
      } else {
        let socketUrl = "ws://" + "localhost:8888" + "/springboot-vue3/api/talk/" + viewname;
        if (socket != null) {
          socket.close();
          socket = null;
        }
        // 开启一个websocket服务
        socket = new WebSocket(socketUrl);
        // 打开事件
        socket.onopen = function () {
          console.log("websocket已打开");
        };
        // 收到消息
        socket.onmessage = (msg) => {
          if (!msg.data) {
            return; // 如果收到空数据,则直接返回,不执行后续逻辑
          }
          return null;
        });
      });
      // 模拟提交数据到后端的操作,实际情况下需要根据你的后端API进行修改
      console.log('提交以下数据到后端:', inputData);
          let obj = JSON.parse(msg.data);
          console.log(obj)
          const jsonData2 = this.jsonData;
          const handleMouseMove = throttle(function (event) {
            const inputBox = document.querySelectorAll('.el-card__body');
            const target = event.target;
            if (inputBox && Array.from(inputBox).every(box => !box.contains(target))) {
              // 执行更新逻辑
              for (let i = 0; i < 2; i++) {
                jsonData2[i].forEach((item, index) => {
                  if (typeof item.value !== 'undefined' && typeof obj[`zuhe${i + 1}`][0][index] !== 'undefined') {
                    item.value = obj[`zuhe${i + 1}`][0][index];
                  }
                });
              }
              jsonData2.forEach((item) => {
                item.forEach((subItem) => {
                  if (subItem.sending === 4) {
                    subItem.value = obj.shishi1[0][0];
                  }
                  if (subItem.sending === 5) {
                    subItem.value = obj.shishi1[0][1];
                  }
                  if (subItem.sending === 6) {
                    subItem.value = obj.shishi1[0][2];
                  }
                  if (subItem.sending === 7) {
                    subItem.value = obj.shishi1[0][3];
                  }
                });
              });
              // 遍历guzhang数组
              for (let i = 0; i < obj.guzhang[0].length; i++) {
                const guzhangValue = obj.guzhang[0][i];
                // 查找jsonData2中带有"button"的对象,并且name等于"故障"
                for (let j = 0; j < jsonData2.length; j++) {
                  const section = jsonData2[j];
                  for (let k = 0; k < section.length; k++) {
                    const item = section[k];
                    if (item.button && item.button.name === "故障") {
                      // 更新value属性
                      item.button.value = guzhangValue;
                      break;
                    }
                  }
                }
              }
            }
          }, 200);
          document.addEventListener('mouseover', handleMouseMove);
        };
        // 关闭事件
        socket.onclose = function () {
          console.log("websocket已关闭");
        };
        // 发生错误事件
        socket.onerror = function () {
          console.log("websocket发生了错误");
        };
      }
    },
    send () {
      socket?.send(JSON.stringify(this.messagepack));
    }
  }
}
</script>
CanadaMes-ui/src/views/Electrical/Parameter.vue
@@ -12,8 +12,9 @@
      }}</router-link>
      <router-link to="/Electrical/Sign" tag="el-button" type="text" active-class="blue-button">{{ $t('Sign')
      }}</router-link>
       <router-link to="/Electrical/Servomanual" tag="el-button" type="text" active-class="blue-button">{{ $t('Servo Manual')
        }}</router-link>
      <router-link to="/Electrical/Servomanual" tag="el-button" type="text" active-class="blue-button">{{
        $t('ServoManual')
      }}</router-link>
    </el-breadcrumb>
    <div>Parameter</div>
@@ -29,8 +30,7 @@
        <span style="margin-right: 5px; width: 50px;">{{ item.value }}</span>
        <span style="margin-right: 5px; font-size: 14px;color: red;">|</span>
        <input v-model="item.value2" type="number"
          style="width: 43px; margin-right: 5px; margin-top: 5px; font-size: 16px;">
        <input type="number" style="width: 43px; margin-right: 5px; margin-top: 5px; font-size: 16px;">
        <span style="margin-right: 5px; width: 50px;">{{ item.unit }}</span>
      </div>
@@ -59,18 +59,7 @@
      record: {
        params: [100, 200, 10, 10, 10, 10],
        xyData: [
          { name: "conveyor Velocity(Auto FAST)", value: 0, value2: 0, unit: "m/min" },
          { name: "conveyor Velocity(Auto SLOW)", value: 0, value2: 0, unit: "m/min" },
          { name: "conveyor Velocity(Manual)", value: 0, value2: 0, unit: "m/min" },
          { name: "A01 A02 TURN JOG Velocity", value: 0, value2: 0, unit: "mm/S" },
          { name: "A01 A02 TRAVEL JOG Velocity", value: 0, value2: 0, unit: "mm/S" },
          { name: "B01 B02 TRAVEL JOG Velocity", value: 0, value2: 0, unit: "mm/S" },
          { name: "A01 A02 TURN POS Velocity AUTO", value: 0, value2: 0, unit: "mm/S" },
          { name: "A01 A02 TURN POS Velocity manual", value: 0, value2: 0, unit: "mm/S" },
          { name: "A01 A02 TRAVEL POS Velocity AUTO", value: 0, value2: 0, unit: "mm/S" },
          { name: "A01 A02 TRAVEL POS Velocity manual", value: 0, value2: 0, unit: "mm/S" },
          { name: "B01 B02 TRAVEL POS Velocity AUTO", value: 0, value2: 0, unit: "mm/S" },
          { name: "B01 B02 TRAVEL POS Velocity manual", value: 0, value2: 0, unit: "mm/S" }
        ],
        canshu: []
      },
@@ -89,14 +78,9 @@
    this.initWebSocket();
    this.isButtonDisabled = true;
  },
  methods: {
    showdata () {
      console.log(1111);
      console.log(this.jsonData.para[0].name);
      // console.log(this.record.xyData);
    },
    setActiveButton (buttonName) {
@@ -135,8 +119,6 @@
          if (obj.params && obj.state) {
            this.record.params[0] = obj.params[0];
            this.record.state = obj.state[0];
            if (obj.state && obj.state.length > 0) {
@@ -144,31 +126,18 @@
              this.isButtonDisabled = isButtonDisabled;
              // 判断state中是否存在1
              //console.log(isButtonDisabled)
              // 将判断结果保存到变量isButtonDisabled中
              this.record.xyData = this.jsonData.para;
              for (let a = 0; a <= this.record.params[0].length - 1; a++) {
                // this.record.xyData[a] =
                // {
                //   name: this.jsonData.para[a].name,
                //   value: this.jsonData.para[a].read,
                //   value2: this.jsonData.para[a].sending,
                //   unit: this.jsonData.para[a].unit
                // };
              for (let a = 0; a < this.record.xyData.length; a++) {
                this.record.xyData[a].value = this.record.params[0][a];
                // if (!this.xyData[a]) {
                this.record.xyData[a] =
                {
                  name: this.jsonData.para[a].name,
                  value: this.record.params[0][a],
                  unit: this.jsonData.para[a].unit
                };
              }
              // else {
              //     this.xyData[a].value = this.record.params[0][a];
              //   }
              // }
              this.record.xyData = this.jsonData.para.filter(item => {
                return item.state != 0;
              }
              );
              const language = this.$i18n.locale;
              if (language === 'en-US') {
                this.replaceChineseWithEnglish();
@@ -220,10 +189,8 @@
  border: 1px solid black;
  border: none;
}
.special-class{
}
.special-class {}
.in_mc {
CanadaMes-ui/src/views/Electrical/Positioning1.vue
@@ -160,7 +160,7 @@
              // 如果鼠标不在输入框内,更新输入框的值
              // this.submitDataToBackend()
              const parms = obj.params;
              console.log(parms)
              let index = 0;
CanadaMes-ui/src/views/Electrical/Positioning2.vue
@@ -156,7 +156,7 @@
              // this.submitDataToBackend()
              const parms = obj.params;
              console.log(parms)
              let index = 0;
              for (let i = 0; i < jsonData2.length; i++) {
                let arr = jsonData2[i];
CanadaMes-ui/src/views/home/index.vue
@@ -67,17 +67,17 @@
}
.blocks {
    background-image: url('../../img/xmjc.png');
    margin: 0 auto;
    background-repeat: no-repeat;
    background-attachment: local;
    width: 1660px;
    min-height: 55vh;
    width: 1400px;
    max-width: 94vw;
    background-size: 1200px 510px;
    /* max-width: 100vw;
    margin: 0 auto;
    /* width: 1660px;
    max-width: 100vw;
    background-size: 1660px 560px; */
@@ -119,8 +119,8 @@
.orderbutton2 {
    position: absolute;
    left: 1170px;
    top: 70px;
    left: 500px;
    top: -10px;
}
.blocks-img3 {
@@ -185,6 +185,11 @@
.el-dialog {
    width: 90%;
}
/* .el-table td,
.el-table th {
    padding: 0px 0;
} */
</style>
<template>
    <el-container>
@@ -209,11 +214,17 @@
                <el-table :data="this.tasklist1" border style="width: 100%">
                    <el-table-column :width="130" prop="cage" :label="$t('Cage No')"></el-table-column>
                    <el-table-column :width="130" prop="cell" :label="$t('Slot No')"></el-table-column>
                    <el-table-column :width="150" prop="glassId" :label="$t('Outfeed glass barcode')"></el-table-column>
                    <el-table-column :width="130" prop="north_glass_buffer1s.ordernumber" :label="$t('Order No')"></el-table-column>
                    <el-table-column :width="180" prop="glassId" :label="$t('Outfeed glass barcode')"></el-table-column>
                    <el-table-column :width="130" prop="north_glass_buffer1s.ordernumber"
                        :label="$t('Order No')"></el-table-column>
                    <el-table-column prop="north_glass_buffer1s.listnumber" :label="$t('List No')"></el-table-column>
                    <el-table-column prop="north_glass_buffer1s.boxnumber" :label="$t('Box No')"></el-table-column>
                    <el-table-column prop="lengthWidth" :label="$t('Dim')"></el-table-column>
                    <el-table-column :width="130" prop="lengthWidth" :label="$t('Dim')">
                        <template slot-scope='scope'>
                            {{ scope.row.north_glass_buffer1s.glasslength }}*{{ scope.row.north_glass_buffer1s.glassheight
                            }}
                        </template>
                    </el-table-column>
                    <el-table-column :label="$t('Terminate Task')">
                        <template slot-scope='scope'>
                            <el-button type="primary" style="padding: 4px 10px;font-size: 12px;"
@@ -225,13 +236,15 @@
                <el-table :data="this.tasklist2" border style="width: 100%">
                    <el-table-column :width="130" prop="cage" :label="$t('Cage No')"></el-table-column>
                    <el-table-column :width="130" prop="cell" :label="$t('Slot No')"></el-table-column>
                    <el-table-column :width="150" prop="glassId" :labelf="$t('Infeed glass barcode')"></el-table-column>
                    <el-table-column :width="130" prop="north_glass_buffer1s.ordernumber" :label="$t('Order No')"></el-table-column>
                    <el-table-column :width="180" prop="glassId" :label="$t('Infeed glass barcode')"></el-table-column>
                    <el-table-column :width="130" prop="north_glass_buffer1s.ordernumber"
                        :label="$t('Order No')"></el-table-column>
                    <el-table-column prop="north_glass_buffer1s.listnumber" :label="$t('List No')"></el-table-column>
                    <el-table-column prop="north_glass_buffer1s.boxnumber" :label="$t('Box No')"></el-table-column>
                    <el-table-column prop="lengthWidth" :label="$t('Dim')">
                    <el-table-column :width="130" prop="lengthWidth" :label="$t('Dim')">
                        <template slot-scope='scope'>
                            {{ scope.row.north_glass_buffer1s.glasslength }}*{{ scope.row.north_glass_buffer1s.glassheight }}
                            {{ scope.row.north_glass_buffer1s.glasslength }}*{{ scope.row.north_glass_buffer1s.glassheight
                            }}
                        </template>
                    </el-table-column>
@@ -341,10 +354,10 @@
                    <el-input v-model="form.glassheight" readonly autocomplete="off" />
                </el-form-item>
                <el-form-item :label="$t('Length')">
                    <el-input v-model="form.glasslengthMm" readonly autocomplete="off" />
                    <el-input v-model="form.glasslengthmm" readonly autocomplete="off" />
                </el-form-item>
                <el-form-item :label="$t('Width')">
                    <el-input v-model="form.glassheightMm" readonly autocomplete="off" />
                    <el-input v-model="form.glassheightmm" readonly autocomplete="off" />
                </el-form-item>
            </el-form>
@@ -392,12 +405,12 @@
                <el-table-column :width="90" prop="cage" :label="$t('Cage No')"></el-table-column>
                <el-table-column :width="90" prop="cell" :label="$t('Slot No')"></el-table-column>
                <el-table-column :width="55" prop="tier" :label="$t('The Side')"></el-table-column>
                <el-table-column :width="100" prop="glassId" :label="$t('Barcode')"></el-table-column>
                <el-table-column :width="145" prop="glassId" :label="$t('Barcode')"></el-table-column>
                <el-table-column :width="100" prop="orderId" :label="$t('Order No')"></el-table-column>
                <el-table-column :width="100" prop="north_glass_buffer1s.listnumber"
                <el-table-column :width="80" prop="north_glass_buffer1s.listnumber"
                    :label="$t('List No')"></el-table-column>
                <el-table-column :width="100" prop="north_glass_buffer1s.boxnumber" :label="$t('Box No')"></el-table-column>
                <el-table-column :width="170" prop="lengthWidth" :label="$t('Dim')"></el-table-column>
                <el-table-column :width="150" prop="lengthWidth" :label="$t('Dim')"></el-table-column>
                <el-table-column :width="280" :label="$t('Operate')">
                    <template slot-scope='scope'>
                        <el-button type="primary" style="padding: 4px 10px;font-size: 12px;"
@@ -420,11 +433,11 @@
            <el-button type="primary" @click="selectglassinfo()">{{ $t('Query') }}</el-button>
            <el-table :data="GlassInfo.slice((currentPage - 1) * pagesize, currentPage * pagesize)
                " :height="700" border style="width: 100%;overflow: auto;">
                <el-table-column prop="barcode" :label="$t('Barcode')"></el-table-column>
                <el-table-column prop="ordernumber" :label="$t('Order No')"></el-table-column>
                <el-table-column prop="listnumber" :label="$t('List No')"></el-table-column>
                <el-table-column prop="boxnumber" :label="$t('Box No')"></el-table-column>
                <el-table-column prop="frameBarcode" :label="$t('Frame No')"></el-table-column>
                <el-table-column prop="glasslength" :label="$t('Length')"></el-table-column>
                <el-table-column prop="glassheight" :label="$t('Width')"></el-table-column>
            </el-table>
@@ -547,11 +560,11 @@
                    </el-form-item>
                </div>
                <div style="display: flex;justify-content: space-around;">
                    <el-button @click="DeleteQueueGlasss(2)" type="primary" :disabled="disabled1">{{ $t('Clear Current')
                    <el-button @click="DeleteQueueGlasss(2)" type="primary" :disabled="disabled">{{ $t('Clear Current')
                    }}</el-button>
                    <el-button @click="InsertQueueGlass(2)" type="primary" :disabled="disabled1">
                    <el-button @click="InsertQueueGlass(2)" type="primary" :disabled="disabled">
                        {{ $t('Confirm Modification') }}</el-button>
                    <el-button @click="DeleteQueueGlasss(1)" type="primary" :disabled="disabled1">{{ $t('Clear Current')
                    <el-button @click="DeleteQueueGlasss(1)" type="primary" :disabled="disabled">{{ $t('Clear Current')
                    }}</el-button>
                    <el-button @click="InsertQueueGlass(1)" type="primary" :disabled="disabled1">
                        {{ $t('Confirm Modification') }}</el-button>
@@ -576,6 +589,17 @@
                <el-table-column prop="north_glass_buffer1s.glassheight" :label="$t('Width')"></el-table-column>
                <el-table-column :width="280" :label="$t('Operate')">
                    <template slot-scope='scope'>
                        <el-button type="text" size="small" @click="getTopMove(scope.row, scope.$index)"
                            :disabled="scope.$index == 0">
                            置顶
                        </el-button>
                        <el-button type="text" size="small" @click="getUpMove(scope.row, scope.$index)"
                            :disabled="scope.$index == 0">
                            上移
                        </el-button>
                        <el-button type="text" size="small" @click="getDownMove(scope.row, scope.$index)"
                            :disabled="OutSlice.length - 1 == scope.$index">下移
                        </el-button>
                        <el-button type="primary" style="padding: 4px 10px;font-size: 12px;"
                            @click="deleteproductionqueueglass(scope.row.id)">{{ $t('Delete') }}</el-button>
                    </template>
@@ -608,7 +632,7 @@
                        {{ scope.row.out_slice != null ? $t('Yes') : $t('No') }}
                    </template>
                </el-table-column>
                <el-table-column prop="storageCage.tier" :label="$t('In the cage')">
                    <template slot-scope='scope'>
                        {{ scope.row.storageCage != null ? $t('Yes') : $t('No') }}
@@ -616,7 +640,8 @@
                </el-table-column>
                <el-table-column :width="80" :label="$t('Operate')">
                    <template slot-scope='scope'>
                        <el-checkbox label="" :disabled="!(scope.row.storageCage != null&&scope.row.out_slice == null)" :checked="scope.row.isCheck"  @change="CheckBoxchange(scope.row.barcode,$event)"></el-checkbox>
                        <el-checkbox label="" :disabled="!(scope.row.storageCage != null && scope.row.out_slice == null)"
                            :checked="scope.row.isCheck" @change="CheckBoxchange(scope.row.barcode, $event)"></el-checkbox>
                    </template>
                </el-table-column>
            </el-table>
@@ -709,7 +734,6 @@
    methods: {
        init() {
            let viewname = "Home";
            if (typeof (WebSocket) == "undefined") {
                console.log("您的浏览器不支持WebSocket");
            } else {
@@ -743,50 +767,56 @@
                    this.tasklist1 = obj.tasklist1[0];
                    this.tasklist2 = obj.tasklist2[0];
                    this.alarm = obj.alarmmg[0];
                    //出片队列
                    this.OutSlice = obj.listoutslice[0];
                    this.loadglassheight = obj.loadglassheight;
                    if (obj.zhuangtai != null) {
                        this.zhuangtai = obj.zhuangtai[0];
                    }
                    if(this.dialogFormVisible7==true){
                    if (this.dialogFormVisible7 == true) {
                        this.showform7();
                    }
                    // this.glassid1 = obj.queid[0];
                    // if (obj.queid[0] != "" && obj.queid[0] != null && obj.state[0] == 0) {
                    //     this.state = false;
                    //     this.disabled = true;
                    //     this.disabled1 = false;
                    //     this.showform3();
                    // } else if (obj.queid[0] != "" && obj.queid[0] != null && obj.state[0] == 1) {
                    //     this.state = true;
                    //     this.disabled = true;
                    //     this.disabled1 = true;
                    // }
                    // else {
                    //     this.state = true;
                    //     this.disabled = false;
                    //     this.disabled1 = false;
                    // }
                    if (obj.form2 != null && obj.form2 != "") {
                        this.form2 = obj.form2[0];
                    } else {
                        this.form2 = {};
                    }
                    if (obj.form3 != null && obj.form3 != "" && obj.state[0] == 1) {
                        this.form3 = obj.form3[0];
                    } else {
                        this.form3 = {};
                    }
                    if (obj.form3 != null && obj.form3 != "" && obj.state[0] == 0) {
                        this.form5 = obj.form3[0];
                        this.showform3();
                        if (this.form5.glassheightmm < 380 || this.form5.glasslengthmm < 390 || this.form5.glassheightmm > 1810 || this.form5.glasslengthmm > 2760) {
                            if (this.disabled1 == false) {
                                this.disabled1 = true;
                                this.$message.error(this.$t('The glass size is not within the range'));
                            }
                        } else {
                            this.disabled1 = false;
                        }
                    } else {
                        if (this.form5.glassheightmm < 380 || this.form5.glasslengthmm < 390 || this.form5.glassheightmm > 1810 || this.form5.glasslengthmm > 2760) {
                            if (this.disabled1 == false) {
                                this.disabled1 = true;
                                // this.$message.error(this.$t('The glass size is not within the range'));
                            }
                        } else {
                            this.disabled1 = false;
                        }
                    }
                    //if (obj.dbconnected == "false") {
                    this.text = this.$t('DataBase Connection failed');
                    // }
                    SelectCageInfo(this.cage).then(res => {
                        this.cageinfo = res.data.cageinfo;
                    });
                    if (this.dialogFormVisible3 == true) {
                        SelectCageInfo(this.cage).then(res => {
                            this.cageinfo = res.data.cageinfo;
                        });
                    }
                    SelectGlass(this.orderid).then(res => {
                        this.GlassInfo = res.data.glass;
                    });
@@ -954,6 +984,15 @@
                    if (res.data.form != null) {
                        this.form5 = res.data.form;
                        this.$message.success(this.$t('query was successful'));
                        if (this.form5.glassheightmm < 380 || this.form5.glasslengthmm < 390 || this.form5.glassheightmm > 1810 || this.form5.glasslengthmm > 2760) {
                            if (this.disabled1 == false) {
                                this.disabled1 = true;
                                this.$message.error(this.$t('The glass size is not within the range'));
                            }
                        } else {
                            alert(1);
                            this.disabled1 = false;
                        }
                    } else {
                        this.$message.error(this.$t('There is no such glass'));
                    }
@@ -991,13 +1030,13 @@
            SelectAluminumFrameInfoById(this.framebarcode).then(res => {
                this.AluminumFrame = res.data.listAluminumFrame;
                this.AluminumFrame.forEach(item => {
                    if(item.storageCage!=null&&item.out_slice==null){
                    if (item.storageCage != null && item.out_slice == null) {
                        item.isCheck = true;
                    }else{
                    } else {
                        item.isCheck = false;
                    }
                    item.Flip=res.data.flip;
                    item.FrameNo=this.framebarcode;
                    item.Flip = res.data.flip;
                    item.FrameNo = this.framebarcode;
                });
            });
            this.dialogFormVisible7 = true;
@@ -1051,7 +1090,6 @@
            this.cage = cage;
            SelectCageInfo(cage).then(res => {
                this.cageinfo = res.data.cageinfo;
                console.log(this.cageinfo)
                this.dialogFormVisible3 = true;
            });
        },
@@ -1261,35 +1299,42 @@
                }
            });
        },
        CheckBoxchange(glassid,isChecked){
            this.AluminumFrame.forEach(item=>{item.barcode=glassid;item.isCheck=isChecked})
            console.log(this.AluminumFrame);
        CheckBoxchange(glassid, isChecked) {
            this.AluminumFrame.forEach(item => { item.barcode = glassid; item.isCheck = isChecked })
        },
        addoutslice(){
        addoutslice() {
            // var AluminumFrames1=this.AluminumFrame.map(item=>{return item.barcode});
            // var AluminumFrames2=this.AluminumFrame.map(item=>{return item.isCheck});
            // var AluminumFrames3=this.AluminumFrame.map(item=>{return item.Flip});
            var dats_=new Array();
            var dats_ = new Array();
            this.AluminumFrame.forEach(item => {
                var dats2_=new Array();
                dats2_[0]=item.barcode;
                dats2_[1]=item.isCheck;
                dats2_[2]=item.Flip;
                dats2_[3]=item.FrameNo;
                dats2_[4]=item.glasslengthMm;
                dats2_[5]=item.glassheightMm;
                dats_[dats_.length]=dats2_;
                var dats2_ = new Array();
                dats2_[0] = item.barcode;
                dats2_[1] = item.isCheck;
                dats2_[2] = item.Flip;
                dats2_[3] = item.FrameNo;
                dats2_[4] = item.glasslengthmm;
                dats2_[5] = item.glassheightmm;
                dats_[dats_.length] = dats2_;
            });
            console.log(dats_);
            //var AluminumFrames=this.AluminumFrame.map((item)=>({barcode,isCheck,Flip}) );
            // console.log(AluminumFrames1);
            // console.log(AluminumFrames2);
            // console.log(AluminumFrames3);
            AddOutSliceS(dats_).then(res=>{
            AddOutSliceS(dats_).then(res => {
                if (res.data.message == 200) {
                    this.$message.success(this.$t('Operation successful'));
                }
            });
        }, getTopMove(row, index) {
            this.OutSlice.splice(index, 1)
            this.OutSlice.unshift(row)
        },
        //上移
        getUpMove(row, index) {
            let arr = this.OutSlice;
            arr.splice(index - 1, 1, ...arr.splice(index, 1, arr[index - 1]));
        },
        //下移
        getDownMove(row, index) {
            let arr = this.OutSlice;
            arr.splice(index, 1, ...arr.splice(index + 1, 1, arr[index]));
        }
    }
}
springboot-vue3/src/main/java/com/example/springboot/component/PLCAutomaticParameterSetting.java
@@ -71,18 +71,18 @@
      // Integer Plccount = this.count;
      // System.out.println(stt);
      // List<Short> arraylist = S7control.getinstance().ReadWord("DB100.120", 8);
      // List<Short> dache1 = S7control.getinstance().ReadWord("DB100.18", 1);
      // List<Short> xiaoche1 = S7control.getinstance().ReadWord("DB100.22", 1);
      // List<Short> fanzhuan1 = S7control.getinstance().ReadWord("DB100.14", 1);
      Short[] values1 = { 1, 2, 3, 4, 5, 6, 7, 8 };
      List<Short> arraylist = new ArrayList<>(Arrays.asList(values1));
      Short[] fanzhuan = { 4 };
      List<Short> fanzhuan1 = new ArrayList<>(Arrays.asList(fanzhuan));
      Short[] dache = { 5 };
      List<Short> dache1 = new ArrayList<>(Arrays.asList(dache));
      Short[] xiaoche = { 6 };
      List<Short> xiaoche1 = new ArrayList<>(Arrays.asList(xiaoche));
      List<Short> arraylist = S7control.getinstance().ReadWord("DB100.120", 8);
      List<Short> dache1 = S7control.getinstance().ReadWord("DB100.18", 1);
      List<Short> xiaoche1 = S7control.getinstance().ReadWord("DB100.22", 1);
      List<Short> fanzhuan1 = S7control.getinstance().ReadWord("DB100.14", 1);
      // Short[] values1 = { 1, 2, 3, 4, 5, 6, 7, 8 };
      // List<Short> arraylist = new ArrayList<>(Arrays.asList(values1));
      // Short[] fanzhuan = { 4 };
      // List<Short> fanzhuan1 = new ArrayList<>(Arrays.asList(fanzhuan));
      // Short[] dache = { 5 };
      // List<Short> dache1 = new ArrayList<>(Arrays.asList(dache));
      // Short[] xiaoche = { 6 };
      // List<Short> xiaoche1 = new ArrayList<>(Arrays.asList(xiaoche));
      JSONObject jsonObject = new JSONObject();
      // new short[]{1,1, 1, 1, 1, 1, 2, 33, 2,3, 4, 5}
@@ -138,7 +138,7 @@
              try {
                String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                short sValue = Short.parseShort(cleanedValue.trim());
                // S7control.getinstance().WriteWord(addressList1, Arrays.asList(sValue));
                S7control.getinstance().WriteWord(addressList2, Arrays.asList(sValue));
                System.out
                    .println("messageValue:" + Arrays.asList(sValue) + " written to PLC at address " + addressList2);
              } catch (NumberFormatException e) {
@@ -155,7 +155,7 @@
              try {
                String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                short sValue = Short.parseShort(cleanedValue.trim());
                // S7control.getinstance().WriteWord(addressList2, Arrays.asList(sValue));
                S7control.getinstance().WriteWord(addressList3, Arrays.asList(sValue));
                System.out
                    .println("messageValue:" + Arrays.asList(sValue) + " written to PLC at address " + addressList3);
              } catch (NumberFormatException e) {
@@ -165,14 +165,14 @@
            }
          }
          // 写入第二个地址
          // 写入第三个地址
          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(addressList2, Arrays.asList(sValue));
                S7control.getinstance().WriteWord(addressList4, Arrays.asList(sValue));
                System.out
                    .println("messageValue:" + Arrays.asList(sValue) + " written to PLC at address " + addressList4);
              } catch (NumberFormatException e) {
@@ -182,9 +182,9 @@
            }
          }
          // 写入第三个地址
          // 写入第四个地址
          if (!mergedList.isEmpty()) {
            // S7control.getinstance().WriteWord(addressList3, mergedList);
            S7control.getinstance().WriteWord(addressList1, mergedList);
            System.out.println("messageValue:" + mergedList + " written to PLC at address " + addressList1);
          }
springboot-vue3/src/main/java/com/example/springboot/component/PlcHold.java
@@ -2,6 +2,7 @@
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Base64;
import java.util.List;
import org.apache.ibatis.javassist.compiler.ast.Symbol;
@@ -39,23 +40,9 @@
      spianMapper = WebSocketServer.applicationContext.getBean(SpianMapper.class);
      jdbcConnections = WebSocketServer.applicationContext.getBean(JdbcConnections.class);
      String str = "Hello";
      char[] charArray = new char[str.length()];
      for (int i = 0; i < str.length(); i++) {
        charArray[i] = str.charAt(i);
      }
      System.out.println(charArray);
      // spianService.selectout("1145");
      // spianService.selectAll("11");
      // spianService.selectAll2();
      // 增加队列表数据
      // spianMapper.insertqueue("1",1,1500);
      // 根据玻璃id获取订单号,单独数据源
      // try {
      // north_glass_buffer1 glass = jdbcConnections.selectGlass(112);
      // // System.out.println(glass.getOrderId());
      // } catch (SQLException e) {
      // // TODO Auto-generated catch block
@@ -65,102 +52,82 @@
      // 判断进片请求
      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.12", 1);// 获取进片车任务是否启动
      List<Short> datas1ListState2 = S7control.getinstance().ReadWord("DB105.16", 1);// 获取进片车任务是否启动
      if (datas1List != null && datas1ListState != null) {
        // 获取prc进片请求数据
        boolean exist = datas1List.contains((short) 1);
        // 获取进片车状态
        boolean exist1 = datas1ListState.contains((short) 0);
        // 判断进片车任务是否启动
        boolean exist2 = datas1ListState2.contains((short) 1);
        String glassid = "";
        StringBuilder strId = new StringBuilder();
        StringBuilder writedstrId = new StringBuilder();
        if (!inglassbegin & !exist1)// 当进片车不空闲时
        {
          inglassbegin = true;
        }
        if (inglassbegin & exist1)// 当进片车空闲时
        {
          inglassbegin = false;
          spianMapper.Updatetask(1, 0);// 立即结束数据库表中的上片任务
          spianMapper.UpdataAddCageState(1, 2);
        }
        // 进片请求为1时
        if (exist == true) {
          // 当进片车空闲时
          if (exist1 == true) {
            // 获取已下发的进片id 与plc请求的id作比较
            byte[] writedglassidbytes = S7control.getinstance().ReadByte("DB105.16", 13);
            if (writedglassidbytes != null) { //
              // 获取玻璃id
              for (byte iditem : writedglassidbytes) {
                writedstrId.append(iditem);
              }
            }
            // 获取进片id
            byte[] datas1ListID = S7control.getinstance().ReadByte("DB106.26", 13);
            if (datas1ListID != null) {
              // 获取玻璃id
              for (byte list1 : datas1ListID) {
                strId.append(list1);
              }
              if (!writedstrId.toString().equals(strId.toString())) // 已经下发的id与plc请求的id不一样时,认为不是重复的任务,才执行下发任务指令
              {
                int glasslimit = 1;// 判断是否是多片上片
                if (glasslimit == 1) {
                  spianService.selectAll(strId.toString());
                } else {
                  spianService.selectAll(strId.toString());
                }
                S7control.getinstance().WriteByte("DB105.16", datas1ListID);// 派发进片id
              }
              // spianService.selectAll(Short.parseShort(strId.toString()));
            }
          }
          // System.out.println(exist);
        }
        // 下发任务后将任务启动改为0
        if (exist1 == false) { // 进片车忙碌时
          if (exist2 == true) { // 任务已启动时
            S7control.getinstance().WriteWord("DB105.12", (short) 0);// 进片任务启动改为0
          }
        }
      boolean B01backs =spianService.listbool("DB106.60");// b01汇报
      boolean B02backs = spianService.listbool("DB106.62");// b02汇报
      StringBuilder B01glassid=spianService.queGlassid("DB106.DBB26");//BO1的玻璃id
      StringBuilder B02glassid=spianService.queGlassid("DB106.DBB26");//B02的玻璃id
      //当进片小车完成任务时
      if(B01backs==true){
        //当B01小车汇报完成时更改玻璃状态为1
        spianMapper.UpdateCageOver(B01glassid.toString(),1);//更改笼子表进片状态
        spianMapper.Updatetask(1,0);//更改进片任务状态为1
        spianMapper.overqueue(B01glassid.toString(),0);//更改上片任务表的状态为0
        S7control.getinstance().WriteWord("DB105.48", (short) 1);//应答B01小车收到
        S7control.getinstance().WriteWord("DB105.16", (short) 0);//进片任务启动改为0
      }else{
        S7control.getinstance().WriteWord("DB105.48", (short) 0);//恢复B01小车应答
      }
      //当出片小车完成任务时
      if(B02backs==true){
        //当B02小车汇报完成时更改玻璃状态为0
        spianMapper.UpdateCageOver(B02glassid.toString(),0);//更改笼子表出片状态
        spianMapper.UpdatetaskOut(B02glassid.toString()); // 完成上一次出片或者调度任务
        S7control.getinstance().WriteWord("DB105.50", (short) 1);//应答B02小车收到
      }else{
        S7control.getinstance().WriteWord("DB105.50", (short) 0);//恢复B02小车应答
      }
      // 获取DO1数据
      StringBuilder queueid1 = spianService.queGlassid("DB106.DBB26");
      // 获取DO2数据
      StringBuilder queueid2 = spianService.queGlassid("DB103.DBB78");
      System.out.println("D01"+queueid1);
      System.out.println("D02"+queueid2);
      int questate = spianMapper.Selectqueuestate();//判断扫码位是否有玻璃已确认
      // queueid1.toString().isEmpty()
      north_glass_buffer1 glass1 = spianMapper.selectGlass(queueid1.toString());//D01的玻璃信息
      north_glass_buffer1 glass2 = spianMapper.selectGlass(queueid2.toString());//D02玻璃信息
      double quewitdh=0;
      double quewitdh2=0;
      //当扫码位玻璃id为空时 宽度为0
      if(glass1==null){
         quewitdh=0;
         queueid1=new StringBuilder("");
      }else{
        quewitdh=glass1.getglasslengthmm();
      }
      if(glass2==null){
         quewitdh2=0;
         queueid2=new StringBuilder("");
      }else{
        quewitdh2=glass2.getglasslengthmm();
      }
      if (queueid1!=null&& questate == 0) {
        // 写入D01的数据到上片队列表
        spianMapper.insertqueue(queueid1.toString(), 1, quewitdh);
      }
      if (queueid2!=null) {
        // 写入D02的数据到上片队列表
        spianMapper.insertqueue(queueid2.toString(), 2, quewitdh2);
        spianMapper.overqueue2(queueid2.toString(),0,1);//更改上片任务表的状态为0
      }
       // 出片任务////////////////////////////////
      List<Short> outlist = S7control.getinstance().ReadWord("DB106.20", 1); // 出片车状态
      List<Short> outlist1 = S7control.getinstance().ReadWord("DB105.14", 1); // 出片任务是否启动
      StringBuilder writedstrIdOut = new StringBuilder();
      List<Short> outlist1 = S7control.getinstance().ReadWord("DB105.18", 1); // 出片任务是否启动
      // StringBuilder writedstrIdOut = new StringBuilder();
      // 获取已下发的出片id
      byte[] writedglassidbytesOut = S7control.getinstance().ReadByte("DB105.30", 13);
      if (writedglassidbytesOut != null) {
        // 获取玻璃id
        for (byte iditem : writedglassidbytesOut) {
          writedstrIdOut.append((char) iditem);
        }
      }
      // 获取BO1数据
      StringBuilder queueid1 = spianService.queGlassid("DB103.DBB32");
      // 获取BO2数据
      StringBuilder queueid2 = spianService.queGlassid("DB103.DBB46");
      if (queueid1 != null) {
        // 写入B01的数据到上片队列表
        spianMapper.insertqueue(queueid1.toString(), 1, 0);
      }
      if (queueid2 != null) {
        // 写入B02的数据到上片队列表
        spianMapper.insertqueue(queueid2.toString(), 2, 0);
      }
      byte[] writedglassidbytesOut = S7control.getinstance().ReadByte("DB105.30", 14);
      String writedstrIdOut = new String(writedglassidbytesOut);
      // 出片任务////////////////////////////////
      boolean outstate = false;// 出片车空闲判断
      boolean outstate1 = false;// 出片车任务是否启动
      if (outlist != null && outlist1 != null) {
@@ -176,41 +143,42 @@
        }
        if (outglassbegin & outstate)// 当任务开始且出片车空闲时
        {
          outglassbegin = false;
          spianMapper.UpdatetaskOut(); // 完成上一次出片或者调度任务
          spianMapper.UpdataAddCageState(0, 3);// 将出片中的格子状态改成0
          outglassbegin = false;
        }
        if (outstate == true & glass.getbarcode() != null) { // 当出片车空闲且有出片任务待完成时
          // 判断有两个出片或调拨任务时并且出片id和未完成的出片任务id不一样时执行出片
          if (glass.getId() == 2 & !writedstrIdOut.toString().equals(glass.getbarcode().toString())) {
          if (!writedstrIdOut.toString().equals(glass.getbarcode().toString())) {
            spianService.selectout2(glass.getbarcode().toString());
            outstate=false;
          }
        }
        // 判断当前是否有未执行的任务
        int outnum = spianMapper.SelectOutSliceshu();
        if (outnum == 0) {
        //当没有任务执行并且出片车空闲时
        if (outnum == 0&&outstate == true ) {
          // 判断铝框出片队列表是否有待出片的玻璃
          String outglassid = spianMapper.SelectOutSlice();
          if (outglassid != null) {
            spianService.selectout2(outglassid);
            outstate=false;
          }
        }
        if (outstate == false) {// 下发任务后将任务启动改为0//出片车空闲判断
        if (outstate == true) {// 下发任务后将任务启动改为0//出片车空闲判断
          if (outstate1 == true) {
            S7control.getinstance().WriteWord("DB105.14", (short) 0);// 出片任务启动改为0
            S7control.getinstance().WriteWord("DB105.18", (short) 0);// 出片任务启动改为0
          }
        }
      }
      if (outstate == true) { // 出片车状态空闲时
        Integer state = spianMapper.Selectoutstate();
        String orderid = spianMapper.SelectOrderout();
      // if (outstate == true) { // 出片车状态空闲时
      //   Integer state = spianMapper.Selectoutstate();
      //   String orderid = spianMapper.SelectOrderout();
        if (orderid != null && state == 0) {
          spianService.selectout(orderid);
        }
      }
      //   if (orderid != null && state == 0) {
      //     spianService.selectout(orderid);
      //   }
      // }
      // 查询数据库
      // 推送到前端
springboot-vue3/src/main/java/com/example/springboot/component/PlcManualonePosition.java
@@ -2,19 +2,12 @@
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
import java.util.Arrays;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import org.apache.commons.io.FileUtils;
import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class PlcManualonePosition extends Thread {
  String name = "";
@@ -25,8 +18,7 @@
    return FileUtils.readFileToString(file, "UTF-8");
  }
  // 读取json文件中地址,并返回该地址集合
  public List<String> readValue() {
  public void readValue() {
    String str = "";
    BufferedReader bufferedReader = null;
    FileInputStream fileInputStream;
@@ -37,7 +29,6 @@
      InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "utf-8");
      // 提高读取效率,在 BufferedReader 内包装 InputStreamReader
      bufferedReader = new BufferedReader(inputStreamReader);
      // bufferedReader.close();
      String line = null;
      // 将 bufferedReader 内容一行一行赋值给str
      while ((line = bufferedReader.readLine()) != null) {
@@ -48,23 +39,15 @@
      JSONObject jsonObject = new JSONObject(str);
      // 获取json中的值
      JSONArray address = jsonObject.getJSONArray("Manualoneposition");
      String[] result = new String[address.size()];
      List<String> arraylistss = new ArrayList<>();
      JSONArray address = jsonObject.getJSONArray("ServoManualone");
      for (int i = 0; i < address.size(); i++) {
        JSONObject ress = (JSONObject) address.get(i);
        this.name = ress.getStr("name");
        this.count = ress.getInt("count");
        ;
        result[i] = name + ',' + count.toString();
        arraylistss.add(result[i]);
      }
      return arraylistss;
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (UnsupportedEncodingException e) {
@@ -72,8 +55,6 @@
    } catch (IOException e) {
      e.printStackTrace();
    }
    return null;
  }
  @Override
@@ -86,83 +67,291 @@
        e.printStackTrace();
      }
      // this.readValue();
      List<String> myCollection;
      myCollection = readValue();
      // System.out.println(myCollection);
      List<Short> arraylist = new ArrayList<>();
      for (String element : myCollection) {
        String[] parts = element.split(",");
        String PlcAddress = parts[0];
        String count = parts[1];
        Integer Plccount = new Integer(count);
        // arraylist = S7control.getinstance().ReadWord(PlcAddress, Plccount);
        System.out.println(PlcAddress);
      }
      // String PlcAddress = this.name;
      // Integer Plccount = this.count;
      // List<Short> arraylist = S7control.getinstance().ReadWord("DB100.0", 12);
      // List<Short> state = S7control.getinstance().ReadWord("DB103.0", 10);
      // parameter
      // Short[] values1 = { 1231, 1, 1, 1, 1, 1, 2, 33, 2, 3, 4, 5 };
      // List<Short> arraylist = new ArrayList<>(Arrays.asList(values1));
      List<String> addresses = new ArrayList<>();
      addresses.add("DB100.108");
      addresses.add("DB100.20");
      addresses.add("DB103.52");
      List<Short> arraylist = S7control.getinstance().readWords(addresses);
      // System.out.println(arraylist);
      // state
      Short[] values2 = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
      List<Short> state = new ArrayList<>(Arrays.asList(values2));
      List<String> addresses2 = new ArrayList<>();
      addresses2.add("DB100.110");
      addresses2.add("DB100.176");
      addresses2.add("DB103.54");
      List<Short> arraylist2 = S7control.getinstance().readWords(addresses2);
      // action
      Boolean[] values = { false, true, true, true, true, true, true, true, true,
          true, true, true, true, true, true, true, true, true, true, true, true, true, true,
          true, false, true };
      List<Boolean> paramlist = new ArrayList<>(Arrays.asList(values));
      List<String> addresses3 = new ArrayList<>();
      addresses3.add("DB100.112");
      addresses3.add("DB100.24");
      addresses3.add("DB103.56");
      List<Short> arraylist3 = S7control.getinstance().readWords(addresses3);
      short[] sholist = new short[paramlist.size()];
      List<String> addresses4 = new ArrayList<>();
      addresses4.add("DB100.114");
      addresses4.add("DB100.178");
      addresses4.add("DB103.60");
      List<Short> arraylist4 = S7control.getinstance().readWords(addresses4);
      for (int i = 0; i < paramlist.size(); i++) {
        boolean value = paramlist.get(i);
        sholist[i] = value ? (short) 1 : (short) 0;
      }
      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<String> addresses9 = new ArrayList<>();
      addresses9.add("DB104.24");
      addresses9.add("DB104.26");
      addresses9.add("DB104.20");
      addresses9.add("DB104.22");
      addresses9.add("DB104.28");
      addresses9.add("DB104.30");
      List<Short> arraylist9 = S7control.getinstance().readWords(addresses9);
      arraylist5.addAll(arraylist6);
      arraylist5.addAll(arraylist7);
      arraylist5.addAll(arraylist8);
      JSONObject jsonObject = new JSONObject();
      // new short[]{1,1, 1, 1, 1, 1, 2, 33, 2,3, 4, 5}
      // new short[]{0,0, 0, 0, 0, 0, 0, 0, 0, 0}
      // System.out.println(arraylist6);
      jsonObject.append("zuhe1", arraylist);
      jsonObject.append("zuhe2", arraylist2);
      jsonObject.append("zuhe3", arraylist3);
      jsonObject.append("zuhe4", arraylist4);
      jsonObject.append("shishi1", arraylist5);
      jsonObject.append("guzhang", arraylist9);
      // jsonObject.append("weihuiling", arraylist8);
      jsonObject.append("params", arraylist);
      jsonObject.append("state", state);
      jsonObject.append("action", sholist);
      WebSocketServer sendwServer = WebSocketServer.sessionMap.get("Parameter");
      WebSocketServer sendwServer = WebSocketServer.sessionMap.get("ManualonePosition");
      if (sendwServer != null) {
        sendwServer.sendMessage(jsonObject.toString());
      }
      WebSocketServer webSocketServer = WebSocketServer.sessionMap.get("Parameter");
      WebSocketServer webSocketServer = WebSocketServer.sessionMap.get("ManualonePosition");
      if (webSocketServer != null) {
        List<String> messages = webSocketServer.getMessages();
        List<String> waddresses1 = new ArrayList<>();
        waddresses1.add("DB100.108");
        waddresses1.add("DB100.20");
        waddresses1.add("DB103.52");
        String addressList = "DB100.0";
        List<String> waddresses2 = new ArrayList<>();
        waddresses2.add("DB100.110");
        waddresses2.add("DB100.176");
        waddresses2.add("DB103.54");
        List<String> waddresses3 = new ArrayList<>();
        waddresses3.add("DB100.112");
        waddresses3.add("DB100.24");
        waddresses3.add("DB103.56");
        List<String> waddresses4 = new ArrayList<>();
        waddresses4.add("DB100.114");
        waddresses4.add("DB100.178");
        waddresses4.add("DB103.60");
        // 故障地址
        List<String> waddresses5 = new ArrayList<>();
        waddresses5.add("DB103.244");
        waddresses5.add("DB103.250");
        waddresses5.add("DB103.252");
        waddresses5.add("DB103.254");
        // 复位地址
        List<String> waddresses6 = new ArrayList<>();
        waddresses6.add("DB101.4.0");
        waddresses6.add("DB101.4.3");
        waddresses6.add("DB101.4.4");
        waddresses6.add("DB101.4.6");
        // 回零地址
        List<String> waddresses7 = new ArrayList<>();
        waddresses7.add("DB101.4.5");
        waddresses7.add("DB101.4.7");
        System.out.println(messages.isEmpty());
        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();
          // 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);
                }
              }
            }
            if (!sValue.isEmpty()) {
              S7control.getinstance().WriteWord(waddresses1, sValue);
              System.out.println("Values " + sValue + " written to PLC at address " + waddresses1);
            }
          }
          // 将消息值写入 PLC
          S7control.getinstance().WriteWord(addressList, messageValues);
          System.out.println("messageValues:" + messageValues);
          System.out.println("addressList:" + addressList);
          // 写入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);
              System.out.println("Values " + sValue2 + " written to PLC at address " + waddresses2);
            }
          }
          // 写入B01
          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(waddresses2, sValue2);
              System.out.println("Values " + sValue2 + " written to PLC at address " + waddresses3);
            }
          }
          // 写入B02
          if (messageArray.getJSONArray(3).size() > 0) {
            JSONArray jsonArray = messageArray.getJSONArray(3);
            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);
              System.out.println("Values " + sValue2 + " written to PLC at address " + waddresses4);
            }
          }
          // 写入故障地址
          if (messageArray.getJSONArray(4).size() > 0) {
            JSONArray jsonArray = messageArray.getJSONArray(4);
            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(waddresses5, sValue2);
              System.out.println("Values " + sValue2 + " written to PLC at address " + waddresses5);
            }
          }
          // 写入复位地址
          if (messageArray.getJSONArray(5).size() > 0) {
            JSONArray jsonArray = messageArray.getJSONArray(5);
            List<Short> sValue2 = new ArrayList<>();
            List<Boolean> messageBooleans = 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);
                  // 将消息值转换为布尔列表
                  for (short values : sValue2) {
                    messageBooleans.add(values == 1 ? true : false);
                  }
                  System.out.println("messageValue:" + Arrays.asList(val) + " added to the list");
                } catch (NumberFormatException e) {
                  // 如果无法解析为 short 类型,则忽略该部分
                  System.err.println("Could not parse value: " + value);
                }
              }
            }
            if (!messageBooleans.isEmpty()) {
              // S7control.getinstance().WriteWord(waddresses6, messageBooleans);
              System.out.println("Values " + messageBooleans + " written to PLC at address " + waddresses6);
            }
          }
          // 写入回零地址
          if (messageArray.getJSONArray(6).size() > 0) {
            JSONArray jsonArray = messageArray.getJSONArray(6);
            List<Short> sValue2 = new ArrayList<>();
            List<Boolean> messageBooleans = 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);
                  // 将消息值转换为布尔列表
                  for (short values : sValue2) {
                    messageBooleans.add(values == 1 ? true : false);
                  }
                  System.out.println("messageValue:" + Arrays.asList(val) + " added to the list");
                } catch (NumberFormatException e) {
                  // 如果无法解析为 short 类型,则忽略该部分
                  System.err.println("Could not parse value: " + value);
                }
              }
            }
            if (!messageBooleans.isEmpty()) {
              S7control.getinstance().WriteBit(waddresses7, messageBooleans);
              System.out.println("Values " + messageBooleans + " written to PLC at address " + waddresses7);
            }
          }
          // 清空消息列表
          webSocketServer.clearMessages();
        }
springboot-vue3/src/main/java/com/example/springboot/component/PlcParameter.java
@@ -86,17 +86,18 @@
      Short[] values2 = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
      List<Short> state = new ArrayList<>(Arrays.asList(values2));
      Boolean[] values = { false, true, true, true, true, true, true, true, true,
          true, true, true, true, true, true, true, true, true, true, true, true, true, true,
          true, false, true };
      List<Boolean> paramlist = new ArrayList<>(Arrays.asList(values));
      // Boolean[] values = { false, true, true, true, true, true, true, true, true,
      // true, true, true, true, true, true, true, true, true, true, true, true, true,
      // true,
      // true, false, true };
      // List<Boolean> paramlist = new ArrayList<>(Arrays.asList(values));
      short[] sholist = new short[paramlist.size()];
      // short[] sholist = new short[paramlist.size()];
      for (int i = 0; i < paramlist.size(); i++) {
        boolean value = paramlist.get(i);
        sholist[i] = value ? (short) 1 : (short) 0;
      }
      // for (int i = 0; i < paramlist.size(); i++) {
      // boolean value = paramlist.get(i);
      // sholist[i] = value ? (short) 1 : (short) 0;
      // }
      JSONObject jsonObject = new JSONObject();
      // new short[]{1,1, 1, 1, 1, 1, 2, 33, 2,3, 4, 5}
@@ -104,7 +105,7 @@
      jsonObject.append("params", arraylist);
      jsonObject.append("state", state);
      jsonObject.append("action", sholist);
      // jsonObject.append("action", sholist);
      WebSocketServer sendwServer = WebSocketServer.sessionMap.get("Parameter");
      if (sendwServer != null) {
        sendwServer.sendMessage(jsonObject.toString());
@@ -136,7 +137,7 @@
          }
          // 将消息值写入 PLC
//          S7control.getinstance().WriteWord(addressList, messageValues);
          // S7control.getinstance().WriteWord(addressList, messageValues);
          System.out.println("messageValues:" + messageValues);
          System.out.println("addressList:" + addressList);
          // 清空消息列表
springboot-vue3/src/main/java/com/example/springboot/component/PlcParameter1.java
@@ -66,22 +66,20 @@
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
//      this.readValue();
//      String PlcAddress = this.name;
//      Integer Plccount = this.count;
      // this.readValue();
      // String PlcAddress = this.name;
      // Integer Plccount = this.count;
      // System.out.println(stt);
       List<Short> arraylist = S7control.getinstance().ReadWord("DB100.0", 12);
       List<Short> fanzhuan1 = S7control.getinstance().ReadWord("DB100.8", 1);
       List<Short> xiaoche1 = S7control.getinstance().ReadWord("DB100.12", 1);
//      Short[] values1 = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
//      List<Short> arraylist = new ArrayList<>(Arrays.asList(values1));
//      Short[] fanzhuan = { 4 };
//      List<Short> fanzhuan1 = new ArrayList<>(Arrays.asList(fanzhuan));
//      Short[] xiaoche = {5};
//      List<Short> xiaoche1 = new ArrayList<>(Arrays.asList(xiaoche));
      List<Short> arraylist = S7control.getinstance().ReadWord("DB100.0", 12);
      List<Short> fanzhuan1 = S7control.getinstance().ReadWord("DB100.8", 1);
      List<Short> xiaoche1 = S7control.getinstance().ReadWord("DB100.12", 1);
      // Short[] values1 = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
      // List<Short> arraylist = new ArrayList<>(Arrays.asList(values1));
      // Short[] fanzhuan = { 4 };
      // List<Short> fanzhuan1 = new ArrayList<>(Arrays.asList(fanzhuan));
      // Short[] xiaoche = {5};
      // List<Short> xiaoche1 = new ArrayList<>(Arrays.asList(xiaoche));
      JSONObject jsonObject = new JSONObject();
      // new short[]{1,1, 1, 1, 1, 1, 2, 33, 2,3, 4, 5}
@@ -106,7 +104,7 @@
        if (!messages.isEmpty()) {
          // 将最后一个消息转换为 short 类型的列表
          String lastMessage = messages.get(messages.size() - 1);
//        System.out.println("lastMessage:" + lastMessage);
          // System.out.println("lastMessage:" + lastMessage);
          JSONArray messageArray = new JSONArray(lastMessage);
          // 整合第 1 到 3 个数组并去掉 null 元素
@@ -135,8 +133,9 @@
              try {
                String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
                short sValue = Short.parseShort(cleanedValue.trim());
               S7control.getinstance().WriteWord(addressList1, Arrays.asList(sValue));
                System.out.println("messageValue:" + Arrays.asList(sValue) + " written to PLC at address " + addressList1);
                S7control.getinstance().WriteWord(addressList1, 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);
@@ -151,8 +150,9 @@
              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);
                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);
@@ -162,16 +162,15 @@
          // 写入第三个地址
          if (!mergedList.isEmpty()) {
          S7control.getinstance().WriteWord(addressList3, mergedList);
            System.out.println("messageValue:" + mergedList + " written to PLC at address " + addressList3);
            S7control.getinstance().WriteWord(addressList3, mergedList);
            System.out.println("messageValue:" + mergedList + " written to PLC at address " + addressList1);
          }
          // 清空消息列表
          webSocketServer.clearMessages();
        }
    }
      }
    }
  }
springboot-vue3/src/main/java/com/example/springboot/component/Plcalarm.java
@@ -87,14 +87,16 @@
      Integer Plccount = this.count;
      // 根据地址读取PCL数据
       List<Boolean> plclist = S7control.getinstance().ReadBits(PlcAddress,Plccount);
      /*Boolean[] values = { false, false, true, false, true, false, true, false,
          true, false, true, false, true, false,
          true, false, true, false, true, false, true, false, true, false, true, false,
          true, false, true, false, true,
          false, true, false, true, false,
          true, false, true, false };
      List<Boolean> plclist = new ArrayList<>(Arrays.asList(values));*/
      // List<Boolean> plclist = S7control.getinstance().ReadBits("DB104.0.0", 71);
      List<Boolean> plclist = S7control.getinstance().ReadBits(PlcAddress, Plccount);
      // System.out.println(plclist);
      // Boolean[] values = { false, false, true, false, true, false, true, false,
      // true, false, true, false, true, false,
      // true, false, true, false, true, false, true, false, true, false, true, false,
      // true, false, true, false, true,
      // false, true, false, true, false,
      // true, false, true, false };
      // List<Boolean> plclist = new ArrayList<>(Arrays.asList(values));
      if (plclist != null) {
        JSONObject jsonObject = new JSONObject();
@@ -112,22 +114,23 @@
        }
        // 将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(myCollection);
        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]);
            // 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
@@ -1,7 +1,14 @@
package com.example.springboot.component;
import cn.hutool.json.JSONObject;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import com.example.springboot.entity.Out_slice;
import com.example.springboot.entity.StorageCage;
import com.example.springboot.entity.alarmmg;
import com.example.springboot.entity.north_glass_buffer1;
@@ -11,9 +18,11 @@
public class Plchome extends Thread {
    @Autowired
    private HomeMapper homeMapper;
    private SpianMapper spianMapper;
    private JdbcConnections dbserve;
    private JdbcConnections jdbcConnections;
    @Override
    public void run() {
@@ -28,6 +37,7 @@
            // 注入mapper
            homeMapper = WebSocketServer.applicationContext.getBean(HomeMapper.class);
            spianMapper = WebSocketServer.applicationContext.getBean(SpianMapper.class);
            jdbcConnections = WebSocketServer.applicationContext.getBean(JdbcConnections.class);
            // 笼子使用情况
            List<StorageCage> tableData = homeMapper.selectAll();
            jsonObject.append("tableData", tableData);
@@ -44,17 +54,35 @@
            List<StorageCage> tasklist1 = homeMapper.selectinout(3);
            List<StorageCage> tasklist2 = homeMapper.selectinout(2);
            for (StorageCage storageCage : tasklist1) {
                storageCage.setnorth_glass_buffer1s(homeMapper.SelectBoxNo(storageCage.getGlassId()));
                // storageCage.setnorth_glass_buffer1s(homeMapper.SelectBoxNo(storageCage.getGlassId()));
                try {
                    storageCage.setnorth_glass_buffer1s(jdbcConnections.SelectGlassByGlassIdOrderIdFrameId("", "", ""));
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                try {
                    storageCage.setnorth_glass_buffer1s(
                            jdbcConnections.SelectGlassByGlassIdOrderIdFrameId(storageCage.getGlassId(), "", ""));
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            for (StorageCage storageCage : tasklist2) {
                storageCage.setnorth_glass_buffer1s(homeMapper.SelectBoxNo(storageCage.getGlassId()));
              }
                // storageCage.setnorth_glass_buffer1s(homeMapper.SelectBoxNo(storageCage.getGlassId()));
                try {
                    storageCage.setnorth_glass_buffer1s(
                            jdbcConnections.SelectGlassByGlassIdOrderIdFrameId(storageCage.getGlassId(), "", ""));
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            jsonObject.append("tasklist1", tasklist1);
            jsonObject.append("tasklist2", tasklist2);
            // 查询报警信息
            List<alarmmg> alarmmg = homeMapper.SelectAlarmmgInfo();
            jsonObject.append("alarmmg", alarmmg);
            // // 读去Plc进片车与出片车位置W
            // 读去Plc进片车与出片车位置W
            // List<String> addressList = new ArrayList<String>();
            // addressList.add("DB106.12");
            // addressList.add("DB106.0");
@@ -67,7 +95,7 @@
            // 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)
@@ -75,22 +103,43 @@
            // }
            // 伍 获取进是否有待确认的玻璃id
            String queid = spianMapper.Selectqueueid();
            String state = spianMapper.Selectqueuestate();
            int state = spianMapper.Selectqueuestate();
            jsonObject.append("queid", queid);
            jsonObject.append("state", state);
            // 获取扫码位与上片位玻璃信息
            String queueglassid2 = homeMapper.GetQueueInfo(2);
            String queueglassid1 = homeMapper.GetQueueInfo(1);
            north_glass_buffer1 form2 = homeMapper.SelectGlassByGlassID(queueglassid2);
            north_glass_buffer1 form3 = homeMapper.SelectGlassByGlassID(queueglassid1);
            jsonObject.append("form2", form2);
            jsonObject.append("form3", form3);
            // List<Short> paramlists = new ArrayList<Short>();
            // short para1 = 11111;
            // short para2 = 32000;
            // paramlists.add(para1);
            // paramlists.add(para2);
            // System.out.println(paramlists);
            // north_glass_buffer1 form2 = homeMapper.SelectGlassByGlassID(queueglassid2);
            // north_glass_buffer1 form3 = homeMapper.SelectGlassByGlassID(queueglassid1);
            north_glass_buffer1 form2;
            if(queueglassid2.length()!=0){
                try {
                    form2 = jdbcConnections.SelectGlassByGlassIdOrderIdFrameId(queueglassid2, "", "");
                    jsonObject.append("form2", form2);
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            north_glass_buffer1 form3;
            if(queueglassid1.length()!=0){
                try {
                    form3 = jdbcConnections.SelectGlassByGlassIdOrderIdFrameId(queueglassid1, "", "");
                    jsonObject.append("form3", form3);
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            // 获取出片队列信息
            List<Out_slice> listoutslice = homeMapper.SelectProductionqueue();
            for (Out_slice out_slice : listoutslice) {
                out_slice.setnorth_glass_buffer1s(homeMapper.SelectBoxNo(out_slice.getGlassId()));
                out_slice.setstorageCage(homeMapper.SelectStorageGlassById(out_slice.getGlassId()));
            }
            jsonObject.append("listoutslice", listoutslice);
            dbserve = WebSocketServer.applicationContext.getBean(JdbcConnections.class);
            boolean dbconnected = false;
springboot-vue3/src/main/java/com/example/springboot/component/Plcsign.java
@@ -73,16 +73,16 @@
      List<Boolean> plclist = S7control.getinstance().ReadBits(PlcAddress, Plccount);
      // List<Boolean> plclist2 = S7control.getinstance().ReadBits("DB102.5.5", 13);
//      Boolean[] values = { true, true, true, true, true, false, true, false,
//          true, false, true, false, true, false,
//          true, false, true, false, true, false, true, false, true, false, true, false,
//          true, false, true, false, true,
//          false, true, false, true, false,
//          true, false, true, false, true, false, true, false, null,
//          true, false,
//          true, false, true, false, true, false,
//          true, false, true, false, true, };
//      List<Boolean> plclist = new ArrayList<>(Arrays.asList(values));
      // Boolean[] values = { true, true, true, true, true, false, true, false,
      // true, false, true, false, true, false,
      // true, false, true, false, true, false, true, false, true, false, true, false,
      // true, false, true, false, true,
      // false, true, false, true, false,
      // true, false, true, false, true, false, true, false, null,
      // true, false,
      // true, false, true, false, true, false,
      // true, false, true, false, true, };
      // List<Boolean> plclist = new ArrayList<>(Arrays.asList(values));
      if (plclist != null) {
        // 将获取的布尔类型转换为整数类型
springboot-vue3/src/main/java/com/example/springboot/controller/HomeController.java
@@ -1,19 +1,16 @@
package com.example.springboot.controller;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.logging.log4j.util.PropertySource.Comparator;
import org.springframework.beans.factory.annotation.Autowired;
import com.example.springboot.mapper.HomeMapper;
import com.example.springboot.mapper.SpianMapper;
import com.example.springboot.service.HomeService;
//import com.example.springboot.service.MultiFieldComparator;
import com.example.springboot.service.JdbcConnections;
import com.example.springboot.service.SpianService;
import com.example.springboot.common.Result;
import com.example.springboot.component.S7control;
@@ -22,7 +19,6 @@
import com.example.springboot.entity.alarmmg;
import com.example.springboot.entity.north_glass_buffer1;
import com.example.springboot.entity.Out_slice;
import org.springframework.web.bind.annotation.*;
@@ -41,6 +37,9 @@
  @Autowired
  SpianMapper spianMapper;
  @Autowired
  private JdbcConnections jdbcConnections;
  // 查询理片笼使用情况
  @GetMapping("/load")
  public Result selectAll() {
@@ -67,11 +66,14 @@
  // 查询进/出片任务
  @GetMapping("/loadinout")
  public Result selectinout(Integer types) {
  public Result selectinout(Integer types) throws SQLException{
    List<StorageCage> storageCageinout = homeMapper.selectinout(types);
    for (StorageCage storageCage : storageCageinout) {
      storageCage.setnorth_glass_buffer1s(homeMapper.SelectBoxNo(storageCage.getGlassId()));
      storageCage.setnorth_glass_buffer1s(jdbcConnections.SelectGlassByGlassIdOrderIdFrameId(storageCage.getGlassId(), "", ""));
      // storageCage.setnorth_glass_buffer1s(homeMapper.SelectBoxNo(storageCage.getGlassId()));
    }
    Map<String, Object> map = new HashMap<>();
    map.put("list", storageCageinout);
    return Result.success(map);
@@ -142,10 +144,12 @@
  // 查询理片笼详情
  @GetMapping("/SelectCageInfo")
  public Result SelectCageInfo(short cage) {
  public Result SelectCageInfo(short cage) throws SQLException {
    List<StorageCage> cageinfo = homeMapper.SelectCageInfo(cage);
    for (StorageCage storageCage : cageinfo) {
      storageCage.setnorth_glass_buffer1s(homeMapper.SelectBoxNo(storageCage.getGlassId()));
      // storageCage.setnorth_glass_buffer1s(homeMapper.SelectBoxNo(storageCage.getGlassId()));
      storageCage.setnorth_glass_buffer1s(jdbcConnections.SelectGlassByGlassIdOrderIdFrameId(storageCage.getGlassId(), "", ""));
    }
    Map<String, Object> map = new HashMap<>();
    map.put("cageinfo", cageinfo);
@@ -203,10 +207,16 @@
  // 根据玻璃id查询玻璃信息
  @GetMapping("/SelectGlassByGlassID")
  public Result SelectGlassByGlassID(String glassid) {
    north_glass_buffer1 north_glass_buffer1s = homeMapper.SelectGlassByGlassID(glassid);
  public Result SelectGlassByGlassID(String glassid) throws SQLException {
    // north_glass_buffer1 north_glass_buffer1s = homeMapper.SelectGlassByGlassID(glassid);
    north_glass_buffer1 north_glass_buffer1s=jdbcConnections.SelectGlassByGlassIdOrderIdFrameId(glassid, "", "");
    Map<String, Object> map = new HashMap<>();
    if(glassid!=""){
    map.put("form", north_glass_buffer1s);
    }
    return Result.success(map);
  }
@@ -235,9 +245,9 @@
  // 查询玻璃信息
  @PostMapping("/SelectGlass")
  public Result SelectGlass(String orderid) {
  public Result SelectGlass(String orderid) throws SQLException {
    Map<String, Object> map = new HashMap<>();
    List<north_glass_buffer1> glass = homeMapper.SelectGlass(orderid);
    List<north_glass_buffer1> glass = jdbcConnections.SelectGlassByGlassIdOrderIdFrameIds("", orderid, "");
    map.put("glass", glass);
    return Result.success(map);
  }
@@ -252,7 +262,7 @@
    } else {
      homeMapper.InsertQueueGlassId(glassid, id);
    //调用伍存储过程
    spianMapper.selectAll(glassid);
    spianService.selectAll(glassid);
      map.put("message", "200");
    }
    return Result.success(map);
@@ -287,12 +297,14 @@
  // 根据铝框id获取对应玻璃信息
  @PostMapping("/SelectAluminumFrameInfoById")
  public Result SelectAluminumFrameInfoById(String FrameBarcode) {
    List<north_glass_buffer1> listAluminumFrame = homeMapper.SelectAluminumFrameInfoById(FrameBarcode);
  public Result SelectAluminumFrameInfoById(String FrameBarcode) throws SQLException {
    // List<north_glass_buffer1> listAluminumFrame = homeMapper.SelectAluminumFrameInfoById(FrameBarcode);
    List<north_glass_buffer1> listAluminumFrame = jdbcConnections.SelectGlassByGlassIdOrderIdFrameIds("","",FrameBarcode);
    String flip=homeMapper.SelectFlipByFrameBarcode(FrameBarcode);
    for (north_glass_buffer1 north_glass_buffer1 : listAluminumFrame) {
//      north_glass_buffer1.setstorageCage(homeMapper.SelectStorageGlassById(north_glass_buffer1.getbarcode()));
//      north_glass_buffer1.setOut_slice(homeMapper.SelectQueueByglassid(north_glass_buffer1.getbarcode()));
      north_glass_buffer1.setstorageCage(homeMapper.SelectStorageGlassById(north_glass_buffer1.getbarcode()));
      north_glass_buffer1.setOut_slice(homeMapper.SelectQueueByglassid(north_glass_buffer1.getbarcode()));
    }
    Map<String, Object> map = new HashMap<>();
    map.put("listAluminumFrame", listAluminumFrame);
@@ -304,47 +316,12 @@
  // 查询出片队列数据
  @PostMapping("/SelectProductionqueue")
  public Result SelectProductionqueue() {
  public Result SelectProductionqueue() throws SQLException {
    List<Out_slice> listoutslice = homeMapper.SelectProductionqueue();
    for (Out_slice out_slice : listoutslice) {
      out_slice.setnorth_glass_buffer1s(homeMapper.SelectBoxNo(out_slice.getGlassId()));
      out_slice.setnorth_glass_buffer1s(jdbcConnections.SelectGlassByGlassIdOrderIdFrameId(out_slice.getGlassId(), "", ""));
      out_slice.setstorageCage(homeMapper.SelectStorageGlassById(out_slice.getGlassId()));
    }
    //HashMap<String,List<Out_slice>> map=new HashMap<String,List<Out_slice>>();
    // HashMap map=new HashMap<>();
    // for (Out_slice Out_slice.java : listoutslice) {
    //   String key_=Out_slice.java.getState()+"-";
    //   if (map.get(key_)==null) {
    //     List<Out_slice> lists=new ArrayList<Out_slice>();
    //     lists.add(Out_slice.java);
    //     map.put(key_, lists);
    //   }else{
    //     List<Out_slice> lists=(List<Out_slice>)map.get(key_);
    //     lists.add(Out_slice.java);
    //     map.put(key_,lists);
    //   }
    // }
    // System.out.println(map);
    // List<Out_slice> listskey=(List<Out_slice>)map.get("1-");
    // List<Out_slice> list=new ArrayList<Out_slice>();
    // for (Out_slice Out_slice.java : listskey) {
    //   if (list.isEmpty()) {
    //     list.add(Out_slice.java);
    //   }else{
    //     for (int i=0;i<list.size();i++) {
    //       Out_slice out_slice2=list.get(i);
    //       if(Out_slice.java.getID()>out_slice2.getID()){
    //         continue;
    //       }else{
    //         list.add(i,out_slice2);
    //       }
    //     }
    //   }
    // }
    //Collections.sort(listoutslice,new MultiFieldComparator());
    Map<String, Object> maps = new HashMap<>();
    maps.put("listoutslice", listoutslice);
    return Result.success(maps);
springboot-vue3/src/main/java/com/example/springboot/entity/north_glass_buffer1.java
@@ -9,7 +9,7 @@
    private double glasslength;//玻璃宽
    private double glassheight;//玻璃高
    private double glasslengthmm;//玻璃宽mm
    private double glassheightmm;//玻璃高mm
    private double glassheightmm;
    private String glassoutside;//
    private String glassinside;//
@@ -21,10 +21,24 @@
    private String FrameBarcode;//
    private StorageCage storageCage;
//    public void class setstorageCage(StorageCage storageCage){
//        this.storageCage=storageCage;
//    }
    public void setstorageCage(StorageCage storageCage) {
        this.storageCage = storageCage;
    }
    public StorageCage getstorageCage() {
        return storageCage;
    }
    private Out_slice out_slice;
    public void setOut_slice(Out_slice out_slice) {
        this.out_slice = out_slice;
    }
    public Out_slice getOut_slice() {
        return out_slice;
    }
    public Integer id() {
        return id;
@@ -87,8 +101,8 @@
        this.glasslengthmm = glasslengthmm;
    }
    public Double glassheightmm() {
        return glassheightmm;
    public Double getglassheightmm() {
        return glasslengthmm;
    }
    public void setglassheightmm(Double glassheightmm) {
        this.glassheightmm = glassheightmm;
springboot-vue3/src/main/java/com/example/springboot/mapper/HomeMapper.java
@@ -7,7 +7,6 @@
import com.example.springboot.entity.StorageCage;
import com.example.springboot.entity.alarmmg;
import com.example.springboot.entity.north_glass_buffer1;
//import com.example.springboot.entity.north_glass_buffer1_frames;
import com.example.springboot.entity.Out_slice;
import java.util.List;
@@ -99,7 +98,7 @@
  void Disabled(short cage, short cell, short disabled);
  //理片笼新增玻璃
  @Update("update storage_cage set state=1,glass_id=#{glass.barcode},order_id=#{glass.ordernumber},glasswidth=#{glass.glasslengthMm},glassheight=#{glass.glassheightMm} where cage=#{cage} and cell=#{cell} and tier=#{tier}")
  @Update("update storage_cage set state=1,glass_id=#{glass.barcode},order_id=#{glass.ordernumber},glasswidth=#{glass.glasslengthmm},glassheight=#{glass.glassheightmm} where cage=#{cage} and cell=#{cell} and tier=#{tier}")
  void Inglassid(north_glass_buffer1 glass, short cage, short cell, short tier);
  //查询理片笼中是否有此玻璃
@@ -135,7 +134,7 @@
  north_glass_buffer1 SelectBoxNo(String glassid);
  //查询出片队列信息
  @Select("select * from Out_slice.java where state=0 or state=1")
  @Select("select * from out_slice where state=0 or state=1")
  List<Out_slice> SelectProductionqueue();
  //根据玻璃id查询笼内玻璃信息
@@ -144,7 +143,7 @@
  //根据玻璃id删除出片队列玻璃
  @Select("update Out_slice.java set state=3 where id=#{id}")
  @Select("update out_slice set state=3 where id=#{id}")
  void DeleteProductionQueueGlass(Short id);
  //根据铝框id查询对应玻璃信息
@@ -152,7 +151,7 @@
  List<north_glass_buffer1> SelectAluminumFrameInfoById(String FrameBarcode);
  //查询根据id查询
  @Select("select b.* from storage_cage a inner join Out_slice.java b on a.glass_id=b.glassId where b.glassId=#{glassId}")
  @Select("select b.* from storage_cage a inner join out_slice b on a.glass_id=b.glassId where b.glassId=#{glassId}")
  List<Out_slice> SelectOutSliceById(String glassId);
  //查询玻璃id是否
@@ -160,11 +159,11 @@
  String SelectFlipByFrameBarcode(String frameBarcode);
  //查询玻璃是否已存在于出片队列
  @Select("select * from Out_slice.java where glassid=#{getbarcode} and (state=0 or state=1)")
  @Select("select * from out_slice where glassid=#{getbarcode} and (state=0 or state=1)")
  Out_slice SelectQueueByglassid(String getbarcode);
  //查询玻璃是否已存在于出片队列
  @Select("INSERT INTO Out_slice.java( `glassId`, `barcode`, `glasswidth`, `glassheight`, `state`, `flip`) VALUES ( #{glassid}, #{FrameNo}, #{glasslengthMm}, #{glassheightMm}, 0, #{flip});")
  @Select("INSERT INTO out_slice( `glassId`, `barcode`, `glasswidth`, `glassheight`, `state`, `flip`) VALUES ( #{glassid}, #{FrameNo}, #{glasslengthMm}, #{glassheightMm}, 0, #{flip});")
  void AddOutSliceS(String glassid, String flip, String FrameNo, String glasslengthMm, String glassheightMm);
}
springboot-vue3/src/main/java/com/example/springboot/mapper/SpianMapper.java
@@ -15,7 +15,7 @@
public interface SpianMapper {
    //判断相邻笼子是否有空格  
    @Select("select COUNT(if(a.state1=0,cell,null))as cell,ROUND(id/2)as id from (select *,max(state)as state1 from storage_cage a  GROUP BY cage,cell)as a where (a.cage=#{cage1}-1 or a.cage=#{cage1}+1)and if(a.cage<6,a.cage>0 and a.cage<6,a.cage>5) GROUP BY cage ORDER BY cell desc LIMIT 1")
    @Select("select COUNT(if(a.state1=0,cell,null))as cell,ROUND(id/2)as id from (select *,max(state)as state1 from storage_cage a  GROUP BY cage,cell)as a where (a.cage=#{cage1}-1 or a.cage=#{cage1}+1)and if(a.cage<6,a.cage>0 and a.cage<6,a.cage>5) and disabled=0 GROUP BY cage ORDER BY cell desc LIMIT 1")
     int selectCage(int  cage1);
     
     //@Select("(select*from storage_cage as a  where a.state=0 and cage%2=0 ORDER BY id LIMIT 1)union (select a.* from storage_cage a inner join  (select cage,if(shu2=1,shu3,shu5) as gezi from ( select  cage, count(case when state1=1 and state2=0 then cell else null end)as shu1,  count(case when state1=0 then cell else null end) as shu2, min(case when state1=1 and state2=0 then cell else null end) as shu3, min(case when state1=0 then cell else null end) as shu4, min(case when state1=0 or state2=0 then cell else null end) as shu5 from  (select *,max(state) as state1,min(state) as state2 from storage_cage group by cage,cell) as a where  cage%2!=0  GROUP BY cage HAVING shu2>1 or (shu2=1 and shu1>0)  ) as sss limit 1)as b on a.cage=b.cage and a.cell=b.gezi and a.state=0 order by tier limit 1) ORDER BY id LIMIT 1;")
@@ -26,33 +26,31 @@
     @Select("select state from storage_cage where  cage=#{cage} and cell=#{cell} and tier=1;")
     int selectcell(int cage,int cell);
     //判断该笼子是否有合适宽度空格
     @Select("select cage,cell,tier,id,ROUND(id/2)as prcId,width from storage_cage where cage=#{cage1} and cell=#{cell} and state=0 and width>=#{width} ORDER BY cell asc,tier asc LIMIT 1")
     @Select("select cage,cell,tier,id,ROUND(id/2)as prcId,width from storage_cage where cage=#{cage1} and cell=#{cell} and state=0 and disabled=0 and width>=#{width} ORDER BY cell asc,tier asc LIMIT 1")
     StorageCage selectCage1(int  cage1,int cell,double width);
     //判断笼子内玻璃数
     @Select("select COUNT(tier)as tier from storage_cage where  cage=#{cage} and cell=#{cell} and state=1;")
     int selectsum(int cage,int cell);
     //完成进片中的玻璃状态
     @Update("update storage_cage set state=#{state} where glass_id=#{glassid};")
     void UpdateCageOver(String glassid,int state);
    //@Update("update longzi set glass_id = #{glass_id}, width = #{width}, state = #{state} where cell = #{cell}")
    @Update("update longzi set glass_id =123, width =1600, state =1 where cell =24")
     void  update();
     //获取玻璃信息
     @Select("select orderid as ordernumber,width as glasslengthmm from glass where glassid=#{glassid}")
     @Select("select ordernumber as ordernumber,glasslength_mm as glasslengthmm,barcode from north_glass_buffer1 where barcode=#{glassid}")
     north_glass_buffer1 selectGlass(String glassid);
    
    @Insert("insert into storage_task(task_type,task_state,shelf_rack,load_rack)values(#{storage_task},#{task_state},#{shelf_rack},#{load_rack})")
     void insert(StorageTask storageTask);
    //出片任务查询
    @Select("select COUNT(order_id)order_id,cage,cell,glasswidth,tier,ROUND(id/2)as prcId,glass_id from storage_cage a where a.order_id=#{orderId} GROUP BY cage,cell ORDER BY cage desc,order_id desc,cell desc,glasswidth desc limit 1")
    @Select("select COUNT(order_id)order_id,cage,cell,glasswidth,tier,ROUND(id/2)as prcId,glass_id from storage_cage a where a.order_id=#{orderId} and disabled=0 and state=1 GROUP BY cage,cell ORDER BY cage desc,order_id desc,cell desc,glasswidth desc limit 1")
     StorageCage selectOut(String  orderId);
    // @Select("select cage,cell,tier,glasswidth,ROUND(id/2)as prcId,id,glass_id from storage_cage as a where a.order_id=#{orderId} and state=1 order by cage desc,tier desc,cell desc LIMIT 1")
    //  StorageCage selectOut(String  orderId);
    //按玻璃ID出片任务查询
    @Select("select cage,cell,tier,glasswidth,ROUND(id/2)as prcId,id from storage_cage as a where a.glass_id=#{glassid} and state=1 order by cage desc,tier desc,cell desc LIMIT 1")
    @Select("select cage,cell,tier,glasswidth,ROUND(id/2)as prcId,id from storage_cage as a where a.glass_id=#{glassid} and state=1 and disabled=0 order by cage desc,tier desc,cell desc LIMIT 1")
     StorageCage selectOut2(String  glassid);
    //判断出片为1时,是否可直接出片
    @Select("select COUNT(state) from storage_cage where cage=#{cage} and cell=#{cell}")
    @Select("select COUNT(state) from storage_cage where cage=#{cage} and cell=#{cell} and state=1")
     int selectGlassState(int  cage,int cell);
     //判断该调拨的笼子
@@ -91,8 +89,8 @@
    @Update("update storage_task set task_state=#{state} where task_type=#{type} and task_state=0;")
    void Updatetask(int state,int type);
    //修改任务表
    @Update("update storage_task set task_state=1 where (task_type=1 or task_type=2) and task_state=0;")
    void UpdatetaskOut();
    @Update("update storage_task set task_state=1 where (task_type=1 or task_type=2) and task_state=0 and glass_id=#{glassid};")
    void UpdatetaskOut(String glassid);
    //查询按订单出片
    @Select("select order_id state from order_out where state=0")
    String  SelectOrderout();
@@ -108,13 +106,18 @@
    //根据笼子格子层数获取玻璃id
     @Select("select glass_id from storage_cage where cage=#{cage} and cell=#{cell} and tier=2;")
     String SelectGlassid(int cage,int cell);
     //根据笼子格子层数获取玻璃id
     //判断有几块玻璃还在出片中
     @Select("SELECT COUNT(*) FROM `storage_cage` where state=3;")
     Integer Selectoutstate();
     //添加任务序列
     //获取进片队列id
     @Insert("INSERT INTO `canadames`.`queue`(`glassid`, `type`, `state`,width) VALUES (#{glassid},#{type},0,#{width});")
     @Insert("update queue set glassid=#{glassid},width=#{width} where type=#{type};")
     void insertqueue(String glassid,int type,double width);
     //完成进片队列任务
     @Update("update queue set state=#{state} where glassid=#{glassid};")
     void overqueue(String glassid,int state);
     //更换任务队列
     @Update("update queue set state=#{state} where glassid=#{glassid} and type=#{type};")
     void overqueue2(String glassid,int state,int type);
     //获取任务序列
     @Select("select glassid,orderid,width,type from queue where state=#{state}")
     StorageCage SelectQueue(int state);
@@ -139,14 +142,15 @@
     //获取进片队列id
     @Select("select glassid from queue where type=1")
     String Selectqueueid();
     //获取进片队列id
     //获取进片队列是否有待入库
     @Select("select state from queue where type=1")
     String Selectqueuestate();
     int Selectqueuestate();
     //判断铝框出片表是否有玻璃需要出
     @Select("SELECT * FROM `Out_slice.java` where state=0 or state=0 order by id limit 1;")
     @Select("SELECT glassid FROM `out_slice` where state=0  order by id limit 1;")
     String SelectOutSlice();
     //判断铝框出片表是否有玻璃正在出片中
     @Select("SELECT count(*) FROM `Out_slice.java` where state=1 or state=0 order by id limit 1;")
     @Select("SELECT count(*) FROM `out_slice` where state=1;")
     int SelectOutSliceshu();
}   
    
springboot-vue3/src/main/java/com/example/springboot/service/JdbcConnections.java
@@ -5,6 +5,8 @@
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Component;
@@ -38,6 +40,72 @@
         conn.close();
         return glass;
    }
    public  north_glass_buffer1 SelectGlassByGlassIdOrderIdFrameId(String glassid,String orderid,String frameid) throws SQLException {
        conn = getConn();
        north_glass_buffer1 north_glass_buffer1s=new north_glass_buffer1();
        String sql = "select * from north_glass_buffer1 where barcode=? or ordernumber=? or FrameBarcode=?";
         ps = conn.prepareStatement(sql);
         ps.setString(1, glassid);
         ps.setString(2, orderid);
         ps.setString(3, frameid);
         rs= ps.executeQuery();
         while (rs.next()) {
            north_glass_buffer1s.setId(rs.getInt("Id"));
            north_glass_buffer1s.setordernumber(rs.getString("ordernumber"));
            north_glass_buffer1s.setlistnumber(rs.getString("listnumber"));
            north_glass_buffer1s.setboxnumber(rs.getString("boxnumber"));
            north_glass_buffer1s.setbarcode(rs.getString("barcode"));
            north_glass_buffer1s.setglasslength(rs.getDouble("glasslength"));
            north_glass_buffer1s.setglassheight(rs.getDouble("glassheight"));
            north_glass_buffer1s.setglasslengthmm(rs.getDouble("glasslength_mm"));
            north_glass_buffer1s.setglassheightmm(rs.getDouble("glassheight_mm"));
            north_glass_buffer1s.setitemtype(rs.getString("itemtype"));
            north_glass_buffer1s.setslotnumber(rs.getString("slotnumber"));
            north_glass_buffer1s.setdatemodified(rs.getString("datemodified"));
            north_glass_buffer1s.setdatecreated(rs.getString("datecreated"));
            north_glass_buffer1s.setFrameBarcode(rs.getString("FrameBarcode"));
         }
        //  conn.close();
         return north_glass_buffer1s;
    }
    public  List<north_glass_buffer1> SelectGlassByGlassIdOrderIdFrameIds(String glassid,String orderid,String frameid) throws SQLException {
        conn = getConn();
        // north_glass_buffer1 glass=new north_glass_buffer1();
        List<north_glass_buffer1> glass=new ArrayList<north_glass_buffer1>();
        String sql = "select * from north_glass_buffer1 where barcode=? or ordernumber=? or FrameBarcode=?";
         ps = conn.prepareStatement(sql);
         ps.setString(1, glassid);
         ps.setString(2, orderid);
         ps.setString(3, frameid);
         rs= ps.executeQuery();
         while (rs.next()) {
            north_glass_buffer1 north_glass_buffer1s=new north_glass_buffer1();
            north_glass_buffer1s.setId(rs.getInt("Id"));
            north_glass_buffer1s.setordernumber(rs.getString("ordernumber"));
            north_glass_buffer1s.setlistnumber(rs.getString("listnumber"));
            north_glass_buffer1s.setboxnumber(rs.getString("boxnumber"));
            north_glass_buffer1s.setbarcode(rs.getString("barcode"));
            north_glass_buffer1s.setglasslength(rs.getDouble("glasslength"));
            north_glass_buffer1s.setglassheight(rs.getDouble("glassheight"));
            north_glass_buffer1s.setglasslengthmm(rs.getDouble("glasslength_mm"));
            north_glass_buffer1s.setglassheightmm(rs.getDouble("glassheight_mm"));
            north_glass_buffer1s.setitemtype(rs.getString("itemtype"));
            north_glass_buffer1s.setslotnumber(rs.getString("slotnumber"));
            north_glass_buffer1s.setdatemodified(rs.getString("datemodified"));
            north_glass_buffer1s.setdatecreated(rs.getString("datecreated"));
            north_glass_buffer1s.setFrameBarcode(rs.getString("FrameBarcode"));
            glass.add(north_glass_buffer1s);
         }
        //  conn.close();
         return glass;
    }
    /**
     * 1. 加载驱动
     * 2. 获取连接    conn
springboot-vue3/src/main/java/com/example/springboot/service/SpianService.java
@@ -22,8 +22,6 @@
    private SpianMapper spianMapper;
    // @GetMapping("/all")
    // 进片任务,传订单id
    // 按订单优先进片
    public Short selectAll(String glassid) {
        int cage1;
@@ -45,8 +43,10 @@
        List<String> adddresslist = new ArrayList<>();
        adddresslist.add("DB105.0");// 进片车起始位置
        adddresslist.add("DB105.2");// 进片车目标位置
        adddresslist.add("DB105.4");// 进片笼玻璃数
        adddresslist.add("DB105.12");// 进片车启动 1为启动
        adddresslist.add("DB105.4");// 进片玻璃宽
        adddresslist.add("DB105.8");//进片笼内已有玻璃数
        adddresslist.add("DB105.16");// 进片车启动 1为启动
        List<Short> datas = new ArrayList<>();
        // String orderid="A001";
@@ -79,10 +79,11 @@
                widths = glasslist.getglasslengthmm();
                // 执行进片
                datas.add((short) 1000);
                datas.add((short) prcid);
                datas.add((short) prctier);
                datas.add((short) 1);
                datas.add((short) 1000);//起始位置
                datas.add((short) prcid);//目标位置
                datas.add((short) widths);//进片玻璃宽
                datas.add((short) prctier); //玻璃数
                datas.add((short) 1);//任务启动
                //获取该格子内是否有玻璃
                int cellint=spianMapper.selectcell(cage1,cells);
                if(cellint==1){
@@ -93,6 +94,7 @@
                    spianMapper.UpdataAddCage1(widths, cage1, cells);// 减少格子宽度
                    spianMapper.Inserttask(0, 0, 1000, ids, glassid.toString());// 新增任务
                    S7control.getinstance().WriteWord(adddresslist, datas);
                }else{
                 // 数据库修改笼子表新增一条玻璃
                spianMapper.UpdataAddCage(orderids.toString(), glassid, widths, cage1, cells, ids, 2);
@@ -102,7 +104,7 @@
                // S7control.getinstance().WriteByte("DB105.16",glassid);
                }
                outmesid(glassid,"DB105.20");
                return (200);
            }
@@ -154,10 +156,12 @@
                    ids = cages1.getId();// 数据库ID
                    cells = cages1.getCell();// 格子号
                    prcid = cages1.getPrcId();// 传给prc的目标地id
                    String glassid="";
                    // 数据库修改笼子表新增一条玻璃
                    for (int i = 2; i > 0; i--) {
                        north_glass_buffer1 qglass = spianMapper.SelectQueueGlass(i);
                        width = qglass.getglasslengthmm();// 格子剩余宽度
                        glassid=qglass.getbarcode();
                        spianMapper.UpdataAddqueCage(qglass.getordernumber(), qglass.getbarcode(), width, cage1, cells, i,
                                1);
                        spianMapper.UpdataAddCage1(width, cage1, cells);// 减少格子宽度
@@ -169,7 +173,7 @@
                    datas.add((short) 0);
                    datas.add((short) 1);
                    S7control.getinstance().WriteWord(adddresslist, datas);
                    outmesid(glassid,"DB105.20");
                    return (200);
                }
@@ -217,6 +221,7 @@
                        spianMapper.UpdataAddCage(orderid, glassid, widths, cage1, cells, ids, 2);
                        spianMapper.UpdataAddCage1(widths, cage1, cells);// 减少格子宽度
                        spianMapper.Inserttask(0, 0, 1000, ids, glassid.toString());// 新增任务
                        outmesid(glassid,"DB105.20");
                        // S7control.getinstance().WriteWord(adddresslist, datas);
                        break;
                        // S7control.getinstance().WriteByte("DB105.16",glassid);
@@ -238,10 +243,10 @@
        // spianMapper.UpdatetaskOut(); //完成上一次出片或者调度任务,改到plchold里,出片或调度任务完成立即改变结束任务;
        // 定义PRC数据传送数组
        List<String> adddresslist = new ArrayList<>();
        adddresslist.add("DB105.6");// 出片车起始位置
        adddresslist.add("DB105.8");// 出片车目标位置
        adddresslist.add("DB105.10");// 出片笼玻璃数
        adddresslist.add("DB105.14");// 出片车启动 1为启动
        adddresslist.add("DB105.10");// 出片车起始位置
        adddresslist.add("DB105.12");// 出片车目标位置
        adddresslist.add("DB105.14");// 出片笼玻璃数
        adddresslist.add("DB105.18");// 出片车启动 1为启动
        List<Short> datas = new ArrayList<>();
        // 获取优先出片的位置
        StorageCage cageout = spianMapper.selectOut(orderid);
@@ -288,7 +293,7 @@
                spianMapper.UpdataGlassCage("", "", glasswidth, cage, cell, tier, 3);// 清除格子玻璃信息
                spianMapper.Inserttask(1, 0, cageout.getId(), 1000, orderid);// 新增任务
                S7control.getinstance().WriteWord(adddresslist, datas);// 派发出片车任务
                outmesid(glassid);// 派发出片ID
                outmesid(glassid,"DB105.34");// 派发出片ID
                if (pd != null) {
                    cage = pd.getCage();
                    cell = pd.getCage();
@@ -349,7 +354,7 @@
                        // 传输mes数据,坐标,数据
                        S7control.getinstance().WriteWord(adddresslist, datas);// 派发出片车任务
                        System.out.println(datas);
                        outmesid(glassids);// 派发调拨玻璃ID
                        outmesid(glassids,"DB105.34");// 派发调拨玻璃ID
                        return Result.success(cagecell); // 结束
                    } else {// 笼子号大于5时
@@ -376,7 +381,7 @@
                        // 传输mes数据,坐标,数据
                        S7control.getinstance().WriteWord(adddresslist, datas);// 派发出片车任务
                        outmesid(glassids);// 派发调拨玻璃ID
                        outmesid(glassids,"DB105.34");// 派发调拨玻璃ID
                        return Result.success(cagecell); // 结束
                    }
@@ -389,13 +394,14 @@
    
    public Short selectout2(String glassid) {
        // spianMapper.UpdatetaskOut(); //完成上一次出片或者调度任务,改到plchold里,出片或调度任务完成立即改变结束任务;
        // 定义PRC数据传送数组
        List<String> adddresslist = new ArrayList<>();
        adddresslist.add("DB105.6");// 出片车起始位置
        adddresslist.add("DB105.8");// 出片车目标位置
        adddresslist.add("DB105.10");// 出片笼玻璃数
        adddresslist.add("DB105.14");// 出片车启动 1为启动
        char[] a=glassid.toCharArray();
        adddresslist.add("DB105.10");// 出片车起始位置
        adddresslist.add("DB105.12");// 出片车目标位置
        adddresslist.add("DB105.14");// 出片笼玻璃数
        adddresslist.add("DB105.18");// 出片车启动 1为启动
        List<Short> datas = new ArrayList<>();
        // 获取优先出片的位置
        StorageCage cageout = spianMapper.selectOut2(glassid);
@@ -431,23 +437,23 @@
                spianMapper.UpdateDBCage2(cage, cell);// 清除内片数据
            }
            S7control.getinstance().WriteWord(adddresslist, datas);// 派发出片车任务
            outmesid(glassid);// 派发出片ID
            outmesid(glassid,"DB105.34");// 派发出片ID
            return (200);// 结束
        } else {
            // 获取格子的玻璃数量
            int state = spianMapper.selectGlassState(cage, cell);
            // 判断内片是否需要调拨
            if (state == 0) {
            if (state == 1) {
                // spianMapper.UpdataGlassCage("", "", glasswidth, cage, cell, tier, 3);
                datas.add((short) prcid);
                datas.add((short) 1000);
                datas.add((short) 1);
                datas.add((short) 1);
                outmesid(glassid,"DB105.34");// 派发出片ID
                spianMapper.Inserttask(1, 0, cageout.getId(), 1000, glassid);// 新增任务
                spianMapper.UpdataOutCage1(glasswidth, cage, cell);// 增加原格子宽度
                spianMapper.UpdataGlassCage("", "", glasswidth, cage, cell, tier, 3);// 清除格子玻璃信息
                outmesid(glassid);// 派发出片ID
                S7control.getinstance().WriteWord(adddresslist, datas);// 派发出片车任务
                return (200);// 结束
@@ -481,7 +487,7 @@
                    // 传输mes数据,坐标,数据
                    S7control.getinstance().WriteWord(adddresslist, datas);// 派发出片车任务
                    outmesid(glassids);// 派发调拨玻璃ID
                    outmesid(glassids,"DB105.34");// 派发调拨玻璃ID
                    return (200); // 结束
                } else {// 笼子号大于5时
@@ -509,7 +515,7 @@
                    // 传输mes数据,坐标,数据
                    S7control.getinstance().WriteWord(adddresslist, datas);// 派发出片车任务
                    outmesid(glassids);// 派发调拨玻璃ID
                    outmesid(glassids,"DB105.34");// 派发调拨玻璃ID
                    return (200);// 结束
                }
@@ -517,21 +523,22 @@
        }
    }
    //派发调拨任务玻璃id
    public void outmesid(String glassid) {
        System.out.println("outmesid:" + glassid);
    //派发任务玻璃id
    public void outmesid(String glassid,String address) {
        //System.out.println("outmesid:" + glassid);
        List<Byte> glassidlist = new ArrayList();
        for (char iditem : glassid.toCharArray()) {
            glassidlist.add(Byte.valueOf(String.valueOf(iditem)));
        char ds[]=glassid.toCharArray();
        for (char iditem : ds) {
            glassidlist.add((byte)iditem);
        }
        byte[] bytes = Bytes.toArray(glassidlist);
        System.out.println("outmesidbytes:" + bytes.length);
        S7control.getinstance().WriteByte("DB105.30", bytes);// 派发出片id
        S7control.getinstance().WriteByte(address, bytes);// 派发出片id
    }
    //获取地址内的玻璃id转字符串
    public StringBuilder queGlassid(String address) {
        StringBuilder writedstrIdOut = new StringBuilder();
        byte[] writedglassidbytesOut = S7control.getinstance().ReadByte(address, 13);
        byte[] writedglassidbytesOut = S7control.getinstance().ReadByte(address, 14);
      if (writedglassidbytesOut != null) {
        // 获取玻璃id
        for (byte iditem : writedglassidbytesOut) {
@@ -550,4 +557,10 @@
        String s = new String(bytes, StandardCharsets.UTF_8);
        return s.toCharArray();
    }
    //判断集合里是否为1
    public  boolean listbool(String address) {
       List<Short> list = S7control.getinstance().ReadWord(address, 1);//返回为ture时为1
       boolean listbool = list.contains((short) 1);
        return listbool;
    }
}