一、Modbus RTU 指令的使用
二、Modbus RTU 主站编程
- 主站编程需调用 Modbus Comm_Load 和 Modbus_Master指令:
- Modbus_Comm_Load 指令通过 Modbus RTU 协议对通信模块进行组态;
- Modbus Master 指令可通过由 Modbus Comm Load 指念组态的端口作为 Modbus 主站进行通信。
Modbus RTU 主站指令 Modbus Comm Load 参数
引脚 | 说明 |
REQ | 上升沿触发 |
PORT | 通信端口的硬件标识符 |
BAUD | 波特率选择: 3600,6000,12000,2400,4800,9600,19200,38400,57600,76800,115200 |
PARITY | 奇偶检验选择: 0-无; 1-奇校验; 2-偶校验 |
FLOW_CTRL | 流控制选择: 0-(默认值) 无流控制 |
RTS_ON_DLY | RTS 延时选择: 0- (默认值) |
三、详细说明
Modbus RTU 主站编程
1.Modbus RTU 主站指令 Modbus Comm_Load 参数
RESP_TO | 响应超时: 默认值= 1000 ms。Modbus_Master 允许用于从站响应的时间(以毫秒为单位)。 |
MB_DB | 对Modbus_Master或 Modbus_Slave 指令的背景数据块的引用。 MB_DB 参数必须与Modbus_Master 或Modbus_Slave 指今中的静态变量MB_DB参数相连。 |
DONE | 如果上一个请求完成并且没有错误,DONE位将变为 TRUE并保持一个周期。 |
ERROR | 如果上一个请求完成出错,则ERROR位将变为TRUE并保持一个周期。STATUS参数中的错误代码仅在ERROR=TRUE的周期内有效。 |
STATUS | 端口组态错误代码,请参考 TIAPortal 软件在线帮助或S7-1200系统手册 |
2.Modbus RTU 主站指令 Modbus Master 参数
引脚 | 说明 |
EN | 使能端 |
REQ | TRUE=请求向 Modbus 从站发送数据,建议采用上升沿触发 |
MB_ADDR | Modbus RTU 从站地址。默认地址范围:0至247;扩展地址范围:至65535。值0被保留用于将消息广播到所有 Modbus 从站 |
MODE | 模式选择: 指定请求类型(读取或写入)。 |
DATA ADDR | 从站中的起始地址: 指定 Modbus 从站中将供访问的数据的起始地址 |
DATA_LEN | 数据长度:指定要在该请求中访问的位数或字数。 |
DATA PTR | 数据指针: 指向要进行数据写入或数据读取的 M区或数据块地址。 |
DONE | 完成位:上一请求已完成且没有出错后,DONE 位将保持为 TRUE一个扫描周期时 间。 |
BUSY | FALSE-Modbus Master 无激活命令:TRUE -Modbus Master 命令执行中。 |
ERROR | 如果上一个请求完成出错,则ERROR位将变为TRUE 并保持一个周期。STATUS参数中的错误代码仅在ERROR=TRUE的周期内有效。 |
STATUS | 端口组态错误代码,请参考 TIA Portal 软件在线帮助或S7-1200 系统手册。 |
3.MB MODE、MB DATA ADDR、MB DATA LEN、Modbus RTU功能码等之间的关系
MB_MODE | MB_DATA ADDR | MB_DATA_LEN | Modbus RTU 功能码 | 操作和数据 |
0 | 1-9999 | 1-2000 | 01 | 读取输出位 每个请求1-2000个位 |
0 | 10001-19999 | 1-2000 | 02 | 读取输入位 每个请求1-2000个位 |
0 | .40001-49999(等同于400001-409999 .400001-465535 | 1 – 125 | 03 | 读取保持寄存器 每个请求1-125个字 |
0 | 30001-39999 | 1 – 125 | 04 | 读取输入字 每个请求1-125个字 |
1 | 10001 – 19999 | 1 | 05 | 写入输出位 每个请求1位 |
1 | .40001-49999(等同于400001-409999 .400001-465535 | 1 | 06 | 写入保持寄存器 每个请求1个字 |
1 | 10001 – 19999 | 2 -1968 | 15 | 写入多个输出位 每个请求2-1968个位 |
1 | .40001-49999(等同于400001-409999 .400001-465535 | 2-123 | 16 | 写入多个保持寄存器 每个请求2-123个字 |
2 | 10001 – 19999 | 1 – 1968 | 15 | 写入输出位 每个请求1-1968个位 |
2 | .40001-49999(等同于400001-409999 .400001-465535 | 1 -123 | 16 | 写入保存寄存器 每个请求1-123个字 |
11 | 11 | 详情见下文 | ||
80 | 1 | 08 | 详情见下文 | |
81 | 1 | 08 | 详情见下文 | |
104 | 0-65535 | 1-125 | 04 | 读取输入字 每个请求1-125个字 |
11 (操作和数据) : 读取服务器的状态字和事件计数器:
1.状态字反映了处理的状态(0-未处理,0xFFFFF-正在处理里);
2.Modbus请求成功执行时,事件计数器将递增。如果执行Modbus功能时出错则服务器将发送消息但不会递增事件计数器。
80(操作和数据) : 通过诊断代码0x0000检查服务器状态(返回循环测试-服务器发回请求
每次调用1个字
81 (操作和数据) : 通过诊断代码0x000A复位服务器的事件计数器:
每次调用1个字
Modbus RTU 从站编程
引脚 | 说明 |
MB ADDR | Modbus 从站的标准寻址: 标准寻址范围(1到247),扩展寻址范围(0到65535) |
MB_HOLD_REG | 数据指针,指向 Modbus 保持寄存器的地址,Modbus 保持寄存器可以为 M存储区或DB 数据区 |
NDR | 可用的新数据: >FALSE: 无新数据。 >TRUE: 表示新数据已由 Modbus 主站写入,如果上一个请求完成并且没有错误,NDR位将变为 TRUE 并保持一个周期。 |
DR | 读取数据: >FALSE:无新数据。 >TRUE:表示该指令已将 Modbus 主站接收到的数据存储在目标区域中。如果上一个请求完成并且没有错误,DR 位将变为 TRUE 并保持一个周期。 |
ERROR | 如果上一个请求完成出错,则 ERROR 位将变为 TRUE 并保持一个周期。 如果执行因错误而终止,则STATUS 参数中的错误代码仅在ERROR=TRUE的周期内有效. |
STATUS | 错误代码 |
2.Modbus RTU 从站数据区定义
地址区 | 定义 | 说明 |
输出位 | Q0.0 开始 | Q0.0为地址1,Q0.1为地址 2,Q0.7为地址 8,Q1.0为地址 9… |
输入位 | I0.0开始 | I0.0为地址10001,I0.1 为地址 10002,I0.7 为地址 10008,I1.0 为地10009… |
输入寄存器 | IW0 开始 | IW0 为地址30001,IW2 为地址 30002,IW4 为地址 30003… |
保持寄存器 | 由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 |