|
@@ -0,0 +1,187 @@
|
|
|
+package com.ruoyi.hard.modbus.tcp;
|
|
|
+
|
|
|
+import com.jwk.spring.boot.autoconfigure.ModbusTcpMasterTemplate;
|
|
|
+import com.jwk.spring.boot.modbus4j.ModbusMasterUtil;
|
|
|
+import com.ruoyi.common.core.domain.AjaxResult;
|
|
|
+import com.serotonin.modbus4j.msg.ReadResponse;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import static com.ruoyi.hard.modbus.tcp.AutoDoorClient.AUTOMATIC_DOOR_CODE.*;
|
|
|
+
|
|
|
+
|
|
|
+/**
|
|
|
+ * 自动门对接
|
|
|
+ *
|
|
|
+ * @author JWK
|
|
|
+ * @version 1.0
|
|
|
+ * @date 2022/12/21 21:04
|
|
|
+ */
|
|
|
+@Service
|
|
|
+public class AutoDoorClient {
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 自动门(靠马路)
|
|
|
+ */
|
|
|
+ @Autowired(required = false)
|
|
|
+ private ModbusTcpMasterTemplate modbusTcpMasterTemplateFirst;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 自动门
|
|
|
+ */
|
|
|
+ @Autowired(required = false)
|
|
|
+ private ModbusTcpMasterTemplate modbusTcpMasterTemplateSecond;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 自动门命令
|
|
|
+ */
|
|
|
+ public enum AUTOMATIC_DOOR_CODE {
|
|
|
+ /**
|
|
|
+ * 开门
|
|
|
+ */
|
|
|
+ WRITE_OPEN(1, 0, 1, 0),
|
|
|
+ /**
|
|
|
+ * 关门
|
|
|
+ */
|
|
|
+ WRITE_CLOSE(1, 1, 1, 0),
|
|
|
+ /**
|
|
|
+ * 急停
|
|
|
+ */
|
|
|
+ WRITE_STOP(1, 2, 1, 0),
|
|
|
+ /***
|
|
|
+ * 开门状态
|
|
|
+ */
|
|
|
+ RAED_OPEN_STS(1, 10, 2, 0),
|
|
|
+ /**
|
|
|
+ * 关门状态
|
|
|
+ */
|
|
|
+ RAED_ClOSE_STS(1, 11, 2, 0);
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 从节点id
|
|
|
+ */
|
|
|
+ private int slaveId;
|
|
|
+ /**
|
|
|
+ * 地址
|
|
|
+ */
|
|
|
+ private int offset;
|
|
|
+ /**
|
|
|
+ * 值
|
|
|
+ */
|
|
|
+ private int value;
|
|
|
+ /**
|
|
|
+ * 开关门清除标记
|
|
|
+ */
|
|
|
+ private int clear;
|
|
|
+
|
|
|
+ AUTOMATIC_DOOR_CODE(int slaveId, int offset, int value, int clear) {
|
|
|
+ this.slaveId = slaveId;
|
|
|
+ this.offset = offset;
|
|
|
+ this.value = value;
|
|
|
+ this.clear = clear;
|
|
|
+ }
|
|
|
+
|
|
|
+ public int getSlaveId() {
|
|
|
+ return slaveId;
|
|
|
+ }
|
|
|
+
|
|
|
+ public int getOffset() {
|
|
|
+ return offset;
|
|
|
+ }
|
|
|
+
|
|
|
+ public int getValue() {
|
|
|
+ return value;
|
|
|
+ }
|
|
|
+
|
|
|
+ public int getClear() {
|
|
|
+ return clear;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 开门
|
|
|
+ *
|
|
|
+ * @param con true代表靠马路的自动门 false墙里面的自动门
|
|
|
+ */
|
|
|
+ public Boolean sendOpen(Boolean con) {
|
|
|
+ ModbusMasterUtil modbusMasterUtil = con ? modbusTcpMasterTemplateFirst.getModbusMasterUtil()
|
|
|
+ : modbusTcpMasterTemplateSecond.getModbusMasterUtil();
|
|
|
+ sendCloseClear(con);
|
|
|
+ Boolean r = modbusMasterUtil.writeHoldingRegisters(WRITE_OPEN.getSlaveId(), WRITE_OPEN.offset, WRITE_OPEN.getValue());
|
|
|
+ try {
|
|
|
+ Thread.sleep(1000);
|
|
|
+ } catch (InterruptedException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ sendOpenClear(con);
|
|
|
+ return r;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 关门
|
|
|
+ *
|
|
|
+ * @param con true代表靠马路的自动门 false墙里面的自动门
|
|
|
+ */
|
|
|
+ public Boolean sendClose(Boolean con) {
|
|
|
+ ModbusMasterUtil modbusMasterUtil = con ? modbusTcpMasterTemplateFirst.getModbusMasterUtil()
|
|
|
+ : modbusTcpMasterTemplateSecond.getModbusMasterUtil();
|
|
|
+ sendOpenClear(con);
|
|
|
+ Boolean r = modbusMasterUtil.writeHoldingRegisters(WRITE_CLOSE.getSlaveId(), WRITE_CLOSE.offset, WRITE_CLOSE.getValue());
|
|
|
+ try {
|
|
|
+ Thread.sleep(1000);
|
|
|
+ } catch (InterruptedException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ sendCloseClear(con);
|
|
|
+ return r;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 开门清除标记
|
|
|
+ *
|
|
|
+ * @param con true代表靠马路的自动门 false墙里面的自动门
|
|
|
+ */
|
|
|
+ public Boolean sendOpenClear(Boolean con) {
|
|
|
+ ModbusMasterUtil modbusMasterUtil = con ? modbusTcpMasterTemplateFirst.getModbusMasterUtil()
|
|
|
+ : modbusTcpMasterTemplateSecond.getModbusMasterUtil();
|
|
|
+ return modbusMasterUtil.writeHoldingRegisters(WRITE_OPEN.getSlaveId(), WRITE_OPEN.offset, WRITE_OPEN.getClear());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 关门清除标记
|
|
|
+ *
|
|
|
+ * @param con true代表靠马路的自动门 false墙里面的自动门
|
|
|
+ */
|
|
|
+ public Boolean sendCloseClear(Boolean con) {
|
|
|
+ ModbusMasterUtil modbusMasterUtil = con ? modbusTcpMasterTemplateFirst.getModbusMasterUtil()
|
|
|
+ : modbusTcpMasterTemplateSecond.getModbusMasterUtil();
|
|
|
+ return modbusMasterUtil.writeHoldingRegisters(WRITE_CLOSE.getSlaveId(), WRITE_CLOSE.offset, WRITE_CLOSE.getClear());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询开门状态 暂时用不到
|
|
|
+ *
|
|
|
+ * @param con true代表靠马路的自动门 false墙里面的自动门
|
|
|
+ */
|
|
|
+ public AjaxResult readOpenSts(Boolean con) {
|
|
|
+ ModbusMasterUtil modbusMasterUtil = con ? modbusTcpMasterTemplateFirst.getModbusMasterUtil()
|
|
|
+ : modbusTcpMasterTemplateSecond.getModbusMasterUtil();
|
|
|
+ ReadResponse readResponse = modbusMasterUtil.readHoldingRegisters(RAED_OPEN_STS.getSlaveId(), RAED_OPEN_STS.getOffset(), RAED_OPEN_STS.getValue());
|
|
|
+ boolean[] booleanData = readResponse.getBooleanData();
|
|
|
+ return AjaxResult.success("", booleanData);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询关门门状态 暂时用不到
|
|
|
+ *
|
|
|
+ * @param con true代表靠马路的自动门 false墙里面的自动门
|
|
|
+ */
|
|
|
+ public AjaxResult readCloseSts(Boolean con) {
|
|
|
+ ModbusMasterUtil modbusMasterUtil = con ? modbusTcpMasterTemplateFirst.getModbusMasterUtil()
|
|
|
+ : modbusTcpMasterTemplateSecond.getModbusMasterUtil();
|
|
|
+ ReadResponse readResponse = modbusMasterUtil.readHoldingRegisters(RAED_ClOSE_STS.getSlaveId(), RAED_ClOSE_STS.getOffset(), RAED_ClOSE_STS.getValue());
|
|
|
+ boolean[] booleanData = readResponse.getBooleanData();
|
|
|
+ return AjaxResult.success("", booleanData);
|
|
|
+ }
|
|
|
+}
|