1.使用Modbus协议库
STEP7-Micro/WIN指令库包括专门为Modbus通信设计的预先定义的子程序和中断服务程序,使得与Modbus设备的通信变得更简单。通过Modbus协议指令,可以将S7-200组态为Modbus主站或从站设备。
可以在STEP7-Micro/WIN指令树的库文件夹中找到这些指令。当在程序中输入一个Modbus指令时,自动将一个或多个相关的子程序添加到项目中。
西门子指令库以一个独立的光盘销售,在购买和安装了1.1版本的西门子指令库后,任何后续的STEP 7-Micro/WIN V3.2x和V4.0升级都会在不需要附加费用的情况下自动升级指令库(当增加或修改库时)。
【关键点】STEP7-Micro/WIN V4.0 SP9 SP4(含)以前的版本,指令库只有从站指令,之后的版本才有主站指令库,如果需要SP4(含)以前S7-200作主站,读者必须在自由口模式下,按照Modbus协议编写程序,这会很麻烦。CPU的固化程序版本不低于V2.0才能支持Modbus指令库。
2.Modbus的地址
Modbus地址通常是包含数据类型和偏移量的5个字符值。第一个字符确定数据类型,后面四个字符选择数据类型内的正确数值。
(1)主站寻址
Modbus主站指令可将地址映射到正确功能,然后发送至从站设备。Modbus主站指令支持下列Modbus地址:
00001~09999是离散输出(线圈)。
10001~19999是离散输入(触点)。
30001~39999是输入寄存器(通常是模拟量输入)。
40001~49999是保持寄存器。
所有Modbus地址都是基于1,即从地址1开始第一个数据值。有效地址范围取决于从站设备。不同的从站设备将支持不同的数据类型和地址范围。
(2)从站寻址
Modbus主站设备将地址映射到正确功能。Modbus从站指令支持下列地址:
00001~00128是实际输出,对应于Q0.0~Q15.7。
10001~10128是实际输入,对应于I0.0~I15.7。
30001~30032是模拟输入寄存器,对应于AIW0~AIW62。
40001~04XXXX是保持寄存器,对应于V区。
所有Modbus地址都是从1开始编号的。表4-14为Modbus地址与S7-200地址的对应关系。
表4-14 Modbus地址与S7-200地址的对应关系
Modbus从站协议允许对Modbus主站可访问的输入、输出、模拟输入和保持寄存器(V区)的数量进行限定。例如,若HoldStart是VB0,那么Modbus地址40001对应S7-200地址的VB0。
3.S7-200 PLC之间的Modbus通信应用举例
以两台CPU 226CN之间的Modbus现场总线通信为例,介绍S7-200 PLC之间的Modbus现场总线通信。
【例4-5】模块化生产线的主站为CPU 226CN,从站为CPU 226CN,将主站VW1000~VW1003的内容实时传送到从站的VW1000~VW1003。
【解】
(1)主要软硬件配置
①1套STEP7-Micro/WIN V4.0 SP9 SP7。
②1根PC/PPI电缆(或者CP5611卡)。
③2台CPU 226CN。(www.xing528.com)
④1根PROFIBUS网络电缆(含两个网络总线连接器)。
Modbus现场总线硬件配置如图4-42所示。
图4-42 Modbus现场总线硬件配置图
(2)相关指令介绍
1)主设备指令。初始化主设备指令MBUS_CTRL用于S7-200端口0(或用于端口1的MBUS_CTRL_P1指令)可初始化、监视或禁用Modbus通信。在使用MBUS_MSG指令之前,必须正确执行MBUS_CTRL指令,指令执行完成后,立即设定“完成”位,才能继续执行下一条指令。其各输入/输出参数见表4-15。
表4-15 MBUS_CTRL指令的参数表
MBUS_MSG指令(或用于端口1的MBUS_MSG_P1)用于起动对Modbus从站的请求,并处理应答。当EN输入和“首次”输入打开时,MBUS_MSG指令起动对Modbus从站的请求。发送请求、等待应答并处理应答。EN输入必须打开,以启用请求的发送,并保持打开,直到“完成”位被置位。此指令在一个程序中可以执行多次。其各输入/输出参数见表4-16。
表4-16 MBUS_MSG指令的参数表
【关键点】指令MBUS_CTRL的EN要接通,在程序中只能调用一次,MBUS_MSG指令可以在程序中多次调用,要特别注意区分Addr、DataPtr和Slave三个参数。
2)从设备指令。MBUS_INIT指令用于启用、初始化或禁止Modbus通信。在使用MBUS_SLAVE指令之前,必须正确执行MBUS_INIT指令。指令完成后立即设定“完成”位,才能继续执行下一条指令。其各输入/输出参数见表4-17。
表4-17 MBUS_INIT指令的参数表
MBUS_SLAVE指令用于为Modbus主设备发出的请求服务,并且必须在每次扫描时执行,以便允许该指令检查和回答Modbus请求。在每次扫描且EN输入开启时,执行该指令。其各输入/输出参数见表4-18。
表4-18 MBUS SLAVE指令的参数表
【关键点】MBUS INIT指令只在首次扫描时执行一次,MBUS SLAVE指令无输入参数。
(3)编写程序
主站和从站的程序如图4-43和图4-44所示。
图4-43 主站程序
图4-44 从站程序
【关键点】在调用了Modbus指令库的指令后,还要对库存储区进行分配,这是非常重要的,否则即使编写程序没有语法错误,程序编译后也会显示至少几十个错误。分配库存储区的方法如下:先选中“程序块”,再单击右键,弹出快捷菜单,并单击“库存储区”,如图4-45所示。再在“库存储区”中填写Modbus指令所需要用到的存储区的起始地址,如图4-46所示。示例中Modbus指令所需要用到的存储区为VB100~VB383,这个区间的V存储区在后续编程是不能使用的。
图4-45 选定库存储区
图4-46 设定库存储区的范围
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。