编辑 | blame | 历史 | 原始文档

PLC地址映射配置功能说明

概述

本功能优化了PLC地址映射配置管理,支持动态配置不同项目的PLC地址映射,无需为不同项目创建不同的YAML配置文件。系统支持从数据库和配置文件两种方式加载PLC地址映射配置,优先使用数据库中的配置。

功能特点

  1. 动态配置:支持通过API接口动态配置不同项目的PLC地址映射
  2. 多数据源:支持从数据库和配置文件加载配置,优先使用数据库配置
  3. 缓存机制:缓存不同项目的S7Serializer实例,提高性能
  4. 完整API:提供完整的REST API接口,支持增删改查操作
  5. 连接测试:支持测试PLC连接是否正常

核心组件

1. PlcAddressMappingConfig

  • 位置:com.mes.config.PlcAddressMappingConfig
  • 功能:配置类,定义PLC地址映射配置结构
  • 支持从配置文件加载默认配置

2. PlcAddressMapping

  • 位置:com.mes.entity.PlcAddress
  • 功能:实体类,对应数据库表结构
  • 存储项目PLC地址映射配置

3. PlcAddressMappingMapper

  • 位置:com.mes.mapper.PlcAddressMapper
  • 功能:MyBatis Mapper接口,提供数据库操作

4. PlcAddressMappingService

  • 位置:com.mes.service.PlcAddressService
  • 功能:服务类,提供PLC地址映射配置的增删改查功能
  • 支持从数据库和配置文件加载配置

5. PlcTestWriteService(已优化)

  • 位置:com.mes.service.PlcTestWriteService
  • 功能:PLC测试写入服务,支持动态配置PLC地址映射
  • 缓存不同项目的S7Serializer实例

6. PlcAddressMappingController

  • 位置:com.mes.controller.PlcAddressController
  • 功能:控制器,提供REST API接口

API接口

1. 获取所有配置

GET /api/plc/address-mapping/list

2. 分页获取配置

GET /api/plc/address-mapping/page?page=1&size=10&projectId=shuttle&plcIp=192.168.10.21

3. 根据ID获取配置

GET /api/plc/address-mapping/{id}

4. 根据项目ID获取配置

GET /api/plc/address-mapping/project/{projectId}

5. 根据项目ID获取项目配置(包含地址映射)

GET /api/plc/address-mapping/project/{projectId}/config

6. 创建新配置

POST /api/plc/address-mapping
Content-Type: application/json

{
  "projectId": "new_project",
  "projectName": "新项目",
  "dbArea": "DB1",
  "beginIndex": 0,
  "plcIp": "192.168.10.22",
  "plcType": "S1200",
  "description": "新项目配置"
}

7. 更新配置

PUT /api/plc/address-mapping/{id}
Content-Type: application/json

{
  "projectId": "updated_project",
  "projectName": "更新项目",
  "dbArea": "DB2",
  "beginIndex": 10,
  "plcIp": "192.168.10.23",
  "plcType": "S1500",
  "description": "更新项目配置"
}

8. 删除配置

DELETE /api/plc/address-mapping/{id}

9. 批量删除配置

DELETE /api/plc/address-mapping/batch
Content-Type: application/json

[1, 2, 3]

10. 测试PLC连接

POST /api/plc/address-mapping/{id}/test-connection

11. 重新加载配置文件

POST /api/plc/address-mapping/reload-config

配置文件示例

application-dev.yml中添加以下配置:

plc:
  address:
    mapping:
      # 默认DB块地址和起始索引
      defaultDbArea: "DB1"
      defaultBeginIndex: 0
      
      # 项目特定配置
      projects:
        shuttle:
          dbArea: "DB38"
          beginIndex: 0
          plcIp: "192.168.10.21"
          plcType: "S1200"
          addressMapping:
            onlineState: "0"
            plcRequest: "2"
            plcReport: "4"
            mesSend: "6"
            mesConfirm: "8"
            mesGlassCount: "10"
            alarmInfo: "12"

使用示例

1. 在代码中使用动态配置

@Service
public class SomeService {
    
    @Autowired
    private PlcTestWriteService plcTestWriteService;
    
    public void doSomething() {
        // 设置当前项目
        plcTestWriteService.setCurrentProjectId("shuttle");
        
        // 使用当前项目配置执行操作
        plcTestWriteService.simulatePlcRequest();
        
        // 或者直接指定项目
        plcTestWriteService.simulatePlcRequest("another_project");
    }
}

2. 通过API管理配置

# 创建新项目配置
curl -X POST http://localhost:8080/api/plc/address-mapping \
  -H "Content-Type: application/json" \
  -d '{
    "projectId": "new_project",
    "projectName": "新项目",
    "dbArea": "DB1",
    "beginIndex": 0,
    "plcIp": "192.168.10.22",
    "plcType": "S1200"
  }'

# 获取项目配置
curl http://localhost:8080/api/plc/address-mapping/project/new_project/config

# 测试连接
curl -X POST http://localhost:8080/api/plc/address-mapping/1/test-connection

数据库表结构

CREATE TABLE `plc_address_mapping` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `project_id` varchar(50) NOT NULL COMMENT '项目标识',
  `project_name` varchar(100) DEFAULT NULL COMMENT '项目名称',
  `db_area` varchar(20) NOT NULL COMMENT 'DB块地址,如DB1',
  `begin_index` int(11) NOT NULL DEFAULT '0' COMMENT '起始索引',
  `plc_ip` varchar(50) DEFAULT NULL COMMENT 'PLC IP地址',
  `plc_type` varchar(20) DEFAULT 'S1200' COMMENT 'PLC类型',
  `address_mapping_json` text COMMENT '地址映射JSON配置',
  `description` varchar(255) DEFAULT NULL COMMENT '描述',
  `enabled` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否启用:1-启用,0-禁用',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `create_by` varchar(50) DEFAULT NULL COMMENT '创建人',
  `update_by` varchar(50) DEFAULT NULL COMMENT '更新人',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_project_id` (`project_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='PLC地址映射配置表';

注意事项

  1. 配置优先级:数据库中的配置优先级高于配置文件中的配置
  2. 缓存管理:当配置更新后,需要清除对应的S7Serializer缓存
  3. 连接测试:测试连接功能仅验证参数是否正确,不实际连接PLC
  4. 安全性:在生产环境中,应添加适当的权限控制和参数验证

扩展建议

  1. 添加配置版本控制:支持配置的版本管理和回滚
  2. 添加配置变更通知:当配置变更时,通知相关服务
  3. 添加配置导入导出:支持配置的批量导入导出
  4. 添加配置模板:支持创建配置模板,简化新项目配置
  5. 添加配置验证:增强配置参数的验证规则