| | |
| | | import com.mes.device.vo.DevicePlcVO; |
| | | import com.mes.interaction.workstation.base.WorkstationBaseHandler; |
| | | import com.mes.interaction.workstation.config.WorkstationLogicConfig; |
| | | import com.mes.s7.enhanced.EnhancedS7Serializer; |
| | | import com.mes.s7.provider.S7SerializerProvider; |
| | | import com.mes.service.PlcDynamicDataService; |
| | | import com.mes.plc.client.PlcClient; |
| | | import com.mes.plc.factory.PlcClientFactory; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Qualifier; |
| | |
| | | @Component |
| | | public class HorizontalTransferLogicHandler extends WorkstationBaseHandler { |
| | | |
| | | private final PlcDynamicDataService plcDynamicDataService; |
| | | private final GlassInfoService glassInfoService; |
| | | private final S7SerializerProvider s7SerializerProvider; |
| | | private final PlcClientFactory plcClientFactory; |
| | | |
| | | @Autowired(required = false) |
| | | private DeviceGlassInfoMapper glassInfoMapper; |
| | |
| | | |
| | | @Autowired |
| | | public HorizontalTransferLogicHandler(DevicePlcOperationService devicePlcOperationService, |
| | | PlcDynamicDataService plcDynamicDataService, |
| | | @Qualifier("deviceGlassInfoService") GlassInfoService glassInfoService, |
| | | S7SerializerProvider s7SerializerProvider) { |
| | | PlcClientFactory plcClientFactory) { |
| | | super(devicePlcOperationService); |
| | | this.plcDynamicDataService = plcDynamicDataService; |
| | | this.glassInfoService = glassInfoService; |
| | | this.s7SerializerProvider = s7SerializerProvider; |
| | | this.plcClientFactory = plcClientFactory; |
| | | // 设置 PlcClientFactory 到基类 |
| | | this.setPlcClientFactory(plcClientFactory); |
| | | } |
| | | |
| | | @Override |
| | |
| | | Map<String, Object> params) { |
| | | |
| | | String deviceId = deviceConfig.getDeviceId(); |
| | | EnhancedS7Serializer serializer = s7SerializerProvider.getSerializer(deviceConfig); |
| | | if (serializer == null) { |
| | | PlcClient plcClient = getPlcClient(deviceConfig); |
| | | if (plcClient == null) { |
| | | return buildResult(deviceConfig, "checkAndProcess", false, |
| | | "获取PLC序列化器失败"); |
| | | "获取PLC客户端失败"); |
| | | } |
| | | |
| | | try { |
| | |
| | | |
| | | // 6. 写入PLC(尝试从任务参数中获取卧转立编号) |
| | | DevicePlcVO.OperationResult writeResult = writeBatchToPlc( |
| | | deviceConfig, batch, serializer, logicParams, params); |
| | | deviceConfig, batch, plcClient, logicParams, params); |
| | | |
| | | if (!Boolean.TRUE.equals(writeResult.getSuccess())) { |
| | | return writeResult; |
| | |
| | | private DevicePlcVO.OperationResult writeBatchToPlc( |
| | | DeviceConfig deviceConfig, |
| | | List<GlassInfo> batch, |
| | | EnhancedS7Serializer serializer, |
| | | PlcClient plcClient, |
| | | Map<String, Object> logicParams, |
| | | Map<String, Object> params) { |
| | | |
| | |
| | | payload.put("plcRequest", 1); |
| | | |
| | | try { |
| | | plcDynamicDataService.writePlcData(deviceConfig, payload, serializer); |
| | | plcClient.writeData(payload); |
| | | log.info("批次已写入PLC: deviceId={}, glassCount={}, inPosition={}", |
| | | deviceConfig.getId(), count, inPosition); |
| | | return buildResult(deviceConfig, "writeBatchToPlc", true, |
| | |
| | | */ |
| | | private DevicePlcVO.OperationResult handleClearPlc(DeviceConfig deviceConfig) { |
| | | try { |
| | | EnhancedS7Serializer serializer = s7SerializerProvider.getSerializer(deviceConfig); |
| | | if (serializer == null) { |
| | | return buildResult(deviceConfig, "clearPlc", false, "获取PLC序列化器失败"); |
| | | PlcClient plcClient = getPlcClient(deviceConfig); |
| | | if (plcClient == null) { |
| | | return buildResult(deviceConfig, "clearPlc", false, "获取PLC客户端失败"); |
| | | } |
| | | |
| | | Map<String, Object> payload = new HashMap<>(); |
| | |
| | | payload.put("plcRequest", 0); |
| | | payload.put("inPosition", 0); |
| | | |
| | | plcDynamicDataService.writePlcData(deviceConfig, payload, serializer); |
| | | plcClient.writeData(payload); |
| | | log.info("卧转立主体清空PLC字段完成: deviceId={}", deviceConfig.getId()); |
| | | return buildResult(deviceConfig, "clearPlc", true, "已清空卧转立主体PLC字段"); |
| | | } catch (Exception e) { |