在使用 Modbus/TCP 方式数据通信时,怎样寻址到作为 Modbus 设备的 SIMATIC S7-1200/S7-1500 存储区?
Modbus 数据模型
Modbus 数据模型在结构上是简单的,分为 4 部分存储区(数据类型):
线圈(输出-位方式访问,读写)
离散输入(输入-位方式访问,只读)
输入寄存器(输入数据-字方式访问,只读)
保持寄存器(输出数据-字方式访问,读写)
表 1 展示了的寄存器和位地址在 Modbus 设备(应用层)中并在协议(数据链路层)中作为 Modbus 地址传输的对照。
存储区 | Modbus 设备中应用层的地址 | 传输报文中 Modbus 地址(数据链路层) |
---|---|---|
线圈(输出) | 1 to 9999 | 0 to 9998 |
离散输入(输入) | 10001 to 19999 | 0 to 9998 |
输入寄存器(输入字) | 30001 to 39999 | 0 to 9998 |
保持寄存器(输出字) | 40001 to 49999 400001 to 465536 扩展的地址空间 | 0 to 9998 0 to 65535 |
表 1
SIMATIC S7 中通过功能块激活 Modbus/TCP 通信。
S7-1200/S7-1500 Modbus /TCP 通讯程序块的地址表示
在 SIMATIC S7-1200/S7-1500 中对于 MB_MODE 取值 0 和 1, Modbus/TCP 通讯的功能块使用应用层的地址。
对于 MB_MODE 取值 0 和 1,参数 MB_MODE,MB_DATA_ADDR 和 MB_DATA_LEN 的组合定义了在当前 Modbus报文中用到的功能码。
MB_MODE 包含了地址是否被读或写的信息。 MB_MODE=0:读,MB_MODE=1:写。
MB_DATA_ADDR 包含了被读或写的地址数据信息,MB_CLIENT 通过它来计算远程地址。
MB_DATA_LEN 包含了被读或写的值的数量。
表 2 展示了 MB_CLIENT 功能块怎样寻址 Modbus 功能码 03 “保持寄存器(输出字)”来读取从远程地址 0 开始的 10 个输出字。
MB_CLIENT 指令参数 | MB_CLIENT 指令的参数的值 | 描述 | Modbus 设备中寻址 |
---|---|---|---|
MB_MODE | 0 (十进制) | Modbus 请求:读取 | 在 Modbus 设备中,从0 开始的 10个输出字 被读取。 |
MB_DATA_ADDR | 40001 (十进制) | 起始地址 = 40001:保持寄存器(输出字) | |
DATA_LEN | 10 (十进制) | 读取数据的数量(字) | |
MB_DATA_PTR | "DATA_CON1".MB_DATA_PTR | 从 Modbus 服务器接收的数据缓存区 (数据寄存器) 例子 数据存储在 DB2 "DATA_CON1" 中的变量"MB_DATA_PTR"中, 数据类型Array [0..9] of Word |
表 2
表 3 展示了 MB_CLIENT 功能块怎样寻址 Modbus 功能码 03 “保持寄存器(输出字)”来读取从远程地址 4 开始的 10 个输出字。
MB_CLIENT 指令参数 | MB_CLIENT 指令的参数的值 | 描述 | Modbus 设备中寻址 |
---|---|---|---|
MB_MODE | 0 (十进制) | Modbus 请求:读取 | 在 Modbus 设备中,从4开始的 10个输出字 被读取。 |
MB_DATA_ADDR | 40005 (十进制) | 起始地址 = 40005:保持寄存器(输出字) | |
DATA_LEN | 10 (十进制) | 读取数据的数量(字) | |
MB_DATA_PTR | "DATA_CON1".MB_DATA_PTR | 从 Modbus 服务器接收的数据缓存区 (数据寄存器) 例子 数据存储在 DB2 "DATA_CON1" 中的变量"MB_DATA_PTR"中, 数据类型Array [0..9] of Word |
表 3
在 STEP 7 (TIA Portal) V14 及更高的版本中,通过 Modbus/TCP 通讯的指令 V4.1 版本,以下支持 MB_MODE 赋值111 至 116:
MB_MODE 定义了 Modbus 功能码。
MB_DATA_ADDR 包含远程地址。
MB_DATA_LEN 包含读或写的值的数量。
表 4 展示了 MB_CLIENT 功能块怎样寻址 Modbus 功能码 03 “保持寄存器(输出字)”来读取从远程地址 0 开始的 10个输出字。
MB_CLIENT 指令参数 | MB_CLIENT 指令的参数的值 | 描述 | Modbus 设备中寻址 |
---|---|---|---|
MB_MODE | 103 (十进制) | MB_MODE=103 定义了功能码 03“保持寄存器(输出字)” | 在 Modbus 设备中,从 0开始的 10 个输出字 被读取。 |
MB_DATA_ADDR | 0 (十进制) | 远程地址 = 0 | |
DATA_LEN | 10 (十进制) | 读取数据的数量(字) | |
MB_DATA_PTR | "DATA_CON1".MB_DATA_PTR | 从 Modbus 服务器接收的数据缓存区 (数据寄存器) 例子 数据存储在 DB2 "DATA_CON1" 中的变量"MB_DATA_PTR"中, 数据类型Array [0..9] of Word |
表 4
表 5 展示了 MB_CLIENT 功能块怎样寻址 Modbus 功能码 03 “保持寄存器(输出字)”来读取从远程地址 4 开始的 10个输出字。
MB_CLIENT 指令参数 | MB_CLIENT 指令的参数的值 | 描述 | Modbus 设备中寻址 |
---|---|---|---|
MB_MODE | 103 (十进制) | MB_MODE=103 定义了功能码 03“保持寄存器(输出字)” | 在 Modbus 设备中,从 4开始的 10 个输出字 被读取。 |
MB_DATA_ADDR | 4 (十进制) | 远程地址 = 4 | |
DATA_LEN | 10 (十进制) | 读取数据的数量(字) | |
MB_DATA_PTR | "DATA_CON1".MB_DATA_PTR | 从 Modbus 服务器接收的数据缓存区 (数据寄存器) 例子 数据存储在 DB2 "DATA_CON1" 中的变量"MB_DATA_PTR"中, 数据类型Array [0..9] of Word |
表 5