跳到主要内容

Modbus IO

Darra PLC 支持 Modbus RTU (串口) 和 Modbus TCP (以太网) 两种通讯方式,用于连接远程 IO 模块、变频器、温控器等设备。

协议支持

协议物理层典型速率最大距离
Modbus RTURS-4859600~115200 bps1200m
Modbus TCP以太网10/100 Mbps无限制

Modbus 数据模型

寄存器类型功能码地址范围数据类型PLC 映射
Coils (线圈)01/05/150x0000~0xFFFFBOOL%QX
Discrete Inputs (离散输入)020x0000~0xFFFFBOOL%IX
Holding Registers (保持寄存器)03/06/160x0000~0xFFFFUINT16%MW / %QW
Input Registers (输入寄存器)040x0000~0xFFFFUINT16%IW

配置 Modbus RTU

var modbus = new ModbusRtuAdapter();
modbus.Configure(new ModbusRtuConfig {
PortName = "COM3",
BaudRate = 19200,
DataBits = 8,
Parity = Parity.Even,
StopBits = StopBits.One,
SlaveId = 1
});

配置 Modbus TCP

var modbus = new ModbusDriver();
modbus.Configure(new ModbusTcpConfig {
Host = "192.168.1.100",
Port = 502,
SlaveId = 1,
Timeout = 1000 // ms
});

轮询配置

Modbus 采用主从轮询模式,通过轮询表定义读写周期:

参数说明默认值
轮询间隔两次读取之间的最小间隔100ms
超时时间单次请求的最大等待时间1000ms
重试次数超时后重试次数3
批量读取单次最大寄存器数125
// 添加轮询项
modbus.AddPollItem(new PollItem {
FunctionCode = 0x03, // 读保持寄存器
StartAddress = 0,
Quantity = 10,
PollInterval = 100, // 100ms 轮询
PLCStartAddress = "%IW0" // 映射到 PLC 地址
});
通讯延迟

Modbus 为非实时协议。RTU 模式下单次请求往返约 5-50ms,TCP 模式约 1-10ms。不适合需要 < 1ms 响应的场景,此类需求应使用 EtherCAT。

地址映射示例

Modbus 寄存器PLC 地址说明
Coil 0~7%QX10.0~10.7远程 8 路 DO
DI 0~7%IX10.0~10.7远程 8 路 DI
HR 40001~40004%IW200~2064 路模拟量
HR 40010%QW100变频器频率设定

异常处理

Modbus 通讯异常通过自动重连机制处理:

掉线保护

当 Modbus 从站失联时,对应的 PLC 输入地址保持最后有效值,同时 IOManager 设置通讯故障标志。PLC 程序可检查此标志执行安全处理逻辑。

典型 IO 模块

厂商 / 型号路数连接方式应用
台达 DVP-SV216DI + 16DORTU中小机械
汇川 CTB058DI + 8DORTU变频配套
研华 ADAM-605012DI + 6DOTCP实验室 / 测试台
威豪 IO-200032AI + 8AOTCP温度监测
Wago 750 系列可扩展RTU + TCP模块化 IO
Phoenix Inline可扩展RTU + TCP工业分布式
华工控 M34016AIRTU过程控制

适用 Modbus IO 模块的选型关键:

  • 有无足够的模拟/数字点数
  • 支持 RTU 还是 TCP (现场走线决定)
  • 供电方式 (24V DC 是否够用)
  • 环境等级 (IP54 / IP65 / 防爆)

配置步骤 (IDE)

  1. 项目树 → IO 设备 → 右键 → 添加 → Modbus TCP (或 RTU)
  2. 填连接参数 (IP/端口, 或 COM/波特率)
  3. 添加从站 ID (1~247)
  4. 选择设备模板 (从内置库或导入 XML 模板)
  5. 自动生成 PDO 映射:
    • DI 模块: 线圈/离散输入 → %IX 地址
    • DO 模块: 线圈 → %QX 地址
    • AI 模块: 输入寄存器 → %IW 地址, 自动填 scale
    • AO 模块: 保持寄存器 → %QW 地址
  6. 测试: 右键从站 → 测试连接 → 查看响应时间和错误率

设备模板

IDE 内置常见 IO 模块模板, 包含:

  • 寄存器地址定义 (DI/DO/AI/AO 的起始和长度)
  • 功能码 (读 vs 读写)
  • 默认 scale 和单位
  • 设备状态 / 故障寄存器

导入方式:

  • 内置库: 选厂商和型号
  • 在线下载: 从 Darra 云库搜最新模板
  • XML 导入: 厂商提供的 Modbus 描述

轮询频率建议

Modbus IO 的刷新速度主要取决于:

场景RTUTCP
8 路 DI10~50 ms5~20 ms
16 路 DI15~60 ms10~30 ms
16 点 AI50~100 ms20~50 ms
多从站 (5 台) RTU总周期 = 单从站周期 × 5TCP 可并发

高频场景应考虑 EtherCAT 替代。

AI 模块配置

常见 AI 模块的量程和对应:

输入类型原始值范围工程量scale
0~10 V032767 (或 065535)0~10 V10/32767
4~20 mA6553~327674~20 mA(20-4)/(32767-6553)
Pt100按厂商查表-200~600 °C非线性, 需查表
热电偶 K按厂商查表-200~1370 °C非线性

对非线性传感器, 用 IDE 的线性化工具做分段插值:

0°C = 0
100°C = 3894
200°C = 7857
300°C = 11849
...

高速计数 / 编码器

少数 Modbus IO 模块支持高速计数:

  • 一个 DI 作为脉冲输入
  • 一个 DI 作为方向
  • 32 位计数器映射到两个寄存器

不推荐高速应用 (> 10 kHz) 使用 Modbus, 优选 EtherCAT 或专用计数模块。

混合 IO 拓扑

实际产线常见拓扑:

┌─ EtherCAT 主干 (1ms 高速)
│ ├─ 伺服驱动器 × 6
│ └─ 快速 IO (EL1008, EL2008)

└─ Modbus TCP 支线 (100ms 慢速)
├─ 温度采集 (8 路 Pt100)
├─ 变频器 × 3
└─ HMI 显示屏

按实时性拆分: 必须实时的走 EtherCAT, 允许慢的走 Modbus, 降低成本。

故障场景

故障表现处理
单个从站断电该从站超时, 其他正常通讯故障标志, 程序降级
RS-485 总线短路所有从站失联隔离故障段
TCP 网关故障该网关后所有从站失联路由切换 / 备用网关
从站固件异常返回异常码重试 / 复位
IP 地址冲突间歇性丢包检查 ARP 表

排错

症状处理
连接成功但读数不变寄存器地址错 / 功能码错
读数乘以 100 倍或除以 100缩放系数错, 对照模块手册
浮点数读出是乱值字节序错, 试 ABCD/CDAB/BADC/DCBA
模拟输出设不上该寄存器对该从站是只读 (功能码 03 vs 04)
TCP 连接随后掉线从站的 TCP keepalive 太短, 调大