Browse Source

cmt优化

sunxianglong 4 days ago
parent
commit
13d64f7aba

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

@@ -3,12 +3,14 @@ package com.mes.ui;
 import com.alibaba.fastjson2.JSONObject;
 import com.mes.netty.NettyClient;
 import com.mes.util.DateLocalUtils;
+import com.mes.util.HttpUtils;
 import com.mes.util.JdbcUtils;
 
 import java.io.*;
 import java.net.HttpURLConnection;
 import java.net.MalformedURLException;
 import java.net.URL;
+import java.net.URLEncoder;
 import java.util.Properties;
 
 public class DataUtil {
@@ -100,6 +102,80 @@ public class DataUtil {
         }
     }
 
+    /**
+     * HTTP 提交工位结果:/mesProductRecord/pcresult
+     * @param result OK / NG
+     */
+    public static JSONObject submitResultHttp(String sn, String result, String userCode) {
+        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 mes_server_ip = pro.getProperty("mes.server_ip");
+            String oprno = pro.getProperty("mes.gw").trim();
+            String lineSn = pro.getProperty("mes.line_sn").trim();
+            String url = "http://" + mes_server_ip + ":8980/js/a/mes/mesProductRecord/pcresult";
+            String params = "__ajax=json&oprno=" + oprno
+                    + "&lineSn=" + lineSn
+                    + "&sn=" + sn.trim()
+                    + "&result=" + result.trim()
+                    + "&ucode=" + (userCode == null ? "" : userCode.trim())
+                    + "&__sid=" + MesClient.sessionid;
+            System.out.println("submitResultHttp params=" + params);
+            String ret = doPost(url, params);
+            System.out.println("submitResultHttp result=" + ret);
+            if (ret == null || ret.equalsIgnoreCase("false")) {
+                return null;
+            }
+            return JSONObject.parseObject(ret);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    /**
+     * 上传 CMT 焊接过程数据到 mesProductCmtData 表
+     */
+    public static boolean saveCmtDataHttp(String sn, float wireSpeed, float current, float voltage) {
+        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 mes_server_ip = pro.getProperty("mes.server_ip");
+            String oprno = pro.getProperty("mes.gw", "OP120").trim();
+            String lineSn = pro.getProperty("mes.line_sn").trim();
+
+            JSONObject data = new JSONObject();
+            data.put("oprno", oprno);
+            data.put("lineSn", lineSn);
+            data.put("sn", sn == null ? "" : sn.trim());
+            data.put("wireSpeed", String.format("%.2f", wireSpeed));
+            data.put("current", String.format("%.2f", current));
+            data.put("voltage", String.format("%.2f", voltage));
+
+            String url = "http://" + mes_server_ip + ":8980/js/a/mes/mesProductCmtData/add?__ajax=json&__sid="
+                    + URLEncoder.encode(MesClient.sessionid == null ? "" : MesClient.sessionid, "UTF-8");
+            System.out.println("saveCmtDataHttp url=" + url + " body=" + data.toJSONString());
+
+            String response = HttpUtils.sendJsonPost(url, data.toJSONString());
+            System.out.println("saveCmtDataHttp response=" + response);
+            if (response == null || response.isEmpty()) {
+                return false;
+            }
+            JSONObject obj = JSONObject.parseObject(response);
+            Object resultVal = obj.get("result");
+            return Boolean.TRUE.equals(resultVal) || "true".equalsIgnoreCase(String.valueOf(resultVal));
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
     public static Boolean startWork(NettyClient nettyClient,String sn,String user){
         try{
             String msgType = "MKSW";

+ 96 - 43
src/com/mes/ui/MesClient.java

@@ -99,6 +99,7 @@ public class MesClient extends JFrame {
     public static String mes_plc_ip = "192.168.6.40";
     public static Timer plcMonitorTimer;
     public static boolean plc_finish_handled = false;
+    public static boolean plc_finish_last = false;
 
     public static void main(String[] args) {
         EventQueue.invokeLater(new Runnable() {
@@ -315,6 +316,7 @@ public class MesClient extends JFrame {
         stopPlcMonitor();
         S7Util.setQualityOk(false);
         plc_finish_handled = false;
+        plc_finish_last = false;
 
         work_status = 0;
         check_quality_result = false;
@@ -427,7 +429,7 @@ public class MesClient extends JFrame {
         }
     }
 
-    /** 质量校验通过:置位 DB17.8.0,启动 PLC 监控 */
+    /** 质量校验通过:置位 DB17.14.0,启动 PLC 监控 */
     public static void onQualityCheckPassed() {
         check_quality_result = true;
         work_status = 1;
@@ -444,6 +446,7 @@ public class MesClient extends JFrame {
 
     public static void startPlcMonitor() {
         stopPlcMonitor();
+        plc_finish_last = false;
         plcMonitorTimer = new Timer();
         plcMonitorTimer.schedule(new TimerTask() {
             @Override
@@ -452,36 +455,54 @@ public class MesClient extends JFrame {
                     if (work_status != 1) {
                         return;
                     }
-                    // 焊接中:每秒读取送丝速度/电流/电压
-                    if (S7Util.isWelding()) {
-                        final int wireSpeed = S7Util.readWireSpeed();
-                        final int current = S7Util.readCurrent();
-                        final int voltage = S7Util.readVoltage();
+
+                    final boolean finish = S7Util.isFinish();
+                    final boolean welding = S7Util.isWelding();
+                    final boolean finishDetected = finish || (finish && !plc_finish_last);
+                    plc_finish_last = finish;
+
+                    System.out.println("PLC监控 DB17.0.0完成=" + finish + " DB17.0.1焊接=" + welding);
+
+                    // 完成信号 DB17.0.0 为 true:停止上传并点亮 OK/NG
+                    if (finishDetected && !plc_finish_handled) {
+                        plc_finish_handled = true;
                         SwingUtilities.invokeLater(new Runnable() {
                             @Override
                             public void run() {
-                                updateProcessDataUI(wireSpeed, current, voltage);
-                                setMenuStatus("设备焊接中...", 0);
+                                finish_ok_bt.setEnabled(true);
+                                finish_ng_bt.setEnabled(true);
+                                setMenuStatus("设备加工完成,请提交结果", 0);
                             }
                         });
                     }
-                    // 完成信号:点亮 OK/NG
-                    if (!plc_finish_handled && S7Util.isFinish()) {
-                        plc_finish_handled = true;
+
+                    // 未完成且焊接中:读取过程数据并上传
+                    if (welding && !finish && !plc_finish_handled) {
+                        final float wireSpeed = S7Util.readWireSpeed();
+                        final float current = S7Util.readCurrent();
+                        final float voltage = S7Util.readVoltage();
+                        final String sn = product_sn.getText().trim();
                         SwingUtilities.invokeLater(new Runnable() {
                             @Override
                             public void run() {
-                                finish_ok_bt.setEnabled(true);
-                                finish_ng_bt.setEnabled(true);
-                                setMenuStatus("设备加工完成,请提交结果", 0);
+                                updateProcessDataUI(wireSpeed, current, voltage);
+                                setMenuStatus("设备焊接中...", 0);
                             }
                         });
+                        if (!sn.isEmpty()) {
+                            new Thread(new Runnable() {
+                                @Override
+                                public void run() {
+                                    DataUtil.saveCmtDataHttp(sn, wireSpeed, current, voltage);
+                                }
+                            }).start();
+                        }
                     }
                 } catch (Exception e) {
                     e.printStackTrace();
                 }
             }
-        }, 1000, 1000);
+        }, 500, 500);
     }
 
     public static void stopPlcMonitor() {
@@ -491,20 +512,73 @@ public class MesClient extends JFrame {
         }
     }
 
-    public static void updateProcessDataUI(int wireSpeed, int current, int voltage) {
+    public static void updateProcessDataUI(float wireSpeed, float current, float voltage) {
         if (wire_speed_value != null) {
-            wire_speed_value.setText(String.valueOf(wireSpeed));
+            wire_speed_value.setText(String.format("%.2f", wireSpeed));
         }
         if (current_value != null) {
-            current_value.setText(String.valueOf(current));
+            current_value.setText(String.format("%.2f", current));
         }
         if (voltage_value != null) {
-            voltage_value.setText(String.valueOf(voltage));
+            voltage_value.setText(String.format("%.2f", voltage));
         }
     }
 
     public static void clearProcessDataUI() {
-        updateProcessDataUI(0, 0, 0);
+        updateProcessDataUI(0f, 0f, 0f);
+    }
+
+    /** 点击 OK/NG 提交本工位结果 */
+    public static void submitResult(final String qret) {
+        if (work_status != 1 || !check_quality_result) {
+            return;
+        }
+        if (!plc_finish_handled) {
+            JOptionPane.showMessageDialog(mesClientFrame, "设备尚未完成,无法提交", "提示窗口", JOptionPane.INFORMATION_MESSAGE);
+            return;
+        }
+        final String sn = product_sn.getText().trim();
+        if (sn.isEmpty()) {
+            JOptionPane.showMessageDialog(mesClientFrame, "工件码为空,无法提交", "提示窗口", JOptionPane.INFORMATION_MESSAGE);
+            return;
+        }
+
+        finish_ok_bt.setEnabled(false);
+        finish_ng_bt.setEnabled(false);
+        setMenuStatus("正在提交结果...", 0);
+
+        new Thread(new Runnable() {
+            @Override
+            public void run() {
+                final JSONObject retObj = DataUtil.submitResultHttp(sn, qret, user_menu.getText());
+                SwingUtilities.invokeLater(new Runnable() {
+                    @Override
+                    public void run() {
+                        boolean ok = false;
+                        String message = "结果提交失败,请重试";
+                        if (retObj != null) {
+                            Object result = retObj.get("result");
+                            if (result != null && ("true".equalsIgnoreCase(String.valueOf(result)) || Boolean.TRUE.equals(result))) {
+                                ok = true;
+                            }
+                            if (retObj.getString("message") != null && !retObj.getString("message").isEmpty()) {
+                                message = retObj.getString("message");
+                            }
+                        }
+                        if (ok) {
+                            resetScanA();
+                            setMenuStatus("结果提交成功,请扫下一件", 0);
+                            scan_type = 1;
+                        } else {
+                            finish_ok_bt.setEnabled(true);
+                            finish_ng_bt.setEnabled(true);
+                            setMenuStatus(message, -1);
+                            JOptionPane.showMessageDialog(mesClientFrame, message, "提示窗口", JOptionPane.INFORMATION_MESSAGE);
+                        }
+                    }
+                });
+            }
+        }).start();
     }
 
     public static void logoff() {
@@ -712,18 +786,7 @@ public class MesClient extends JFrame {
         finish_ok_bt.setEnabled(false);
         finish_ok_bt.addActionListener(new ActionListener() {
             public void actionPerformed(ActionEvent e) {
-                if(work_status == 1 && check_quality_result){
-
-                    String sn = getBarcode(product_sn.getText());
-                    getUser();
-
-                    String qret = "OK";
-                    Boolean sendret = DataUtil.sendQuality(nettyClient,sn,qret,user20);
-                    if(!sendret){
-                        JOptionPane.showMessageDialog(mesClientFrame,"消息发送失败,请重试","提示窗口", JOptionPane.INFORMATION_MESSAGE);
-                        return;
-                    }
-                }
+                submitResult("OK");
             }
         });
         finish_ok_bt.setIcon(new ImageIcon(MesClient.class.getResource("/bg/ok_bg.png")));
@@ -736,17 +799,7 @@ public class MesClient extends JFrame {
         finish_ng_bt.setEnabled(false);
         finish_ng_bt.addActionListener(new ActionListener() {
             public void actionPerformed(ActionEvent e) {
-                if(work_status == 1 && check_quality_result){
-
-                    String sn = getBarcode(product_sn.getText());
-                    getUser();
-                    String qret = "NG";
-                    Boolean sendret = DataUtil.sendQuality(nettyClient,sn,qret,user20);
-                    if(!sendret){
-                        JOptionPane.showMessageDialog(mesClientFrame,"消息发送失败,请重试","提示窗口", JOptionPane.INFORMATION_MESSAGE);
-                        return;
-                    }
-                }
+                submitResult("NG");
             }
         });
         finish_ng_bt.setIcon(new ImageIcon(MesClient.class.getResource("/bg/ng_bg.png")));

+ 20 - 18
src/com/mes/ui/S7Util.java

@@ -10,16 +10,16 @@ public class S7Util {
 
     /** 完成信号 */
     public static final String ADDR_FINISH = "DB17.0.0";
-    /** 送丝速度 uint */
+    /** 送丝速度 Real */
     public static final String ADDR_WIRE_SPEED = "DB17.2.0";
-    /** 电流 uint */
-    public static final String ADDR_CURRENT = "DB17.4.0";
-    /** 电压 uint */
-    public static final String ADDR_VOLTAGE = "DB17.6.0";
+    /** 电流 Real */
+    public static final String ADDR_CURRENT = "DB17.6.0";
+    /** 电压 Real */
+    public static final String ADDR_VOLTAGE = "DB17.10.0";
     /** 质量校验通过后置位,允许设备加工 */
-    public static final String ADDR_QUALITY_OK = "DB17.8.0";
+    public static final String ADDR_QUALITY_OK = "DB17.14.0";
     /** 焊接中信号,为 true 时周期性读取过程数据 */
-    public static final String ADDR_WELDING = "DB17.10.0";
+    public static final String ADDR_WELDING = "DB17.0.1";
 
     public static S7PLC s7PLC;
 
@@ -29,8 +29,10 @@ public class S7Util {
 
     public static boolean readBoolean(String address) {
         try {
-            return s7PLC.readBoolean(address);
+            boolean value = s7PLC.readBoolean(address);
+            return value;
         } catch (Exception e) {
+            System.err.println("读取S7点位失败 " + address + ": " + e.getMessage());
             e.printStackTrace();
             return false;
         }
@@ -44,13 +46,13 @@ public class S7Util {
         }
     }
 
-    /** 读取无符号 16 位整数(uint / Word) */
-    public static int readUInt(String address) {
+    /** 读取 Real(float32) */
+    public static float readReal(String address) {
         try {
-            return Short.toUnsignedInt(s7PLC.readInt16(address));
+            return s7PLC.readFloat32(address);
         } catch (Exception e) {
             e.printStackTrace();
-            return 0;
+            return 0f;
         }
     }
 
@@ -66,15 +68,15 @@ public class S7Util {
         return readBoolean(ADDR_FINISH);
     }
 
-    public static int readWireSpeed() {
-        return readUInt(ADDR_WIRE_SPEED);
+    public static float readWireSpeed() {
+        return readReal(ADDR_WIRE_SPEED);
     }
 
-    public static int readCurrent() {
-        return readUInt(ADDR_CURRENT);
+    public static float readCurrent() {
+        return readReal(ADDR_CURRENT);
     }
 
-    public static int readVoltage() {
-        return readUInt(ADDR_VOLTAGE);
+    public static float readVoltage() {
+        return readReal(ADDR_VOLTAGE);
     }
 }

+ 40 - 0
src/com/mes/util/HttpUtils.java

@@ -7,6 +7,8 @@ import java.io.OutputStreamWriter;
 import java.net.HttpURLConnection;
 import java.net.URISyntaxException;
 import java.net.URL;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
 
 public class HttpUtils {
 	/**
@@ -126,6 +128,44 @@ public class HttpUtils {
         return ret;
     }
 
+    /** 发送 JSON 格式 POST 请求 */
+    public static String sendJsonPost(String urlString, String jsonInput) {
+        HttpURLConnection conn = null;
+        try {
+            URL url = new URL(urlString);
+            conn = (HttpURLConnection) url.openConnection();
+            conn.setRequestMethod("POST");
+            conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
+            conn.setRequestProperty("Accept", "application/json");
+            conn.setConnectTimeout(5000);
+            conn.setReadTimeout(5000);
+            conn.setDoOutput(true);
+
+            byte[] input = jsonInput.getBytes(StandardCharsets.UTF_8);
+            conn.getOutputStream().write(input, 0, input.length);
+
+            int status = conn.getResponseCode();
+            if (status >= 200 && status < 300) {
+                BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8));
+                StringBuilder response = new StringBuilder();
+                String line;
+                while ((line = br.readLine()) != null) {
+                    response.append(line);
+                }
+                br.close();
+                return response.toString();
+            }
+            return null;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        } finally {
+            if (conn != null) {
+                conn.disconnect();
+            }
+        }
+    }
+
 	
 
 }

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

@@ -1,6 +1,6 @@
 mes.gw=OP120
-#mes.server_ip=127.0.0.1
-mes.server_ip=10.0.20.10
+mes.server_ip=127.0.0.1
+#mes.server_ip=10.0.20.10
 mes.tcp_port=3000
 mes.heart_beat_cycle=60
 mes.line_sn=XT