Ver código fonte

自动门对接(增加的一扇门)

k 2 anos atrás
pai
commit
8493536e59

+ 12 - 12
ruoyi-admin/src/main/java/com/ruoyi/web/controller/warewms/test/AutoDoorTestController.java

@@ -30,8 +30,8 @@ public class AutoDoorTestController {
      */
     @ApiOperation("发送开门")
     @PostMapping("/sendOpen")
-    public Boolean sendOpen(Boolean con) {
-        return autoDoorClient.sendOpen(con);
+    public Boolean sendOpen(String con) {
+        return autoDoorClient.sendOpen(AutoDoorClient.AUTO_DOOR_NO.getByValue(con));
     }
 
     /**
@@ -41,8 +41,8 @@ public class AutoDoorTestController {
      */
     @ApiOperation("发送关门")
     @PostMapping("/sendClose")
-    public Boolean sendClose(Boolean con) {
-        return autoDoorClient.sendClose(con);
+    public Boolean sendClose(String con) {
+        return autoDoorClient.sendClose(AutoDoorClient.AUTO_DOOR_NO.getByValue(con));
     }
 
     /**
@@ -52,8 +52,8 @@ public class AutoDoorTestController {
      */
     @ApiOperation("查询开门状态")
     @PostMapping("/readOpenSts")
-    public AjaxResult readOpenSts(Boolean con) {
-        return autoDoorClient.readOpenSts(con);
+    public AjaxResult readOpenSts(String con) {
+        return autoDoorClient.readOpenSts(AutoDoorClient.AUTO_DOOR_NO.getByValue(con));
     }
 
     /**
@@ -63,8 +63,8 @@ public class AutoDoorTestController {
      */
     @ApiOperation("查询关门状态")
     @PostMapping("/readCloseSts")
-    public AjaxResult readCloseSts(Boolean con) {
-        return autoDoorClient.readCloseSts(con);
+    public AjaxResult readCloseSts(String con) {
+        return autoDoorClient.readCloseSts(AutoDoorClient.AUTO_DOOR_NO.getByValue(con));
     }
 
     /**
@@ -74,8 +74,8 @@ public class AutoDoorTestController {
      */
     @ApiOperation("发送开门清除标记")
     @PostMapping("/sendOpenClear")
-    public Boolean sendOpenClear(Boolean con) {
-        return autoDoorClient.sendOpenClear(con);
+    public Boolean sendOpenClear(String con) {
+        return autoDoorClient.sendOpenClear(AutoDoorClient.AUTO_DOOR_NO.getByValue(con));
     }
 
     /**
@@ -85,8 +85,8 @@ public class AutoDoorTestController {
      */
     @ApiOperation("发送关门清除标记")
     @PostMapping("/sendCloseClear")
-    public Boolean sendCloseClear(Boolean con) {
-        return autoDoorClient.sendCloseClear(con);
+    public Boolean sendCloseClear(String con) {
+        return autoDoorClient.sendCloseClear(AutoDoorClient.AUTO_DOOR_NO.getByValue(con));
     }
 
 }

+ 4 - 0
ruoyi-admin/src/main/resources/application-dev.yml

@@ -77,6 +77,10 @@ modbus:
             open: false
             host: 192.168.42.202
             port: 9000
+        sixth: # 自动门(靠马路-第二层)
+            open: false
+            host: 192.168.42.210
+            port: 9000
         third: # 按钮盒
             open: false
             host: 192.168.42.205

+ 4 - 0
ruoyi-admin/src/main/resources/application-prod.yml

@@ -77,6 +77,10 @@ modbus:
             open: true
             host: 192.168.42.202
             port: 9000
+        sixth: # 自动门(靠马路-第二层)
+            open: false
+            host: 192.168.42.210
+            port: 9000
         third: # 按钮盒
             open: true
             host: 192.168.42.205

+ 7 - 6
warewms-ams/src/main/java/com/ruoyi/ams/agv/ndc/thread/AutoRfidReaderTask.java

@@ -46,7 +46,7 @@ public class AutoRfidReaderTask {
     public void run() {
         String tagId = iSysConfigService.selectConfigByKey(REDIS_KEY_RFID_TAGID_OUT);
         List<String> tagList = rfidReaderClient.readTagsOut();
-        execute(tagId, tagList, true);
+        execute(tagId, tagList, AutoDoorClient.AUTO_DOOR_NO.A, true);
     }
 
 
@@ -56,7 +56,7 @@ public class AutoRfidReaderTask {
     public void run01() {
         String tagId = iSysConfigService.selectConfigByKey(REDIS_KEY_RFID_TAGID_IN);
         List<String> tagList = rfidReaderClient.readTagsIn();
-        execute(tagId, tagList, false);
+        execute(tagId, tagList, AutoDoorClient.AUTO_DOOR_NO.B, false);
     }
 
     /**
@@ -64,15 +64,16 @@ public class AutoRfidReaderTask {
      *
      * @param tagId     需要校验的标签ID
      * @param tagList   RFID读取到的tagId
+     * @param doorNo    门编号
      * @param isOutdoor 是否墙外的自动门
      */
-    public void execute(String tagId, List<String> tagList, boolean isOutdoor) {
+    public void execute(String tagId, List<String> tagList, AutoDoorClient.AUTO_DOOR_NO doorNo, boolean isOutdoor) {
         if (tagList == null) {
             // 如果没有读到标签 关闭自动门
             // 因为大部分时间都是读不到标签的 所以关门的指令不能一直重复下发
             // 记录关门的次数 超过10次 就不再重复关门
             if (isOutdoor ? closeOutDoorNum < 10 : closeInDoorNum < 10) {
-                autoDoorClient.sendClose(isOutdoor);
+                autoDoorClient.sendClose(doorNo);
 //                log.info("发送关门指令!{},{}", isOutdoor, isOutdoor ? closeOutDoorNum : closeInDoorNum);
                 if (isOutdoor) {
                     closeOutDoorNum++;
@@ -85,7 +86,7 @@ public class AutoRfidReaderTask {
         boolean contains = tagList.contains(tagId);
         // 如果读到标签 打开自动门
         if (contains) {
-            autoDoorClient.sendOpen(isOutdoor);
+            autoDoorClient.sendOpen(doorNo);
             if (isOutdoor) {
                 closeOutDoorNum = 0;
             } else {
@@ -96,7 +97,7 @@ public class AutoRfidReaderTask {
             // 因为大部分时间都是读不到标签的 所以关门的指令不能一直重复下发
             // 记录关门的次数 超过10次 就不再重复关门
             if (isOutdoor ? closeOutDoorNum < 10 : closeInDoorNum < 10) {
-                autoDoorClient.sendClose(isOutdoor);
+                autoDoorClient.sendClose(doorNo);
 //                log.info("发送关门指令!{},{}", isOutdoor, isOutdoor ? closeOutDoorNum : closeInDoorNum);
                 if (isOutdoor) {
                     closeOutDoorNum++;

+ 91 - 28
warewms-hard/src/main/java/com/ruoyi/hard/modbus/tcp/AutoDoorClient.java

@@ -8,6 +8,10 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.PostConstruct;
+import java.util.HashMap;
+import java.util.Map;
+
 import static com.ruoyi.hard.modbus.tcp.AutoDoorClient.AUTOMATIC_DOOR_CODE.*;
 
 
@@ -28,6 +32,13 @@ public class AutoDoorClient {
     @Qualifier("modbusTcpMasterTemplateFirst")
     private ModbusTcpMasterTemplate modbusTcpMasterTemplateFirst;
 
+    /**
+     * 自动门(靠马路-第二层)
+     */
+    @Autowired(required = false)
+    @Qualifier("modbusTcpMasterTemplateSixth")
+    private ModbusTcpMasterTemplate modbusTcpMasterTemplateSixth;
+
     /**
      * 自动门
      */
@@ -35,6 +46,64 @@ public class AutoDoorClient {
     @Qualifier("modbusTcpMasterTemplateSecond")
     private ModbusTcpMasterTemplate modbusTcpMasterTemplateSecond;
 
+    private Map<String, ModbusTcpMasterTemplate> tcpMasterTemplateMap;
+
+    @PostConstruct
+    public void initMap() {
+        tcpMasterTemplateMap = new HashMap<>();
+        tcpMasterTemplateMap.put(AUTO_DOOR_NO.A.name(), modbusTcpMasterTemplateFirst);
+        tcpMasterTemplateMap.put(AUTO_DOOR_NO.B.name(), modbusTcpMasterTemplateSecond);
+        tcpMasterTemplateMap.put(AUTO_DOOR_NO.C.name(), modbusTcpMasterTemplateSixth);
+    }
+
+    public ModbusMasterUtil getModbusMasterUtil(AUTO_DOOR_NO doorNo) {
+        return tcpMasterTemplateMap.get(doorNo.name()).getModbusMasterUtil();
+    }
+
+    /**
+     * 自动门编号
+     */
+    public enum AUTO_DOOR_NO {
+        /***
+         * 靠墙门
+         */
+        A("1"),
+        /***
+         * 靠室内
+         */
+        B("2"),
+        /***
+         * 靠墙门(第二层)
+         */
+        C("3");
+
+        private String value;
+
+        AUTO_DOOR_NO(String value) {
+            this.value = value;
+        }
+
+        public String getValue() {
+            return value;
+        }
+
+        /**
+         * 根据值获得枚举类型 switch
+         *
+         * @param value
+         * @return
+         */
+        public static AUTO_DOOR_NO getByValue(String value) {
+            for (AUTO_DOOR_NO code : values()) {
+                if (code.getValue().equals(value)) {
+                    return code;
+                }
+            }
+            return null;
+        }
+    }
+
+
     /**
      * 自动门命令
      */
@@ -105,71 +174,66 @@ public class AutoDoorClient {
     /**
      * 开门
      *
-     * @param con true代表靠马路的自动门 false墙里面的自动门
+     * @param doorNo
      */
-    public Boolean sendOpen(Boolean con) {
-        ModbusMasterUtil modbusMasterUtil = con ? modbusTcpMasterTemplateFirst.getModbusMasterUtil()
-                : modbusTcpMasterTemplateSecond.getModbusMasterUtil();
-        sendCloseClear(con);
+    public Boolean sendOpen(AUTO_DOOR_NO doorNo) {
+        ModbusMasterUtil modbusMasterUtil = getModbusMasterUtil(doorNo);
+        sendCloseClear(doorNo);
         Boolean r = modbusMasterUtil.writeHoldingRegisters(WRITE_OPEN.getSlaveId(), WRITE_OPEN.offset, WRITE_OPEN.getValue());
         try {
             Thread.sleep(1000);
         } catch (InterruptedException e) {
             e.printStackTrace();
         }
-        sendOpenClear(con);
+        sendOpenClear(doorNo);
         return r;
     }
 
     /**
      * 关门
      *
-     * @param con true代表靠马路的自动门 false墙里面的自动门
+     * @param doorNo
      */
-    public Boolean sendClose(Boolean con) {
-        ModbusMasterUtil modbusMasterUtil = con ? modbusTcpMasterTemplateFirst.getModbusMasterUtil()
-                : modbusTcpMasterTemplateSecond.getModbusMasterUtil();
-        sendOpenClear(con);
+    public Boolean sendClose(AUTO_DOOR_NO doorNo) {
+        ModbusMasterUtil modbusMasterUtil = getModbusMasterUtil(doorNo);
+        sendOpenClear(doorNo);
         Boolean r = modbusMasterUtil.writeHoldingRegisters(WRITE_CLOSE.getSlaveId(), WRITE_CLOSE.offset, WRITE_CLOSE.getValue());
         try {
             Thread.sleep(1000);
         } catch (InterruptedException e) {
             e.printStackTrace();
         }
-        sendCloseClear(con);
+        sendCloseClear(doorNo);
         return r;
     }
 
     /**
      * 开门清除标记
      *
-     * @param con true代表靠马路的自动门 false墙里面的自动门
+     * @param doorNo
      */
-    public Boolean sendOpenClear(Boolean con) {
-        ModbusMasterUtil modbusMasterUtil = con ? modbusTcpMasterTemplateFirst.getModbusMasterUtil()
-                : modbusTcpMasterTemplateSecond.getModbusMasterUtil();
+    public Boolean sendOpenClear(AUTO_DOOR_NO doorNo) {
+        ModbusMasterUtil modbusMasterUtil = getModbusMasterUtil(doorNo);
         return modbusMasterUtil.writeHoldingRegisters(WRITE_OPEN.getSlaveId(), WRITE_OPEN.offset, WRITE_OPEN.getClear());
     }
 
     /**
      * 关门清除标记
      *
-     * @param con true代表靠马路的自动门 false墙里面的自动门
+     * @param doorNo
      */
-    public Boolean sendCloseClear(Boolean con) {
-        ModbusMasterUtil modbusMasterUtil = con ? modbusTcpMasterTemplateFirst.getModbusMasterUtil()
-                : modbusTcpMasterTemplateSecond.getModbusMasterUtil();
+    public Boolean sendCloseClear(AUTO_DOOR_NO doorNo) {
+        ModbusMasterUtil modbusMasterUtil = getModbusMasterUtil(doorNo);
         return modbusMasterUtil.writeHoldingRegisters(WRITE_CLOSE.getSlaveId(), WRITE_CLOSE.offset, WRITE_CLOSE.getClear());
     }
 
     /**
      * 查询开门状态 暂时用不到
      *
-     * @param con true代表靠马路的自动门 false墙里面的自动门
+     * @param
      */
-    public AjaxResult readOpenSts(Boolean con) {
-        ModbusMasterUtil modbusMasterUtil = con ? modbusTcpMasterTemplateFirst.getModbusMasterUtil()
-                : modbusTcpMasterTemplateSecond.getModbusMasterUtil();
+    public AjaxResult readOpenSts(AUTO_DOOR_NO doorNo) {
+        ModbusMasterUtil modbusMasterUtil = getModbusMasterUtil(doorNo);
         ReadResponse readResponse = modbusMasterUtil.readHoldingRegisters(RAED_OPEN_STS.getSlaveId(), RAED_OPEN_STS.getOffset(), RAED_OPEN_STS.getValue());
         boolean[] booleanData = readResponse.getBooleanData();
         return AjaxResult.success("", booleanData);
@@ -178,11 +242,10 @@ public class AutoDoorClient {
     /**
      * 查询关门门状态 暂时用不到
      *
-     * @param con true代表靠马路的自动门 false墙里面的自动门
+     * @param doorNo
      */
-    public AjaxResult readCloseSts(Boolean con) {
-        ModbusMasterUtil modbusMasterUtil = con ? modbusTcpMasterTemplateFirst.getModbusMasterUtil()
-                : modbusTcpMasterTemplateSecond.getModbusMasterUtil();
+    public AjaxResult readCloseSts(AUTO_DOOR_NO doorNo) {
+        ModbusMasterUtil modbusMasterUtil = getModbusMasterUtil(doorNo);
         ReadResponse readResponse = modbusMasterUtil.readHoldingRegisters(RAED_ClOSE_STS.getSlaveId(), RAED_ClOSE_STS.getOffset(), RAED_ClOSE_STS.getValue());
         boolean[] booleanData = readResponse.getBooleanData();
         return AjaxResult.success("", booleanData);