Procházet zdrojové kódy

设备启用开关

wangxichen před 2 týdny
rodič
revize
81b913582d

+ 17 - 0
src/com/mes/core/ProjectConfigManager.java

@@ -93,6 +93,8 @@ public class ProjectConfigManager {
     private String lineSnOverride;        // 覆盖 yaml 的 line_sn
     private String serverIpOverride;      // 覆盖 yaml 的 server.ip
     private final Map<String, Boolean> featuresOverride = new LinkedHashMap<>();
+    // 设备连接覆盖(null=不覆盖,走yaml默认)
+    private Boolean deviceEnabledOverride;
     // 设备信息行覆盖:是否启用 + label(寄存器地址不在UI改)
     private Boolean deviceRow1EnabledOverride;
     private String  deviceRow1LabelOverride;
@@ -150,6 +152,10 @@ public class ProjectConfigManager {
             if (sIp != null && !sIp.trim().isEmpty()) {
                 serverIpOverride = sIp.trim();
             }
+            // 设备连接覆盖
+            if (json.containsKey("deviceEnabledOverride")) {
+                deviceEnabledOverride = json.getBoolean("deviceEnabledOverride");
+            }
             // 设备信息行
             JSONObject uiObj = json.getJSONObject("uiOverride");
             if (uiObj != null) {
@@ -177,6 +183,7 @@ public class ProjectConfigManager {
             if (stationCodeOverride != null) root.put("stationCodeOverride", stationCodeOverride);
             if (lineSnOverride != null) root.put("lineSnOverride", lineSnOverride);
             if (serverIpOverride != null) root.put("serverIpOverride", serverIpOverride);
+            if (deviceEnabledOverride != null) root.put("deviceEnabledOverride", deviceEnabledOverride);
             JSONObject uiObj = new JSONObject();
             if (deviceRow1EnabledOverride != null) uiObj.put("deviceRow1Enabled", deviceRow1EnabledOverride);
             if (deviceRow1LabelOverride != null)   uiObj.put("deviceRow1Label", deviceRow1LabelOverride);
@@ -335,6 +342,16 @@ public class ProjectConfigManager {
     }
 
     public Boolean getDeviceRow1EnabledOverride() { return deviceRow1EnabledOverride; }
+
+    // ========== 设备连接覆盖 ==========
+
+    public Boolean getDeviceEnabledOverride() { return deviceEnabledOverride; }
+
+    public void setDeviceEnabledOverride(Boolean enabled) {
+        this.deviceEnabledOverride = enabled;
+        save();
+        log.info("[ProjectConfig] 设备连接覆盖: {}", enabled);
+    }
     public String  getDeviceRow1LabelOverride()   { return deviceRow1LabelOverride; }
     public Boolean getDeviceRow2EnabledOverride() { return deviceRow2EnabledOverride; }
     public String  getDeviceRow2LabelOverride()   { return deviceRow2LabelOverride; }

+ 3 - 0
src/com/mes/core/StationConfig.java

@@ -577,6 +577,9 @@ public class StationConfig {
     }
 
     public boolean isDeviceEnabled() {
+        // 优先使用运行时覆盖
+        Boolean override = ProjectConfigManager.getInstance().getDeviceEnabledOverride();
+        if (override != null) return override;
         return deviceEnabled;
     }
 

+ 22 - 0
src/com/mes/ui/MainFrame.java

@@ -1767,6 +1767,25 @@ public class MainFrame extends JFrame {
         hint.setAlignmentX(Component.LEFT_ALIGNMENT);
         panel.add(hint);
 
+        // 设备连接开关
+        panel.add(Box.createVerticalStrut(10));
+        JSeparator sep = new JSeparator();
+        sep.setMaximumSize(new java.awt.Dimension(Integer.MAX_VALUE, 1));
+        sep.setAlignmentX(Component.LEFT_ALIGNMENT);
+        panel.add(sep);
+        panel.add(Box.createVerticalStrut(6));
+
+        Boolean deviceOverride = pc.getDeviceEnabledOverride();
+        boolean deviceCurrently = config.isDeviceEnabled();
+        JCheckBox deviceEnabledCb = new JCheckBox("设备连接(PLC/Modbus)", deviceCurrently);
+        deviceEnabledCb.setFont(new Font("微软雅黑", Font.PLAIN, 18));
+        deviceEnabledCb.setAlignmentX(Component.LEFT_ALIGNMENT);
+        panel.add(deviceEnabledCb);
+        panel.add(Box.createVerticalStrut(4));
+        JLabel deviceHint = new JLabel("<html><font color='gray' size='3'>禁用后不连接PLC,上传结果不需要等待设备信号</font></html>");
+        deviceHint.setAlignmentX(Component.LEFT_ALIGNMENT);
+        panel.add(deviceHint);
+
         int result = JOptionPane.showConfirmDialog(this, panel,
                 "工艺流程配置", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
         if (result != JOptionPane.OK_OPTION) return;
@@ -1783,6 +1802,9 @@ public class MainFrame extends JFrame {
         }
         pc.setFeaturesOverride(override);
 
+        // 保存设备连接覆盖
+        pc.setDeviceEnabledOverride(deviceEnabledCb.isSelected());
+
         // 物料码输入框联动:勾了冷板或底护板 → 显示;都没勾 → 隐藏
         boolean coldOn = Boolean.TRUE.equals(override.get("cold_plate"));
         boolean bottomOn = Boolean.TRUE.equals(override.get("bottom_plate"));