首页 理论教育 S7-200PLC和Modbus通信的实现方法

S7-200PLC和Modbus通信的实现方法

时间:2023-06-17 理论教育 版权反馈
【摘要】:通过Modbus协议指令,可以将S7-200组态为Modbus主站或从站设备。CPU的固化程序版本不低于V2.0才能支持Modbus指令库。表4-14 Modbus地址与S7-200地址的对应关系Modbus从站协议允许对Modbus主站可访问的输入、输出、模拟输入和保持寄存器(V区)的数量进行限定。初始化主设备指令MBUS_CTRL用于S7-200端口0可初始化、监视或禁用Modbus通信。MBUS_INIT指令用于启用、初始化或禁止Modbus通信。

S7-200PLC和Modbus通信的实现方法

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地址的对应关系

978-7-111-51393-3-Chapter04-62.jpg

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所示。

978-7-111-51393-3-Chapter04-63.jpg

图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指令的参数表

978-7-111-51393-3-Chapter04-64.jpg

MBUS_MSG指令(或用于端口1的MBUS_MSG_P1)用于起动对Modbus从站的请求,并处理应答。当EN输入和“首次”输入打开时,MBUS_MSG指令起动对Modbus从站的请求。发送请求、等待应答并处理应答。EN输入必须打开,以启用请求的发送,并保持打开,直到“完成”位被置位。此指令在一个程序中可以执行多次。其各输入/输出参数见表4-16。

表4-16 MBUS_MSG指令的参数表

978-7-111-51393-3-Chapter04-65.jpg

【关键点】指令MBUS_CTRL的EN要接通,在程序中只能调用一次,MBUS_MSG指令可以在程序中多次调用,要特别注意区分Addr、DataPtr和Slave三个参数。

2)从设备指令。MBUS_INIT指令用于启用、初始化或禁止Modbus通信。在使用MBUS_SLAVE指令之前,必须正确执行MBUS_INIT指令。指令完成后立即设定“完成”位,才能继续执行下一条指令。其各输入/输出参数见表4-17。

表4-17 MBUS_INIT指令的参数表

978-7-111-51393-3-Chapter04-66.jpg

MBUS_SLAVE指令用于为Modbus主设备发出的请求服务,并且必须在每次扫描时执行,以便允许该指令检查和回答Modbus请求。在每次扫描且EN输入开启时,执行该指令。其各输入/输出参数见表4-18。

表4-18 MBUS SLAVE指令的参数表

978-7-111-51393-3-Chapter04-67.jpg

【关键点】MBUS INIT指令只在首次扫描时执行一次,MBUS SLAVE指令无输入参数。

(3)编写程序

主站和从站的程序如图4-43和图4-44所示。

978-7-111-51393-3-Chapter04-68.jpg

图4-43 主站程序

978-7-111-51393-3-Chapter04-69.jpg

图4-44 从站程序

【关键点】在调用了Modbus指令库的指令后,还要对库存储区进行分配,这是非常重要的,否则即使编写程序没有语法错误,程序编译后也会显示至少几十个错误。分配库存储区的方法如下:先选中“程序块”,再单击右键,弹出快捷菜单,并单击“库存储区”,如图4-45所示。再在“库存储区”中填写Modbus指令所需要用到的存储区的起始地址,如图4-46所示。示例中Modbus指令所需要用到的存储区为VB100~VB383,这个区间的V存储区在后续编程是不能使用的。

978-7-111-51393-3-Chapter04-70.jpg

图4-45 选定库存储区

978-7-111-51393-3-Chapter04-71.jpg

图4-46 设定库存储区的范围

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