diff --git a/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java
index fe487b7..e1de835 100644
--- a/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java
+++ b/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java
@@ -181,6 +181,8 @@
char lockBt = dataStr.charAt(dataStr.length() - 1 - loffset * 16 - lbit); // 井盖解锁/锁定标志位
getJgsd().add(lockBt == '0' ? true : false); //0-锁定;1-解锁
+
+ logger.info("[" + zcbh + "][井盖状态" + getJgzt().get(i) + "][井盖锁定" + getJgsd().get(i) + "]");
}
logger.info("解析[读取井盖状态]响应指令结束");
diff --git a/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java
index fe487b7..e1de835 100644
--- a/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java
+++ b/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java
@@ -181,6 +181,8 @@
char lockBt = dataStr.charAt(dataStr.length() - 1 - loffset * 16 - lbit); // 井盖解锁/锁定标志位
getJgsd().add(lockBt == '0' ? true : false); //0-锁定;1-解锁
+
+ logger.info("[" + zcbh + "][井盖状态" + getJgzt().get(i) + "][井盖锁定" + getJgsd().get(i) + "]");
}
logger.info("解析[读取井盖状态]响应指令结束");
diff --git a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java
index fda3077..4366960 100644
--- a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java
+++ b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java
@@ -167,7 +167,7 @@
String fjzcbh = fj.getAssetcode();
// 调用远程接口启动风机
- HttpRequest.sendGet(baseURL + "remote/turnOnFj.do", "zcbh=" + fjzcbh);
+ HttpRequest.sendGet(baseURL + "remote/turnOnFj.action", "zcbh=" + fjzcbh);
}
}
}
diff --git a/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java
index fe487b7..e1de835 100644
--- a/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java
+++ b/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java
@@ -181,6 +181,8 @@
char lockBt = dataStr.charAt(dataStr.length() - 1 - loffset * 16 - lbit); // 井盖解锁/锁定标志位
getJgsd().add(lockBt == '0' ? true : false); //0-锁定;1-解锁
+
+ logger.info("[" + zcbh + "][井盖状态" + getJgzt().get(i) + "][井盖锁定" + getJgsd().get(i) + "]");
}
logger.info("解析[读取井盖状态]响应指令结束");
diff --git a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java
index fda3077..4366960 100644
--- a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java
+++ b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java
@@ -167,7 +167,7 @@
String fjzcbh = fj.getAssetcode();
// 调用远程接口启动风机
- HttpRequest.sendGet(baseURL + "remote/turnOnFj.do", "zcbh=" + fjzcbh);
+ HttpRequest.sendGet(baseURL + "remote/turnOnFj.action", "zcbh=" + fjzcbh);
}
}
}
diff --git a/src/com/szpg/rmi/RemoteCH4CommandAction.java b/src/com/szpg/rmi/RemoteCH4CommandAction.java
index aff3866..cb63ae1 100644
--- a/src/com/szpg/rmi/RemoteCH4CommandAction.java
+++ b/src/com/szpg/rmi/RemoteCH4CommandAction.java
@@ -201,7 +201,7 @@
command.setMessageProducerId(sour);
command.setDestinationId(dest);
- command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD);
+ command.setMemoryArea(FINSConstants.MEMORY_DM_AREA);
int start = blObj.getKszdz();
int end = blObj.getJszdz();
diff --git a/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java
index fe487b7..e1de835 100644
--- a/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java
+++ b/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java
@@ -181,6 +181,8 @@
char lockBt = dataStr.charAt(dataStr.length() - 1 - loffset * 16 - lbit); // 井盖解锁/锁定标志位
getJgsd().add(lockBt == '0' ? true : false); //0-锁定;1-解锁
+
+ logger.info("[" + zcbh + "][井盖状态" + getJgzt().get(i) + "][井盖锁定" + getJgsd().get(i) + "]");
}
logger.info("解析[读取井盖状态]响应指令结束");
diff --git a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java
index fda3077..4366960 100644
--- a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java
+++ b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java
@@ -167,7 +167,7 @@
String fjzcbh = fj.getAssetcode();
// 调用远程接口启动风机
- HttpRequest.sendGet(baseURL + "remote/turnOnFj.do", "zcbh=" + fjzcbh);
+ HttpRequest.sendGet(baseURL + "remote/turnOnFj.action", "zcbh=" + fjzcbh);
}
}
}
diff --git a/src/com/szpg/rmi/RemoteCH4CommandAction.java b/src/com/szpg/rmi/RemoteCH4CommandAction.java
index aff3866..cb63ae1 100644
--- a/src/com/szpg/rmi/RemoteCH4CommandAction.java
+++ b/src/com/szpg/rmi/RemoteCH4CommandAction.java
@@ -201,7 +201,7 @@
command.setMessageProducerId(sour);
command.setDestinationId(dest);
- command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD);
+ command.setMemoryArea(FINSConstants.MEMORY_DM_AREA);
int start = blObj.getKszdz();
int end = blObj.getJszdz();
diff --git a/src/com/szpg/rmi/RemoteCOCommandAction.java b/src/com/szpg/rmi/RemoteCOCommandAction.java
index dde2ac3..728211c 100644
--- a/src/com/szpg/rmi/RemoteCOCommandAction.java
+++ b/src/com/szpg/rmi/RemoteCOCommandAction.java
@@ -201,7 +201,7 @@
command.setMessageProducerId(sour);
command.setDestinationId(dest);
- command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD);
+ command.setMemoryArea(FINSConstants.MEMORY_DM_AREA);
int start = blObj.getKszdz();
int end = blObj.getJszdz();
diff --git a/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java
index fe487b7..e1de835 100644
--- a/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java
+++ b/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java
@@ -181,6 +181,8 @@
char lockBt = dataStr.charAt(dataStr.length() - 1 - loffset * 16 - lbit); // 井盖解锁/锁定标志位
getJgsd().add(lockBt == '0' ? true : false); //0-锁定;1-解锁
+
+ logger.info("[" + zcbh + "][井盖状态" + getJgzt().get(i) + "][井盖锁定" + getJgsd().get(i) + "]");
}
logger.info("解析[读取井盖状态]响应指令结束");
diff --git a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java
index fda3077..4366960 100644
--- a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java
+++ b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java
@@ -167,7 +167,7 @@
String fjzcbh = fj.getAssetcode();
// 调用远程接口启动风机
- HttpRequest.sendGet(baseURL + "remote/turnOnFj.do", "zcbh=" + fjzcbh);
+ HttpRequest.sendGet(baseURL + "remote/turnOnFj.action", "zcbh=" + fjzcbh);
}
}
}
diff --git a/src/com/szpg/rmi/RemoteCH4CommandAction.java b/src/com/szpg/rmi/RemoteCH4CommandAction.java
index aff3866..cb63ae1 100644
--- a/src/com/szpg/rmi/RemoteCH4CommandAction.java
+++ b/src/com/szpg/rmi/RemoteCH4CommandAction.java
@@ -201,7 +201,7 @@
command.setMessageProducerId(sour);
command.setDestinationId(dest);
- command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD);
+ command.setMemoryArea(FINSConstants.MEMORY_DM_AREA);
int start = blObj.getKszdz();
int end = blObj.getJszdz();
diff --git a/src/com/szpg/rmi/RemoteCOCommandAction.java b/src/com/szpg/rmi/RemoteCOCommandAction.java
index dde2ac3..728211c 100644
--- a/src/com/szpg/rmi/RemoteCOCommandAction.java
+++ b/src/com/szpg/rmi/RemoteCOCommandAction.java
@@ -201,7 +201,7 @@
command.setMessageProducerId(sour);
command.setDestinationId(dest);
- command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD);
+ command.setMemoryArea(FINSConstants.MEMORY_DM_AREA);
int start = blObj.getKszdz();
int end = blObj.getJszdz();
diff --git a/src/com/szpg/rmi/RemoteDSCommandAction.java b/src/com/szpg/rmi/RemoteDSCommandAction.java
new file mode 100644
index 0000000..d1ec179
--- /dev/null
+++ b/src/com/szpg/rmi/RemoteDSCommandAction.java
@@ -0,0 +1,257 @@
+package com.szpg.rmi;
+
+import org.apache.log4j.Logger;
+import org.apache.struts2.ServletActionContext;
+
+import com.opensymphony.xwork2.ActionSupport;
+import com.szpg.db.dao.PgAcuDao;
+import com.szpg.db.dao.PgHjsbblDao;
+import com.szpg.db.dao.impl.PgAcuDaoImpl;
+import com.szpg.db.dao.impl.PgHjsbblDaoImpl;
+import com.szpg.db.data.PgAcu;
+import com.szpg.db.data.PgHjsbbl;
+import com.szpg.plc.message.AppMessageConstants;
+import com.szpg.plc.message.command.ReadMemoryCommand;
+import com.szpg.plc.message.command.write.SetDsRstBitCommand;
+import com.szpg.plc.protocol.DTProtocolInterface;
+import com.szpg.plc.protocol.ProtocolFactory;
+import com.szpg.plc.protocol.fins.FINSConstants;
+import com.szpg.plc.server.ACUClient;
+import com.szpg.plc.server.ACUClientUtil;
+import com.szpg.plc.util.ByteUtil;
+import com.szpg.service.ReadControllerStatusService;
+import com.szpg.util.Configure;
+import com.szpg.util.UnicodeConvertor;
+
+import z.json.JSONObject;
+
+public class RemoteDSCommandAction extends ActionSupport {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 2221187086461756012L;
+
+ private String zcbh;
+
+ private String format;
+ private String jsoncallback;
+
+ private Logger logger = Logger.getLogger(this.getClass().getName());
+
+ public String getZcbh() {
+ return zcbh;
+ }
+
+ public void setZcbh(String zcbh) {
+ this.zcbh = zcbh;
+ }
+
+ public String getFormat() {
+ return format;
+ }
+
+ public void setFormat(String format) {
+ this.format = format;
+ }
+
+ public String getJsoncallback() {
+ return jsoncallback;
+ }
+
+ public void setJsoncallback(String jsoncallback) {
+ this.jsoncallback = jsoncallback;
+ }
+
+ /**
+ * 读取对射实时状态
+ * @return
+ * @throws Exception
+ */
+ public String readDsStatus() throws Exception {
+ // 返回结果
+ JSONObject jResult = new JSONObject();
+
+ PgAcuDao acuDao = new PgAcuDaoImpl();
+
+ if (null == zcbh || zcbh.equals("") == true) {
+ jResult.put("success", false);
+ jResult.put("code", "1");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("资产编号为空"));
+
+ returnToFront(jResult);
+ return null;
+ }
+
+ String acucode = zcbh.substring(0, zcbh.indexOf(".", 6));
+ PgAcu acu = acuDao.findACUByCode(acucode);
+ if (null == acu) {
+ jResult.put("success", false);
+ jResult.put("code", "2");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("未找到资产对应的PLC主机"));
+
+ returnToFront(jResult);
+ return null;
+ }
+
+ ACUClient client = ACUClientUtil.getInstance().getClients().get(acu.getAcu_host() + ":" + acu.getAcu_port());
+ if (null != client) {
+ ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS);
+ String sour = Configure.getProperty("sys", "LOCALHOST.NET") +
+ Configure.getProperty("sys", "LOCALHOST.NODE") +
+ Configure.getProperty("sys", "LOCALHOST.UNIT");
+ command.setMessageProducerId(sour);
+
+ String dest = client.getNet() + client.getNode() + client.getUnit();
+ command.setDestinationId(dest);
+ command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); //按字读取内容
+
+ try {
+ // 设置读取的地址范围
+ // 从配置文件读取而来
+ command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DSALM.START")), 2)) + "00");
+ command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DSALM.WORDCOUNT")));
+
+ // 调用服务过程执行命令发送服务
+ ReadControllerStatusService service = new ReadControllerStatusService();
+ service.executeService(client, command);
+ logger.info(command);
+ } catch (Exception ex) {
+ logger.error("发送查询对射指令异常" + ex);
+ }
+
+ jResult.put("success", true);
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("发送成功,请等待响应"));
+
+ returnToFront(jResult);
+ return null;
+ } else {
+ jResult.put("success", false);
+ jResult.put("code", "3");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("PLC主机不在线"));
+
+ returnToFront(jResult);
+ return null;
+ }
+ }
+
+ /**
+ * 清除对射报警
+ * @return
+ * @throws Exception
+ */
+ public String clearDsAlarm() throws Exception {
+ // 返回结果
+ JSONObject jResult = new JSONObject();
+
+ if (null == zcbh || zcbh.equals("") == true) {
+ jResult.put("success", false);
+ jResult.put("code", "1");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("资产编号为空"));
+
+ returnToFront(jResult);
+ return null;
+ }
+
+ // 查找ACU的信息
+ PgAcuDao acuDao = new PgAcuDaoImpl();
+
+ String acucode = zcbh.substring(0, zcbh.indexOf(".", 6));
+ PgAcu acu = acuDao.findACUByCode(acucode);
+ if (null == acu) {
+ jResult.put("success", false);
+ jResult.put("code", "2");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("未找到资产对应的PLC主机"));
+
+ returnToFront(jResult);
+ return null;
+ }
+
+ ACUClient client = ACUClientUtil.getInstance().getClients().get(acu.getAcu_host() + ":" + acu.getAcu_port());
+ if (null != client) {
+ // 源地址
+ String sour = Configure.getProperty("sys", "LOCALHOST.NET") +
+ Configure.getProperty("sys", "LOCALHOST.NODE") +
+ Configure.getProperty("sys", "LOCALHOST.UNIT");
+
+ // 目标地址
+ String dest = client.getNet() + client.getNode() + client.getUnit();
+
+ DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol();
+
+ PgHjsbblDao blDao = new PgHjsbblDaoImpl();
+
+ // 构建指令
+ SetDsRstBitCommand rstCmd = new SetDsRstBitCommand();
+ rstCmd.setRst(SetDsRstBitCommand.DS_RST);
+ PgHjsbbl rstBlObj = blDao.findBlByBh(zcbh + ".RST");
+ if (null != rstBlObj) {
+ rstCmd.setMessageProducerId(sour);
+ rstCmd.setDestinationId(dest);
+
+ // SID在new对象的时候已经生成
+
+ // 内存区域——按位写
+ rstCmd.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_BIT);
+
+ int start = rstBlObj.getKszdz();
+ int end = rstBlObj.getJszdz();
+ int bit = rstBlObj.getSzw();
+
+ // 开始字地址
+ rstCmd.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(start, 2)));
+
+ // 位地址
+ rstCmd.setBit(bit);
+
+ // 位数
+ rstCmd.setCount(end - start + 1);
+
+ // 位内容
+ rstCmd.setValue(new byte[] {(byte) SetDsRstBitCommand.DS_RST} );
+
+ // 解析命令对象为字节数组
+ byte[] content = finspi.messageToBytes(rstCmd);
+
+ // 通过socket接口发送出去
+ ACUClientUtil.getInstance().sendACUCommand(client, content);
+ } else {
+ jResult.put("success", false);
+ jResult.put("code", "4");
+ jResult.put("reason", UnicodeConvertor.string2Unicode("未找到资产对应的解锁井盖变量"));
+
+ returnToFront(jResult);
+ return null;
+ }
+
+ // 返回成功给界面
+ jResult.put("success", true);
+ jResult.put("code", "0");
+ returnToFront(jResult);
+
+ return null;
+ } else {
+ jResult.put("success", false);
+ jResult.put("code", "3");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("PLC主机不在线"));
+
+ returnToFront(jResult);
+ return null;
+ }
+ }
+
+ /**
+ * 给前端返回
+ * @param jResult
+ * @throws Exception
+ */
+ private void returnToFront(JSONObject jResult) throws Exception {
+ // 返回jsonp格式的数据
+ if (null != format && format.equalsIgnoreCase("jsonp") == true) {
+ ServletActionContext.getResponse().getWriter().write(jsoncallback + "(" + jResult.toString() + ");");
+ }
+
+ ServletActionContext.getResponse().getWriter().write(jResult.toString());
+ }
+
+}
diff --git a/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java
index fe487b7..e1de835 100644
--- a/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java
+++ b/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java
@@ -181,6 +181,8 @@
char lockBt = dataStr.charAt(dataStr.length() - 1 - loffset * 16 - lbit); // 井盖解锁/锁定标志位
getJgsd().add(lockBt == '0' ? true : false); //0-锁定;1-解锁
+
+ logger.info("[" + zcbh + "][井盖状态" + getJgzt().get(i) + "][井盖锁定" + getJgsd().get(i) + "]");
}
logger.info("解析[读取井盖状态]响应指令结束");
diff --git a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java
index fda3077..4366960 100644
--- a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java
+++ b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java
@@ -167,7 +167,7 @@
String fjzcbh = fj.getAssetcode();
// 调用远程接口启动风机
- HttpRequest.sendGet(baseURL + "remote/turnOnFj.do", "zcbh=" + fjzcbh);
+ HttpRequest.sendGet(baseURL + "remote/turnOnFj.action", "zcbh=" + fjzcbh);
}
}
}
diff --git a/src/com/szpg/rmi/RemoteCH4CommandAction.java b/src/com/szpg/rmi/RemoteCH4CommandAction.java
index aff3866..cb63ae1 100644
--- a/src/com/szpg/rmi/RemoteCH4CommandAction.java
+++ b/src/com/szpg/rmi/RemoteCH4CommandAction.java
@@ -201,7 +201,7 @@
command.setMessageProducerId(sour);
command.setDestinationId(dest);
- command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD);
+ command.setMemoryArea(FINSConstants.MEMORY_DM_AREA);
int start = blObj.getKszdz();
int end = blObj.getJszdz();
diff --git a/src/com/szpg/rmi/RemoteCOCommandAction.java b/src/com/szpg/rmi/RemoteCOCommandAction.java
index dde2ac3..728211c 100644
--- a/src/com/szpg/rmi/RemoteCOCommandAction.java
+++ b/src/com/szpg/rmi/RemoteCOCommandAction.java
@@ -201,7 +201,7 @@
command.setMessageProducerId(sour);
command.setDestinationId(dest);
- command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD);
+ command.setMemoryArea(FINSConstants.MEMORY_DM_AREA);
int start = blObj.getKszdz();
int end = blObj.getJszdz();
diff --git a/src/com/szpg/rmi/RemoteDSCommandAction.java b/src/com/szpg/rmi/RemoteDSCommandAction.java
new file mode 100644
index 0000000..d1ec179
--- /dev/null
+++ b/src/com/szpg/rmi/RemoteDSCommandAction.java
@@ -0,0 +1,257 @@
+package com.szpg.rmi;
+
+import org.apache.log4j.Logger;
+import org.apache.struts2.ServletActionContext;
+
+import com.opensymphony.xwork2.ActionSupport;
+import com.szpg.db.dao.PgAcuDao;
+import com.szpg.db.dao.PgHjsbblDao;
+import com.szpg.db.dao.impl.PgAcuDaoImpl;
+import com.szpg.db.dao.impl.PgHjsbblDaoImpl;
+import com.szpg.db.data.PgAcu;
+import com.szpg.db.data.PgHjsbbl;
+import com.szpg.plc.message.AppMessageConstants;
+import com.szpg.plc.message.command.ReadMemoryCommand;
+import com.szpg.plc.message.command.write.SetDsRstBitCommand;
+import com.szpg.plc.protocol.DTProtocolInterface;
+import com.szpg.plc.protocol.ProtocolFactory;
+import com.szpg.plc.protocol.fins.FINSConstants;
+import com.szpg.plc.server.ACUClient;
+import com.szpg.plc.server.ACUClientUtil;
+import com.szpg.plc.util.ByteUtil;
+import com.szpg.service.ReadControllerStatusService;
+import com.szpg.util.Configure;
+import com.szpg.util.UnicodeConvertor;
+
+import z.json.JSONObject;
+
+public class RemoteDSCommandAction extends ActionSupport {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 2221187086461756012L;
+
+ private String zcbh;
+
+ private String format;
+ private String jsoncallback;
+
+ private Logger logger = Logger.getLogger(this.getClass().getName());
+
+ public String getZcbh() {
+ return zcbh;
+ }
+
+ public void setZcbh(String zcbh) {
+ this.zcbh = zcbh;
+ }
+
+ public String getFormat() {
+ return format;
+ }
+
+ public void setFormat(String format) {
+ this.format = format;
+ }
+
+ public String getJsoncallback() {
+ return jsoncallback;
+ }
+
+ public void setJsoncallback(String jsoncallback) {
+ this.jsoncallback = jsoncallback;
+ }
+
+ /**
+ * 读取对射实时状态
+ * @return
+ * @throws Exception
+ */
+ public String readDsStatus() throws Exception {
+ // 返回结果
+ JSONObject jResult = new JSONObject();
+
+ PgAcuDao acuDao = new PgAcuDaoImpl();
+
+ if (null == zcbh || zcbh.equals("") == true) {
+ jResult.put("success", false);
+ jResult.put("code", "1");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("资产编号为空"));
+
+ returnToFront(jResult);
+ return null;
+ }
+
+ String acucode = zcbh.substring(0, zcbh.indexOf(".", 6));
+ PgAcu acu = acuDao.findACUByCode(acucode);
+ if (null == acu) {
+ jResult.put("success", false);
+ jResult.put("code", "2");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("未找到资产对应的PLC主机"));
+
+ returnToFront(jResult);
+ return null;
+ }
+
+ ACUClient client = ACUClientUtil.getInstance().getClients().get(acu.getAcu_host() + ":" + acu.getAcu_port());
+ if (null != client) {
+ ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS);
+ String sour = Configure.getProperty("sys", "LOCALHOST.NET") +
+ Configure.getProperty("sys", "LOCALHOST.NODE") +
+ Configure.getProperty("sys", "LOCALHOST.UNIT");
+ command.setMessageProducerId(sour);
+
+ String dest = client.getNet() + client.getNode() + client.getUnit();
+ command.setDestinationId(dest);
+ command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); //按字读取内容
+
+ try {
+ // 设置读取的地址范围
+ // 从配置文件读取而来
+ command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DSALM.START")), 2)) + "00");
+ command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DSALM.WORDCOUNT")));
+
+ // 调用服务过程执行命令发送服务
+ ReadControllerStatusService service = new ReadControllerStatusService();
+ service.executeService(client, command);
+ logger.info(command);
+ } catch (Exception ex) {
+ logger.error("发送查询对射指令异常" + ex);
+ }
+
+ jResult.put("success", true);
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("发送成功,请等待响应"));
+
+ returnToFront(jResult);
+ return null;
+ } else {
+ jResult.put("success", false);
+ jResult.put("code", "3");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("PLC主机不在线"));
+
+ returnToFront(jResult);
+ return null;
+ }
+ }
+
+ /**
+ * 清除对射报警
+ * @return
+ * @throws Exception
+ */
+ public String clearDsAlarm() throws Exception {
+ // 返回结果
+ JSONObject jResult = new JSONObject();
+
+ if (null == zcbh || zcbh.equals("") == true) {
+ jResult.put("success", false);
+ jResult.put("code", "1");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("资产编号为空"));
+
+ returnToFront(jResult);
+ return null;
+ }
+
+ // 查找ACU的信息
+ PgAcuDao acuDao = new PgAcuDaoImpl();
+
+ String acucode = zcbh.substring(0, zcbh.indexOf(".", 6));
+ PgAcu acu = acuDao.findACUByCode(acucode);
+ if (null == acu) {
+ jResult.put("success", false);
+ jResult.put("code", "2");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("未找到资产对应的PLC主机"));
+
+ returnToFront(jResult);
+ return null;
+ }
+
+ ACUClient client = ACUClientUtil.getInstance().getClients().get(acu.getAcu_host() + ":" + acu.getAcu_port());
+ if (null != client) {
+ // 源地址
+ String sour = Configure.getProperty("sys", "LOCALHOST.NET") +
+ Configure.getProperty("sys", "LOCALHOST.NODE") +
+ Configure.getProperty("sys", "LOCALHOST.UNIT");
+
+ // 目标地址
+ String dest = client.getNet() + client.getNode() + client.getUnit();
+
+ DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol();
+
+ PgHjsbblDao blDao = new PgHjsbblDaoImpl();
+
+ // 构建指令
+ SetDsRstBitCommand rstCmd = new SetDsRstBitCommand();
+ rstCmd.setRst(SetDsRstBitCommand.DS_RST);
+ PgHjsbbl rstBlObj = blDao.findBlByBh(zcbh + ".RST");
+ if (null != rstBlObj) {
+ rstCmd.setMessageProducerId(sour);
+ rstCmd.setDestinationId(dest);
+
+ // SID在new对象的时候已经生成
+
+ // 内存区域——按位写
+ rstCmd.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_BIT);
+
+ int start = rstBlObj.getKszdz();
+ int end = rstBlObj.getJszdz();
+ int bit = rstBlObj.getSzw();
+
+ // 开始字地址
+ rstCmd.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(start, 2)));
+
+ // 位地址
+ rstCmd.setBit(bit);
+
+ // 位数
+ rstCmd.setCount(end - start + 1);
+
+ // 位内容
+ rstCmd.setValue(new byte[] {(byte) SetDsRstBitCommand.DS_RST} );
+
+ // 解析命令对象为字节数组
+ byte[] content = finspi.messageToBytes(rstCmd);
+
+ // 通过socket接口发送出去
+ ACUClientUtil.getInstance().sendACUCommand(client, content);
+ } else {
+ jResult.put("success", false);
+ jResult.put("code", "4");
+ jResult.put("reason", UnicodeConvertor.string2Unicode("未找到资产对应的解锁井盖变量"));
+
+ returnToFront(jResult);
+ return null;
+ }
+
+ // 返回成功给界面
+ jResult.put("success", true);
+ jResult.put("code", "0");
+ returnToFront(jResult);
+
+ return null;
+ } else {
+ jResult.put("success", false);
+ jResult.put("code", "3");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("PLC主机不在线"));
+
+ returnToFront(jResult);
+ return null;
+ }
+ }
+
+ /**
+ * 给前端返回
+ * @param jResult
+ * @throws Exception
+ */
+ private void returnToFront(JSONObject jResult) throws Exception {
+ // 返回jsonp格式的数据
+ if (null != format && format.equalsIgnoreCase("jsonp") == true) {
+ ServletActionContext.getResponse().getWriter().write(jsoncallback + "(" + jResult.toString() + ");");
+ }
+
+ ServletActionContext.getResponse().getWriter().write(jResult.toString());
+ }
+
+}
diff --git a/src/com/szpg/rmi/RemoteFJCommandAction.java b/src/com/szpg/rmi/RemoteFJCommandAction.java
index b0a1ed1..81510c8 100644
--- a/src/com/szpg/rmi/RemoteFJCommandAction.java
+++ b/src/com/szpg/rmi/RemoteFJCommandAction.java
@@ -4,14 +4,10 @@
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
-import com.szpg.db.dao.PgAcuCmdDao;
import com.szpg.db.dao.PgAcuDao;
-import com.szpg.db.dao.impl.PgAcuCmdDaoImpl;
import com.szpg.db.dao.impl.PgAcuDaoImpl;
import com.szpg.db.data.PgAcu;
-import com.szpg.db.data.PgAcuCmd;
import com.szpg.plc.message.AppMessageConstants;
-import com.szpg.plc.message.CommandResponse;
import com.szpg.plc.message.command.ReadMemoryCommand;
import com.szpg.plc.message.command.write.SetFjOffBitCommand;
import com.szpg.plc.message.command.write.SetFjOnBitCommand;
@@ -24,6 +20,7 @@
import com.szpg.service.ReadControllerStatusService;
import com.szpg.service.command.ExhaustFanCommandService;
import com.szpg.util.Configure;
+import com.szpg.util.HttpRequest;
import com.szpg.util.UnicodeConvertor;
import z.json.JSONObject;
@@ -120,7 +117,7 @@
service.executeService(client, command);
logger.info(command);
} catch (Exception ex) {
- logger.error("发送查询温湿度指令异常" + ex);
+ logger.error("发送查询风机状态指令异常" + ex);
}
jResult.put("success", true);
@@ -194,6 +191,7 @@
// 通过socket接口发送出去
ACUClientUtil.getInstance().sendACUCommand(client, content);
+ Logger.getLogger(this.getClass().getName()).info(setOnCmd);
} else {
jResult.put("success", false);
jResult.put("code", "4");
@@ -203,72 +201,27 @@
return null;
}
- // 3将命令存入数据库
- PgAcuCmdDao cmdDao = new PgAcuCmdDaoImpl();
- PgAcuCmd cmd = new PgAcuCmd();
- cmd.setCmd_type(setOnCmd.getCommandType());
- cmd.setDest_acu_code(acucode);
- cmd.setTm(setOnCmd.getTime().getTime());
- cmdDao.addCmdRecord(cmd);
-
- // 4阻塞,循环查找响应消息池,找到对应的响应消息
- boolean flag = false;
- int times = 0;
- CommandResponse response = null;
- while (flag == false && times < 240) {
- response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId());
-
- if (null != response && response.equals("") == false) {
- flag = true;
- }
-
- times++;
- try {
- Thread.sleep(500);
- } catch (InterruptedException e) {
- // 目前的处理流程为1)记录日志;2)将命令置为超时
- logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e);
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "5");
- jResult.put("reason", UnicodeConvertor.string2Unicode("查找命令的响应消息时异常"));
-
- returnToFront(jResult);
- return null;
- }
+ // 20190515增加的逻辑,在置1打开位一秒钟后,将该位复位
+ Thread.sleep(1 * 1000);
+ setOnCmd = ExhaustFanCommandService.buildResetTurnOnCommand(sour, dest, zcbh);
+ if (null != setOnCmd) {
+ byte[] content = finspi.messageToBytes(setOnCmd);
+ ACUClientUtil.getInstance().sendACUCommand(client, content);
+ Logger.getLogger(this.getClass().getName()).info("[打开风机置1位复位]");
}
- // 5若未超时,将值存入数据库
- if (null != response) {
- // 6根据命令类型的不同将监测值存入对应的数据库
- response.afterAction();
-
- // 成功返回
- jResult.put("success", true);
- jResult.put("code", "0");
-
- // 20190515增加的逻辑,在置1打开位一秒钟后,将该位复位
- setOnCmd = ExhaustFanCommandService.buildResetTurnOnCommand(sour, dest, zcbh);
- if (null != setOnCmd) {
- byte[] content = finspi.messageToBytes(setOnCmd);
- ACUClientUtil.getInstance().sendACUCommand(client, content);
- }
-
- returnToFront(jResult);
- return null;
- } else {
- // 9超时,将命令的超时标志位置1
- logger.warn("命令超时" + cmd.getId());
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "6");
- jResult.put("reason", UnicodeConvertor.string2Unicode("命令发送超时"));
-
- returnToFront(jResult);
- return null;
- }
+ // 5秒后查询一次风机的状态
+ Thread.sleep(5 * 1000);
+ // 调用远程接口查询风机状态
+ String baseURL = Configure.getProperty("sys", "PGDSC_API_URL");
+ HttpRequest.sendGet(baseURL + "remote/readFjStatus.action", "zcbh=" + zcbh);
+
+ // 返回成功给界面
+ jResult.put("success", true);
+ jResult.put("code", "0");
+ returnToFront(jResult);
+
+ return null;
} else {
jResult.put("success", false);
jResult.put("code", "3");
@@ -334,6 +287,7 @@
// 通过socket接口发送出去
ACUClientUtil.getInstance().sendACUCommand(client, content);
+ Logger.getLogger(this.getClass().getName()).info(setOffCmd);
} else {
jResult.put("success", false);
jResult.put("code", "4");
@@ -343,72 +297,27 @@
return null;
}
- // 3将命令存入数据库
- PgAcuCmdDao cmdDao = new PgAcuCmdDaoImpl();
- PgAcuCmd cmd = new PgAcuCmd();
- cmd.setCmd_type(setOffCmd.getCommandType());
- cmd.setDest_acu_code(acucode);
- cmd.setTm(setOffCmd.getTime().getTime());
- cmdDao.addCmdRecord(cmd);
-
- // 4阻塞,循环查找响应消息池,找到对应的响应消息
- boolean flag = false;
- int times = 0;
- CommandResponse response = null;
- while (flag == false && times < 240) {
- response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId());
-
- if (null != response && response.equals("") == false) {
- flag = true;
- }
-
- times++;
- try {
- Thread.sleep(500);
- } catch (InterruptedException e) {
- // 目前的处理流程为1)记录日志;2)将命令置为超时
- logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e);
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "5");
- jResult.put("reason", UnicodeConvertor.string2Unicode("查找命令的响应消息时异常"));
-
- returnToFront(jResult);
- return null;
- }
+ // 20190515增加的逻辑,在置1打开位一秒钟后,将该位复位
+ Thread.sleep(1 * 1000);
+ setOffCmd = ExhaustFanCommandService.buildResetTurnOffCommand(sour, dest, zcbh);
+ if (null != setOffCmd) {
+ byte[] content = finspi.messageToBytes(setOffCmd);
+ ACUClientUtil.getInstance().sendACUCommand(client, content);
+ Logger.getLogger(this.getClass().getName()).info("[关闭风机置1位复位]");
}
- // 5若未超时,将值存入数据库
- if (null != response) {
- // 6根据命令类型的不同将监测值存入对应的数据库
- response.afterAction();
-
- // 成功返回
- jResult.put("success", true);
- jResult.put("code", "0");
-
- // 20190515增加的逻辑,在置1打开位一秒钟后,将该位复位
- setOffCmd = ExhaustFanCommandService.buildResetTurnOffCommand(sour, dest, zcbh);
- if (null != setOffCmd) {
- byte[] content = finspi.messageToBytes(setOffCmd);
- ACUClientUtil.getInstance().sendACUCommand(client, content);
- }
-
- returnToFront(jResult);
- return null;
- } else {
- // 9超时,将命令的超时标志位置1
- logger.warn("命令超时" + cmd.getId());
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "6");
- jResult.put("reason", UnicodeConvertor.string2Unicode("命令发送超时"));
-
- returnToFront(jResult);
- return null;
- }
+ // 5秒后查询一次照明的状态
+ Thread.sleep(5 * 1000);
+ // 调用远程接口查询风机状态
+ String baseURL = Configure.getProperty("sys", "PGDSC_API_URL");
+ HttpRequest.sendGet(baseURL + "remote/readFjStatus.action", "zcbh=" + zcbh);
+
+ // 返回成功给界面
+ jResult.put("success", true);
+ jResult.put("code", "0");
+ returnToFront(jResult);
+
+ return null;
} else {
jResult.put("success", false);
jResult.put("code", "3");
diff --git a/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java
index fe487b7..e1de835 100644
--- a/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java
+++ b/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java
@@ -181,6 +181,8 @@
char lockBt = dataStr.charAt(dataStr.length() - 1 - loffset * 16 - lbit); // 井盖解锁/锁定标志位
getJgsd().add(lockBt == '0' ? true : false); //0-锁定;1-解锁
+
+ logger.info("[" + zcbh + "][井盖状态" + getJgzt().get(i) + "][井盖锁定" + getJgsd().get(i) + "]");
}
logger.info("解析[读取井盖状态]响应指令结束");
diff --git a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java
index fda3077..4366960 100644
--- a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java
+++ b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java
@@ -167,7 +167,7 @@
String fjzcbh = fj.getAssetcode();
// 调用远程接口启动风机
- HttpRequest.sendGet(baseURL + "remote/turnOnFj.do", "zcbh=" + fjzcbh);
+ HttpRequest.sendGet(baseURL + "remote/turnOnFj.action", "zcbh=" + fjzcbh);
}
}
}
diff --git a/src/com/szpg/rmi/RemoteCH4CommandAction.java b/src/com/szpg/rmi/RemoteCH4CommandAction.java
index aff3866..cb63ae1 100644
--- a/src/com/szpg/rmi/RemoteCH4CommandAction.java
+++ b/src/com/szpg/rmi/RemoteCH4CommandAction.java
@@ -201,7 +201,7 @@
command.setMessageProducerId(sour);
command.setDestinationId(dest);
- command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD);
+ command.setMemoryArea(FINSConstants.MEMORY_DM_AREA);
int start = blObj.getKszdz();
int end = blObj.getJszdz();
diff --git a/src/com/szpg/rmi/RemoteCOCommandAction.java b/src/com/szpg/rmi/RemoteCOCommandAction.java
index dde2ac3..728211c 100644
--- a/src/com/szpg/rmi/RemoteCOCommandAction.java
+++ b/src/com/szpg/rmi/RemoteCOCommandAction.java
@@ -201,7 +201,7 @@
command.setMessageProducerId(sour);
command.setDestinationId(dest);
- command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD);
+ command.setMemoryArea(FINSConstants.MEMORY_DM_AREA);
int start = blObj.getKszdz();
int end = blObj.getJszdz();
diff --git a/src/com/szpg/rmi/RemoteDSCommandAction.java b/src/com/szpg/rmi/RemoteDSCommandAction.java
new file mode 100644
index 0000000..d1ec179
--- /dev/null
+++ b/src/com/szpg/rmi/RemoteDSCommandAction.java
@@ -0,0 +1,257 @@
+package com.szpg.rmi;
+
+import org.apache.log4j.Logger;
+import org.apache.struts2.ServletActionContext;
+
+import com.opensymphony.xwork2.ActionSupport;
+import com.szpg.db.dao.PgAcuDao;
+import com.szpg.db.dao.PgHjsbblDao;
+import com.szpg.db.dao.impl.PgAcuDaoImpl;
+import com.szpg.db.dao.impl.PgHjsbblDaoImpl;
+import com.szpg.db.data.PgAcu;
+import com.szpg.db.data.PgHjsbbl;
+import com.szpg.plc.message.AppMessageConstants;
+import com.szpg.plc.message.command.ReadMemoryCommand;
+import com.szpg.plc.message.command.write.SetDsRstBitCommand;
+import com.szpg.plc.protocol.DTProtocolInterface;
+import com.szpg.plc.protocol.ProtocolFactory;
+import com.szpg.plc.protocol.fins.FINSConstants;
+import com.szpg.plc.server.ACUClient;
+import com.szpg.plc.server.ACUClientUtil;
+import com.szpg.plc.util.ByteUtil;
+import com.szpg.service.ReadControllerStatusService;
+import com.szpg.util.Configure;
+import com.szpg.util.UnicodeConvertor;
+
+import z.json.JSONObject;
+
+public class RemoteDSCommandAction extends ActionSupport {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 2221187086461756012L;
+
+ private String zcbh;
+
+ private String format;
+ private String jsoncallback;
+
+ private Logger logger = Logger.getLogger(this.getClass().getName());
+
+ public String getZcbh() {
+ return zcbh;
+ }
+
+ public void setZcbh(String zcbh) {
+ this.zcbh = zcbh;
+ }
+
+ public String getFormat() {
+ return format;
+ }
+
+ public void setFormat(String format) {
+ this.format = format;
+ }
+
+ public String getJsoncallback() {
+ return jsoncallback;
+ }
+
+ public void setJsoncallback(String jsoncallback) {
+ this.jsoncallback = jsoncallback;
+ }
+
+ /**
+ * 读取对射实时状态
+ * @return
+ * @throws Exception
+ */
+ public String readDsStatus() throws Exception {
+ // 返回结果
+ JSONObject jResult = new JSONObject();
+
+ PgAcuDao acuDao = new PgAcuDaoImpl();
+
+ if (null == zcbh || zcbh.equals("") == true) {
+ jResult.put("success", false);
+ jResult.put("code", "1");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("资产编号为空"));
+
+ returnToFront(jResult);
+ return null;
+ }
+
+ String acucode = zcbh.substring(0, zcbh.indexOf(".", 6));
+ PgAcu acu = acuDao.findACUByCode(acucode);
+ if (null == acu) {
+ jResult.put("success", false);
+ jResult.put("code", "2");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("未找到资产对应的PLC主机"));
+
+ returnToFront(jResult);
+ return null;
+ }
+
+ ACUClient client = ACUClientUtil.getInstance().getClients().get(acu.getAcu_host() + ":" + acu.getAcu_port());
+ if (null != client) {
+ ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS);
+ String sour = Configure.getProperty("sys", "LOCALHOST.NET") +
+ Configure.getProperty("sys", "LOCALHOST.NODE") +
+ Configure.getProperty("sys", "LOCALHOST.UNIT");
+ command.setMessageProducerId(sour);
+
+ String dest = client.getNet() + client.getNode() + client.getUnit();
+ command.setDestinationId(dest);
+ command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); //按字读取内容
+
+ try {
+ // 设置读取的地址范围
+ // 从配置文件读取而来
+ command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DSALM.START")), 2)) + "00");
+ command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DSALM.WORDCOUNT")));
+
+ // 调用服务过程执行命令发送服务
+ ReadControllerStatusService service = new ReadControllerStatusService();
+ service.executeService(client, command);
+ logger.info(command);
+ } catch (Exception ex) {
+ logger.error("发送查询对射指令异常" + ex);
+ }
+
+ jResult.put("success", true);
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("发送成功,请等待响应"));
+
+ returnToFront(jResult);
+ return null;
+ } else {
+ jResult.put("success", false);
+ jResult.put("code", "3");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("PLC主机不在线"));
+
+ returnToFront(jResult);
+ return null;
+ }
+ }
+
+ /**
+ * 清除对射报警
+ * @return
+ * @throws Exception
+ */
+ public String clearDsAlarm() throws Exception {
+ // 返回结果
+ JSONObject jResult = new JSONObject();
+
+ if (null == zcbh || zcbh.equals("") == true) {
+ jResult.put("success", false);
+ jResult.put("code", "1");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("资产编号为空"));
+
+ returnToFront(jResult);
+ return null;
+ }
+
+ // 查找ACU的信息
+ PgAcuDao acuDao = new PgAcuDaoImpl();
+
+ String acucode = zcbh.substring(0, zcbh.indexOf(".", 6));
+ PgAcu acu = acuDao.findACUByCode(acucode);
+ if (null == acu) {
+ jResult.put("success", false);
+ jResult.put("code", "2");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("未找到资产对应的PLC主机"));
+
+ returnToFront(jResult);
+ return null;
+ }
+
+ ACUClient client = ACUClientUtil.getInstance().getClients().get(acu.getAcu_host() + ":" + acu.getAcu_port());
+ if (null != client) {
+ // 源地址
+ String sour = Configure.getProperty("sys", "LOCALHOST.NET") +
+ Configure.getProperty("sys", "LOCALHOST.NODE") +
+ Configure.getProperty("sys", "LOCALHOST.UNIT");
+
+ // 目标地址
+ String dest = client.getNet() + client.getNode() + client.getUnit();
+
+ DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol();
+
+ PgHjsbblDao blDao = new PgHjsbblDaoImpl();
+
+ // 构建指令
+ SetDsRstBitCommand rstCmd = new SetDsRstBitCommand();
+ rstCmd.setRst(SetDsRstBitCommand.DS_RST);
+ PgHjsbbl rstBlObj = blDao.findBlByBh(zcbh + ".RST");
+ if (null != rstBlObj) {
+ rstCmd.setMessageProducerId(sour);
+ rstCmd.setDestinationId(dest);
+
+ // SID在new对象的时候已经生成
+
+ // 内存区域——按位写
+ rstCmd.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_BIT);
+
+ int start = rstBlObj.getKszdz();
+ int end = rstBlObj.getJszdz();
+ int bit = rstBlObj.getSzw();
+
+ // 开始字地址
+ rstCmd.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(start, 2)));
+
+ // 位地址
+ rstCmd.setBit(bit);
+
+ // 位数
+ rstCmd.setCount(end - start + 1);
+
+ // 位内容
+ rstCmd.setValue(new byte[] {(byte) SetDsRstBitCommand.DS_RST} );
+
+ // 解析命令对象为字节数组
+ byte[] content = finspi.messageToBytes(rstCmd);
+
+ // 通过socket接口发送出去
+ ACUClientUtil.getInstance().sendACUCommand(client, content);
+ } else {
+ jResult.put("success", false);
+ jResult.put("code", "4");
+ jResult.put("reason", UnicodeConvertor.string2Unicode("未找到资产对应的解锁井盖变量"));
+
+ returnToFront(jResult);
+ return null;
+ }
+
+ // 返回成功给界面
+ jResult.put("success", true);
+ jResult.put("code", "0");
+ returnToFront(jResult);
+
+ return null;
+ } else {
+ jResult.put("success", false);
+ jResult.put("code", "3");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("PLC主机不在线"));
+
+ returnToFront(jResult);
+ return null;
+ }
+ }
+
+ /**
+ * 给前端返回
+ * @param jResult
+ * @throws Exception
+ */
+ private void returnToFront(JSONObject jResult) throws Exception {
+ // 返回jsonp格式的数据
+ if (null != format && format.equalsIgnoreCase("jsonp") == true) {
+ ServletActionContext.getResponse().getWriter().write(jsoncallback + "(" + jResult.toString() + ");");
+ }
+
+ ServletActionContext.getResponse().getWriter().write(jResult.toString());
+ }
+
+}
diff --git a/src/com/szpg/rmi/RemoteFJCommandAction.java b/src/com/szpg/rmi/RemoteFJCommandAction.java
index b0a1ed1..81510c8 100644
--- a/src/com/szpg/rmi/RemoteFJCommandAction.java
+++ b/src/com/szpg/rmi/RemoteFJCommandAction.java
@@ -4,14 +4,10 @@
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
-import com.szpg.db.dao.PgAcuCmdDao;
import com.szpg.db.dao.PgAcuDao;
-import com.szpg.db.dao.impl.PgAcuCmdDaoImpl;
import com.szpg.db.dao.impl.PgAcuDaoImpl;
import com.szpg.db.data.PgAcu;
-import com.szpg.db.data.PgAcuCmd;
import com.szpg.plc.message.AppMessageConstants;
-import com.szpg.plc.message.CommandResponse;
import com.szpg.plc.message.command.ReadMemoryCommand;
import com.szpg.plc.message.command.write.SetFjOffBitCommand;
import com.szpg.plc.message.command.write.SetFjOnBitCommand;
@@ -24,6 +20,7 @@
import com.szpg.service.ReadControllerStatusService;
import com.szpg.service.command.ExhaustFanCommandService;
import com.szpg.util.Configure;
+import com.szpg.util.HttpRequest;
import com.szpg.util.UnicodeConvertor;
import z.json.JSONObject;
@@ -120,7 +117,7 @@
service.executeService(client, command);
logger.info(command);
} catch (Exception ex) {
- logger.error("发送查询温湿度指令异常" + ex);
+ logger.error("发送查询风机状态指令异常" + ex);
}
jResult.put("success", true);
@@ -194,6 +191,7 @@
// 通过socket接口发送出去
ACUClientUtil.getInstance().sendACUCommand(client, content);
+ Logger.getLogger(this.getClass().getName()).info(setOnCmd);
} else {
jResult.put("success", false);
jResult.put("code", "4");
@@ -203,72 +201,27 @@
return null;
}
- // 3将命令存入数据库
- PgAcuCmdDao cmdDao = new PgAcuCmdDaoImpl();
- PgAcuCmd cmd = new PgAcuCmd();
- cmd.setCmd_type(setOnCmd.getCommandType());
- cmd.setDest_acu_code(acucode);
- cmd.setTm(setOnCmd.getTime().getTime());
- cmdDao.addCmdRecord(cmd);
-
- // 4阻塞,循环查找响应消息池,找到对应的响应消息
- boolean flag = false;
- int times = 0;
- CommandResponse response = null;
- while (flag == false && times < 240) {
- response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId());
-
- if (null != response && response.equals("") == false) {
- flag = true;
- }
-
- times++;
- try {
- Thread.sleep(500);
- } catch (InterruptedException e) {
- // 目前的处理流程为1)记录日志;2)将命令置为超时
- logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e);
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "5");
- jResult.put("reason", UnicodeConvertor.string2Unicode("查找命令的响应消息时异常"));
-
- returnToFront(jResult);
- return null;
- }
+ // 20190515增加的逻辑,在置1打开位一秒钟后,将该位复位
+ Thread.sleep(1 * 1000);
+ setOnCmd = ExhaustFanCommandService.buildResetTurnOnCommand(sour, dest, zcbh);
+ if (null != setOnCmd) {
+ byte[] content = finspi.messageToBytes(setOnCmd);
+ ACUClientUtil.getInstance().sendACUCommand(client, content);
+ Logger.getLogger(this.getClass().getName()).info("[打开风机置1位复位]");
}
- // 5若未超时,将值存入数据库
- if (null != response) {
- // 6根据命令类型的不同将监测值存入对应的数据库
- response.afterAction();
-
- // 成功返回
- jResult.put("success", true);
- jResult.put("code", "0");
-
- // 20190515增加的逻辑,在置1打开位一秒钟后,将该位复位
- setOnCmd = ExhaustFanCommandService.buildResetTurnOnCommand(sour, dest, zcbh);
- if (null != setOnCmd) {
- byte[] content = finspi.messageToBytes(setOnCmd);
- ACUClientUtil.getInstance().sendACUCommand(client, content);
- }
-
- returnToFront(jResult);
- return null;
- } else {
- // 9超时,将命令的超时标志位置1
- logger.warn("命令超时" + cmd.getId());
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "6");
- jResult.put("reason", UnicodeConvertor.string2Unicode("命令发送超时"));
-
- returnToFront(jResult);
- return null;
- }
+ // 5秒后查询一次风机的状态
+ Thread.sleep(5 * 1000);
+ // 调用远程接口查询风机状态
+ String baseURL = Configure.getProperty("sys", "PGDSC_API_URL");
+ HttpRequest.sendGet(baseURL + "remote/readFjStatus.action", "zcbh=" + zcbh);
+
+ // 返回成功给界面
+ jResult.put("success", true);
+ jResult.put("code", "0");
+ returnToFront(jResult);
+
+ return null;
} else {
jResult.put("success", false);
jResult.put("code", "3");
@@ -334,6 +287,7 @@
// 通过socket接口发送出去
ACUClientUtil.getInstance().sendACUCommand(client, content);
+ Logger.getLogger(this.getClass().getName()).info(setOffCmd);
} else {
jResult.put("success", false);
jResult.put("code", "4");
@@ -343,72 +297,27 @@
return null;
}
- // 3将命令存入数据库
- PgAcuCmdDao cmdDao = new PgAcuCmdDaoImpl();
- PgAcuCmd cmd = new PgAcuCmd();
- cmd.setCmd_type(setOffCmd.getCommandType());
- cmd.setDest_acu_code(acucode);
- cmd.setTm(setOffCmd.getTime().getTime());
- cmdDao.addCmdRecord(cmd);
-
- // 4阻塞,循环查找响应消息池,找到对应的响应消息
- boolean flag = false;
- int times = 0;
- CommandResponse response = null;
- while (flag == false && times < 240) {
- response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId());
-
- if (null != response && response.equals("") == false) {
- flag = true;
- }
-
- times++;
- try {
- Thread.sleep(500);
- } catch (InterruptedException e) {
- // 目前的处理流程为1)记录日志;2)将命令置为超时
- logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e);
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "5");
- jResult.put("reason", UnicodeConvertor.string2Unicode("查找命令的响应消息时异常"));
-
- returnToFront(jResult);
- return null;
- }
+ // 20190515增加的逻辑,在置1打开位一秒钟后,将该位复位
+ Thread.sleep(1 * 1000);
+ setOffCmd = ExhaustFanCommandService.buildResetTurnOffCommand(sour, dest, zcbh);
+ if (null != setOffCmd) {
+ byte[] content = finspi.messageToBytes(setOffCmd);
+ ACUClientUtil.getInstance().sendACUCommand(client, content);
+ Logger.getLogger(this.getClass().getName()).info("[关闭风机置1位复位]");
}
- // 5若未超时,将值存入数据库
- if (null != response) {
- // 6根据命令类型的不同将监测值存入对应的数据库
- response.afterAction();
-
- // 成功返回
- jResult.put("success", true);
- jResult.put("code", "0");
-
- // 20190515增加的逻辑,在置1打开位一秒钟后,将该位复位
- setOffCmd = ExhaustFanCommandService.buildResetTurnOffCommand(sour, dest, zcbh);
- if (null != setOffCmd) {
- byte[] content = finspi.messageToBytes(setOffCmd);
- ACUClientUtil.getInstance().sendACUCommand(client, content);
- }
-
- returnToFront(jResult);
- return null;
- } else {
- // 9超时,将命令的超时标志位置1
- logger.warn("命令超时" + cmd.getId());
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "6");
- jResult.put("reason", UnicodeConvertor.string2Unicode("命令发送超时"));
-
- returnToFront(jResult);
- return null;
- }
+ // 5秒后查询一次照明的状态
+ Thread.sleep(5 * 1000);
+ // 调用远程接口查询风机状态
+ String baseURL = Configure.getProperty("sys", "PGDSC_API_URL");
+ HttpRequest.sendGet(baseURL + "remote/readFjStatus.action", "zcbh=" + zcbh);
+
+ // 返回成功给界面
+ jResult.put("success", true);
+ jResult.put("code", "0");
+ returnToFront(jResult);
+
+ return null;
} else {
jResult.put("success", false);
jResult.put("code", "3");
diff --git a/src/com/szpg/rmi/RemoteHSCommandAction.java b/src/com/szpg/rmi/RemoteHSCommandAction.java
index b074b7b..97144c2 100644
--- a/src/com/szpg/rmi/RemoteHSCommandAction.java
+++ b/src/com/szpg/rmi/RemoteHSCommandAction.java
@@ -201,7 +201,7 @@
command.setMessageProducerId(sour);
command.setDestinationId(dest);
- command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD);
+ command.setMemoryArea(FINSConstants.MEMORY_DM_AREA);
int start = blObj.getKszdz();
int end = blObj.getJszdz();
diff --git a/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java
index fe487b7..e1de835 100644
--- a/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java
+++ b/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java
@@ -181,6 +181,8 @@
char lockBt = dataStr.charAt(dataStr.length() - 1 - loffset * 16 - lbit); // 井盖解锁/锁定标志位
getJgsd().add(lockBt == '0' ? true : false); //0-锁定;1-解锁
+
+ logger.info("[" + zcbh + "][井盖状态" + getJgzt().get(i) + "][井盖锁定" + getJgsd().get(i) + "]");
}
logger.info("解析[读取井盖状态]响应指令结束");
diff --git a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java
index fda3077..4366960 100644
--- a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java
+++ b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java
@@ -167,7 +167,7 @@
String fjzcbh = fj.getAssetcode();
// 调用远程接口启动风机
- HttpRequest.sendGet(baseURL + "remote/turnOnFj.do", "zcbh=" + fjzcbh);
+ HttpRequest.sendGet(baseURL + "remote/turnOnFj.action", "zcbh=" + fjzcbh);
}
}
}
diff --git a/src/com/szpg/rmi/RemoteCH4CommandAction.java b/src/com/szpg/rmi/RemoteCH4CommandAction.java
index aff3866..cb63ae1 100644
--- a/src/com/szpg/rmi/RemoteCH4CommandAction.java
+++ b/src/com/szpg/rmi/RemoteCH4CommandAction.java
@@ -201,7 +201,7 @@
command.setMessageProducerId(sour);
command.setDestinationId(dest);
- command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD);
+ command.setMemoryArea(FINSConstants.MEMORY_DM_AREA);
int start = blObj.getKszdz();
int end = blObj.getJszdz();
diff --git a/src/com/szpg/rmi/RemoteCOCommandAction.java b/src/com/szpg/rmi/RemoteCOCommandAction.java
index dde2ac3..728211c 100644
--- a/src/com/szpg/rmi/RemoteCOCommandAction.java
+++ b/src/com/szpg/rmi/RemoteCOCommandAction.java
@@ -201,7 +201,7 @@
command.setMessageProducerId(sour);
command.setDestinationId(dest);
- command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD);
+ command.setMemoryArea(FINSConstants.MEMORY_DM_AREA);
int start = blObj.getKszdz();
int end = blObj.getJszdz();
diff --git a/src/com/szpg/rmi/RemoteDSCommandAction.java b/src/com/szpg/rmi/RemoteDSCommandAction.java
new file mode 100644
index 0000000..d1ec179
--- /dev/null
+++ b/src/com/szpg/rmi/RemoteDSCommandAction.java
@@ -0,0 +1,257 @@
+package com.szpg.rmi;
+
+import org.apache.log4j.Logger;
+import org.apache.struts2.ServletActionContext;
+
+import com.opensymphony.xwork2.ActionSupport;
+import com.szpg.db.dao.PgAcuDao;
+import com.szpg.db.dao.PgHjsbblDao;
+import com.szpg.db.dao.impl.PgAcuDaoImpl;
+import com.szpg.db.dao.impl.PgHjsbblDaoImpl;
+import com.szpg.db.data.PgAcu;
+import com.szpg.db.data.PgHjsbbl;
+import com.szpg.plc.message.AppMessageConstants;
+import com.szpg.plc.message.command.ReadMemoryCommand;
+import com.szpg.plc.message.command.write.SetDsRstBitCommand;
+import com.szpg.plc.protocol.DTProtocolInterface;
+import com.szpg.plc.protocol.ProtocolFactory;
+import com.szpg.plc.protocol.fins.FINSConstants;
+import com.szpg.plc.server.ACUClient;
+import com.szpg.plc.server.ACUClientUtil;
+import com.szpg.plc.util.ByteUtil;
+import com.szpg.service.ReadControllerStatusService;
+import com.szpg.util.Configure;
+import com.szpg.util.UnicodeConvertor;
+
+import z.json.JSONObject;
+
+public class RemoteDSCommandAction extends ActionSupport {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 2221187086461756012L;
+
+ private String zcbh;
+
+ private String format;
+ private String jsoncallback;
+
+ private Logger logger = Logger.getLogger(this.getClass().getName());
+
+ public String getZcbh() {
+ return zcbh;
+ }
+
+ public void setZcbh(String zcbh) {
+ this.zcbh = zcbh;
+ }
+
+ public String getFormat() {
+ return format;
+ }
+
+ public void setFormat(String format) {
+ this.format = format;
+ }
+
+ public String getJsoncallback() {
+ return jsoncallback;
+ }
+
+ public void setJsoncallback(String jsoncallback) {
+ this.jsoncallback = jsoncallback;
+ }
+
+ /**
+ * 读取对射实时状态
+ * @return
+ * @throws Exception
+ */
+ public String readDsStatus() throws Exception {
+ // 返回结果
+ JSONObject jResult = new JSONObject();
+
+ PgAcuDao acuDao = new PgAcuDaoImpl();
+
+ if (null == zcbh || zcbh.equals("") == true) {
+ jResult.put("success", false);
+ jResult.put("code", "1");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("资产编号为空"));
+
+ returnToFront(jResult);
+ return null;
+ }
+
+ String acucode = zcbh.substring(0, zcbh.indexOf(".", 6));
+ PgAcu acu = acuDao.findACUByCode(acucode);
+ if (null == acu) {
+ jResult.put("success", false);
+ jResult.put("code", "2");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("未找到资产对应的PLC主机"));
+
+ returnToFront(jResult);
+ return null;
+ }
+
+ ACUClient client = ACUClientUtil.getInstance().getClients().get(acu.getAcu_host() + ":" + acu.getAcu_port());
+ if (null != client) {
+ ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS);
+ String sour = Configure.getProperty("sys", "LOCALHOST.NET") +
+ Configure.getProperty("sys", "LOCALHOST.NODE") +
+ Configure.getProperty("sys", "LOCALHOST.UNIT");
+ command.setMessageProducerId(sour);
+
+ String dest = client.getNet() + client.getNode() + client.getUnit();
+ command.setDestinationId(dest);
+ command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); //按字读取内容
+
+ try {
+ // 设置读取的地址范围
+ // 从配置文件读取而来
+ command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DSALM.START")), 2)) + "00");
+ command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DSALM.WORDCOUNT")));
+
+ // 调用服务过程执行命令发送服务
+ ReadControllerStatusService service = new ReadControllerStatusService();
+ service.executeService(client, command);
+ logger.info(command);
+ } catch (Exception ex) {
+ logger.error("发送查询对射指令异常" + ex);
+ }
+
+ jResult.put("success", true);
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("发送成功,请等待响应"));
+
+ returnToFront(jResult);
+ return null;
+ } else {
+ jResult.put("success", false);
+ jResult.put("code", "3");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("PLC主机不在线"));
+
+ returnToFront(jResult);
+ return null;
+ }
+ }
+
+ /**
+ * 清除对射报警
+ * @return
+ * @throws Exception
+ */
+ public String clearDsAlarm() throws Exception {
+ // 返回结果
+ JSONObject jResult = new JSONObject();
+
+ if (null == zcbh || zcbh.equals("") == true) {
+ jResult.put("success", false);
+ jResult.put("code", "1");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("资产编号为空"));
+
+ returnToFront(jResult);
+ return null;
+ }
+
+ // 查找ACU的信息
+ PgAcuDao acuDao = new PgAcuDaoImpl();
+
+ String acucode = zcbh.substring(0, zcbh.indexOf(".", 6));
+ PgAcu acu = acuDao.findACUByCode(acucode);
+ if (null == acu) {
+ jResult.put("success", false);
+ jResult.put("code", "2");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("未找到资产对应的PLC主机"));
+
+ returnToFront(jResult);
+ return null;
+ }
+
+ ACUClient client = ACUClientUtil.getInstance().getClients().get(acu.getAcu_host() + ":" + acu.getAcu_port());
+ if (null != client) {
+ // 源地址
+ String sour = Configure.getProperty("sys", "LOCALHOST.NET") +
+ Configure.getProperty("sys", "LOCALHOST.NODE") +
+ Configure.getProperty("sys", "LOCALHOST.UNIT");
+
+ // 目标地址
+ String dest = client.getNet() + client.getNode() + client.getUnit();
+
+ DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol();
+
+ PgHjsbblDao blDao = new PgHjsbblDaoImpl();
+
+ // 构建指令
+ SetDsRstBitCommand rstCmd = new SetDsRstBitCommand();
+ rstCmd.setRst(SetDsRstBitCommand.DS_RST);
+ PgHjsbbl rstBlObj = blDao.findBlByBh(zcbh + ".RST");
+ if (null != rstBlObj) {
+ rstCmd.setMessageProducerId(sour);
+ rstCmd.setDestinationId(dest);
+
+ // SID在new对象的时候已经生成
+
+ // 内存区域——按位写
+ rstCmd.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_BIT);
+
+ int start = rstBlObj.getKszdz();
+ int end = rstBlObj.getJszdz();
+ int bit = rstBlObj.getSzw();
+
+ // 开始字地址
+ rstCmd.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(start, 2)));
+
+ // 位地址
+ rstCmd.setBit(bit);
+
+ // 位数
+ rstCmd.setCount(end - start + 1);
+
+ // 位内容
+ rstCmd.setValue(new byte[] {(byte) SetDsRstBitCommand.DS_RST} );
+
+ // 解析命令对象为字节数组
+ byte[] content = finspi.messageToBytes(rstCmd);
+
+ // 通过socket接口发送出去
+ ACUClientUtil.getInstance().sendACUCommand(client, content);
+ } else {
+ jResult.put("success", false);
+ jResult.put("code", "4");
+ jResult.put("reason", UnicodeConvertor.string2Unicode("未找到资产对应的解锁井盖变量"));
+
+ returnToFront(jResult);
+ return null;
+ }
+
+ // 返回成功给界面
+ jResult.put("success", true);
+ jResult.put("code", "0");
+ returnToFront(jResult);
+
+ return null;
+ } else {
+ jResult.put("success", false);
+ jResult.put("code", "3");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("PLC主机不在线"));
+
+ returnToFront(jResult);
+ return null;
+ }
+ }
+
+ /**
+ * 给前端返回
+ * @param jResult
+ * @throws Exception
+ */
+ private void returnToFront(JSONObject jResult) throws Exception {
+ // 返回jsonp格式的数据
+ if (null != format && format.equalsIgnoreCase("jsonp") == true) {
+ ServletActionContext.getResponse().getWriter().write(jsoncallback + "(" + jResult.toString() + ");");
+ }
+
+ ServletActionContext.getResponse().getWriter().write(jResult.toString());
+ }
+
+}
diff --git a/src/com/szpg/rmi/RemoteFJCommandAction.java b/src/com/szpg/rmi/RemoteFJCommandAction.java
index b0a1ed1..81510c8 100644
--- a/src/com/szpg/rmi/RemoteFJCommandAction.java
+++ b/src/com/szpg/rmi/RemoteFJCommandAction.java
@@ -4,14 +4,10 @@
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
-import com.szpg.db.dao.PgAcuCmdDao;
import com.szpg.db.dao.PgAcuDao;
-import com.szpg.db.dao.impl.PgAcuCmdDaoImpl;
import com.szpg.db.dao.impl.PgAcuDaoImpl;
import com.szpg.db.data.PgAcu;
-import com.szpg.db.data.PgAcuCmd;
import com.szpg.plc.message.AppMessageConstants;
-import com.szpg.plc.message.CommandResponse;
import com.szpg.plc.message.command.ReadMemoryCommand;
import com.szpg.plc.message.command.write.SetFjOffBitCommand;
import com.szpg.plc.message.command.write.SetFjOnBitCommand;
@@ -24,6 +20,7 @@
import com.szpg.service.ReadControllerStatusService;
import com.szpg.service.command.ExhaustFanCommandService;
import com.szpg.util.Configure;
+import com.szpg.util.HttpRequest;
import com.szpg.util.UnicodeConvertor;
import z.json.JSONObject;
@@ -120,7 +117,7 @@
service.executeService(client, command);
logger.info(command);
} catch (Exception ex) {
- logger.error("发送查询温湿度指令异常" + ex);
+ logger.error("发送查询风机状态指令异常" + ex);
}
jResult.put("success", true);
@@ -194,6 +191,7 @@
// 通过socket接口发送出去
ACUClientUtil.getInstance().sendACUCommand(client, content);
+ Logger.getLogger(this.getClass().getName()).info(setOnCmd);
} else {
jResult.put("success", false);
jResult.put("code", "4");
@@ -203,72 +201,27 @@
return null;
}
- // 3将命令存入数据库
- PgAcuCmdDao cmdDao = new PgAcuCmdDaoImpl();
- PgAcuCmd cmd = new PgAcuCmd();
- cmd.setCmd_type(setOnCmd.getCommandType());
- cmd.setDest_acu_code(acucode);
- cmd.setTm(setOnCmd.getTime().getTime());
- cmdDao.addCmdRecord(cmd);
-
- // 4阻塞,循环查找响应消息池,找到对应的响应消息
- boolean flag = false;
- int times = 0;
- CommandResponse response = null;
- while (flag == false && times < 240) {
- response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId());
-
- if (null != response && response.equals("") == false) {
- flag = true;
- }
-
- times++;
- try {
- Thread.sleep(500);
- } catch (InterruptedException e) {
- // 目前的处理流程为1)记录日志;2)将命令置为超时
- logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e);
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "5");
- jResult.put("reason", UnicodeConvertor.string2Unicode("查找命令的响应消息时异常"));
-
- returnToFront(jResult);
- return null;
- }
+ // 20190515增加的逻辑,在置1打开位一秒钟后,将该位复位
+ Thread.sleep(1 * 1000);
+ setOnCmd = ExhaustFanCommandService.buildResetTurnOnCommand(sour, dest, zcbh);
+ if (null != setOnCmd) {
+ byte[] content = finspi.messageToBytes(setOnCmd);
+ ACUClientUtil.getInstance().sendACUCommand(client, content);
+ Logger.getLogger(this.getClass().getName()).info("[打开风机置1位复位]");
}
- // 5若未超时,将值存入数据库
- if (null != response) {
- // 6根据命令类型的不同将监测值存入对应的数据库
- response.afterAction();
-
- // 成功返回
- jResult.put("success", true);
- jResult.put("code", "0");
-
- // 20190515增加的逻辑,在置1打开位一秒钟后,将该位复位
- setOnCmd = ExhaustFanCommandService.buildResetTurnOnCommand(sour, dest, zcbh);
- if (null != setOnCmd) {
- byte[] content = finspi.messageToBytes(setOnCmd);
- ACUClientUtil.getInstance().sendACUCommand(client, content);
- }
-
- returnToFront(jResult);
- return null;
- } else {
- // 9超时,将命令的超时标志位置1
- logger.warn("命令超时" + cmd.getId());
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "6");
- jResult.put("reason", UnicodeConvertor.string2Unicode("命令发送超时"));
-
- returnToFront(jResult);
- return null;
- }
+ // 5秒后查询一次风机的状态
+ Thread.sleep(5 * 1000);
+ // 调用远程接口查询风机状态
+ String baseURL = Configure.getProperty("sys", "PGDSC_API_URL");
+ HttpRequest.sendGet(baseURL + "remote/readFjStatus.action", "zcbh=" + zcbh);
+
+ // 返回成功给界面
+ jResult.put("success", true);
+ jResult.put("code", "0");
+ returnToFront(jResult);
+
+ return null;
} else {
jResult.put("success", false);
jResult.put("code", "3");
@@ -334,6 +287,7 @@
// 通过socket接口发送出去
ACUClientUtil.getInstance().sendACUCommand(client, content);
+ Logger.getLogger(this.getClass().getName()).info(setOffCmd);
} else {
jResult.put("success", false);
jResult.put("code", "4");
@@ -343,72 +297,27 @@
return null;
}
- // 3将命令存入数据库
- PgAcuCmdDao cmdDao = new PgAcuCmdDaoImpl();
- PgAcuCmd cmd = new PgAcuCmd();
- cmd.setCmd_type(setOffCmd.getCommandType());
- cmd.setDest_acu_code(acucode);
- cmd.setTm(setOffCmd.getTime().getTime());
- cmdDao.addCmdRecord(cmd);
-
- // 4阻塞,循环查找响应消息池,找到对应的响应消息
- boolean flag = false;
- int times = 0;
- CommandResponse response = null;
- while (flag == false && times < 240) {
- response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId());
-
- if (null != response && response.equals("") == false) {
- flag = true;
- }
-
- times++;
- try {
- Thread.sleep(500);
- } catch (InterruptedException e) {
- // 目前的处理流程为1)记录日志;2)将命令置为超时
- logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e);
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "5");
- jResult.put("reason", UnicodeConvertor.string2Unicode("查找命令的响应消息时异常"));
-
- returnToFront(jResult);
- return null;
- }
+ // 20190515增加的逻辑,在置1打开位一秒钟后,将该位复位
+ Thread.sleep(1 * 1000);
+ setOffCmd = ExhaustFanCommandService.buildResetTurnOffCommand(sour, dest, zcbh);
+ if (null != setOffCmd) {
+ byte[] content = finspi.messageToBytes(setOffCmd);
+ ACUClientUtil.getInstance().sendACUCommand(client, content);
+ Logger.getLogger(this.getClass().getName()).info("[关闭风机置1位复位]");
}
- // 5若未超时,将值存入数据库
- if (null != response) {
- // 6根据命令类型的不同将监测值存入对应的数据库
- response.afterAction();
-
- // 成功返回
- jResult.put("success", true);
- jResult.put("code", "0");
-
- // 20190515增加的逻辑,在置1打开位一秒钟后,将该位复位
- setOffCmd = ExhaustFanCommandService.buildResetTurnOffCommand(sour, dest, zcbh);
- if (null != setOffCmd) {
- byte[] content = finspi.messageToBytes(setOffCmd);
- ACUClientUtil.getInstance().sendACUCommand(client, content);
- }
-
- returnToFront(jResult);
- return null;
- } else {
- // 9超时,将命令的超时标志位置1
- logger.warn("命令超时" + cmd.getId());
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "6");
- jResult.put("reason", UnicodeConvertor.string2Unicode("命令发送超时"));
-
- returnToFront(jResult);
- return null;
- }
+ // 5秒后查询一次照明的状态
+ Thread.sleep(5 * 1000);
+ // 调用远程接口查询风机状态
+ String baseURL = Configure.getProperty("sys", "PGDSC_API_URL");
+ HttpRequest.sendGet(baseURL + "remote/readFjStatus.action", "zcbh=" + zcbh);
+
+ // 返回成功给界面
+ jResult.put("success", true);
+ jResult.put("code", "0");
+ returnToFront(jResult);
+
+ return null;
} else {
jResult.put("success", false);
jResult.put("code", "3");
diff --git a/src/com/szpg/rmi/RemoteHSCommandAction.java b/src/com/szpg/rmi/RemoteHSCommandAction.java
index b074b7b..97144c2 100644
--- a/src/com/szpg/rmi/RemoteHSCommandAction.java
+++ b/src/com/szpg/rmi/RemoteHSCommandAction.java
@@ -201,7 +201,7 @@
command.setMessageProducerId(sour);
command.setDestinationId(dest);
- command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD);
+ command.setMemoryArea(FINSConstants.MEMORY_DM_AREA);
int start = blObj.getKszdz();
int end = blObj.getJszdz();
diff --git a/src/com/szpg/rmi/RemoteJGCommandAction.java b/src/com/szpg/rmi/RemoteJGCommandAction.java
index 66ab793..69a8d3f 100644
--- a/src/com/szpg/rmi/RemoteJGCommandAction.java
+++ b/src/com/szpg/rmi/RemoteJGCommandAction.java
@@ -4,17 +4,13 @@
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
-import com.szpg.db.dao.PgAcuCmdDao;
import com.szpg.db.dao.PgAcuDao;
import com.szpg.db.dao.PgHjsbblDao;
-import com.szpg.db.dao.impl.PgAcuCmdDaoImpl;
import com.szpg.db.dao.impl.PgAcuDaoImpl;
import com.szpg.db.dao.impl.PgHjsbblDaoImpl;
import com.szpg.db.data.PgAcu;
-import com.szpg.db.data.PgAcuCmd;
import com.szpg.db.data.PgHjsbbl;
import com.szpg.plc.message.AppMessageConstants;
-import com.szpg.plc.message.CommandResponse;
import com.szpg.plc.message.command.ReadMemoryCommand;
import com.szpg.plc.message.command.write.SetJgUnlockBitCommand;
import com.szpg.plc.protocol.DTProtocolInterface;
@@ -25,6 +21,7 @@
import com.szpg.plc.util.ByteUtil;
import com.szpg.service.ReadControllerStatusService;
import com.szpg.util.Configure;
+import com.szpg.util.HttpRequest;
import com.szpg.util.UnicodeConvertor;
import z.json.JSONObject;
@@ -72,7 +69,7 @@
* @return
* @throws Exception
*/
- public String readZmStatus() throws Exception {
+ public String readJgStatus() throws Exception {
// 返回结果
JSONObject jResult = new JSONObject();
@@ -227,65 +224,18 @@
return null;
}
- // 3将命令存入数据库
- PgAcuCmdDao cmdDao = new PgAcuCmdDaoImpl();
- PgAcuCmd cmd = new PgAcuCmd();
- cmd.setCmd_type(setUnlockCmd.getCommandType());
- cmd.setDest_acu_code(acucode);
- cmd.setTm(setUnlockCmd.getTime().getTime());
- cmdDao.addCmdRecord(cmd);
+ // 5秒后查询一次照明的状态
+ Thread.sleep(5 * 1000);
+ // 调用远程接口查询照明状态
+ String baseURL = Configure.getProperty("sys", "PGDSC_API_URL");
+ HttpRequest.sendGet(baseURL + "remote/readJgStatus.action", "zcbh=" + zcbh);
- // 4阻塞,循环查找响应消息池,找到对应的响应消息
- boolean flag = false;
- int times = 0;
- CommandResponse response = null;
- while (flag == false && times < 240) {
- response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId());
-
- if (null != response && response.equals("") == false) {
- flag = true;
- }
-
- times++;
- try {
- Thread.sleep(500);
- } catch (InterruptedException e) {
- // 目前的处理流程为1)记录日志;2)将命令置为超时
- logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e);
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "5");
- jResult.put("reason", UnicodeConvertor.string2Unicode("查找命令的响应消息时异常"));
-
- returnToFront(jResult);
- return null;
- }
- }
+ // 成功返回
+ jResult.put("success", true);
+ jResult.put("code", "0");
- // 5若未超时,将值存入数据库
- if (null != response) {
- // 6根据命令类型的不同将监测值存入对应的数据库
- response.afterAction();
-
- // 成功返回
- jResult.put("success", true);
- jResult.put("code", "0");
-
- returnToFront(jResult);
- return null;
- } else {
- // 9超时,将命令的超时标志位置1
- logger.warn("命令超时" + cmd.getId());
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "6");
- jResult.put("reason", UnicodeConvertor.string2Unicode("命令发送超时"));
-
- returnToFront(jResult);
- return null;
- }
+ returnToFront(jResult);
+ return null;
} else {
jResult.put("success", false);
jResult.put("code", "3");
@@ -383,65 +333,18 @@
return null;
}
- // 3将命令存入数据库
- PgAcuCmdDao cmdDao = new PgAcuCmdDaoImpl();
- PgAcuCmd cmd = new PgAcuCmd();
- cmd.setCmd_type(setLockCmd.getCommandType());
- cmd.setDest_acu_code(acucode);
- cmd.setTm(setLockCmd.getTime().getTime());
- cmdDao.addCmdRecord(cmd);
+ // 5秒后查询一次照明的状态
+ Thread.sleep(5 * 1000);
+ // 调用远程接口查询照明状态
+ String baseURL = Configure.getProperty("sys", "PGDSC_API_URL");
+ HttpRequest.sendGet(baseURL + "remote/readJgStatus.action", "zcbh=" + zcbh);
- // 4阻塞,循环查找响应消息池,找到对应的响应消息
- boolean flag = false;
- int times = 0;
- CommandResponse response = null;
- while (flag == false && times < 240) {
- response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId());
-
- if (null != response && response.equals("") == false) {
- flag = true;
- }
-
- times++;
- try {
- Thread.sleep(500);
- } catch (InterruptedException e) {
- // 目前的处理流程为1)记录日志;2)将命令置为超时
- logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e);
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "5");
- jResult.put("reason", UnicodeConvertor.string2Unicode("查找命令的响应消息时异常"));
-
- returnToFront(jResult);
- return null;
- }
- }
+ // 成功返回
+ jResult.put("success", true);
+ jResult.put("code", "0");
- // 5若未超时,将值存入数据库
- if (null != response) {
- // 6根据命令类型的不同将监测值存入对应的数据库
- response.afterAction();
-
- // 成功返回
- jResult.put("success", true);
- jResult.put("code", "0");
-
- returnToFront(jResult);
- return null;
- } else {
- // 9超时,将命令的超时标志位置1
- logger.warn("命令超时" + cmd.getId());
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "6");
- jResult.put("reason", UnicodeConvertor.string2Unicode("命令发送超时"));
-
- returnToFront(jResult);
- return null;
- }
+ returnToFront(jResult);
+ return null;
} else {
jResult.put("success", false);
jResult.put("code", "3");
diff --git a/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java
index fe487b7..e1de835 100644
--- a/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java
+++ b/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java
@@ -181,6 +181,8 @@
char lockBt = dataStr.charAt(dataStr.length() - 1 - loffset * 16 - lbit); // 井盖解锁/锁定标志位
getJgsd().add(lockBt == '0' ? true : false); //0-锁定;1-解锁
+
+ logger.info("[" + zcbh + "][井盖状态" + getJgzt().get(i) + "][井盖锁定" + getJgsd().get(i) + "]");
}
logger.info("解析[读取井盖状态]响应指令结束");
diff --git a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java
index fda3077..4366960 100644
--- a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java
+++ b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java
@@ -167,7 +167,7 @@
String fjzcbh = fj.getAssetcode();
// 调用远程接口启动风机
- HttpRequest.sendGet(baseURL + "remote/turnOnFj.do", "zcbh=" + fjzcbh);
+ HttpRequest.sendGet(baseURL + "remote/turnOnFj.action", "zcbh=" + fjzcbh);
}
}
}
diff --git a/src/com/szpg/rmi/RemoteCH4CommandAction.java b/src/com/szpg/rmi/RemoteCH4CommandAction.java
index aff3866..cb63ae1 100644
--- a/src/com/szpg/rmi/RemoteCH4CommandAction.java
+++ b/src/com/szpg/rmi/RemoteCH4CommandAction.java
@@ -201,7 +201,7 @@
command.setMessageProducerId(sour);
command.setDestinationId(dest);
- command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD);
+ command.setMemoryArea(FINSConstants.MEMORY_DM_AREA);
int start = blObj.getKszdz();
int end = blObj.getJszdz();
diff --git a/src/com/szpg/rmi/RemoteCOCommandAction.java b/src/com/szpg/rmi/RemoteCOCommandAction.java
index dde2ac3..728211c 100644
--- a/src/com/szpg/rmi/RemoteCOCommandAction.java
+++ b/src/com/szpg/rmi/RemoteCOCommandAction.java
@@ -201,7 +201,7 @@
command.setMessageProducerId(sour);
command.setDestinationId(dest);
- command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD);
+ command.setMemoryArea(FINSConstants.MEMORY_DM_AREA);
int start = blObj.getKszdz();
int end = blObj.getJszdz();
diff --git a/src/com/szpg/rmi/RemoteDSCommandAction.java b/src/com/szpg/rmi/RemoteDSCommandAction.java
new file mode 100644
index 0000000..d1ec179
--- /dev/null
+++ b/src/com/szpg/rmi/RemoteDSCommandAction.java
@@ -0,0 +1,257 @@
+package com.szpg.rmi;
+
+import org.apache.log4j.Logger;
+import org.apache.struts2.ServletActionContext;
+
+import com.opensymphony.xwork2.ActionSupport;
+import com.szpg.db.dao.PgAcuDao;
+import com.szpg.db.dao.PgHjsbblDao;
+import com.szpg.db.dao.impl.PgAcuDaoImpl;
+import com.szpg.db.dao.impl.PgHjsbblDaoImpl;
+import com.szpg.db.data.PgAcu;
+import com.szpg.db.data.PgHjsbbl;
+import com.szpg.plc.message.AppMessageConstants;
+import com.szpg.plc.message.command.ReadMemoryCommand;
+import com.szpg.plc.message.command.write.SetDsRstBitCommand;
+import com.szpg.plc.protocol.DTProtocolInterface;
+import com.szpg.plc.protocol.ProtocolFactory;
+import com.szpg.plc.protocol.fins.FINSConstants;
+import com.szpg.plc.server.ACUClient;
+import com.szpg.plc.server.ACUClientUtil;
+import com.szpg.plc.util.ByteUtil;
+import com.szpg.service.ReadControllerStatusService;
+import com.szpg.util.Configure;
+import com.szpg.util.UnicodeConvertor;
+
+import z.json.JSONObject;
+
+public class RemoteDSCommandAction extends ActionSupport {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 2221187086461756012L;
+
+ private String zcbh;
+
+ private String format;
+ private String jsoncallback;
+
+ private Logger logger = Logger.getLogger(this.getClass().getName());
+
+ public String getZcbh() {
+ return zcbh;
+ }
+
+ public void setZcbh(String zcbh) {
+ this.zcbh = zcbh;
+ }
+
+ public String getFormat() {
+ return format;
+ }
+
+ public void setFormat(String format) {
+ this.format = format;
+ }
+
+ public String getJsoncallback() {
+ return jsoncallback;
+ }
+
+ public void setJsoncallback(String jsoncallback) {
+ this.jsoncallback = jsoncallback;
+ }
+
+ /**
+ * 读取对射实时状态
+ * @return
+ * @throws Exception
+ */
+ public String readDsStatus() throws Exception {
+ // 返回结果
+ JSONObject jResult = new JSONObject();
+
+ PgAcuDao acuDao = new PgAcuDaoImpl();
+
+ if (null == zcbh || zcbh.equals("") == true) {
+ jResult.put("success", false);
+ jResult.put("code", "1");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("资产编号为空"));
+
+ returnToFront(jResult);
+ return null;
+ }
+
+ String acucode = zcbh.substring(0, zcbh.indexOf(".", 6));
+ PgAcu acu = acuDao.findACUByCode(acucode);
+ if (null == acu) {
+ jResult.put("success", false);
+ jResult.put("code", "2");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("未找到资产对应的PLC主机"));
+
+ returnToFront(jResult);
+ return null;
+ }
+
+ ACUClient client = ACUClientUtil.getInstance().getClients().get(acu.getAcu_host() + ":" + acu.getAcu_port());
+ if (null != client) {
+ ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS);
+ String sour = Configure.getProperty("sys", "LOCALHOST.NET") +
+ Configure.getProperty("sys", "LOCALHOST.NODE") +
+ Configure.getProperty("sys", "LOCALHOST.UNIT");
+ command.setMessageProducerId(sour);
+
+ String dest = client.getNet() + client.getNode() + client.getUnit();
+ command.setDestinationId(dest);
+ command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); //按字读取内容
+
+ try {
+ // 设置读取的地址范围
+ // 从配置文件读取而来
+ command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DSALM.START")), 2)) + "00");
+ command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DSALM.WORDCOUNT")));
+
+ // 调用服务过程执行命令发送服务
+ ReadControllerStatusService service = new ReadControllerStatusService();
+ service.executeService(client, command);
+ logger.info(command);
+ } catch (Exception ex) {
+ logger.error("发送查询对射指令异常" + ex);
+ }
+
+ jResult.put("success", true);
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("发送成功,请等待响应"));
+
+ returnToFront(jResult);
+ return null;
+ } else {
+ jResult.put("success", false);
+ jResult.put("code", "3");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("PLC主机不在线"));
+
+ returnToFront(jResult);
+ return null;
+ }
+ }
+
+ /**
+ * 清除对射报警
+ * @return
+ * @throws Exception
+ */
+ public String clearDsAlarm() throws Exception {
+ // 返回结果
+ JSONObject jResult = new JSONObject();
+
+ if (null == zcbh || zcbh.equals("") == true) {
+ jResult.put("success", false);
+ jResult.put("code", "1");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("资产编号为空"));
+
+ returnToFront(jResult);
+ return null;
+ }
+
+ // 查找ACU的信息
+ PgAcuDao acuDao = new PgAcuDaoImpl();
+
+ String acucode = zcbh.substring(0, zcbh.indexOf(".", 6));
+ PgAcu acu = acuDao.findACUByCode(acucode);
+ if (null == acu) {
+ jResult.put("success", false);
+ jResult.put("code", "2");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("未找到资产对应的PLC主机"));
+
+ returnToFront(jResult);
+ return null;
+ }
+
+ ACUClient client = ACUClientUtil.getInstance().getClients().get(acu.getAcu_host() + ":" + acu.getAcu_port());
+ if (null != client) {
+ // 源地址
+ String sour = Configure.getProperty("sys", "LOCALHOST.NET") +
+ Configure.getProperty("sys", "LOCALHOST.NODE") +
+ Configure.getProperty("sys", "LOCALHOST.UNIT");
+
+ // 目标地址
+ String dest = client.getNet() + client.getNode() + client.getUnit();
+
+ DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol();
+
+ PgHjsbblDao blDao = new PgHjsbblDaoImpl();
+
+ // 构建指令
+ SetDsRstBitCommand rstCmd = new SetDsRstBitCommand();
+ rstCmd.setRst(SetDsRstBitCommand.DS_RST);
+ PgHjsbbl rstBlObj = blDao.findBlByBh(zcbh + ".RST");
+ if (null != rstBlObj) {
+ rstCmd.setMessageProducerId(sour);
+ rstCmd.setDestinationId(dest);
+
+ // SID在new对象的时候已经生成
+
+ // 内存区域——按位写
+ rstCmd.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_BIT);
+
+ int start = rstBlObj.getKszdz();
+ int end = rstBlObj.getJszdz();
+ int bit = rstBlObj.getSzw();
+
+ // 开始字地址
+ rstCmd.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(start, 2)));
+
+ // 位地址
+ rstCmd.setBit(bit);
+
+ // 位数
+ rstCmd.setCount(end - start + 1);
+
+ // 位内容
+ rstCmd.setValue(new byte[] {(byte) SetDsRstBitCommand.DS_RST} );
+
+ // 解析命令对象为字节数组
+ byte[] content = finspi.messageToBytes(rstCmd);
+
+ // 通过socket接口发送出去
+ ACUClientUtil.getInstance().sendACUCommand(client, content);
+ } else {
+ jResult.put("success", false);
+ jResult.put("code", "4");
+ jResult.put("reason", UnicodeConvertor.string2Unicode("未找到资产对应的解锁井盖变量"));
+
+ returnToFront(jResult);
+ return null;
+ }
+
+ // 返回成功给界面
+ jResult.put("success", true);
+ jResult.put("code", "0");
+ returnToFront(jResult);
+
+ return null;
+ } else {
+ jResult.put("success", false);
+ jResult.put("code", "3");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("PLC主机不在线"));
+
+ returnToFront(jResult);
+ return null;
+ }
+ }
+
+ /**
+ * 给前端返回
+ * @param jResult
+ * @throws Exception
+ */
+ private void returnToFront(JSONObject jResult) throws Exception {
+ // 返回jsonp格式的数据
+ if (null != format && format.equalsIgnoreCase("jsonp") == true) {
+ ServletActionContext.getResponse().getWriter().write(jsoncallback + "(" + jResult.toString() + ");");
+ }
+
+ ServletActionContext.getResponse().getWriter().write(jResult.toString());
+ }
+
+}
diff --git a/src/com/szpg/rmi/RemoteFJCommandAction.java b/src/com/szpg/rmi/RemoteFJCommandAction.java
index b0a1ed1..81510c8 100644
--- a/src/com/szpg/rmi/RemoteFJCommandAction.java
+++ b/src/com/szpg/rmi/RemoteFJCommandAction.java
@@ -4,14 +4,10 @@
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
-import com.szpg.db.dao.PgAcuCmdDao;
import com.szpg.db.dao.PgAcuDao;
-import com.szpg.db.dao.impl.PgAcuCmdDaoImpl;
import com.szpg.db.dao.impl.PgAcuDaoImpl;
import com.szpg.db.data.PgAcu;
-import com.szpg.db.data.PgAcuCmd;
import com.szpg.plc.message.AppMessageConstants;
-import com.szpg.plc.message.CommandResponse;
import com.szpg.plc.message.command.ReadMemoryCommand;
import com.szpg.plc.message.command.write.SetFjOffBitCommand;
import com.szpg.plc.message.command.write.SetFjOnBitCommand;
@@ -24,6 +20,7 @@
import com.szpg.service.ReadControllerStatusService;
import com.szpg.service.command.ExhaustFanCommandService;
import com.szpg.util.Configure;
+import com.szpg.util.HttpRequest;
import com.szpg.util.UnicodeConvertor;
import z.json.JSONObject;
@@ -120,7 +117,7 @@
service.executeService(client, command);
logger.info(command);
} catch (Exception ex) {
- logger.error("发送查询温湿度指令异常" + ex);
+ logger.error("发送查询风机状态指令异常" + ex);
}
jResult.put("success", true);
@@ -194,6 +191,7 @@
// 通过socket接口发送出去
ACUClientUtil.getInstance().sendACUCommand(client, content);
+ Logger.getLogger(this.getClass().getName()).info(setOnCmd);
} else {
jResult.put("success", false);
jResult.put("code", "4");
@@ -203,72 +201,27 @@
return null;
}
- // 3将命令存入数据库
- PgAcuCmdDao cmdDao = new PgAcuCmdDaoImpl();
- PgAcuCmd cmd = new PgAcuCmd();
- cmd.setCmd_type(setOnCmd.getCommandType());
- cmd.setDest_acu_code(acucode);
- cmd.setTm(setOnCmd.getTime().getTime());
- cmdDao.addCmdRecord(cmd);
-
- // 4阻塞,循环查找响应消息池,找到对应的响应消息
- boolean flag = false;
- int times = 0;
- CommandResponse response = null;
- while (flag == false && times < 240) {
- response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId());
-
- if (null != response && response.equals("") == false) {
- flag = true;
- }
-
- times++;
- try {
- Thread.sleep(500);
- } catch (InterruptedException e) {
- // 目前的处理流程为1)记录日志;2)将命令置为超时
- logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e);
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "5");
- jResult.put("reason", UnicodeConvertor.string2Unicode("查找命令的响应消息时异常"));
-
- returnToFront(jResult);
- return null;
- }
+ // 20190515增加的逻辑,在置1打开位一秒钟后,将该位复位
+ Thread.sleep(1 * 1000);
+ setOnCmd = ExhaustFanCommandService.buildResetTurnOnCommand(sour, dest, zcbh);
+ if (null != setOnCmd) {
+ byte[] content = finspi.messageToBytes(setOnCmd);
+ ACUClientUtil.getInstance().sendACUCommand(client, content);
+ Logger.getLogger(this.getClass().getName()).info("[打开风机置1位复位]");
}
- // 5若未超时,将值存入数据库
- if (null != response) {
- // 6根据命令类型的不同将监测值存入对应的数据库
- response.afterAction();
-
- // 成功返回
- jResult.put("success", true);
- jResult.put("code", "0");
-
- // 20190515增加的逻辑,在置1打开位一秒钟后,将该位复位
- setOnCmd = ExhaustFanCommandService.buildResetTurnOnCommand(sour, dest, zcbh);
- if (null != setOnCmd) {
- byte[] content = finspi.messageToBytes(setOnCmd);
- ACUClientUtil.getInstance().sendACUCommand(client, content);
- }
-
- returnToFront(jResult);
- return null;
- } else {
- // 9超时,将命令的超时标志位置1
- logger.warn("命令超时" + cmd.getId());
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "6");
- jResult.put("reason", UnicodeConvertor.string2Unicode("命令发送超时"));
-
- returnToFront(jResult);
- return null;
- }
+ // 5秒后查询一次风机的状态
+ Thread.sleep(5 * 1000);
+ // 调用远程接口查询风机状态
+ String baseURL = Configure.getProperty("sys", "PGDSC_API_URL");
+ HttpRequest.sendGet(baseURL + "remote/readFjStatus.action", "zcbh=" + zcbh);
+
+ // 返回成功给界面
+ jResult.put("success", true);
+ jResult.put("code", "0");
+ returnToFront(jResult);
+
+ return null;
} else {
jResult.put("success", false);
jResult.put("code", "3");
@@ -334,6 +287,7 @@
// 通过socket接口发送出去
ACUClientUtil.getInstance().sendACUCommand(client, content);
+ Logger.getLogger(this.getClass().getName()).info(setOffCmd);
} else {
jResult.put("success", false);
jResult.put("code", "4");
@@ -343,72 +297,27 @@
return null;
}
- // 3将命令存入数据库
- PgAcuCmdDao cmdDao = new PgAcuCmdDaoImpl();
- PgAcuCmd cmd = new PgAcuCmd();
- cmd.setCmd_type(setOffCmd.getCommandType());
- cmd.setDest_acu_code(acucode);
- cmd.setTm(setOffCmd.getTime().getTime());
- cmdDao.addCmdRecord(cmd);
-
- // 4阻塞,循环查找响应消息池,找到对应的响应消息
- boolean flag = false;
- int times = 0;
- CommandResponse response = null;
- while (flag == false && times < 240) {
- response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId());
-
- if (null != response && response.equals("") == false) {
- flag = true;
- }
-
- times++;
- try {
- Thread.sleep(500);
- } catch (InterruptedException e) {
- // 目前的处理流程为1)记录日志;2)将命令置为超时
- logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e);
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "5");
- jResult.put("reason", UnicodeConvertor.string2Unicode("查找命令的响应消息时异常"));
-
- returnToFront(jResult);
- return null;
- }
+ // 20190515增加的逻辑,在置1打开位一秒钟后,将该位复位
+ Thread.sleep(1 * 1000);
+ setOffCmd = ExhaustFanCommandService.buildResetTurnOffCommand(sour, dest, zcbh);
+ if (null != setOffCmd) {
+ byte[] content = finspi.messageToBytes(setOffCmd);
+ ACUClientUtil.getInstance().sendACUCommand(client, content);
+ Logger.getLogger(this.getClass().getName()).info("[关闭风机置1位复位]");
}
- // 5若未超时,将值存入数据库
- if (null != response) {
- // 6根据命令类型的不同将监测值存入对应的数据库
- response.afterAction();
-
- // 成功返回
- jResult.put("success", true);
- jResult.put("code", "0");
-
- // 20190515增加的逻辑,在置1打开位一秒钟后,将该位复位
- setOffCmd = ExhaustFanCommandService.buildResetTurnOffCommand(sour, dest, zcbh);
- if (null != setOffCmd) {
- byte[] content = finspi.messageToBytes(setOffCmd);
- ACUClientUtil.getInstance().sendACUCommand(client, content);
- }
-
- returnToFront(jResult);
- return null;
- } else {
- // 9超时,将命令的超时标志位置1
- logger.warn("命令超时" + cmd.getId());
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "6");
- jResult.put("reason", UnicodeConvertor.string2Unicode("命令发送超时"));
-
- returnToFront(jResult);
- return null;
- }
+ // 5秒后查询一次照明的状态
+ Thread.sleep(5 * 1000);
+ // 调用远程接口查询风机状态
+ String baseURL = Configure.getProperty("sys", "PGDSC_API_URL");
+ HttpRequest.sendGet(baseURL + "remote/readFjStatus.action", "zcbh=" + zcbh);
+
+ // 返回成功给界面
+ jResult.put("success", true);
+ jResult.put("code", "0");
+ returnToFront(jResult);
+
+ return null;
} else {
jResult.put("success", false);
jResult.put("code", "3");
diff --git a/src/com/szpg/rmi/RemoteHSCommandAction.java b/src/com/szpg/rmi/RemoteHSCommandAction.java
index b074b7b..97144c2 100644
--- a/src/com/szpg/rmi/RemoteHSCommandAction.java
+++ b/src/com/szpg/rmi/RemoteHSCommandAction.java
@@ -201,7 +201,7 @@
command.setMessageProducerId(sour);
command.setDestinationId(dest);
- command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD);
+ command.setMemoryArea(FINSConstants.MEMORY_DM_AREA);
int start = blObj.getKszdz();
int end = blObj.getJszdz();
diff --git a/src/com/szpg/rmi/RemoteJGCommandAction.java b/src/com/szpg/rmi/RemoteJGCommandAction.java
index 66ab793..69a8d3f 100644
--- a/src/com/szpg/rmi/RemoteJGCommandAction.java
+++ b/src/com/szpg/rmi/RemoteJGCommandAction.java
@@ -4,17 +4,13 @@
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
-import com.szpg.db.dao.PgAcuCmdDao;
import com.szpg.db.dao.PgAcuDao;
import com.szpg.db.dao.PgHjsbblDao;
-import com.szpg.db.dao.impl.PgAcuCmdDaoImpl;
import com.szpg.db.dao.impl.PgAcuDaoImpl;
import com.szpg.db.dao.impl.PgHjsbblDaoImpl;
import com.szpg.db.data.PgAcu;
-import com.szpg.db.data.PgAcuCmd;
import com.szpg.db.data.PgHjsbbl;
import com.szpg.plc.message.AppMessageConstants;
-import com.szpg.plc.message.CommandResponse;
import com.szpg.plc.message.command.ReadMemoryCommand;
import com.szpg.plc.message.command.write.SetJgUnlockBitCommand;
import com.szpg.plc.protocol.DTProtocolInterface;
@@ -25,6 +21,7 @@
import com.szpg.plc.util.ByteUtil;
import com.szpg.service.ReadControllerStatusService;
import com.szpg.util.Configure;
+import com.szpg.util.HttpRequest;
import com.szpg.util.UnicodeConvertor;
import z.json.JSONObject;
@@ -72,7 +69,7 @@
* @return
* @throws Exception
*/
- public String readZmStatus() throws Exception {
+ public String readJgStatus() throws Exception {
// 返回结果
JSONObject jResult = new JSONObject();
@@ -227,65 +224,18 @@
return null;
}
- // 3将命令存入数据库
- PgAcuCmdDao cmdDao = new PgAcuCmdDaoImpl();
- PgAcuCmd cmd = new PgAcuCmd();
- cmd.setCmd_type(setUnlockCmd.getCommandType());
- cmd.setDest_acu_code(acucode);
- cmd.setTm(setUnlockCmd.getTime().getTime());
- cmdDao.addCmdRecord(cmd);
+ // 5秒后查询一次照明的状态
+ Thread.sleep(5 * 1000);
+ // 调用远程接口查询照明状态
+ String baseURL = Configure.getProperty("sys", "PGDSC_API_URL");
+ HttpRequest.sendGet(baseURL + "remote/readJgStatus.action", "zcbh=" + zcbh);
- // 4阻塞,循环查找响应消息池,找到对应的响应消息
- boolean flag = false;
- int times = 0;
- CommandResponse response = null;
- while (flag == false && times < 240) {
- response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId());
-
- if (null != response && response.equals("") == false) {
- flag = true;
- }
-
- times++;
- try {
- Thread.sleep(500);
- } catch (InterruptedException e) {
- // 目前的处理流程为1)记录日志;2)将命令置为超时
- logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e);
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "5");
- jResult.put("reason", UnicodeConvertor.string2Unicode("查找命令的响应消息时异常"));
-
- returnToFront(jResult);
- return null;
- }
- }
+ // 成功返回
+ jResult.put("success", true);
+ jResult.put("code", "0");
- // 5若未超时,将值存入数据库
- if (null != response) {
- // 6根据命令类型的不同将监测值存入对应的数据库
- response.afterAction();
-
- // 成功返回
- jResult.put("success", true);
- jResult.put("code", "0");
-
- returnToFront(jResult);
- return null;
- } else {
- // 9超时,将命令的超时标志位置1
- logger.warn("命令超时" + cmd.getId());
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "6");
- jResult.put("reason", UnicodeConvertor.string2Unicode("命令发送超时"));
-
- returnToFront(jResult);
- return null;
- }
+ returnToFront(jResult);
+ return null;
} else {
jResult.put("success", false);
jResult.put("code", "3");
@@ -383,65 +333,18 @@
return null;
}
- // 3将命令存入数据库
- PgAcuCmdDao cmdDao = new PgAcuCmdDaoImpl();
- PgAcuCmd cmd = new PgAcuCmd();
- cmd.setCmd_type(setLockCmd.getCommandType());
- cmd.setDest_acu_code(acucode);
- cmd.setTm(setLockCmd.getTime().getTime());
- cmdDao.addCmdRecord(cmd);
+ // 5秒后查询一次照明的状态
+ Thread.sleep(5 * 1000);
+ // 调用远程接口查询照明状态
+ String baseURL = Configure.getProperty("sys", "PGDSC_API_URL");
+ HttpRequest.sendGet(baseURL + "remote/readJgStatus.action", "zcbh=" + zcbh);
- // 4阻塞,循环查找响应消息池,找到对应的响应消息
- boolean flag = false;
- int times = 0;
- CommandResponse response = null;
- while (flag == false && times < 240) {
- response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId());
-
- if (null != response && response.equals("") == false) {
- flag = true;
- }
-
- times++;
- try {
- Thread.sleep(500);
- } catch (InterruptedException e) {
- // 目前的处理流程为1)记录日志;2)将命令置为超时
- logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e);
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "5");
- jResult.put("reason", UnicodeConvertor.string2Unicode("查找命令的响应消息时异常"));
-
- returnToFront(jResult);
- return null;
- }
- }
+ // 成功返回
+ jResult.put("success", true);
+ jResult.put("code", "0");
- // 5若未超时,将值存入数据库
- if (null != response) {
- // 6根据命令类型的不同将监测值存入对应的数据库
- response.afterAction();
-
- // 成功返回
- jResult.put("success", true);
- jResult.put("code", "0");
-
- returnToFront(jResult);
- return null;
- } else {
- // 9超时,将命令的超时标志位置1
- logger.warn("命令超时" + cmd.getId());
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "6");
- jResult.put("reason", UnicodeConvertor.string2Unicode("命令发送超时"));
-
- returnToFront(jResult);
- return null;
- }
+ returnToFront(jResult);
+ return null;
} else {
jResult.put("success", false);
jResult.put("code", "3");
diff --git a/src/com/szpg/rmi/RemoteO2CommandAction.java b/src/com/szpg/rmi/RemoteO2CommandAction.java
index 45beb84..9097cec 100644
--- a/src/com/szpg/rmi/RemoteO2CommandAction.java
+++ b/src/com/szpg/rmi/RemoteO2CommandAction.java
@@ -200,7 +200,7 @@
command.setMessageProducerId(sour);
command.setDestinationId(dest);
- command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD);
+ command.setMemoryArea(FINSConstants.MEMORY_DM_AREA);
((SetO2ThresholdWordCommand) command).setThreshold(Float.parseFloat(threshold));
int start = blObj.getKszdz();
@@ -220,9 +220,6 @@
for (int j = n; j > 0; j--) {
dataByte.append(new byte[] {temps[2 * (j-1)], temps[2 * (j-1) + 1]});
}
-// for (int j = 0; j < n; j++) {
-// dataByte.append(new byte[] {temps[2 * j], temps[2 * j + 1]});
-// }
command.setValue( dataByte.toBytes() );
// 调用服务过程执行命令发送服务
diff --git a/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java
index fe487b7..e1de835 100644
--- a/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java
+++ b/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java
@@ -181,6 +181,8 @@
char lockBt = dataStr.charAt(dataStr.length() - 1 - loffset * 16 - lbit); // 井盖解锁/锁定标志位
getJgsd().add(lockBt == '0' ? true : false); //0-锁定;1-解锁
+
+ logger.info("[" + zcbh + "][井盖状态" + getJgzt().get(i) + "][井盖锁定" + getJgsd().get(i) + "]");
}
logger.info("解析[读取井盖状态]响应指令结束");
diff --git a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java
index fda3077..4366960 100644
--- a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java
+++ b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java
@@ -167,7 +167,7 @@
String fjzcbh = fj.getAssetcode();
// 调用远程接口启动风机
- HttpRequest.sendGet(baseURL + "remote/turnOnFj.do", "zcbh=" + fjzcbh);
+ HttpRequest.sendGet(baseURL + "remote/turnOnFj.action", "zcbh=" + fjzcbh);
}
}
}
diff --git a/src/com/szpg/rmi/RemoteCH4CommandAction.java b/src/com/szpg/rmi/RemoteCH4CommandAction.java
index aff3866..cb63ae1 100644
--- a/src/com/szpg/rmi/RemoteCH4CommandAction.java
+++ b/src/com/szpg/rmi/RemoteCH4CommandAction.java
@@ -201,7 +201,7 @@
command.setMessageProducerId(sour);
command.setDestinationId(dest);
- command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD);
+ command.setMemoryArea(FINSConstants.MEMORY_DM_AREA);
int start = blObj.getKszdz();
int end = blObj.getJszdz();
diff --git a/src/com/szpg/rmi/RemoteCOCommandAction.java b/src/com/szpg/rmi/RemoteCOCommandAction.java
index dde2ac3..728211c 100644
--- a/src/com/szpg/rmi/RemoteCOCommandAction.java
+++ b/src/com/szpg/rmi/RemoteCOCommandAction.java
@@ -201,7 +201,7 @@
command.setMessageProducerId(sour);
command.setDestinationId(dest);
- command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD);
+ command.setMemoryArea(FINSConstants.MEMORY_DM_AREA);
int start = blObj.getKszdz();
int end = blObj.getJszdz();
diff --git a/src/com/szpg/rmi/RemoteDSCommandAction.java b/src/com/szpg/rmi/RemoteDSCommandAction.java
new file mode 100644
index 0000000..d1ec179
--- /dev/null
+++ b/src/com/szpg/rmi/RemoteDSCommandAction.java
@@ -0,0 +1,257 @@
+package com.szpg.rmi;
+
+import org.apache.log4j.Logger;
+import org.apache.struts2.ServletActionContext;
+
+import com.opensymphony.xwork2.ActionSupport;
+import com.szpg.db.dao.PgAcuDao;
+import com.szpg.db.dao.PgHjsbblDao;
+import com.szpg.db.dao.impl.PgAcuDaoImpl;
+import com.szpg.db.dao.impl.PgHjsbblDaoImpl;
+import com.szpg.db.data.PgAcu;
+import com.szpg.db.data.PgHjsbbl;
+import com.szpg.plc.message.AppMessageConstants;
+import com.szpg.plc.message.command.ReadMemoryCommand;
+import com.szpg.plc.message.command.write.SetDsRstBitCommand;
+import com.szpg.plc.protocol.DTProtocolInterface;
+import com.szpg.plc.protocol.ProtocolFactory;
+import com.szpg.plc.protocol.fins.FINSConstants;
+import com.szpg.plc.server.ACUClient;
+import com.szpg.plc.server.ACUClientUtil;
+import com.szpg.plc.util.ByteUtil;
+import com.szpg.service.ReadControllerStatusService;
+import com.szpg.util.Configure;
+import com.szpg.util.UnicodeConvertor;
+
+import z.json.JSONObject;
+
+public class RemoteDSCommandAction extends ActionSupport {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 2221187086461756012L;
+
+ private String zcbh;
+
+ private String format;
+ private String jsoncallback;
+
+ private Logger logger = Logger.getLogger(this.getClass().getName());
+
+ public String getZcbh() {
+ return zcbh;
+ }
+
+ public void setZcbh(String zcbh) {
+ this.zcbh = zcbh;
+ }
+
+ public String getFormat() {
+ return format;
+ }
+
+ public void setFormat(String format) {
+ this.format = format;
+ }
+
+ public String getJsoncallback() {
+ return jsoncallback;
+ }
+
+ public void setJsoncallback(String jsoncallback) {
+ this.jsoncallback = jsoncallback;
+ }
+
+ /**
+ * 读取对射实时状态
+ * @return
+ * @throws Exception
+ */
+ public String readDsStatus() throws Exception {
+ // 返回结果
+ JSONObject jResult = new JSONObject();
+
+ PgAcuDao acuDao = new PgAcuDaoImpl();
+
+ if (null == zcbh || zcbh.equals("") == true) {
+ jResult.put("success", false);
+ jResult.put("code", "1");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("资产编号为空"));
+
+ returnToFront(jResult);
+ return null;
+ }
+
+ String acucode = zcbh.substring(0, zcbh.indexOf(".", 6));
+ PgAcu acu = acuDao.findACUByCode(acucode);
+ if (null == acu) {
+ jResult.put("success", false);
+ jResult.put("code", "2");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("未找到资产对应的PLC主机"));
+
+ returnToFront(jResult);
+ return null;
+ }
+
+ ACUClient client = ACUClientUtil.getInstance().getClients().get(acu.getAcu_host() + ":" + acu.getAcu_port());
+ if (null != client) {
+ ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS);
+ String sour = Configure.getProperty("sys", "LOCALHOST.NET") +
+ Configure.getProperty("sys", "LOCALHOST.NODE") +
+ Configure.getProperty("sys", "LOCALHOST.UNIT");
+ command.setMessageProducerId(sour);
+
+ String dest = client.getNet() + client.getNode() + client.getUnit();
+ command.setDestinationId(dest);
+ command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); //按字读取内容
+
+ try {
+ // 设置读取的地址范围
+ // 从配置文件读取而来
+ command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DSALM.START")), 2)) + "00");
+ command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DSALM.WORDCOUNT")));
+
+ // 调用服务过程执行命令发送服务
+ ReadControllerStatusService service = new ReadControllerStatusService();
+ service.executeService(client, command);
+ logger.info(command);
+ } catch (Exception ex) {
+ logger.error("发送查询对射指令异常" + ex);
+ }
+
+ jResult.put("success", true);
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("发送成功,请等待响应"));
+
+ returnToFront(jResult);
+ return null;
+ } else {
+ jResult.put("success", false);
+ jResult.put("code", "3");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("PLC主机不在线"));
+
+ returnToFront(jResult);
+ return null;
+ }
+ }
+
+ /**
+ * 清除对射报警
+ * @return
+ * @throws Exception
+ */
+ public String clearDsAlarm() throws Exception {
+ // 返回结果
+ JSONObject jResult = new JSONObject();
+
+ if (null == zcbh || zcbh.equals("") == true) {
+ jResult.put("success", false);
+ jResult.put("code", "1");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("资产编号为空"));
+
+ returnToFront(jResult);
+ return null;
+ }
+
+ // 查找ACU的信息
+ PgAcuDao acuDao = new PgAcuDaoImpl();
+
+ String acucode = zcbh.substring(0, zcbh.indexOf(".", 6));
+ PgAcu acu = acuDao.findACUByCode(acucode);
+ if (null == acu) {
+ jResult.put("success", false);
+ jResult.put("code", "2");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("未找到资产对应的PLC主机"));
+
+ returnToFront(jResult);
+ return null;
+ }
+
+ ACUClient client = ACUClientUtil.getInstance().getClients().get(acu.getAcu_host() + ":" + acu.getAcu_port());
+ if (null != client) {
+ // 源地址
+ String sour = Configure.getProperty("sys", "LOCALHOST.NET") +
+ Configure.getProperty("sys", "LOCALHOST.NODE") +
+ Configure.getProperty("sys", "LOCALHOST.UNIT");
+
+ // 目标地址
+ String dest = client.getNet() + client.getNode() + client.getUnit();
+
+ DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol();
+
+ PgHjsbblDao blDao = new PgHjsbblDaoImpl();
+
+ // 构建指令
+ SetDsRstBitCommand rstCmd = new SetDsRstBitCommand();
+ rstCmd.setRst(SetDsRstBitCommand.DS_RST);
+ PgHjsbbl rstBlObj = blDao.findBlByBh(zcbh + ".RST");
+ if (null != rstBlObj) {
+ rstCmd.setMessageProducerId(sour);
+ rstCmd.setDestinationId(dest);
+
+ // SID在new对象的时候已经生成
+
+ // 内存区域——按位写
+ rstCmd.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_BIT);
+
+ int start = rstBlObj.getKszdz();
+ int end = rstBlObj.getJszdz();
+ int bit = rstBlObj.getSzw();
+
+ // 开始字地址
+ rstCmd.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(start, 2)));
+
+ // 位地址
+ rstCmd.setBit(bit);
+
+ // 位数
+ rstCmd.setCount(end - start + 1);
+
+ // 位内容
+ rstCmd.setValue(new byte[] {(byte) SetDsRstBitCommand.DS_RST} );
+
+ // 解析命令对象为字节数组
+ byte[] content = finspi.messageToBytes(rstCmd);
+
+ // 通过socket接口发送出去
+ ACUClientUtil.getInstance().sendACUCommand(client, content);
+ } else {
+ jResult.put("success", false);
+ jResult.put("code", "4");
+ jResult.put("reason", UnicodeConvertor.string2Unicode("未找到资产对应的解锁井盖变量"));
+
+ returnToFront(jResult);
+ return null;
+ }
+
+ // 返回成功给界面
+ jResult.put("success", true);
+ jResult.put("code", "0");
+ returnToFront(jResult);
+
+ return null;
+ } else {
+ jResult.put("success", false);
+ jResult.put("code", "3");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("PLC主机不在线"));
+
+ returnToFront(jResult);
+ return null;
+ }
+ }
+
+ /**
+ * 给前端返回
+ * @param jResult
+ * @throws Exception
+ */
+ private void returnToFront(JSONObject jResult) throws Exception {
+ // 返回jsonp格式的数据
+ if (null != format && format.equalsIgnoreCase("jsonp") == true) {
+ ServletActionContext.getResponse().getWriter().write(jsoncallback + "(" + jResult.toString() + ");");
+ }
+
+ ServletActionContext.getResponse().getWriter().write(jResult.toString());
+ }
+
+}
diff --git a/src/com/szpg/rmi/RemoteFJCommandAction.java b/src/com/szpg/rmi/RemoteFJCommandAction.java
index b0a1ed1..81510c8 100644
--- a/src/com/szpg/rmi/RemoteFJCommandAction.java
+++ b/src/com/szpg/rmi/RemoteFJCommandAction.java
@@ -4,14 +4,10 @@
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
-import com.szpg.db.dao.PgAcuCmdDao;
import com.szpg.db.dao.PgAcuDao;
-import com.szpg.db.dao.impl.PgAcuCmdDaoImpl;
import com.szpg.db.dao.impl.PgAcuDaoImpl;
import com.szpg.db.data.PgAcu;
-import com.szpg.db.data.PgAcuCmd;
import com.szpg.plc.message.AppMessageConstants;
-import com.szpg.plc.message.CommandResponse;
import com.szpg.plc.message.command.ReadMemoryCommand;
import com.szpg.plc.message.command.write.SetFjOffBitCommand;
import com.szpg.plc.message.command.write.SetFjOnBitCommand;
@@ -24,6 +20,7 @@
import com.szpg.service.ReadControllerStatusService;
import com.szpg.service.command.ExhaustFanCommandService;
import com.szpg.util.Configure;
+import com.szpg.util.HttpRequest;
import com.szpg.util.UnicodeConvertor;
import z.json.JSONObject;
@@ -120,7 +117,7 @@
service.executeService(client, command);
logger.info(command);
} catch (Exception ex) {
- logger.error("发送查询温湿度指令异常" + ex);
+ logger.error("发送查询风机状态指令异常" + ex);
}
jResult.put("success", true);
@@ -194,6 +191,7 @@
// 通过socket接口发送出去
ACUClientUtil.getInstance().sendACUCommand(client, content);
+ Logger.getLogger(this.getClass().getName()).info(setOnCmd);
} else {
jResult.put("success", false);
jResult.put("code", "4");
@@ -203,72 +201,27 @@
return null;
}
- // 3将命令存入数据库
- PgAcuCmdDao cmdDao = new PgAcuCmdDaoImpl();
- PgAcuCmd cmd = new PgAcuCmd();
- cmd.setCmd_type(setOnCmd.getCommandType());
- cmd.setDest_acu_code(acucode);
- cmd.setTm(setOnCmd.getTime().getTime());
- cmdDao.addCmdRecord(cmd);
-
- // 4阻塞,循环查找响应消息池,找到对应的响应消息
- boolean flag = false;
- int times = 0;
- CommandResponse response = null;
- while (flag == false && times < 240) {
- response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId());
-
- if (null != response && response.equals("") == false) {
- flag = true;
- }
-
- times++;
- try {
- Thread.sleep(500);
- } catch (InterruptedException e) {
- // 目前的处理流程为1)记录日志;2)将命令置为超时
- logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e);
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "5");
- jResult.put("reason", UnicodeConvertor.string2Unicode("查找命令的响应消息时异常"));
-
- returnToFront(jResult);
- return null;
- }
+ // 20190515增加的逻辑,在置1打开位一秒钟后,将该位复位
+ Thread.sleep(1 * 1000);
+ setOnCmd = ExhaustFanCommandService.buildResetTurnOnCommand(sour, dest, zcbh);
+ if (null != setOnCmd) {
+ byte[] content = finspi.messageToBytes(setOnCmd);
+ ACUClientUtil.getInstance().sendACUCommand(client, content);
+ Logger.getLogger(this.getClass().getName()).info("[打开风机置1位复位]");
}
- // 5若未超时,将值存入数据库
- if (null != response) {
- // 6根据命令类型的不同将监测值存入对应的数据库
- response.afterAction();
-
- // 成功返回
- jResult.put("success", true);
- jResult.put("code", "0");
-
- // 20190515增加的逻辑,在置1打开位一秒钟后,将该位复位
- setOnCmd = ExhaustFanCommandService.buildResetTurnOnCommand(sour, dest, zcbh);
- if (null != setOnCmd) {
- byte[] content = finspi.messageToBytes(setOnCmd);
- ACUClientUtil.getInstance().sendACUCommand(client, content);
- }
-
- returnToFront(jResult);
- return null;
- } else {
- // 9超时,将命令的超时标志位置1
- logger.warn("命令超时" + cmd.getId());
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "6");
- jResult.put("reason", UnicodeConvertor.string2Unicode("命令发送超时"));
-
- returnToFront(jResult);
- return null;
- }
+ // 5秒后查询一次风机的状态
+ Thread.sleep(5 * 1000);
+ // 调用远程接口查询风机状态
+ String baseURL = Configure.getProperty("sys", "PGDSC_API_URL");
+ HttpRequest.sendGet(baseURL + "remote/readFjStatus.action", "zcbh=" + zcbh);
+
+ // 返回成功给界面
+ jResult.put("success", true);
+ jResult.put("code", "0");
+ returnToFront(jResult);
+
+ return null;
} else {
jResult.put("success", false);
jResult.put("code", "3");
@@ -334,6 +287,7 @@
// 通过socket接口发送出去
ACUClientUtil.getInstance().sendACUCommand(client, content);
+ Logger.getLogger(this.getClass().getName()).info(setOffCmd);
} else {
jResult.put("success", false);
jResult.put("code", "4");
@@ -343,72 +297,27 @@
return null;
}
- // 3将命令存入数据库
- PgAcuCmdDao cmdDao = new PgAcuCmdDaoImpl();
- PgAcuCmd cmd = new PgAcuCmd();
- cmd.setCmd_type(setOffCmd.getCommandType());
- cmd.setDest_acu_code(acucode);
- cmd.setTm(setOffCmd.getTime().getTime());
- cmdDao.addCmdRecord(cmd);
-
- // 4阻塞,循环查找响应消息池,找到对应的响应消息
- boolean flag = false;
- int times = 0;
- CommandResponse response = null;
- while (flag == false && times < 240) {
- response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId());
-
- if (null != response && response.equals("") == false) {
- flag = true;
- }
-
- times++;
- try {
- Thread.sleep(500);
- } catch (InterruptedException e) {
- // 目前的处理流程为1)记录日志;2)将命令置为超时
- logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e);
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "5");
- jResult.put("reason", UnicodeConvertor.string2Unicode("查找命令的响应消息时异常"));
-
- returnToFront(jResult);
- return null;
- }
+ // 20190515增加的逻辑,在置1打开位一秒钟后,将该位复位
+ Thread.sleep(1 * 1000);
+ setOffCmd = ExhaustFanCommandService.buildResetTurnOffCommand(sour, dest, zcbh);
+ if (null != setOffCmd) {
+ byte[] content = finspi.messageToBytes(setOffCmd);
+ ACUClientUtil.getInstance().sendACUCommand(client, content);
+ Logger.getLogger(this.getClass().getName()).info("[关闭风机置1位复位]");
}
- // 5若未超时,将值存入数据库
- if (null != response) {
- // 6根据命令类型的不同将监测值存入对应的数据库
- response.afterAction();
-
- // 成功返回
- jResult.put("success", true);
- jResult.put("code", "0");
-
- // 20190515增加的逻辑,在置1打开位一秒钟后,将该位复位
- setOffCmd = ExhaustFanCommandService.buildResetTurnOffCommand(sour, dest, zcbh);
- if (null != setOffCmd) {
- byte[] content = finspi.messageToBytes(setOffCmd);
- ACUClientUtil.getInstance().sendACUCommand(client, content);
- }
-
- returnToFront(jResult);
- return null;
- } else {
- // 9超时,将命令的超时标志位置1
- logger.warn("命令超时" + cmd.getId());
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "6");
- jResult.put("reason", UnicodeConvertor.string2Unicode("命令发送超时"));
-
- returnToFront(jResult);
- return null;
- }
+ // 5秒后查询一次照明的状态
+ Thread.sleep(5 * 1000);
+ // 调用远程接口查询风机状态
+ String baseURL = Configure.getProperty("sys", "PGDSC_API_URL");
+ HttpRequest.sendGet(baseURL + "remote/readFjStatus.action", "zcbh=" + zcbh);
+
+ // 返回成功给界面
+ jResult.put("success", true);
+ jResult.put("code", "0");
+ returnToFront(jResult);
+
+ return null;
} else {
jResult.put("success", false);
jResult.put("code", "3");
diff --git a/src/com/szpg/rmi/RemoteHSCommandAction.java b/src/com/szpg/rmi/RemoteHSCommandAction.java
index b074b7b..97144c2 100644
--- a/src/com/szpg/rmi/RemoteHSCommandAction.java
+++ b/src/com/szpg/rmi/RemoteHSCommandAction.java
@@ -201,7 +201,7 @@
command.setMessageProducerId(sour);
command.setDestinationId(dest);
- command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD);
+ command.setMemoryArea(FINSConstants.MEMORY_DM_AREA);
int start = blObj.getKszdz();
int end = blObj.getJszdz();
diff --git a/src/com/szpg/rmi/RemoteJGCommandAction.java b/src/com/szpg/rmi/RemoteJGCommandAction.java
index 66ab793..69a8d3f 100644
--- a/src/com/szpg/rmi/RemoteJGCommandAction.java
+++ b/src/com/szpg/rmi/RemoteJGCommandAction.java
@@ -4,17 +4,13 @@
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
-import com.szpg.db.dao.PgAcuCmdDao;
import com.szpg.db.dao.PgAcuDao;
import com.szpg.db.dao.PgHjsbblDao;
-import com.szpg.db.dao.impl.PgAcuCmdDaoImpl;
import com.szpg.db.dao.impl.PgAcuDaoImpl;
import com.szpg.db.dao.impl.PgHjsbblDaoImpl;
import com.szpg.db.data.PgAcu;
-import com.szpg.db.data.PgAcuCmd;
import com.szpg.db.data.PgHjsbbl;
import com.szpg.plc.message.AppMessageConstants;
-import com.szpg.plc.message.CommandResponse;
import com.szpg.plc.message.command.ReadMemoryCommand;
import com.szpg.plc.message.command.write.SetJgUnlockBitCommand;
import com.szpg.plc.protocol.DTProtocolInterface;
@@ -25,6 +21,7 @@
import com.szpg.plc.util.ByteUtil;
import com.szpg.service.ReadControllerStatusService;
import com.szpg.util.Configure;
+import com.szpg.util.HttpRequest;
import com.szpg.util.UnicodeConvertor;
import z.json.JSONObject;
@@ -72,7 +69,7 @@
* @return
* @throws Exception
*/
- public String readZmStatus() throws Exception {
+ public String readJgStatus() throws Exception {
// 返回结果
JSONObject jResult = new JSONObject();
@@ -227,65 +224,18 @@
return null;
}
- // 3将命令存入数据库
- PgAcuCmdDao cmdDao = new PgAcuCmdDaoImpl();
- PgAcuCmd cmd = new PgAcuCmd();
- cmd.setCmd_type(setUnlockCmd.getCommandType());
- cmd.setDest_acu_code(acucode);
- cmd.setTm(setUnlockCmd.getTime().getTime());
- cmdDao.addCmdRecord(cmd);
+ // 5秒后查询一次照明的状态
+ Thread.sleep(5 * 1000);
+ // 调用远程接口查询照明状态
+ String baseURL = Configure.getProperty("sys", "PGDSC_API_URL");
+ HttpRequest.sendGet(baseURL + "remote/readJgStatus.action", "zcbh=" + zcbh);
- // 4阻塞,循环查找响应消息池,找到对应的响应消息
- boolean flag = false;
- int times = 0;
- CommandResponse response = null;
- while (flag == false && times < 240) {
- response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId());
-
- if (null != response && response.equals("") == false) {
- flag = true;
- }
-
- times++;
- try {
- Thread.sleep(500);
- } catch (InterruptedException e) {
- // 目前的处理流程为1)记录日志;2)将命令置为超时
- logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e);
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "5");
- jResult.put("reason", UnicodeConvertor.string2Unicode("查找命令的响应消息时异常"));
-
- returnToFront(jResult);
- return null;
- }
- }
+ // 成功返回
+ jResult.put("success", true);
+ jResult.put("code", "0");
- // 5若未超时,将值存入数据库
- if (null != response) {
- // 6根据命令类型的不同将监测值存入对应的数据库
- response.afterAction();
-
- // 成功返回
- jResult.put("success", true);
- jResult.put("code", "0");
-
- returnToFront(jResult);
- return null;
- } else {
- // 9超时,将命令的超时标志位置1
- logger.warn("命令超时" + cmd.getId());
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "6");
- jResult.put("reason", UnicodeConvertor.string2Unicode("命令发送超时"));
-
- returnToFront(jResult);
- return null;
- }
+ returnToFront(jResult);
+ return null;
} else {
jResult.put("success", false);
jResult.put("code", "3");
@@ -383,65 +333,18 @@
return null;
}
- // 3将命令存入数据库
- PgAcuCmdDao cmdDao = new PgAcuCmdDaoImpl();
- PgAcuCmd cmd = new PgAcuCmd();
- cmd.setCmd_type(setLockCmd.getCommandType());
- cmd.setDest_acu_code(acucode);
- cmd.setTm(setLockCmd.getTime().getTime());
- cmdDao.addCmdRecord(cmd);
+ // 5秒后查询一次照明的状态
+ Thread.sleep(5 * 1000);
+ // 调用远程接口查询照明状态
+ String baseURL = Configure.getProperty("sys", "PGDSC_API_URL");
+ HttpRequest.sendGet(baseURL + "remote/readJgStatus.action", "zcbh=" + zcbh);
- // 4阻塞,循环查找响应消息池,找到对应的响应消息
- boolean flag = false;
- int times = 0;
- CommandResponse response = null;
- while (flag == false && times < 240) {
- response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId());
-
- if (null != response && response.equals("") == false) {
- flag = true;
- }
-
- times++;
- try {
- Thread.sleep(500);
- } catch (InterruptedException e) {
- // 目前的处理流程为1)记录日志;2)将命令置为超时
- logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e);
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "5");
- jResult.put("reason", UnicodeConvertor.string2Unicode("查找命令的响应消息时异常"));
-
- returnToFront(jResult);
- return null;
- }
- }
+ // 成功返回
+ jResult.put("success", true);
+ jResult.put("code", "0");
- // 5若未超时,将值存入数据库
- if (null != response) {
- // 6根据命令类型的不同将监测值存入对应的数据库
- response.afterAction();
-
- // 成功返回
- jResult.put("success", true);
- jResult.put("code", "0");
-
- returnToFront(jResult);
- return null;
- } else {
- // 9超时,将命令的超时标志位置1
- logger.warn("命令超时" + cmd.getId());
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "6");
- jResult.put("reason", UnicodeConvertor.string2Unicode("命令发送超时"));
-
- returnToFront(jResult);
- return null;
- }
+ returnToFront(jResult);
+ return null;
} else {
jResult.put("success", false);
jResult.put("code", "3");
diff --git a/src/com/szpg/rmi/RemoteO2CommandAction.java b/src/com/szpg/rmi/RemoteO2CommandAction.java
index 45beb84..9097cec 100644
--- a/src/com/szpg/rmi/RemoteO2CommandAction.java
+++ b/src/com/szpg/rmi/RemoteO2CommandAction.java
@@ -200,7 +200,7 @@
command.setMessageProducerId(sour);
command.setDestinationId(dest);
- command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD);
+ command.setMemoryArea(FINSConstants.MEMORY_DM_AREA);
((SetO2ThresholdWordCommand) command).setThreshold(Float.parseFloat(threshold));
int start = blObj.getKszdz();
@@ -220,9 +220,6 @@
for (int j = n; j > 0; j--) {
dataByte.append(new byte[] {temps[2 * (j-1)], temps[2 * (j-1) + 1]});
}
-// for (int j = 0; j < n; j++) {
-// dataByte.append(new byte[] {temps[2 * j], temps[2 * j + 1]});
-// }
command.setValue( dataByte.toBytes() );
// 调用服务过程执行命令发送服务
diff --git a/src/com/szpg/rmi/RemoteWSCommandAction.java b/src/com/szpg/rmi/RemoteWSCommandAction.java
index fb813fb..e7dcf85 100644
--- a/src/com/szpg/rmi/RemoteWSCommandAction.java
+++ b/src/com/szpg/rmi/RemoteWSCommandAction.java
@@ -19,6 +19,7 @@
import com.szpg.plc.message.command.ReadMemoryCommand;
import com.szpg.plc.message.command.WriteMemoryCommand;
import com.szpg.plc.message.command.write.SetSdThresholdWordCommand;
+import com.szpg.plc.message.command.write.SetWdThresholdWordCommand;
import com.szpg.plc.protocol.fins.FINSConstants;
import com.szpg.plc.server.ACUClient;
import com.szpg.plc.server.ACUClientUtil;
@@ -212,7 +213,7 @@
command.setMessageProducerId(sour);
command.setDestinationId(dest);
- command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD);
+ command.setMemoryArea(FINSConstants.MEMORY_DM_AREA);
int start = temBlObj.getKszdz();
int end = temBlObj.getJszdz();
@@ -231,6 +232,10 @@
dataByte.append(new byte[] {temps[2 * (j-1)], temps[2 * (j-1) + 1]});
}
command.setValue( dataByte.toBytes() );
+ ((SetWdThresholdWordCommand) command).setThreshold(Float.parseFloat(wdThreshold));
+
+ Logger.getLogger(this.getClass().getName()).info(wdThreshold);
+ Logger.getLogger(this.getClass().getName()).info(ByteUtil.binToHexString(temps));
// 调用服务过程执行命令发送服务
SetSensorThresholdService service = new SetSensorThresholdService();
diff --git a/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java
index fe487b7..e1de835 100644
--- a/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java
+++ b/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java
@@ -181,6 +181,8 @@
char lockBt = dataStr.charAt(dataStr.length() - 1 - loffset * 16 - lbit); // 井盖解锁/锁定标志位
getJgsd().add(lockBt == '0' ? true : false); //0-锁定;1-解锁
+
+ logger.info("[" + zcbh + "][井盖状态" + getJgzt().get(i) + "][井盖锁定" + getJgsd().get(i) + "]");
}
logger.info("解析[读取井盖状态]响应指令结束");
diff --git a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java
index fda3077..4366960 100644
--- a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java
+++ b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java
@@ -167,7 +167,7 @@
String fjzcbh = fj.getAssetcode();
// 调用远程接口启动风机
- HttpRequest.sendGet(baseURL + "remote/turnOnFj.do", "zcbh=" + fjzcbh);
+ HttpRequest.sendGet(baseURL + "remote/turnOnFj.action", "zcbh=" + fjzcbh);
}
}
}
diff --git a/src/com/szpg/rmi/RemoteCH4CommandAction.java b/src/com/szpg/rmi/RemoteCH4CommandAction.java
index aff3866..cb63ae1 100644
--- a/src/com/szpg/rmi/RemoteCH4CommandAction.java
+++ b/src/com/szpg/rmi/RemoteCH4CommandAction.java
@@ -201,7 +201,7 @@
command.setMessageProducerId(sour);
command.setDestinationId(dest);
- command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD);
+ command.setMemoryArea(FINSConstants.MEMORY_DM_AREA);
int start = blObj.getKszdz();
int end = blObj.getJszdz();
diff --git a/src/com/szpg/rmi/RemoteCOCommandAction.java b/src/com/szpg/rmi/RemoteCOCommandAction.java
index dde2ac3..728211c 100644
--- a/src/com/szpg/rmi/RemoteCOCommandAction.java
+++ b/src/com/szpg/rmi/RemoteCOCommandAction.java
@@ -201,7 +201,7 @@
command.setMessageProducerId(sour);
command.setDestinationId(dest);
- command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD);
+ command.setMemoryArea(FINSConstants.MEMORY_DM_AREA);
int start = blObj.getKszdz();
int end = blObj.getJszdz();
diff --git a/src/com/szpg/rmi/RemoteDSCommandAction.java b/src/com/szpg/rmi/RemoteDSCommandAction.java
new file mode 100644
index 0000000..d1ec179
--- /dev/null
+++ b/src/com/szpg/rmi/RemoteDSCommandAction.java
@@ -0,0 +1,257 @@
+package com.szpg.rmi;
+
+import org.apache.log4j.Logger;
+import org.apache.struts2.ServletActionContext;
+
+import com.opensymphony.xwork2.ActionSupport;
+import com.szpg.db.dao.PgAcuDao;
+import com.szpg.db.dao.PgHjsbblDao;
+import com.szpg.db.dao.impl.PgAcuDaoImpl;
+import com.szpg.db.dao.impl.PgHjsbblDaoImpl;
+import com.szpg.db.data.PgAcu;
+import com.szpg.db.data.PgHjsbbl;
+import com.szpg.plc.message.AppMessageConstants;
+import com.szpg.plc.message.command.ReadMemoryCommand;
+import com.szpg.plc.message.command.write.SetDsRstBitCommand;
+import com.szpg.plc.protocol.DTProtocolInterface;
+import com.szpg.plc.protocol.ProtocolFactory;
+import com.szpg.plc.protocol.fins.FINSConstants;
+import com.szpg.plc.server.ACUClient;
+import com.szpg.plc.server.ACUClientUtil;
+import com.szpg.plc.util.ByteUtil;
+import com.szpg.service.ReadControllerStatusService;
+import com.szpg.util.Configure;
+import com.szpg.util.UnicodeConvertor;
+
+import z.json.JSONObject;
+
+public class RemoteDSCommandAction extends ActionSupport {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 2221187086461756012L;
+
+ private String zcbh;
+
+ private String format;
+ private String jsoncallback;
+
+ private Logger logger = Logger.getLogger(this.getClass().getName());
+
+ public String getZcbh() {
+ return zcbh;
+ }
+
+ public void setZcbh(String zcbh) {
+ this.zcbh = zcbh;
+ }
+
+ public String getFormat() {
+ return format;
+ }
+
+ public void setFormat(String format) {
+ this.format = format;
+ }
+
+ public String getJsoncallback() {
+ return jsoncallback;
+ }
+
+ public void setJsoncallback(String jsoncallback) {
+ this.jsoncallback = jsoncallback;
+ }
+
+ /**
+ * 读取对射实时状态
+ * @return
+ * @throws Exception
+ */
+ public String readDsStatus() throws Exception {
+ // 返回结果
+ JSONObject jResult = new JSONObject();
+
+ PgAcuDao acuDao = new PgAcuDaoImpl();
+
+ if (null == zcbh || zcbh.equals("") == true) {
+ jResult.put("success", false);
+ jResult.put("code", "1");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("资产编号为空"));
+
+ returnToFront(jResult);
+ return null;
+ }
+
+ String acucode = zcbh.substring(0, zcbh.indexOf(".", 6));
+ PgAcu acu = acuDao.findACUByCode(acucode);
+ if (null == acu) {
+ jResult.put("success", false);
+ jResult.put("code", "2");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("未找到资产对应的PLC主机"));
+
+ returnToFront(jResult);
+ return null;
+ }
+
+ ACUClient client = ACUClientUtil.getInstance().getClients().get(acu.getAcu_host() + ":" + acu.getAcu_port());
+ if (null != client) {
+ ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS);
+ String sour = Configure.getProperty("sys", "LOCALHOST.NET") +
+ Configure.getProperty("sys", "LOCALHOST.NODE") +
+ Configure.getProperty("sys", "LOCALHOST.UNIT");
+ command.setMessageProducerId(sour);
+
+ String dest = client.getNet() + client.getNode() + client.getUnit();
+ command.setDestinationId(dest);
+ command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); //按字读取内容
+
+ try {
+ // 设置读取的地址范围
+ // 从配置文件读取而来
+ command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DSALM.START")), 2)) + "00");
+ command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DSALM.WORDCOUNT")));
+
+ // 调用服务过程执行命令发送服务
+ ReadControllerStatusService service = new ReadControllerStatusService();
+ service.executeService(client, command);
+ logger.info(command);
+ } catch (Exception ex) {
+ logger.error("发送查询对射指令异常" + ex);
+ }
+
+ jResult.put("success", true);
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("发送成功,请等待响应"));
+
+ returnToFront(jResult);
+ return null;
+ } else {
+ jResult.put("success", false);
+ jResult.put("code", "3");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("PLC主机不在线"));
+
+ returnToFront(jResult);
+ return null;
+ }
+ }
+
+ /**
+ * 清除对射报警
+ * @return
+ * @throws Exception
+ */
+ public String clearDsAlarm() throws Exception {
+ // 返回结果
+ JSONObject jResult = new JSONObject();
+
+ if (null == zcbh || zcbh.equals("") == true) {
+ jResult.put("success", false);
+ jResult.put("code", "1");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("资产编号为空"));
+
+ returnToFront(jResult);
+ return null;
+ }
+
+ // 查找ACU的信息
+ PgAcuDao acuDao = new PgAcuDaoImpl();
+
+ String acucode = zcbh.substring(0, zcbh.indexOf(".", 6));
+ PgAcu acu = acuDao.findACUByCode(acucode);
+ if (null == acu) {
+ jResult.put("success", false);
+ jResult.put("code", "2");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("未找到资产对应的PLC主机"));
+
+ returnToFront(jResult);
+ return null;
+ }
+
+ ACUClient client = ACUClientUtil.getInstance().getClients().get(acu.getAcu_host() + ":" + acu.getAcu_port());
+ if (null != client) {
+ // 源地址
+ String sour = Configure.getProperty("sys", "LOCALHOST.NET") +
+ Configure.getProperty("sys", "LOCALHOST.NODE") +
+ Configure.getProperty("sys", "LOCALHOST.UNIT");
+
+ // 目标地址
+ String dest = client.getNet() + client.getNode() + client.getUnit();
+
+ DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol();
+
+ PgHjsbblDao blDao = new PgHjsbblDaoImpl();
+
+ // 构建指令
+ SetDsRstBitCommand rstCmd = new SetDsRstBitCommand();
+ rstCmd.setRst(SetDsRstBitCommand.DS_RST);
+ PgHjsbbl rstBlObj = blDao.findBlByBh(zcbh + ".RST");
+ if (null != rstBlObj) {
+ rstCmd.setMessageProducerId(sour);
+ rstCmd.setDestinationId(dest);
+
+ // SID在new对象的时候已经生成
+
+ // 内存区域——按位写
+ rstCmd.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_BIT);
+
+ int start = rstBlObj.getKszdz();
+ int end = rstBlObj.getJszdz();
+ int bit = rstBlObj.getSzw();
+
+ // 开始字地址
+ rstCmd.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(start, 2)));
+
+ // 位地址
+ rstCmd.setBit(bit);
+
+ // 位数
+ rstCmd.setCount(end - start + 1);
+
+ // 位内容
+ rstCmd.setValue(new byte[] {(byte) SetDsRstBitCommand.DS_RST} );
+
+ // 解析命令对象为字节数组
+ byte[] content = finspi.messageToBytes(rstCmd);
+
+ // 通过socket接口发送出去
+ ACUClientUtil.getInstance().sendACUCommand(client, content);
+ } else {
+ jResult.put("success", false);
+ jResult.put("code", "4");
+ jResult.put("reason", UnicodeConvertor.string2Unicode("未找到资产对应的解锁井盖变量"));
+
+ returnToFront(jResult);
+ return null;
+ }
+
+ // 返回成功给界面
+ jResult.put("success", true);
+ jResult.put("code", "0");
+ returnToFront(jResult);
+
+ return null;
+ } else {
+ jResult.put("success", false);
+ jResult.put("code", "3");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("PLC主机不在线"));
+
+ returnToFront(jResult);
+ return null;
+ }
+ }
+
+ /**
+ * 给前端返回
+ * @param jResult
+ * @throws Exception
+ */
+ private void returnToFront(JSONObject jResult) throws Exception {
+ // 返回jsonp格式的数据
+ if (null != format && format.equalsIgnoreCase("jsonp") == true) {
+ ServletActionContext.getResponse().getWriter().write(jsoncallback + "(" + jResult.toString() + ");");
+ }
+
+ ServletActionContext.getResponse().getWriter().write(jResult.toString());
+ }
+
+}
diff --git a/src/com/szpg/rmi/RemoteFJCommandAction.java b/src/com/szpg/rmi/RemoteFJCommandAction.java
index b0a1ed1..81510c8 100644
--- a/src/com/szpg/rmi/RemoteFJCommandAction.java
+++ b/src/com/szpg/rmi/RemoteFJCommandAction.java
@@ -4,14 +4,10 @@
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
-import com.szpg.db.dao.PgAcuCmdDao;
import com.szpg.db.dao.PgAcuDao;
-import com.szpg.db.dao.impl.PgAcuCmdDaoImpl;
import com.szpg.db.dao.impl.PgAcuDaoImpl;
import com.szpg.db.data.PgAcu;
-import com.szpg.db.data.PgAcuCmd;
import com.szpg.plc.message.AppMessageConstants;
-import com.szpg.plc.message.CommandResponse;
import com.szpg.plc.message.command.ReadMemoryCommand;
import com.szpg.plc.message.command.write.SetFjOffBitCommand;
import com.szpg.plc.message.command.write.SetFjOnBitCommand;
@@ -24,6 +20,7 @@
import com.szpg.service.ReadControllerStatusService;
import com.szpg.service.command.ExhaustFanCommandService;
import com.szpg.util.Configure;
+import com.szpg.util.HttpRequest;
import com.szpg.util.UnicodeConvertor;
import z.json.JSONObject;
@@ -120,7 +117,7 @@
service.executeService(client, command);
logger.info(command);
} catch (Exception ex) {
- logger.error("发送查询温湿度指令异常" + ex);
+ logger.error("发送查询风机状态指令异常" + ex);
}
jResult.put("success", true);
@@ -194,6 +191,7 @@
// 通过socket接口发送出去
ACUClientUtil.getInstance().sendACUCommand(client, content);
+ Logger.getLogger(this.getClass().getName()).info(setOnCmd);
} else {
jResult.put("success", false);
jResult.put("code", "4");
@@ -203,72 +201,27 @@
return null;
}
- // 3将命令存入数据库
- PgAcuCmdDao cmdDao = new PgAcuCmdDaoImpl();
- PgAcuCmd cmd = new PgAcuCmd();
- cmd.setCmd_type(setOnCmd.getCommandType());
- cmd.setDest_acu_code(acucode);
- cmd.setTm(setOnCmd.getTime().getTime());
- cmdDao.addCmdRecord(cmd);
-
- // 4阻塞,循环查找响应消息池,找到对应的响应消息
- boolean flag = false;
- int times = 0;
- CommandResponse response = null;
- while (flag == false && times < 240) {
- response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId());
-
- if (null != response && response.equals("") == false) {
- flag = true;
- }
-
- times++;
- try {
- Thread.sleep(500);
- } catch (InterruptedException e) {
- // 目前的处理流程为1)记录日志;2)将命令置为超时
- logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e);
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "5");
- jResult.put("reason", UnicodeConvertor.string2Unicode("查找命令的响应消息时异常"));
-
- returnToFront(jResult);
- return null;
- }
+ // 20190515增加的逻辑,在置1打开位一秒钟后,将该位复位
+ Thread.sleep(1 * 1000);
+ setOnCmd = ExhaustFanCommandService.buildResetTurnOnCommand(sour, dest, zcbh);
+ if (null != setOnCmd) {
+ byte[] content = finspi.messageToBytes(setOnCmd);
+ ACUClientUtil.getInstance().sendACUCommand(client, content);
+ Logger.getLogger(this.getClass().getName()).info("[打开风机置1位复位]");
}
- // 5若未超时,将值存入数据库
- if (null != response) {
- // 6根据命令类型的不同将监测值存入对应的数据库
- response.afterAction();
-
- // 成功返回
- jResult.put("success", true);
- jResult.put("code", "0");
-
- // 20190515增加的逻辑,在置1打开位一秒钟后,将该位复位
- setOnCmd = ExhaustFanCommandService.buildResetTurnOnCommand(sour, dest, zcbh);
- if (null != setOnCmd) {
- byte[] content = finspi.messageToBytes(setOnCmd);
- ACUClientUtil.getInstance().sendACUCommand(client, content);
- }
-
- returnToFront(jResult);
- return null;
- } else {
- // 9超时,将命令的超时标志位置1
- logger.warn("命令超时" + cmd.getId());
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "6");
- jResult.put("reason", UnicodeConvertor.string2Unicode("命令发送超时"));
-
- returnToFront(jResult);
- return null;
- }
+ // 5秒后查询一次风机的状态
+ Thread.sleep(5 * 1000);
+ // 调用远程接口查询风机状态
+ String baseURL = Configure.getProperty("sys", "PGDSC_API_URL");
+ HttpRequest.sendGet(baseURL + "remote/readFjStatus.action", "zcbh=" + zcbh);
+
+ // 返回成功给界面
+ jResult.put("success", true);
+ jResult.put("code", "0");
+ returnToFront(jResult);
+
+ return null;
} else {
jResult.put("success", false);
jResult.put("code", "3");
@@ -334,6 +287,7 @@
// 通过socket接口发送出去
ACUClientUtil.getInstance().sendACUCommand(client, content);
+ Logger.getLogger(this.getClass().getName()).info(setOffCmd);
} else {
jResult.put("success", false);
jResult.put("code", "4");
@@ -343,72 +297,27 @@
return null;
}
- // 3将命令存入数据库
- PgAcuCmdDao cmdDao = new PgAcuCmdDaoImpl();
- PgAcuCmd cmd = new PgAcuCmd();
- cmd.setCmd_type(setOffCmd.getCommandType());
- cmd.setDest_acu_code(acucode);
- cmd.setTm(setOffCmd.getTime().getTime());
- cmdDao.addCmdRecord(cmd);
-
- // 4阻塞,循环查找响应消息池,找到对应的响应消息
- boolean flag = false;
- int times = 0;
- CommandResponse response = null;
- while (flag == false && times < 240) {
- response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId());
-
- if (null != response && response.equals("") == false) {
- flag = true;
- }
-
- times++;
- try {
- Thread.sleep(500);
- } catch (InterruptedException e) {
- // 目前的处理流程为1)记录日志;2)将命令置为超时
- logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e);
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "5");
- jResult.put("reason", UnicodeConvertor.string2Unicode("查找命令的响应消息时异常"));
-
- returnToFront(jResult);
- return null;
- }
+ // 20190515增加的逻辑,在置1打开位一秒钟后,将该位复位
+ Thread.sleep(1 * 1000);
+ setOffCmd = ExhaustFanCommandService.buildResetTurnOffCommand(sour, dest, zcbh);
+ if (null != setOffCmd) {
+ byte[] content = finspi.messageToBytes(setOffCmd);
+ ACUClientUtil.getInstance().sendACUCommand(client, content);
+ Logger.getLogger(this.getClass().getName()).info("[关闭风机置1位复位]");
}
- // 5若未超时,将值存入数据库
- if (null != response) {
- // 6根据命令类型的不同将监测值存入对应的数据库
- response.afterAction();
-
- // 成功返回
- jResult.put("success", true);
- jResult.put("code", "0");
-
- // 20190515增加的逻辑,在置1打开位一秒钟后,将该位复位
- setOffCmd = ExhaustFanCommandService.buildResetTurnOffCommand(sour, dest, zcbh);
- if (null != setOffCmd) {
- byte[] content = finspi.messageToBytes(setOffCmd);
- ACUClientUtil.getInstance().sendACUCommand(client, content);
- }
-
- returnToFront(jResult);
- return null;
- } else {
- // 9超时,将命令的超时标志位置1
- logger.warn("命令超时" + cmd.getId());
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "6");
- jResult.put("reason", UnicodeConvertor.string2Unicode("命令发送超时"));
-
- returnToFront(jResult);
- return null;
- }
+ // 5秒后查询一次照明的状态
+ Thread.sleep(5 * 1000);
+ // 调用远程接口查询风机状态
+ String baseURL = Configure.getProperty("sys", "PGDSC_API_URL");
+ HttpRequest.sendGet(baseURL + "remote/readFjStatus.action", "zcbh=" + zcbh);
+
+ // 返回成功给界面
+ jResult.put("success", true);
+ jResult.put("code", "0");
+ returnToFront(jResult);
+
+ return null;
} else {
jResult.put("success", false);
jResult.put("code", "3");
diff --git a/src/com/szpg/rmi/RemoteHSCommandAction.java b/src/com/szpg/rmi/RemoteHSCommandAction.java
index b074b7b..97144c2 100644
--- a/src/com/szpg/rmi/RemoteHSCommandAction.java
+++ b/src/com/szpg/rmi/RemoteHSCommandAction.java
@@ -201,7 +201,7 @@
command.setMessageProducerId(sour);
command.setDestinationId(dest);
- command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD);
+ command.setMemoryArea(FINSConstants.MEMORY_DM_AREA);
int start = blObj.getKszdz();
int end = blObj.getJszdz();
diff --git a/src/com/szpg/rmi/RemoteJGCommandAction.java b/src/com/szpg/rmi/RemoteJGCommandAction.java
index 66ab793..69a8d3f 100644
--- a/src/com/szpg/rmi/RemoteJGCommandAction.java
+++ b/src/com/szpg/rmi/RemoteJGCommandAction.java
@@ -4,17 +4,13 @@
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
-import com.szpg.db.dao.PgAcuCmdDao;
import com.szpg.db.dao.PgAcuDao;
import com.szpg.db.dao.PgHjsbblDao;
-import com.szpg.db.dao.impl.PgAcuCmdDaoImpl;
import com.szpg.db.dao.impl.PgAcuDaoImpl;
import com.szpg.db.dao.impl.PgHjsbblDaoImpl;
import com.szpg.db.data.PgAcu;
-import com.szpg.db.data.PgAcuCmd;
import com.szpg.db.data.PgHjsbbl;
import com.szpg.plc.message.AppMessageConstants;
-import com.szpg.plc.message.CommandResponse;
import com.szpg.plc.message.command.ReadMemoryCommand;
import com.szpg.plc.message.command.write.SetJgUnlockBitCommand;
import com.szpg.plc.protocol.DTProtocolInterface;
@@ -25,6 +21,7 @@
import com.szpg.plc.util.ByteUtil;
import com.szpg.service.ReadControllerStatusService;
import com.szpg.util.Configure;
+import com.szpg.util.HttpRequest;
import com.szpg.util.UnicodeConvertor;
import z.json.JSONObject;
@@ -72,7 +69,7 @@
* @return
* @throws Exception
*/
- public String readZmStatus() throws Exception {
+ public String readJgStatus() throws Exception {
// 返回结果
JSONObject jResult = new JSONObject();
@@ -227,65 +224,18 @@
return null;
}
- // 3将命令存入数据库
- PgAcuCmdDao cmdDao = new PgAcuCmdDaoImpl();
- PgAcuCmd cmd = new PgAcuCmd();
- cmd.setCmd_type(setUnlockCmd.getCommandType());
- cmd.setDest_acu_code(acucode);
- cmd.setTm(setUnlockCmd.getTime().getTime());
- cmdDao.addCmdRecord(cmd);
+ // 5秒后查询一次照明的状态
+ Thread.sleep(5 * 1000);
+ // 调用远程接口查询照明状态
+ String baseURL = Configure.getProperty("sys", "PGDSC_API_URL");
+ HttpRequest.sendGet(baseURL + "remote/readJgStatus.action", "zcbh=" + zcbh);
- // 4阻塞,循环查找响应消息池,找到对应的响应消息
- boolean flag = false;
- int times = 0;
- CommandResponse response = null;
- while (flag == false && times < 240) {
- response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId());
-
- if (null != response && response.equals("") == false) {
- flag = true;
- }
-
- times++;
- try {
- Thread.sleep(500);
- } catch (InterruptedException e) {
- // 目前的处理流程为1)记录日志;2)将命令置为超时
- logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e);
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "5");
- jResult.put("reason", UnicodeConvertor.string2Unicode("查找命令的响应消息时异常"));
-
- returnToFront(jResult);
- return null;
- }
- }
+ // 成功返回
+ jResult.put("success", true);
+ jResult.put("code", "0");
- // 5若未超时,将值存入数据库
- if (null != response) {
- // 6根据命令类型的不同将监测值存入对应的数据库
- response.afterAction();
-
- // 成功返回
- jResult.put("success", true);
- jResult.put("code", "0");
-
- returnToFront(jResult);
- return null;
- } else {
- // 9超时,将命令的超时标志位置1
- logger.warn("命令超时" + cmd.getId());
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "6");
- jResult.put("reason", UnicodeConvertor.string2Unicode("命令发送超时"));
-
- returnToFront(jResult);
- return null;
- }
+ returnToFront(jResult);
+ return null;
} else {
jResult.put("success", false);
jResult.put("code", "3");
@@ -383,65 +333,18 @@
return null;
}
- // 3将命令存入数据库
- PgAcuCmdDao cmdDao = new PgAcuCmdDaoImpl();
- PgAcuCmd cmd = new PgAcuCmd();
- cmd.setCmd_type(setLockCmd.getCommandType());
- cmd.setDest_acu_code(acucode);
- cmd.setTm(setLockCmd.getTime().getTime());
- cmdDao.addCmdRecord(cmd);
+ // 5秒后查询一次照明的状态
+ Thread.sleep(5 * 1000);
+ // 调用远程接口查询照明状态
+ String baseURL = Configure.getProperty("sys", "PGDSC_API_URL");
+ HttpRequest.sendGet(baseURL + "remote/readJgStatus.action", "zcbh=" + zcbh);
- // 4阻塞,循环查找响应消息池,找到对应的响应消息
- boolean flag = false;
- int times = 0;
- CommandResponse response = null;
- while (flag == false && times < 240) {
- response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId());
-
- if (null != response && response.equals("") == false) {
- flag = true;
- }
-
- times++;
- try {
- Thread.sleep(500);
- } catch (InterruptedException e) {
- // 目前的处理流程为1)记录日志;2)将命令置为超时
- logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e);
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "5");
- jResult.put("reason", UnicodeConvertor.string2Unicode("查找命令的响应消息时异常"));
-
- returnToFront(jResult);
- return null;
- }
- }
+ // 成功返回
+ jResult.put("success", true);
+ jResult.put("code", "0");
- // 5若未超时,将值存入数据库
- if (null != response) {
- // 6根据命令类型的不同将监测值存入对应的数据库
- response.afterAction();
-
- // 成功返回
- jResult.put("success", true);
- jResult.put("code", "0");
-
- returnToFront(jResult);
- return null;
- } else {
- // 9超时,将命令的超时标志位置1
- logger.warn("命令超时" + cmd.getId());
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "6");
- jResult.put("reason", UnicodeConvertor.string2Unicode("命令发送超时"));
-
- returnToFront(jResult);
- return null;
- }
+ returnToFront(jResult);
+ return null;
} else {
jResult.put("success", false);
jResult.put("code", "3");
diff --git a/src/com/szpg/rmi/RemoteO2CommandAction.java b/src/com/szpg/rmi/RemoteO2CommandAction.java
index 45beb84..9097cec 100644
--- a/src/com/szpg/rmi/RemoteO2CommandAction.java
+++ b/src/com/szpg/rmi/RemoteO2CommandAction.java
@@ -200,7 +200,7 @@
command.setMessageProducerId(sour);
command.setDestinationId(dest);
- command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD);
+ command.setMemoryArea(FINSConstants.MEMORY_DM_AREA);
((SetO2ThresholdWordCommand) command).setThreshold(Float.parseFloat(threshold));
int start = blObj.getKszdz();
@@ -220,9 +220,6 @@
for (int j = n; j > 0; j--) {
dataByte.append(new byte[] {temps[2 * (j-1)], temps[2 * (j-1) + 1]});
}
-// for (int j = 0; j < n; j++) {
-// dataByte.append(new byte[] {temps[2 * j], temps[2 * j + 1]});
-// }
command.setValue( dataByte.toBytes() );
// 调用服务过程执行命令发送服务
diff --git a/src/com/szpg/rmi/RemoteWSCommandAction.java b/src/com/szpg/rmi/RemoteWSCommandAction.java
index fb813fb..e7dcf85 100644
--- a/src/com/szpg/rmi/RemoteWSCommandAction.java
+++ b/src/com/szpg/rmi/RemoteWSCommandAction.java
@@ -19,6 +19,7 @@
import com.szpg.plc.message.command.ReadMemoryCommand;
import com.szpg.plc.message.command.WriteMemoryCommand;
import com.szpg.plc.message.command.write.SetSdThresholdWordCommand;
+import com.szpg.plc.message.command.write.SetWdThresholdWordCommand;
import com.szpg.plc.protocol.fins.FINSConstants;
import com.szpg.plc.server.ACUClient;
import com.szpg.plc.server.ACUClientUtil;
@@ -212,7 +213,7 @@
command.setMessageProducerId(sour);
command.setDestinationId(dest);
- command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD);
+ command.setMemoryArea(FINSConstants.MEMORY_DM_AREA);
int start = temBlObj.getKszdz();
int end = temBlObj.getJszdz();
@@ -231,6 +232,10 @@
dataByte.append(new byte[] {temps[2 * (j-1)], temps[2 * (j-1) + 1]});
}
command.setValue( dataByte.toBytes() );
+ ((SetWdThresholdWordCommand) command).setThreshold(Float.parseFloat(wdThreshold));
+
+ Logger.getLogger(this.getClass().getName()).info(wdThreshold);
+ Logger.getLogger(this.getClass().getName()).info(ByteUtil.binToHexString(temps));
// 调用服务过程执行命令发送服务
SetSensorThresholdService service = new SetSensorThresholdService();
diff --git a/src/com/szpg/rmi/RemoteZMCommandAction.java b/src/com/szpg/rmi/RemoteZMCommandAction.java
index cb3fd17..6c12fcc 100644
--- a/src/com/szpg/rmi/RemoteZMCommandAction.java
+++ b/src/com/szpg/rmi/RemoteZMCommandAction.java
@@ -4,14 +4,10 @@
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
-import com.szpg.db.dao.PgAcuCmdDao;
import com.szpg.db.dao.PgAcuDao;
-import com.szpg.db.dao.impl.PgAcuCmdDaoImpl;
import com.szpg.db.dao.impl.PgAcuDaoImpl;
import com.szpg.db.data.PgAcu;
-import com.szpg.db.data.PgAcuCmd;
import com.szpg.plc.message.AppMessageConstants;
-import com.szpg.plc.message.CommandResponse;
import com.szpg.plc.message.command.ReadMemoryCommand;
import com.szpg.plc.message.command.write.SetZmOffBitCommand;
import com.szpg.plc.message.command.write.SetZmOnBitCommand;
@@ -24,6 +20,7 @@
import com.szpg.service.ReadControllerStatusService;
import com.szpg.service.command.LightCommandService;
import com.szpg.util.Configure;
+import com.szpg.util.HttpRequest;
import com.szpg.util.UnicodeConvertor;
import z.json.JSONObject;
@@ -147,6 +144,8 @@
// 返回结果
JSONObject jResult = new JSONObject();
+ logger.info("[进入打开应急照明接口]" + zcbh);
+
if (null == zcbh || zcbh.equals("") == true) {
jResult.put("success", false);
jResult.put("code", "1");
@@ -188,13 +187,14 @@
// 2 发送设置启动位的命令
// 构建打开照明指令
SetZmOnBitCommand setOnCmd = LightCommandService.buildTurnOnCommand(sour, dest, zcbh);
+
if (null != setOnCmd) {
// 解析命令对象为字节数组
byte[] content = finspi.messageToBytes(setOnCmd);
// 通过socket接口发送出去
ACUClientUtil.getInstance().sendACUCommand(client, content);
- logger.info("[发送打开照明指令]" + ByteUtil.binToHexString(content));
+ Logger.getLogger(this.getClass().getName()).info(setOnCmd);
} else {
jResult.put("success", false);
jResult.put("code", "4");
@@ -204,72 +204,27 @@
return null;
}
- // 3将命令存入数据库
- PgAcuCmdDao cmdDao = new PgAcuCmdDaoImpl();
- PgAcuCmd cmd = new PgAcuCmd();
- cmd.setCmd_type(setOnCmd.getCommandType());
- cmd.setDest_acu_code(acucode);
- cmd.setTm(setOnCmd.getTime().getTime());
- cmdDao.addCmdRecord(cmd);
-
- // 4阻塞,循环查找响应消息池,找到对应的响应消息
- boolean flag = false;
- int times = 0;
- CommandResponse response = null;
- while (flag == false && times < 240) {
- response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId());
-
- if (null != response && response.equals("") == false) {
- flag = true;
- }
-
- times++;
- try {
- Thread.sleep(500);
- } catch (InterruptedException e) {
- // 目前的处理流程为1)记录日志;2)将命令置为超时
- logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e);
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "5");
- jResult.put("reason", UnicodeConvertor.string2Unicode("查找命令的响应消息时异常"));
-
- returnToFront(jResult);
- return null;
- }
+ // 20190515增加的逻辑,在置1打开位一秒钟后,将该位复位
+ Thread.sleep(1 * 1000);
+ setOnCmd = LightCommandService.buildResetTurnOnCommand(sour, dest, zcbh);
+ if (null != setOnCmd) {
+ byte[] content = finspi.messageToBytes(setOnCmd);
+ ACUClientUtil.getInstance().sendACUCommand(client, content);
+ Logger.getLogger(this.getClass().getName()).info("[打开照明置1位复位]");
}
- // 5若未超时,将值存入数据库
- if (null != response) {
- // 6根据命令类型的不同将监测值存入对应的数据库
- response.afterAction();
-
- // 成功返回
- jResult.put("success", true);
- jResult.put("code", "0");
-
- // 20190515增加的逻辑,在置1打开位一秒钟后,将该位复位
- setOnCmd = LightCommandService.buildResetTurnOnCommand(sour, dest, zcbh);
- if (null != setOnCmd) {
- byte[] content = finspi.messageToBytes(setOnCmd);
- ACUClientUtil.getInstance().sendACUCommand(client, content);
- }
-
- returnToFront(jResult);
- return null;
- } else {
- // 9超时,将命令的超时标志位置1
- logger.warn("命令超时" + cmd.getId());
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "6");
- jResult.put("reason", UnicodeConvertor.string2Unicode("命令发送超时"));
-
- returnToFront(jResult);
- return null;
- }
+ // 5秒后查询一次照明的状态
+ Thread.sleep(5 * 1000);
+ // 调用远程接口查询照明状态
+ String baseURL = Configure.getProperty("sys", "PGDSC_API_URL");
+ HttpRequest.sendGet(baseURL + "remote/readZmStatus.action", "zcbh=" + zcbh);
+
+ // 返回成功给界面
+ jResult.put("success", true);
+ jResult.put("code", "0");
+ returnToFront(jResult);
+
+ return null;
} else {
jResult.put("success", false);
jResult.put("code", "3");
@@ -335,6 +290,7 @@
// 通过socket接口发送出去
ACUClientUtil.getInstance().sendACUCommand(client, content);
+ Logger.getLogger(this.getClass().getName()).info(setOffCmd);
} else {
jResult.put("success", false);
jResult.put("code", "4");
@@ -344,72 +300,27 @@
return null;
}
- // 3将命令存入数据库
- PgAcuCmdDao cmdDao = new PgAcuCmdDaoImpl();
- PgAcuCmd cmd = new PgAcuCmd();
- cmd.setCmd_type(setOffCmd.getCommandType());
- cmd.setDest_acu_code(acucode);
- cmd.setTm(setOffCmd.getTime().getTime());
- cmdDao.addCmdRecord(cmd);
-
- // 4阻塞,循环查找响应消息池,找到对应的响应消息
- boolean flag = false;
- int times = 0;
- CommandResponse response = null;
- while (flag == false && times < 240) {
- response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId());
-
- if (null != response && response.equals("") == false) {
- flag = true;
- }
-
- times++;
- try {
- Thread.sleep(500);
- } catch (InterruptedException e) {
- // 目前的处理流程为1)记录日志;2)将命令置为超时
- logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e);
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "5");
- jResult.put("reason", UnicodeConvertor.string2Unicode("查找命令的响应消息时异常"));
-
- returnToFront(jResult);
- return null;
- }
+ // 20190515增加的逻辑,在置1打开位一秒钟后,将该位复位
+ Thread.sleep(1 * 1000);
+ setOffCmd = LightCommandService.buildResetTurnOffCommand(sour, dest, zcbh);
+ if (null != setOffCmd) {
+ byte[] content = finspi.messageToBytes(setOffCmd);
+ ACUClientUtil.getInstance().sendACUCommand(client, content);
+ Logger.getLogger(this.getClass().getName()).info("[关闭照明置1位复位]");
}
- // 5若未超时,将值存入数据库
- if (null != response) {
- // 6根据命令类型的不同将监测值存入对应的数据库
- response.afterAction();
-
- // 成功返回
- jResult.put("success", true);
- jResult.put("code", "0");
-
- // 20190515增加的逻辑,在置1打开位一秒钟后,将该位复位
- setOffCmd = LightCommandService.buildResetTurnOffCommand(sour, dest, zcbh);
- if (null != setOffCmd) {
- byte[] content = finspi.messageToBytes(setOffCmd);
- ACUClientUtil.getInstance().sendACUCommand(client, content);
- }
-
- returnToFront(jResult);
- return null;
- } else {
- // 9超时,将命令的超时标志位置1
- logger.warn("命令超时" + cmd.getId());
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "6");
- jResult.put("reason", UnicodeConvertor.string2Unicode("命令发送超时"));
-
- returnToFront(jResult);
- return null;
- }
+ // 5秒后查询一次照明的状态
+ Thread.sleep(5 * 1000);
+ // 调用远程接口查询照明状态
+ String baseURL = Configure.getProperty("sys", "PGDSC_API_URL");
+ HttpRequest.sendGet(baseURL + "remote/readZmStatus.action", "zcbh=" + zcbh);
+
+ // 返回成功给界面
+ jResult.put("success", true);
+ jResult.put("code", "0");
+ returnToFront(jResult);
+
+ return null;
} else {
jResult.put("success", false);
jResult.put("code", "3");
@@ -434,4 +345,5 @@
ServletActionContext.getResponse().getWriter().write(jResult.toString());
}
+
}
diff --git a/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java
index fe487b7..e1de835 100644
--- a/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java
+++ b/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java
@@ -181,6 +181,8 @@
char lockBt = dataStr.charAt(dataStr.length() - 1 - loffset * 16 - lbit); // 井盖解锁/锁定标志位
getJgsd().add(lockBt == '0' ? true : false); //0-锁定;1-解锁
+
+ logger.info("[" + zcbh + "][井盖状态" + getJgzt().get(i) + "][井盖锁定" + getJgsd().get(i) + "]");
}
logger.info("解析[读取井盖状态]响应指令结束");
diff --git a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java
index fda3077..4366960 100644
--- a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java
+++ b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java
@@ -167,7 +167,7 @@
String fjzcbh = fj.getAssetcode();
// 调用远程接口启动风机
- HttpRequest.sendGet(baseURL + "remote/turnOnFj.do", "zcbh=" + fjzcbh);
+ HttpRequest.sendGet(baseURL + "remote/turnOnFj.action", "zcbh=" + fjzcbh);
}
}
}
diff --git a/src/com/szpg/rmi/RemoteCH4CommandAction.java b/src/com/szpg/rmi/RemoteCH4CommandAction.java
index aff3866..cb63ae1 100644
--- a/src/com/szpg/rmi/RemoteCH4CommandAction.java
+++ b/src/com/szpg/rmi/RemoteCH4CommandAction.java
@@ -201,7 +201,7 @@
command.setMessageProducerId(sour);
command.setDestinationId(dest);
- command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD);
+ command.setMemoryArea(FINSConstants.MEMORY_DM_AREA);
int start = blObj.getKszdz();
int end = blObj.getJszdz();
diff --git a/src/com/szpg/rmi/RemoteCOCommandAction.java b/src/com/szpg/rmi/RemoteCOCommandAction.java
index dde2ac3..728211c 100644
--- a/src/com/szpg/rmi/RemoteCOCommandAction.java
+++ b/src/com/szpg/rmi/RemoteCOCommandAction.java
@@ -201,7 +201,7 @@
command.setMessageProducerId(sour);
command.setDestinationId(dest);
- command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD);
+ command.setMemoryArea(FINSConstants.MEMORY_DM_AREA);
int start = blObj.getKszdz();
int end = blObj.getJszdz();
diff --git a/src/com/szpg/rmi/RemoteDSCommandAction.java b/src/com/szpg/rmi/RemoteDSCommandAction.java
new file mode 100644
index 0000000..d1ec179
--- /dev/null
+++ b/src/com/szpg/rmi/RemoteDSCommandAction.java
@@ -0,0 +1,257 @@
+package com.szpg.rmi;
+
+import org.apache.log4j.Logger;
+import org.apache.struts2.ServletActionContext;
+
+import com.opensymphony.xwork2.ActionSupport;
+import com.szpg.db.dao.PgAcuDao;
+import com.szpg.db.dao.PgHjsbblDao;
+import com.szpg.db.dao.impl.PgAcuDaoImpl;
+import com.szpg.db.dao.impl.PgHjsbblDaoImpl;
+import com.szpg.db.data.PgAcu;
+import com.szpg.db.data.PgHjsbbl;
+import com.szpg.plc.message.AppMessageConstants;
+import com.szpg.plc.message.command.ReadMemoryCommand;
+import com.szpg.plc.message.command.write.SetDsRstBitCommand;
+import com.szpg.plc.protocol.DTProtocolInterface;
+import com.szpg.plc.protocol.ProtocolFactory;
+import com.szpg.plc.protocol.fins.FINSConstants;
+import com.szpg.plc.server.ACUClient;
+import com.szpg.plc.server.ACUClientUtil;
+import com.szpg.plc.util.ByteUtil;
+import com.szpg.service.ReadControllerStatusService;
+import com.szpg.util.Configure;
+import com.szpg.util.UnicodeConvertor;
+
+import z.json.JSONObject;
+
+public class RemoteDSCommandAction extends ActionSupport {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 2221187086461756012L;
+
+ private String zcbh;
+
+ private String format;
+ private String jsoncallback;
+
+ private Logger logger = Logger.getLogger(this.getClass().getName());
+
+ public String getZcbh() {
+ return zcbh;
+ }
+
+ public void setZcbh(String zcbh) {
+ this.zcbh = zcbh;
+ }
+
+ public String getFormat() {
+ return format;
+ }
+
+ public void setFormat(String format) {
+ this.format = format;
+ }
+
+ public String getJsoncallback() {
+ return jsoncallback;
+ }
+
+ public void setJsoncallback(String jsoncallback) {
+ this.jsoncallback = jsoncallback;
+ }
+
+ /**
+ * 读取对射实时状态
+ * @return
+ * @throws Exception
+ */
+ public String readDsStatus() throws Exception {
+ // 返回结果
+ JSONObject jResult = new JSONObject();
+
+ PgAcuDao acuDao = new PgAcuDaoImpl();
+
+ if (null == zcbh || zcbh.equals("") == true) {
+ jResult.put("success", false);
+ jResult.put("code", "1");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("资产编号为空"));
+
+ returnToFront(jResult);
+ return null;
+ }
+
+ String acucode = zcbh.substring(0, zcbh.indexOf(".", 6));
+ PgAcu acu = acuDao.findACUByCode(acucode);
+ if (null == acu) {
+ jResult.put("success", false);
+ jResult.put("code", "2");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("未找到资产对应的PLC主机"));
+
+ returnToFront(jResult);
+ return null;
+ }
+
+ ACUClient client = ACUClientUtil.getInstance().getClients().get(acu.getAcu_host() + ":" + acu.getAcu_port());
+ if (null != client) {
+ ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS);
+ String sour = Configure.getProperty("sys", "LOCALHOST.NET") +
+ Configure.getProperty("sys", "LOCALHOST.NODE") +
+ Configure.getProperty("sys", "LOCALHOST.UNIT");
+ command.setMessageProducerId(sour);
+
+ String dest = client.getNet() + client.getNode() + client.getUnit();
+ command.setDestinationId(dest);
+ command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); //按字读取内容
+
+ try {
+ // 设置读取的地址范围
+ // 从配置文件读取而来
+ command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DSALM.START")), 2)) + "00");
+ command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DSALM.WORDCOUNT")));
+
+ // 调用服务过程执行命令发送服务
+ ReadControllerStatusService service = new ReadControllerStatusService();
+ service.executeService(client, command);
+ logger.info(command);
+ } catch (Exception ex) {
+ logger.error("发送查询对射指令异常" + ex);
+ }
+
+ jResult.put("success", true);
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("发送成功,请等待响应"));
+
+ returnToFront(jResult);
+ return null;
+ } else {
+ jResult.put("success", false);
+ jResult.put("code", "3");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("PLC主机不在线"));
+
+ returnToFront(jResult);
+ return null;
+ }
+ }
+
+ /**
+ * 清除对射报警
+ * @return
+ * @throws Exception
+ */
+ public String clearDsAlarm() throws Exception {
+ // 返回结果
+ JSONObject jResult = new JSONObject();
+
+ if (null == zcbh || zcbh.equals("") == true) {
+ jResult.put("success", false);
+ jResult.put("code", "1");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("资产编号为空"));
+
+ returnToFront(jResult);
+ return null;
+ }
+
+ // 查找ACU的信息
+ PgAcuDao acuDao = new PgAcuDaoImpl();
+
+ String acucode = zcbh.substring(0, zcbh.indexOf(".", 6));
+ PgAcu acu = acuDao.findACUByCode(acucode);
+ if (null == acu) {
+ jResult.put("success", false);
+ jResult.put("code", "2");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("未找到资产对应的PLC主机"));
+
+ returnToFront(jResult);
+ return null;
+ }
+
+ ACUClient client = ACUClientUtil.getInstance().getClients().get(acu.getAcu_host() + ":" + acu.getAcu_port());
+ if (null != client) {
+ // 源地址
+ String sour = Configure.getProperty("sys", "LOCALHOST.NET") +
+ Configure.getProperty("sys", "LOCALHOST.NODE") +
+ Configure.getProperty("sys", "LOCALHOST.UNIT");
+
+ // 目标地址
+ String dest = client.getNet() + client.getNode() + client.getUnit();
+
+ DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol();
+
+ PgHjsbblDao blDao = new PgHjsbblDaoImpl();
+
+ // 构建指令
+ SetDsRstBitCommand rstCmd = new SetDsRstBitCommand();
+ rstCmd.setRst(SetDsRstBitCommand.DS_RST);
+ PgHjsbbl rstBlObj = blDao.findBlByBh(zcbh + ".RST");
+ if (null != rstBlObj) {
+ rstCmd.setMessageProducerId(sour);
+ rstCmd.setDestinationId(dest);
+
+ // SID在new对象的时候已经生成
+
+ // 内存区域——按位写
+ rstCmd.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_BIT);
+
+ int start = rstBlObj.getKszdz();
+ int end = rstBlObj.getJszdz();
+ int bit = rstBlObj.getSzw();
+
+ // 开始字地址
+ rstCmd.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(start, 2)));
+
+ // 位地址
+ rstCmd.setBit(bit);
+
+ // 位数
+ rstCmd.setCount(end - start + 1);
+
+ // 位内容
+ rstCmd.setValue(new byte[] {(byte) SetDsRstBitCommand.DS_RST} );
+
+ // 解析命令对象为字节数组
+ byte[] content = finspi.messageToBytes(rstCmd);
+
+ // 通过socket接口发送出去
+ ACUClientUtil.getInstance().sendACUCommand(client, content);
+ } else {
+ jResult.put("success", false);
+ jResult.put("code", "4");
+ jResult.put("reason", UnicodeConvertor.string2Unicode("未找到资产对应的解锁井盖变量"));
+
+ returnToFront(jResult);
+ return null;
+ }
+
+ // 返回成功给界面
+ jResult.put("success", true);
+ jResult.put("code", "0");
+ returnToFront(jResult);
+
+ return null;
+ } else {
+ jResult.put("success", false);
+ jResult.put("code", "3");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("PLC主机不在线"));
+
+ returnToFront(jResult);
+ return null;
+ }
+ }
+
+ /**
+ * 给前端返回
+ * @param jResult
+ * @throws Exception
+ */
+ private void returnToFront(JSONObject jResult) throws Exception {
+ // 返回jsonp格式的数据
+ if (null != format && format.equalsIgnoreCase("jsonp") == true) {
+ ServletActionContext.getResponse().getWriter().write(jsoncallback + "(" + jResult.toString() + ");");
+ }
+
+ ServletActionContext.getResponse().getWriter().write(jResult.toString());
+ }
+
+}
diff --git a/src/com/szpg/rmi/RemoteFJCommandAction.java b/src/com/szpg/rmi/RemoteFJCommandAction.java
index b0a1ed1..81510c8 100644
--- a/src/com/szpg/rmi/RemoteFJCommandAction.java
+++ b/src/com/szpg/rmi/RemoteFJCommandAction.java
@@ -4,14 +4,10 @@
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
-import com.szpg.db.dao.PgAcuCmdDao;
import com.szpg.db.dao.PgAcuDao;
-import com.szpg.db.dao.impl.PgAcuCmdDaoImpl;
import com.szpg.db.dao.impl.PgAcuDaoImpl;
import com.szpg.db.data.PgAcu;
-import com.szpg.db.data.PgAcuCmd;
import com.szpg.plc.message.AppMessageConstants;
-import com.szpg.plc.message.CommandResponse;
import com.szpg.plc.message.command.ReadMemoryCommand;
import com.szpg.plc.message.command.write.SetFjOffBitCommand;
import com.szpg.plc.message.command.write.SetFjOnBitCommand;
@@ -24,6 +20,7 @@
import com.szpg.service.ReadControllerStatusService;
import com.szpg.service.command.ExhaustFanCommandService;
import com.szpg.util.Configure;
+import com.szpg.util.HttpRequest;
import com.szpg.util.UnicodeConvertor;
import z.json.JSONObject;
@@ -120,7 +117,7 @@
service.executeService(client, command);
logger.info(command);
} catch (Exception ex) {
- logger.error("发送查询温湿度指令异常" + ex);
+ logger.error("发送查询风机状态指令异常" + ex);
}
jResult.put("success", true);
@@ -194,6 +191,7 @@
// 通过socket接口发送出去
ACUClientUtil.getInstance().sendACUCommand(client, content);
+ Logger.getLogger(this.getClass().getName()).info(setOnCmd);
} else {
jResult.put("success", false);
jResult.put("code", "4");
@@ -203,72 +201,27 @@
return null;
}
- // 3将命令存入数据库
- PgAcuCmdDao cmdDao = new PgAcuCmdDaoImpl();
- PgAcuCmd cmd = new PgAcuCmd();
- cmd.setCmd_type(setOnCmd.getCommandType());
- cmd.setDest_acu_code(acucode);
- cmd.setTm(setOnCmd.getTime().getTime());
- cmdDao.addCmdRecord(cmd);
-
- // 4阻塞,循环查找响应消息池,找到对应的响应消息
- boolean flag = false;
- int times = 0;
- CommandResponse response = null;
- while (flag == false && times < 240) {
- response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId());
-
- if (null != response && response.equals("") == false) {
- flag = true;
- }
-
- times++;
- try {
- Thread.sleep(500);
- } catch (InterruptedException e) {
- // 目前的处理流程为1)记录日志;2)将命令置为超时
- logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e);
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "5");
- jResult.put("reason", UnicodeConvertor.string2Unicode("查找命令的响应消息时异常"));
-
- returnToFront(jResult);
- return null;
- }
+ // 20190515增加的逻辑,在置1打开位一秒钟后,将该位复位
+ Thread.sleep(1 * 1000);
+ setOnCmd = ExhaustFanCommandService.buildResetTurnOnCommand(sour, dest, zcbh);
+ if (null != setOnCmd) {
+ byte[] content = finspi.messageToBytes(setOnCmd);
+ ACUClientUtil.getInstance().sendACUCommand(client, content);
+ Logger.getLogger(this.getClass().getName()).info("[打开风机置1位复位]");
}
- // 5若未超时,将值存入数据库
- if (null != response) {
- // 6根据命令类型的不同将监测值存入对应的数据库
- response.afterAction();
-
- // 成功返回
- jResult.put("success", true);
- jResult.put("code", "0");
-
- // 20190515增加的逻辑,在置1打开位一秒钟后,将该位复位
- setOnCmd = ExhaustFanCommandService.buildResetTurnOnCommand(sour, dest, zcbh);
- if (null != setOnCmd) {
- byte[] content = finspi.messageToBytes(setOnCmd);
- ACUClientUtil.getInstance().sendACUCommand(client, content);
- }
-
- returnToFront(jResult);
- return null;
- } else {
- // 9超时,将命令的超时标志位置1
- logger.warn("命令超时" + cmd.getId());
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "6");
- jResult.put("reason", UnicodeConvertor.string2Unicode("命令发送超时"));
-
- returnToFront(jResult);
- return null;
- }
+ // 5秒后查询一次风机的状态
+ Thread.sleep(5 * 1000);
+ // 调用远程接口查询风机状态
+ String baseURL = Configure.getProperty("sys", "PGDSC_API_URL");
+ HttpRequest.sendGet(baseURL + "remote/readFjStatus.action", "zcbh=" + zcbh);
+
+ // 返回成功给界面
+ jResult.put("success", true);
+ jResult.put("code", "0");
+ returnToFront(jResult);
+
+ return null;
} else {
jResult.put("success", false);
jResult.put("code", "3");
@@ -334,6 +287,7 @@
// 通过socket接口发送出去
ACUClientUtil.getInstance().sendACUCommand(client, content);
+ Logger.getLogger(this.getClass().getName()).info(setOffCmd);
} else {
jResult.put("success", false);
jResult.put("code", "4");
@@ -343,72 +297,27 @@
return null;
}
- // 3将命令存入数据库
- PgAcuCmdDao cmdDao = new PgAcuCmdDaoImpl();
- PgAcuCmd cmd = new PgAcuCmd();
- cmd.setCmd_type(setOffCmd.getCommandType());
- cmd.setDest_acu_code(acucode);
- cmd.setTm(setOffCmd.getTime().getTime());
- cmdDao.addCmdRecord(cmd);
-
- // 4阻塞,循环查找响应消息池,找到对应的响应消息
- boolean flag = false;
- int times = 0;
- CommandResponse response = null;
- while (flag == false && times < 240) {
- response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId());
-
- if (null != response && response.equals("") == false) {
- flag = true;
- }
-
- times++;
- try {
- Thread.sleep(500);
- } catch (InterruptedException e) {
- // 目前的处理流程为1)记录日志;2)将命令置为超时
- logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e);
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "5");
- jResult.put("reason", UnicodeConvertor.string2Unicode("查找命令的响应消息时异常"));
-
- returnToFront(jResult);
- return null;
- }
+ // 20190515增加的逻辑,在置1打开位一秒钟后,将该位复位
+ Thread.sleep(1 * 1000);
+ setOffCmd = ExhaustFanCommandService.buildResetTurnOffCommand(sour, dest, zcbh);
+ if (null != setOffCmd) {
+ byte[] content = finspi.messageToBytes(setOffCmd);
+ ACUClientUtil.getInstance().sendACUCommand(client, content);
+ Logger.getLogger(this.getClass().getName()).info("[关闭风机置1位复位]");
}
- // 5若未超时,将值存入数据库
- if (null != response) {
- // 6根据命令类型的不同将监测值存入对应的数据库
- response.afterAction();
-
- // 成功返回
- jResult.put("success", true);
- jResult.put("code", "0");
-
- // 20190515增加的逻辑,在置1打开位一秒钟后,将该位复位
- setOffCmd = ExhaustFanCommandService.buildResetTurnOffCommand(sour, dest, zcbh);
- if (null != setOffCmd) {
- byte[] content = finspi.messageToBytes(setOffCmd);
- ACUClientUtil.getInstance().sendACUCommand(client, content);
- }
-
- returnToFront(jResult);
- return null;
- } else {
- // 9超时,将命令的超时标志位置1
- logger.warn("命令超时" + cmd.getId());
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "6");
- jResult.put("reason", UnicodeConvertor.string2Unicode("命令发送超时"));
-
- returnToFront(jResult);
- return null;
- }
+ // 5秒后查询一次照明的状态
+ Thread.sleep(5 * 1000);
+ // 调用远程接口查询风机状态
+ String baseURL = Configure.getProperty("sys", "PGDSC_API_URL");
+ HttpRequest.sendGet(baseURL + "remote/readFjStatus.action", "zcbh=" + zcbh);
+
+ // 返回成功给界面
+ jResult.put("success", true);
+ jResult.put("code", "0");
+ returnToFront(jResult);
+
+ return null;
} else {
jResult.put("success", false);
jResult.put("code", "3");
diff --git a/src/com/szpg/rmi/RemoteHSCommandAction.java b/src/com/szpg/rmi/RemoteHSCommandAction.java
index b074b7b..97144c2 100644
--- a/src/com/szpg/rmi/RemoteHSCommandAction.java
+++ b/src/com/szpg/rmi/RemoteHSCommandAction.java
@@ -201,7 +201,7 @@
command.setMessageProducerId(sour);
command.setDestinationId(dest);
- command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD);
+ command.setMemoryArea(FINSConstants.MEMORY_DM_AREA);
int start = blObj.getKszdz();
int end = blObj.getJszdz();
diff --git a/src/com/szpg/rmi/RemoteJGCommandAction.java b/src/com/szpg/rmi/RemoteJGCommandAction.java
index 66ab793..69a8d3f 100644
--- a/src/com/szpg/rmi/RemoteJGCommandAction.java
+++ b/src/com/szpg/rmi/RemoteJGCommandAction.java
@@ -4,17 +4,13 @@
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
-import com.szpg.db.dao.PgAcuCmdDao;
import com.szpg.db.dao.PgAcuDao;
import com.szpg.db.dao.PgHjsbblDao;
-import com.szpg.db.dao.impl.PgAcuCmdDaoImpl;
import com.szpg.db.dao.impl.PgAcuDaoImpl;
import com.szpg.db.dao.impl.PgHjsbblDaoImpl;
import com.szpg.db.data.PgAcu;
-import com.szpg.db.data.PgAcuCmd;
import com.szpg.db.data.PgHjsbbl;
import com.szpg.plc.message.AppMessageConstants;
-import com.szpg.plc.message.CommandResponse;
import com.szpg.plc.message.command.ReadMemoryCommand;
import com.szpg.plc.message.command.write.SetJgUnlockBitCommand;
import com.szpg.plc.protocol.DTProtocolInterface;
@@ -25,6 +21,7 @@
import com.szpg.plc.util.ByteUtil;
import com.szpg.service.ReadControllerStatusService;
import com.szpg.util.Configure;
+import com.szpg.util.HttpRequest;
import com.szpg.util.UnicodeConvertor;
import z.json.JSONObject;
@@ -72,7 +69,7 @@
* @return
* @throws Exception
*/
- public String readZmStatus() throws Exception {
+ public String readJgStatus() throws Exception {
// 返回结果
JSONObject jResult = new JSONObject();
@@ -227,65 +224,18 @@
return null;
}
- // 3将命令存入数据库
- PgAcuCmdDao cmdDao = new PgAcuCmdDaoImpl();
- PgAcuCmd cmd = new PgAcuCmd();
- cmd.setCmd_type(setUnlockCmd.getCommandType());
- cmd.setDest_acu_code(acucode);
- cmd.setTm(setUnlockCmd.getTime().getTime());
- cmdDao.addCmdRecord(cmd);
+ // 5秒后查询一次照明的状态
+ Thread.sleep(5 * 1000);
+ // 调用远程接口查询照明状态
+ String baseURL = Configure.getProperty("sys", "PGDSC_API_URL");
+ HttpRequest.sendGet(baseURL + "remote/readJgStatus.action", "zcbh=" + zcbh);
- // 4阻塞,循环查找响应消息池,找到对应的响应消息
- boolean flag = false;
- int times = 0;
- CommandResponse response = null;
- while (flag == false && times < 240) {
- response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId());
-
- if (null != response && response.equals("") == false) {
- flag = true;
- }
-
- times++;
- try {
- Thread.sleep(500);
- } catch (InterruptedException e) {
- // 目前的处理流程为1)记录日志;2)将命令置为超时
- logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e);
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "5");
- jResult.put("reason", UnicodeConvertor.string2Unicode("查找命令的响应消息时异常"));
-
- returnToFront(jResult);
- return null;
- }
- }
+ // 成功返回
+ jResult.put("success", true);
+ jResult.put("code", "0");
- // 5若未超时,将值存入数据库
- if (null != response) {
- // 6根据命令类型的不同将监测值存入对应的数据库
- response.afterAction();
-
- // 成功返回
- jResult.put("success", true);
- jResult.put("code", "0");
-
- returnToFront(jResult);
- return null;
- } else {
- // 9超时,将命令的超时标志位置1
- logger.warn("命令超时" + cmd.getId());
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "6");
- jResult.put("reason", UnicodeConvertor.string2Unicode("命令发送超时"));
-
- returnToFront(jResult);
- return null;
- }
+ returnToFront(jResult);
+ return null;
} else {
jResult.put("success", false);
jResult.put("code", "3");
@@ -383,65 +333,18 @@
return null;
}
- // 3将命令存入数据库
- PgAcuCmdDao cmdDao = new PgAcuCmdDaoImpl();
- PgAcuCmd cmd = new PgAcuCmd();
- cmd.setCmd_type(setLockCmd.getCommandType());
- cmd.setDest_acu_code(acucode);
- cmd.setTm(setLockCmd.getTime().getTime());
- cmdDao.addCmdRecord(cmd);
+ // 5秒后查询一次照明的状态
+ Thread.sleep(5 * 1000);
+ // 调用远程接口查询照明状态
+ String baseURL = Configure.getProperty("sys", "PGDSC_API_URL");
+ HttpRequest.sendGet(baseURL + "remote/readJgStatus.action", "zcbh=" + zcbh);
- // 4阻塞,循环查找响应消息池,找到对应的响应消息
- boolean flag = false;
- int times = 0;
- CommandResponse response = null;
- while (flag == false && times < 240) {
- response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId());
-
- if (null != response && response.equals("") == false) {
- flag = true;
- }
-
- times++;
- try {
- Thread.sleep(500);
- } catch (InterruptedException e) {
- // 目前的处理流程为1)记录日志;2)将命令置为超时
- logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e);
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "5");
- jResult.put("reason", UnicodeConvertor.string2Unicode("查找命令的响应消息时异常"));
-
- returnToFront(jResult);
- return null;
- }
- }
+ // 成功返回
+ jResult.put("success", true);
+ jResult.put("code", "0");
- // 5若未超时,将值存入数据库
- if (null != response) {
- // 6根据命令类型的不同将监测值存入对应的数据库
- response.afterAction();
-
- // 成功返回
- jResult.put("success", true);
- jResult.put("code", "0");
-
- returnToFront(jResult);
- return null;
- } else {
- // 9超时,将命令的超时标志位置1
- logger.warn("命令超时" + cmd.getId());
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "6");
- jResult.put("reason", UnicodeConvertor.string2Unicode("命令发送超时"));
-
- returnToFront(jResult);
- return null;
- }
+ returnToFront(jResult);
+ return null;
} else {
jResult.put("success", false);
jResult.put("code", "3");
diff --git a/src/com/szpg/rmi/RemoteO2CommandAction.java b/src/com/szpg/rmi/RemoteO2CommandAction.java
index 45beb84..9097cec 100644
--- a/src/com/szpg/rmi/RemoteO2CommandAction.java
+++ b/src/com/szpg/rmi/RemoteO2CommandAction.java
@@ -200,7 +200,7 @@
command.setMessageProducerId(sour);
command.setDestinationId(dest);
- command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD);
+ command.setMemoryArea(FINSConstants.MEMORY_DM_AREA);
((SetO2ThresholdWordCommand) command).setThreshold(Float.parseFloat(threshold));
int start = blObj.getKszdz();
@@ -220,9 +220,6 @@
for (int j = n; j > 0; j--) {
dataByte.append(new byte[] {temps[2 * (j-1)], temps[2 * (j-1) + 1]});
}
-// for (int j = 0; j < n; j++) {
-// dataByte.append(new byte[] {temps[2 * j], temps[2 * j + 1]});
-// }
command.setValue( dataByte.toBytes() );
// 调用服务过程执行命令发送服务
diff --git a/src/com/szpg/rmi/RemoteWSCommandAction.java b/src/com/szpg/rmi/RemoteWSCommandAction.java
index fb813fb..e7dcf85 100644
--- a/src/com/szpg/rmi/RemoteWSCommandAction.java
+++ b/src/com/szpg/rmi/RemoteWSCommandAction.java
@@ -19,6 +19,7 @@
import com.szpg.plc.message.command.ReadMemoryCommand;
import com.szpg.plc.message.command.WriteMemoryCommand;
import com.szpg.plc.message.command.write.SetSdThresholdWordCommand;
+import com.szpg.plc.message.command.write.SetWdThresholdWordCommand;
import com.szpg.plc.protocol.fins.FINSConstants;
import com.szpg.plc.server.ACUClient;
import com.szpg.plc.server.ACUClientUtil;
@@ -212,7 +213,7 @@
command.setMessageProducerId(sour);
command.setDestinationId(dest);
- command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD);
+ command.setMemoryArea(FINSConstants.MEMORY_DM_AREA);
int start = temBlObj.getKszdz();
int end = temBlObj.getJszdz();
@@ -231,6 +232,10 @@
dataByte.append(new byte[] {temps[2 * (j-1)], temps[2 * (j-1) + 1]});
}
command.setValue( dataByte.toBytes() );
+ ((SetWdThresholdWordCommand) command).setThreshold(Float.parseFloat(wdThreshold));
+
+ Logger.getLogger(this.getClass().getName()).info(wdThreshold);
+ Logger.getLogger(this.getClass().getName()).info(ByteUtil.binToHexString(temps));
// 调用服务过程执行命令发送服务
SetSensorThresholdService service = new SetSensorThresholdService();
diff --git a/src/com/szpg/rmi/RemoteZMCommandAction.java b/src/com/szpg/rmi/RemoteZMCommandAction.java
index cb3fd17..6c12fcc 100644
--- a/src/com/szpg/rmi/RemoteZMCommandAction.java
+++ b/src/com/szpg/rmi/RemoteZMCommandAction.java
@@ -4,14 +4,10 @@
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
-import com.szpg.db.dao.PgAcuCmdDao;
import com.szpg.db.dao.PgAcuDao;
-import com.szpg.db.dao.impl.PgAcuCmdDaoImpl;
import com.szpg.db.dao.impl.PgAcuDaoImpl;
import com.szpg.db.data.PgAcu;
-import com.szpg.db.data.PgAcuCmd;
import com.szpg.plc.message.AppMessageConstants;
-import com.szpg.plc.message.CommandResponse;
import com.szpg.plc.message.command.ReadMemoryCommand;
import com.szpg.plc.message.command.write.SetZmOffBitCommand;
import com.szpg.plc.message.command.write.SetZmOnBitCommand;
@@ -24,6 +20,7 @@
import com.szpg.service.ReadControllerStatusService;
import com.szpg.service.command.LightCommandService;
import com.szpg.util.Configure;
+import com.szpg.util.HttpRequest;
import com.szpg.util.UnicodeConvertor;
import z.json.JSONObject;
@@ -147,6 +144,8 @@
// 返回结果
JSONObject jResult = new JSONObject();
+ logger.info("[进入打开应急照明接口]" + zcbh);
+
if (null == zcbh || zcbh.equals("") == true) {
jResult.put("success", false);
jResult.put("code", "1");
@@ -188,13 +187,14 @@
// 2 发送设置启动位的命令
// 构建打开照明指令
SetZmOnBitCommand setOnCmd = LightCommandService.buildTurnOnCommand(sour, dest, zcbh);
+
if (null != setOnCmd) {
// 解析命令对象为字节数组
byte[] content = finspi.messageToBytes(setOnCmd);
// 通过socket接口发送出去
ACUClientUtil.getInstance().sendACUCommand(client, content);
- logger.info("[发送打开照明指令]" + ByteUtil.binToHexString(content));
+ Logger.getLogger(this.getClass().getName()).info(setOnCmd);
} else {
jResult.put("success", false);
jResult.put("code", "4");
@@ -204,72 +204,27 @@
return null;
}
- // 3将命令存入数据库
- PgAcuCmdDao cmdDao = new PgAcuCmdDaoImpl();
- PgAcuCmd cmd = new PgAcuCmd();
- cmd.setCmd_type(setOnCmd.getCommandType());
- cmd.setDest_acu_code(acucode);
- cmd.setTm(setOnCmd.getTime().getTime());
- cmdDao.addCmdRecord(cmd);
-
- // 4阻塞,循环查找响应消息池,找到对应的响应消息
- boolean flag = false;
- int times = 0;
- CommandResponse response = null;
- while (flag == false && times < 240) {
- response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId());
-
- if (null != response && response.equals("") == false) {
- flag = true;
- }
-
- times++;
- try {
- Thread.sleep(500);
- } catch (InterruptedException e) {
- // 目前的处理流程为1)记录日志;2)将命令置为超时
- logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e);
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "5");
- jResult.put("reason", UnicodeConvertor.string2Unicode("查找命令的响应消息时异常"));
-
- returnToFront(jResult);
- return null;
- }
+ // 20190515增加的逻辑,在置1打开位一秒钟后,将该位复位
+ Thread.sleep(1 * 1000);
+ setOnCmd = LightCommandService.buildResetTurnOnCommand(sour, dest, zcbh);
+ if (null != setOnCmd) {
+ byte[] content = finspi.messageToBytes(setOnCmd);
+ ACUClientUtil.getInstance().sendACUCommand(client, content);
+ Logger.getLogger(this.getClass().getName()).info("[打开照明置1位复位]");
}
- // 5若未超时,将值存入数据库
- if (null != response) {
- // 6根据命令类型的不同将监测值存入对应的数据库
- response.afterAction();
-
- // 成功返回
- jResult.put("success", true);
- jResult.put("code", "0");
-
- // 20190515增加的逻辑,在置1打开位一秒钟后,将该位复位
- setOnCmd = LightCommandService.buildResetTurnOnCommand(sour, dest, zcbh);
- if (null != setOnCmd) {
- byte[] content = finspi.messageToBytes(setOnCmd);
- ACUClientUtil.getInstance().sendACUCommand(client, content);
- }
-
- returnToFront(jResult);
- return null;
- } else {
- // 9超时,将命令的超时标志位置1
- logger.warn("命令超时" + cmd.getId());
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "6");
- jResult.put("reason", UnicodeConvertor.string2Unicode("命令发送超时"));
-
- returnToFront(jResult);
- return null;
- }
+ // 5秒后查询一次照明的状态
+ Thread.sleep(5 * 1000);
+ // 调用远程接口查询照明状态
+ String baseURL = Configure.getProperty("sys", "PGDSC_API_URL");
+ HttpRequest.sendGet(baseURL + "remote/readZmStatus.action", "zcbh=" + zcbh);
+
+ // 返回成功给界面
+ jResult.put("success", true);
+ jResult.put("code", "0");
+ returnToFront(jResult);
+
+ return null;
} else {
jResult.put("success", false);
jResult.put("code", "3");
@@ -335,6 +290,7 @@
// 通过socket接口发送出去
ACUClientUtil.getInstance().sendACUCommand(client, content);
+ Logger.getLogger(this.getClass().getName()).info(setOffCmd);
} else {
jResult.put("success", false);
jResult.put("code", "4");
@@ -344,72 +300,27 @@
return null;
}
- // 3将命令存入数据库
- PgAcuCmdDao cmdDao = new PgAcuCmdDaoImpl();
- PgAcuCmd cmd = new PgAcuCmd();
- cmd.setCmd_type(setOffCmd.getCommandType());
- cmd.setDest_acu_code(acucode);
- cmd.setTm(setOffCmd.getTime().getTime());
- cmdDao.addCmdRecord(cmd);
-
- // 4阻塞,循环查找响应消息池,找到对应的响应消息
- boolean flag = false;
- int times = 0;
- CommandResponse response = null;
- while (flag == false && times < 240) {
- response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId());
-
- if (null != response && response.equals("") == false) {
- flag = true;
- }
-
- times++;
- try {
- Thread.sleep(500);
- } catch (InterruptedException e) {
- // 目前的处理流程为1)记录日志;2)将命令置为超时
- logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e);
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "5");
- jResult.put("reason", UnicodeConvertor.string2Unicode("查找命令的响应消息时异常"));
-
- returnToFront(jResult);
- return null;
- }
+ // 20190515增加的逻辑,在置1打开位一秒钟后,将该位复位
+ Thread.sleep(1 * 1000);
+ setOffCmd = LightCommandService.buildResetTurnOffCommand(sour, dest, zcbh);
+ if (null != setOffCmd) {
+ byte[] content = finspi.messageToBytes(setOffCmd);
+ ACUClientUtil.getInstance().sendACUCommand(client, content);
+ Logger.getLogger(this.getClass().getName()).info("[关闭照明置1位复位]");
}
- // 5若未超时,将值存入数据库
- if (null != response) {
- // 6根据命令类型的不同将监测值存入对应的数据库
- response.afterAction();
-
- // 成功返回
- jResult.put("success", true);
- jResult.put("code", "0");
-
- // 20190515增加的逻辑,在置1打开位一秒钟后,将该位复位
- setOffCmd = LightCommandService.buildResetTurnOffCommand(sour, dest, zcbh);
- if (null != setOffCmd) {
- byte[] content = finspi.messageToBytes(setOffCmd);
- ACUClientUtil.getInstance().sendACUCommand(client, content);
- }
-
- returnToFront(jResult);
- return null;
- } else {
- // 9超时,将命令的超时标志位置1
- logger.warn("命令超时" + cmd.getId());
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "6");
- jResult.put("reason", UnicodeConvertor.string2Unicode("命令发送超时"));
-
- returnToFront(jResult);
- return null;
- }
+ // 5秒后查询一次照明的状态
+ Thread.sleep(5 * 1000);
+ // 调用远程接口查询照明状态
+ String baseURL = Configure.getProperty("sys", "PGDSC_API_URL");
+ HttpRequest.sendGet(baseURL + "remote/readZmStatus.action", "zcbh=" + zcbh);
+
+ // 返回成功给界面
+ jResult.put("success", true);
+ jResult.put("code", "0");
+ returnToFront(jResult);
+
+ return null;
} else {
jResult.put("success", false);
jResult.put("code", "3");
@@ -434,4 +345,5 @@
ServletActionContext.getResponse().getWriter().write(jResult.toString());
}
+
}
diff --git a/src/struts.xml b/src/struts.xml
index d5fcaa9..2da47a8 100644
--- a/src/struts.xml
+++ b/src/struts.xml
@@ -42,5 +42,9 @@
+
+
+
+
diff --git a/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java
index fe487b7..e1de835 100644
--- a/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java
+++ b/src/com/szpg/plc/message/response/read/ReadJgStatusCommandResponse.java
@@ -181,6 +181,8 @@
char lockBt = dataStr.charAt(dataStr.length() - 1 - loffset * 16 - lbit); // 井盖解锁/锁定标志位
getJgsd().add(lockBt == '0' ? true : false); //0-锁定;1-解锁
+
+ logger.info("[" + zcbh + "][井盖状态" + getJgzt().get(i) + "][井盖锁定" + getJgsd().get(i) + "]");
}
logger.info("解析[读取井盖状态]响应指令结束");
diff --git a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java
index fda3077..4366960 100644
--- a/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java
+++ b/src/com/szpg/plc/message/response/read/ReadWSValueCommandResponse.java
@@ -167,7 +167,7 @@
String fjzcbh = fj.getAssetcode();
// 调用远程接口启动风机
- HttpRequest.sendGet(baseURL + "remote/turnOnFj.do", "zcbh=" + fjzcbh);
+ HttpRequest.sendGet(baseURL + "remote/turnOnFj.action", "zcbh=" + fjzcbh);
}
}
}
diff --git a/src/com/szpg/rmi/RemoteCH4CommandAction.java b/src/com/szpg/rmi/RemoteCH4CommandAction.java
index aff3866..cb63ae1 100644
--- a/src/com/szpg/rmi/RemoteCH4CommandAction.java
+++ b/src/com/szpg/rmi/RemoteCH4CommandAction.java
@@ -201,7 +201,7 @@
command.setMessageProducerId(sour);
command.setDestinationId(dest);
- command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD);
+ command.setMemoryArea(FINSConstants.MEMORY_DM_AREA);
int start = blObj.getKszdz();
int end = blObj.getJszdz();
diff --git a/src/com/szpg/rmi/RemoteCOCommandAction.java b/src/com/szpg/rmi/RemoteCOCommandAction.java
index dde2ac3..728211c 100644
--- a/src/com/szpg/rmi/RemoteCOCommandAction.java
+++ b/src/com/szpg/rmi/RemoteCOCommandAction.java
@@ -201,7 +201,7 @@
command.setMessageProducerId(sour);
command.setDestinationId(dest);
- command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD);
+ command.setMemoryArea(FINSConstants.MEMORY_DM_AREA);
int start = blObj.getKszdz();
int end = blObj.getJszdz();
diff --git a/src/com/szpg/rmi/RemoteDSCommandAction.java b/src/com/szpg/rmi/RemoteDSCommandAction.java
new file mode 100644
index 0000000..d1ec179
--- /dev/null
+++ b/src/com/szpg/rmi/RemoteDSCommandAction.java
@@ -0,0 +1,257 @@
+package com.szpg.rmi;
+
+import org.apache.log4j.Logger;
+import org.apache.struts2.ServletActionContext;
+
+import com.opensymphony.xwork2.ActionSupport;
+import com.szpg.db.dao.PgAcuDao;
+import com.szpg.db.dao.PgHjsbblDao;
+import com.szpg.db.dao.impl.PgAcuDaoImpl;
+import com.szpg.db.dao.impl.PgHjsbblDaoImpl;
+import com.szpg.db.data.PgAcu;
+import com.szpg.db.data.PgHjsbbl;
+import com.szpg.plc.message.AppMessageConstants;
+import com.szpg.plc.message.command.ReadMemoryCommand;
+import com.szpg.plc.message.command.write.SetDsRstBitCommand;
+import com.szpg.plc.protocol.DTProtocolInterface;
+import com.szpg.plc.protocol.ProtocolFactory;
+import com.szpg.plc.protocol.fins.FINSConstants;
+import com.szpg.plc.server.ACUClient;
+import com.szpg.plc.server.ACUClientUtil;
+import com.szpg.plc.util.ByteUtil;
+import com.szpg.service.ReadControllerStatusService;
+import com.szpg.util.Configure;
+import com.szpg.util.UnicodeConvertor;
+
+import z.json.JSONObject;
+
+public class RemoteDSCommandAction extends ActionSupport {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 2221187086461756012L;
+
+ private String zcbh;
+
+ private String format;
+ private String jsoncallback;
+
+ private Logger logger = Logger.getLogger(this.getClass().getName());
+
+ public String getZcbh() {
+ return zcbh;
+ }
+
+ public void setZcbh(String zcbh) {
+ this.zcbh = zcbh;
+ }
+
+ public String getFormat() {
+ return format;
+ }
+
+ public void setFormat(String format) {
+ this.format = format;
+ }
+
+ public String getJsoncallback() {
+ return jsoncallback;
+ }
+
+ public void setJsoncallback(String jsoncallback) {
+ this.jsoncallback = jsoncallback;
+ }
+
+ /**
+ * 读取对射实时状态
+ * @return
+ * @throws Exception
+ */
+ public String readDsStatus() throws Exception {
+ // 返回结果
+ JSONObject jResult = new JSONObject();
+
+ PgAcuDao acuDao = new PgAcuDaoImpl();
+
+ if (null == zcbh || zcbh.equals("") == true) {
+ jResult.put("success", false);
+ jResult.put("code", "1");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("资产编号为空"));
+
+ returnToFront(jResult);
+ return null;
+ }
+
+ String acucode = zcbh.substring(0, zcbh.indexOf(".", 6));
+ PgAcu acu = acuDao.findACUByCode(acucode);
+ if (null == acu) {
+ jResult.put("success", false);
+ jResult.put("code", "2");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("未找到资产对应的PLC主机"));
+
+ returnToFront(jResult);
+ return null;
+ }
+
+ ACUClient client = ACUClientUtil.getInstance().getClients().get(acu.getAcu_host() + ":" + acu.getAcu_port());
+ if (null != client) {
+ ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READDSSTATUS);
+ String sour = Configure.getProperty("sys", "LOCALHOST.NET") +
+ Configure.getProperty("sys", "LOCALHOST.NODE") +
+ Configure.getProperty("sys", "LOCALHOST.UNIT");
+ command.setMessageProducerId(sour);
+
+ String dest = client.getNet() + client.getNode() + client.getUnit();
+ command.setDestinationId(dest);
+ command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD); //按字读取内容
+
+ try {
+ // 设置读取的地址范围
+ // 从配置文件读取而来
+ command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DSALM.START")), 2)) + "00");
+ command.setCountWord(Integer.parseInt(Configure.getProperty("acubl", client.getAcucode() + ".DSALM.WORDCOUNT")));
+
+ // 调用服务过程执行命令发送服务
+ ReadControllerStatusService service = new ReadControllerStatusService();
+ service.executeService(client, command);
+ logger.info(command);
+ } catch (Exception ex) {
+ logger.error("发送查询对射指令异常" + ex);
+ }
+
+ jResult.put("success", true);
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("发送成功,请等待响应"));
+
+ returnToFront(jResult);
+ return null;
+ } else {
+ jResult.put("success", false);
+ jResult.put("code", "3");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("PLC主机不在线"));
+
+ returnToFront(jResult);
+ return null;
+ }
+ }
+
+ /**
+ * 清除对射报警
+ * @return
+ * @throws Exception
+ */
+ public String clearDsAlarm() throws Exception {
+ // 返回结果
+ JSONObject jResult = new JSONObject();
+
+ if (null == zcbh || zcbh.equals("") == true) {
+ jResult.put("success", false);
+ jResult.put("code", "1");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("资产编号为空"));
+
+ returnToFront(jResult);
+ return null;
+ }
+
+ // 查找ACU的信息
+ PgAcuDao acuDao = new PgAcuDaoImpl();
+
+ String acucode = zcbh.substring(0, zcbh.indexOf(".", 6));
+ PgAcu acu = acuDao.findACUByCode(acucode);
+ if (null == acu) {
+ jResult.put("success", false);
+ jResult.put("code", "2");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("未找到资产对应的PLC主机"));
+
+ returnToFront(jResult);
+ return null;
+ }
+
+ ACUClient client = ACUClientUtil.getInstance().getClients().get(acu.getAcu_host() + ":" + acu.getAcu_port());
+ if (null != client) {
+ // 源地址
+ String sour = Configure.getProperty("sys", "LOCALHOST.NET") +
+ Configure.getProperty("sys", "LOCALHOST.NODE") +
+ Configure.getProperty("sys", "LOCALHOST.UNIT");
+
+ // 目标地址
+ String dest = client.getNet() + client.getNode() + client.getUnit();
+
+ DTProtocolInterface finspi = ProtocolFactory.getDefaultDTProtocol();
+
+ PgHjsbblDao blDao = new PgHjsbblDaoImpl();
+
+ // 构建指令
+ SetDsRstBitCommand rstCmd = new SetDsRstBitCommand();
+ rstCmd.setRst(SetDsRstBitCommand.DS_RST);
+ PgHjsbbl rstBlObj = blDao.findBlByBh(zcbh + ".RST");
+ if (null != rstBlObj) {
+ rstCmd.setMessageProducerId(sour);
+ rstCmd.setDestinationId(dest);
+
+ // SID在new对象的时候已经生成
+
+ // 内存区域——按位写
+ rstCmd.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_BIT);
+
+ int start = rstBlObj.getKszdz();
+ int end = rstBlObj.getJszdz();
+ int bit = rstBlObj.getSzw();
+
+ // 开始字地址
+ rstCmd.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(start, 2)));
+
+ // 位地址
+ rstCmd.setBit(bit);
+
+ // 位数
+ rstCmd.setCount(end - start + 1);
+
+ // 位内容
+ rstCmd.setValue(new byte[] {(byte) SetDsRstBitCommand.DS_RST} );
+
+ // 解析命令对象为字节数组
+ byte[] content = finspi.messageToBytes(rstCmd);
+
+ // 通过socket接口发送出去
+ ACUClientUtil.getInstance().sendACUCommand(client, content);
+ } else {
+ jResult.put("success", false);
+ jResult.put("code", "4");
+ jResult.put("reason", UnicodeConvertor.string2Unicode("未找到资产对应的解锁井盖变量"));
+
+ returnToFront(jResult);
+ return null;
+ }
+
+ // 返回成功给界面
+ jResult.put("success", true);
+ jResult.put("code", "0");
+ returnToFront(jResult);
+
+ return null;
+ } else {
+ jResult.put("success", false);
+ jResult.put("code", "3");
+ jResult.put("resaon", UnicodeConvertor.string2Unicode("PLC主机不在线"));
+
+ returnToFront(jResult);
+ return null;
+ }
+ }
+
+ /**
+ * 给前端返回
+ * @param jResult
+ * @throws Exception
+ */
+ private void returnToFront(JSONObject jResult) throws Exception {
+ // 返回jsonp格式的数据
+ if (null != format && format.equalsIgnoreCase("jsonp") == true) {
+ ServletActionContext.getResponse().getWriter().write(jsoncallback + "(" + jResult.toString() + ");");
+ }
+
+ ServletActionContext.getResponse().getWriter().write(jResult.toString());
+ }
+
+}
diff --git a/src/com/szpg/rmi/RemoteFJCommandAction.java b/src/com/szpg/rmi/RemoteFJCommandAction.java
index b0a1ed1..81510c8 100644
--- a/src/com/szpg/rmi/RemoteFJCommandAction.java
+++ b/src/com/szpg/rmi/RemoteFJCommandAction.java
@@ -4,14 +4,10 @@
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
-import com.szpg.db.dao.PgAcuCmdDao;
import com.szpg.db.dao.PgAcuDao;
-import com.szpg.db.dao.impl.PgAcuCmdDaoImpl;
import com.szpg.db.dao.impl.PgAcuDaoImpl;
import com.szpg.db.data.PgAcu;
-import com.szpg.db.data.PgAcuCmd;
import com.szpg.plc.message.AppMessageConstants;
-import com.szpg.plc.message.CommandResponse;
import com.szpg.plc.message.command.ReadMemoryCommand;
import com.szpg.plc.message.command.write.SetFjOffBitCommand;
import com.szpg.plc.message.command.write.SetFjOnBitCommand;
@@ -24,6 +20,7 @@
import com.szpg.service.ReadControllerStatusService;
import com.szpg.service.command.ExhaustFanCommandService;
import com.szpg.util.Configure;
+import com.szpg.util.HttpRequest;
import com.szpg.util.UnicodeConvertor;
import z.json.JSONObject;
@@ -120,7 +117,7 @@
service.executeService(client, command);
logger.info(command);
} catch (Exception ex) {
- logger.error("发送查询温湿度指令异常" + ex);
+ logger.error("发送查询风机状态指令异常" + ex);
}
jResult.put("success", true);
@@ -194,6 +191,7 @@
// 通过socket接口发送出去
ACUClientUtil.getInstance().sendACUCommand(client, content);
+ Logger.getLogger(this.getClass().getName()).info(setOnCmd);
} else {
jResult.put("success", false);
jResult.put("code", "4");
@@ -203,72 +201,27 @@
return null;
}
- // 3将命令存入数据库
- PgAcuCmdDao cmdDao = new PgAcuCmdDaoImpl();
- PgAcuCmd cmd = new PgAcuCmd();
- cmd.setCmd_type(setOnCmd.getCommandType());
- cmd.setDest_acu_code(acucode);
- cmd.setTm(setOnCmd.getTime().getTime());
- cmdDao.addCmdRecord(cmd);
-
- // 4阻塞,循环查找响应消息池,找到对应的响应消息
- boolean flag = false;
- int times = 0;
- CommandResponse response = null;
- while (flag == false && times < 240) {
- response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId());
-
- if (null != response && response.equals("") == false) {
- flag = true;
- }
-
- times++;
- try {
- Thread.sleep(500);
- } catch (InterruptedException e) {
- // 目前的处理流程为1)记录日志;2)将命令置为超时
- logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e);
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "5");
- jResult.put("reason", UnicodeConvertor.string2Unicode("查找命令的响应消息时异常"));
-
- returnToFront(jResult);
- return null;
- }
+ // 20190515增加的逻辑,在置1打开位一秒钟后,将该位复位
+ Thread.sleep(1 * 1000);
+ setOnCmd = ExhaustFanCommandService.buildResetTurnOnCommand(sour, dest, zcbh);
+ if (null != setOnCmd) {
+ byte[] content = finspi.messageToBytes(setOnCmd);
+ ACUClientUtil.getInstance().sendACUCommand(client, content);
+ Logger.getLogger(this.getClass().getName()).info("[打开风机置1位复位]");
}
- // 5若未超时,将值存入数据库
- if (null != response) {
- // 6根据命令类型的不同将监测值存入对应的数据库
- response.afterAction();
-
- // 成功返回
- jResult.put("success", true);
- jResult.put("code", "0");
-
- // 20190515增加的逻辑,在置1打开位一秒钟后,将该位复位
- setOnCmd = ExhaustFanCommandService.buildResetTurnOnCommand(sour, dest, zcbh);
- if (null != setOnCmd) {
- byte[] content = finspi.messageToBytes(setOnCmd);
- ACUClientUtil.getInstance().sendACUCommand(client, content);
- }
-
- returnToFront(jResult);
- return null;
- } else {
- // 9超时,将命令的超时标志位置1
- logger.warn("命令超时" + cmd.getId());
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "6");
- jResult.put("reason", UnicodeConvertor.string2Unicode("命令发送超时"));
-
- returnToFront(jResult);
- return null;
- }
+ // 5秒后查询一次风机的状态
+ Thread.sleep(5 * 1000);
+ // 调用远程接口查询风机状态
+ String baseURL = Configure.getProperty("sys", "PGDSC_API_URL");
+ HttpRequest.sendGet(baseURL + "remote/readFjStatus.action", "zcbh=" + zcbh);
+
+ // 返回成功给界面
+ jResult.put("success", true);
+ jResult.put("code", "0");
+ returnToFront(jResult);
+
+ return null;
} else {
jResult.put("success", false);
jResult.put("code", "3");
@@ -334,6 +287,7 @@
// 通过socket接口发送出去
ACUClientUtil.getInstance().sendACUCommand(client, content);
+ Logger.getLogger(this.getClass().getName()).info(setOffCmd);
} else {
jResult.put("success", false);
jResult.put("code", "4");
@@ -343,72 +297,27 @@
return null;
}
- // 3将命令存入数据库
- PgAcuCmdDao cmdDao = new PgAcuCmdDaoImpl();
- PgAcuCmd cmd = new PgAcuCmd();
- cmd.setCmd_type(setOffCmd.getCommandType());
- cmd.setDest_acu_code(acucode);
- cmd.setTm(setOffCmd.getTime().getTime());
- cmdDao.addCmdRecord(cmd);
-
- // 4阻塞,循环查找响应消息池,找到对应的响应消息
- boolean flag = false;
- int times = 0;
- CommandResponse response = null;
- while (flag == false && times < 240) {
- response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId());
-
- if (null != response && response.equals("") == false) {
- flag = true;
- }
-
- times++;
- try {
- Thread.sleep(500);
- } catch (InterruptedException e) {
- // 目前的处理流程为1)记录日志;2)将命令置为超时
- logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e);
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "5");
- jResult.put("reason", UnicodeConvertor.string2Unicode("查找命令的响应消息时异常"));
-
- returnToFront(jResult);
- return null;
- }
+ // 20190515增加的逻辑,在置1打开位一秒钟后,将该位复位
+ Thread.sleep(1 * 1000);
+ setOffCmd = ExhaustFanCommandService.buildResetTurnOffCommand(sour, dest, zcbh);
+ if (null != setOffCmd) {
+ byte[] content = finspi.messageToBytes(setOffCmd);
+ ACUClientUtil.getInstance().sendACUCommand(client, content);
+ Logger.getLogger(this.getClass().getName()).info("[关闭风机置1位复位]");
}
- // 5若未超时,将值存入数据库
- if (null != response) {
- // 6根据命令类型的不同将监测值存入对应的数据库
- response.afterAction();
-
- // 成功返回
- jResult.put("success", true);
- jResult.put("code", "0");
-
- // 20190515增加的逻辑,在置1打开位一秒钟后,将该位复位
- setOffCmd = ExhaustFanCommandService.buildResetTurnOffCommand(sour, dest, zcbh);
- if (null != setOffCmd) {
- byte[] content = finspi.messageToBytes(setOffCmd);
- ACUClientUtil.getInstance().sendACUCommand(client, content);
- }
-
- returnToFront(jResult);
- return null;
- } else {
- // 9超时,将命令的超时标志位置1
- logger.warn("命令超时" + cmd.getId());
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "6");
- jResult.put("reason", UnicodeConvertor.string2Unicode("命令发送超时"));
-
- returnToFront(jResult);
- return null;
- }
+ // 5秒后查询一次照明的状态
+ Thread.sleep(5 * 1000);
+ // 调用远程接口查询风机状态
+ String baseURL = Configure.getProperty("sys", "PGDSC_API_URL");
+ HttpRequest.sendGet(baseURL + "remote/readFjStatus.action", "zcbh=" + zcbh);
+
+ // 返回成功给界面
+ jResult.put("success", true);
+ jResult.put("code", "0");
+ returnToFront(jResult);
+
+ return null;
} else {
jResult.put("success", false);
jResult.put("code", "3");
diff --git a/src/com/szpg/rmi/RemoteHSCommandAction.java b/src/com/szpg/rmi/RemoteHSCommandAction.java
index b074b7b..97144c2 100644
--- a/src/com/szpg/rmi/RemoteHSCommandAction.java
+++ b/src/com/szpg/rmi/RemoteHSCommandAction.java
@@ -201,7 +201,7 @@
command.setMessageProducerId(sour);
command.setDestinationId(dest);
- command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD);
+ command.setMemoryArea(FINSConstants.MEMORY_DM_AREA);
int start = blObj.getKszdz();
int end = blObj.getJszdz();
diff --git a/src/com/szpg/rmi/RemoteJGCommandAction.java b/src/com/szpg/rmi/RemoteJGCommandAction.java
index 66ab793..69a8d3f 100644
--- a/src/com/szpg/rmi/RemoteJGCommandAction.java
+++ b/src/com/szpg/rmi/RemoteJGCommandAction.java
@@ -4,17 +4,13 @@
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
-import com.szpg.db.dao.PgAcuCmdDao;
import com.szpg.db.dao.PgAcuDao;
import com.szpg.db.dao.PgHjsbblDao;
-import com.szpg.db.dao.impl.PgAcuCmdDaoImpl;
import com.szpg.db.dao.impl.PgAcuDaoImpl;
import com.szpg.db.dao.impl.PgHjsbblDaoImpl;
import com.szpg.db.data.PgAcu;
-import com.szpg.db.data.PgAcuCmd;
import com.szpg.db.data.PgHjsbbl;
import com.szpg.plc.message.AppMessageConstants;
-import com.szpg.plc.message.CommandResponse;
import com.szpg.plc.message.command.ReadMemoryCommand;
import com.szpg.plc.message.command.write.SetJgUnlockBitCommand;
import com.szpg.plc.protocol.DTProtocolInterface;
@@ -25,6 +21,7 @@
import com.szpg.plc.util.ByteUtil;
import com.szpg.service.ReadControllerStatusService;
import com.szpg.util.Configure;
+import com.szpg.util.HttpRequest;
import com.szpg.util.UnicodeConvertor;
import z.json.JSONObject;
@@ -72,7 +69,7 @@
* @return
* @throws Exception
*/
- public String readZmStatus() throws Exception {
+ public String readJgStatus() throws Exception {
// 返回结果
JSONObject jResult = new JSONObject();
@@ -227,65 +224,18 @@
return null;
}
- // 3将命令存入数据库
- PgAcuCmdDao cmdDao = new PgAcuCmdDaoImpl();
- PgAcuCmd cmd = new PgAcuCmd();
- cmd.setCmd_type(setUnlockCmd.getCommandType());
- cmd.setDest_acu_code(acucode);
- cmd.setTm(setUnlockCmd.getTime().getTime());
- cmdDao.addCmdRecord(cmd);
+ // 5秒后查询一次照明的状态
+ Thread.sleep(5 * 1000);
+ // 调用远程接口查询照明状态
+ String baseURL = Configure.getProperty("sys", "PGDSC_API_URL");
+ HttpRequest.sendGet(baseURL + "remote/readJgStatus.action", "zcbh=" + zcbh);
- // 4阻塞,循环查找响应消息池,找到对应的响应消息
- boolean flag = false;
- int times = 0;
- CommandResponse response = null;
- while (flag == false && times < 240) {
- response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId());
-
- if (null != response && response.equals("") == false) {
- flag = true;
- }
-
- times++;
- try {
- Thread.sleep(500);
- } catch (InterruptedException e) {
- // 目前的处理流程为1)记录日志;2)将命令置为超时
- logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e);
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "5");
- jResult.put("reason", UnicodeConvertor.string2Unicode("查找命令的响应消息时异常"));
-
- returnToFront(jResult);
- return null;
- }
- }
+ // 成功返回
+ jResult.put("success", true);
+ jResult.put("code", "0");
- // 5若未超时,将值存入数据库
- if (null != response) {
- // 6根据命令类型的不同将监测值存入对应的数据库
- response.afterAction();
-
- // 成功返回
- jResult.put("success", true);
- jResult.put("code", "0");
-
- returnToFront(jResult);
- return null;
- } else {
- // 9超时,将命令的超时标志位置1
- logger.warn("命令超时" + cmd.getId());
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "6");
- jResult.put("reason", UnicodeConvertor.string2Unicode("命令发送超时"));
-
- returnToFront(jResult);
- return null;
- }
+ returnToFront(jResult);
+ return null;
} else {
jResult.put("success", false);
jResult.put("code", "3");
@@ -383,65 +333,18 @@
return null;
}
- // 3将命令存入数据库
- PgAcuCmdDao cmdDao = new PgAcuCmdDaoImpl();
- PgAcuCmd cmd = new PgAcuCmd();
- cmd.setCmd_type(setLockCmd.getCommandType());
- cmd.setDest_acu_code(acucode);
- cmd.setTm(setLockCmd.getTime().getTime());
- cmdDao.addCmdRecord(cmd);
+ // 5秒后查询一次照明的状态
+ Thread.sleep(5 * 1000);
+ // 调用远程接口查询照明状态
+ String baseURL = Configure.getProperty("sys", "PGDSC_API_URL");
+ HttpRequest.sendGet(baseURL + "remote/readJgStatus.action", "zcbh=" + zcbh);
- // 4阻塞,循环查找响应消息池,找到对应的响应消息
- boolean flag = false;
- int times = 0;
- CommandResponse response = null;
- while (flag == false && times < 240) {
- response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId());
-
- if (null != response && response.equals("") == false) {
- flag = true;
- }
-
- times++;
- try {
- Thread.sleep(500);
- } catch (InterruptedException e) {
- // 目前的处理流程为1)记录日志;2)将命令置为超时
- logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e);
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "5");
- jResult.put("reason", UnicodeConvertor.string2Unicode("查找命令的响应消息时异常"));
-
- returnToFront(jResult);
- return null;
- }
- }
+ // 成功返回
+ jResult.put("success", true);
+ jResult.put("code", "0");
- // 5若未超时,将值存入数据库
- if (null != response) {
- // 6根据命令类型的不同将监测值存入对应的数据库
- response.afterAction();
-
- // 成功返回
- jResult.put("success", true);
- jResult.put("code", "0");
-
- returnToFront(jResult);
- return null;
- } else {
- // 9超时,将命令的超时标志位置1
- logger.warn("命令超时" + cmd.getId());
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "6");
- jResult.put("reason", UnicodeConvertor.string2Unicode("命令发送超时"));
-
- returnToFront(jResult);
- return null;
- }
+ returnToFront(jResult);
+ return null;
} else {
jResult.put("success", false);
jResult.put("code", "3");
diff --git a/src/com/szpg/rmi/RemoteO2CommandAction.java b/src/com/szpg/rmi/RemoteO2CommandAction.java
index 45beb84..9097cec 100644
--- a/src/com/szpg/rmi/RemoteO2CommandAction.java
+++ b/src/com/szpg/rmi/RemoteO2CommandAction.java
@@ -200,7 +200,7 @@
command.setMessageProducerId(sour);
command.setDestinationId(dest);
- command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD);
+ command.setMemoryArea(FINSConstants.MEMORY_DM_AREA);
((SetO2ThresholdWordCommand) command).setThreshold(Float.parseFloat(threshold));
int start = blObj.getKszdz();
@@ -220,9 +220,6 @@
for (int j = n; j > 0; j--) {
dataByte.append(new byte[] {temps[2 * (j-1)], temps[2 * (j-1) + 1]});
}
-// for (int j = 0; j < n; j++) {
-// dataByte.append(new byte[] {temps[2 * j], temps[2 * j + 1]});
-// }
command.setValue( dataByte.toBytes() );
// 调用服务过程执行命令发送服务
diff --git a/src/com/szpg/rmi/RemoteWSCommandAction.java b/src/com/szpg/rmi/RemoteWSCommandAction.java
index fb813fb..e7dcf85 100644
--- a/src/com/szpg/rmi/RemoteWSCommandAction.java
+++ b/src/com/szpg/rmi/RemoteWSCommandAction.java
@@ -19,6 +19,7 @@
import com.szpg.plc.message.command.ReadMemoryCommand;
import com.szpg.plc.message.command.WriteMemoryCommand;
import com.szpg.plc.message.command.write.SetSdThresholdWordCommand;
+import com.szpg.plc.message.command.write.SetWdThresholdWordCommand;
import com.szpg.plc.protocol.fins.FINSConstants;
import com.szpg.plc.server.ACUClient;
import com.szpg.plc.server.ACUClientUtil;
@@ -212,7 +213,7 @@
command.setMessageProducerId(sour);
command.setDestinationId(dest);
- command.setMemoryArea(FINSConstants.MEMORY_WORK_AREA_WORD);
+ command.setMemoryArea(FINSConstants.MEMORY_DM_AREA);
int start = temBlObj.getKszdz();
int end = temBlObj.getJszdz();
@@ -231,6 +232,10 @@
dataByte.append(new byte[] {temps[2 * (j-1)], temps[2 * (j-1) + 1]});
}
command.setValue( dataByte.toBytes() );
+ ((SetWdThresholdWordCommand) command).setThreshold(Float.parseFloat(wdThreshold));
+
+ Logger.getLogger(this.getClass().getName()).info(wdThreshold);
+ Logger.getLogger(this.getClass().getName()).info(ByteUtil.binToHexString(temps));
// 调用服务过程执行命令发送服务
SetSensorThresholdService service = new SetSensorThresholdService();
diff --git a/src/com/szpg/rmi/RemoteZMCommandAction.java b/src/com/szpg/rmi/RemoteZMCommandAction.java
index cb3fd17..6c12fcc 100644
--- a/src/com/szpg/rmi/RemoteZMCommandAction.java
+++ b/src/com/szpg/rmi/RemoteZMCommandAction.java
@@ -4,14 +4,10 @@
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
-import com.szpg.db.dao.PgAcuCmdDao;
import com.szpg.db.dao.PgAcuDao;
-import com.szpg.db.dao.impl.PgAcuCmdDaoImpl;
import com.szpg.db.dao.impl.PgAcuDaoImpl;
import com.szpg.db.data.PgAcu;
-import com.szpg.db.data.PgAcuCmd;
import com.szpg.plc.message.AppMessageConstants;
-import com.szpg.plc.message.CommandResponse;
import com.szpg.plc.message.command.ReadMemoryCommand;
import com.szpg.plc.message.command.write.SetZmOffBitCommand;
import com.szpg.plc.message.command.write.SetZmOnBitCommand;
@@ -24,6 +20,7 @@
import com.szpg.service.ReadControllerStatusService;
import com.szpg.service.command.LightCommandService;
import com.szpg.util.Configure;
+import com.szpg.util.HttpRequest;
import com.szpg.util.UnicodeConvertor;
import z.json.JSONObject;
@@ -147,6 +144,8 @@
// 返回结果
JSONObject jResult = new JSONObject();
+ logger.info("[进入打开应急照明接口]" + zcbh);
+
if (null == zcbh || zcbh.equals("") == true) {
jResult.put("success", false);
jResult.put("code", "1");
@@ -188,13 +187,14 @@
// 2 发送设置启动位的命令
// 构建打开照明指令
SetZmOnBitCommand setOnCmd = LightCommandService.buildTurnOnCommand(sour, dest, zcbh);
+
if (null != setOnCmd) {
// 解析命令对象为字节数组
byte[] content = finspi.messageToBytes(setOnCmd);
// 通过socket接口发送出去
ACUClientUtil.getInstance().sendACUCommand(client, content);
- logger.info("[发送打开照明指令]" + ByteUtil.binToHexString(content));
+ Logger.getLogger(this.getClass().getName()).info(setOnCmd);
} else {
jResult.put("success", false);
jResult.put("code", "4");
@@ -204,72 +204,27 @@
return null;
}
- // 3将命令存入数据库
- PgAcuCmdDao cmdDao = new PgAcuCmdDaoImpl();
- PgAcuCmd cmd = new PgAcuCmd();
- cmd.setCmd_type(setOnCmd.getCommandType());
- cmd.setDest_acu_code(acucode);
- cmd.setTm(setOnCmd.getTime().getTime());
- cmdDao.addCmdRecord(cmd);
-
- // 4阻塞,循环查找响应消息池,找到对应的响应消息
- boolean flag = false;
- int times = 0;
- CommandResponse response = null;
- while (flag == false && times < 240) {
- response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId());
-
- if (null != response && response.equals("") == false) {
- flag = true;
- }
-
- times++;
- try {
- Thread.sleep(500);
- } catch (InterruptedException e) {
- // 目前的处理流程为1)记录日志;2)将命令置为超时
- logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e);
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "5");
- jResult.put("reason", UnicodeConvertor.string2Unicode("查找命令的响应消息时异常"));
-
- returnToFront(jResult);
- return null;
- }
+ // 20190515增加的逻辑,在置1打开位一秒钟后,将该位复位
+ Thread.sleep(1 * 1000);
+ setOnCmd = LightCommandService.buildResetTurnOnCommand(sour, dest, zcbh);
+ if (null != setOnCmd) {
+ byte[] content = finspi.messageToBytes(setOnCmd);
+ ACUClientUtil.getInstance().sendACUCommand(client, content);
+ Logger.getLogger(this.getClass().getName()).info("[打开照明置1位复位]");
}
- // 5若未超时,将值存入数据库
- if (null != response) {
- // 6根据命令类型的不同将监测值存入对应的数据库
- response.afterAction();
-
- // 成功返回
- jResult.put("success", true);
- jResult.put("code", "0");
-
- // 20190515增加的逻辑,在置1打开位一秒钟后,将该位复位
- setOnCmd = LightCommandService.buildResetTurnOnCommand(sour, dest, zcbh);
- if (null != setOnCmd) {
- byte[] content = finspi.messageToBytes(setOnCmd);
- ACUClientUtil.getInstance().sendACUCommand(client, content);
- }
-
- returnToFront(jResult);
- return null;
- } else {
- // 9超时,将命令的超时标志位置1
- logger.warn("命令超时" + cmd.getId());
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "6");
- jResult.put("reason", UnicodeConvertor.string2Unicode("命令发送超时"));
-
- returnToFront(jResult);
- return null;
- }
+ // 5秒后查询一次照明的状态
+ Thread.sleep(5 * 1000);
+ // 调用远程接口查询照明状态
+ String baseURL = Configure.getProperty("sys", "PGDSC_API_URL");
+ HttpRequest.sendGet(baseURL + "remote/readZmStatus.action", "zcbh=" + zcbh);
+
+ // 返回成功给界面
+ jResult.put("success", true);
+ jResult.put("code", "0");
+ returnToFront(jResult);
+
+ return null;
} else {
jResult.put("success", false);
jResult.put("code", "3");
@@ -335,6 +290,7 @@
// 通过socket接口发送出去
ACUClientUtil.getInstance().sendACUCommand(client, content);
+ Logger.getLogger(this.getClass().getName()).info(setOffCmd);
} else {
jResult.put("success", false);
jResult.put("code", "4");
@@ -344,72 +300,27 @@
return null;
}
- // 3将命令存入数据库
- PgAcuCmdDao cmdDao = new PgAcuCmdDaoImpl();
- PgAcuCmd cmd = new PgAcuCmd();
- cmd.setCmd_type(setOffCmd.getCommandType());
- cmd.setDest_acu_code(acucode);
- cmd.setTm(setOffCmd.getTime().getTime());
- cmdDao.addCmdRecord(cmd);
-
- // 4阻塞,循环查找响应消息池,找到对应的响应消息
- boolean flag = false;
- int times = 0;
- CommandResponse response = null;
- while (flag == false && times < 240) {
- response = ACUClientUtil.getInstance().responsePool.getResponse(cmd.getId());
-
- if (null != response && response.equals("") == false) {
- flag = true;
- }
-
- times++;
- try {
- Thread.sleep(500);
- } catch (InterruptedException e) {
- // 目前的处理流程为1)记录日志;2)将命令置为超时
- logger.error("在响应池中查找命令的响应消息阻塞线程被异常打断", e);
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "5");
- jResult.put("reason", UnicodeConvertor.string2Unicode("查找命令的响应消息时异常"));
-
- returnToFront(jResult);
- return null;
- }
+ // 20190515增加的逻辑,在置1打开位一秒钟后,将该位复位
+ Thread.sleep(1 * 1000);
+ setOffCmd = LightCommandService.buildResetTurnOffCommand(sour, dest, zcbh);
+ if (null != setOffCmd) {
+ byte[] content = finspi.messageToBytes(setOffCmd);
+ ACUClientUtil.getInstance().sendACUCommand(client, content);
+ Logger.getLogger(this.getClass().getName()).info("[关闭照明置1位复位]");
}
- // 5若未超时,将值存入数据库
- if (null != response) {
- // 6根据命令类型的不同将监测值存入对应的数据库
- response.afterAction();
-
- // 成功返回
- jResult.put("success", true);
- jResult.put("code", "0");
-
- // 20190515增加的逻辑,在置1打开位一秒钟后,将该位复位
- setOffCmd = LightCommandService.buildResetTurnOffCommand(sour, dest, zcbh);
- if (null != setOffCmd) {
- byte[] content = finspi.messageToBytes(setOffCmd);
- ACUClientUtil.getInstance().sendACUCommand(client, content);
- }
-
- returnToFront(jResult);
- return null;
- } else {
- // 9超时,将命令的超时标志位置1
- logger.warn("命令超时" + cmd.getId());
- cmdDao.updateCmdRecordTimeout(cmd.getId());
-
- jResult.put("success", false);
- jResult.put("code", "6");
- jResult.put("reason", UnicodeConvertor.string2Unicode("命令发送超时"));
-
- returnToFront(jResult);
- return null;
- }
+ // 5秒后查询一次照明的状态
+ Thread.sleep(5 * 1000);
+ // 调用远程接口查询照明状态
+ String baseURL = Configure.getProperty("sys", "PGDSC_API_URL");
+ HttpRequest.sendGet(baseURL + "remote/readZmStatus.action", "zcbh=" + zcbh);
+
+ // 返回成功给界面
+ jResult.put("success", true);
+ jResult.put("code", "0");
+ returnToFront(jResult);
+
+ return null;
} else {
jResult.put("success", false);
jResult.put("code", "3");
@@ -434,4 +345,5 @@
ServletActionContext.getResponse().getWriter().write(jResult.toString());
}
+
}
diff --git a/src/struts.xml b/src/struts.xml
index d5fcaa9..2da47a8 100644
--- a/src/struts.xml
+++ b/src/struts.xml
@@ -42,5 +42,9 @@
+
+
+
+
diff --git a/src/sys.properties b/src/sys.properties
index f960aee..1ef8e9d 100644
--- a/src/sys.properties
+++ b/src/sys.properties
@@ -1,13 +1,13 @@
#\u6570\u636e\u5e93\u8fde\u63a5\u53c2\u6570
-DB.USERNAME = PG
-DB.PASSWORD = PG
-DB.HOST = 119.254.103.80
+DB.USERNAME = scott
+DB.PASSWORD = scott
+DB.HOST = 172.17.0.201
DB.PORT = 1521
-DB.SERVICE = chengdu
+DB.SERVICE = szgl
#\u672c\u673aIP\u5730\u5740
LOCALHOST.NET = 00
-LOCALHOST.NODE = 52
+LOCALHOST.NODE = 51
LOCALHOST.UNIT = 00
#\u5b9a\u671f\u6e05\u7406\u6570\u636e\u5e93\u4e2d\u8d85\u65f6\u7684\u547d\u4ee4