diff --git a/src/ACUBL.properties b/src/ACUBL.properties index f542ad7..2a8ee6f 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -2057,6 +2057,11 @@ #\u98CE\u673A\u72B6\u6001\u6240\u5360\u5B57\u6570 THXC.ACU301.SBSTAT.WORDCOUNT = 12 +#\u7167\u660E +THXC.ACU301.ZM.COUNT = 2 +#\u7167\u660E\u7F16\u7801\u5217\u8868 +THXC.ACU301.ZM.ZC.LIST = THXC.ACU301.Z.ZZM01;THXC.ACU301.Z.DZM01 + diff --git a/src/ACUBL.properties b/src/ACUBL.properties index f542ad7..2a8ee6f 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -2057,6 +2057,11 @@ #\u98CE\u673A\u72B6\u6001\u6240\u5360\u5B57\u6570 THXC.ACU301.SBSTAT.WORDCOUNT = 12 +#\u7167\u660E +THXC.ACU301.ZM.COUNT = 2 +#\u7167\u660E\u7F16\u7801\u5217\u8868 +THXC.ACU301.ZM.ZC.LIST = THXC.ACU301.Z.ZZM01;THXC.ACU301.Z.DZM01 + diff --git a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java index 969cd9c..a338a23 100644 --- a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java @@ -1,6 +1,7 @@ package com.szpg.plc.message.response.read; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import org.apache.commons.lang3.StringUtils; @@ -123,6 +124,9 @@ return; } zcList = zcListStr.split(";"); + + // 初始化结果集合 + ywbj = Arrays.asList(new Boolean[zcList.length]); // 解析爆管液位报警状态 for (int i = 0; i < zcList.length; i++) { @@ -130,19 +134,17 @@ // 解析爆管液位报警状态 PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); - if (null == almBlObj) { - continue; + if (null != almBlObj) { + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 爆管液位报警状态标志位 + + getYwbj().set(i, bjBt == '1' ? true : false); + + logger.info("[" + zcbh + "][舱段液位爆管报警" + bjBt + "]"); } - - int akszdz = almBlObj.getKszdz(); //开始字地址 - int aoffset = akszdz - start; //与开始字的偏移量 - int abit = almBlObj.getSzw(); //所在位 - - char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 爆管液位报警状态标志位 - - getYwbj().add(bjBt == '1' ? true : false); - - logger.info("[" + zcbh + "][舱段液位爆管报警" + bjBt + "]"); } logger.info("解析[读取舱段液位爆管报警状态]响应指令结束"); diff --git a/src/ACUBL.properties b/src/ACUBL.properties index f542ad7..2a8ee6f 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -2057,6 +2057,11 @@ #\u98CE\u673A\u72B6\u6001\u6240\u5360\u5B57\u6570 THXC.ACU301.SBSTAT.WORDCOUNT = 12 +#\u7167\u660E +THXC.ACU301.ZM.COUNT = 2 +#\u7167\u660E\u7F16\u7801\u5217\u8868 +THXC.ACU301.ZM.ZC.LIST = THXC.ACU301.Z.ZZM01;THXC.ACU301.Z.DZM01 + diff --git a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java index 969cd9c..a338a23 100644 --- a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java @@ -1,6 +1,7 @@ package com.szpg.plc.message.response.read; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import org.apache.commons.lang3.StringUtils; @@ -123,6 +124,9 @@ return; } zcList = zcListStr.split(";"); + + // 初始化结果集合 + ywbj = Arrays.asList(new Boolean[zcList.length]); // 解析爆管液位报警状态 for (int i = 0; i < zcList.length; i++) { @@ -130,19 +134,17 @@ // 解析爆管液位报警状态 PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); - if (null == almBlObj) { - continue; + if (null != almBlObj) { + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 爆管液位报警状态标志位 + + getYwbj().set(i, bjBt == '1' ? true : false); + + logger.info("[" + zcbh + "][舱段液位爆管报警" + bjBt + "]"); } - - int akszdz = almBlObj.getKszdz(); //开始字地址 - int aoffset = akszdz - start; //与开始字的偏移量 - int abit = almBlObj.getSzw(); //所在位 - - char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 爆管液位报警状态标志位 - - getYwbj().add(bjBt == '1' ? true : false); - - logger.info("[" + zcbh + "][舱段液位爆管报警" + bjBt + "]"); } logger.info("解析[读取舱段液位爆管报警状态]响应指令结束"); diff --git a/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java index 80a0a39..39b2fd4 100644 --- a/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java @@ -1,6 +1,7 @@ package com.szpg.plc.message.response.read; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import org.apache.commons.lang3.StringUtils; @@ -102,6 +103,9 @@ return; } zcList = zcListStr.split(";"); + + // 初始化结果集合 + zmRun = Arrays.asList(new Boolean[zcList.length]); // 解析照明运行状态 for (int i = 0; i < zcList.length; i++) { @@ -109,17 +113,15 @@ // 解析照明运行状态 PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); - if (null == runBlObj) { - continue; + if (null != runBlObj) { + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + getZmRun().set(i, runBt == '1' ? true : false); } - - int rkszdz = runBlObj.getKszdz(); //开始字地址 - int roffset = rkszdz - start; //与开始字的偏移量 - int rbit = runBlObj.getSzw(); //所在位 - - char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 - - getZmRun().add(runBt == '1' ? true : false); } } diff --git a/src/ACUBL.properties b/src/ACUBL.properties index f542ad7..2a8ee6f 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -2057,6 +2057,11 @@ #\u98CE\u673A\u72B6\u6001\u6240\u5360\u5B57\u6570 THXC.ACU301.SBSTAT.WORDCOUNT = 12 +#\u7167\u660E +THXC.ACU301.ZM.COUNT = 2 +#\u7167\u660E\u7F16\u7801\u5217\u8868 +THXC.ACU301.ZM.ZC.LIST = THXC.ACU301.Z.ZZM01;THXC.ACU301.Z.DZM01 + diff --git a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java index 969cd9c..a338a23 100644 --- a/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadYWStatusCommandResponse.java @@ -1,6 +1,7 @@ package com.szpg.plc.message.response.read; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import org.apache.commons.lang3.StringUtils; @@ -123,6 +124,9 @@ return; } zcList = zcListStr.split(";"); + + // 初始化结果集合 + ywbj = Arrays.asList(new Boolean[zcList.length]); // 解析爆管液位报警状态 for (int i = 0; i < zcList.length; i++) { @@ -130,19 +134,17 @@ // 解析爆管液位报警状态 PgHjsbbl almBlObj = blDao.findBlByBh(zcbh + ".AH"); - if (null == almBlObj) { - continue; + if (null != almBlObj) { + int akszdz = almBlObj.getKszdz(); //开始字地址 + int aoffset = akszdz - start; //与开始字的偏移量 + int abit = almBlObj.getSzw(); //所在位 + + char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 爆管液位报警状态标志位 + + getYwbj().set(i, bjBt == '1' ? true : false); + + logger.info("[" + zcbh + "][舱段液位爆管报警" + bjBt + "]"); } - - int akszdz = almBlObj.getKszdz(); //开始字地址 - int aoffset = akszdz - start; //与开始字的偏移量 - int abit = almBlObj.getSzw(); //所在位 - - char bjBt = dataStr.charAt(dataStr.length() - 1 - aoffset * 16 - abit); // 爆管液位报警状态标志位 - - getYwbj().add(bjBt == '1' ? true : false); - - logger.info("[" + zcbh + "][舱段液位爆管报警" + bjBt + "]"); } logger.info("解析[读取舱段液位爆管报警状态]响应指令结束"); diff --git a/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java index 80a0a39..39b2fd4 100644 --- a/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadZmStatCommandResponse.java @@ -1,6 +1,7 @@ package com.szpg.plc.message.response.read; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import org.apache.commons.lang3.StringUtils; @@ -102,6 +103,9 @@ return; } zcList = zcListStr.split(";"); + + // 初始化结果集合 + zmRun = Arrays.asList(new Boolean[zcList.length]); // 解析照明运行状态 for (int i = 0; i < zcList.length; i++) { @@ -109,17 +113,15 @@ // 解析照明运行状态 PgHjsbbl runBlObj = blDao.findBlByBh(zcbh + ".Run"); - if (null == runBlObj) { - continue; + if (null != runBlObj) { + int rkszdz = runBlObj.getKszdz(); //开始字地址 + int roffset = rkszdz - start; //与开始字的偏移量 + int rbit = runBlObj.getSzw(); //所在位 + + char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 + + getZmRun().set(i, runBt == '1' ? true : false); } - - int rkszdz = runBlObj.getKszdz(); //开始字地址 - int roffset = rkszdz - start; //与开始字的偏移量 - int rbit = runBlObj.getSzw(); //所在位 - - char runBt = dataStr.charAt(dataStr.length() - 1 - roffset * 16 - rbit); // 风机运行状态标志位 - - getZmRun().add(runBt == '1' ? true : false); } } diff --git a/src/com/szpg/rmi/RemoteZMCommandAction.java b/src/com/szpg/rmi/RemoteZMCommandAction.java index c7f3c61..90dbf9a 100644 --- a/src/com/szpg/rmi/RemoteZMCommandAction.java +++ b/src/com/szpg/rmi/RemoteZMCommandAction.java @@ -1,5 +1,6 @@ package com.szpg.rmi; +import com.szpg.service.RemoteDeviceControlService; import org.apache.log4j.Logger; import org.apache.struts2.ServletActionContext; @@ -25,6 +26,9 @@ import z.json.JSONObject; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + public class RemoteZMCommandAction extends ActionSupport { /** @@ -108,10 +112,22 @@ command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); //按字读取内容 try { + // 没有找到对应的配置项,直接返回 + String start = Configure.getProperty("acubl", client.getAcucode() + ".ZMSTAT.START"); + String countWord = Configure.getProperty("acubl", client.getAcucode() + ".ZMSTAT.WORDCOUNT"); + if (null == start || start.equals("")) { + jResult.put("success", false); + jResult.put("code", "4"); + jResult.put("resaon", UnicodeConvertor.string2Unicode("未找到对应的变量配置项")); + + returnToFront(jResult); + return null; + } + // 设置读取的地址范围 // 从配置文件读取而来 - command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".ZMSTAT.START")), 2)) + "00"); - command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".ZMSTAT.WORDCOUNT"))); + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(start), 2)) + "00"); + command.setCountWord(Integer.parseInt(countWord)); // 调用服务过程执行命令发送服务 ReadControllerStatusService service = new ReadControllerStatusService(); @@ -145,8 +161,6 @@ // 返回结果 JSONObject jResult = new JSONObject(); - logger.info("[进入打开应急照明接口]" + zcbh); - if (null == zcbh || zcbh.equals("") == true) { jResult.put("success", false); jResult.put("code", "1"); @@ -191,11 +205,9 @@ if (null != setOnCmd) { setOnCmd.setMessageProducerHost(client.getHost()); - // 解析命令对象为字节数组 - byte[] content = finspi.messageToBytes(setOnCmd); - - // 通过socket接口发送出去 - ACUClientUtil.getInstance().sendACUCommand(client, content); + RemoteDeviceControlService service = new RemoteDeviceControlService(); + service.executeService(client, setOnCmd); + Logger.getLogger(this.getClass().getName()).info(setOnCmd); } else { jResult.put("success", false); @@ -216,10 +228,7 @@ } // 5秒后查询一次照明的状态 - Thread.sleep(5 * 1000); - // 调用远程接口查询照明状态 - String baseURL = Configure.getProperty("sys", "PGDSC_API_URL"); - HttpRequest.sendGet(baseURL + "remote/readZmStatus.action", "zcbh=" + zcbh); + new ScheduledThreadPoolExecutor(1).schedule(new ReadZmStatusTask(zcbh), 5, TimeUnit.SECONDS); // 返回成功给界面 jResult.put("success", true); @@ -289,11 +298,9 @@ if (null != setOffCmd) { setOffCmd.setMessageProducerHost(client.getHost()); - // 解析命令对象为字节数组 - byte[] content = finspi.messageToBytes(setOffCmd); - - // 通过socket接口发送出去 - ACUClientUtil.getInstance().sendACUCommand(client, content); + RemoteDeviceControlService service = new RemoteDeviceControlService(); + service.executeService(client, setOffCmd); + Logger.getLogger(this.getClass().getName()).info(setOffCmd); } else { jResult.put("success", false); @@ -314,10 +321,7 @@ } // 5秒后查询一次照明的状态 - Thread.sleep(5 * 1000); - // 调用远程接口查询照明状态 - String baseURL = Configure.getProperty("sys", "PGDSC_API_URL"); - HttpRequest.sendGet(baseURL + "remote/readZmStatus.action", "zcbh=" + zcbh); + new ScheduledThreadPoolExecutor(1).schedule(new ReadZmStatusTask(zcbh), 5, TimeUnit.SECONDS); // 返回成功给界面 jResult.put("success", true); @@ -350,4 +354,23 @@ ServletActionContext.getResponse().getWriter().write(jResult.toString()); } + + /** + * 执行照明操作之后的查询照明状态单次任务 + */ + class ReadZmStatusTask implements Runnable { + + private String zcbh; + + public ReadZmStatusTask(String zcbh) { + this.zcbh = zcbh; + } + + @Override + public void run() { + // 调用远程接口查询照明状态 + String baseURL = Configure.getProperty("sys", "PGDSC_API_URL"); + HttpRequest.sendGet(baseURL + "remote/readZmStatus.action", "zcbh=" + zcbh); + } + } }