ReadDeviceDataStep.java 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package com.mes.step;
  2. import com.mes.core.StationConfig;
  3. import com.mes.core.StationContext;
  4. import com.mes.device.IDeviceDriver;
  5. /**
  6. * 读取设备数据步骤
  7. * 在流程开始时读取设备数据并显示,不阻塞流程
  8. */
  9. public class ReadDeviceDataStep extends AbstractStep {
  10. public ReadDeviceDataStep() {
  11. super("read_device_data", "读取设备数据");
  12. this.async = false;
  13. this.requiresUserInteraction = false;
  14. }
  15. @Override
  16. public boolean execute(StationContext context) {
  17. // 检查设备是否启用
  18. if (!context.isDeviceEnabled()) {
  19. log.debug("[{}] 设备未启用,跳过读取", context.getStationCode());
  20. return true;
  21. }
  22. IDeviceDriver driver = context.getDeviceDriver();
  23. if (driver == null || !driver.isConnected()) {
  24. log.warn("[{}] 设备未连接,无法读取数据", context.getStationCode());
  25. return true; // 不阻塞流程
  26. }
  27. try {
  28. StationConfig config = StationConfig.getInstance();
  29. // 读取第一行设备数据
  30. StationConfig.DeviceInfoRow row1 = config.getDeviceInfoRow(0);
  31. if (row1 != null) {
  32. int presetCount = driver.readRegister(row1.getPresetAddress());
  33. int finishedCount = driver.readRegister(row1.getFinishedAddress());
  34. context.setPresetCount(presetCount);
  35. context.setFinishedCount(finishedCount);
  36. log.debug("[{}] 读取第一行设备数据: 预设={}, 完成={}",
  37. context.getStationCode(), presetCount, finishedCount);
  38. }
  39. // 读取第二行设备数据(如果配置了)
  40. StationConfig.DeviceInfoRow row2 = config.getDeviceInfoRow(1);
  41. if (row2 != null) {
  42. IDeviceDriver driver2 = context.getDeviceDriver2();
  43. if (driver2 != null && driver2.isConnected()) {
  44. int presetCount2 = driver2.readRegister(row2.getPresetAddress());
  45. int finishedCount2 = driver2.readRegister(row2.getFinishedAddress());
  46. context.setPresetCount2(presetCount2);
  47. context.setFinishedCount2(finishedCount2);
  48. context.setDeviceConnected2(true);
  49. log.debug("[{}] 读取第二行设备数据: 预设={}, 完成={}",
  50. context.getStationCode(), presetCount2, finishedCount2);
  51. } else {
  52. // 第二个设备未连接
  53. context.setPresetCount2(-1);
  54. context.setFinishedCount2(-1);
  55. context.setDeviceConnected2(false);
  56. log.debug("[{}] 第二行设备未连接", context.getStationCode());
  57. }
  58. }
  59. // 更新UI显示
  60. context.updateUI();
  61. } catch (Exception e) {
  62. log.error("[{}] 读取设备数据失败: {}", context.getStationCode(), e.getMessage());
  63. // 不阻塞流程
  64. }
  65. return true;
  66. }
  67. @Override
  68. public boolean canExecute(StationContext context) {
  69. // 总是可以执行
  70. return true;
  71. }
  72. @Override
  73. public boolean canSkip(StationContext context) {
  74. // 设备未启用时可以跳过
  75. return !context.isDeviceEnabled();
  76. }
  77. }