Browse Source

RFID开关门逻辑优化

k 2 years ago
parent
commit
fc68c13384

+ 21 - 5
warewms-ams/src/main/java/com/ruoyi/ams/agv/ndc/thread/AutoRfidReaderTask.java

@@ -40,13 +40,13 @@ public class AutoRfidReaderTask {
     /**
      * 关门次数,每次关门会累加一次,但是开门会初始化为0
      */
-    private int closeOutDoorNum = 10;
-    private int closeInDoorNum = 10;
+    private int closeOutDoorNum = 5;
+    private int closeInDoorNum = 5;
 
     /**
      * 关门上限,因为大部分时间都是读不到标签的 所以关门的指令不能一直重复下发
      */
-    private int closeDoorMax = 10;
+    private int closeDoorMax = 5;
 
     /**
      * RFID读取任务(墙外)
@@ -79,10 +79,22 @@ public class AutoRfidReaderTask {
      */
     public void execute(String[] tagIds, List<String> tagList, AutoDoorClient.AUTO_DOOR_NO doorNo, boolean isOutdoor) {
         if (tagList == null) {
+            // 自动门打开之后的五秒钟之内不可以关门
+            if (isOutdoor) {
+                if (redisCache.getCacheObject("OUT_DOOR_OPEN") != null) {
+                    log.error("自动门打开之后的五秒钟之内不可以关门!");
+                    return;
+                }
+            }else {
+                if (redisCache.getCacheObject("IN_DOOR_OPEN") != null) {
+                    log.error("自动门打开之后的五秒钟之内不可以关门!");
+                    return;
+                }
+            }
             // 如果没有读到标签 关闭自动门
             // 因为大部分时间都是读不到标签的 所以关门的指令不能一直重复下发
-            // 记录关门的次数 超过10次 就不再重复关门
-            if (isOutdoor ? closeOutDoorNum < 10 : closeInDoorNum < 10) {
+            // 记录关门的次数 超过5次 就不再重复关门
+            if (isOutdoor ? closeOutDoorNum < closeDoorMax : closeInDoorNum < closeDoorMax) {
                 autoDoorClient.sendClose(doorNo);
 //                log.info("发送关门指令!{},{}", isOutdoor, isOutdoor ? closeOutDoorNum : closeInDoorNum);
                 if (isOutdoor) {
@@ -115,10 +127,14 @@ public class AutoRfidReaderTask {
                 closeOutDoorNum = 0;
                 // 设置按钮盒有效时间
                 redisCache.setCacheObject("BUTTON_BOX_VALID","",10, TimeUnit.MINUTES);
+                // 设定开门有效时间 这个时间内就算RFID没有扫描到标签,门也不可以关上
+                redisCache.setCacheObject("OUT_DOOR_OPEN","",5, TimeUnit.SECONDS);
             } else {
                 closeInDoorNum = 0;
                 // 关闭警报灯
                 warningLightClient.closeWarningLight();
+                // 设定开门有效时间 这个时间内就算RFID没有扫描到标签,门也不可以关上
+                redisCache.setCacheObject("IN_DOOR_OPEN","",5, TimeUnit.SECONDS);
             }
         } else {
             // 如果没有读到标签 关闭自动门