Bläddra i källkod

OP035下料兜底及重启状态恢复修复

- OP035 未收到设备运行中(0.1)时,收到下料请求(38.3)也照常下料,并复位0.3,避免卡死
- 修复 OP035 重启后 tjFlag 被重置为0、导致下料无反馈的问题
- OP035 下料时把码交给 OP040(preSn20),OP040 校验通过后清空
- 删除 JdbcUtils 调试打印
wangxichen 5 dagar sedan
förälder
incheckning
eec886bf14

+ 41 - 30
src/com/mes/component/WorkJPanelOP10.java

@@ -296,12 +296,12 @@ public class WorkJPanelOP10 extends JPanel {
         int error = cacheData.getError();
         String sn = cacheData.getSn();
         productSn.setText(sn);
+        // 必须先从缓存恢复状态再调 setMenuStatus,否则字段默认值 tjFlag=0 会被写回缓存覆盖掉
+        tjFlag = cacheData.getTjFlag() == null ? 0 : cacheData.getTjFlag();
+        lastSn = cacheData.getLastSn();
         setMenuStatus(msg,error);
         MesClient.newSn = sn;
-
-        tjFlag = cacheData.getTjFlag();
-        lastSn = cacheData.getLastSn();
-        log.info("formatElementUI:");
+        log.info("formatElementUI: tjFlag={}, sn={}", tjFlag, sn);
         this.repaint();
     }
 
@@ -384,35 +384,15 @@ public class WorkJPanelOP10 extends JPanel {
                                 tjFlag = 2;
                                 setMenuStatus("镭雕中", 0);
                                 writeAllowFeeding(false);
+                            }else if(retBlanking){
+                                // PLC 未给 0.1 就请求下料:不再卡住,复位 0.3 后照常下料
+                                log.warn("<{}{}> [tjFlag=1] 未收到设备运行中 {}.0.1,直接下料 sn={}", oprno, pos, plcDb, productSn.getText());
+                                writeAllowFeeding(false);
+                                doBlanking();
                             }
                         }else if(tjFlag == 2){
                             if(retBlanking){
-                                MesClient.newSn = productSn.getText();
-                                writeSn("1");
-                                boolean writeResult = writeAllowBlanking(true);
-                                log.info("<{}{}> [tjFlag=3] 写入MES下料反馈 DB7020.0.5=true, 结果={}", oprno, pos, writeResult);
-
-                                // 右/中物料不再读取,ps 传空
-                                tjFlag = 3;
-                                setMenuStatus("镭雕结束,等待下一件", 0);
-                                if(tjStatus == 0){
-                                    tjStatus = 1;
-                                    JSONObject retObj = DataUtil.sendQuality(productSn.getText(),oprno+pos,"OK",MesClient.user_menu.getText(),"");
-                                    log.info("<{}{}> 质量数据上报返回: {}", oprno, pos, retObj);
-                                    if(retObj.get("result")!=null&&retObj.get("result").toString().equalsIgnoreCase("true")) {
-                                        resetScanA();
-                                    }else{
-                                        tjStatus = 0;
-                                        if(retObj.get("result")==null){
-                                            setMenuStatus("请求失败,请重试",-1);
-                                        }else{
-                                            if(retObj.get("result").toString().equalsIgnoreCase("false")){
-                                                setMenuStatus(retObj.getString("message"),-1);
-                                            }
-                                        }
-                                    }
-                                }
-
+                                doBlanking();
                             }
                         }else if(tjFlag == 3){
 
@@ -426,6 +406,37 @@ public class WorkJPanelOP10 extends JPanel {
         }, 100,1000);
     }
 
