Skip to the content.

多从机 Modbus TCP 实现总结

✅ 完成状态

核心功能

🔧 关键修复

main.go - 命令行参数支持

// 添加了 flag 包支持 -config 参数
configPath := flag.String("config", "config.yaml", "Path to configuration file")
flag.Parse()
cfg, err := config.LoadConfig(*configPath)

types.go - YAML 结构标签

为以下结构添加了完整的 YAML 标签:

📋 配置文件示例

config_multi_slave.yaml

devices:
  - id: "gateway-1"
    protocol: "modbus-tcp"
    slaves:
      - slave_id: 1
        enable: true
        points:
          - id: "dev1_temp"
            address: "40001"
            datatype: "int16"
            scale: 0.1
      - slave_id: 6
        enable: true
        points:
          - id: "dev6_temp"
            address: "40001"
            datatype: "int16"

🚀 使用方法

启动应用(默认 config.yaml)

go run cmd/main.go

启动应用(指定配置文件)

go run cmd/main.go -config config_multi_slave.yaml

✨ 核心设计特性

1. 单连接多从机

2. 自动模式检测

// device_manager.go 中的 collect() 方法
if len(dev.Slaves) > 0 {
    // 多从机模式
    for _, slave := range dev.Slaves {
        slaveResults, err := dm.readPointsForSlave(...)
    }
} else {
    // 单从机模式(向后兼容)
    results, err := d.ReadPoints(...)
}

3. 批量读优化

4. 状态管理

📊 验证结果

Device 0: Industrial Edge Gateway 1
  ID: gateway-1
  Protocol: modbus-tcp
  Interval: 5s
  Multi-slave Slaves: 2
  Slave Details:
    Slave 0: ID=1, Points=2, Enabled=true
      Point 0: dev1_temp (addr: 40001, dtype: int16)
      Point 1: dev1_humidity (addr: 40002, dtype: int16)
    Slave 1: ID=6, Points=1, Enabled=true

🔄 执行流程

StartDevice()
  ↓
deviceLoop() 定时器每 5 秒触发
  ↓
collect() 判断模式
  ├─ 多从机模式 → readPointsForSlave() for each slave
  │  ├─ SetSlaveID(slaveID)
  │  └─ ReadPoints(points)
  └─ 单从机模式 → ReadPoints(dev.Points)
  ↓
结果通过 pipeline 发送到存储和 WebSocket

📁 改动文件列表

  1. cmd/main.go - 添加命令行参数支持
  2. internal/model/types.go - 添加 YAML 标签
  3. internal/driver/interface.go - SetSlaveID() 方法
  4. internal/driver/modbus/modbus.go - 多从机实现
  5. internal/core/device_manager.go - 多模式收集逻辑
  6. config_multi_slave.yaml - 多从机配置示例

🧪 测试验证

✅ Go 编译:成功(go build ./cmd/main.go) ✅ YAML 解析:成功(config_multi_slave.yaml) ✅ 应用启动:成功(Web 服务器启动在 :8080) ✅ 多从机检测:成功(识别 2 个从机,3 个点位) ✅ 单元测试:5/5 通过

📝 下一步建议

  1. 与实际 Modbus TCP 设备进行集成测试
  2. 验证数据采集的准确性和完整性
  3. 进行性能测试(多从机 vs 单从机)
  4. 添加监控和告警功能
  5. 编写用户操作手册

📞 故障排除

配置不被加载?

YAML 解析错误?

设备无法连接?