|
|
@@ -32,20 +32,22 @@ public class SmeltingScheduling {
|
|
|
private static final Logger logger = LoggerFactory.getLogger(SmeltingScheduling.class);
|
|
|
|
|
|
/** 默认 PLC IP */
|
|
|
- private static final String DEFAULT_PLC_IP = "192.168.1.7";
|
|
|
+ private static final String DEFAULT_PLC_IP = "10.0.20.103";
|
|
|
+ private static final String DEFAULT_PLC_IP2 = "10.0.20.100";
|
|
|
|
|
|
/** 该 PLC 对应的设备编号(用于联动设备报警状态) */
|
|
|
- private static final String DEVICE_SN = "RL_OP030_01";
|
|
|
+ private static final String DEVICE_SN = "RL_OP030_01";
|
|
|
+ private static final String DEVICE_SN2 = "RL_OP030_02";
|
|
|
|
|
|
/** 设备报警状态:0=待处理,1=已处理 */
|
|
|
private static final String STATE_PENDING = "0";
|
|
|
private static final String STATE_HANDLED = "1";
|
|
|
|
|
|
/** 采集点位地址 */
|
|
|
- private static final String ADDR_MOLTEN_ALUMINUM = "DB1.450.0"; // 铝液温度
|
|
|
- private static final String ADDR_ATMOSPHERE = "DB1.452.0"; // 气氛温度
|
|
|
- private static final String ADDR_EXHAUST_GAS = "DB1.454.0"; // 排气温度
|
|
|
- private static final String ADDR_MELTING = "DB1.456.0"; // 熔化温度
|
|
|
+ private static final String ADDR_MOLTEN_ALUMINUM = "DB17.0"; // 铝液温度
|
|
|
+ private static final String ADDR_ATMOSPHERE = "DB17.4"; // 气氛温度
|
|
|
+ private static final String ADDR_EXHAUST_GAS = "DB17.8"; // 排气温度
|
|
|
+ private static final String ADDR_MELTING = "DB17.12"; // 熔化温度
|
|
|
|
|
|
@Autowired
|
|
|
private MesSmeltingService mesSmeltingService;
|
|
|
@@ -56,7 +58,7 @@ public class SmeltingScheduling {
|
|
|
/**
|
|
|
* 每 30 秒采集一次
|
|
|
*/
|
|
|
- @Scheduled(fixedRate = 60000)
|
|
|
+ @Scheduled(fixedRate = 3000)
|
|
|
public void collect() {
|
|
|
// 采集开关:未配置则默认启用
|
|
|
String enabled = Global.getConfig("mes.smelting.enabled");
|
|
|
@@ -71,9 +73,7 @@ public class SmeltingScheduling {
|
|
|
|
|
|
S7PLC s7PLC = null;
|
|
|
try {
|
|
|
- s7PLC = new S7PLC(EPlcType.SINUMERIK_828D, ip);
|
|
|
- // 建立连接 / 检查状态
|
|
|
- s7PLC.readStatus();
|
|
|
+ s7PLC = new S7PLC(EPlcType.S1200, ip);
|
|
|
|
|
|
Short moltenAluminum = s7PLC.readInt16(ADDR_MOLTEN_ALUMINUM);
|
|
|
Short atmosphere = s7PLC.readInt16(ADDR_ATMOSPHERE);
|
|
|
@@ -85,6 +85,7 @@ public class SmeltingScheduling {
|
|
|
mesSmelting.setAtmosphereTemperature(toStr(atmosphere));
|
|
|
mesSmelting.setExhaustGasTemperature(toStr(exhaustGas));
|
|
|
mesSmelting.setMeltingTemperature(toStr(melting));
|
|
|
+ mesSmelting.setHeatNumber("一号炉");
|
|
|
|
|
|
mesSmeltingService.save(mesSmelting);
|
|
|
|
|
|
@@ -108,6 +109,62 @@ public class SmeltingScheduling {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 每 30 秒采集一次 一号机
|
|
|
+ */
|
|
|
+ @Scheduled(fixedRate = 3000)
|
|
|
+ public void collect2() {
|
|
|
+ // 采集开关:未配置则默认启用
|
|
|
+ String enabled = Global.getConfig("mes.smelting2.enabled");
|
|
|
+ if (StringUtils.isNotBlank(enabled) && !"true".equalsIgnoreCase(enabled.trim())) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ String ip = Global.getConfig("mes.smelting2.plc.ip");
|
|
|
+ if (StringUtils.isBlank(ip)) {
|
|
|
+ ip = DEFAULT_PLC_IP2;
|
|
|
+ }
|
|
|
+
|
|
|
+ S7PLC s7PLC = null;
|
|
|
+ try {
|
|
|
+ s7PLC = new S7PLC(EPlcType.S1200, ip);
|
|
|
+
|
|
|
+ Short moltenAluminum = s7PLC.readInt16(ADDR_MOLTEN_ALUMINUM);
|
|
|
+ Short atmosphere = s7PLC.readInt16(ADDR_ATMOSPHERE);
|
|
|
+ Short exhaustGas = s7PLC.readInt16(ADDR_EXHAUST_GAS);
|
|
|
+ Short melting = s7PLC.readInt16(ADDR_MELTING);
|
|
|
+
|
|
|
+ MesSmelting mesSmelting = new MesSmelting();
|
|
|
+ mesSmelting.setMoltenAluminumTemperature(toStr(moltenAluminum));
|
|
|
+ mesSmelting.setAtmosphereTemperature(toStr(atmosphere));
|
|
|
+ mesSmelting.setExhaustGasTemperature(toStr(exhaustGas));
|
|
|
+ mesSmelting.setMeltingTemperature(toStr(melting));
|
|
|
+ mesSmelting.setHeatNumber("二号炉");
|
|
|
+
|
|
|
+ mesSmeltingService.save(mesSmelting);
|
|
|
+
|
|
|
+ // 连接成功:设备状态置为已处理
|
|
|
+ updateDeviceState2(STATE_HANDLED);
|
|
|
+
|
|
|
+ logger.info("熔炼数据采集成功[{}] 铝液温度:{} 气氛温度:{} 排气温度:{} 熔化温度:{}",
|
|
|
+ ip, moltenAluminum, atmosphere, exhaustGas, melting);
|
|
|
+ } catch (Exception e) {
|
|
|
+ // 连接/读取失败:设备状态置为待处理
|
|
|
+ updateDeviceState2(STATE_PENDING);
|
|
|
+ logger.error("熔炼数据采集失败[{}]:{}", ip, e.getMessage());
|
|
|
+ } finally {
|
|
|
+ if (s7PLC != null) {
|
|
|
+ try {
|
|
|
+ s7PLC.close();
|
|
|
+ } catch (Exception e) {
|
|
|
+ logger.warn("关闭 S7PLC 连接异常:{}", e.getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 更新设备 RL_OP030_01 的报警状态,异常不向上抛出,避免影响采集主流程
|
|
|
*/
|
|
|
@@ -118,6 +175,13 @@ public class SmeltingScheduling {
|
|
|
logger.warn("更新设备[{}]状态为[{}]失败:{}", DEVICE_SN, state, e.getMessage());
|
|
|
}
|
|
|
}
|
|
|
+ private void updateDeviceState2(String state) {
|
|
|
+ try {
|
|
|
+ mesDeviceAlarmService.updateStateByDeviceSn(DEVICE_SN2, state);
|
|
|
+ } catch (Exception e) {
|
|
|
+ logger.warn("更新设备[{}]状态为[{}]失败:{}", DEVICE_SN2, state, e.getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
private String toStr(Short val) {
|
|
|
return val == null ? null : String.valueOf(val);
|