jingbo 9 місяців тому
батько
коміт
d7f6cd4dd6

+ 61 - 0
src/com/mes/ui/DataUtil.java

@@ -13,6 +13,7 @@ import java.util.Properties;
 
 public class DataUtil {
 
+    // 同步报文
     public static Boolean synrTcp(NettyClient nettyClient,String mes_gw){
         try{
             //TCP连接后,直接先发同步报文
@@ -35,6 +36,7 @@ public class DataUtil {
         }
     }
 
+    // 心跳报文
     public static Boolean heartBeat(NettyClient nettyClient,String mes_gw){
         try{
             //TCP连接后,直接先发同步报文
@@ -56,6 +58,7 @@ public class DataUtil {
         }
     }
 
+    // 检查质检报文
     public static Boolean checkQuality(NettyClient nettyClient, String sn, String user){
         try{
             String msgType = "AQDW";
@@ -67,6 +70,7 @@ public class DataUtil {
         }
     }
 
+    // 开始工作报文
     public static Boolean startWork(NettyClient nettyClient,String sn,String user){
         try{
             String msgType = "MKSW";
@@ -78,6 +82,7 @@ public class DataUtil {
         }
     }
 
+    // 绑定用户报文
     public static Boolean bindUser(NettyClient nettyClient,String sn,String user){
         try{
             String msgType = "MBDW";
@@ -90,6 +95,7 @@ public class DataUtil {
         }
     }
 
+    // 绑定报文
     public static Boolean bindWarehouse(NettyClient nettyClient,String sn,String wsn,String user,String craft){
         try{
             String msgType = "MBDW";
@@ -101,6 +107,7 @@ public class DataUtil {
         }
     }
 
+    // 解绑报文
     public static Boolean unBindWarehouse(NettyClient nettyClient,String sn,String wsn,String user,String craft){
         try{
             String msgType = "MJBW";
@@ -112,6 +119,7 @@ public class DataUtil {
         }
     }
 
+    //上传质量报文
     public static Boolean sendQuality(NettyClient nettyClient,String sn,String ret,String user){
         try{
             String msgType = "MQDW";
@@ -124,6 +132,33 @@ public class DataUtil {
         }
     }
 
+
+    // 检查质检报文(工位)
+    public static Boolean checkQualityByGw(NettyClient nettyClient, String sn, String user,String gw){
+        try{
+            String msgType = "AQDW";
+            String gy = "100000";
+            Boolean aqdw_str = sendMessageByGW(nettyClient,msgType,gy,"",sn,"",user,"00","",gw);
+            return aqdw_str;
+        }catch (Exception e){
+            return false;
+        }
+    }
+
+    // 上传质量报文(工位)
+    public static Boolean sendQualityByGW(NettyClient nettyClient,String sn,String ret,String user,String gw){
+        try{
+            String msgType = "MQDW";
+            String gy = "100000";
+            String param = "";
+            Boolean aqdw_str = sendMessageByGW(nettyClient,msgType,gy,"",sn,ret,user,"00",param,gw);
+            return aqdw_str;
+        }catch (Exception e){
+            return false;
+        }
+    }
+
+
     public static Boolean sendQualityNew(NettyClient nettyClient,String sn,String ret,String user){
         try{
             String msgType = "MQDW";
@@ -275,6 +310,32 @@ public class DataUtil {
         }
     }
 
+    public static Boolean sendMessageByGW(NettyClient nettyClient,String msgType,String craft,String lx,String sn,String result,String user,String paramNums,String params,String gw){
+        try{
+            String enconding = "UTF-8";
+            InputStream is = ClassLoader.getSystemResourceAsStream("config/config.properties");
+            Properties pro = new Properties();
+            BufferedReader br = new BufferedReader(new InputStreamReader(is, enconding));
+            pro.load(br);
+            String start = "aaaabbbbbABW";
+            String gy = "GY" + rightPad(craft, 6);
+            gw = "GW" + gw;
+            String reslx = "LX" + rightPad(lx, 2);
+            String id = pro.getProperty("mes.line_sn") + rightPad(sn, 36);
+            String rs = "RS"+ rightPad(result, 2);
+            String da = "DA" + DateLocalUtils.getCurrentDate();
+            String zt = "ZT" + DateLocalUtils.getCurrentTimeHMS();
+            String yh = "YH" + rightPad(user, 20);
+            String aqdw_str = start + msgType + gw + gy + reslx + id + rs + da + zt + yh + paramNums + params;
+            System.out.println("message="+aqdw_str);
+            JdbcUtils.insertData(gw, gy, aqdw_str, msgType, sn);
+            nettyClient.future.channel().writeAndFlush(aqdw_str);
+            return true;
+        }catch (Exception e){
+            return false;
+        }
+    }
+
     public static String doPost(String httpUrl, String param) {
         HttpURLConnection connection = null;
         InputStream is = null;

+ 26 - 29
src/com/mes/ui/MesClient.java

@@ -105,7 +105,7 @@ public class MesClient extends JFrame {
      *
      */
     // 存储工位信息的 Map:key=工位号,value=Oprno 对象
-    private static Map<String, Oprno> oprnoMap = new HashMap<>();
+    public static Map<String, Oprno> oprnoMap = new HashMap<>();
     // 正则表达式:匹配 mes.oprno.${工位号}.${属性名}
     private static final Pattern OPRNO_PATTERN = Pattern.compile("mes\\.oprno\\.(\\w+)\\.(\\w+)");
     // 需要跳过的属性名(不读入 Map)
@@ -126,7 +126,7 @@ public class MesClient extends JFrame {
     // 定时任务执行间隔(毫秒)
     // 定时任务开关状态
     public static boolean scheduledTasksEnabled = false;
-    private static final long TASK_INTERVAL = 5000;
+    private static final long TASK_INTERVAL = 1000;
     // 时间打印任务间隔(毫秒)
     private static final long TIME_PRINT_INTERVAL = 500; // 0.5秒
     // 时间打印任务的引用
@@ -239,20 +239,30 @@ public class MesClient extends JFrame {
                 if (scheduledTasksEnabled) {
                     try {
                         // 从PLC读取数据(这里是示例,实际使用时需要根据工位号确定对应的PLC地址)
-                        String sn = readDataFromPLC(oprnoCode);
+                        String sn = S7PLCUtils.getSnInOprno(oprnoMap.get(oprnoCode), s7PLC).trim();
                         // 使用SwingUtilities确保在事件调度线程中更新UI
                         SwingUtilities.invokeLater(() -> {
                             // 更新输入框内容
-                            System.out.println(sn);
+//                            System.out.println(sn + "加工完成情况" + s7PLC.readBoolean(oprnoMap.get(oprnoCode).process_ok));
+
                             textField.setText(sn);
                         });
                         // 当从对应plc中取到加工完成时执行
                         if (s7PLC.readBoolean(oprnoMap.get(oprnoCode).process_ok)){
-                            textField.setText("加工完成");
-                            //
+                            textField.setText(oprnoCode+"加工完成");
+                            System.out.println("工位号:"+oprnoCode);
+                            System.out.println("工位dizhi:"+oprnoMap.get(oprnoCode).process_ok);
+                            System.out.println("sn:"+sn);
+                            System.out.println("加工完成:---------------"+sn);
                             String qret = "OK";
-                            Boolean sendret = DataUtil.sendQuality(nettyClient,sn,qret,oprnoCode);
-                            s7PLC.writeBoolean(oprnoMap.get(oprnoCode).getMes_out(),true);
+                            if (!S7PLCUtils.getResultInOprno(oprnoMap.get(oprnoCode),s7PLC)){
+                                qret = "NG";
+                            }
+                            System.out.println("加工结果:---------------"+qret);
+                            Boolean sendret = DataUtil.sendQualityByGW(nettyClient,sn,qret,user20,oprnoCode);
+                            if (!sendret){
+                                log.error("发送数据失败");
+                            }
                         }
                     } catch (Exception e) {
                         log.error("定时任务执行异常,工位号: " + oprnoCode, e);
@@ -271,19 +281,7 @@ public class MesClient extends JFrame {
         }
     }
     
-    /**
-     * 从PLC读取数据的示例方法
-     * @param oprnoCode 工位号
-     * @return 读取的数据
-     */
-    private String readDataFromPLC(String oprnoCode) {
-        try {
-            Oprno oprno = oprnoMap.get(oprnoCode);
-            return S7PLCUtils.getSnInOprno(oprno, s7PLC).trim();
-        } catch (Exception e) {
-            throw new RuntimeException("读取PLC数据失败: " + e.getMessage(), e);
-        }
-    }
+
     
     /**
      * 新增:动态生成工位输入框(根据 oprnoMap 的 key 数量)
@@ -616,18 +614,17 @@ public class MesClient extends JFrame {
                     // 处理返回结果
                     if (startOprno != null) {
                         // 判断这个工件码的位置是A面还是B面
+                        System.out.println("上料的工位号码:"+ startOprno.getOprno());
                         String sn = S7PLCUtils.getSnInJXB(startOprno, s7PLC);
                         if (sn != null && !sn.isEmpty()) {
                             // 检查质量
-//                            Boolean checkQualityResult = DataUtil.checkQuality(nettyClient, sn, user20);
-//                            if (checkQualityResult) {
-//                                s7PLC.writeBoolean(startOprno.getMes_in(), true);
-//                            }else {
-//                                MesClient.setMenuStatus("消息发送失败,请重试",-1);
-//                            }
+                            Boolean checkQualityResult = DataUtil.checkQualityByGw(nettyClient, sn, user20,startOprno.getOprno());
+                            if (!checkQualityResult) {
+                                MesClient.setMenuStatus("消息发送失败,请重试",-1);
+                            }
+                        }else {
+                            MesClient.setMenuStatus(startOprno.getOprno()+"获取工件码为空",-1);
                         }
-                    } else {
-                        System.out.println("所有工位上料状态均为false");
                     }
                 } catch (Exception e) {
                     log.error("时间打印任务执行异常", e);

+ 37 - 28
src/com/mes/ui/MesRevice.java

@@ -13,28 +13,36 @@ public class MesRevice {
     public static void checkQualityRevice(String processMsgRet,String mes_msg){
         try{
             if(processMsgRet.equalsIgnoreCase("UD")) {
-                String sn = ProtocolParam.getSn(mes_msg).trim();
-                MesClient.status_menu.setForeground(Color.GREEN);
-                MesClient.check_quality_result = true;//质量合格,可以绑定加工
-                MesClient.status_menu.setText("该工件可以加工");
-                MesClient.work_status = 1;
-                MesClient.f_scan_data_bt_1.setEnabled(false);
-                MesClient.finish_ok_bt.setEnabled(true);
-                MesClient.finish_ng_bt.setEnabled(true);
-
-                String oprno = ProtocolParam.getOprno(mes_msg).trim();
-                if(oprno.equals("OP400")){
-                    String lx = ProtocolParam.getLx(mes_msg);
-                    if(lx.equals("FX")){
-                        MesClient.fxlabel.setVisible(true);
-                    }
-                }
+//                String sn = ProtocolParam.getSn(mes_msg).trim();
+//                MesClient.status_menu.setForeground(Color.GREEN);
+//                MesClient.check_quality_result = true;//质量合格,可以绑定加工
+//                MesClient.status_menu.setText("该工件可以加工");
+//                MesClient.work_status = 1;
+//                MesClient.f_scan_data_bt_1.setEnabled(false);
+//                MesClient.finish_ok_bt.setEnabled(true);
+//                MesClient.finish_ng_bt.setEnabled(true);
+//
+//                String oprno = ProtocolParam.getOprno(mes_msg).trim();
+//                if(oprno.equals("OP400")){
+//                    String lx = ProtocolParam.getLx(mes_msg);
+//                    if(lx.equals("FX")){
+//                        MesClient.fxlabel.setVisible(true);
+//                    }
+//                }
 
 //                String qret = "OK";
 //                MesClient.getUser();
 //                DataUtil.sendQuality(MesClient.nettyClient,sn,qret,MesClient.user20);
+                // 获取工位号
+                String oprno = ProtocolParam.getOprno(mes_msg).trim();
+                // 找到对应实体类
+                Oprno oprno1 = MesClient.oprnoMap.get(oprno);
+                // 发送允许启动信号
+                MesClient.s7PLC.writeBoolean(oprno1.getMes_in(), true);
+                // 开始加工报文
+
             }else {
-                MesClient.check_quality_result = false;
+//                MesClient.check_quality_result = false;
                 String lmsg = ErrorMsg.getErrorMsg(processMsgRet, ProtocolParam.getLx(mes_msg));
                 MesClient.setMenuStatus(lmsg,-1);
             }
@@ -47,11 +55,11 @@ public class MesRevice {
     public static void startRevice(String processMsgRet,String mes_msg){
         try{
             if(processMsgRet.equalsIgnoreCase("UD")) {
-                String oprno = ProtocolParam.getOprno(mes_msg).trim();
-                String sn = ProtocolParam.getSn(mes_msg).trim();
-                String barcode36 = MesClient.getBarcode(sn);//处理36为码
-                MesClient.getUser();
-                DataUtil.startWork(MesClient.nettyClient,barcode36,MesClient.user20);
+//                String oprno = ProtocolParam.getOprno(mes_msg).trim();
+//                String sn = ProtocolParam.getSn(mes_msg).trim();
+//                String barcode36 = MesClient.getBarcode(sn);//处理36为码
+//                MesClient.getUser();
+//                DataUtil.startWork(MesClient.nettyClient,barcode36,MesClient.user20);
             }
         }catch (Exception e){
             e.printStackTrace();
@@ -87,13 +95,14 @@ public class MesRevice {
     // 上传质量
     public static void updateResultRevice(String processMsgRet,String mes_msg){
         try{
-            if(processMsgRet.equalsIgnoreCase("OK")) {
-
-                MesClient.resetScanA();
-                MesClient.setMenuStatus("结果提交成功,请扫下一件",0);
-                MesClient.scan_type = 1;
-                MesClient.scanBarcode();
 
+            if(processMsgRet.equalsIgnoreCase("OK")) {
+                // 获取工位号
+                String oprno = ProtocolParam.getOprno(mes_msg).trim();
+                // 找到对应实体类
+                Oprno oprno1 = MesClient.oprnoMap.get(oprno);
+                // 发送允许下料信号
+                MesClient.s7PLC.writeBoolean(oprno1.getMes_out(),true);
             }else{
                 MesClient.setMenuStatus("结果提交失败,请重试",-1);
             }

+ 19 - 0
src/com/mes/ui/Oprno.java

@@ -24,7 +24,26 @@ public class Oprno {
     public String mes_shield;
     // 工件码位置
     public String product_sn;
+    //抓手A工件码地址
+    public String hgA_sn;
+    //抓手B工件码地址
+    public String hgB_sn;
 
+    public String getHgA_sn() {
+        return hgA_sn;
+    }
+
+    public void setHgA_sn(String hgA_sn) {
+        this.hgA_sn = hgA_sn;
+    }
+
+    public String getHgB_sn() {
+        return hgB_sn;
+    }
+
+    public void setHgB_sn(String hgB_sn) {
+        this.hgB_sn = hgB_sn;
+    }
 
     public String getOprno() {
         return oprno;

+ 56 - 4
src/com/mes/ui/test.java

@@ -1,14 +1,66 @@
 package com.mes.ui;
 
-import com.github.xingshuangs.iot.protocol.s7.enums.EPlcType;
-import com.github.xingshuangs.iot.protocol.s7.service.S7PLC;
+import com.mes.netty.NettyClient;
 
 public class test {
 
-    public static S7PLC s7PLC = new S7PLC(EPlcType.S1200,"10.88.10.1");
+    public static NettyClient nettyClient;
 
+    // 输入函数
+    public static java.util.Scanner scanner = new java.util.Scanner(System.in);
 
     public static void main(String[] args) {
-        System.out.println(s7PLC.readString("DB104.2.0"));
+        try {
+            // 初始化MesClient的配置信息
+            initMesClientConfig();
+            
+            // 初始化TCP连接
+            initTcpConnection();
+
+            // 循环,当输入1时发送报文
+            while (true) {
+                String input = scanner.nextLine();
+                if (input.equals("1")) {
+                    // 发送模拟质量检查数据
+                    DataUtil.checkQualityByGw(nettyClient, "509900661376119990FC21100050", "user20","OP190A");
+                }
+            }
+
+
+            
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+    
+    // 初始化MesClient的配置信息
+    private static void initMesClientConfig() throws Exception {
+        // 调用MesClient的readProperty方法来初始化配置
+        // 由于readProperty是private的,我们需要通过反射来调用
+        java.lang.reflect.Method method = MesClient.class.getDeclaredMethod("readProperty");
+        method.setAccessible(true);
+        method.invoke(null);
+        
+        System.out.println("配置信息:");
+        System.out.println("工位号:" + MesClient.mes_gw);
+        System.out.println("服务器IP:" + MesClient.mes_server_ip);
+        System.out.println("TCP端口:" + MesClient.mes_tcp_port);
+    }
+    
+    // 初始化TCP连接
+    public static void initTcpConnection() {
+        try {
+            if (nettyClient == null) {
+                // 初始化TCP连接
+                nettyClient = new NettyClient();
+                
+                // 创建一个简单的同步消息
+                String msg = "SYNR" + String.format("%6s", MesClient.mes_gw).replace(' ', '0');
+                // 调用run方法连接服务器
+                nettyClient.run(msg);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
     }
 }

+ 13 - 2
src/com/mes/util/S7PLCUtils.java

@@ -38,9 +38,11 @@ public class S7PLCUtils {
     // 读取工件码
     public static String getSnInJXB(Oprno oprno, S7PLC s7PLC){
         if (s7PLC.readBoolean(oprno.getHgA_out())){
-            return s7PLC.readString("DB104.324.0");
+            return s7PLC.readString(oprno.getHgA_sn());
+        }else if (s7PLC.readBoolean(oprno.getHgB_out())){
+            return s7PLC.readString(oprno.getHgB_sn());
         }else {
-            return s7PLC.readString("DB104.376.0");
+            return "";
         }
     }
 
@@ -51,5 +53,14 @@ public class S7PLCUtils {
 
 
 
+    //读取工位结果
+    public static Boolean getResultInOprno(Oprno oprno, S7PLC s7PLC){
+        Boolean resultOK = s7PLC.readBoolean(oprno.getProcess_result_ok());
+        Boolean resultNG = s7PLC.readBoolean(oprno.getProcess_result_ng());
+        // 只有当NG为true时返回false
+        if (resultOK){
+            return resultOK;
+        }else return !resultOK && !resultNG;
+    }
 
 }

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

@@ -19,6 +19,8 @@ mes.oprno.OP180A.process_result_ok=DB502.0.6
 mes.oprno.OP180A.process_result_ng=DB502.0.7
 mes.oprno.OP180A.mes_shield=DB502.1.0
 mes.oprno.OP180A.product_sn=DB502.2.0
+mes.oprno.OP180A.hgA_sn=DB502.270.0
+mes.oprno.OP180A.hgB_sn=DB502.322.0
 
 
 mes.oprno.OP190A.hgA_out=DB502.54.0
@@ -31,6 +33,8 @@ mes.oprno.OP190A.process_result_ok=DB502.54.6
 mes.oprno.OP190A.process_result_ng=DB502.54.7
 mes.oprno.OP190A.mes_shield=DB502.55.0
 mes.oprno.OP190A.product_sn=DB502.56.0
+mes.oprno.OP190A.hgA_sn=DB502.270.0
+mes.oprno.OP190A.hgB_sn=DB502.322.0
 
 
 mes.oprno.OP190B.hgA_out=DB502.108.0
@@ -43,6 +47,8 @@ mes.oprno.OP190B.process_result_ok=DB502.108.6
 mes.oprno.OP190B.process_result_ng=DB502.108.7
 mes.oprno.OP190B.mes_shield=DB502.109.0
 mes.oprno.OP190B.product_sn=DB502.110.0
+mes.oprno.OP190B.hgA_sn=DB502.270.0
+mes.oprno.OP190B.hgB_sn=DB502.322.0
 
 
 mes.oprno.OP190C.hgA_out=DB502.162.0
@@ -55,6 +61,8 @@ mes.oprno.OP190C.process_result_ok=DB502.162.6
 mes.oprno.OP190C.process_result_ng=DB502.162.7
 mes.oprno.OP190C.mes_shield=DB502.163.0
 mes.oprno.OP190C.product_sn=DB502.164.0
+mes.oprno.OP190C.hgA_sn=DB502.270.0
+mes.oprno.OP190C.hgB_sn=DB502.322.0
 
 
 mes.oprno.OP190D.hgA_out=DB502.216.0
@@ -67,6 +75,8 @@ mes.oprno.OP190D.process_result_ok=DB502.216.6
 mes.oprno.OP190D.process_result_ng=DB502.216.7
 mes.oprno.OP190D.mes_shield=DB502.217.0
 mes.oprno.OP190D.product_sn=DB502.218.0
+mes.oprno.OP190D.hgA_sn=DB502.270.0
+mes.oprno.OP190D.hgB_sn=DB502.322.0
 
 
 mes.oprno.OP200A.hgA_out=DB503.0.0
@@ -79,6 +89,8 @@ mes.oprno.OP200A.process_result_ok=DB503.0.6
 mes.oprno.OP200A.process_result_ng=DB503.0.7
 mes.oprno.OP200A.mes_shield=DB503.1.0
 mes.oprno.OP200A.product_sn=DB503.2.0
+mes.oprno.OP200A.hgA_sn=DB503.270.0
+mes.oprno.OP200A.hgB_sn=DB503.322.0
 
 
 mes.oprno.OP210A.hgA_out=DB503.54.0
@@ -91,6 +103,8 @@ mes.oprno.OP210A.process_result_ok=DB503.54.6
 mes.oprno.OP210A.process_result_ng=DB503.54.7
 mes.oprno.OP210A.mes_shield=DB503.55.0
 mes.oprno.OP210A.product_sn=DB503.56.0
+mes.oprno.OP210A.hgA_sn=DB503.270.0
+mes.oprno.OP210A.hgB_sn=DB503.322.0
 
 
 mes.oprno.OP210B.hgA_out=DB503.108.0
@@ -103,6 +117,8 @@ mes.oprno.OP210B.process_result_ok=DB503.108.6
 mes.oprno.OP210B.process_result_ng=DB503.108.7
 mes.oprno.OP210B.mes_shield=DB503.109.0
 mes.oprno.OP210B.product_sn=DB503.110.0
+mes.oprno.OP210B.hgA_sn=DB503.270.0
+mes.oprno.OP210B.hgB_sn=DB503.322.0
 
 
 mes.oprno.OP220A.hgA_out=DB503.162.0
@@ -115,6 +131,8 @@ mes.oprno.OP220A.process_result_ok=DB503.162.6
 mes.oprno.OP220A.process_result_ng=DB503.162.7
 mes.oprno.OP220A.mes_shield=DB503.163.0
 mes.oprno.OP220A.product_sn=DB503.164.0
+mes.oprno.OP220A.hgA_sn=DB503.270.0
+mes.oprno.OP220A.hgB_sn=DB503.322.0
 
 
 mes.oprno.OP220B.hgA_out=DB503.216.0
@@ -127,6 +145,8 @@ mes.oprno.OP220B.process_result_ok=DB503.216.6
 mes.oprno.OP220B.process_result_ng=DB503.216.7
 mes.oprno.OP220B.mes_shield=DB503.217.0
 mes.oprno.OP220B.product_sn=DB503.218.0
+mes.oprno.OP220B.hgA_sn=DB503.270.0
+mes.oprno.OP220B.hgB_sn=DB503.322.0
 
 
 mes.oprno.OP230A.hgA_out=DB504.0.0
@@ -139,6 +159,8 @@ mes.oprno.OP230A.process_result_ok=DB504.0.6
 mes.oprno.OP230A.process_result_ng=DB504.0.7
 mes.oprno.OP230A.mes_shield=DB504.1.0
 mes.oprno.OP230A.product_sn=DB504.2.0
+mes.oprno.OP230A.hgA_sn=DB504.378.0
+mes.oprno.OP230A.hgB_sn=DB504.430.0
 
 
 mes.oprno.OP240A.hgA_out=DB504.54.0
@@ -151,6 +173,8 @@ mes.oprno.OP240A.process_result_ok=DB504.54.6
 mes.oprno.OP240A.process_result_ng=DB504.54.7
 mes.oprno.OP240A.mes_shield=DB504.55.0
 mes.oprno.OP240A.product_sn=DB504.56.0
+mes.oprno.OP240A.hgA_sn=DB504.378.0
+mes.oprno.OP240A.hgB_sn=DB504.430.0
 
 
 mes.oprno.OP240B.hgA_out=DB504.108.0
@@ -163,6 +187,8 @@ mes.oprno.OP240B.process_result_ok=DB504.108.6
 mes.oprno.OP240B.process_result_ng=DB504.108.7
 mes.oprno.OP240B.mes_shield=DB504.109.0
 mes.oprno.OP240B.product_sn=DB504.110.0
+mes.oprno.OP240B.hgA_sn=DB504.378.0
+mes.oprno.OP240B.hgB_sn=DB504.430.0
 
 
 mes.oprno.OP240C.hgA_out=DB504.162.0
@@ -175,6 +201,8 @@ mes.oprno.OP240C.process_result_ok=DB504.162.6
 mes.oprno.OP240C.process_result_ng=DB504.162.7
 mes.oprno.OP240C.mes_shield=DB504.163.0
 mes.oprno.OP240C.product_sn=DB504.164.0
+mes.oprno.OP240C.hgA_sn=DB504.378.0
+mes.oprno.OP240C.hgB_sn=DB504.430.0
 
 
 mes.oprno.OP250A.hgA_out=DB504.216.0
@@ -187,6 +215,8 @@ mes.oprno.OP250A.process_result_ok=DB504.216.6
 mes.oprno.OP250A.process_result_ng=DB504.216.7
 mes.oprno.OP250A.mes_shield=DB504.217.0
 mes.oprno.OP250A.product_sn=DB504.218.0
+mes.oprno.OP250A.hgA_sn=DB504.378.0
+mes.oprno.OP250A.hgB_sn=DB504.430.0
 
 
 mes.oprno.OP250B.hgA_out=DB504.270.0
@@ -199,6 +229,8 @@ mes.oprno.OP250B.process_result_ok=DB504.270.6
 mes.oprno.OP250B.process_result_ng=DB504.270.7
 mes.oprno.OP250B.mes_shield=DB504.271.0
 mes.oprno.OP250B.product_sn=DB504.272.0
+mes.oprno.OP250B.hgA_sn=DB504.378.0
+mes.oprno.OP250B.hgB_sn=DB504.430.0
 
 
 mes.oprno.OP250C.hgA_out=DB504.324.0
@@ -210,4 +242,69 @@ mes.oprno.OP250C.mes_out=DB504.324.5
 mes.oprno.OP250C.process_result_ok=DB504.324.6
 mes.oprno.OP250C.process_result_ng=DB504.324.7
 mes.oprno.OP250C.mes_shield=DB504.325.0
-mes.oprno.OP250C.product_sn=DB504.326.0
+mes.oprno.OP250C.product_sn=DB504.326.0
+mes.oprno.OP250C.hgA_sn=DB504.378.0
+mes.oprno.OP250C.hgB_sn=DB504.430.0
+
+
+
+#mes.oprno.OP270A.hgA_out=DB32.54.0
+#mes.oprno.OP270A.hgB_out=DB32.54.1
+#mes.oprno.OP270A.mes_in=DB32.54.2
+#mes.oprno.OP270A.out_ok=DB32.54.3
+#mes.oprno.OP270A.process_ok=DB32.54.4
+#mes.oprno.OP270A.mes_out=DB32.54.5
+#mes.oprno.OP270A.product_sn=DB32.56.0
+#
+#
+#mes.oprno.OP270B.hgA_out=DB32.108.0
+#mes.oprno.OP270B.hgB_out=DB32.108.1
+#mes.oprno.OP270B.mes_in=DB32.108.2
+#mes.oprno.OP270B.out_ok=DB32.108.3
+#mes.oprno.OP270B.process_ok=DB32.108.4
+#mes.oprno.OP270B.mes_out=DB32.108.5
+#mes.oprno.OP270B.product_sn=DB32.110.0
+#
+#
+#mes.oprno.OP270C.hgA_out=DB32.162.0
+#mes.oprno.OP270C.hgB_out=DB32.162.1
+#mes.oprno.OP270C.mes_in=DB32.162.2
+#mes.oprno.OP270C.out_ok=DB32.162.3
+#mes.oprno.OP270C.process_ok=DB32.162.4
+#mes.oprno.OP270C.mes_out=DB32.162.5
+#mes.oprno.OP270C.product_sn=DB32.164.0
+
+
+
+#mes.oprno.OP280A.hgA_out=DB57.0.0
+#mes.oprno.OP280A.hgB_out=DB57.0.1
+#mes.oprno.OP280A.mes_in=DB57.0.2
+#mes.oprno.OP280A.out_ok=DB57.0.3
+#mes.oprno.OP280A.process_ok=DB57.0.4
+#mes.oprno.OP280A.mes_out=DB57.0.5
+#mes.oprno.OP280A.product_sn=DB57.2.0
+#
+#mes.oprno.OP280B.hgA_out=DB57.54.0
+#mes.oprno.OP280B.hgB_out=DB57.54.1
+#mes.oprno.OP280B.mes_in=DB57.54.2
+#mes.oprno.OP280B.out_ok=DB57.54.3
+#mes.oprno.OP280B.process_ok=DB57.54.4
+#mes.oprno.OP280B.mes_out=DB57.54.5
+#mes.oprno.OP280B.product_sn=DB57.56.0
+
+
+#mes.oprno.OP290A.hgA_out=DB57.108.0
+#mes.oprno.OP290A.hgB_out=DB57.108.1
+#mes.oprno.OP290A.mes_in=DB57.108.2
+#mes.oprno.OP290A.out_ok=DB57.108.3
+#mes.oprno.OP290A.process_ok=DB57.108.4
+#mes.oprno.OP290A.mes_out=DB57.108.5
+#mes.oprno.OP290A.product_sn=DB57.110.0
+#
+#
+#mes.oprno.OP290B.hgA_out=DB57.162.0
+#mes.oprno.OP290B.hgB_out=DB57.162.1
+#mes.oprno.OP290B.mes_in=DB57.162.2
+#mes.oprno.OP290B.out_ok=DB57.162.3
+#mes.oprno.OP290B.process_ok=DB57.162.4
+#mes.oprno.OP290B.mes_out=DB57.162.5