+    // 下料处理:存码给 OP040、写下料反馈、上报质量数据(tjFlag=1 或 2 收到 38.3 时调用)
+    private void doBlanking(){
+        MesClient.newSn = productSn.getText();
+        // 下料时直接把码交给 OP040,不再等扫码位 DB7003.0.0
+        MesClient.preSn20 = productSn.getText();
+        log.info("<{}{}> 下料存码 preSn20={}", oprno, pos, MesClient.preSn20);
+        writeSn("1");
+        boolean writeResult = writeAllowBlanking(true);
+        log.info("<{}{}> [tjFlag=3] 写入MES下料反馈 DB7020.0.5=true, 结果={}", oprno, pos, writeResult);
+
+        // 右/中物料不再读取,ps 传空
+        tjFlag = 3;
+        setMenuStatus("镭雕结束,等待下一件", 0);
+        if(tjStatus != 0){
+            return;
+        }
+        tjStatus = 1;
+        JSONObject retObj = DataUtil.sendQuality(productSn.getText(),oprno+pos,"OK",MesClient.user_menu.getText(),"");
+        log.info("<{}{}> 质量数据上报返回: {}", oprno, pos, retObj);
+        if(retObj.get("result")!=null&&retObj.get("result").toString().equalsIgnoreCase("true")) {
+            resetScanA();
+            return;
+        }
+        tjStatus = 0;
+        if(retObj.get("result")==null){
+            setMenuStatus("请求失败,请重试",-1);
+        }else if(retObj.get("result").toString().equalsIgnoreCase("false")){
+            setMenuStatus(retObj.getString("message"),-1);
+        }
+    }
+
     public void barCode(){
         String sn = readQrcode();
         if(sn.isEmpty()){

+ 4 - 0
src/com/mes/component/WorkJPanelOP20.java

@@ -569,6 +569,10 @@ public class WorkJPanelOP20 extends JPanel {
             JSONObject retObj = DataUtil.checkQuality(sn,oprno+pos,MesClient.user_menu.getText());
             if(retObj.get("result")!=null&&retObj.get("result").toString().equalsIgnoreCase("true")) {
                 tjFeedingFlag = 1;//可加工
+                // 码已被本工位使用,清空防止下一件拿到旧码;期间 OP035 若已存入新码则不清
+                if(sn.equals(MesClient.preSn20)) MesClient.preSn20 = "";
+                if(sn.equals(MesClient.newSn)) MesClient.newSn = "";
+                log.info("<{}{}> 取码校验通过 sn={},已清空 preSn20", oprno, pos, sn);
                 setMenuStatus("工件可以加工", 0);
                 writeAllowFeeding(true);    //允许下料
 //                resetFeedingBtn.setEnabled(false);

+ 0 - 7
src/com/mes/util/JdbcUtils.java

@@ -22,10 +22,8 @@ public class JdbcUtils {
         try {
             Class.forName(Drivde);// 加载驱动,连接sqlite的jdbc
             conn = DriverManager.getConnection(DATABASE_URL);//连接数据库zhou.db,不存在则创建
-            log.info("连接到SQLite数据库成功!1");
             create_bw_record();//初始化结构表
             //create_measure_data();//初始化测试数据表
-			log.info("连接到SQLite数据库成功!2");
         } catch (Exception e) {
             // TODO Auto-generated catch block
         	close();//关闭数据库连接
@@ -95,7 +93,6 @@ public class JdbcUtils {
 				"   record_time DATETIME,                 -- 记录时间\n" +
 				"   UNIQUE (sn)                 -- 唯一索引\n" +
 				")";
-		System.err.println(cache);
 		statement.executeUpdate(cache);
 
         statement.close();
@@ -112,22 +109,18 @@ public class JdbcUtils {
 			stmt = conn.createStatement();
 			//执行语句,得到结果集
 			ret = stmt.executeQuery(sql);
-			System.out.println(sql);
 			while (ret.next()) {
 				content = ret.getString(3);
 			}
-			System.out.println("content:"+content);
 			ret.close();
 			conn.close();//关闭连接
 		} catch (SQLException e1) {
 			e1.printStackTrace();
 		}
-		System.out.println("content2:"+content);
 		if(content == null || content.trim().isEmpty()){
 			return null;
 		}
 		content = CommonUtils.base64Decode(content);
-		System.out.println("content3:"+content);
 		return JSON.parseObject(content,CacheData.class);
 	}