huang
2025-11-17 e76f0739e647fe8a7e0e2618914e2faff554b1b7
mes-processes/mes-plcSend/src/main/java/com/mes/service/PlcTestWriteService.java
@@ -2,8 +2,8 @@
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;
@@ -16,7 +16,7 @@
 * PLC测试写入服务
 * 模拟PLC行为,向PLC写入测试数据,用于测试MES程序
 * 
 * @author zhoush
 * @author huang
 * @date 2025/10/29
 */
@Slf4j
@@ -24,13 +24,13 @@
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<>();
@@ -47,8 +47,8 @@
     */
    public boolean simulatePlcRequest(String projectId) {
        try {
            // 获取项目配置
            PlcAddressMappingConfig.ProjectPlcConfig config = plcAddressMappingService.getProjectConfig(projectId);
            // 获取项目配置(数据库实体)
            PlcAddress config = plcAddressService.getProjectConfigWithMapping(projectId);
            
            // 获取对应的S7Serializer
            EnhancedS7Serializer s7Serializer = getSerializerForProject(projectId, config);
@@ -88,8 +88,8 @@
     */
    public boolean simulatePlcReport(String projectId) {
        try {
            // 获取项目配置
            PlcAddressMappingConfig.ProjectPlcConfig config = plcAddressMappingService.getProjectConfig(projectId);
            // 获取项目配置(数据库实体)
            PlcAddress config = plcAddressService.getProjectConfigWithMapping(projectId);
            
            // 获取对应的S7Serializer
            EnhancedS7Serializer s7Serializer = getSerializerForProject(projectId, config);
@@ -127,8 +127,8 @@
     */
    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);
@@ -161,8 +161,8 @@
     */
    public boolean resetPlc(String projectId) {
        try {
            // 获取项目配置
            PlcAddressMappingConfig.ProjectPlcConfig config = plcAddressMappingService.getProjectConfig(projectId);
            // 获取项目配置(数据库实体)
            PlcAddress config = plcAddressService.getProjectConfigWithMapping(projectId);
            
            // 获取对应的S7Serializer
            EnhancedS7Serializer s7Serializer = getSerializerForProject(projectId, config);
@@ -203,8 +203,8 @@
     */
    public PlcBaseData readPlcStatus(String projectId) {
        try {
            // 获取项目配置
            PlcAddressMappingConfig.ProjectPlcConfig config = plcAddressMappingService.getProjectConfig(projectId);
            // 获取项目配置(数据库实体)
            PlcAddress config = plcAddressService.getProjectConfigWithMapping(projectId);
            
            // 获取对应的S7Serializer
            EnhancedS7Serializer s7Serializer = getSerializerForProject(projectId, config);
@@ -238,11 +238,11 @@
     * @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) {
@@ -251,7 +251,7 @@
            }
            
            // 创建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实例