wangxichen 1 неделя назад
Родитель
Сommit
f88052a013
2 измененных файлов с 105 добавлено и 113 удалено
  1. 45 34
      src/com/mes/ui/MesClient.java
  2. 60 79
      src/com/mes/ui/PlcUtil.java

+ 45 - 34
src/com/mes/ui/MesClient.java

@@ -238,6 +238,7 @@ public class MesClient extends JFrame {
         cjTimer.schedule(new TimerTask() {
             public void run() {
                 try{
+                    // 监控A面(成品面)状态
                     if(!MesClient.sessionid.isEmpty()){
                         PlcUtil.getStatusA(s7PLC);
                     }
@@ -245,6 +246,7 @@ public class MesClient extends JFrame {
                     e.printStackTrace();
                 }
                 try{
+                    // 监控B面(半成品面)状态 - 虽然不需要扫码,但需要控制允许信号
                     if(!MesClient.sessionid.isEmpty()){
                         PlcUtil.getStatusB(s7PLC);
                     }
@@ -267,17 +269,37 @@ public class MesClient extends JFrame {
                 textField.requestFocusInWindow();
 
                 String page = PlcUtil.getCurAside(s7PLC);
-                if(page.equals("A")){
-                    lblNewLabel_5.setText("当前:A面");
+                if(page != null && page.equals("A")){
+                    // A 面(成品面):可扫码
+                    lblNewLabel_5.setText("当前:A面(可扫码)");
+                    lblNewLabel_5.setForeground(new Color(0, 128, 0));  // 绿色
+                    if(product_sn.getText().isEmpty() || product_sn.getText().contains("请等待")){
+                        product_sn.setText("请扫码");
+                        product_sn.setBackground(new Color(144, 238, 144));  // 浅绿色
+                        product_sn.setForeground(Color.BLACK);
+                    }
+                    // B面显示等待状态
+                    if(product_sn2.getText().isEmpty() || product_sn2.getText().contains("请扫码")){
+                        product_sn2.setText("请等待转到B面");
+                        product_sn2.setBackground(Color.LIGHT_GRAY);
+                        product_sn2.setForeground(Color.DARK_GRAY);
+                    }
                 }else{
-                    lblNewLabel_5.setText("当前:B面");
-                }
-                
-                // 识别完当前面后,给禁用信号(仅在面切换时执行)
-                if(!page.equals(lastDetectedPage)){
-                    lastDetectedPage = page;
-                    PlcUtil.changeEnable(s7PLC, false);
-                    System.out.println("识别到当前面:" + page + ",已发送禁用信号");
+                    // B 面(半成品面):不需要扫码,显示提示
+                    lblNewLabel_5.setText("当前:B面(半成品-不扫码)");
+                    lblNewLabel_5.setForeground(Color.GRAY);
+                    // A面显示等待状态
+                    if(product_sn.getText().isEmpty() || product_sn.getText().contains("请扫码")){
+                        product_sn.setText("请等待转到A面");
+                        product_sn.setBackground(Color.LIGHT_GRAY);
+                        product_sn.setForeground(Color.DARK_GRAY);
+                    }
+                    // B面显示不需要扫码
+                    if(product_sn2.getText().isEmpty() || product_sn2.getText().contains("请等待") || product_sn2.getText().contains("请扫码")){
+                        product_sn2.setText("半成品面-不需要扫码");
+                        product_sn2.setBackground(new Color(255, 255, 204));  // 浅黄色
+                        product_sn2.setForeground(Color.DARK_GRAY);
+                    }
                 }
             }
         }, 1000,1000);
@@ -467,32 +489,19 @@ public class MesClient extends JFrame {
     }
 
     public static void resetScanB() {
+        // B面(半成品面)不需要扫码,只重置状态标志
         work_status2 = 0;
         check_quality_result2 = false;
-        MesClient.finish_ng_bt.setEnabled(true);
         MesClient.mesQualityFlagB = false;
-        product_sn2.setText("");
-
-        MesClient.pxstatus2.setText("B");
-
-        MesClient.param1.setText("");
-        MesClient.param2.setText("");
-        MesClient.param3.setText("");
-        MesClient.param4.setText("");
-        MesClient.param5.setText("");
-
-        MesClient.param21.setText("");
-        MesClient.param22.setText("");
-        MesClient.param23.setText("");
-        MesClient.param24.setText("");
-        MesClient.param25.setText("");
-        MesClient.curFlag = "";
         MesClient.curSnb = "";
         MesClient.tjFlagb = 0;
 
-        updateMaterailData(); // 更新物料
+        // B面显示提示文字
+        product_sn2.setText("半成品面-不需要扫码");
+        product_sn2.setBackground(new Color(255, 255, 204));  // 浅黄色
+        product_sn2.setForeground(Color.DARK_GRAY);
 
-        shiftUserCheck();
+        MesClient.pxstatus2.setText("B:半成品面");
     }
 
     //閼惧嘲褰囬悽銊﹀煕20娴o拷
@@ -1311,18 +1320,20 @@ public class MesClient extends JFrame {
         }
 
         String page = PlcUtil.getCurAside(s7PLC);
+
+        // 只允许A面(成品面)扫码
         if(page.equals("A")){
             if(!product_sn.getText().isEmpty() && mesQualityFlagA){
                 MesClient.setMenuStatus("A面已存在工件码,勿重复扫码",1);
                 return;
             }
             product_sn.setText(sn);
+            product_sn.setBackground(Color.WHITE);
+            product_sn.setForeground(Color.BLACK);
         }else{
-            if(!product_sn2.getText().isEmpty() && mesQualityFlagB){
-                MesClient.setMenuStatus("B面已存在工件码,勿重复扫码",1);
-                return;
-            }
-            product_sn2.setText(sn);
+            // B面(半成品面)不允许扫码
+            MesClient.setMenuStatus("B面不需要扫码",1);
+            return;
         }
 
         MesClient.setMenuStatus("扫码成功",0);

+ 60 - 79
src/com/mes/ui/PlcUtil.java

@@ -14,7 +14,8 @@ public class PlcUtil {
         Boolean starta = getAStart(s7PLC); //A启动中
         Boolean startb = getBStart(s7PLC); //B启动中
 
-        if(MesClient.tjFlaga == 2 || MesClient.tjFlagb == 2){ //运行中
+        // 只采集A面(成品面)数据
+        if(MesClient.tjFlaga == 2){ // A面运行中
             Float dya = s7PLC.readFloat32("DB1010.2");
             Float dla = s7PLC.readFloat32("DB1010.8");
             Float ssa = s7PLC.readFloat32("DB1010.14");
@@ -45,24 +46,16 @@ public class PlcUtil {
 
             if(MesClient.hjparams.size() == 60){
                 try{
-                    // 根据curFlag确定工位号和工件码
+                    // 只保存A面(成品面)数据
                     String oprno = MesClient.mes_gw+"A";
                     String sn = MesClient.curSna;
-                    if(MesClient.curFlag.equals("B")){
-                        oprno = MesClient.mes_gw+"B";
-                        sn = MesClient.curSnb;
-                    }
                     if(MesClient.mes_gwflag.equals("B")){
-                        if(MesClient.curFlag.equals("A")){
-                            oprno = MesClient.mes_gw+"C";
-                        }else{
-                            oprno = MesClient.mes_gw+"D";
-                        }
+                        oprno = MesClient.mes_gw+"C";
                     }
                     // 检查工件码是否为空,为空则不上传
                     if(sn != null && !sn.trim().isEmpty()){
                         JdbcUtils.insertCmtData(oprno,MesClient.mes_line_sn,sn, JSON.toJSONString(MesClient.hjparams));
-                        System.out.println("cmt:"+MesClient.curFlag+" sn:"+sn);
+                        System.out.println("cmt:A面成品 sn:"+sn);
                     }else{
                         System.out.println("工件码为空,跳过保存数据");
                     }
@@ -72,26 +65,19 @@ public class PlcUtil {
                 }
             }
         }else{
+            // 保存剩余数据(仅A面)
             if(MesClient.hjparams.size() != 60 && MesClient.hjparams.size() > 0){
                 try{
-                    // 根据curFlag确定工位号和工件码
+                    // 只保存A面(成品面)数据
                     String oprno = MesClient.mes_gw+"A";
                     String sn = MesClient.curSna;
-                    if(MesClient.curFlag.equals("B")){
-                        oprno = MesClient.mes_gw+"B";
-                        sn = MesClient.curSnb;
-                    }
                     if(MesClient.mes_gwflag.equals("B")){
-                        if(MesClient.curFlag.equals("A")){
-                            oprno = MesClient.mes_gw+"C";
-                        }else{
-                            oprno = MesClient.mes_gw+"D";
-                        }
+                        oprno = MesClient.mes_gw+"C";
                     }
                     // 检查工件码是否为空,为空则不上传
                     if(sn != null && !sn.trim().isEmpty()){
                         JdbcUtils.insertCmtData(oprno,MesClient.mes_line_sn,sn, JSON.toJSONString(MesClient.hjparams));
-                        System.out.println("cmt:"+MesClient.curFlag+" sn:"+sn);
+                        System.out.println("cmt:A面成品剩余数据 sn:"+sn);
                     }else{
                         System.out.println("工件码为空,跳过保存剩余数据");
                     }
@@ -139,34 +125,27 @@ public class PlcUtil {
                 if(MesClient.curSna == null || MesClient.curSna.isEmpty()){
                     MesClient.curSna = MesClient.product_sn.getText();
                 }
-                if(MesClient.lastpage == 0){
-                    MesClient.lastpage = 1;
-                    PlcUtil.changeEnable(s7PLC,false);
-                }
             }else{
-                // 程序号防错功能已注释 - 直接允许启动
-                // if(CommonUtils.checkProgramNoSn(MesClient.product_sn.getText(),MesClient.programNoA)){
-                    Boolean reta = getEnable(s7PLC);
-                    if(!reta){
-                        PlcUtil.changeEnable(MesClient.s7PLC,true);
-                    }
-                // }
+                // A面(成品面)扫码后给允许启动信号
+                Boolean reta = getEnable(s7PLC);
+                if(!reta){
+                    PlcUtil.changeEnable(MesClient.s7PLC,true);
+                }
             }
         }else if(MesClient.tjFlaga == 2){
             Boolean afinish = getAFinish(s7PLC); //A焊接完成
-            if(afinish){ // B启动中,A当做完成
+            if(afinish){
                 MesClient.tjFlaga = 3;
                 MesClient.pxstatus1.setText("A:设备运行结束,提交结果中");
                 MesClient.finish_ok_bt.setEnabled(true);
 
+                // A面(成品面)加工完清除允许启动信号
+                PlcUtil.changeEnable(s7PLC,false);
+
                 Boolean sendret = DataUtil.sendQuality(MesClient.nettyClient,MesClient.product_sn.getText(),"OK",MesClient.user20,"A");
-//                Boolean sendret = DataUtil.sendQuality(MesClient.product_sn.getText(),"OK",MesClient.user20,"A");
                 if(!sendret){
                     MesClient.pxstatus1.setText("A:结果上传MES失败");
                     MesClient.tjStatusa = 1;
-                }else{
-//                    MesClient.pxstatus1.setText("A:提交成功");
-//                    MesClient.resetScanA();
                 }
             }
         }
@@ -196,47 +175,45 @@ public class PlcUtil {
     }
 
     public static void getStatusB(S7PLC s7PLC){
-        if(MesClient.tjFlagb == 1){ // 已扫码,设备未运行
-            Boolean startb = getBStart(s7PLC); //B启动中
-            if(startb){
-                MesClient.curFlag = "B";
-                MesClient.tjFlagb = 2;
-                MesClient.pxstatus2.setText("B:设备运行中");
-                // 更新curSnb为当前文本框中的工件码
-                if(MesClient.curSnb == null || MesClient.curSnb.isEmpty()){
-                    MesClient.curSnb = MesClient.product_sn2.getText();
+        // 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:设备运行中");
                 }
-                if(MesClient.lastpage == 0){
-                    MesClient.lastpage = 1;
+            }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;
                 }
-            }else{
-                // 程序号防错功能已注释 - 直接允许启动
-                // if(CommonUtils.checkProgramNoSn(MesClient.product_sn2.getText(),MesClient.programNoB)){
-                    Boolean reta = getEnable(s7PLC);
-                    if(!reta){
-                        PlcUtil.changeEnable(MesClient.s7PLC,true);
-                    }
-                // }
             }
-        }else if(MesClient.tjFlagb == 2){
-            Boolean bfinish = getBFinish(s7PLC); //B焊接完成
-            if(bfinish){
-                MesClient.tjFlagb = 3;
-                MesClient.pxstatus2.setText("B:设备运行结束,提交结果中");
-                MesClient.finish_ng_bt.setEnabled(true);
-
-//                Boolean sendret = DataUtil.sendQuality(MesClient.product_sn2.getText(),"OK",MesClient.user20,"B");
-                Boolean sendret = DataUtil.sendQuality(MesClient.nettyClient,MesClient.product_sn2.getText(),"OK",MesClient.user20,"B");
-                if(!sendret){
-                    MesClient.pxstatus2.setText("B:结果上传MES失败");
-                    MesClient.tjStatusb = 1;
-                }else{
-//                    MesClient.pxstatus2.setText("B:提交成功");
-//                    MesClient.resetScanB();
-                }
+        }else{
+            // 不在B面时重置状态
+            if(MesClient.tjFlagb != 0){
+                MesClient.tjFlagb = 0;
+                MesClient.pxstatus2.setText("B:等待转到B面");
             }
-
         }
     }
 
@@ -244,7 +221,7 @@ public class PlcUtil {
     // 修改设备的禁用开关
     public static Boolean changeEnable(S7PLC s7PLC,Boolean result){
         try{
-            s7PLC.writeBoolean("DB9.18.1",result); // AB
+            s7PLC.writeBoolean("DB9.22.3",result); // MES允许信号
             return true;
         }catch (Exception e){
             e.printStackTrace();
@@ -256,7 +233,7 @@ public class PlcUtil {
     public static Boolean getEnable(S7PLC s7PLC){
         Boolean ret = false;
         try{
-            ret = s7PLC.readBoolean("DB9.18.1");
+            ret = s7PLC.readBoolean("DB9.22.3");
         }catch (Exception e){
             e.printStackTrace();
         }
@@ -269,9 +246,13 @@ public class PlcUtil {
     public static String getCurAside(S7PLC s7PLC){
         String str = "A";
         try{
-            Boolean ret = s7PLC.readBoolean("DB1.2.0"); // 当前A面
-            if(!ret){
+            Boolean retA = s7PLC.readBoolean("DB1.2.0"); // A面识别
+            Boolean retB = s7PLC.readBoolean("DB1.2.1"); // B面识别
+
+            if(retB){
                 str = "B";
+            }else if(retA){
+                str = "A";
             }
 
         }catch (Exception e){