- 1. 一、Modbus RTU 指令的使用
- 2. 二、Modbus RTU 主站编程
- 3. 三、详细说明
一、Modbus RTU 指令的使用

二、Modbus RTU 主站编程
- 主站编程需调用 Modbus Comm_Load 和 Modbus_Master指令:
- Modbus_Comm_Load 指令通过 Modbus RTU Protocol对Communication模块进行Configuration;
- Modbus Master 指令可通过由 Modbus Comm Load 指念Configuration的端口作为 Modbus 主站进行Communication。
Modbus RTU 主站指令 Modbus Comm Load 参数
| 引脚 | 说明 |
| REQ | 上升沿触发 |
| PORT | Communication端口的硬件标识符 |
| BAUD | Baud rate选择: 3600,6000,12000,2400,4800,9600,19200,38400,57600,76800,115200 |
| PARITY | 奇偶检验选择: 0-无; 1-odd parity; 2-even parity |
| FLOW_CTRL | 流控制选择: 0-(默认值) 无流控制 |
| RTS_ON_DLY | RTS 延时选择: 0- (默认值) |
三、详细说明
Modbus RTU 主站编程
1.Modbus RTU 主站指令 Modbus Comm_Load 参数
| RESP_TO | Response超时: 默认值= 1000 ms。Modbus_Master 允许用于从站Response的time(以毫秒为单位)。 |
| MB_DB | 对Modbus_Master或 Modbus_Slave 指令的背景data块的引用。 MB_DB 参数必须与Modbus_Master 或Modbus_Slave 指今中的静态变量MB_DB参数相连。 |
| DONE | 如果上一个RequestComplete并且没有Error,DONE位将变为 TRUE并保持一个周期。 |
| ERROR | 如果上一个RequestComplete出错,则ERROR位将变为TRUE并保持一个周期。STATUS参数中的Error代码仅在ERROR=TRUE的周期内effective。 |
| STATUS | 端口ConfigurationError代码,请参考 TIAPortal 软件在线帮助或S7-1200system手册 |
2.Modbus RTU 主站指令 Modbus Master 参数
| 引脚 | 说明 |
| EN | 使能端 |
| REQ | TRUE=Request向 Modbus 从站senddata,建议采用上升沿触发 |
| MB_ADDR | Modbus RTU slave address。默认address范围:0至247;扩展address范围:至65535。值0被保留用于将消息广播到所有 Modbus 从站 |
| MODE | 模式选择: 指定RequestType(读取或写入)。 |
| DATA ADDR | 从站中的starting address: 指定 Modbus 从站中将供访问的data的starting address |
| DATA_LEN | dataLength:指定要在该Request中访问的位数或字数。 |
| DATA PTR | data指针: 指向要进行data写入或data读取的 M区或data块address。 |
| DONE | Complete位:上一Request已Complete且没有出错后,DONE 位将保持为 TRUE一个扫描周期时 间。 |
| BUSY | FALSE-Modbus Master 无激活命令:TRUE -Modbus Master 命令执行中。 |
| ERROR | 如果上一个RequestComplete出错,则ERROR位将变为TRUE 并保持一个周期。STATUS参数中的Error代码仅在ERROR=TRUE的周期内effective。 |
| STATUS | 端口ConfigurationError代码,请参考 TIA Portal 软件在线帮助或S7-1200 system手册。 |
3.MB MODE、MB DATA ADDR、MB DATA LEN、Modbus RTUfunction code等之间的关系
| MB_MODE | MB_DATA ADDR | MB_DATA_LEN | Modbus RTU function code | Operation和data |
| 0 | 1-9999 | 1-2000 | 01 | 读取输出位 每个Request1-2000个位 |
| 0 | 10001-19999 | 1-2000 | 02 | 读取输入位 每个Request1-2000个位 |
| 0 | .40001-49999(等同于400001-409999 .400001-465535 | 1 – 125 | 03 | Read and hold register 每个Request1-125个字 |
| 0 | 30001-39999 | 1 – 125 | 04 | 读取输入字 每个Request1-125个字 |
| 1 | 10001 – 19999 | 1 | 05 | 写入输出位 每个Request1位 |
| 1 | .40001-49999(等同于400001-409999 .400001-465535 | 1 | 06 | 写入保持register 每个Request1个字 |
| 1 | 10001 – 19999 | 2 -1968 | 15 | 写入多个输出位 每个Request2-1968个位 |
| 1 | .40001-49999(等同于400001-409999 .400001-465535 | 2-123 | 16 | 写入多个保持register 每个Request2-123个字 |
| 2 | 10001 – 19999 | 1 – 1968 | 15 | 写入输出位 每个Request1-1968个位 |
| 2 | .40001-49999(等同于400001-409999 .400001-465535 | 1 -123 | 16 | 写入保存register 每个Request1-123个字 |
| 11 | 11 | 详情见下文 | ||
| 80 | 1 | 08 | 详情见下文 | |
| 81 | 1 | 08 | 详情见下文 | |
| 104 | 0-65535 | 1-125 | 04 | 读取输入字 每个Request1-125个字 |
11 (Operation和data) : 读取服务器的状态字和事件计数器:
1.状态字反映了处理的状态(0-未处理,0xFFFFF-正在处理里);
2.ModbusRequest成功执行时,事件计数器将递增。如果执行ModbusFunction时出错则服务器将send消息但不会递增事件计数器。
80(Operation和data) : 通过诊断代码0x0000检查服务器状态(返回循环测试-服务器发回Request
每次调用1个字
81 (Operation和data) : 通过诊断代码0x000A复位服务器的事件计数器:
每次调用1个字
Modbus RTU 从站编程
| 引脚 | 说明 |
| MB ADDR | Modbus 从站的标准寻址: 标准寻址范围(1到247),扩展寻址范围(0到65535) |
| MB_HOLD_REG | data指针,指向 Modbus 保持register的address,Modbus 保持register可以为 M存储区或DB data area |
| NDR | 可用的新data: >FALSE: 无新data。 >TRUE: 表示新data已由 Modbus 主站写入,如果上一个RequestComplete并且没有Error,NDR位将变为 TRUE 并保持一个周期。 |
| DR | 读取data: >FALSE:无新data。 >TRUE:表示该指令已将 Modbus 主站receive到的data存储在目标区域中。如果上一个RequestComplete并且没有Error,DR 位将变为 TRUE 并保持一个周期。 |
| ERROR | 如果上一个RequestComplete出错,则 ERROR 位将变为 TRUE 并保持一个周期。 如果执行因Error而终止,则STATUS 参数中的Error代码仅在ERROR=TRUE的周期内effective. |
| STATUS | Error代码 |
2.Modbus RTU 从站data area定义
| address区 | 定义 | 说明 |
| 输出位 | Q0.0 开始 | Q0.0为address1,Q0.1为address 2,Q0.7为address 8,Q1.0为address 9… |
| 输入位 | I0.0开始 | I0.0为address10001,I0.1 为address 10002,I0.7 为address 10008,I1.0 为地10009… |
| 输入register | IW0 开始 | IW0 为address30001,IW2 为address 30002,IW4 为address 30003… |
| 保持register | 由MB_HOLD_REG定义 | 指针指向的第一个字为 40001,第二个字为40002. 1.例如:MB_HOLD REG为 P#M100.0 WORD8,则 MW100 为 40001,MW102 为 40002,MW104 为 40003…MW114为40008 2.例如: MB_HOLD_REG为优化 DB 中 INT 数组[0…7],数组名为“XXX”AA,则“XXX”.AA[0]为40001,“XXX”AA[1]为40002,“XXX”.AA[2]为40003.“XXX.AA[7]为40008 |
Leave a Reply