文档中心
PLC在线模拟器
Modbus RTU 通信

Modbus RTU 通信指令

Modbus 是工业自动化领域应用最广泛的通信协议之一。PLC在线模拟器 支持 Modbus RTU 主站与 Modbus RTU 从站两种模式,可让模拟器与真实的串口设备(如变频器、仪表、其他 PLC)进行数据交换。

  • 主站模式:由模拟器主动发起通信,读取或写入从站设备的数据。
  • 从站模式:模拟器作为从站,响应外部主站设备的读写请求。

通信指令位于工具栏 "通信" 类别中,共包含 4 条指令:MBUS_CTRL、MBUS_MSG、MBUS_INIT、MBUS_SLAVE。指令名称与参数语义与西门子 S7-200 SMART 的 Modbus 库保持一致。

MBUS_CTRL —— 主站模式控制

MBUS_CTRL 用于配置串口并初始化主站协议。程序运行中,它必须在 每个扫描周期持续使能(EN 保持接通),主站才可正常工作。

<???>
MBUS_CTRL
EN
Done
Mode
1
Baud
Parity
Port
Timeout
Error

参数说明

参数类型说明
ModeBool模式:必须为 1(启用主站协议)。每次由 0 变 1 时重新初始化串口
BaudUint32波特率码(见下方波特率表)
ParityUint8校验位:0=无校验,1=奇校验,2=偶校验
PortUint8串口号:0 或 1
TimeoutInt16通信超时时间(毫秒),范围 1~32767
DoneBool初始化完成标志:本周期执行完成后置 1
ErrorUint8错误码,0 表示无错误

波特率码

代码波特率代码波特率
02400438400
14800557600
296006115200
319200

错误码

代码含义
0无错误
1校验位参数无效(Parity 只能为 0/1/2)
2波特率参数无效
3超时参数无效(必须为 1~32767)
4模式参数无效(仅支持 1:RTU 主站)

MBUS_MSG —— 主站消息指令

MBUS_MSG 用于执行一次读或写操作,与指定的单个从站交换数据。它由 First 输入的上升沿触发,每次只执行一次(不要求持续使能)。

<???>
MBUS_MSG
EN
Done
First
Slave
RW
Addr
Count
Error

参数说明

参数类型说明
FirstBool通信请求触发:该输入产生上升沿时执行一次通信
SlaveUint8从站地址:1~247
RWUint80=读取,1=写入
AddrUint32从站中的起始寄存器地址
CountInt16数据个数(读/写的寄存器或线圈数量)
DataPtrV 地址数据在 V 区的起始地址(文本输入,如 &VB500),用于存放读到的数据或待发送的数据
DoneBool通信完成标志
ErrorUint8错误码,0 表示无错误

支持的功能码

MBUS_MSG 根据 RW 与操作对象自动选择功能码:

功能码说明功能码说明
0x01读线圈0x05写单个线圈
0x02读离散输入0x06写单个寄存器
0x03读保持寄存器0x0F写多个线圈
0x04读输入寄存器0x10写多个寄存器

错误码

代码含义
0无错误
1奇偶校验错误(含响应 CRC 校验失败)
2未使能(未执行 MBUS_CTRL 或配置未就绪)
3超时,从站无响应(含串口未连接导致的通信失败)
4参数非法(Slave/RW/Addr/Count/DataPtr 越界)
5响应中数据地址非法(从站异常 0x02 等)
6响应中数据值非法(从站异常 0x03 等)

MBUS_INIT —— 从站初始化

MBUS_INIT 用于将模拟器配置为 Modbus RTU 从站。程序运行中需持续使能(EN 保持接通),从站协议才保持有效。

<???>
MBUS_INIT
EN
Done
Mode
1
Addr
Baud
Parity
Port
Delay
MaxIQ
256
MaxAI
56
MaxHold
1000
Error

参数说明

参数类型说明
ModeUint80=关闭从站,1=使能从站
AddrUint8从站地址:1~247
BaudUint32波特率码(同上文波特率表)
ParityUint8校验位:0=无校验,1=奇校验,2=偶校验
PortUint8串口号:0 或 1(独立逻辑口)
DelayUint16响应延时(毫秒)
MaxIQUint16数字量 I/Q 区范围上限,默认 256
MaxAIUint16模拟量输入字数,默认 56
MaxHoldUint16保持寄存器字数,默认 1000
HoldStartV 地址保持寄存器在 V 区的起始地址(如 &VB0)
DoneBool初始化完成标志
ErrorUint8错误码,0 表示无错误

错误码

代码含义
0无错误
1从站地址非法(0 或大于 247)
2波特率参数非法
3校验位参数非法(非 0/1/2)
9保持寄存器区非法(HoldStart 非 V 区,或超出 V 区/上限)

MBUS_SLAVE —— 从站使能

MBUS_SLAVE 用于在每个扫描周期处理主站请求并回送响应。它没有输入参数,只需保持使能(EN 接通)。

<???>
MBUS_SLAVE
EN
Done
Error

参数说明

参数类型说明
DoneBool本周期是否处理了主站请求
ErrorUint8错误码,0 表示无错误

错误码

代码含义
0无错误
1未使能(未执行 MBUS_INIT 或配置未就绪)
2非法功能码(从站异常 0x01)
3非法数据地址(从站异常 0x02)
4非法数据值(从站异常 0x03)

主站与从站配合

一条完整的 Modbus RTU 通信链路至少包含一个主站和一个从站:

主站(PLC在线模拟器)                      从站(外部设备)
┌──────────────────┐                     ┌──────────────────┐
│ MBUS_CTRL (每周期) │─── 串口 RS-485 ───▶│ 变频器/仪表/PLC   │
│ MBUS_MSG   (触发) │◀── 响应帧 ─────────│ 等 Modbus 设备    │
└──────────────────┘                     └──────────────────┘
  • 主站程序:MBUS_CTRL 持续使能完成初始化,然后用 MBUS_MSG 按需读写从站数据。读回的数据存放在指定的 V 区变量中,可直接参与梯形图逻辑。
  • 从站程序:MBUS_INIT 完成从站配置,MBUS_SLAVE 每周期使能响应。外部主站读写的是模拟器 V 区中对应的数据区域。

使用注意事项

  1. 持续使能:MBUS_CTRL、MBUS_INIT、MBUS_SLAVE 必须在每个扫描周期保持 EN 接通,否则通信会被中断或重新初始化。
  2. 边沿触发:MBUS_MSG 由 First 输入上升沿触发,同一时刻只允许一个 MBUS_MSG 处于通信中。
  3. DataPtr 与 HoldStart:使用 V 区起始地址(如 &VB500、&VB0)文本填写,对应变量表中的 V 区变量。
  4. 波特率与校验位:主站与从站必须配置相同的波特率与校验位,且串口号对应同一物理串口。