| | |
| | | |
| | | import com.github.xingshuangs.iot.protocol.s7.enums.EPlcType; |
| | | import com.github.xingshuangs.iot.protocol.s7.service.S7PLC; |
| | | import com.mes.config.PlcAddressMappingConfig; |
| | | import com.mes.entity.PlcBaseData; |
| | | import com.mes.entity.PlcAddress; |
| | | import com.mes.s7.enhanced.EnhancedS7Serializer; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.stereotype.Service; |
| | |
| | | * PLC测试写入服务 |
| | | * 模拟PLC行为,向PLC写入测试数据,用于测试MES程序 |
| | | * |
| | | * @author zhoush |
| | | * @author huang |
| | | * @date 2025/10/29 |
| | | */ |
| | | @Slf4j |
| | |
| | | public class PlcTestWriteService { |
| | | |
| | | @Resource |
| | | private PlcAddressMappingService plcAddressMappingService; |
| | | private PlcAddressService plcAddressService; |
| | | |
| | | private static final int ON = 1; |
| | | private static final int OFF = 0; |
| | | |
| | | // 当前使用的项目标识 |
| | | private String currentProjectId = "shuttle"; |
| | | private String currentProjectId = "vertical"; |
| | | |
| | | // 缓存不同项目的S7Serializer实例 |
| | | private final ConcurrentMap<String, EnhancedS7Serializer> serializerCache = new ConcurrentHashMap<>(); |
| | |
| | | */ |
| | | public boolean simulatePlcRequest(String projectId) { |
| | | try { |
| | | // 获取项目配置 |
| | | PlcAddressMappingConfig.ProjectPlcConfig config = plcAddressMappingService.getProjectConfig(projectId); |
| | | // 获取项目配置(数据库实体) |
| | | PlcAddress config = plcAddressService.getProjectConfigWithMapping(projectId); |
| | | |
| | | // 获取对应的S7Serializer |
| | | EnhancedS7Serializer s7Serializer = getSerializerForProject(projectId, config); |
| | |
| | | */ |
| | | public boolean simulatePlcReport(String projectId) { |
| | | try { |
| | | // 获取项目配置 |
| | | PlcAddressMappingConfig.ProjectPlcConfig config = plcAddressMappingService.getProjectConfig(projectId); |
| | | // 获取项目配置(数据库实体) |
| | | PlcAddress config = plcAddressService.getProjectConfigWithMapping(projectId); |
| | | |
| | | // 获取对应的S7Serializer |
| | | EnhancedS7Serializer s7Serializer = getSerializerForProject(projectId, config); |
| | |
| | | */ |
| | | public boolean simulateOnlineStatus(int onlineState, String projectId) { |
| | | try { |
| | | // 获取项目配置 |
| | | PlcAddressMappingConfig.ProjectPlcConfig config = plcAddressMappingService.getProjectConfig(projectId); |
| | | // 获取项目配置(数据库实体) |
| | | PlcAddress config = plcAddressService.getProjectConfigWithMapping(projectId); |
| | | |
| | | // 获取对应的S7Serializer |
| | | EnhancedS7Serializer s7Serializer = getSerializerForProject(projectId, config); |
| | |
| | | */ |
| | | public boolean resetPlc(String projectId) { |
| | | try { |
| | | // 获取项目配置 |
| | | PlcAddressMappingConfig.ProjectPlcConfig config = plcAddressMappingService.getProjectConfig(projectId); |
| | | // 获取项目配置(数据库实体) |
| | | PlcAddress config = plcAddressService.getProjectConfigWithMapping(projectId); |
| | | |
| | | // 获取对应的S7Serializer |
| | | EnhancedS7Serializer s7Serializer = getSerializerForProject(projectId, config); |
| | |
| | | */ |
| | | public PlcBaseData readPlcStatus(String projectId) { |
| | | try { |
| | | // 获取项目配置 |
| | | PlcAddressMappingConfig.ProjectPlcConfig config = plcAddressMappingService.getProjectConfig(projectId); |
| | | // 获取项目配置(数据库实体) |
| | | PlcAddress config = plcAddressService.getProjectConfigWithMapping(projectId); |
| | | |
| | | // 获取对应的S7Serializer |
| | | EnhancedS7Serializer s7Serializer = getSerializerForProject(projectId, config); |
| | |
| | | * @param config 项目配置 |
| | | * @return S7Serializer实例 |
| | | */ |
| | | private EnhancedS7Serializer getSerializerForProject(String projectId, PlcAddressMappingConfig.ProjectPlcConfig config) { |
| | | private EnhancedS7Serializer getSerializerForProject(String projectId, PlcAddress config) { |
| | | return serializerCache.computeIfAbsent(projectId, id -> { |
| | | // 解析PLC类型 |
| | | EPlcType plcType = EPlcType.S1200; // 默认值 |
| | | if (config.getPlcType() != null) { |
| | | if (config != null && config.getPlcType() != null) { |
| | | try { |
| | | plcType = EPlcType.valueOf(config.getPlcType()); |
| | | } catch (IllegalArgumentException e) { |
| | |
| | | } |
| | | |
| | | // 创建S7PLC实例 |
| | | String plcIp = config.getPlcIp() != null ? config.getPlcIp() : "192.168.10.21"; |
| | | String plcIp = (config != null && config.getPlcIp() != null) ? config.getPlcIp() : "192.168.10.21"; |
| | | S7PLC s7Plc = new S7PLC(plcType, plcIp); |
| | | |
| | | // 创建并返回EnhancedS7Serializer实例 |