|
西门子在 STEP 7-Micro/WIN SMART 中正式推出 Modbus RTU 主站协议库(西门子标准库指令)。 
图 1. 西门子标准指令库(STEP 7-Micro/WIN SMART) 注意:
1. Modbus RTU 主站指令库的功能是通过在用户程序中调用预先编好的程序功能块实现的,该库对 CPU 集成的 RS 485 通讯口 和 CM 01 信号板有效。该指令库将设置通信口工作在自由口模式下。
2. Modbus RTU 主站指令库使用了一些用户中断功能,编其他程序时不能在用户程序中禁止中断。
3. Modbus RTU 主站指令库不能同时应用于CPU 集成的 RS 485 通讯口 和 CM 01 信号板。
使用 Modbus RTU 主站指令库,可以读写 Modbus RTU 从站的数字量、模拟量 I/O 以及保持寄存器。 Modbus RTU 主站功能编程1. 调用 Modbus RTU 主站初始化和控制子程序 使用 SM0.0 调用 MBUS_CTRL 完成主站的初始化,并启动其功能控制: 
图 2. 用 SM0.0 调用 Modbus RTU 主站初始化与控制子程序各参数意义如下: | | | | | | | 为 1 时,使能 Modbus 协议功能;为 0 时恢复为系统 PPI 协议 | | | | 支持的通讯波特率为1200,2400,4800,9600,19200,38400,57600,115200。 | | | | | | 0=无校验 | | | e. | | 端口号: | 0 = CPU 集成的 RS 485 通讯口 ; 1 = 可选 CM 01 信号板 。 | | | | 主站等待从站响应的时间,以毫秒为单位,典型的设置值为 1000 毫秒(1 秒),允许设置的范围为 1 - 32767。 | | 注意: 这个值必须设置足够大以保证从站有时间响应。 | | | | 初始化完成,此位会自动置1。可以用该位启动 MBUS_MSG 读写操作(见例程) | | |
| 初始化错误代码(只有在 Done 位为1时有效): | | 0= 无错误 | | | | | | |
2. 调用 Modbus RTU 主站读写子程序MBUS_MSG,发送一个Modbus 请求; 
图 3. 调用Modbus RTU 主站读写子程序各参数意义如下: | | | 同一时刻只能有一个读写功能(即 MBUS_MSG)使能 | | 注意:建议每一个读写功能(即 MBUS_MSG)都用上一个 MBUS_MSG 指令的 Done 完成位来激活,以保证所有读写指令循环进行(见例程)。 | | | | | | | | | | | | | | 注意: | | | | | | |
|
| | | | 10001 至 1xxxx - 开关量输入
| | | | | | | | 注意: Modbus主站可读/写的最大数据量为 120个字(是指每一个 MBUS_MSG 指令) | | | | | | 2. 如果是写指令,要写出的数据放到这个数据区中 | | | | | | | | | | 0 = 无错误 | | | | 4 = 请求参数错误(slave address, Modbus address, count, RW) | | | | | | | | | | | | | |
常见的错误:
- 如果多个 MBUS_MSG 指令同时使能会造成 6 号错误
- 从站 delay 参数设的时间过长会造成主站 3 号错误
- 从站掉电或不运行,网络故障都会造成主站 3 号错误
3. 在 CPU 的 V 数据区中为库指令分配存储区(Library Memory) Modbus Master 指令库需要一个286个字节的全局 V 存储区。调用STEP 7 - Mciro/WIN SMART Instruction Library(指令库)需要分配库指令数据区(Library Memory)。库指令数据区是相应库的子程序和中断程序所要用到的变量存储空间。 如果在编程时不分配库指令数据区,编译时会产生许多相同的错误。 操作步骤: 1)在指令树的Project(项目)中,以鼠标右键单击Program Block(程序块),在弹出的快捷菜单中选择Library Memory。如图4所示: 
图4. “库存储器”按钮2)在弹出的选项卡中设置库指令数据区,如图5所示:
图5. 缺省情况下是从VB0开始,但要保证该存储器使用地址范围与其他程序使用的地址不能有重叠。按“建议地址”按钮也可以自动分配。 可以使用 “建议地址” 设置数据区,但要注意编程软件设置的数据区地址,只考虑到了其他一般寻址,而未考虑到诸如Modbus数据保持寄存器区等的设置。应当确保不与其他任何已使用的数据区重叠、冲突。不应重复按 “建议地址” 按钮,否则也会造成混乱。 关于 Modbus RTU 主站协议库的补充说明Modbus 地址 通常 Modbus 地址由 5 位数字组成,包括起始的数据类型代号,以及后面的偏移地址。Modbus Master 协议库把标准的 Modbus 地址映射为所谓 Modbus 功能号,读写从站的数据。Modbus Master 协议库支持如下地址: - 00001 - 09999:数字量输出( 线圈)
- 10001 - 19999:数字量输入(触点)
- 30001 - 39999:输入数据寄存器(通常为模拟量输入)
- 40001 - 49999:数据保持寄存器
Modbus Master 协议库支持的功能 为了支持上述 Modbus 地址的读写,Modbus Master 协议库需要从站支持下列功能: 表 1. 需要从站支持的功能
Modbus 地址 | 读/写 | Modbus 从站须支持的功能 | 00001 - 09999
数字量输出 | 读 | 功能 1 | 写 | 功能 5:写单输出点
功能 15:写多输出点 | 10001 - 19999
数字量输入 | 读 | 功能 2 | 写 | - | 30001 - 39999
输入寄存器
| 读 | 功能 4 | 写 | - | 40001 - 49999
保持寄存器 | 读 | 功能 3 | 写 | 功能 6:写单寄存器单元
功能 16:写多寄存器单元 |
Modbus 地址和 S7-200 SMART 存储区地址的映射 S7-200 SMART 通过 Modbus Master 和 Slave 协议库通信时,Modbus 地址和 S7-200 SMART CPU内存储区地址的 映射关系都类似。 Modbus 保持寄存器地址映射举例: Modbus 保持寄存器地址
40001
| 12 34 | 40002 | 56 78 | 40003 | 9A BC |
| | S7-200 SMART 存储区字寻址
VW200
| 12 34 | VW202 | 56 78 | VW204 | 9A BC |
| | S7-200 SMART 存储区字节寻址
| VB200 | 12 | VB201 | 34 | VB202 | 56 | VB203 | 78 | VB204 | 9A | VB205 | BC |
|
Modbus 数字量地址映射举例: 位地址(0xxxx 和 1xxxx)数据总是以字节为单位打包读写。第一个字节中的最低有效位对应 Modbus 地址的起始地址。如下图所示:
图6 . 数字量地址映射举例
|