首页 理论教育 地铁设备中PLC的Modbus通信

地铁设备中PLC的Modbus通信

时间:2023-10-11 理论教育 版权反馈
【摘要】:Modbus传输协议定义了控制器可以识别和使用的信息结构,而无须考虑通信网络的拓扑结构。Modbus通信标准协议可以通过各种传输方式传播,如RS-232C、RS-485、光纤、无线电等。Modubs协议指令可以将S7-200组态作为Modbus RTU从站设备工作,可与Modbus主站设备进行通信。两个Modbus主站库在其他方面均完全相同。Modbus从站库仅支持端口0通信。表5-8MBUS_MSG指令Modbus地址通常由5位数字组成,包括起始的数据类型代号,以及后面的偏移地址。从站初始化程序MBUS_INIT指令用于初始化或禁止Modbus通信。

地铁设备中PLC的Modbus通信

1.Modbus协议简介

Modbus是一种串行通信协议,是Modicon公司于1979年为使用可编程逻辑控制器(PLC)而发布的。事实上,它已经成为工业领域通信协议标准,并且是工业电子设备之间相当常用的连接方式。

Modbus传输协议定义了控制器可以识别和使用的信息结构,而无须考虑通信网络的拓扑结构。它定义了各种数据帧格式,描述了控制器访问另一设备的过程,规定如何做出应答响应,以及可检查和报告的错误

Modbus具有两种串行传输模式:ASCII和RTU。它们定义了数据打包、解码的不同方式。支持Modbus协议的设备一般都支持RTU格式。

Modbus是一种单主站的主/从通信模式。Modbus网络上只能有一个主站存在,主站在Modbus网络上没有地址,从站的地址范围为0~247,其中0为广播地址,从站的实际地址范围为1~247。

Modbus通信标准协议可以通过各种传输方式传播,如RS-232C、RS-485、光纤、无线电等。在S7-200 CPU通信口上实现的是RS-485半双工通信,使用的是S7-200 PLC的自由口功能。

STEP7-Micro/WIN指令库通过包括预组态的子程序和专门设计用于Modbus通信的中断例行程序,使与Modbus主站和从站设备的通信变得更简单。Modubs协议指令可以将S7-200组态作为Modbus RTU从站设备工作,可与Modbus主站设备进行通信。Modbus主站指令可将S7-200组态作为Modbus RTU主站设备工作,并与一个或多个Modbus从站设备通信。可以在STEP 7-Micro/WIN指令树的库文件夹中安装这些Modbus指令。Modbus主站协议库有两个版本,一个版本使用CPU的端口0,另一个版本使用CPU的端口1。端口l的Modbus指令库在POU名称后附加了一个Pl(如MBUS_CTRL_Pl),用于指示POU使用CPU上的端口1。两个Modbus主站库在其他方面均完全相同。Modbus从站库仅支持端口0通信。

2.S7-200 Modbus RTU主站指令库

Modbus RTU主站指令库的功能是通过在用户程序中调用预先编好的程序功能块实现的,该库对Port0和Port1有效,并设置通信口工作在自由口模式下。Modbus RTU主站指令库使用了一些用户中断功能,编写其他程序时,不能在用户程序中禁止中断。当S7-200 CPU端口用于Modbus主站协议通信时,将无法用于其他用途,包括与STEP7-Micro/WIN通信。

Modbus RTU主站指令库包括主站初始化程序MBUS_CTRL和读/写子程序MBUS_MSG,需要一个284 B的全局V存储区。

端口0的MBUS_CTRL指令(或端口1的MBUS_CTRL_Pl指令)用来初始化、监控或禁用Modbus通信。MBUS_CTRL指令必须无错误地执行,然后才能使用MBUS_MSG指令。每次扫描(包括第一次扫描)都必须调用MBUS_CTRL指令,以便监控由MBUS_MSG指令启动的所有待处理信息的进程,否则Modbus主站协议将不能正常工作。MBUS_CTRL的指令格式如表5-7。

表5-7 MBUS_CTRL指令

端口0的MBUS_MSG指令(或端口1的MBUS_MSG Pl指令)用于启动到Modbus从站的请求,并处理响应。发送请求、等待响应和处理响应通常要求多个扫描周期。一次只能有一个MBUS_MSG指令处于活动状态。如果启用了一个以上MBUS_MSG指令,则将处理第一个MBUS_MSG指令,所有后续MBUS_MSG指令将被终止,并输出错误代码6。MBUS_MSG的指令格式如表5-8。

表5-8 MBUS_MSG指令

Modbus地址通常由5位数字组成,包括起始的数据类型代号,以及后面的偏移地址。Modbus主站指令库把标准的Modbus地址映射为Modbus功能号,读/写从站的数据。Modbus主站指令库支持以下地址:

• 00001~09999:数字量输出(线圈);

• 10001~19999:数字量输入(触点);

• 30001~39999:输入数据寄存器(通常为模拟量输入);

• 40001~49999:数据保持寄存器。

为了支持对Modbus地址的读/写,Modbus主站指令库需要从站支持相应的功能,如表5-9所示。

表5-9 Modbus从站需支持的功能(www.xing528.com)

Modbus保持寄存器地址与S7-200 V存储区地址的映射关系,如图5-2所示(输入参数DataPtr为&VB200)。位地址(0xxxx和1xxxx)数据总是以字节为单位打包读/写。首字节中的最低有效位对应Modbus地址的起始地址,如图5-3所示。

图5-2 Modbus保持寄存器与S7-200 V存储区的地址映射关系

图5-3 数字量位地址映射关系

3.S7-200 Modbus RTU从站指令库

S7-200 CPU上的通信口Port0可以支持Modbus RTU协议,成为Modbus RTU从站。此功能是通过S7-200的自由口通信模式实现的。Modbus RTU从站功能是通过指令库中预先编好的程序功能块实现的。Modbus RTU从站指令库只支持CPU上的通信端口0(Port0)。

当S7-200 CPU端口用于Modbus从站协议通信时,它无法用于其他用途,包括STEP 7-Micro/WIN通信。

Modbus RTU从站指令库包括从站初始化程序MBUS_INIT和响应主站请求子程序MBUS_SLAVE,需要一个779 B的全局V存储区。

从站初始化程序MBUS_INIT指令用于初始化或禁止Modbus通信。MBUS_INIT指令必须无错误地执行,然后才能使用MBUS_SLAVE指令。在继续执行下一条指令前,MBUS_INIT指令必须执行完并且Done位被立即置位。MBUS_INIT子程序可以用SM0.1调用,在第一个循环周期内执行一次,其指令格式如表5-10所示。

表5-10 MBUS _INIT指令

MBUS_SLAVE指令用于服务来自Modbus主站的请求,必须在每个循环周期都执行,以便检查和响应Modbus请求。MBUS SLAVE的指令格式如表5-11所示。

表5-11 MBUS_SLAVE指令

Modbus地址总是以00001、30004之类的形式出现。S7-200内部的数据存储区与Modbus的0、1、3、4共4类地址的对应关系见表5-12。

表5-12 Modbus地址对应表

Modbus RTU从站指令库支持特定的Modbus功能。访问使用此指令库的主站必须遵循这个指令库的要求。Modbus RTU从站指令库支持的功能如表5-13所示。

表5-13 Modbus RTU从站功能码

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

我要反馈