封装初始化方法为工具类,方便调用, getPlcParameterValues getPlcBitValues 方法codeid 按照传入参数的顺序遍历 来获取值
| | |
| | | |
| | | } |
| | | }, |
| | | { |
| | | "name": "最高速度", |
| | | "read": 33, |
| | | "sending": 0, |
| | | "type": "0", |
| | | "unit": "m/min", |
| | | "count":3, |
| | | "value":0, |
| | | "min": 0, |
| | | "max": 60 |
| | | }, |
| | | |
| | | { |
| | | "name": "高速线速度", |
| | | "read": 11, |
| | |
| | | |
| | | } |
| | | }, |
| | | { |
| | | "name": "最高速度", |
| | | "read": 33, |
| | | "sending": 0, |
| | | "type": "0", |
| | | "unit": "m/min", |
| | | "count":3, |
| | | "value":0, |
| | | "min": 0, |
| | | "max": 60 |
| | | }, |
| | | |
| | | { |
| | | "name": "高速线速度", |
| | | "read": 11, |
| | |
| | | |
| | | } |
| | | }, |
| | | { |
| | | "name": "最高速度", |
| | | "read": 33, |
| | | "sending": 0, |
| | | "type": "0", |
| | | "unit": "m/min", |
| | | "count":3, |
| | | "value":0, |
| | | "min": 0, |
| | | "max": 60 |
| | | }, |
| | | |
| | | { |
| | | "name": "高速线速度", |
| | | "read": 11, |
| | |
| | | "value":"",
|
| | | "min":0,
|
| | | "max":9999
|
| | | },
|
| | | {
|
| | | "name": "出片车请求",
|
| | | "read": 22,
|
| | | "sending": 0,
|
| | | "unit": "mm",
|
| | | "type": "0",
|
| | | "value":"",
|
| | | "min":0,
|
| | | "max":9999
|
| | | }
|
| | |
|
| | |
|
| | |
| | |
|
| | | }
|
| | |
|
| | | for (let i = 0; i < jsonData2.length; i++) {
|
| | | let arr4 = jsonData2[i];
|
| | | for (let j = 0; j < arr4.length; j++) {
|
| | | let obj4 = arr4[j];
|
| | | if (obj4.button && (obj4.button.name.includes("启动") || obj4.button.name.includes("Start"))) {
|
| | | obj4.button.value = obj.qidong[0][i];
|
| | | // console.log(obj2.button.value)
|
| | | }
|
| | | }
|
| | | // for (let i = 0; i < jsonData2.length; i++) {
|
| | | // let arr4 = jsonData2[i];
|
| | | // for (let j = 0; j < arr4.length; j++) {
|
| | | // let obj4 = arr4[j];
|
| | | // if (obj4.button && (obj4.button.name.includes("启动") || obj4.button.name.includes("Start"))) {
|
| | | // obj4.button.value = obj.qidong[0][i];
|
| | | // // console.log(obj2.button.value)
|
| | | // }
|
| | | // }
|
| | |
|
| | |
|
| | | }
|
| | | // }
|
| | |
|
| | | // for (let i = 0; i < jsonData2.length; i++) {
|
| | | // let arr4 = jsonData2[i];
|
| | | // for (let j = 0; j < arr4.length; j++) {
|
| | | // let obj4 = arr4[j];
|
| | | // if (obj4.button && (obj4.button.name.includes("复位") || obj4.button.name.includes("Reast"))) {
|
| | | // obj4.button.value = obj.fuwei[0][i];
|
| | | // // console.log(obj2.button.value)
|
| | | // }
|
| | | // }
|
| | |
|
| | |
|
| | | // }
|
| | |
|
| | | // for (let i = 0; i < jsonData2.length; i++) {
|
| | | // let arr4 = jsonData2[i];
|
| | | // for (let j = 0; j < arr4.length; j++) {
|
| | | // let obj4 = arr4[j];
|
| | | // if (obj4.button && (obj4.button.name.includes("回零") || obj4.button.name.includes("Home"))) {
|
| | | // obj4.button.value = obj.huiling[0][i];
|
| | | // // console.log(obj2.button.value)
|
| | | // }
|
| | | // }
|
| | |
|
| | |
|
| | | // }
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | | for (let i = 2; i < jsonData2.length; i++) {
|
| | | let arr2 = jsonData2[i];
|
| | | for (let j = 2; j < arr2.length; j++) {
|
| | |
| | | }
|
| | |
|
| | | //启动
|
| | | for (let i = 0; i < jsonData2.length; i++) {
|
| | | let arr4 = jsonData2[i];
|
| | | for (let j = 0; j < arr4.length; j++) {
|
| | | let obj4 = arr4[j];
|
| | | if (obj4.button && (obj4.button.name.includes("启动") || obj4.button.name.includes("Start"))) {
|
| | | obj4.button.value = obj.qidong[0][i];
|
| | | // console.log(obj2.button.value)
|
| | | }
|
| | | }
|
| | | // for (let i = 0; i < jsonData2.length; i++) {
|
| | | // let arr4 = jsonData2[i];
|
| | | // for (let j = 0; j < arr4.length; j++) {
|
| | | // let obj4 = arr4[j];
|
| | | // if (obj4.button && (obj4.button.name.includes("启动") || obj4.button.name.includes("Start"))) {
|
| | | // obj4.button.value = obj.qidong[0][i];
|
| | | // // console.log(obj2.button.value)
|
| | | // }
|
| | | // }
|
| | |
|
| | |
|
| | | }
|
| | | // }
|
| | |
|
| | |
|
| | |
|
| | | // for (let i = 0; i < jsonData2.length; i++) {
|
| | | // let arr4 = jsonData2[i];
|
| | | // for (let j = 0; j < arr4.length; j++) {
|
| | | // let obj4 = arr4[j];
|
| | | // if (obj4.button && (obj4.button.name.includes("启动") || obj4.button.name.includes("Start"))) {
|
| | | // obj4.button.value = obj.qidong[0][i];
|
| | | // // console.log(obj2.button.value)
|
| | | // }
|
| | | // }
|
| | |
|
| | |
|
| | | // }
|
| | |
|
| | | // for (let i = 0; i < jsonData2.length; i++) {
|
| | | // let arr4 = jsonData2[i];
|
| | | // for (let j = 0; j < arr4.length; j++) {
|
| | | // let obj4 = arr4[j];
|
| | | // if (obj4.button && (obj4.button.name.includes("复位") || obj4.button.name.includes("Reast"))) {
|
| | | // obj4.button.value = obj.fuwei[0][i];
|
| | | // // console.log(obj2.button.value)
|
| | | // }
|
| | | // }
|
| | |
|
| | |
|
| | | // }
|
| | |
|
| | | // for (let i = 0; i < jsonData2.length; i++) {
|
| | | // let arr4 = jsonData2[i];
|
| | | // for (let j = 0; j < arr4.length; j++) {
|
| | | // let obj4 = arr4[j];
|
| | | // if (obj4.button && (obj4.button.name.includes("回零") || obj4.button.name.includes("Home"))) {
|
| | | // obj4.button.value = obj.huiling[0][i];
|
| | | // // console.log(obj2.button.value)
|
| | | // }
|
| | | // }
|
| | |
|
| | |
|
| | | // }
|
| | |
|
| | |
|
| | |
|
| | |
|
| | | //改变未回零文字
|
| | | for (let i = 0; i < jsonData2.length; i++) {
|
| | |
| | | import LanguageMixin from '../../lang/LanguageMixin' |
| | | import data from '../../configuration/parameter1' |
| | | import { throttle } from 'lodash'; |
| | | // import { |
| | | // SelectPermissionByUserName, currentUsername |
| | | // } from "../../api/home"; |
| | | let socket; |
| | | export default { |
| | | name: "Parameter1", |
| | |
| | | } |
| | | |
| | | // 复位更新 |
| | | for (let i = 0; i < jsonData2.length; i++) { |
| | | let arr = jsonData2[i]; |
| | | for (let j = 0; j < arr.length; j++) { |
| | | let obj2 = arr[j]; |
| | | if ( |
| | | obj2.button && |
| | | (obj2.button.name === "复位" || obj2.button.name === "Reset") |
| | | ) { |
| | | obj2.button.value = obj.fuwei[0][i]; |
| | | // console.log(obj2.button.value) |
| | | } |
| | | } |
| | | } |
| | | // for (let i = 0; i < jsonData2.length; i++) { |
| | | // let arr = jsonData2[i]; |
| | | // for (let j = 0; j < arr.length; j++) { |
| | | // let obj2 = arr[j]; |
| | | // if ( |
| | | // obj2.button && |
| | | // (obj2.button.name === "复位" || obj2.button.name === "Reset") |
| | | // ) { |
| | | // obj2.button.value = obj.fuwei[0][i]; |
| | | // // console.log(obj2.button.value) |
| | | // } |
| | | // } |
| | | // } |
| | | |
| | | |
| | | for (let i = 0; i < jsonData2.length; i++) { |
| | | let arr = jsonData2[i]; |
| | | for (let j = 0; j < arr.length; j++) { |
| | | let obj2 = arr[j]; |
| | | if ( |
| | | obj2.button && |
| | | (obj2.button.name === "回零" || obj2.button.name === "Home") |
| | | ) { |
| | | obj2.button.value = obj.huiling[0][i]; |
| | | // console.log(obj2.button.value) |
| | | } |
| | | } |
| | | } |
| | | // for (let i = 0; i < jsonData2.length; i++) { |
| | | // let arr = jsonData2[i]; |
| | | // for (let j = 0; j < arr.length; j++) { |
| | | // let obj2 = arr[j]; |
| | | // if ( |
| | | // obj2.button && |
| | | // (obj2.button.name === "回零" || obj2.button.name === "Home") |
| | | // ) { |
| | | // obj2.button.value = obj.huiling[0][i]; |
| | | // // console.log(obj2.button.value) |
| | | // } |
| | | // } |
| | | // } |
| | | |
| | | |
| | | |
| | |
| | | import java.io.IOException;
|
| | | import java.util.ArrayList;
|
| | | import java.util.Iterator;
|
| | | import java.util.LinkedHashMap;
|
| | | import java.util.List;
|
| | |
|
| | | public class ExcelToJsonConverter {
|
| | |
|
| | | public static void main(String[] args) {
|
| | | String excelFilePath = "JsonFile/state.xlsx";
|
| | | String sheetName = "Sheet1";
|
| | |
| | | try (Workbook workbook = new HSSFWorkbook(new FileInputStream(excelFilePath))) {
|
| | | Sheet sheet = workbook.getSheet(sheetName);
|
| | |
|
| | | List<JSONObject> jsonList = new ArrayList<>();
|
| | | List<LinkedHashMap<String, Object>> jsonList = new ArrayList<>();
|
| | |
|
| | | Iterator<Row> rowIterator = sheet.iterator();
|
| | | // Skip the header row
|
| | | if (rowIterator.hasNext()) {
|
| | | rowIterator.next();
|
| | | }
|
| | |
|
| | | int plcAddressLength = 0; // 记录所有 addressLenght 的和
|
| | |
|
| | | while (rowIterator.hasNext()) {
|
| | | Row row = rowIterator.next();
|
| | |
| | |
|
| | | String addressIndex = extractAddressIndex(address);
|
| | |
|
| | | JSONObject jsonObject = new JSONObject();
|
| | | LinkedHashMap<String, Object> jsonObject = new LinkedHashMap<>();
|
| | | jsonObject.put("codeId", name);
|
| | | jsonObject.put("addressIndex", addressIndex);
|
| | |
|
| | | int addressLength = 0;
|
| | | if (address.contains("~")) {
|
| | | addressLength = 14;
|
| | | } else {
|
| | | addressLength = 2;
|
| | | }
|
| | | jsonObject.put("addressLenght", String.valueOf(addressLength));
|
| | |
|
| | | jsonObject.put("unit", unit);
|
| | |
|
| | | plcAddressLength += addressLength;
|
| | |
|
| | | jsonList.add(jsonObject);
|
| | | }
|
| | |
|
| | | LinkedHashMap<String, Object> resultObject = new LinkedHashMap<>();
|
| | | resultObject.put("plcAddressBegin", "DB100.0");
|
| | | resultObject.put("plcAddressLenght", String.valueOf(plcAddressLength));
|
| | | resultObject.put("dataType", "word");
|
| | | resultObject.put("parameteInfor", jsonList);
|
| | |
|
| | | Gson gson = new Gson();
|
| | | String jsonOutput = gson.toJson(jsonList);
|
| | | String jsonOutput = gson.toJson(resultObject);
|
| | |
|
| | | try (FileWriter fileWriter = new FileWriter(outputFilePath)) {
|
| | | fileWriter.write(jsonOutput);
|
| | |
| | | }
|
| | | return "";
|
| | | }
|
| | |
|
| | |
|
| | | } |
| | |
| | | import java.io.FileReader;
|
| | | import java.io.IOException;
|
| | | import java.util.ArrayList;
|
| | | import java.util.Arrays;
|
| | | import java.util.List;
|
| | |
|
| | | public class InitUtil {
|
| | |
| | | String codeid = parameterObj.getStr("codeId");
|
| | | plcParameterInfo.setCodeId(codeid);
|
| | | plcParameterInfo.setAddressIndex(Integer.valueOf(parameterObj.getStr("addressIndex")));
|
| | | plcParameterInfo.setRatio(Integer.valueOf(parameterObj.getStr("ratio")));
|
| | | //plcParameterInfo.setRatio(Integer.valueOf(parameterObj.getStr("ratio")));
|
| | | plcParameterInfo.setAddressLength(Integer.valueOf(parameterObj.getStr("addressLenght")));
|
| | | plcParameterInfo.setUnit(parameterObj.getStr("unit"));
|
| | | plcParameterObject.addPlcParameter(plcParameterInfo);
|
| | | }
|
| | | // byte[] getplcvlues = {0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02,0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02,0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02};
|
| | | byte[] getplcvlues = S7control.getinstance().ReadByte(plcParameterObject.getPlcAddressBegin(), plcParameterObject.getPlcAddressLength());
|
| | | plcParameterObject.setPlcParameterList(getplcvlues);
|
| | |
|
| | | return plcParameterObject;
|
| | | } catch (IOException e) {
|
| | | e.printStackTrace();
|
| | | }
|
| | | return null;
|
| | | }
|
| | |
|
| | |
|
| | | public static PlcBitObject initbit(String jsonFilePath) {
|
| | | PlcBitObject plcBitObject = new PlcBitObject();
|
| | |
| | | } catch (IOException e) {
|
| | | e.printStackTrace();
|
| | | }
|
| | | //Boolean[] values1 = { false, true, true, true, false, false, true, false,
|
| | | // false, true ,true };
|
| | | // List<Boolean> getplcvlues = new ArrayList<>(Arrays.asList(values1));
|
| | |
|
| | | // List<Boolean> getplcvlues = S7control.getinstance().ReadBits(plcBitObject.getPlcAddressBegin(), plcBitObject.getPlcAddressLength());
|
| | | // plcBitObject.setPlcBitList(getplcvlues);
|
| | | return plcBitObject;
|
| | | }
|
| | |
|
| | |
|
| | | public static void readAndUpdateBitValues(PlcBitObject plcBitObject) {
|
| | |
|
| | | // Boolean[] values1 = { false, true, true, true, false, false, true, false,
|
| | | // false, true ,true };
|
| | | // List<Boolean> getplcvlues = new ArrayList<>(Arrays.asList(values1));
|
| | | List<Boolean> getplcvlues = S7control.getinstance().ReadBits(plcBitObject.getPlcAddressBegin(), plcBitObject.getPlcAddressLength());
|
| | | plcBitObject.setPlcBitList(getplcvlues);
|
| | | }
|
| | |
|
| | |
|
| | | public static void readAndUpdateWordValues(PlcParameterObject plcParameterObject) {
|
| | |
|
| | | // byte[] getplcvlues = {0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02,0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02,0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02};
|
| | | byte[] getplcvlues = S7control.getinstance().ReadByte(plcParameterObject.getPlcAddressBegin(), plcParameterObject.getPlcAddressLength());
|
| | | plcParameterObject.setPlcParameterList(getplcvlues);
|
| | | }
|
| | |
|
| | |
|
| | |
|
| | | }
|
| | |
| | | this.storageCageService = storageCageService; |
| | | this.plcParameterObject = new PlcParameterObject(); |
| | | this.plcBitObject = new PlcBitObject(); |
| | | // String jsonFilePath = "JsonFile/PlcParameter.json"; |
| | | // String jsonFilePath = "/JsonFile/PlcParameter.json"; |
| | | // InitUtil.initword(jsonFilePath); // 初始化 PlcParameterObject |
| | | // String jsonFilePath2 = "JsonFile/PlcSign.json"; |
| | | // String jsonFilePath2 = "/JsonFile/PlcSign.json"; |
| | | // InitUtil.initbit(jsonFilePath2); // 初始化 PlcSign |
| | | |
| | | |
| | |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | byte[] getplcvlues = S7control.getinstance().ReadByte(plcParameterObject.getPlcAddressBegin(), plcParameterObject.getPlcAddressLength()); |
| | | |
| | | //byte[] getplcvlues = {0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02}; |
| | | |
| | | plcParameterObject.setPlcParameterList(getplcvlues); |
| | | |
| | | |
| | | |
| | | List<String> addresses = new ArrayList<>(); |
| | | addresses.add("A01turnAngle1"); |
| | | addresses.add("A01turnAngle2"); |
| | | addresses.add("A01turnAngle3"); |
| | | addresses.add("A01turnAngle4"); |
| | | addresses.add("A02turnAngle2"); |
| | | addresses.add("A02turnAngle3"); |
| | | addresses.add("A02turnAngle4"); |
| | | addresses.add("Minimumglasslength"); |
| | | // List<String> addresses = new ArrayList<>(); |
| | | // addresses.add("A01turnAngle1"); |
| | | // addresses.add("A01turnAngle2"); |
| | | // addresses.add("A01turnAngle3"); |
| | | // addresses.add("A01turnAngle4"); |
| | | // addresses.add("A02turnAngle2"); |
| | | // addresses.add("A02turnAngle3"); |
| | | // addresses.add("A02turnAngle4"); |
| | | // addresses.add("Minimumglasslength"); |
| | | |
| | | |
| | | //Auto.addresses=DB100.0,DB100.2,DB100.4,DB100.6,DB100.26,DB100.28,DB100.30,DB100.32,DB100.34,DB100.36,DB100.38,DB100.40 |
| | |
| | | Autoaddresses.add("A01A02conveyorVelocity(AutoFAST)"); |
| | | Autoaddresses.add("A01A02conveyorVelocity(AutoSLOW)"); |
| | | Autoaddresses.add("B01B02conveyorVelocity(Manual)"); |
| | | |
| | | Autoaddresses.add("B01B02conveyorVelocity(Max)"); |
| | | Autoaddresses.add("B01B02conveyorVelocity(AutoFAST)"); |
| | | Autoaddresses.add("B01B02conveyorVelocity(AutoSLOW)"); |
| | |
| | | // new short[]{1,1, 1, 1, 1, 1, 2, 33, 2,3, 4, 5} |
| | | // new short[]{0,0, 0, 0, 0, 0, 0, 0, 0, 0} |
| | | //System.out.println(plcParameterObject.getPlcParameterValues(addresses)); |
| | | jsonObject.append("params", plcParameterObject.getPlcParameterValues(addresses)); |
| | | jsonObject.append("dache1", plcParameterObject.getPlcParameter("A01A02TRAVELPOSVelocityAUTO").getValue()); |
| | | jsonObject.append("xiaoche", plcParameterObject.getPlcParameter("B01B02TRAVELPOSVelocityAUTO").getValue()); |
| | | jsonObject.append("fanzhuan", plcParameterObject.getPlcParameter("A01A02TURNPOSVelocityAUTO").getValue()); |
| | | jsonObject.append("params2", plcParameterObject.getPlcParameterValues(Autoaddresses)); |
| | | jsonObject.append("fanzhuan2", plcParameterObject.getPlcParameter("A01A02TURNJOGVelocity").getValue()); |
| | | jsonObject.append("xiaoche2", plcParameterObject.getPlcParameter("B01B02TRAVELJOGVelocity").getValue()); |
| | | // jsonObject.append("params", plcParameterObject.getPlcParameterValues(addresses)); |
| | | // jsonObject.append("dache1", plcParameterObject.getPlcParameter("A01A02TRAVELPOSVelocityAUTO").getValue()); |
| | | // jsonObject.append("xiaoche", plcParameterObject.getPlcParameter("B01B02TRAVELPOSVelocityAUTO").getValue()); |
| | | // jsonObject.append("fanzhuan", plcParameterObject.getPlcParameter("A01A02TURNPOSVelocityAUTO").getValue()); |
| | | // jsonObject.append("params2", plcParameterObject.getPlcParameterValues(Autoaddresses)); |
| | | // jsonObject.append("fanzhuan2", plcParameterObject.getPlcParameter("A01A02TURNJOGVelocity").getValue()); |
| | | // jsonObject.append("xiaoche2", plcParameterObject.getPlcParameter("B01B02TRAVELJOGVelocity").getValue()); |
| | | |
| | | ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("AutomaticParameterSetting"); |
| | | // if (sendwServer != null) { |
New file |
| | |
| | | package com.example.springboot.component; |
| | | |
| | | import com.example.springboot.entity.device.PlcBitObject; |
| | | import com.example.springboot.entity.device.PlcParameterObject; |
| | | |
| | | import java.io.IOException; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | |
| | | import static com.example.springboot.component.InitUtil.readAndUpdateBitValues; |
| | | import static com.example.springboot.component.InitUtil.readAndUpdateWordValues; |
| | | |
| | | public class PLCAutomaticParameterSettingReview2 extends Thread { |
| | | |
| | | // 用于存储应用程序的配置信息 |
| | | private Configuration config; |
| | | private static InitUtil initUtil; |
| | | // 创建一个自定义的 S7 控制器消息处理器对象 |
| | | MessageHandler customS7Control = new MessageHandler(); |
| | | |
| | | // 单例实例 |
| | | private static PLCAutomaticParameterSettingReview2 instance; |
| | | |
| | | // 私有构造函数 |
| | | public PLCAutomaticParameterSettingReview2() throws IOException { |
| | | config = new Configuration("config.properties"); |
| | | initUtil = new InitUtil(); |
| | | } |
| | | |
| | | // 获取单例实例 |
| | | public static synchronized PLCAutomaticParameterSettingReview2 getInstance() throws IOException { |
| | | if (instance == null) { |
| | | instance = new PLCAutomaticParameterSettingReview2(); |
| | | } |
| | | return instance; |
| | | } |
| | | |
| | | @Override |
| | | public void run() { |
| | | while (this != null) { |
| | | try { |
| | | Thread.sleep(1000); |
| | | |
| | | } catch (InterruptedException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | String jsonFilePath = PLCAutomaticParameterSettingReview2.class.getResource("/JsonFile/PlcParameter.json").getPath(); |
| | | String jsonFilePath2 = PLCAutomaticParameterSettingReview2.class.getResource("/JsonFile/PlcSign.json").getPath(); |
| | | String jsonFilePath4 = PLCAutomaticParameterSettingReview2.class.getResource("/JsonFile/PlcState.json").getPath(); |
| | | //System.out.println(jsonFilePath4); |
| | | |
| | | |
| | | // 调用initword方法 |
| | | PlcParameterObject plcParameterObject = initUtil.initword(jsonFilePath); |
| | | PlcParameterObject plcStateObject = initUtil.initword(jsonFilePath4); |
| | | |
| | | // 调用initbit方法 |
| | | PlcBitObject plcBitObject = initUtil.initbit(jsonFilePath2); |
| | | readAndUpdateBitValues(plcBitObject); |
| | | readAndUpdateWordValues(plcParameterObject); |
| | | readAndUpdateWordValues(plcStateObject); |
| | | // int index = plcParameterObject.getPlcParameter("A01A02conveyorVelocity(Max)").getAddressIndex(); |
| | | // System.out.println(index); |
| | | // plcParameterObject.getPlcParameter("A01A02conveyorVelocity(Max)").getAddress(index); |
| | | // System.out.println(plcParameterObject.getPlcParameter("A01A02conveyorVelocity(Max)").getAddress(index)); |
| | | // S7control.getinstance().WriteWord(plcParameterObject.getPlcParameter("conveyorVelocity(AutoFAST)").getAddress(index), (short) 100); |
| | | List<String> addresses = new ArrayList<>(); |
| | | addresses.add("conveyorVelocity(AutoFAST)"); |
| | | addresses.add("A02ID"); |
| | | System.out.println(plcParameterObject.getPlcParameterValues(addresses)); |
| | | List<String> addresses2 = new ArrayList<>(); |
| | | addresses2.add("conveyorVelocity(AutoSLOW)"); |
| | | addresses2.add("D01.SRdec"); |
| | | |
| | | |
| | | |
| | | System.out.println(plcBitObject.getPlcBitValues(addresses2)); |
| | | |
| | | int index2 = plcBitObject.getPlcBit("DO1id").getAddressIndex(); |
| | | System.out.println(index2); |
| | | |
| | | plcBitObject.getPlcBit("DO1id").getAddress(index2); |
| | | System.out.println(plcBitObject.getPlcBit("DO1id").getAddress(index2)); |
| | | |
| | | |
| | | List<String> addresses3 = new ArrayList<>(); |
| | | addresses3.add("A02ID1"); |
| | | addresses3.add("A01CurrentGrid"); |
| | | System.out.println(plcStateObject.getPlcParameterValues(addresses3)); |
| | | } |
| | | } |
| | | } |
| | |
| | | } catch (InterruptedException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | // byte[] getplcvlues = S7control.getinstance().ReadByte(plcParameterObject.getPlcAddressBegin(), plcParameterObject.getPlcAddressLength()); |
| | | byte[] getplcvlues = S7control.getinstance().ReadByte(plcParameterObject.getPlcAddressBegin(), plcParameterObject.getPlcAddressLength()); |
| | | |
| | | byte[] getplcvlues = {0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02}; |
| | | //byte[] getplcvlues = {0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02}; |
| | | |
| | | plcParameterObject.setPlcParameterList(getplcvlues); |
| | | // int index = plcParameterObject.getPlcParameter("conveyorVelocity(AutoFAST)").getAddressIndex(); |
| | | |
| | | int index = plcParameterObject.getPlcParameter("A01ID").getAddressIndex(); |
| | | System.out.println(index); |
| | | plcParameterObject.getPlcParameter("A01ID").getAddress(index); |
| | | System.out.println(plcParameterObject.getPlcParameter("A01ID").getAddress(index)); |
| | | |
| | | // S7control.getinstance().WriteWord(plcParameterObject.getPlcParameter("conveyorVelocity(AutoFAST)").getAddress(index), (short) 100); |
| | | |
| | | List<String> addresses = new ArrayList<>(); |
| | | addresses.add("A01A02TURNPOSVelocityAUTO"); |
| | | |
| | | addresses.add("conveyorVelocity(AutoFAST)"); |
| | | addresses.add("A01ID"); |
| | | // addresses.add("conveyorVelocity(AutoSLOW)"); |
| | | // addresses.add("conveyorVelocity(Manual)"); |
| | | // addresses.add("A01A02TURNJOGVelocity"); |
| | | // addresses.add("A01A02TRAVELJOGVelocity"); |
| | | |
| | |
| | | |
| | | jsonObject.append("params", plcParameterObject.getPlcParameterValues(addresses)); |
| | | jsonObject.append("fanzhuan", plcParameterObject.getPlcParameter("conveyorVelocity(AutoFAST)").getValue()); |
| | | jsonObject.append("xiaoche", plcParameterObject.getPlcParameter("").getValue()); |
| | | // jsonObject.append("xiaoche", plcParameterObject.getPlcParameter("").getValue()); |
| | | |
| | | |
| | | ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("Parameter1"); |
| | | if (sendwServer != null) { |
| | |
| | | webserver.sendMessage(jsonObject.toString()); |
| | | |
| | | |
| | | |
| | | if (webserver != null) { |
| | | |
| | | List<String> messages = webserver.getMessages(); |
| | |
| | | FileInputStream fileInputStream; |
| | | try { |
| | | // 从文件中读取字节数据存入 fileInputStream |
| | | fileInputStream = new FileInputStream("D:/code/canadames/Alarm.json"); |
| | | fileInputStream = new FileInputStream("D:/canadames/Alarm.json"); |
| | | // 读取 fileInputStream 中字节并将其解码为字符 |
| | | InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "utf-8"); |
| | | // 提高读取效率,在 BufferedReader 内包装 InputStreamReader |
| | |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | // this.readValue(); |
| | | // String PlcAddress = this.name; |
| | | // Integer Plccount = this.count; |
| | | this.readValue(); |
| | | String PlcAddress = this.name; |
| | | Integer Plccount = this.count; |
| | | |
| | | // 根据地址读取PCL数据 |
| | | List<Boolean> plclist = S7control.getinstance().ReadBits("DB104.0.0", 71); |
| | | List<Boolean> plclist = S7control.getinstance().ReadBits("DB104.0.0", Plccount); |
| | | // List<Boolean> plclist = S7control.getinstance().ReadBits(PlcAddress, Plccount); |
| | | // System.out.println(plclist); |
| | | // Boolean[] values = { false, false, true, false, true, false, true, false, |
| | |
| | | |
| | | // 将Intlist转换为数组 |
| | | // System.out.println(Intlist); |
| | | // System.out.println(Intlist.toArray().length); |
| | | Integer[] shuzu1 = Intlist.toArray(new Integer[0]); |
| | | |
| | | // 定义的报警内容数组,获取json返回的集合 |
| | |
| | | // |
| | | System.out.println("启动完成"); |
| | | |
| | | // new PlcHold().start(); |
| | | new PlcHold().start(); |
| | | |
| | | new Plchome().start(); |
| | | // new PlcLayout().start(); |
| | | // new Plcalarm().start(); |
| | | new PlcLayout().start(); |
| | | new Plcalarm().start(); |
| | | |
| | | // new Plcsign().start(); |
| | | new Plcsign().start(); |
| | | |
| | | // new Plcstate().start(); |
| | | // new PlcPositioning1().start(); |
| | | new Plcstate().start(); |
| | | new PlcPositioning1().start(); |
| | | |
| | | // new PlcParameter2().start(); |
| | | new PlcParameter2().start(); |
| | | |
| | | // new PLCAutomaticParameterSetting().start(); |
| | | new PLCAutomaticParameterSetting().start(); |
| | | |
| | | // new PlcManualonePosition().start(); |
| | | // new PlcManualonePosition2().start(); |
| | | // new PlcServoManualone().start(); |
| | | // new PLCManualJog().start(); |
| | | // new Plclog().start(); |
| | | new PlcManualonePosition().start(); |
| | | new PlcManualonePosition2().start(); |
| | | new PlcServoManualone().start(); |
| | | new PLCManualJog().start(); |
| | | new Plclog().start(); |
| | | |
| | | // new PlcInteractionState().start(); |
| | | new PlcInteractionState().start(); |
| | | //new PlcParameter1Review().start(); |
| | | // new PLCAutomaticParameterSettingReview().start(); |
| | | // new PLCAutomaticParameterSettingReview2().start(); |
| | | } |
| | | } |
| | |
| | | |
| | | import java.lang.reflect.Array; |
| | | import java.util.ArrayList; |
| | | import java.util.LinkedHashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | public class PlcBitObject { |
| | | |
| | |
| | | * @return 获取某个参数实例 |
| | | */ |
| | | public List<Boolean> getPlcBitValues(List<String> codeids) { |
| | | List<Boolean> arrayList = new ArrayList(); |
| | | List<Boolean> arrayList = new ArrayList<>(); |
| | | if (plcBitList != null) { |
| | | for (PlcBitInfo plcbitInfo : plcBitList) { |
| | | if (codeids.contains(plcbitInfo.getCodeId().toString())) |
| | | arrayList.add(plcbitInfo.getValue()); |
| | | Map<String, Boolean> resultMap = new LinkedHashMap<>(); // 使用 LinkedHashMap 保留插入顺序 |
| | | for (PlcBitInfo plcBitInfo : plcBitList) { |
| | | if (codeids.contains(plcBitInfo.getCodeId().toString())) { |
| | | resultMap.put(plcBitInfo.getCodeId().toString(), plcBitInfo.getValue()); |
| | | } |
| | | } |
| | | for (String codeId : codeids) { // 按照传入参数的顺序遍历 |
| | | Boolean value = resultMap.get(codeId); |
| | | if (value != null) { |
| | | arrayList.add(value); |
| | | } else { |
| | | arrayList.add(null); // 如果找不到对应的值,添加 null |
| | | } |
| | | } |
| | | } |
| | | return arrayList; |
| | |
| | | String[] stringdatas = this.startAddress.trim().split("\\."); |
| | | if (stringdatas.length < 2 ) |
| | | return null; |
| | | int dbwindex = 0; |
| | | int bitindex = 0; |
| | | if (stringdatas.length == 2) { |
| | | dbwindex = Integer.parseInt(stringdatas[1]); |
| | | } else |
| | | return null; |
| | | return stringdatas[0]+"."+dbwindex+bitindex; |
| | | |
| | | int bitindex = index; |
| | | |
| | | return stringdatas[0]+"."+bitindex; |
| | | } |
| | | |
| | | public int getPlcAddress() { |
| | |
| | | package com.example.springboot.entity.device; |
| | | |
| | | import java.lang.reflect.Array; |
| | | import java.nio.charset.StandardCharsets; |
| | | import java.util.ArrayList; |
| | | import java.util.LinkedHashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | public class PlcParameterObject { |
| | | |
| | |
| | | * @return 获取某个参数实例 |
| | | */ |
| | | public List<String> getPlcParameterValues(List<String> codeids) { |
| | | List<String> arrayList = new ArrayList(); |
| | | List<String> arrayList = new ArrayList<>(); |
| | | if (plcParameterList != null) { |
| | | Map<String, PlcParameterInfo> resultMap = new LinkedHashMap<>(); // 使用 LinkedHashMap 保留插入顺序 |
| | | for (PlcParameterInfo plcParameterInfo : plcParameterList) { |
| | | if (codeids.contains(plcParameterInfo.getCodeId())) |
| | | if (codeids.contains(plcParameterInfo.getCodeId())) { |
| | | resultMap.put(plcParameterInfo.getCodeId(), plcParameterInfo); |
| | | } |
| | | } |
| | | for (String codeId : codeids) { // 按照传入参数的顺序遍历 |
| | | PlcParameterInfo plcParameterInfo = resultMap.get(codeId); |
| | | if (plcParameterInfo != null) { |
| | | arrayList.add(plcParameterInfo.getValue()); |
| | | } else { |
| | | arrayList.add(null); // 如果找不到对应的值,添加 null |
| | | } |
| | | } |
| | | } |
| | | return arrayList; |
| | |
| | | if (plcParameterList != null) { |
| | | for (PlcParameterInfo plcParameterInfo : plcParameterList) { |
| | | byte[] valueList = new byte[plcParameterInfo.getAddressLength()]; |
| | | |
| | | // System.out.println(plcParameterInfo.getAddressLength()); |
| | | |
| | | for (int i = 0; i < plcParameterInfo.getAddressLength(); i++) { |
| | | Array.setByte(valueList, i, plcValueArray[plcParameterInfo.getAddressIndex() + i]); |
| | | |
| | | |
| | | } |
| | | if (plcParameterInfo.getAddressLength()==2) { |
| | | plcParameterInfo.setValue(String.valueOf(byte2short(valueList))); |
| | | } |
| | | else if (plcParameterInfo.getAddressLength()==14) { |
| | | plcParameterInfo.setValue((byteToHexString(valueList))); |
| | | } |
| | | |
| | | else |
| | | { |
| | | String valuestr = new String(valueList); |
| | |
| | | return l; |
| | | } |
| | | |
| | | public static String byteToHexString(byte[] bytes) { |
| | | |
| | | String str = new String(bytes, StandardCharsets.UTF_8); |
| | | return str; |
| | | } |
| | | |
| | | |
| | | } |
| | |
| | | { |
| | | "plcAddressBegin":"DB100.0", |
| | | "plcAddressLenght":"86", |
| | | "plcAddressLenght":"198", |
| | | "dataType":"word", |
| | | "parameteInfor":[ |
| | | { |
| | |
| | | { |
| | | "plcAddressBegin":"DB100.0.0", |
| | | "plcAddressLenght":"20", |
| | | "plcAddressLenght":"11", |
| | | "dataType":"bit", |
| | | "parameteInfor":[ |
| | | { |
| | |
| | | }, |
| | | { |
| | | "codeId": "A01A02TURNPOSVelocityAUTO", |
| | | "addressIndex":"12" |
| | | "addressIndex":"7" |
| | | }, |
| | | { |
| | | "codeId": "A01A02TURNPOSVelocitymanual", |
| | | "addressIndex":"14" |
| | | "addressIndex":"8" |
| | | }, |
| | | { |
| | | "codeId": "A01A02TRAVELPOSVelocityAUTO", |
| | | "addressIndex":"16" |
| | | "addressIndex":"9" |
| | | }, |
| | | { |
| | | "codeId": "DO1id", |
| | | "addressIndex":"18" |
| | | "addressIndex":"10" |
| | | } |
| | | ] |
| | | } |
New file |
| | |
| | | {
|
| | | "plcAddressBegin": "DB103.0",
|
| | | "plcAddressLenght": "256",
|
| | | "dataType": "word",
|
| | | "parameteInfor": [
|
| | | {
|
| | | "codeId": "D01.State",
|
| | | "addressIndex": "0",
|
| | | "addressLenght": "2",
|
| | | "unit": ""
|
| | | },
|
| | | {
|
| | | "codeId": "D02.State",
|
| | | "addressIndex": "2",
|
| | | "addressLenght": "2",
|
| | | "unit": ""
|
| | | },
|
| | | {
|
| | | "codeId": "B01.State",
|
| | | "addressIndex": "4",
|
| | | "addressLenght": "2",
|
| | | "unit": ""
|
| | | },
|
| | | {
|
| | | "codeId": "B02.State",
|
| | | "addressIndex": "6",
|
| | | "addressLenght": "2",
|
| | | "unit": ""
|
| | | },
|
| | | {
|
| | | "codeId": "A01.State",
|
| | | "addressIndex": "8",
|
| | | "addressLenght": "2",
|
| | | "unit": ""
|
| | | },
|
| | | {
|
| | | "codeId": "A02.State",
|
| | | "addressIndex": "10",
|
| | | "addressLenght": "2",
|
| | | "unit": ""
|
| | | },
|
| | | {
|
| | | "codeId": "D03.State",
|
| | | "addressIndex": "12",
|
| | | "addressLenght": "2",
|
| | | "unit": ""
|
| | | },
|
| | | {
|
| | | "codeId": "D04.State",
|
| | | "addressIndex": "14",
|
| | | "addressLenght": "2",
|
| | | "unit": ""
|
| | | },
|
| | | {
|
| | | "codeId": "D05.State",
|
| | | "addressIndex": "16",
|
| | | "addressLenght": "2",
|
| | | "unit": ""
|
| | | },
|
| | | {
|
| | | "codeId": "D06.State",
|
| | | "addressIndex": "18",
|
| | | "addressLenght": "2",
|
| | | "unit": ""
|
| | | },
|
| | | {
|
| | | "codeId": "A01tavelActualPosition",
|
| | | "addressIndex": "20",
|
| | | "addressLenght": "2",
|
| | | "unit": ""
|
| | | },
|
| | | {
|
| | | "codeId": "A01turnActualangle",
|
| | | "addressIndex": "22",
|
| | | "addressLenght": "2",
|
| | | "unit": ""
|
| | | },
|
| | | {
|
| | | "codeId": "A02tavelActualPosition",
|
| | | "addressIndex": "24",
|
| | | "addressLenght": "2",
|
| | | "unit": ""
|
| | | },
|
| | | {
|
| | | "codeId": "A02turnActualangle",
|
| | | "addressIndex": "26",
|
| | | "addressLenght": "2",
|
| | | "unit": ""
|
| | | },
|
| | | {
|
| | | "codeId": "B01tavelActualPosition",
|
| | | "addressIndex": "28",
|
| | | "addressLenght": "2",
|
| | | "unit": ""
|
| | | },
|
| | | {
|
| | | "codeId": "B02tavelActualPosition",
|
| | | "addressIndex": "30",
|
| | | "addressLenght": "2",
|
| | | "unit": ""
|
| | | },
|
| | | {
|
| | | "codeId": "A01CurrentGrid",
|
| | | "addressIndex": "32",
|
| | | "addressLenght": "2",
|
| | | "unit": ""
|
| | | },
|
| | | {
|
| | | "codeId": "A02CurrentGrid",
|
| | | "addressIndex": "34",
|
| | | "addressLenght": "2",
|
| | | "unit": ""
|
| | | },
|
| | | {
|
| | | "codeId": "B01CurrentGrid",
|
| | | "addressIndex": "36",
|
| | | "addressLenght": "2",
|
| | | "unit": ""
|
| | | },
|
| | | {
|
| | | "codeId": "B01TargetGrid",
|
| | | "addressIndex": "38",
|
| | | "addressLenght": "2",
|
| | | "unit": ""
|
| | | },
|
| | | {
|
| | | "codeId": "B02CurrentGrid",
|
| | | "addressIndex": "40",
|
| | | "addressLenght": "2",
|
| | | "unit": ""
|
| | | },
|
| | | {
|
| | | "codeId": "B02TargetGrid",
|
| | | "addressIndex": "42",
|
| | | "addressLenght": "2",
|
| | | "unit": ""
|
| | | },
|
| | | {
|
| | | "codeId": "D01ID",
|
| | | "addressIndex": "44",
|
| | | "addressLenght": "14",
|
| | | "unit": ""
|
| | | },
|
| | | {
|
| | | "codeId": "D02ID",
|
| | | "addressIndex": "58",
|
| | | "addressLenght": "14",
|
| | | "unit": ""
|
| | | },
|
| | | {
|
| | | "codeId": "D03ID",
|
| | | "addressIndex": "72",
|
| | | "addressLenght": "14",
|
| | | "unit": ""
|
| | | },
|
| | | {
|
| | | "codeId": "D04ID",
|
| | | "addressIndex": "86",
|
| | | "addressLenght": "14",
|
| | | "unit": ""
|
| | | },
|
| | | {
|
| | | "codeId": "D05ID",
|
| | | "addressIndex": "100",
|
| | | "addressLenght": "14",
|
| | | "unit": ""
|
| | | },
|
| | | {
|
| | | "codeId": "D06ID",
|
| | | "addressIndex": "114",
|
| | | "addressLenght": "14",
|
| | | "unit": ""
|
| | | },
|
| | | {
|
| | | "codeId": "A01ID1",
|
| | | "addressIndex": "128",
|
| | | "addressLenght": "14",
|
| | | "unit": ""
|
| | | },
|
| | | {
|
| | | "codeId": "A01ID2",
|
| | | "addressIndex": "142",
|
| | | "addressLenght": "14",
|
| | | "unit": ""
|
| | | },
|
| | | {
|
| | | "codeId": "A02ID1",
|
| | | "addressIndex": "156",
|
| | | "addressLenght": "14",
|
| | | "unit": ""
|
| | | },
|
| | | {
|
| | | "codeId": "A02ID2",
|
| | | "addressIndex": "170",
|
| | | "addressLenght": "14",
|
| | | "unit": ""
|
| | | },
|
| | | {
|
| | | "codeId": "B01ID1",
|
| | | "addressIndex": "184",
|
| | | "addressLenght": "14",
|
| | | "unit": ""
|
| | | },
|
| | | {
|
| | | "codeId": "B01ID2",
|
| | | "addressIndex": "198",
|
| | | "addressLenght": "14",
|
| | | "unit": ""
|
| | | },
|
| | | {
|
| | | "codeId": "B02ID1",
|
| | | "addressIndex": "212",
|
| | | "addressLenght": "14",
|
| | | "unit": ""
|
| | | },
|
| | | {
|
| | | "codeId": "B02ID2",
|
| | | "addressIndex": "226",
|
| | | "addressLenght": "14",
|
| | | "unit": ""
|
| | | },
|
| | | {
|
| | | "codeId": "A01conveyorFaultcodes",
|
| | | "addressIndex": "240",
|
| | | "addressLenght": "2",
|
| | | "unit": ""
|
| | | },
|
| | | {
|
| | | "codeId": "A01turnservoFaultcodes",
|
| | | "addressIndex": "242",
|
| | | "addressLenght": "2",
|
| | | "unit": ""
|
| | | },
|
| | | {
|
| | | "codeId": "A01travelservoFaultcodes",
|
| | | "addressIndex": "244",
|
| | | "addressLenght": "2",
|
| | | "unit": ""
|
| | | },
|
| | | {
|
| | | "codeId": "A02conveyorFaultcodes",
|
| | | "addressIndex": "246",
|
| | | "addressLenght": "2",
|
| | | "unit": ""
|
| | | },
|
| | | {
|
| | | "codeId": "A02turnservoFaultcodes",
|
| | | "addressIndex": "248",
|
| | | "addressLenght": "2",
|
| | | "unit": ""
|
| | | },
|
| | | {
|
| | | "codeId": "A02travelservoFaultcodes",
|
| | | "addressIndex": "250",
|
| | | "addressLenght": "2",
|
| | | "unit": ""
|
| | | },
|
| | | {
|
| | | "codeId": "B01travelservoFaultcodes",
|
| | | "addressIndex": "252",
|
| | | "addressLenght": "2",
|
| | | "unit": ""
|
| | | },
|
| | | {
|
| | | "codeId": "B02travelservoFaultcodes",
|
| | | "addressIndex": "254",
|
| | | "addressLenght": "2",
|
| | | "unit": ""
|
| | | }
|
| | |
|
| | | ]
|
| | | } |
| | |
| | | #addresses.add("DB100.36");
|
| | | #addresses.add("DB100.38");
|
| | | #addresses.add("DB100.40");
|
| | | Auto.addresses=DB100.0,DB100.2,DB100.4,DB100.6,DB100.26,DB100.28,DB100.30,DB100.32,DB100.34,DB100.36,DB100.38,DB100.40
|
| | | Auto.addresses=DB100.2,DB100.4,DB100.6,DB100.28,DB100.30,DB100.32,DB100.36,DB100.38,DB100.40
|
| | |
|
| | | #List<String> waddresses1 = new ArrayList<>();
|
| | | #waddresses1.add("DB100.0");
|
| | |
| | | #waddresses1.add("DB100.38");
|
| | | #waddresses1.add("DB100.40");
|
| | |
|
| | | Auto.shusong=DB100.0,DB100.2,DB100.4,DB100.6,DB100.26,DB100.28,DB100.30,DB100.32,DB100.34,DB100.36,DB100.38,DB100.40
|
| | | Auto.shusong=DB100.2,DB100.4,DB100.6,DB100.28,DB100.30,DB100.32,DB100.36,DB100.38,DB100.40
|
| | |
|
| | |
|
| | | #-----PlcPositioning1-------------------------
|
| | |
| | | #出片任务
|
| | | PlcInteractionState.MESProductiontask=DB105.10,DB105.12,DB105.14,DB105.16,DB105.18,DB105.34-47
|
| | |
|
| | | PlcInteractionState.PLCProductiontask=DB106.20,DB106.16,DB106.18,DB103.156-169
|
| | | PlcInteractionState.PLCProductiontask=DB106.20,DB106.16,DB106.18,DB103.156-169,DB106.64
|
| | |
|
| | | #任务信息
|
| | | PlcInteractionState.MEStaskinformation=DB105.48,DB105.50,DB105.48,DB105.50,DB106.42,DB106.48
|