chefz преди 1 седмица
родител
ревизия
ad2b2dd3d0
променени са 6 файла, в които са добавени 259 реда и са изтрити 38 реда
  1. 11 0
      .project
  2. 175 12
      src/com/mes/ui/MesClient.java
  3. 6 3
      src/com/mes/ui/ModbusUtil.java
  4. 9 20
      src/com/mes/ui/OprnoUtil.java
  5. 55 0
      src/com/mes/util/JdbcUtils.java
  6. 3 3
      src/resources/config/config.properties

+ 11 - 0
.project

@@ -14,4 +14,15 @@
 	<natures>
 		<nature>org.eclipse.jdt.core.javanature</nature>
 	</natures>
+	<filteredResources>
+		<filter>
+			<id>1779072290228</id>
+			<name></name>
+			<type>30</type>
+			<matcher>
+				<id>org.eclipse.core.resources.regexFilterMatcher</id>
+				<arguments>node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments>
+			</matcher>
+		</filter>
+	</filteredResources>
 </projectDescription>

+ 175 - 12
src/com/mes/ui/MesClient.java

@@ -40,6 +40,8 @@ public class MesClient extends JFrame {
     public static int mes_heart_icon_cycle = 1;
     public static String mes_line_sn = ""; // 产线编号
 
+    public static boolean mes_shield_flag = false; // MES 屏蔽标志
+
     //TCP连接
     public static NettyClient nettyClient;
     //TCP连接状态
@@ -79,6 +81,7 @@ public class MesClient extends JFrame {
     public static MesWebView jfxPanel = null;
     public static JPanel indexPanelC;
     public static MesWebView jfxPanel2 = null;
+    public static JPanel indexPanelD;
     public static MesRadio mesRadioHj;
 
     public static JTextField param1;
@@ -86,8 +89,10 @@ public class MesClient extends JFrame {
     public static JTextField param3;
     public static JTextField param4;
 
-    public static ModbusTcp plcA = new ModbusTcp(1, "192.168.1.7");
-    public static ModbusTcp plcB = new ModbusTcp(1, "192.168.1.8");
+    public static ModbusTcp plcA;
+    public static ModbusTcp plcB;
+    public static String curIpA = "";
+    public static String curIpB = "";
 //    public static ModbusTcp plcA = new ModbusTcp(1, "192.168.1.27");
 //    public static ModbusTcp plcB = new ModbusTcp(1, "192.168.1.28");
 
@@ -124,15 +129,17 @@ public class MesClient extends JFrame {
             @Override
             public void run() {
                 try{
-                    //读文件配置
+                    // 读文件配置
                     readProperty();
 
+                    JdbcUtils.getConn();
+
+                    initLocalConfig();
+
                     // 显示界面
                     mesClientFrame = new MesClient();
                     mesClientFrame.setVisible(false);
 
-                    JdbcUtils.getConn();
-
                     welcomeWin = new LoginFarme();
                     welcomeWin.setVisible(true);
 
@@ -216,6 +223,33 @@ public class MesClient extends JFrame {
         System.out.println(mes_gw + ";" + mes_gw_des + ";" + mes_server_ip + ";" + mes_tcp_port + ";" + mes_heart_beat_cycle);
     }
 
+    private static void initLocalConfig() {
+        Map<String, Object> config = JdbcUtils.getConfig();
+        if (config.size() > 0) {
+            aSetNum = (Short) config.get("a_set_num");
+            bSetNum = (Short) config.get("b_set_num");
+            curIpA = (String) config.get("plc_ip_a");
+            curIpB = (String) config.get("plc_ip_b");
+            plcA = new ModbusTcp(1, curIpA);
+            plcB = new ModbusTcp(1, curIpB);
+            
+            // 初始化工作面板显示的预设数量
+            if (param1 != null) param1.setText(String.valueOf(aSetNum));
+            if (param3 != null) param3.setText(String.valueOf(bSetNum));
+            
+            System.out.println("加载本地配置成功:aSetNum=" + aSetNum + ", bSetNum=" + bSetNum + ", plcA=" + curIpA + ", plcB=" + curIpB);
+        } else {
+            // 兜底默认值
+            aSetNum = 40;
+            bSetNum = 22;
+            curIpA = "192.168.1.7";
+            curIpB = "192.168.1.8";
+            plcA = new ModbusTcp(1, curIpA);
+            plcB = new ModbusTcp(1, curIpB);
+            System.out.println("未找到本地配置,使用默认值");
+        }
+    }
+
     public static void getPlcParam() {
         if(cjTimer!=null) {
             cjTimer.cancel();
@@ -416,9 +450,9 @@ public class MesClient extends JFrame {
         MesClient.blist = new ArrayList<>();
         MesClient.sortB = 0;
         MesClient.sortA = 0;
-        MesClient.param1.setText("");
+        MesClient.param1.setText(String.valueOf(aSetNum));
         MesClient.param2.setText("");
-        MesClient.param3.setText("");
+        MesClient.param3.setText(String.valueOf(bSetNum));
         MesClient.param4.setText("");
 
         deviceControl = ModbusUtil.getControlModel(plcA);
@@ -533,6 +567,7 @@ public class MesClient extends JFrame {
         connect_request_flag = false;
     }
 
+    public static int lastSelectedIndex = 0;
     public MesClient() {
         setIconImage(Toolkit.getDefaultToolkit().getImage(MesClient.class.getResource("/bg/logo.png")));
         setTitle("MES系统客户端:"+mes_gw + "- " + mes_gw_des);
@@ -591,6 +626,26 @@ public class MesClient extends JFrame {
         });
         settingMenu.add(resetTcpMenu_1);
 
+        JMenuItem shieldMesMenu = new JMenuItem("MES屏蔽: 关");
+        shieldMesMenu.setIcon(new ImageIcon(MesClient.class.getResource("/bg/menu_setting.png")));
+        shieldMesMenu.setFont(new Font("微软雅黑", Font.PLAIN, 20));
+        shieldMesMenu.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                mes_shield_flag = !mes_shield_flag;
+                if (mes_shield_flag) {
+                    shieldMesMenu.setText("MES屏蔽: 开");
+                    shieldMesMenu.setForeground(Color.RED);
+                    JOptionPane.showMessageDialog(mesClientFrame, "MES屏蔽已开启", "提示", JOptionPane.WARNING_MESSAGE);
+                } else {
+                    shieldMesMenu.setText("MES屏蔽: 关");
+                    shieldMesMenu.setForeground(Color.BLACK);
+                    JOptionPane.showMessageDialog(mesClientFrame, "MES屏蔽已关闭", "提示", JOptionPane.INFORMATION_MESSAGE);
+                }
+            }
+        });
+        settingMenu.add(shieldMesMenu);
+
         contentPane = new JPanel();
         contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
         setContentPane(contentPane);
@@ -763,7 +818,7 @@ public class MesClient extends JFrame {
         param1 = new JTextField();
         param1.setHorizontalAlignment(SwingConstants.CENTER);
         param1.setFont(new Font("微软雅黑", Font.PLAIN, 18));
-        param1.setText("0");
+        param1.setText(String.valueOf(aSetNum));
         param1.setEditable(false);
         param1.setBounds(288, 241, 83, 34);
         indexPanelA.add(param1);
@@ -795,7 +850,7 @@ public class MesClient extends JFrame {
         indexPanelA.add(lblNewLabel_1_2);
 
         param3 = new JTextField();
-        param3.setText("0");
+        param3.setText(String.valueOf(bSetNum));
         param3.setHorizontalAlignment(SwingConstants.CENTER);
         param3.setFont(new Font("微软雅黑", Font.PLAIN, 18));
         param3.setEditable(false);
@@ -835,16 +890,124 @@ public class MesClient extends JFrame {
 
 		tabbedPane.addTab("工作记录", new ImageIcon(MesClient.class.getResource("/bg/menu_data_preprocess.png")), searchScrollPane, null);
 
+        indexPanelD = new JPanel();
+        indexPanelD.setLayout(null);
+        
+        JLabel lblASet = new JLabel("A枪预设数量:");
+        lblASet.setFont(new Font("微软雅黑", Font.PLAIN, 20));
+        lblASet.setBounds(100, 50, 150, 40);
+        indexPanelD.add(lblASet);
+        
+        JTextField txtASet = new JTextField(String.valueOf(aSetNum));
+        txtASet.setFont(new Font("微软雅黑", Font.PLAIN, 20));
+        txtASet.setBounds(260, 50, 200, 40);
+        indexPanelD.add(txtASet);
+        
+        JLabel lblBSet = new JLabel("B枪预设数量:");
+        lblBSet.setFont(new Font("微软雅黑", Font.PLAIN, 20));
+        lblBSet.setBounds(100, 110, 150, 40);
+        indexPanelD.add(lblBSet);
+        
+        JTextField txtBSet = new JTextField(String.valueOf(bSetNum));
+        txtBSet.setFont(new Font("微软雅黑", Font.PLAIN, 20));
+        txtBSet.setBounds(260, 110, 200, 40);
+        indexPanelD.add(txtBSet);
+
+        JLabel lblIpA = new JLabel("A枪IP地址:");
+        lblIpA.setFont(new Font("微软雅黑", Font.PLAIN, 20));
+        lblIpA.setBounds(100, 170, 150, 40);
+        indexPanelD.add(lblIpA);
+
+        JTextField txtIpA = new JTextField(curIpA);
+        txtIpA.setFont(new Font("微软雅黑", Font.PLAIN, 20));
+        txtIpA.setBounds(260, 170, 200, 40);
+        indexPanelD.add(txtIpA);
+
+        JLabel lblIpB = new JLabel("B枪IP地址:");
+        lblIpB.setFont(new Font("微软雅黑", Font.PLAIN, 20));
+        lblIpB.setBounds(100, 230, 150, 40);
+        indexPanelD.add(lblIpB);
+
+        JTextField txtIpB = new JTextField(curIpB);
+        txtIpB.setFont(new Font("微软雅黑", Font.PLAIN, 20));
+        txtIpB.setBounds(260, 230, 200, 40);
+        indexPanelD.add(txtIpB);
+        
+        JButton btnSave = new JButton("保存设置");
+        btnSave.setFont(new Font("微软雅黑", Font.PLAIN, 20));
+        btnSave.setBounds(180, 310, 150, 50);
+        btnSave.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                try {
+                    short newASet = Short.parseShort(txtASet.getText());
+                    short newBSet = Short.parseShort(txtBSet.getText());
+                    String newIpA = txtIpA.getText().trim();
+                    String newIpB = txtIpB.getText().trim();
+
+                    if (newIpA.isEmpty() || newIpB.isEmpty()) {
+                        JOptionPane.showMessageDialog(mesClientFrame, "IP地址不能为空", "错误", JOptionPane.ERROR_MESSAGE);
+                        return;
+                    }
+                    
+                    // 更新数据库
+                    JdbcUtils.updateConfig(newASet, newBSet, newIpA, newIpB);
+                    
+                    // 更新内存变量
+                    aSetNum = newASet;
+                    bSetNum = newBSet;
+                    
+                    // 同步更新工作面板显示的预设数量
+                    param1.setText(String.valueOf(aSetNum));
+                    param3.setText(String.valueOf(bSetNum));
+                    
+                    // 检查 IP 是否发生变化,仅在变化时重连
+                    boolean ipAChanged = !newIpA.equals(curIpA);
+                    boolean ipBChanged = !newIpB.equals(curIpB);
+
+                    if (ipAChanged) {
+                        if (plcA != null) plcA.close();
+                        curIpA = newIpA;
+                        plcA = new ModbusTcp(1, curIpA);
+                        System.out.println("A枪IP已变更,重新连接: " + curIpA);
+                    }
+
+                    if (ipBChanged) {
+                        if (plcB != null) plcB.close();
+                        curIpB = newIpB;
+                        plcB = new ModbusTcp(1, curIpB);
+                        System.out.println("B枪IP已变更,重新连接: " + curIpB);
+                    }
+                    
+                    JOptionPane.showMessageDialog(mesClientFrame, "配置已保存", "提示", JOptionPane.INFORMATION_MESSAGE);
+                } catch (NumberFormatException ex) {
+                    JOptionPane.showMessageDialog(mesClientFrame, "请输入有效的数字", "错误", JOptionPane.ERROR_MESSAGE);
+                }
+            }
+        });
+        indexPanelD.add(btnSave);
+
+        tabbedPane.addTab("设备管理", new ImageIcon(MesClient.class.getResource("/bg/menu_setting.png")), indexPanelD, null);
 
 		tabbedPane.addChangeListener(new ChangeListener() {
             @Override
             public void stateChanged(ChangeEvent e) {
                 JTabbedPane tabbedPane = (JTabbedPane) e.getSource();
                 int selectedIndex = tabbedPane.getSelectedIndex();
-                System.out.println("selectedIndex:"+selectedIndex);
-
-                if(selectedIndex == 1){
 
+                if (selectedIndex == 3) { // 设备管理
+                    String input = JOptionPane.showInputDialog(mesClientFrame, "请输入管理员密码以进入设备管理:", "权限验证", JOptionPane.QUESTION_MESSAGE);
+                    if (input != null && input.equalsIgnoreCase("mes")) {
+                        lastSelectedIndex = selectedIndex;
+                    } else {
+                        if (input != null) {
+                            JOptionPane.showMessageDialog(mesClientFrame, "密码错误,请重试", "错误", JOptionPane.ERROR_MESSAGE);
+                        }
+                        // 跳回上一个页面
+                        tabbedPane.setSelectedIndex(lastSelectedIndex);
+                    }
+                } else {
+                    lastSelectedIndex = selectedIndex;
                 }
             }
         });

+ 6 - 3
src/com/mes/ui/ModbusUtil.java

@@ -29,6 +29,7 @@ public class ModbusUtil {
             MesClient.aMax = plc.readInt16(1128); // 任务数量
             MesClient.param1.setText(String.valueOf(MesClient.aMax));
         }
+        MesClient.param2.setText(cur + "");
 
         if(MesClient.sortA == cur - 1){
             MesClient.sortA = cur;
@@ -42,7 +43,6 @@ public class ModbusUtil {
             String fmax = plc.readInt16(1069)+"";
             String smax = (float)plc.readInt16(1071)/1000+"";
 
-            MesClient.param2.setText(cur+"");
             System.out.println("cur:"+cur);
 
             if(MesClient.sortA == 4){
@@ -80,6 +80,7 @@ public class ModbusUtil {
             MesClient.bMax = plc.readInt16(1128);
             MesClient.param3.setText(String.valueOf(MesClient.bMax));
         }
+        MesClient.param4.setText(cur + "");
 
         if(MesClient.sortB == cur - 1){
             MesClient.sortB = cur;
@@ -100,8 +101,6 @@ public class ModbusUtil {
             }
 
 
-            MesClient.param4.setText(cur+"");
-
             System.out.println("cur:"+cur);
             if(!MesClient.product_sn.getText().isEmpty()){
                JdbcUtils.insertProdData(MesClient.mes_gw, MesClient.mes_line_sn, MesClient.product_sn.getText(),"B",fout,sout,fmin,smin,fmax,smax,"1",cur+"", MesClient.user_menu.getText());
@@ -197,6 +196,10 @@ public class ModbusUtil {
 
     // 远程关机
     public static Boolean setPowerOff(ModbusTcp plc){
+        if (MesClient.mes_shield_flag) {
+            System.out.println("MES屏蔽已开启,跳过关机指令");
+            return true;
+        }
         Boolean ret = false;
         try{
             plc.writeCoil(3128,false);

+ 9 - 20
src/com/mes/ui/OprnoUtil.java

@@ -6,28 +6,17 @@ import java.util.Map;
 
 public class OprnoUtil {
     public static String[] xtoprnos = new String[]{
-            "OP070","OP080", "OP100",
-            "OP110", "OP120", "OP130", "OP140", "OP150",
-            "OP160", "OP170", "OP180", "OP190", "OP200",
-            "OP210", "OP220", "OP230", "OP240", "OP250",
-            "OP260", "OP270", "OP280", "OP290", "OP300",
-            "OP310", "OP320", "OP330", "OP340", "OP350",
-            "OP360", "OP370", "OP380", "OP390", "OP400",
-            "OP410", "OP420", "OP430", "OP440", "OP450",
-            "OP460", "OP470", "OP480", "OP490", "OP500",
-            "OP510", "OP520", "OP550"
+            "OP010", "OP030", "OP050", "OP060", "OP070",
+            "OP080", "OP090", "OP100", "OP110", "OP120",
+            "OP130", "OP140", "OP150", "OP160", "OP190",
+            "OP210", "OP220"
     };
+
     public static String[] xtoprnodes = new String[]{
-            "右边梁镭雕二维码","左右边梁防爆阀拉铆","CMT框架一序焊接",
-            "人工补焊", "框架CMT二序焊接", "人工补焊", "焊道检查", "总成正面CNC",
-            "总成反面CNC", "框架去毛刺+清洁", "封堵片焊接+打磨", "边框气密", "焊道补焊",
-            "框架反面涂胶", "液冷板安装", "正面溢胶清理,补胶", "液冷板激光点固", "液冷板水嘴处焊接",
-            "焊道打磨", "液冷板FSW", "匙孔补焊打磨", "总成反面拉铆", "总成正面拉铆1",
-            "总成正面拉铆2", "边梁套筒涂胶+压合", "箱体封堵", "胶水固化", "半成品气密",
-            "补强板安装", "胶水固化", "拆卸补强板压紧工装", "FSW焊道涂胶+双层拉铆螺母涂胶", "人工抹胶",
-            "胶水固化", "反面部件装配", "底护板装配+底部套筒螺母安装", "底护板螺栓复拧", "总成气密",
-            "液冷板气密", "总成正面装配", "总成清洁", "总成检具检验", "模拟客户安装界面(装)",
-            "CCD", "GP12", "称重"
+            "镭雕", "凸焊", "左右吊耳组件弧焊", "左右吊耳组件点焊", "电池壳分总成1点焊",
+            "电池壳分总成1点焊补焊", "电池壳分总成2点焊", "电池壳分总成2点焊补焊", "电池壳分总成3点焊", "电池壳分总成4点焊",
+            "电池壳分总成5点焊补焊", "电池壳分总成6弧焊", "电池壳分总成7弧焊", "电池壳分总成8弧焊", "气密检测",
+            "拉铆", "总成气密检测"
     };
     public static String[] lboprnos = new String[]{
             "OP040","OP050","OP060","OP070","OP080","OP090","OP100","OP110",

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

@@ -18,6 +18,7 @@ public class JdbcUtils {
             System.out.println("连接到SQLite数据库成功!");
             create_bw_record();//初始化结构表
             create_bw_prod();
+            create_config_table();
         } catch (Exception e) {
             // TODO Auto-generated catch block
         	close();//关闭数据库连接
@@ -75,6 +76,60 @@ public class JdbcUtils {
 		statement.close();
 	}
     
+	public static void create_config_table() throws SQLException {
+		Statement statement = conn.createStatement();
+		String sql = "CREATE TABLE if not exists bw_config("
+				+ "id INTEGER PRIMARY KEY AUTOINCREMENT, "
+				+ "a_set_num SHORT, "
+				+ "b_set_num SHORT, "
+				+ "plc_ip_a VARCHAR(20), "
+				+ "plc_ip_b VARCHAR(20))";
+		statement.executeUpdate(sql);
+		
+		// 检查是否已有数据,若无则插入默认值
+		ResultSet rs = statement.executeQuery("SELECT count(*) FROM bw_config");
+		if (rs.next() && rs.getInt(1) == 0) {
+			statement.executeUpdate("INSERT INTO bw_config (a_set_num, b_set_num, plc_ip_a, plc_ip_b) "
+					+ "VALUES (40, 22, '192.168.1.7', '192.168.1.8')");
+		}
+		rs.close();
+		System.out.println("表config创建并初始化成功!");
+		statement.close();
+	}
+
+	public static java.util.Map<String, Object> getConfig() {
+		java.util.Map<String, Object> config = new java.util.HashMap<>();
+		String sql = "SELECT a_set_num, b_set_num, plc_ip_a, plc_ip_b FROM bw_config LIMIT 1";
+		Connection conn = JdbcUtils.getConn();
+		try (Statement stmt = conn.createStatement();
+			 ResultSet rs = stmt.executeQuery(sql)) {
+			if (rs.next()) {
+				config.put("a_set_num", rs.getShort("a_set_num"));
+				config.put("b_set_num", rs.getShort("b_set_num"));
+				config.put("plc_ip_a", rs.getString("plc_ip_a"));
+				config.put("plc_ip_b", rs.getString("plc_ip_b"));
+			}
+		} catch (SQLException e) {
+			e.printStackTrace();
+		}
+		return config;
+	}
+
+	public static void updateConfig(short aSetNum, short bSetNum, String plcIpA, String plcIpB) {
+		String sql = "UPDATE bw_config SET a_set_num = ?, b_set_num = ?, plc_ip_a = ?, plc_ip_b = ? WHERE id = 1";
+		Connection conn = JdbcUtils.getConn();
+		try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
+			pstmt.setShort(1, aSetNum);
+			pstmt.setShort(2, bSetNum);
+			pstmt.setString(3, plcIpA);
+			pstmt.setString(4, plcIpB);
+			pstmt.executeUpdate();
+			System.out.println("更新本地配置成功:aSetNum=" + aSetNum + ", bSetNum=" + bSetNum + ", IP_A=" + plcIpA + ", IP_B=" + plcIpB);
+		} catch (SQLException e) {
+			e.printStackTrace();
+		}
+	}
+
     public static void close(){
     	System.out.println("SQLite数据库连接关闭!");
         try {

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

@@ -1,6 +1,6 @@
-mes.gw=OP290A
-mes.server_ip=127.0.0.1
-#mes.server_ip=192.168.21.99
+mes.gw=OP210
+#mes.server_ip=127.0.0.1
+mes.server_ip=192.168.9.180
 mes.tcp_port=3000
 mes.heart_beat_cycle=60
 mes.line_sn=XT