增加点击防抖事件
增加笼子使用详情的计算优化。
增加数据推送时的报错处理
测量台交互逻辑增加
参数界面增加翻转加减速度
14个文件已修改
985 ■■■■■ 已修改文件
Albania_Mes-ui/src/lang/locales/en-US.json 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Albania_Mes-ui/src/lang/locales/zh-CN.json 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Albania_Mes-ui/src/views/Electrical/AlbaniaServo.vue 161 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Albania_Mes-ui/src/views/home/index.vue 214 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/PlcHoldNew.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/Plchome.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/Plcsign.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/config/AppRunnerConfig.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/controller/HomeController.java 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/mapper/AlbaniaMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/mapper/HomeMapper.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/service/SpianServiceNew.java 286 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/service/StorageCageService.java 58 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/resources/config.properties 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Albania_Mes-ui/src/lang/locales/en-US.json
@@ -1,10 +1,16 @@
{
{
  "Value cannot be empty":"Value cannot be empty",
  "Manual":"Manual",
  "Starting position":"Starting position",
  "Starting position":"Start bit",
  "Target position":"End position",
  "Status":"Status",
  "B01 film processing vehicle":"B01 film processing vehicle",
  "B01 film processing vehicle":"B01 Transport vehicle",
  "A01 Conveyor Platform":"A01 Conveyor Platform",
  "Y-axis current bit":"Y-axis current bit",
  "No task":"No task",
  "Not on board":"Not on board",
  "Already on board":"Already on board",
  "accomplished":"accomplished",
  "A02 measuring table":"A02 measuring table",
  "C02 film cage":"C02 film cage",
  "C01 film cage":"C01 film cage",
@@ -338,7 +344,9 @@
  "Delete":"Delete",
  "Out":"Out",
  "Operation successful":"Operation successful",
  "The glass for this order is still in the cage and cannot be deleted":"The glass for this order is still in the cage and cannot be deleted.",
  "Operation canceled":"Operation canceled",
  "There is no glass for this order":"There is no glass for this order",
  "There are currently tasks":"There are currently tasks",
Albania_Mes-ui/src/lang/locales/zh-CN.json
@@ -1,10 +1,17 @@
{
{
  "Value cannot be empty":"值不能为空",
  "Manual":"手动",
  "Starting position":"开始位置",
  "Target position":"目标位置",
  "Status":"状态",
  "B01 film processing vehicle":"B01理片车",
  "A01 Conveyor Platform":"A01输送台",
  "Y-axis current bit":"Y轴当前位置",
  "No task":"无任务",
  "Not on board":"玻璃未上车",
  "Already on board":"玻璃已上车",
  "accomplished":"已完成",
  "A02 measuring table":"A02测量台",
  "C02 film cage":"C02理片笼",
  "C01 film cage":"C01理片笼",
@@ -65,8 +72,8 @@
  "Save":"保存",
  "Select file":"选择文件",
  "ip2":"192.168.10.2",
  "ip":"localhost",
  "ip":"192.168.10.2",
  "ip2":"localhost",
  "systemTitle": "登录系统",
  "usernamePlaceholder": "请输入用户名",
  "passwordPlaceholder": "请输入密码",
@@ -319,6 +326,7 @@
  "Delete": "删除",
  "Out": "配片出片",
  "Operation successful": "操作成功",
  "The glass for this order is still in the cage and cannot be deleted": "此订单的玻璃还在笼子里,不能删除",
  "Operation canceled": "操作取消",
  "There is no such order": "没有此订单的玻璃",
  "There are currently tasks": "当前有任务",
Albania_Mes-ui/src/views/Electrical/AlbaniaServo.vue
@@ -139,7 +139,6 @@
            <span style="float: right; padding: 3px 0"> {{ language=="zh-CN"?plcSigns[11].name:plcSigns[11].usname }}<el-input style="width: 30%;" v-model="plcSigns[11].value"
                oninput="value=value.replace(/^(-?)(\D*)(\d*(?:\.\d{0,2})?).*$/g, '$1$3')"
                @keyup.enter.native="writeValue(plcSigns[11])" @focus="refresh()" @blur="writeValue(plcSigns[11])"></el-input>mm</span>
            <!-- <el-button style="float: right; padding: 3px 0" type="text">操作按钮</el-button> -->
          </div>
          <div style="display: flex;">
            <div>
@@ -184,13 +183,17 @@
                  @keyup.enter.native="writeValue(plcSigns[19])" @focus="refresh()" @blur="writeValue(plcSigns[19])"></el-input>m/min
              </div>
              <div v-if="plcSigns.length > 0">
                <el-button style="width: 50%;" type="primary" @click="writeValue(plcSigns[20])">{{ language=="zh-CN"?plcSigns[20].name:plcSigns[20].usname }}</el-button>
                <el-button type="primary" @mousedown.native="writeValue(plcSigns[20], 0)"
                  :style="{ backgroundColor: plcSigns[20].value == '0' ? '' : 'green' }">{{ language == "zh-CN" ? plcSigns[20].name : plcSigns[20].usname
                }}</el-button>
                <el-input style="width: 30%;" v-model="plcSigns[21].value" @focus="refresh()" @blur="writeValue(plcSigns[21])"
                  @keyup.enter.native="writeValue(plcSigns[21])"
                  oninput="value=value.replace(/^(-?)(\D*)(\d*(?:\.\d{0,2})?).*$/g, '$1$3')"></el-input>mm
              </div>
              <div v-if="plcSigns.length > 0">
                <el-button style="width: 50%;" type="primary" @click="writeValue(plcSigns[22])">{{ language=="zh-CN"?plcSigns[22].name:plcSigns[22].usname }}</el-button>
                <el-button type="primary" @mousedown.native="writeValue(plcSigns[22], 0)"
                  :style="{ backgroundColor: plcSigns[22].value == '0' ? '' : 'green' }">{{ language == "zh-CN" ? plcSigns[22].name : plcSigns[22].usname
                }}</el-button>
                <el-input style="width: 30%;" v-model="plcSigns[23].value" @focus="refresh()" @blur="writeValue(plcSigns[23])"
                  @keyup.enter.native="writeValue(plcSigns[23])"
                  oninput="value=value.replace(/^(-?)(\D*)(\d*(?:\.\d{0,2})?).*$/g, '$1$3')"></el-input>mm
@@ -238,13 +241,17 @@
                  :oninput="`value=value.replace(/[^-\\d]/g, '')`"></el-input>ms
              </div>
              <div v-if="plcSigns.length > 0">
                <el-button type="primary" @click="writeValue(plcSigns[32])">{{ language=="zh-CN"?plcSigns[32].name:plcSigns[32].usname }}</el-button>
                <el-button type="primary" @mousedown.native="writeValue(plcSigns[32], 0)"
                  :style="{ backgroundColor: plcSigns[32].value == '0' ? '' : 'green' }">{{ language == "zh-CN" ? plcSigns[32].name : plcSigns[32].usname
                }}</el-button>
                <el-input style="width: 30%;" v-model="plcSigns[33].value" @focus="refresh()" @blur="writeValue(plcSigns[33])"
                  @keyup.enter.native="writeValue(plcSigns[33])"
                  oninput="value=value.replace(/^(-?)(\D*)(\d*(?:\.\d{0,2})?).*$/g, '$1$3')"></el-input>mm
              </div>
              <div v-if="plcSigns.length > 0">
                <el-button type="primary" @click="writeValue(plcSigns[34])">{{ language=="zh-CN"?plcSigns[34].name:plcSigns[34].usname }}</el-button>
                <el-button type="primary" @mousedown.native="writeValue(plcSigns[34], 0)"
                  :style="{ backgroundColor: plcSigns[34].value == '0' ? '' : 'green' }">{{ language == "zh-CN" ? plcSigns[34].name : plcSigns[34].usname
                }}</el-button>
                <el-input style="width: 30%;" v-model="plcSigns[35].value" @focus="refresh()" @blur="writeValue(plcSigns[35])"
                @keyup.enter.native="writeValue(plcSigns[35])"
                  oninput="value=value.replace(/^(-?)(\D*)(\d*(?:\.\d{0,2})?).*$/g, '$1$3')"></el-input>mm
@@ -371,48 +378,74 @@
                  @keyup.enter.native="writeValue(plcSigns[51])"
                  oninput="value=value.replace(/^(-?)(\D*)(\d*(?:\.\d{0,2})?).*$/g, '$1$3')"></el-input>mm
              </div>
              <div v-if="plcSigns.length > 0">
                {{ language=="zh-CN"?plcSigns[137].name:plcSigns[137].usname }}<el-input style="width: 30%;" v-model="plcSigns[137].value"
                  @focus="refresh()" @blur="writeValue(plcSigns[137])"
                  @keyup.enter.native="writeValue(plcSigns[137])"
                  oninput="value=value.replace(/^(-?)(\D*)(\d*(?:\.\d{0,2})?).*$/g, '$1$3')"></el-input>
              </div>
              <div v-if="plcSigns.length > 0">
                {{ language=="zh-CN"?plcSigns[138].name:plcSigns[138].usname }}<el-input style="width: 30%;" v-model="plcSigns[138].value"
                  @focus="refresh()" @blur="writeValue(plcSigns[138])"
                  @keyup.enter.native="writeValue(plcSigns[138])"
                  oninput="value=value.replace(/^(-?)(\D*)(\d*(?:\.\d{0,2})?).*$/g, '$1$3')"></el-input>
              </div>
            </div>
          </div>
          <div style="display: flex;">
            <div>
              <div v-if="plcSigns.length > 0">
                <el-button type="primary" @click="writeValue(plcSigns[52])">{{ language=="zh-CN"?plcSigns[52].name:plcSigns[52].usname }}</el-button>
                <el-button type="primary" @mousedown.native="writeValue(plcSigns[52], 0)"
                  :style="{ backgroundColor: plcSigns[52].value == '0' ? '' : 'green' }">{{ language == "zh-CN" ? plcSigns[52].name : plcSigns[52].usname
                }}</el-button>
                <el-input style="width: 30%;" v-model="plcSigns[53].value" @focus="refresh()" @blur="writeValue(plcSigns[53])"
                  @keyup.enter.native="writeValue(plcSigns[53])"
                  oninput="value=value.replace(/^(-?)(\D*)(\d*(?:\.\d{0,2})?).*$/g, '$1$3')"></el-input>°
              </div>
              <div v-if="plcSigns.length > 0">
                <el-button type="primary" @click="writeValue(plcSigns[54])">{{ language=="zh-CN"?plcSigns[54].name:plcSigns[54].usname }}</el-button>
                <el-button type="primary" @mousedown.native="writeValue(plcSigns[54], 0)"
                  :style="{ backgroundColor: plcSigns[54].value == '0' ? '' : 'green' }">{{ language == "zh-CN" ? plcSigns[54].name : plcSigns[54].usname
                }}</el-button>
                <el-input style="width: 30%;" v-model="plcSigns[55].value" @focus="refresh()" @blur="writeValue(plcSigns[55])"
                  @keyup.enter.native="writeValue(plcSigns[55])"
                  oninput="value=value.replace(/^(-?)(\D*)(\d*(?:\.\d{0,2})?).*$/g, '$1$3')"></el-input>°
              </div>
              <div v-if="plcSigns.length > 0">
                <el-button type="primary" @click="writeValue(plcSigns[56])">{{ language=="zh-CN"?plcSigns[56].name:plcSigns[56].usname }}</el-button>
                <el-button type="primary" @mousedown.native="writeValue(plcSigns[56], 0)"
                  :style="{ backgroundColor: plcSigns[56].value == '0' ? '' : 'green' }">{{ language == "zh-CN" ? plcSigns[56].name : plcSigns[56].usname
                }}</el-button>
                <el-input style="width: 30%;" v-model="plcSigns[57].value" @focus="refresh()" @blur="writeValue(plcSigns[57])"
                  @keyup.enter.native="writeValue(plcSigns[57])"
                  oninput="value=value.replace(/^(-?)(\D*)(\d*(?:\.\d{0,2})?).*$/g, '$1$3')"></el-input>°
              </div>
              <div v-if="plcSigns.length > 0">
                <el-button type="primary" @click="writeValue(plcSigns[58])">{{ language=="zh-CN"?plcSigns[58].name:plcSigns[58].usname }}</el-button>
                <el-button type="primary" @mousedown.native="writeValue(plcSigns[58], 0)"
                  :style="{ backgroundColor: plcSigns[58].value == '0' ? '' : 'green' }">{{ language == "zh-CN" ? plcSigns[58].name : plcSigns[58].usname
                }}</el-button>
                <el-input style="width: 30%;" v-model="plcSigns[59].value" @focus="refresh()" @blur="writeValue(plcSigns[59])"
                  @keyup.enter.native="writeValue(plcSigns[59])"
                  oninput="value=value.replace(/^(-?)(\D*)(\d*(?:\.\d{0,2})?).*$/g, '$1$3')"></el-input>°
              </div>
              <div v-if="plcSigns.length > 0">
                <el-button type="primary" @click="writeValue(plcSigns[60])">{{ language=="zh-CN"?plcSigns[60].name:plcSigns[60].usname }}</el-button>
                <el-button type="primary" @mousedown.native="writeValue(plcSigns[60], 0)"
                  :style="{ backgroundColor: plcSigns[60].value == '0' ? '' : 'green' }">{{ language == "zh-CN" ? plcSigns[60].name : plcSigns[60].usname
                }}</el-button>
                <el-input style="width: 30%;" v-model="plcSigns[61].value" @focus="refresh()" @blur="writeValue(plcSigns[61])"
                  @keyup.enter.native="writeValue(plcSigns[61])"
                  oninput="value=value.replace(/^(-?)(\D*)(\d*(?:\.\d{0,2})?).*$/g, '$1$3')"></el-input>°
              </div>
              <div v-if="plcSigns.length > 0">
                <el-button type="primary" @click="writeValue(plcSigns[62])">{{ language=="zh-CN"?plcSigns[62].name:plcSigns[62].usname }}</el-button>
                <el-button type="primary" @mousedown.native="writeValue(plcSigns[62], 0)"
                  :style="{ backgroundColor: plcSigns[62].value == '0' ? '' : 'green' }">{{ language == "zh-CN" ? plcSigns[62].name : plcSigns[62].usname
                }}</el-button>
                <el-input style="width: 30%;" v-model="plcSigns[63].value" @focus="refresh()" @blur="writeValue(plcSigns[63])"
                  @keyup.enter.native="writeValue(plcSigns[63])"
                  oninput="value=value.replace(/^(-?)(\D*)(\d*(?:\.\d{0,2})?).*$/g, '$1$3')"></el-input>°
              </div>
              <div v-if="plcSigns.length > 0">
                <el-button type="primary" @click="writeValue(plcSigns[64])">{{ language=="zh-CN"?plcSigns[64].name:plcSigns[64].usname }}</el-button>
                <el-button type="primary" @mousedown.native="writeValue(plcSigns[64], 0)"
                  :style="{ backgroundColor: plcSigns[64].value == '0' ? '' : 'green' }">{{ language == "zh-CN" ? plcSigns[64].name : plcSigns[64].usname
                }}</el-button>
                <el-input style="width: 30%;" v-model="plcSigns[65].value" @focus="refresh()" @blur="writeValue(plcSigns[65])"
                  @keyup.enter.native="writeValue(plcSigns[65])"
                  oninput="value=value.replace(/^(-?)(\D*)(\d*(?:\.\d{0,2})?).*$/g, '$1$3')"></el-input>°
@@ -438,46 +471,60 @@
            </div>
            <div>
              <div v-if="plcSigns.length > 0">
                <el-button type="primary" @click="writeValue(plcSigns[69])">{{ language=="zh-CN"?plcSigns[69].name:plcSigns[69].usname }}</el-button>
                <el-button type="primary" @mousedown.native="writeValue(plcSigns[69], 0)"
                  :style="{ backgroundColor: plcSigns[69].value == '0' ? '' : 'green' }">{{ language == "zh-CN" ? plcSigns[69].name : plcSigns[69].usname
                }}</el-button>
                <el-input style="width: 30%;" v-model="plcSigns[70].value" @focus="refresh()" @blur="writeValue(plcSigns[70])"
                  @keyup.enter.native="writeValue(plcSigns[70])"
                  oninput="value=value.replace(/^(-?)(\D*)(\d*(?:\.\d{0,2})?).*$/g, '$1$3')"></el-input>mm
                  oninput="value=value.replace(/^(-?)(\D*)(\d*(?:\.\d{0,2})?).*$/g, '$1$3')"></el-input>
              </div>
              <div v-if="plcSigns.length > 0">
                <el-button type="primary" @click="writeValue(plcSigns[71])">{{ language=="zh-CN"?plcSigns[71].name:plcSigns[71].usname }}</el-button>
                <el-button type="primary" @mousedown.native="writeValue(plcSigns[71], 0)"
                  :style="{ backgroundColor: plcSigns[71].value == '0' ? '' : 'green' }">{{ language == "zh-CN" ? plcSigns[71].name : plcSigns[71].usname
                }}</el-button>
                <el-input style="width: 30%;" v-model="plcSigns[72].value" @focus="refresh()" @blur="writeValue(plcSigns[72])"
                  @keyup.enter.native="writeValue(plcSigns[72])"
                  oninput="value=value.replace(/^(-?)(\D*)(\d*(?:\.\d{0,2})?).*$/g, '$1$3')"></el-input>mm
                  oninput="value=value.replace(/^(-?)(\D*)(\d*(?:\.\d{0,2})?).*$/g, '$1$3')"></el-input>
              </div>
              <div v-if="plcSigns.length > 0">
                <el-button type="primary" @click="writeValue(plcSigns[73])">{{ language=="zh-CN"?plcSigns[73].name:plcSigns[73].usname }}</el-button>
                <el-button type="primary" @mousedown.native="writeValue(plcSigns[73], 0)"
                  :style="{ backgroundColor: plcSigns[73].value == '0' ? '' : 'green' }">{{ language == "zh-CN" ? plcSigns[73].name : plcSigns[73].usname
                }}</el-button>
                <el-input style="width: 30%;" v-model="plcSigns[74].value" @focus="refresh()" @blur="writeValue(plcSigns[74])"
                  @keyup.enter.native="writeValue(plcSigns[74])"
                  oninput="value=value.replace(/^(-?)(\D*)(\d*(?:\.\d{0,2})?).*$/g, '$1$3')"></el-input>mm
                  oninput="value=value.replace(/^(-?)(\D*)(\d*(?:\.\d{0,2})?).*$/g, '$1$3')"></el-input>
              </div>
              <div v-if="plcSigns.length > 0">
                <el-button type="primary" @click="writeValue(plcSigns[75])">{{ language=="zh-CN"?plcSigns[75].name:plcSigns[75].usname }}</el-button>
                <el-button type="primary" @mousedown.native="writeValue(plcSigns[75], 0)"
                  :style="{ backgroundColor: plcSigns[75].value == '0' ? '' : 'green' }">{{ language == "zh-CN" ? plcSigns[75].name : plcSigns[75].usname
                }}</el-button>
                <el-input style="width: 30%;" v-model="plcSigns[76].value" @focus="refresh()" @blur="writeValue(plcSigns[76])"
                  @keyup.enter.native="writeValue(plcSigns[76])"
                  oninput="value=value.replace(/^(-?)(\D*)(\d*(?:\.\d{0,2})?).*$/g, '$1$3')"></el-input>mm
                  oninput="value=value.replace(/^(-?)(\D*)(\d*(?:\.\d{0,2})?).*$/g, '$1$3')"></el-input>
              </div>
              <div v-if="plcSigns.length > 0">
                <el-button type="primary" @click="writeValue(plcSigns[77])">{{ language=="zh-CN"?plcSigns[77].name:plcSigns[77].usname }}</el-button>
                <el-button type="primary" @mousedown.native="writeValue(plcSigns[77], 0)"
                  :style="{ backgroundColor: plcSigns[77].value == '0' ? '' : 'green' }">{{ language == "zh-CN" ? plcSigns[77].name : plcSigns[77].usname
                }}</el-button>
                <el-input style="width: 30%;" v-model="plcSigns[78].value" @focus="refresh()" @blur="writeValue(plcSigns[78])"
                  @keyup.enter.native="writeValue(plcSigns[78])"
                  oninput="value=value.replace(/^(-?)(\D*)(\d*(?:\.\d{0,2})?).*$/g, '$1$3')"></el-input>mm
                  oninput="value=value.replace(/^(-?)(\D*)(\d*(?:\.\d{0,2})?).*$/g, '$1$3')"></el-input>
              </div>
              <div v-if="plcSigns.length > 0">
                <el-button type="primary" @click="writeValue(plcSigns[79])">{{ language=="zh-CN"?plcSigns[79].name:plcSigns[79].usname }}</el-button>
                <el-button type="primary" @mousedown.native="writeValue(plcSigns[79], 0)"
                  :style="{ backgroundColor: plcSigns[79].value == '0' ? '' : 'green' }">{{ language == "zh-CN" ? plcSigns[79].name : plcSigns[79].usname
                }}</el-button>
                <el-input style="width: 30%;" v-model="plcSigns[80].value" @focus="refresh()" @blur="writeValue(plcSigns[80])"
                  @keyup.enter.native="writeValue(plcSigns[80])"
                  oninput="value=value.replace(/^(-?)(\D*)(\d*(?:\.\d{0,2})?).*$/g, '$1$3')"></el-input>mm
                  oninput="value=value.replace(/^(-?)(\D*)(\d*(?:\.\d{0,2})?).*$/g, '$1$3')"></el-input>
              </div>
              <div v-if="plcSigns.length > 0">
                <el-button type="primary" @click="writeValue(plcSigns[81])">{{ language=="zh-CN"?plcSigns[81].name:plcSigns[81].usname }}</el-button>
                <el-button type="primary" @mousedown.native="writeValue(plcSigns[79], 0)"
                  :style="{ backgroundColor: plcSigns[79].value == '0' ? '' : 'green' }">{{ language == "zh-CN" ? plcSigns[79].name : plcSigns[79].usname
                }}</el-button>
                <el-input style="width: 30%;" v-model="plcSigns[82].value" @focus="refresh()" @blur="writeValue(plcSigns[82])"
                  @keyup.enter.native="writeValue(plcSigns[82])"
                  oninput="value=value.replace(/^(-?)(\D*)(\d*(?:\.\d{0,2})?).*$/g, '$1$3')"></el-input>mm
                  oninput="value=value.replace(/^(-?)(\D*)(\d*(?:\.\d{0,2})?).*$/g, '$1$3')"></el-input>
              </div>
              <div v-if="plcSigns.length > 0">
                {{ language=="zh-CN"?plcSigns[83].name:plcSigns[83].usname }}
@@ -494,25 +541,35 @@
            </div>
            <div>
              <div v-if="plcSigns.length > 0">
                <el-button type="primary" @click="writeValue(plcSigns[85])">{{ language=="zh-CN"?plcSigns[85].name:plcSigns[85].usname }}</el-button>
                <el-button type="primary" @mousedown.native="writeValue(plcSigns[85], 0)"
                  :style="{ backgroundColor: plcSigns[85].value == '0' ? '' : 'green' }">{{ language == "zh-CN" ? plcSigns[85].name : plcSigns[85].usname
                }}</el-button>
                <el-input style="width: 30%;" v-model="plcSigns[86].value" @focus="refresh()" @blur="writeValue(plcSigns[86])"
                  @keyup.enter.native="writeValue(plcSigns[86])"
                  oninput="value=value.replace(/^(-?)(\D*)(\d*(?:\.\d{0,2})?).*$/g, '$1$3')"></el-input>°
              </div>
              <div v-if="plcSigns.length > 0">
                <el-button type="primary" @click="writeValue(plcSigns[87])">{{ language=="zh-CN"?plcSigns[87].name:plcSigns[87].usname }}</el-button>
                <el-button type="primary" @mousedown.native="writeValue(plcSigns[87], 0)"
                  :style="{ backgroundColor: plcSigns[87].value == '0' ? '' : 'green' }">{{ language == "zh-CN" ? plcSigns[87].name : plcSigns[87].usname
                }}</el-button>
                <el-input style="width: 30%;" v-model="plcSigns[88].value" @focus="refresh()" @blur="writeValue(plcSigns[88])"
                  @keyup.enter.native="writeValue(plcSigns[88])"
                  oninput="value=value.replace(/^(-?)(\D*)(\d*(?:\.\d{0,2})?).*$/g, '$1$3')"></el-input>°
              </div>
              <div v-if="plcSigns.length > 0">
                <el-button type="primary" @click="writeValue(plcSigns[89])">{{ language=="zh-CN"?plcSigns[89].name:plcSigns[89].usname }}</el-button>
                <el-button type="primary" @mousedown.native="writeValue(plcSigns[89], 0)"
                  :style="{ backgroundColor: plcSigns[89].value == '0' ? '' : 'green' }">{{ language == "zh-CN" ? plcSigns[89].name : plcSigns[89].usname
                }}</el-button>
              </div>
              <div v-if="plcSigns.length > 0">
                <el-button type="primary" @click="writeValue(plcSigns[90])">{{ language=="zh-CN"?plcSigns[90].name:plcSigns[90].usname }}</el-button>
                <el-button type="primary" @mousedown.native="writeValue(plcSigns[90], 0)"
                  :style="{ backgroundColor: plcSigns[90].value == '0' ? '' : 'green' }">{{ language == "zh-CN" ? plcSigns[90].name : plcSigns[90].usname
                }}</el-button>
              </div>
              <div v-if="plcSigns.length > 0">
                <el-button type="primary" @click="writeValue(plcSigns[91])">{{ language=="zh-CN"?plcSigns[91].name:plcSigns[91].usname }}</el-button>
                <el-button type="primary" @mousedown.native="writeValue(plcSigns[91], 0)"
                  :style="{ backgroundColor: plcSigns[91].value == '0' ? '' : 'green' }">{{ language == "zh-CN" ? plcSigns[91].name : plcSigns[91].usname
                }}</el-button>
              </div>
              <div v-if="plcSigns.length > 0">
                {{ language=="zh-CN"?plcSigns[92].name:plcSigns[92].usname }}
@@ -543,7 +600,7 @@
        </el-card>
        <el-card class="box-card">
          <div slot="header" class="clearfix">
            <span>笼子参数</span>
            <span>{{ language=="zh-CN"?"笼子参数":"Cage parameter" }}</span>
          </div>
          <div style="display: flex;">
            <div>
@@ -639,13 +696,17 @@
                  oninput="value=value.replace(/^(-?)(\D*)(\d*(?:\.\d{0,2})?).*$/g, '$1$3')"></el-input>m/min
              </div>
              <div v-if="plcSigns.length > 0">
                <el-button type="primary" @click="writeValue(plcSigns[109])">{{ language=="zh-CN"?plcSigns[109].name:plcSigns[109].usname }}</el-button>
                <el-button type="primary" @mousedown.native="writeValue(plcSigns[109], 0)"
                  :style="{ backgroundColor: plcSigns[109].value == '0' ? '' : 'green' }">{{ language == "zh-CN" ? plcSigns[109].name : plcSigns[109].usname
                }}</el-button>
                <el-input style="width: 30%;" v-model="plcSigns[110].value" @focus="refresh()" @blur="writeValue(plcSigns[110])"
                  @keyup.enter.native="writeValue(plcSigns[110])"
                  oninput="value=value.replace(/^(-?)(\D*)(\d*(?:\.\d{0,2})?).*$/g, '$1$3')"></el-input>mm
              </div>
              <div v-if="plcSigns.length > 0">
                <el-button type="primary" @click="writeValue(plcSigns[111])">{{ language=="zh-CN"?plcSigns[111].name:plcSigns[111].usname }}</el-button>
                <el-button type="primary" @mousedown.native="writeValue(plcSigns[111], 0)"
                  :style="{ backgroundColor: plcSigns[111].value == '0' ? '' : 'green' }">{{ language == "zh-CN" ? plcSigns[111].name : plcSigns[111].usname
                }}</el-button>
                <el-input style="width: 30%;" v-model="plcSigns[112].value" @focus="refresh()" @blur="writeValue(plcSigns[112])"
                  @keyup.enter.native="writeValue(plcSigns[1112])"                  
                  oninput="value=value.replace(/^(-?)(\D*)(\d*(?:\.\d{0,2})?).*$/g, '$1$3')"></el-input>mm
@@ -689,7 +750,9 @@
                  :oninput="`value=value.replace(/[^-\\d]/g, '')`"></el-input>ms
              </div>
              <div v-if="plcSigns.length > 0">
                <el-button type="primary" @click="writeValue(plcSigns[119])" >{{ language=="zh-CN"?plcSigns[119].name:plcSigns[119].usname }}</el-button>
                <el-button type="primary" @mousedown.native="writeValue(plcSigns[119], 0)"
                  :style="{ backgroundColor: plcSigns[119].value == '0' ? '' : 'green' }">{{ language == "zh-CN" ? plcSigns[119].name : plcSigns[119].usname
                }}</el-button>
                <el-input style="width: 30%;" v-model="plcSigns[120].value" @focus="refresh()" @blur="writeValue(plcSigns[120])"
                  @keyup.enter.native="writeValue(plcSigns[120])"
                  oninput="value=value.replace(/^(-?)(\D*)(\d*(?:\.\d{0,2})?).*$/g, '$1$3')"></el-input>mm
@@ -740,7 +803,9 @@
                  :oninput="`value=value.replace(/[^-\\d]/g, '')`"></el-input>m/min
              </div>
              <div v-if="plcSigns.length > 0">
                <el-button type="primary" @click="writeValue(plcSigns[127])">{{ language=="zh-CN"?plcSigns[127].name:plcSigns[127].usname }}</el-button>
                <el-button type="primary" @mousedown.native="writeValue(plcSigns[127], 0)"
                  :style="{ backgroundColor: plcSigns[127].value == '0' ? '' : 'green' }">{{ language == "zh-CN" ? plcSigns[127].name : plcSigns[127].usname
                }}</el-button>
                <el-input style="width: 30%;" v-model="plcSigns[128].value" @focus="refresh()" @blur="writeValue(plcSigns[128])"
                  @keyup.enter.native="writeValue(plcSigns[128])"
                  oninput="value=value.replace(/^(-?)(\D*)(\d*(?:\.\d{0,2})?).*$/g, '$1$3')"></el-input>mm
@@ -812,7 +877,7 @@
// import ManualonePosition2 from './ManualonePosition2.vue';
// import ManualJog from './ManualJog.vue';
import {
   writeValue
   writeValue, writeButton
} from "../../api/home";
// import { createWebSocket } from '../../api/websocket.js';
let socket;
@@ -881,11 +946,26 @@
    },
    writeValue(plcSign) {
      const value = plcSign.value || 1; // 默认值为1
      writeValue(plcSign.unit, value, plcSign.ratio).then(res => {
      if (plcSign.ratio==2) {
        let state=plcSign.value ;
        if(state=="1"){
          state=0;
        }else{
          state=1;
        }
        writeButton(plcSign.unit, state, plcSign.ratio).then(res => {
        if (res.data.message == 200) {
          this.$message.success(this.$t('Operation successful'));
        }
      });
      }else{
        writeValue(plcSign.unit, value, plcSign.ratio).then(res => {
        if (res.data.message == 200) {
          this.$message.success(this.$t('Operation successful'));
        }
      });
      }
      this.updates = false;
    },
    // updateButtonValue(dataGroup, itemIndex) {
@@ -1013,6 +1093,11 @@
</script>
<style scoped>
/* 使用 ::v-deep 来覆盖 Element UI 插件的样式 */
::v-deep .el-input__inner {
  padding: 0 !important; /* 去除内边距 */
  text-align: center;
}
* {
  font-size: 13px; /* 设置字体大小 */
}
Albania_Mes-ui/src/views/home/index.vue
@@ -449,16 +449,19 @@
                            </el-col>
                        </div>
                    </div>
                    <el-table :data="this.tasklist1" border style="width: 700px;">
                        <el-table-column prop="mateid" :label="$t('Mateid')"></el-table-column>
                        <el-table-column prop="storageCage.cage" :label="$t('Start bit')"></el-table-column>
                    <el-table :data="this.tasklist1" border style="width: 730px;">
                        <el-table-column prop="mateid" :label="$t('Mateid')" width="70"></el-table-column>
                        <el-table-column prop="storageCage.cage" :label="$t('Start bit')" width="70"></el-table-column>
                        <el-table-column prop="storageCage.cell" :label="$t('Target bit')"></el-table-column>
                        <el-table-column prop="storageCage.glassWidth" :label="$t('Width')" width="70"></el-table-column>
                        <el-table-column prop="storageCage.glassHeight" :label="$t('Height')" width="70"></el-table-column>
                        <el-table-column prop="storageCage.thickness" :label="$t('Thickness')" width="50"></el-table-column>
                        <el-table-column prop="storageCage.tier" :label="$t('Tier')" width="50"></el-table-column>
                        <el-table-column prop="storageCage.films" :label="$t('Films')"></el-table-column>
                        <el-table-column prop="storageCage.glassWidth" :label="$t('Width')"
                            width="70"></el-table-column>
                        <el-table-column prop="storageCage.glassHeight" :label="$t('Height')"
                            width="70"></el-table-column>
                        <el-table-column prop="storageCage.thickness" :label="$t('Thickness')"
                            width="50"></el-table-column>
                        <el-table-column prop="storageCage.tier" :label="$t('Tier')" width="50"></el-table-column>
                        <el-table-column prop="storageCage.films" :label="$t('Films')" width="70"></el-table-column>
                        <el-table-column :min-width="120" :label="$t('Terminate Task')">
                            <template slot-scope='scope'>
                                <el-button type="primary" style="padding: 4px 10px;font-size: 12px;"
@@ -466,17 +469,20 @@
                                <el-button type="primary" style="padding: 4px 10px;font-size: 12px;"
                                    @click="TerminateTask(scope.row.id)">{{ $t('Terminate') }}</el-button>
                            </template>
                        </el-table-column>
                        </el-table-column>
                    </el-table>
                    <el-table :data="this.tasklist2" border style="width: 100%">
                        <el-table-column prop="mateid" :label="$t('Mateid')"></el-table-column>
                        <el-table-column prop="storageCage.cage" :label="$t('Start bit')"></el-table-column>
                        <el-table-column prop="mateid" :label="$t('Mateid')" width="70"></el-table-column>
                        <el-table-column prop="storageCage.cage" :label="$t('Start bit')" width="70"></el-table-column>
                        <el-table-column prop="storageCage.cell" :label="$t('Target bit')"></el-table-column>
                        <el-table-column prop="storageCage.glassWidth" :label="$t('Width')" width="70"></el-table-column>
                        <el-table-column prop="storageCage.glassHeight" :label="$t('Height')" width="70"></el-table-column>
                        <el-table-column prop="storageCage.thickness" :label="$t('Thickness')" width="50"></el-table-column>
                        <el-table-column prop="storageCage.glassWidth" :label="$t('Width')"
                            width="70"></el-table-column>
                        <el-table-column prop="storageCage.glassHeight" :label="$t('Height')"
                            width="70"></el-table-column>
                        <el-table-column prop="storageCage.thickness" :label="$t('Thickness')"
                            width="50"></el-table-column>
                        <el-table-column prop="storageCage.tier" :label="$t('Tier')" width="50"></el-table-column>
                        <el-table-column prop="storageCage.films" :label="$t('Films')"></el-table-column>
                        <el-table-column prop="storageCage.films" :label="$t('Films')" width="70"></el-table-column>
                        <el-table-column :min-width="120" :label="$t('Terminate Task')">
                            <template slot-scope='scope'>
                                <el-button type="primary" style="padding: 4px 10px;font-size: 12px;"
@@ -577,7 +583,7 @@
                            {{ $t('Width') + "*" + $t('Height') }}:{{ (this.LastQueue.glasswidth
                                + this.LastQueue.glassheight) !=
                                0 ?
                                (this.LastQueue.glasswidth +"*" + this.LastQueue.glassheight) + "" : "" }}
                                (this.LastQueue.glasswidth + "*" + this.LastQueue.glassheight) + "" : "" }}
                        </div>
                        <div>
@@ -647,7 +653,7 @@
                            @click="UpdateDisabled(scope.row.cage, scope.row.cell, scope.row.disabled == 0 ? 1 : 0)">
                            {{ scope.row.disabled == 0 ? $t('Disable') : $t('Enable') }}</el-button>
                        <el-button type="primary" style="padding: 4px 10px;font-size: 12px;"
                            :disabled="(scope.row.width < scope.row.glassWidth + 100 ? true : false)"
                            :disabled="(scope.row.width < scope.row.glassWidth + 300 ? true : false)"
                            @click="UpdateStroageCageByCell(scope.row.cell, scope.row.number, 1)">{{ $t('Add')
                            }}
                        </el-button>
@@ -688,15 +694,13 @@
                </el-table-column>
                <el-table-column prop="mateid" :label="$t('Mateid')" align="center">
                </el-table-column>
                <el-table-column prop="tier" :label="$t('Tier')" width="50"  align="center">
                <el-table-column prop="tier" :label="$t('Tier')" width="50" align="center">
                </el-table-column>
                <el-table-column prop="number" :label="$t('Number')" width="50" align="center">
                </el-table-column>
                <el-table-column prop="cageno" :label="$t('Cage GlassNumber')" align="center">
                </el-table-column>
                <el-table-column prop="finishnumber" :label="$t('Finish No')" align="center">
                </el-table-column>
                <el-table-column prop="mateid" :label="$t('Mate No')" align="center">
                </el-table-column>
                <el-table-column prop="films" :label="$t('Films')" align="center">
                </el-table-column>
@@ -720,7 +724,7 @@
                    </template>
                </el-table-column> -->
                <el-table-column prop="method" :label="$t('Task Method')" align="center">
                    <template slot-scope='scope' >
                    <template slot-scope='scope'>
                        <div style="text-align: center;width: 105%;">
                            {{ scope.row.state >= 0 ? (scope.row.method == 0 ? $t('Out') : $t('All Out')) : "" }}
                        </div>
@@ -730,9 +734,9 @@
                </el-table-column>
                <el-table-column width="420" :label="$t('Operate')">
                    <template slot-scope='scope'  >
                        <el-select v-model="selected[scope.$index]" :placeholder="$t('Line')" style="min-width: 70px; max-width: 70px;"
                            v-show="scope.row.state >= 0 ? true : false">
                    <template slot-scope='scope'>
                        <el-select v-model="selected[scope.$index]" :placeholder="$t('Line')"
                            style="min-width: 70px; max-width: 70px;" v-show="scope.row.state >= 0 ? true : false">
                            <el-option v-for="item in options" :key="item.value" :label="item.label"
                                :value="item.value">
                            </el-option>
@@ -761,59 +765,59 @@
                </el-table-column>
            </el-table>
        </el-dialog>
        <!-- 出片队列显示表 -->
        <el-dialog :visible.sync="Outqueue" top="5vh" style="height: 100%; overflow-y: auto;">
            <!-- //出片记录 -->
            <label style="font-weight: bold; font-size: 18px;">{{$t('Out Records')}}</label>
            <label style="font-weight: bold; font-size: 18px;">{{ $t('Out Records') }}</label>
            <el-table :data="OutLog" style="width: 100%;margin-bottom: 20px;" row-key="id" border lazy>
                <el-table-column prop="id" :label="$t('Task Id')" align="center">
                    <template slot-scope="scope">
                        <div :style="{width: '105%', height: '100%', lineHeight: '38px' }">
                        <div :style="{ width: '105%', height: '100%', lineHeight: '38px' }">
                            {{ scope.row.id }}
                        </div>
                    </template>
                </el-table-column>
                <el-table-column prop="flowcard" :label="$t('Order')" align="center">
                    <template slot-scope="scope">
                        <div :style="{width: '105%', height: '100%', lineHeight: '38px' }">
                        <div :style="{ width: '105%', height: '100%', lineHeight: '38px' }">
                            {{ scope.row.flowcard }}
                        </div>
                    </template>
                </el-table-column>
                <el-table-column prop="customer" :label="$t('Customer')" align="center">
                    <template slot-scope="scope">
                        <div :style="{width: '105%', height: '100%', lineHeight: '38px' }">
                        <div :style="{ width: '105%', height: '100%', lineHeight: '38px' }">
                            {{ scope.row.customer }}
                        </div>
                    </template>
                </el-table-column>
                <el-table-column prop="tier" :label="$t('Tier')" align="center">
                    <template slot-scope="scope">
                        <div :style="{width: '105%', height: '100%', lineHeight: '38px' }">
                        <div :style="{ width: '105%', height: '100%', lineHeight: '38px' }">
                            {{ scope.row.tier }}
                        </div>
                    </template>
                </el-table-column>
                <el-table-column prop="thickness" :label="$t('Thickness')" align="center">
                    <template slot-scope="scope">
                        <div :style="{width: '105%', height: '100%', lineHeight: '38px' }">
                        <div :style="{ width: '105%', height: '100%', lineHeight: '38px' }">
                            {{ scope.row.thickness }}
                        </div>
                    </template>
                </el-table-column>
                <el-table-column prop="width" :label="$t('Width')" align="center">
                    <template slot-scope="scope">
                        <div :style="{width: '105%', height: '100%', lineHeight: '38px' }">
                        <div :style="{ width: '105%', height: '100%', lineHeight: '38px' }">
                            {{ scope.row.width }}
                        </div>
                    </template>
                </el-table-column>
                <el-table-column prop="height" :label="$t('Height')" align="center">
                    <template slot-scope="scope">
                        <div :style="{width: '105%', height: '100%', lineHeight: '38px' }">
                        <div :style="{ width: '105%', height: '100%', lineHeight: '38px' }">
                            {{ scope.row.height }}
                        </div>
                    </template>
@@ -827,91 +831,92 @@
                </el-table-column>
                <el-table-column prop="films" :label="$t('Films')" align="center">
                    <template slot-scope="scope">
                        <div :style="{width: '105%', height: '100%', lineHeight: '38px' }">
                        <div :style="{ width: '105%', height: '100%', lineHeight: '38px' }">
                            {{ scope.row.films }}
                        </div>
                    </template>
                </el-table-column>
                <el-table-column prop="mateid" :label="$t('Mateid')" align="center">
                    <template slot-scope="scope">
                        <div :style="{backgroundColor: scope.row.state === 0 ? '#00FFFF' : '',width: '105%', height: '100%', lineHeight: '38px' }">
                        <div
                            :style="{ backgroundColor: scope.row.state === 0 ? '#00FFFF' : '', width: '105%', height: '100%', lineHeight: '38px' }">
                            {{ scope.row.mateid }}
                        </div>
                    </template>
                </el-table-column>
                </el-table>
                <label style="font-weight: bold; font-size: 18px;">{{$t('Outing Queue')}}</label>
                <!-- //出片队列 -->
            </el-table>
            <label style="font-weight: bold; font-size: 18px;">{{ $t('Outing Queue') }}</label>
            <!-- //出片队列 -->
            <el-table :data="OutTask" style="width: 100%;margin-bottom: 20px;" row-key="id" border lazy>
                <el-table-column prop="id" :label="$t('Task Id')" align="center">
                    <template slot-scope="scope">
                        <div :style="{width: '105%', height: '100%', lineHeight: '38px' }">
                        <div :style="{ width: '105%', height: '100%', lineHeight: '38px' }">
                            {{ scope.row.id }}
                        </div>
                    </template>
                </el-table-column>
                <el-table-column prop="flowcard" :label="$t('Order')" align="center">
                    <template slot-scope="scope">
                        <div :style="{width: '105%', height: '100%', lineHeight: '38px' }">
                        <div :style="{ width: '105%', height: '100%', lineHeight: '38px' }">
                            {{ scope.row.flowcard }}
                        </div>
                    </template>
                </el-table-column>
                <el-table-column prop="customer" :label="$t('Customer')" align="center">
                    <template slot-scope="scope">
                        <div :style="{width: '105%', height: '100%', lineHeight: '38px' }">
                        <div :style="{ width: '105%', height: '100%', lineHeight: '38px' }">
                            {{ scope.row.customer }}
                        </div>
                    </template>
                </el-table-column>
                <el-table-column prop="tier" :label="$t('Tier')" align="center">
                    <template slot-scope="scope">
                        <div :style="{width: '105%', height: '100%', lineHeight: '38px' }">
                        <div :style="{ width: '105%', height: '100%', lineHeight: '38px' }">
                            {{ scope.row.tier }}
                        </div>
                    </template>
                </el-table-column>
                <el-table-column prop="thickness" :label="$t('Thickness')" align="center">
                    <template slot-scope="scope">
                        <div :style="{width: '105%', height: '100%', lineHeight: '38px' }">
                        <div :style="{ width: '105%', height: '100%', lineHeight: '38px' }">
                            {{ scope.row.thickness }}
                        </div>
                    </template>
                </el-table-column>
                <el-table-column prop="width" :label="$t('Width')" align="center">
                    <template slot-scope="scope">
                        <div :style="{width: '105%', height: '100%', lineHeight: '38px' }">
                        <div :style="{ width: '105%', height: '100%', lineHeight: '38px' }">
                            {{ scope.row.width }}
                        </div>
                    </template>
                </el-table-column>
                <el-table-column prop="height" :label="$t('Height')" align="center">
                    <template slot-scope="scope">
                        <div :style="{width: '105%', height: '100%', lineHeight: '38px' }">
                        <div :style="{ width: '105%', height: '100%', lineHeight: '38px' }">
                            {{ scope.row.height }}
                        </div>
                    </template>
                </el-table-column>
                <el-table-column prop="films" :label="$t('Films')" align="center">
                    <template slot-scope="scope">
                        <div :style="{width: '105%', height: '100%', lineHeight: '38px' }">
                        <div :style="{ width: '105%', height: '100%', lineHeight: '38px' }">
                            {{ scope.row.films }}
                        </div>
                    </template>
                </el-table-column>
                <el-table-column prop="cell" :label="$t('Slot No')" align="center">
                    <template slot-scope="scope">
                        <div :style="{width: '105%', height: '100%', lineHeight: '38px' }">
                        <div :style="{ width: '105%', height: '100%', lineHeight: '38px' }">
                            {{ scope.row.cell }}
                        </div>
                        </div>
                    </template>
                </el-table-column>
                <el-table-column prop="mateid" :label="$t('Mateid')" align="center">
                    <template slot-scope="scope">
                        <div :style="{width: '105%', height: '100%', lineHeight: '38px' }">
                        <div :style="{ width: '105%', height: '100%', lineHeight: '38px' }">
                            {{ scope.row.mateid }}
                        </div>
                    </template>
@@ -919,8 +924,8 @@
                <el-table-column prop="task_state" :label="$t('Task State')" align="center">
                    <template slot-scope='scope'>
                        <div
                            :style="{backgroundColor: scope.row.state === 0 ? '#00FFFF' : '', width: '105%', height: '100%%', lineHeight: '38px' }">
                            {{scope.row.state == 0 ? $t('Waiting') : $t('Suspend') }}
                            :style="{ backgroundColor: scope.row.state === 0 ? '#00FFFF' : '', width: '105%', height: '100%%', lineHeight: '38px' }">
                            {{ scope.row.state == 0 ? $t('Waiting') : $t('Suspend') }}
                        </div>
                    </template>
                </el-table-column>
@@ -957,11 +962,11 @@
            </div>
            <el-table :data="this.StorageCageAddInfo" :height="700" border style="width: 100%;overflow: auto;">
                <el-table-column prop="flowcard" :label="$t('Order')"></el-table-column>
                <el-table-column prop="tier" :label="$t('Tier')"></el-table-column>
                <el-table-column prop="width" :label="$t('Width')"></el-table-column>
                <el-table-column prop="height" :label="$t('Height')"></el-table-column>
                <el-table-column prop="thickness" :label="$t('Thickness')"></el-table-column>
                <el-table-column prop="films" :label="$t('Films')"></el-table-column>
                <el-table-column prop="tier" :label="$t('Tier')"></el-table-column>
                <el-table-column prop="mateid" :label="$t('Mateid')"></el-table-column>
                <el-table-column :label="$t('Operate')">
                    <template slot-scope='scope'>
@@ -982,13 +987,20 @@
    Disabled, SelectPermissionByUserName, currentUsername, CompleteQueue,
    isAllowReorderings,
    UpdateStroageCageByCell, AddOutGlass, FinishTask, TerminateTask, SelectGlassInfo, StorageCageAddGlass, ClaimTasks, ModeChange, UpdateQueue, importData, ManualTake, AnewMeasure, StartChange,UpdateOutTask,DeleteOutTask, deleteTasks, SaveMeasure
    UpdateStroageCageByCell, AddOutGlass, FinishTask, TerminateTask, SelectGlassInfo, StorageCageAddGlass, ClaimTasks, ModeChange, UpdateQueue, importData, ManualTake, AnewMeasure, StartChange, UpdateOutTask, DeleteOutTask, deleteTasks, SaveMeasure
} from "../../api/home";
import LanguageMixin from '../../lang/LanguageMixin';
import * as XLSX from "../../../node_modules/xlsx/xlsx.mjs";
let socket;
export function debounce(func, wait = 300) {
    let timeout;
    return function (...args) {
        clearTimeout(timeout);  // 清除上次的定时器
        timeout = setTimeout(() => func.apply(this, args), wait);  // 设置一个新的定时器
    };
}
export default {
    name: "Home",
    data() {
@@ -1187,7 +1199,7 @@
                    this.tasklist2 = obj.StoragTaskeTaskFeed[0];
                    this.tasklist1 = obj.StoragTaskeTaskOut[0];
                    // console.log(obj.StoragTaskeTaskOut[0]);
                    this.SelectSetting = obj.SelectSetting[0];
                    this.selectedOption1.films = obj.SelectMeasure[0];
                    this.selectedOption2.thickness = obj.SelectMeasure[0];
@@ -1221,11 +1233,11 @@
                    }
                    this.tableData1 = obj.OrderTask[0];
                    this.OutTask = obj.OutTask[0];
                    this.OutTask = obj.OutTask[0];
                    this.OutLog = obj.OutLog[0];
                    this.tableData2 = obj.OrderTask[0];
                    this.LastQueue = obj.LastQueue[0];
@@ -1378,17 +1390,17 @@
        //开始/暂停出片队列
        UpdateOutTask(id, state) {
            console.log(id + " 状态" + state);
            if( state == 0){
                state=2
            }else{
                state=0
            if (state == 0) {
                state = 2
            } else {
                state = 0
            }
                UpdateOutTask(id, state).then(res => {
                    if (res.data.message == 200) {
                        this.$message.success(this.$t('Operation successful'));
                    }
                });
            UpdateOutTask(id, state).then(res => {
                if (res.data.message == 200) {
                    this.$message.success(this.$t('Operation successful'));
                }
            });
        },
        //删除工程
        deleteTasks(flowcard) {
@@ -1396,18 +1408,29 @@
                console.log("@" + flowcard + "@");
                if (res.data.message == 200) {
                    this.$message.success(this.$t('Operation successful'));
                } else {
                    this.$message.error(this.$t('The glass for this order is still in the cage and cannot be deleted'));
                }
            });
        },
        // 防抖版的 DeleteOutTask 方法
        //删除出片队列
        DeleteOutTask(id) {
        debouncedDeleteOutTask: debounce(function (id) {
            DeleteOutTask(id).then(res => {
                if (res.data.message == 200) {
                    this.$message.success(this.$t('Operation successful'));
                } else {
                    this.$message.error(this.$t('Operation failed'));
                }
            });
        }, 200),  // 防抖延迟时间为 200 毫秒
        // 修改原方法,调用防抖版的 DeleteOutTask
        DeleteOutTask(id) {
            // 调用防抖版本的 DeleteOutTask
            this.debouncedDeleteOutTask(id);
        },
        //保存测量膜系的参数
        SaveMeasure(films, thickness) {
            console.log('Films:', films);  // 打印 films
@@ -1422,7 +1445,7 @@
        SelectGlassInfo() {
            // console.log(this.StorageCageForm.glasswidthmm);
            // console.log(this.StorageCageForm.tier);
            SelectGlassInfo(this.StorageCageForm.glasswidthmm, this.StorageCageForm.glassheightmm, this.StorageCageForm.thickness, this.StorageCageForm.films,this.StorageCageForm.tier).then(res => {
            SelectGlassInfo(this.StorageCageForm.glasswidthmm, this.StorageCageForm.glassheightmm, this.StorageCageForm.thickness, this.StorageCageForm.films, this.StorageCageForm.tier).then(res => {
                this.StorageCageAddInfo = res.data.StorageCageAddInfo;
            })
        },
@@ -1445,6 +1468,27 @@
        //修改理片笼玻璃信息
        UpdateStroageCageByCell(cell, nownum, num) {
            // 调用防抖方法
            this.debouncedUpdateStroageCageByCell(cell, nownum, num);
            // if (nownum == null && num == 1) {
            //     this.StorageCageAdd = true;
            //     this.Measuermode = true;
            //     this.cell = cell;
            // } else {
            //     if (nownum + num == 0) {
            //         num = 0;
            //     }
            //     UpdateStroageCageByCell(cell, num).then(res => {
            //         if (res.data.message3 == 200) {
            //             this.$message.success(this.$t('Operation successful'));
            //         }
            //     });
            // }
        },
        // 防抖版的 UpdateStroageCageByCell 方法
        debouncedUpdateStroageCageByCell: debounce(function (cell, nownum, num) {
            if (nownum == null && num == 1) {
                this.StorageCageAdd = true;
                this.Measuermode = true;
@@ -1459,9 +1503,21 @@
                    }
                });
            }
        }, 200),  // 设置防抖的时间间隔为 200 毫秒
        AddOutGlass(cell, glasstype) {
            this.debouncedAddOutGlass(cell, glasstype);
            // AddOutGlass(cell, glasstype).then(res => {
            //     if (res.data.message == 200) {
            //         this.$message.success(this.$t('Operation successful'));
            //     } else {
            //         this.$message.error(this.$t('Operation failed'));
            //     }
            // });
        },
        AddOutGlass(cell, glasstype) {
        debouncedAddOutGlass: debounce(function (cell, glasstype) {
            AddOutGlass(cell, glasstype).then(res => {
                if (res.data.message == 200) {
                    this.$message.success(this.$t('Operation successful'));
@@ -1469,8 +1525,8 @@
                    this.$message.error(this.$t('Operation failed'));
                }
            });
        }, 200),  // 设置防抖的时间间隔为 200 毫秒
        },
        //启用//理片笼禁用
        UpdateDisabled(cage, cell, disabled) {
            Disabled(cage, cell, disabled).then(res => {
@@ -1582,7 +1638,7 @@
            ManualTake(s).then(res => {
                if (res.data.message == 200) {
                    this.$message.success(this.$t('The current data on the measuring console has been cleared'));
                }else{
                } else {
                    this.$message.success(this.$t('Operation successful'));
                }
            })
springboot-vue3/src/main/java/com/example/springboot/component/PlcHoldNew.java
@@ -31,8 +31,8 @@
      storageCageService = WebSocketServer.applicationContext.getBean(StorageCageService.class);
      spianService = WebSocketServer.applicationContext.getBean(SpianServiceNew.class);
      albaniaMapper = WebSocketServer.applicationContext.getBean(AlbaniaMapper.class);
      // spianService.selectout(1);
      // storageCageService.ScanMatch("123",1,1);
      // spianService.mateOut();
      // 读取DB14区文件
      PlcParameterObject plcmes = PLCAutoMes.PlcMesObject;
@@ -96,7 +96,7 @@
        // 运送车请求和测量完成请求
        GlassInfo glass = albaniaMapper.SelectGlass();
        if (PLCToMES != null && glass != null && MESToPLC != null) {
          if (PLCToMES.equals("1")&& MESToPLC.equals("0")&&("1".equals(GaToMES)||"2".equals(GaToMES))) {
          if (PLCToMES.equals("1")&& MESToPLC.equals("0")&&("1".equals(GaToMES)||"2".equals(GaToMES))&& taskcont == 0) {
            try {
              Thread.sleep(100); // 每100毫秒检查一次
            } catch (InterruptedException e) {
springboot-vue3/src/main/java/com/example/springboot/component/Plchome.java
@@ -161,21 +161,23 @@
                    String cleanedLayer = cleanedLayers.isEmpty() ? "" : cleanedLayers;
                    if ("4".equals(PlcRequest)) {
                        S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToGaStatus").getAddress(),(short) 0);
                        S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToGaStatus").getAddress(),
                                (short) 0);
                        System.out.println("收四归零");
                    }
                    // 扫码请求时
                    if ("1".equals(A01ToMES) && "0".equals(MESToA01)&&"0".equals(MesSend)&&"0".equals(PlcRequest)) {
                        if(cleanedMateid==""||cleanedLayer==""){
                            cleanedMateid="0";
                            cleanedLayer="0";
                    if ("1".equals(A01ToMES) && "0".equals(MESToA01) && "0".equals(MesSend) && "0".equals(PlcRequest)) {
                        if (cleanedMateid == "" || cleanedLayer == "") {
                            cleanedMateid = "0";
                            cleanedLayer = "0";
                        }
                        int cont = storageCageService.ScanMatch(celanedOrder, Integer.parseInt(cleanedMateid),Integer.parseInt(cleanedLayer));
                        int cont = storageCageService.ScanMatch(celanedOrder, Integer.parseInt(cleanedMateid),
                                Integer.parseInt(cleanedLayer));
                        if (cont > 0) {
                            System.out.println("扫码成功");
                            System.out.println(
                                    "Order:" + celanedOrder + " Mateid:" + cleanedMateid + " Layer:" + cleanedLayer);
                            S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToA01").getAddress(),
                                    (short) 1);
                            S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToGaStatus").getAddress(),
@@ -274,37 +276,47 @@
                // System.out.println("jsonObject:" + jsonObject);
                ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("Home");
                if (sendwServer != null) {
                    Iterator<WebSocketServer> iterator = sendwServer.iterator();
                    while (iterator.hasNext()) {
                        WebSocketServer webserver = iterator.next();
                        webserver.sendMessage(jsonObject.toString());
                    try {
                        Iterator<WebSocketServer> iterator = sendwServer.iterator();
                        while (iterator.hasNext()) {
                            WebSocketServer webserver = iterator.next();
                            webserver.sendMessage(jsonObject.toString());
                            List<String> messages = webserver.getMessages();
                            if (!messages.isEmpty()) {
                                // // 将最后一个消息转换为整数类型的列表
                                webserver.clearMessages();
                            }
                            }
                        }
                    } catch (Exception e) {
                        e.printStackTrace(); // 打印堆栈信息,方便定位问题
                        System.out.println("webserver出现异常: " + e.getMessage());
                        // TODO: handle exception
                    }
                }
                // ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("Home");
                // ArrayList<WebSocketServer> sendwServer =
                // WebSocketServer.sessionMap.get("Home");
                // if (sendwServer != null) {
                //     for (WebSocketServer webserver : sendwServer) {
                //         webserver.sendMessage(jsonObject.toString());
                //         if (webserver != null) {
                //             List<String> messages = webserver.getMessages();
                // for (WebSocketServer webserver : sendwServer) {
                // webserver.sendMessage(jsonObject.toString());
                // if (webserver != null) {
                // List<String> messages = webserver.getMessages();
                //             if (!messages.isEmpty()) {
                //                 // // 将最后一个消息转换为整数类型的列表
                //                 webserver.clearMessages();
                //             }
                //         }
                // if (!messages.isEmpty()) {
                // // // 将最后一个消息转换为整数类型的列表
                // webserver.clearMessages();
                // }
                // }
                //     }
                // }
                // }
            } catch (InterruptedException e) {
                System.out.println("线程出现异常");
                e.printStackTrace();
            }
        }
springboot-vue3/src/main/java/com/example/springboot/component/Plcsign.java
@@ -1,8 +1,8 @@
package com.example.springboot.component;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
@@ -12,19 +12,19 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Arrays;
public class Plcsign extends Thread {
  // 用于存储应用程序的配置信息
  private Configuration config;
    public Plcsign() throws IOException {
        config = new Configuration("config.properties");
    }
  String name = "";
  Integer count = 0;
  public void readValue() {
    String str = "";
    BufferedReader bufferedReader = null;
@@ -41,20 +41,20 @@
      while ((line = bufferedReader.readLine()) != null) {
        str += line;
      }
      // 将str字符串格式转为json
      JSONObject jsonObject = new JSONObject(str);
      // 获取json中的值
      JSONArray address = jsonObject.getJSONArray("address");
      for (int i = 0; i < address.size(); i++) {
        JSONObject ress = (JSONObject) address.get(i);
        this.name = ress.getStr("name");
        this.count = ress.getInt("count");
      }
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (UnsupportedEncodingException e) {
@@ -63,7 +63,7 @@
      e.printStackTrace();
    }
  }
  @Override
  public void run() {
    while (this != null) {
@@ -75,15 +75,24 @@
       List<String> addressList21 = Arrays.asList(config.getProperty("PlcIO.State").split(","));
       List<Boolean> plclist = S7control.getinstance().readBits(addressList21);
      //  System.out.println("急停"+S7control.getinstance().ReadBits("DB10.0.5", 1));
      //  int index = 0;
      // for (String item : addressList21) {
      //   System.out.println("地址:"+item+"值"+plclist.get(index)+"下标"+index);
      //   index++;
      // }
      
      if (plclist != null) {
        // 将获取的布尔类型转换为整数类型
        List<Integer> Intlist = new ArrayList<>();
        // System.out.println("长度"+plclist.size());
        for (Boolean value : plclist) {
          if (value != null) {
            Intlist.add(value == true ? 0 : 1);
          }else {
            Intlist.add(1);
            System.out.println("null");
          }
        }
        JSONObject jsonObject = new JSONObject();
        jsonObject.append("sig", Intlist);
@@ -91,7 +100,7 @@
//        if (sendwServer3 != null) {
//          sendwServer3.sendMessage(jsonObject.toString());
//        }
        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("Sign");
        if (sendwServer != null) {
          for (WebSocketServer webserver : sendwServer) {
@@ -101,4 +110,4 @@
      }
    }
  }
}
}
springboot-vue3/src/main/java/com/example/springboot/config/AppRunnerConfig.java
@@ -21,10 +21,9 @@
        new PLCAutoMes().start();
        new PlcHoldNew().start();
        new Plchome().start();
        // // new PlcAlbaniaServo().start();
        new Plcsign().start();
        new PlcSigns().start();
        // new PlcAlbaniaServo().start();
       
    }
}
springboot-vue3/src/main/java/com/example/springboot/controller/HomeController.java
@@ -494,29 +494,30 @@
  // 更改笼子数量
  @PostMapping("/UpdateStroageCageByCell")
  public Result UpdateStroageCageByCell(Integer cell, Integer num) {
    return storageCageService.UpdateStroageCageByCell(cell, num);
  }
  @PostMapping("/AddOutGlass")
  public Result AddOutGlass(Integer cell, Integer glasstype) {
    return storageCageService.AddOutGlass(cell,glasstype);
    return storageCageService.UpdateStroageCageByCells(cell, num);
  }
  @PostMapping("/AddOutGlass")
  public Result AddOutGlass(Integer cell, Integer glasstype) {
    return storageCageService.AddOutGlass(cell, glasstype);
  }
  // 手动完成任务
  @PostMapping("/FinishTask")
  public Result FinishTask(Integer id) {
    return storageCageService.FinishTask();
  }
    // 手动结束任务
    @PostMapping("/TerminateTask")
    public Result TerminateTask(Integer id) {
      return storageCageService.TerminateTask(id);
    }
  // 手动结束任务
  @PostMapping("/TerminateTask")
  public Result TerminateTask(Integer id) {
    return storageCageService.TerminateTask(id);
  }
  // 查询玻璃信息
  @PostMapping("/SelectGlassInfo")
  public Result SelectGlassInfo(String width, String height, String thickness, String films, String tier) {
    return storageCageService.SelectGlassInfo(width, height, thickness, films,tier);
    return storageCageService.SelectGlassInfo(width, height, thickness, films, tier);
  }
  // 添加玻璃信息到笼子
@@ -551,13 +552,14 @@
  // 开始工程
  @PostMapping("/StartChange")
  public Result StartChange(String flowcard,Integer orderstate) {
    return storageCageService.StartChange(flowcard,orderstate);
  public Result StartChange(String flowcard, Integer orderstate) {
    return storageCageService.StartChange(flowcard, orderstate);
  }
  // 开始/暂停出片队列
  @PostMapping("/UpdateOutTask")
  public Result UpdateOutTask(Integer id,Integer state) {
    return storageCageService.UpdateOutTask(id,state);
  public Result UpdateOutTask(Integer id, Integer state) {
    return storageCageService.UpdateOutTask(id, state);
  }
  // 重新测量
@@ -578,45 +580,51 @@
    System.out.println("控制器:" + num);
    return storageCageService.deleteTasks(num);
  }
//删除出片队列
  // 删除出片队列
  @PostMapping("/DeleteOutTask")
  public Result DeleteOutTask(Integer id) {
    System.out.println("控制器:" + id);
    return storageCageService.DeleteOutTask(id);
  }
  // 保存膜系设置
  @PostMapping("/SaveMeasure")
  public Result SaveMeasure(String films, Integer thickness) {
    System.out.println("控制器:" + films+thickness);
    return storageCageService.SaveMeasure(films,thickness);
    System.out.println("控制器:" + films + thickness);
    return storageCageService.SaveMeasure(films, thickness);
  }
  @GetMapping("/writeValue")
  public Result writeValue(String address, float value, String type) {
    if ("0".equals(type)) {
      System.err.println("写入word" + address + "+" + value);
      S7control.getinstance().WriteWord(address, (short) value);
    } else if("1".equals(type)) {
    } else if ("1".equals(type)) {
      System.err.println("写入float" + address + "+" + value);
      S7control.getinstance().writeFloat32(address, value);
    }else if("2".equals(type)) {
      System.err.println("写入bit" + address + "+" + value);
      S7control.getinstance().WriteBit(address, true);
    }else{
      S7control.getinstance().writetime(address, (long)value);
    } else if ("2".equals(type)) {
      Boolean boolvue;
      if (value == 0) {
        boolvue = false;
      } else {
        boolvue = true;
      }
      S7control.getinstance().WriteBit(address, boolvue);
      System.err.println("写入bit" + address + "+" + boolvue);
    } else {
      S7control.getinstance().writetime(address, (long) value);
      System.err.println("写入time" + address + "+" + value);
    }
      try {
        TimeUnit.MILLISECONDS.sleep(300);
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
      // S7control.getinstance().WriteBit(address, false);
    try {
      TimeUnit.MILLISECONDS.sleep(300);
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
    // S7control.getinstance().WriteBit(address, false);
    Map<String, Object> map = new HashMap<>();
    map.put("message", "200");
    return Result.success(map);
@@ -624,15 +632,22 @@
  @GetMapping("/writeButton")
  public Result writeButton(String address, float value, String type) {
    if(value==0){
      System.err.println("写入bit" + address + "+" + value);
    String pd = String.valueOf(S7control.getinstance().ReadBits(address, 1).get(0));
    if ("true".equals(pd)) {
      System.err.println("写入bit" + address + "+" + false);
      S7control.getinstance().WriteBit(address, false);
    }else{
      System.err.println("写入bit" + address + "+" + value);
    } else {
      System.err.println("写入bit" + address + "+" + true);
      S7control.getinstance().WriteBit(address, true);
    }
    if(value==0){
    System.err.println("写入bit" + address + "+" + false);
    // S7control.getinstance().WriteBit(address, false);
    }else{
    System.err.println("写入bit" + address + "+" + true);
    // S7control.getinstance().WriteBit(address, true);
    }
    Map<String, Object> map = new HashMap<>();
    map.put("message", "200");
    return Result.success(map);
springboot-vue3/src/main/java/com/example/springboot/mapper/AlbaniaMapper.java
@@ -38,12 +38,7 @@
    //获取进片数据
    @Select("select glassid,flowcard,glasswidth as width,glassheight as height,glasswidthmm,glassheightmm,glasstype,thickness  from queue where state=1 limit 1")
    GlassInfo SelectGlass();
    //一号线查询任务
    @Select("select * from v_cagerelease1 where mateid not in(select mateid from v_cagerelease1 where surplus=0 group by mateid);")
    GlassInfo SelectOutGlass1();
    //二号线查询任务
    @Select("select * from v_cagerelease2 where mateid not in(select mateid from v_cagerelease2 where surplus=0 group by mateid)LIMIT 1;")
    GlassInfo SelectOutGlass2();
    //待出片任务查询
    @Select("select * from out_task where task_state=0 order by id asc;")
    List<StorageTask> SelectOutTask();
@@ -74,8 +69,8 @@
    @Select("select method,flowcard from flowcard where state=1 and line=#{line} ORDER BY starttime LIMIT 1;")
    GlassInfo SelectMethod(int line);
    //直出模式任务查询
    @Select("select  b.flowcard,b.glassid,b.glasstype,b.mateid,b.width,b.tier,a.totaltier as id,IFNULL(c.number,0)as number,b.glassid from flowcard a  left join glassinfo b on a.flowcard=b.flowcard left join(select sum(number)as number,glasstype from storage_cage GROUP BY glasstype)c on b.glasstype=c.glasstype where a.line=1 and a.state=1 and c.number>0  ORDER BY b.mateid,b.tier asc limit 1")
    GlassInfo SelectOutGlass2(int line);
    @Select("select  b.flowcard,b.glassid,b.glasstype,b.mateid,b.width,b.tier,a.totaltier as id,IFNULL(c.number,0)as number from flowcard a  left join glassinfo b on a.flowcard=b.flowcard left join(select sum(number)as number,glasstype from storage_cage GROUP BY glasstype)c on b.glasstype=c.glasstype where  a.state=1 and c.number>0  ORDER BY b.mateid,b.tier asc limit 1")
    GlassInfo SelectOutGlass2();
    //查询直通模式下最后一块
    @Select("select IFNULL(b.tier, 0) from flowcard a  left join glassinfo b on a.flowcard=b.flowcard left join(select sum(number)as number,glasstype from storage_cage GROUP BY glasstype)c on b.glasstype=c.glasstype where a.line=#{line} and c.number>0 ORDER BY b.tier desc LIMIT 1")
    int SelectOutGlassend(int line);
@@ -89,7 +84,7 @@
     @Select("select*from glassinfo  where glasstype=#{glasstype} limit 1;")
     GlassInfo SelectGlassinfo(Integer glasstype);
    //查询纯配片模式可出配片id
    @Select("select gls.flowcard,gls.mateid,gls.tier,gls.glasstype,kc.number from glassinfo as gls left join (select glasstype,sum(number) as number from storage_cage where number>0 and disabled=0 GROUP BY glasstype)as kc on gls.glasstype=kc.glasstype where gls.flowcard=#{flowcard} and gls.number>gls.finishnumber and kc.number>0 GROUP BY gls.flowcard, gls.mateid, gls.tier, gls.glasstype, kc.number,mateid  order by gls.mateid;")
    @Select("select gls.flowcard,gls.mateid,gls.tier,gls.glasstype,kc.number from glassinfo as gls left join (select glasstype,sum(number) as number from storage_cage where number>0 and disabled=0 GROUP BY glasstype)as kc on gls.glasstype=kc.glasstype where gls.flowcard=#{flowcard} and kc.number>0 GROUP BY gls.flowcard, gls.mateid, gls.tier, gls.glasstype, kc.number,mateid  order by gls.mateid;")
    List<GlassInfo> SelectOutGlass3(String flowcard);
    //判断此配片id是否有足够的玻璃
    @Select("SELECT  CASE WHEN storage.number >= required.number THEN '足够' ELSE '不足' END AS status FROM (SELECT a.glasstype, COUNT(a.glasstype) AS number FROM glassinfo a WHERE a.flowcard =#{flowcard} AND a.mateid =#{mateid} GROUP BY a.glasstype) AS required LEFT JOIN (SELECT a.glasstype, SUM(a.number) AS number FROM storage_cage a WHERE a.number > 0 and disabled=0 GROUP BY a.glasstype) AS storage ON required.glasstype = storage.glasstype;")
@@ -112,4 +107,7 @@
    //完成出片队列的任务
    @Update("update out_task set task_state=1 where id=#{id};")
    void UpdateOutTask(int id);
    //判断此格子是否在出片队列有数据
    @Select("select count(*) from out_task where shelf_rack=#{cell} and (task_state=0 or task_state=2)")
    int SelectOutTasksum(int cell);
}
springboot-vue3/src/main/java/com/example/springboot/mapper/HomeMapper.java
@@ -23,7 +23,12 @@
  @Select("select cage,round(100-(21-sum(if(state>0,1,state)))/21*100) as cell,21-sum(if(state>0,1,state)) as state from (select cage,cell,max(state) as state from storage_cage group by cage,cell) as cages group by cage")
  List<StorageCage> selectAll();
  @Select("Select cage,sum(case when number=0 or number is null then 1 else 0 end) as cell,100-sum(case when number=0 or number is null then 1 else 0 end)/count(id)*100 as width from storage_cage group by cage")
  // @Select("Select cage,sum(case when number=0 or number is null then 1 else 0 end) as cell,100-sum(case when number=0 or number is null then 1 else 0 end)/count(id)*100 as width from storage_cage group by cage")
  // List<StorageCage> selectAlls();
  // 查询每个笼子的使用情况
  // @Select("Select a.cage,sum(case when a.number=0 or a.number is null then 1 else 0 end)-b.cells as cell,100+b.cells-sum(case when a.number=0 or a.number is null then 1 else 0 end)/count(a.id)*100 as width from storage_cage a left join (select `cage_numbers`.`cage` AS `cages`,count(`a`.`shelf_rack`) AS `cells` from ((select 1 AS `cage` union all select 2 AS `2` union all select 3 AS `3` union all select 4 AS `4`) `cage_numbers` left join `out_task` `a` on((((case when (`a`.`shelf_rack` between 1 and 40) then 1 when (`a`.`shelf_rack` between 41 and 80) then 2 when (`a`.`shelf_rack` between 81 and 120) then 3 when (`a`.`shelf_rack` between 121 and 160) then 4 else NULL end) = `cage_numbers`.`cage`) and (`a`.`task_state` = 0)))) group by `cage_numbers`.`cage` order by `cage_numbers`.`cage`) as b on a.cage=b.cages group by a.cage;")
  // List<StorageCage> selectAlls();
  @Select("Select a.cage, GREATEST(sum(case when  a.number is null and disabled=0 then 1 else 0 end),0) as cell,LEAST(100-sum(case when  a.number is null and disabled=0 then 1 else 0 end)/count(a.id)*100,100) as width from storage_cage a left join (select `cage_numbers`.`cage` AS `cages`,count(`a`.`shelf_rack`) AS `cells` from ((select 1 AS `cage` union all select 2 AS `2` union all select 3 AS `3` union all select 4 AS `4`) `cage_numbers` left join `out_task` `a` on((((case when (`a`.`shelf_rack` between 1 and 40) then 1 when (`a`.`shelf_rack` between 41 and 80) then 2 when (`a`.`shelf_rack` between 81 and 120) then 3 when (`a`.`shelf_rack` between 121 and 160) then 4 else NULL end) = `cage_numbers`.`cage`) and (`a`.`task_state` = 0)))) group by `cage_numbers`.`cage` order by `cage_numbers`.`cage`) as b on a.cage=b.cages group by a.cage;")
  List<StorageCage> selectAlls();
  // 查询10-6笼内层格子状态
@@ -247,7 +252,7 @@
  void updateStroageCageByCell(Integer cell, Integer num);
  // 计算格子内剩余宽度
  @Update("update storage_cage set width=4300-if(glasswidth is null,0,glasswidth+300)*number+300 where cell=#{cell}")
  @Update("update storage_cage set width=4300-if(glasswidth is null,0,glasswidth)*number-(number*300)+300 where cell=#{cell}")
  void UpdateStroageCageWidthByCell(Integer cell);
  // 根据任务类型获取任务
@@ -307,6 +312,10 @@
  // int deleteGlassinfo(String flowcard);
  @Update("Update  flowcard set state=2, flowcard=CONCAT('已删除', #{flowcard}),orderstate=0  where flowcard=#{flowcard}")
  int deleteFlowcard(String flowcard);
  //查询当前笼子是否还有该订单的玻璃
  @Select("select count(*) from storage_cage where flowcard=#{flowcard}")
  int selectflowcardCage(String flowcard);
  //修改出片队列状态
  @Update("Update out_task set task_state=#{state} where id=#{id}")
  int UpdateOutTask(Integer id, Integer state);
@@ -361,7 +370,7 @@
  List<Map> Selecttiersum();
  // 查询笼内玻璃信息
  @Select("select * from storage_cage where cage=#{cage} order by id desc")
  @Select("select DISTINCT * from storage_cage where cage=#{cage} order by id desc")
  List<StorageCage> SelectStorageCageByCage(Integer cage);
  // 添加出片队列
springboot-vue3/src/main/java/com/example/springboot/service/SpianServiceNew.java
@@ -56,14 +56,14 @@
                // System.out.println(cage + "理片笼判断");
            }
            //当小片笼子不够,则符合条件的可以进入大片笼
            if(cage==null&&glassInfo.getWidth()>= 1500&&glassInfo.getThickness() > 4){
            // 当小片笼子不够,则符合条件的可以进入大片笼
            if (cage == null && glassInfo.getWidth() >= 1500 && glassInfo.getThickness() > 4) {
                cage = albaniaMapper.SelectNewCell(3, 5);
            }
            // 当返回的格子号为空时,返回400笼子已满
            if (cage != null) {
                albaniaMapper.AddCage(cage.getId(), glassid, width, height, 1, glasstype, 0, thickness,
                        glassfilms.getFilms(), glassfilms.getFlowcard(), glassfilms.getMateid(),glassfilms.getTier());
                        glassfilms.getFilms(), glassfilms.getFlowcard(), glassfilms.getMateid(), glassfilms.getTier());
                Mestast(glassid, 1001, cage.getId(), 1, "MESID1", 1);
                System.out.println("任务发送玻璃id:" + glassid + "起始位置:" + 1001 + "格子号:" + cage.getId() + "启动:" + 1);
                albaniaMapper.UpdateStorage(width, height, cage.getId());
@@ -72,7 +72,8 @@
            }
        }
        // 增加任务记录
        albaniaMapper.Inserttask(0, 0, 1001, cage.getId(), glassid, glasstype, flowcard, glassfilms.getMateid(), glassfilms.getTier());
        albaniaMapper.Inserttask(0, 0, 1001, cage.getId(), glassid, glasstype, flowcard, glassfilms.getMateid(),
                glassfilms.getTier());
        albaniaMapper.UpdateQueueState(glassid);
        return (200);
@@ -81,50 +82,51 @@
    // 补充出片
    public Short mateOut() {
        double carwidth = -300;
        List<StorageTask> glassmate = albaniaMapper.SelectOutTask();
        String type=glassmate.get(0).getTaskType();
        String type = glassmate.get(0).getTaskType();
        if (glassmate.size() == 0) {
            return (400);
        } else {
            for (int i = 0; i < glassmate.size(); i++) {
                GlassInfo glass = albaniaMapper.SelectGlassInfo(glassmate.get(i).getGlasstype());
                carwidth = carwidth + glass.getWidth() + 300;
                if (carwidth >= 4300&&type!=glassmate.get(i).getTaskType()) {
                if (carwidth >= 4300 && type != glassmate.get(i).getTaskType()) {
                    S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLC").getAddress(), (short) 1);// 出片任务启动
                    MestoPlc();
                    return (200);
                } else {
                    //增加一条任务记录
                    // 增加一条任务记录
                    albaniaMapper.Inserttask(1, 0, Integer.parseInt(glassmate.get(i).getShelfRack()), 2001,
                            glassmate.get(i).getGlassId(), glassmate.get(i).getGlasstype(),
                            glassmate.get(i).getFlowcard(), glassmate.get(i).getMateid(), glassmate.get(i).geTier());
                    //完成出片队列的任务
                    // 完成出片队列的任务
                    albaniaMapper.UpdateOutTask(glassmate.get(i).getId());
                    //发送plc任务
                    // 发送plc任务
                    Mestast(glassmate.get(i).getGlassId(),
                            Integer.parseInt(glassmate.get(i).getShelfRack()), 2001, 0, "MESID" + (i + 1),i + 1);
                    System.out.println("发送出片队列配片任务:"+glassmate.get(i).getShelfRack());
                            Integer.parseInt(glassmate.get(i).getShelfRack()), 2001, 0, "MESID" + (i + 1), i + 1);
                    System.out.println("发送出片队列配片任务:" + glassmate.get(i).getShelfRack());
                }
            }
            // 本次配片完成发送启动命令
            // S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLC").getAddress(), (short) 1);// 出片任务启动
              while (true) {
            String currentValue = plcmes.getPlcParameter("MESToPLC").getValue();
            // 检查 MESToPLC 的值是否为 0
            if (currentValue.equals("1")) {
              System.out.println("发送启动字现在为1,停止循环写入");
              break; // 退出循环
            // S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLC").getAddress(),
            // (short) 1);// 出片任务启动
            while (true) {
                String currentValue = plcmes.getPlcParameter("MESToPLC").getValue();
                // 检查 MESToPLC 的值是否为 0
                if (currentValue.equals("1")) {
                    System.out.println("发送启动字现在为1,停止循环写入");
                    break; // 退出循环
                }
                // 如果不为 1,继续写入
                S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLC").getAddress(), (short) 1);// 任务发送字
                System.out.println("继续写入 MESToPLC,当前值:" + currentValue);
                try {
                    Thread.sleep(100); // 例如每秒检查一次
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            // 如果不为 1,继续写入
            S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLC").getAddress(),(short) 1);// 任务发送字
            System.out.println("继续写入 MESToPLC,当前值:" + currentValue);
            try {
                Thread.sleep(100); // 例如每秒检查一次
              } catch (InterruptedException e) {
                e.printStackTrace();
              }
          }
            MestoPlc();
        }
@@ -139,130 +141,119 @@
        int glassend = 0;
        double carwidth = -300;
        double width = 0;
        for (int i = 1; i <= 7; i++) {
            method = albaniaMapper.SelectMethod(line);
            if (method == null) {
        method = albaniaMapper.SelectMethod(line);
        if (method == null) {
            return (400);
        }
        // 如果不是直通模式只出有完整配片的流程卡
        if (method.getMethod() == 0) {
            // glassmate= albaniaMapper.SelectOutGlass(1);
            // 判断有数量的配片id
            List<GlassInfo> peipianid = albaniaMapper.SelectOutGlass3(method.getFlowcard());
            if (peipianid.size() == 0) {
                System.out.println("peipianid:" + peipianid);
                return (400);
            }
            // 如果不是直通模式只出有完整配片的流程卡
            if (method.getMethod() == 0) {
                // glassmate= albaniaMapper.SelectOutGlass(1);
                // 判断有数量的配片id
                List<GlassInfo> peipianid = albaniaMapper.SelectOutGlass3(method.getFlowcard());
                if (peipianid.size() == 0) {
                    System.out.println("peipianid:" + peipianid);
                    return (400);
                } else {
                    for (int j = 0; j < peipianid.size(); j++) {
                        // 判断配片宽度是否够上大车
                        // GlassInfo glasswidth =
                        // albaniaMapper.SelectOutGlass6(peipianid.get(j).getFlowcard(),peipianid.get(j).getMateid());
                        // if (glasswidth.getWidth() <= 4300) {
                        // 是否有足够的库存数量
                        List<String> peipiancage = albaniaMapper.SelectOutGlass4(peipianid.get(j).getFlowcard(),
            } else {
                for (int j = 0; j < peipianid.size(); j++) {
                    // 判断配片宽度是否够上大车
                    // GlassInfo glasswidth =
                    // albaniaMapper.SelectOutGlass6(peipianid.get(j).getFlowcard(),peipianid.get(j).getMateid());
                    // if (glasswidth.getWidth() <= 4300) {
                    // 是否有足够的库存数量
                    List<String> peipiancage = albaniaMapper.SelectOutGlass4(peipianid.get(j).getFlowcard(),
                            peipianid.get(j).getMateid());
                    // 是否有足够的可出片数量
                    List<String> peipiancage2 = albaniaMapper.SelectOutGlass8(peipianid.get(j).getFlowcard(),
                            peipianid.get(j).getMateid());
                    // System.out.println("peipiancage:"+peipiancage+peipianid.get(j).getMateid());
                    // System.out.println("peipiancage2:"+peipiancage2);
                    if (!peipiancage.contains("不足")) {
                        List<GlassInfo> chupian = albaniaMapper.SelectOutGlass7(peipianid.get(j).getFlowcard(),
                                peipianid.get(j).getMateid());
                        // 是否有足够的可出片数量
                        List<String> peipiancage2 = albaniaMapper.SelectOutGlass8(peipianid.get(j).getFlowcard(),
                                peipianid.get(j).getMateid());
                        // System.out.println("peipiancage:"+peipiancage+peipianid.get(j).getMateid());
                        // System.out.println("peipiancage2:"+peipiancage2);
                        if (!peipiancage.contains("不足")) {
                            List<GlassInfo> chupian = albaniaMapper.SelectOutGlass7(peipianid.get(j).getFlowcard(),
                                    peipianid.get(j).getMateid());
                            for (int k = 0; k < chupian.size(); k++) {
                                glass = albaniaMapper.SelectCageGlass(chupian.get(k).getGlasstype());
                                carwidth = carwidth + glass.getGlassWidth() + 300;
                                if (carwidth <= 4300) {
                                    // 发送配片数据
                                    Mestast(chupian.get(k).getGlassid(), glass.getId(), 2001, 0, "MESID" + (k + 1),
                                            k + 1);
                                    albaniaMapper.AddFinishNumber(chupian.get(k).getFlowcard(),
                                            chupian.get(k).getMateid(), chupian.get(k).getTier());
                                    storageCageService.UpdateStroageCageByCell(glass.getId(), -1);// 玻璃数量-1
                                    albaniaMapper.Inserttask(1, 0, glass.getId(), 2001, chupian.get(k).getGlassid(),
                                            chupian.get(k).getGlasstype(), chupian.get(k).getFlowcard(),
                                            chupian.get(k).getMateid(), chupian.get(k).getTier());
                                } else {
                                    albaniaMapper.AddFinishNumber(chupian.get(k).getFlowcard(),
                                            chupian.get(k).getMateid(), chupian.get(k).getTier());
                                    storageCageService.UpdateStroageCageByCell(glass.getId(), -1);// 玻璃数量-1
                                    //增加出片队列的任务
                                    albaniaMapper.InsertOutTask(1, 0, glass.getId(), 2001, chupian.get(k).getGlassid(),
                                            chupian.get(k).getGlasstype(), chupian.get(k).getFlowcard(),
                                            chupian.get(k).getMateid(), chupian.get(k).getTier());
                                }
                        for (int k = 0; k < chupian.size(); k++) {
                            glass = albaniaMapper.SelectCageGlass(chupian.get(k).getGlasstype());
                            carwidth = carwidth + glass.getGlassWidth() + 300;
                            if (carwidth <= 4300) {
                                // 发送配片数据
                                Mestast(chupian.get(k).getGlassid(), glass.getId(), 2001, 0, "MESID" + (k + 1),
                                        k + 1);
                                albaniaMapper.AddFinishNumber(chupian.get(k).getFlowcard(),
                                        chupian.get(k).getMateid(), chupian.get(k).getTier());
                                storageCageService.UpdateStroageCageByCell(glass.getId(), -1);// 玻璃数量-1
                                albaniaMapper.Inserttask(1, 0, glass.getId(), 2001, chupian.get(k).getGlassid(),
                                        chupian.get(k).getGlasstype(), chupian.get(k).getFlowcard(),
                                        chupian.get(k).getMateid(), chupian.get(k).getTier());
                            } else {
                                albaniaMapper.AddFinishNumber(chupian.get(k).getFlowcard(),
                                        chupian.get(k).getMateid(), chupian.get(k).getTier());
                                storageCageService.UpdateStroageCageByCell(glass.getId(), -1);// 玻璃数量-1
                                // 增加出片队列的任务
                                albaniaMapper.InsertOutTask(1, 0, glass.getId(), 2001, chupian.get(k).getGlassid(),
                                        chupian.get(k).getGlasstype(), chupian.get(k).getFlowcard(),
                                        chupian.get(k).getMateid(), chupian.get(k).getTier());
                            }
                            // 本次配片完成发送启动命令
                            // S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLC").getAddress(),(short) 1);// 出片任务启动
                            MestoPlc();
                            return (200);// 结束
                        }
                        // }
                        // else {
                        // continue;
                        // }
                    }
                    System.out.println("未有完整配片");
                    return (400);
                }
            } else {
                // 直通模式时按顺序直出
                // glassmate = albaniaMapper.SelectOutGlass(1);
                glassmate = albaniaMapper.SelectOutGlass2(1);
                System.out.println("glassmate:"+glassmate);
                // // 获取直通模式最后一块
                // glassend = albaniaMapper.SelectOutGlassend(1);
            }
            System.err.println("出片:" + glassmate);
            if (glassmate == null && i > 1) {
                // 本次配片完成发送启动命令
                // 出片任务启动
                MestoPlc();
                System.out.println("出完任务:1,任务状态:0,起始:" + glass.getId() + ",目标" + "2001");
                return (200);// 结束
            }
            if (glassmate == null) {
                // 未领取任务
                System.out.println("未领取任务:" + i);
                glassmate = albaniaMapper.SelectOutGlass2(1);
                if(glassmate==null){
                    System.out.println("glassmate空");
                    return (400);
                }
            } else {
                glass = albaniaMapper.SelectCageGlass(glassmate.getGlasstype());
                System.out.println("glassmate:" + glassmate + "glass:" + glass);
                if (glass != null) {
                    // 发送任务之前判断车上的剩余宽度是否大于此玻璃
                    width = width + glassmate.getWidth() + 300;
                    // 大于车上空余宽度时提前发送出片启动
                    if (width > 4300) {
                        // 本次配片完成发送启动命令
                        // S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLC").getAddress(),(short)
                        // 1);// 出片任务启动
                        MestoPlc();
                        return (200);// 结束
                    }
                    // 发送配片数据
                    Mestast(glass.getGlassId(), glass.getId(), 2001, 0, "MESID" + i, i);
                    albaniaMapper.AddFinishNumber(glassmate.getFlowcard(), glassmate.getMateid(), glassmate.getTier());
                    storageCageService.UpdateStroageCageByCell(glass.getId(), -1);// 玻璃数量-1
                    albaniaMapper.Inserttask(1, 0, glass.getId(), 2001, glassmate.getGlassid(),
                            glassmate.getGlasstype(), glass.getFlowcard(), glassmate.getMateid(), glassmate.getTier());
                    // if (glassmate.getTier() == glassmate.getId() || glassmate.getTier() ==
                    // glassend|| method.getMethod() == 1) {// 当配片数量等于成品小片总片数时
                    // // 本次配片完成发送启动命令
                    // S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLC").getAddress(),
                    // (short) 1);// 出片任务启动
                    // System.out.println("任务类型:1,任务状态:0,起始:" + glass.getId() + ",目标" + "2001");
                    // return (200);// 结束
                    // }
                    // else {
                    // continue;
                    // }
                }
                System.out.println("未有完整配片");
                return (400);
            }
        } else {
            for (int i = 1; i <= 7; i++) {
                // 直通模式时按顺序直出
                // glassmate = albaniaMapper.SelectOutGlass(1);
                glassmate = albaniaMapper.SelectOutGlass2();
                System.err.println("出片:" + glassmate);
                if (glassmate == null && i > 1) {
                    // 本次配片完成发送启动命令
                    // 出片任务启动
                    MestoPlc();
                    System.out.println("出完任务:1,任务状态:0,起始:" + glass.getId() + ",目标" + "2001");
                    return (200);// 结束
                }
                if (glassmate == null) {
                    // 未领取任务
                    System.out.println("未领取任务:" + i);
                    return (400);
                } else {
                    return (400);// 结束
                }
                    glass = albaniaMapper.SelectCageGlass(glassmate.getGlasstype());
                    System.out.println("出片glass:" + glass);
                    if (glass != null) {
                        // 发送任务之前判断车上的剩余宽度是否大于此玻璃
                        width = width + glassmate.getWidth() + 300;
                        // 大于车上空余宽度时提前发送出片启动
                        if (width > 4300) {
                            // 本次配片完成发送启动命令
                            MestoPlc();
                            return (200);// 结束
                        }
                        // 发送配片数据
                        Mestast(glass.getGlassId(), glass.getId(), 2001, 0, "MESID" + i, i);
                        albaniaMapper.AddFinishNumber(glassmate.getFlowcard(), glassmate.getMateid(),
                                glassmate.getTier());
                        storageCageService.UpdateStroageCageByCell(glass.getId(), -1);// 玻璃数量-1
                        albaniaMapper.Inserttask(1, 0, glass.getId(), 2001, glassmate.getGlassid(),
                                glassmate.getGlasstype(), glass.getFlowcard(), glassmate.getMateid(),
                                glassmate.getTier());
                    } else {
                        return (400);// 结束
                    }
                }
            }
        }
        return (200);// 结束
@@ -326,7 +317,8 @@
        S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLCTarget" + i).getAddress(),
                (short) MESToPLCTarget1);// 目标位置
        if (MESToPLC != 0) {
            // S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLC").getAddress(), (short) MESToPLC);// mes理片任务类型
            // S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLC").getAddress(),
            // (short) MESToPLC);// mes理片任务类型
            MestoPlc();
        }
    }
@@ -343,18 +335,18 @@
            String currentValue = plcmes.getPlcParameter("MESToPLC").getValue();
            // 检查 MESToPLC 的值是否为 0
            if (currentValue.equals("1")) {
              System.out.println("发送启动字现在为1,停止循环写入");
              break; // 退出循环
                System.out.println("发送启动字现在为1,停止循环写入");
                break; // 退出循环
            }
            // 如果不为 1,继续写入
            S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLC").getAddress(),(short) 1);// 任务发送字
            S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLC").getAddress(), (short) 1);// 任务发送字
            System.out.println("继续写入 MESToPLC,当前值:" + currentValue);
            try {
                Thread.sleep(100); // 例如每秒检查一次
              } catch (InterruptedException e) {
            } catch (InterruptedException e) {
                e.printStackTrace();
              }
          }
            }
        }
    }
}
springboot-vue3/src/main/java/com/example/springboot/service/StorageCageService.java
@@ -228,7 +228,12 @@
    // 增加/减少理片笼玻璃数
    public Result UpdateStroageCageByCell(Integer cell, Integer num) {
        if (num == 0) {
            homeMapper.DeleteStroageCageByCell(cell);
            int sumcell=albaniaMapper.SelectOutTasksum(cell);
            if(sumcell==0){
                homeMapper.DeleteStroageCageByCell(cell);
            }
        }else if(num==-1){
            homeMapper.updateStroageCageByCell(cell, num);
        } else {
            homeMapper.updateStroageCageByCell(cell, num);
            homeMapper.UpdateStroageCageWidthByCell(cell);// 修改笼子宽度
@@ -237,6 +242,22 @@
        map.put("message", "200");
        return Result.success(map);
    }
     // 界面增加/减少理片笼玻璃数
     public Result UpdateStroageCageByCells(Integer cell, Integer num) {
        if (num == 0) {
            int sumcell=albaniaMapper.SelectOutTasksum(cell);
            if(sumcell==0){
                homeMapper.DeleteStroageCageByCell(cell);
            }
        } else {
            homeMapper.updateStroageCageByCell(cell, num);
            homeMapper.UpdateStroageCageWidthByCell(cell);// 修改笼子宽度
        }
        Map<String, Object> map = new HashMap<>();
        map.put("message", "200");
        return Result.success(map);
    }
    // 指定格子出片
    public Result AddOutGlass(Integer cell, Integer glasstype) {
@@ -304,6 +325,13 @@
    // 手动结束任务
    public Result TerminateTask(int id) {
        PlcParameterObject plcmes = PLCAutoMes.PlcMesObject;
          // 清除任务地址
          for (int i = 1; i < 7; i++) {
            S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLCStart" + i).getAddress(), (short) 0);// 清除任务地址
            S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLCTarget" + i).getAddress(), (short) 0);// 清除任务地址
          }
          System.out.println("结束任务地址");
        for (int i = 1; i < 7; i++) {
            int taskcont = albaniaMapper.SelectTaskcount(); // 正在进行的任务数量
            System.out.println("任务数量:" + taskcont);
@@ -333,6 +361,13 @@
    // 手动完成任务
    public Result FinishTask() {
        PlcParameterObject plcmes = PLCAutoMes.PlcMesObject;
          // 清除任务地址
          for (int i = 1; i < 7; i++) {
            S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLCStart" + i).getAddress(), (short) 0);// 清除任务地址
            S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLCTarget" + i).getAddress(), (short) 0);// 清除任务地址
          }
          System.out.println("结束任务地址");
        for (int i = 1; i < 7; i++) {
            int taskcont = albaniaMapper.SelectTaskcount(); // 正在进行的任务数量
            System.out.println("任务数量:" + taskcont);
@@ -356,6 +391,7 @@
                // storageTask.geTier());// 添加出片完成数量
            }
        }
        Map<String, Object> map = new HashMap<>();
        map.put("message", "200");
@@ -405,7 +441,7 @@
    // 添加玻璃到格子内
    public Result StorageCageAddGlass(String cell, GlassInfo glassInfo) {
        homeMapper.StorageCageAddGlass(cell, glassInfo);
        UpdateStroageCageByCell(Integer.parseInt(cell), 1);
        UpdateStroageCageByCells(Integer.parseInt(cell), 1);
        Map<String, Object> map = new HashMap<>();
        map.put("message", "200");
        return Result.success(map);
@@ -512,7 +548,7 @@
        String A02Mes = plcmes.getPlcParameter("MESToGaStatus").getValue();
        Map<String, Object> map = new HashMap<>();
        // 移除
        if ("1".equals(A02Plc)||"2".equals(A02Plc)|"1".equals(A02Mes)) {
        if ("1".equals(A02Plc)||"2".equals(A02Plc)||"1".equals(A02Mes)) {
            Queue queue = QueueMapper.selectLastQueue3();
            if (queue != null) {
                // 减少匹配次数
@@ -558,7 +594,6 @@
    // 删除出片队列
    public Result DeleteOutTask(Integer id) {
        int cell = homeMapper.SelectOutTaskId(id);
        UpdateStroageCageByCell(cell, 1);// 玻璃数量+1
        homeMapper.DeleteOutTask(id);
@@ -569,12 +604,17 @@
    // 删除工程
    public Result deleteTasks(Map num) {
        String flowcard = (String) num.get("num");
        int aa = homeMapper.deleteFlowcard(flowcard.trim());
        homeMapper.deleteGlassinfo(flowcard.trim());
        System.out.println(flowcard);
        Map<String, Object> map = new HashMap<>();
        map.put("message", flowcard.trim());
        String flowcard = (String) num.get("num");
        int cagenum=homeMapper.selectflowcardCage(flowcard);
        if(cagenum==0){
        int aa = homeMapper.deleteFlowcard(flowcard.trim());
        map.put("message","200");
        homeMapper.deleteGlassinfo(flowcard.trim());
        }else{
        map.put("message", "300");
        }
        System.out.println("删除工程"+flowcard);
        return Result.success(map);
    }
springboot-vue3/src/main/resources/config.properties
@@ -224,7 +224,7 @@
PlcInteractionState.MEStaskinformation2=DB106.52,DB106.58,DB103.128-141,DB103.142-155,DB103.156-169,DB103.184-197,DB103.212-225
#IO状态
 PlcIO.State=DB12.2.0,DB12.2.1,DB12.2.2,DB12.4.2,DB12.4.3,DB12.4.4,DB12.4.5,DB12.4.6,DB12.4.7,DB12.5.0,DB12.5.1,DB12.5.2,DB12.5.3,DB12.5.4,DB12.5.5,DB12.8.2,DB12.8.3,DB12.8.4,DB12.8.5,DB12.8.6,DB12.8.7,DB12.9.0,DB12.9.1,DB12.9.2,DB12.9.3,DB12.9.4,DB12.9.7,DB12.10.6,DB12.10.7,DB12.11.0,DB12.12.0,DB12.12.1,DB12.12.2,DB12.12.3,DB12.12.4,DB12.12.5,DB12.14.0,DB12.14.1,DB12.14.2,DB12.14.3,DB12.14.4,DB12.14.5,DB12.14.6,DB12.14.7,DB12.15.0,DB12.15.1,DB12.16.0,DB12.16.1,DB12.16.2,DB12.18.6,DB12.18.7,DB12.19.0,DB12.20.0,DB12.20.1,DB12.20.2,DB12.20.3,DB12.20.4,DB12.20.5,DB12.22.0,DB12.22.1,DB12.22.2,DB12.22.3,DB12.22.4,DB12.22.5,DB12.22.6,DB12.22.7,DB12.23.0,DB12.23.1,DB12.24.0,DB12.24.1,DB12.24.2
 PlcIO.State=DB12.2.0,DB12.2.1,DB12.2.2,DB12.4.2,DB12.4.3,DB12.4.4,DB12.4.5,DB12.4.6,DB12.4.7,DB12.5.0,DB12.5.1,DB12.5.2,DB12.5.3,DB12.5.4,DB12.5.5,DB12.8.0,DB12.8.2,DB12.8.3,DB12.8.4,DB12.8.5,DB12.8.6,DB12.8.7,DB12.9.0,DB12.9.1,DB12.9.2,DB12.9.3,DB12.9.4,DB12.9.7,DB12.10.6,DB12.10.7,DB12.11,DB12.12,DB12.12.1,DB12.12.2,DB12.12.3,DB12.12.4,DB12.12.5,DB12.14,DB12.14.1,DB12.14.2,DB12.14.3,DB12.14.4,DB12.14.5,DB12.14.6,DB12.14.7,DB12.15,DB12.15.1,DB12.16,DB12.16.1,DB12.16.2,DB12.18.6,DB12.18.7,DB12.19,DB12.20,DB12.20.1,DB12.20.2,DB12.20.3,DB12.20.4,DB12.20.5,DB12.22,DB12.22.1,DB12.22.2,DB12.22.3,DB12.22.4,DB12.22.5,DB12.22.6,DB12.22.7,DB12.23,DB12.23.1,DB12.24,DB12.24.1,DB12.24.2
 #PlcIO.Name=Sr.Dec,Sr.LowE,Sr.OutPos,Sr.InToX,Sr.GaToXIn,Sr.DecToXOut,Sr.GaToY1,Sr.GaToY2,Sr.GaToY3,Sr.GaToY4,Sr.DecToY,Sr.GaToY,Sr.HomeToY,SQ.LimitSwitchTop,SQ.LimitSwitchBottom,Sr.Travellimitleft,Sr.PosToLeft,Sr.DecToLeft,Sr.DecToRight,Sr.PosToRight,Sr.TravellimitRight,SQ.LimitSwitch+,SQ.LimitSwitch-,Sr.HomeToTurn,SQ.LimitSwitchToTurnTop,SQ.LimitSwitchToTurnBottom,oilPump,Sr.Travellimitleft,Sr.TravellimitRight,Sr.Home,SQ.LimitSwitch+,SQ.LimitSwitch-,biBasPosBlowUp1,biBasPosBlowUp2,biBasPosBlowUp3,biBasPosBlowUp4,biBasPosGlassUp1,biBasPosGlassUp2,biWorkPosBlowUp1,biWorkPosBlowUp2,biWorkPosBlowUp3,biWorkPosBlowUp4,biWorkPosGlassUp1,biWorkPosGlassUp2,boWorkPosBlow,boWorkPosBlowUp,boWorkPosGlassUp,Sr.Travellimitleft,Sr.TravellimitRight,Sr.Home,SQ.LimitSwitch+,SQ.LimitSwitch-,biBasPosBlowUp1,biBasPosBlowUp2,biBasPosBlowUp3,biBasPosBlowUp4,biBasPosGlassUp1,biBasPosGlassUp2,biWorkPosBlowUp1,biWorkPosBlowUp2,biWorkPosBlowUp3,biWorkPosBlowUp4,biWorkPosGlassUp1,biWorkPosGlassUp2,boWorkPosBlow,boWorkPosBlowUp,boWorkPosGlassUp,Red,Yellow,Green,FootSwitch
PlcIO.Name=Sr.Low, Sr.OutDec, Sr.OutPos, Sr.XCheck, Sr.XDec, Sr.XPos, Sr.H1, Sr.H2, Sr.H3, Sr.H4, Sr.YChecK, Sr.YDec, Sr.travellimitTop, Sr.travellimitBottom, Sr.YZero, Sr.Travellimitleft, Sr.PosToLeft, Sr.DecToLeft, Sr.DecToRight, Sr.PosToRight, Sr.TravellimitRight, SQ.LimitSwitch+, SQ.LimitSwitch-, Sr.HomeToTurn, SQ.LimitSwitchToTurnTop, SQ.LimitSwitchToTurnBottom, oilPump, Sr.InOrigin, SQ.LimitSwitch+, SQ.LimitSwitch-, biBasPosBlowUp1, biBasPosBlowUp2, biBasPosBlowUp3, biBasPosBlowUp4, biBasPosGlassUp1, biBasPosGlassUp2, biWorkBlowSr1, biWorkBlowSr2, biWorkBlowSr3, biWorkBlowSr4, biWorkPosBlowUp1, biWorkPosBlowUp2, biWorkPosBlowUp3, biWorkPosBlowUp4, biWorkPosGlassUp1, biWorkPosGlassUp2, boWorkPosBlow, boWorkPosBlowUp, boWorkPosGlassUp
PlcIo.Name1=LOW-E检测光电, 出口减速光电, 出口到位光电, X轴寻边, X轴出口减速, X轴出口到位, Y轴高度感应1, Y轴高度感应2, Y轴高度感应3, Y轴高度感应4, Y轴寻边, Y轴高度减速, 上极限, 下极限, Y轴原点, 左极限, 左到位, 左减速, 右减速, 右到位, 右极限, 大车正极限, 大车负极限, 翻转原点, 翻转上极限, 翻转下极限, 油泵输出, 小车原点, 小车正极限, 小车负极限, 吹气抬起气缸原点1, 吹气抬起气缸原点2, 吹气抬起气缸原点3, 吹气抬起气缸原点4, 玻璃抬起气缸原点1, 玻璃抬起气缸原点2, 吹气感应1, 吹气感应2, 吹气感应3, 吹气感应4, 吹气抬起气缸动点1, 吹气抬起气缸动点2, 吹气抬起气缸动点3, 吹气抬起气缸动点4, 玻璃抬起气缸动点1, 玻璃抬起气缸动点2, 吹气输出, 吹气抬起输出, 玻璃抬起输出