Jelajahi Sumber

8.21联动福尼斯单面版本

wangxichen 3 hari lalu
induk
melakukan
5a6197d1bf

+ 19 - 3
src/com/mes/ui/MesClient.java

@@ -123,8 +123,8 @@ public class MesClient extends JFrame {
 
     public static Integer lastpage = 0;     //标记是否是首次进入设备运行状态,0表示首次进入运行状态,1表示非首次进入运行状态
 
-//    public static S7PLC s7PLC = new S7PLC(EPlcType.S1200, "192.168.7.103"); // CD 北边
-    public static S7PLC s7PLC = new S7PLC(EPlcType.S1200, "192.168.0.41"); // AB 中间
+    public static S7PLC s7PLC = new S7PLC(EPlcType.S1200, "192.168.7.100"); // P1CMT
+//    public static S7PLC s7PLC = new S7PLC(EPlcType.S1200, "192.168.0.41"); // AB 中间
 
     public static List<String> hjparams = new ArrayList<>();
 
@@ -238,6 +238,12 @@ public class MesClient extends JFrame {
         cjTimer.schedule(new TimerTask() {
             public void run() {
                 try{
+                    // 调试:打印关键状态位
+                    PlcUtil.dumpBits(s7PLC);
+                }catch (Exception e){
+                    e.printStackTrace();
+                }
+                try{
                     // 监控A面(成品面)状态
                     if(!MesClient.sessionid.isEmpty()){
                         PlcUtil.getStatusA(s7PLC);
@@ -437,7 +443,17 @@ public class MesClient extends JFrame {
         resetScanA();
         resetScanB();
 
-//        PlcUtil.changeEnable(s7PLC,false);
+        // 程序启动校准一次,之后由完成信号闭环维持
+        try{
+            String page = PlcUtil.getCurAside(s7PLC);
+            if("A".equals(page)){
+                PlcUtil.changeEnable(s7PLC,false); // A面要管控,必须扫码后才允许
+            }else{
+                PlcUtil.changeEnable(s7PLC,true);  // B面不管控,给一次允许启动
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+        }
     }
 
     public static void resetScanA() {

+ 3 - 0
src/com/mes/ui/MesRevice.java

@@ -28,6 +28,9 @@ public class MesRevice {
                     MesClient.curSna = MesClient.product_sn.getText();
                     MesClient.tjFlaga = 1;
 
+                    // A面MES放行,给一次允许启动信号(加工完成时再清除)
+                    PlcUtil.changeEnable(MesClient.s7PLC,true);
+
 
                     // 程序号防错功能已注释
                     // MesClient.programNoA = PlcUtil.getProgranNoA(MesClient.s7PLC)+"";

+ 38 - 54
src/com/mes/ui/PlcUtil.java

@@ -103,11 +103,7 @@ public class PlcUtil {
     // 获取A的结束状态
     public static Boolean getAFinish(S7PLC s7PLC){
         try{
-            boolean a = s7PLC.readBoolean("DB1.2.5");
-            boolean b = s7PLC.readBoolean("DB1.2.3");
-//            Boolean ret = s7PLC.readBoolean("DB1.2.0");
-
-            return a || b;
+            return s7PLC.readBoolean("DB1.2.5"); // A面焊接完成
         }catch (Exception e){
             e.printStackTrace();
             return false;
@@ -125,13 +121,9 @@ public class PlcUtil {
                 if(MesClient.curSna == null || MesClient.curSna.isEmpty()){
                     MesClient.curSna = MesClient.product_sn.getText();
                 }
-            }else{
-                // A面(成品面)扫码后给允许启动信号
-                Boolean reta = getEnable(s7PLC);
-                if(!reta){
-                    PlcUtil.changeEnable(MesClient.s7PLC,true);
-                }
             }
+            // 允许信号已在MES放行时给过一次,这里不再重复给
+            // 否则会把B面完成时清除的信号又拉起来
         }else if(MesClient.tjFlaga == 2){
             Boolean afinish = getAFinish(s7PLC); //A焊接完成
             if(afinish){
@@ -139,8 +131,8 @@ public class PlcUtil {
                 MesClient.pxstatus1.setText("A:设备运行结束,提交结果中");
                 MesClient.finish_ok_bt.setEnabled(true);
 
-                // A面(成品面)加工完清除允许启动信号
-                PlcUtil.changeEnable(s7PLC,false);
+                // A面加工完,给允许启动,为翻到B面做准备(B面不管控)
+                PlcUtil.changeEnable(s7PLC,true);
 
                 Boolean sendret = DataUtil.sendQuality(MesClient.nettyClient,MesClient.product_sn.getText(),"OK",MesClient.user20,"A");
                 if(!sendret){
@@ -164,56 +156,25 @@ public class PlcUtil {
     // 获取B的结束状态
     public static Boolean getBFinish(S7PLC s7PLC){
         try{
-            boolean a = s7PLC.readBoolean("DB1.2.7");
-            boolean b = s7PLC.readBoolean("DB1.2.2");
-//            Boolean ret = s7PLC.readBoolean("DB1.2.1");
-            return a || b;
+            return s7PLC.readBoolean("DB1.2.7"); // B面焊接完成
         }catch (Exception e){
             e.printStackTrace();
             return false;
         }
     }
 
+    // B面(半成品面)不管控,B面一进入运行状态就清除允许启动信号
+    // 用 DB1.2.3(B面运行中) 的上升沿,运行中是保持型信号,不会像脉冲那样被漏采
     public static void getStatusB(S7PLC s7PLC){
-        // B面(半成品面)不需要扫码,但需要控制允许信号
-        String page = getCurAside(s7PLC);
-
-        if(page.equals("B")){ // 当前在B面
-            Boolean startb = getBStart(s7PLC); // B面运行中
-
-            if(MesClient.tjFlagb == 0){ // 初始状态
-                // 转到B面时自动给允许启动信号
-                Boolean reta = getEnable(s7PLC);
-                if(!reta){
-                    PlcUtil.changeEnable(MesClient.s7PLC,true);
-                }
-                MesClient.tjFlagb = 1; // 标记为已给允许信号
-                MesClient.pxstatus2.setText("B:半成品面已允许启动");
-            }else if(MesClient.tjFlagb == 1){ // 已给允许信号,等待启动
-                if(startb){
-                    MesClient.curFlag = "B";
-                    MesClient.tjFlagb = 2;
-                    MesClient.pxstatus2.setText("B:设备运行中");
-                }
-            }else if(MesClient.tjFlagb == 2){ // 运行中,等待完成
-                Boolean bfinish = getBFinish(s7PLC); // B焊接完成
-                if(bfinish){
-                    MesClient.tjFlagb = 3;
-                    MesClient.pxstatus2.setText("B:设备运行结束");
-
-                    // B面加工完清除允许启动信号
-                    PlcUtil.changeEnable(s7PLC,false);
-
-                    // 重置B面状态,准备下一次
-                    MesClient.tjFlagb = 0;
-                }
+        if(getBStart(s7PLC)){ // B面运行中 DB1.2.3
+            if(MesClient.tjFlagb == 0){ // 本次运行还没处理过
+                PlcUtil.changeEnable(s7PLC,false); // 清除允许启动,A面必须扫码
+                MesClient.tjFlagb = 1;             // 标记已处理,防止重复清
+                MesClient.pxstatus2.setText("B:设备运行中,已清除允许启动");
+                System.err.println("B面进入运行状态,已清除允许启动信号");
             }
         }else{
-            // 不在B面时重置状态
-            if(MesClient.tjFlagb != 0){
-                MesClient.tjFlagb = 0;
-                MesClient.pxstatus2.setText("B:等待转到B面");
-            }
+            MesClient.tjFlagb = 0; // 运行结束,复位标记,等下一件
         }
     }
 
@@ -242,6 +203,29 @@ public class PlcUtil {
 
 
 
+    // 调试用:每秒打印关键状态位,确认PLC实际波形
+    public static void dumpBits(S7PLC s7PLC){
+        try{
+            boolean a识别 = s7PLC.readBoolean("DB1.2.0");
+            boolean b识别 = s7PLC.readBoolean("DB1.2.1");
+            boolean a运行 = s7PLC.readBoolean("DB1.2.2");
+            boolean b运行 = s7PLC.readBoolean("DB1.2.3");
+            boolean a焊接中 = s7PLC.readBoolean("DB1.2.4");
+            boolean a完成 = s7PLC.readBoolean("DB1.2.5");
+            boolean b焊接中 = s7PLC.readBoolean("DB1.2.6");
+            boolean b完成 = s7PLC.readBoolean("DB1.2.7");
+            boolean 允许 = s7PLC.readBoolean("DB9.22.3");
+            System.err.println("BITS A识别=" + a识别 + " B识别=" + b识别
+                    + " A运行=" + a运行 + " B运行=" + b运行
+                    + " A焊中=" + a焊接中 + " A完成=" + a完成
+                    + " B焊中=" + b焊接中 + " B完成=" + b完成
+                    + " 允许启动=" + 允许
+                    + " tjFlaga=" + MesClient.tjFlaga + " tjFlagb=" + MesClient.tjFlagb);
+        }catch (Exception e){
+            System.err.println("BITS 读取失败: " + e.getMessage());
+        }
+    }
+
     // 获取当前是A面还是B面
     public static String getCurAside(S7PLC s7PLC){
         String str = "A";

+ 1 - 1
src/resources/config/config.properties

@@ -4,4 +4,4 @@ mes.server_ip=192.168.110.99
 mes.tcp_port=3000
 mes.heart_beat_cycle=60
 mes.line_sn=XT
-mes.gwflag=B
+mes.gwflag=A