Kaynağa Gözat

允许启动上升沿

wangxichen 18 saat önce
ebeveyn
işleme
3cad8f4e61
2 değiştirilmiş dosya ile 23 ekleme ve 2 silme
  1. 12 2
      src/com/mes/plc/HeliumFlow.java
  2. 11 0
      src/com/mes/ui/MesClient.java

+ 12 - 2
src/com/mes/plc/HeliumFlow.java

@@ -121,10 +121,20 @@ public class HeliumFlow {
         MesClient.getUser();
         JSONObject ret = DataUtil.checkQuality(code, MesClient.user20);
         boolean allow = ret != null && "true".equalsIgnoreCase(String.valueOf(ret.get("result")));
-        plc.writeBit(allowAddr, allow);
-        ui.setSignal(StationPanel.SIG_ALLOW, allow);
+
+        // 先拉低,保证 PLC 能收到上升沿
+        plc.writeBit(allowAddr, false);
+        ui.setSignal(StationPanel.SIG_ALLOW, false);
 
         if (allow) {
+            // 延时 1 秒再给 true,确保 PLC 扫描到低电平
+            try {
+                Thread.sleep(1000);
+            } catch (InterruptedException ignored) {
+                Thread.currentThread().interrupt();
+            }
+            plc.writeBit(allowAddr, true);
+            ui.setSignal(StationPanel.SIG_ALLOW, true);
             ui.setState("允许运行", StationPanel.STATE_OK);
             MesClient.addLog(name() + " 校验通过,允许运行");
         } else {

+ 11 - 0
src/com/mes/ui/MesClient.java

@@ -573,6 +573,8 @@ public class MesClient extends JFrame {
 
     public static McPlcClient plcClient;
     public static java.util.Timer plcTimer;
+    // 程序生命周期内只清一次允许位
+    private static boolean allowCleared = false;
 
     /** 点顶栏 PLC 状态,读取并显示所有点位当前值 */
     public static void showPlcSignals() {
@@ -632,6 +634,15 @@ public class MesClient extends JFrame {
                         String sig = "M205=" + plcClient.readBit("M205") + "  M215=" + plcClient.readBit("M215");
                         addLog(sig);
                         log.info("PLC 点位: " + sig);
+
+                        // 程序启动后第一次连上 PLC,清一次允许信号,保证后续能产生上升沿
+                        if (!allowCleared) {
+                            plcClient.writeBit("M206", false);
+                            plcClient.writeBit("M216", false);
+                            allowCleared = true;
+                            addLog("已清空 MES 允许信号 M206/M216");
+                        }
+
                         startFlows();
                     } else {
                         setPlcStatus(false);