首页 理论教育 S7-200 PLC Modbus协议简明使用指南

S7-200 PLC Modbus协议简明使用指南

更新时间:2025-01-10 工作计划 版权反馈
【摘要】:大部分时间用于计算请求和响应的Modbus CRC上。Modbus从站协议——Modbus通信使用CRC以确保通讯信息的完整性。Modbus从站协议使用一个预计算值的表以减少信息处理所需的时间。表8-12定义由MBUS_MSG指令返回的Modbus主站MBUS_MSG执行错误。

1.S7-200Modbus协议的初始化和执行时间

Modbus主站协议———Modbus主站协议每次扫描只需少量时间即可执行MBUS_CTRL指令。当MBUS_CTRL正在初始化Modbus主站(第1次扫描)时,时间约为1.11ms,在后续扫描中时间约为0.41ms。

当MBUS_MSG子程序执行请求时,延长扫描时间。大部分时间用于计算请求和响应的Modbus CRC上。CRC(循环冗余校验)确保通信信息的完整性。对请求和响应的每个字,扫描时间约延长1.85ms。最大请求/响应(读或写120个字)将扫描时间延长约222ms。当从从站接收响应时,主要由读请求延长扫描时间,当发送请求时,读请求对扫描时间的影响较小。当将数据发送至从站时,主要由写请求延长扫描时间,而在接收响应时,写请求影响程度较小。

Modbus从站协议——Modbus通信使用CRC(循环冗余检验)以确保通讯信息的完整性。Modbus从站协议使用一个预计算值的表以减少信息处理所需的时间。CRC表的初始化需要大约240ms。该初始化在MBUS_INIT内部完成,而且通常是在进入RUN模式的第一个用户程序周期完成。如果MBUS_INIT子程序和任何其他用户初始化所需的时间超过500ms的循环时间监控,需要复位时间看门狗并保持输出使能(如果扩展模块要求)。输出模块时间看门狗可通过写模板输出复位。

当MBUS_SLAVE子程序进行请求服务时,循环时间增加。由于大部分时间消耗在计算Modbus CRC上,所以对于每一字节的请求和响应,循环时间增加420ms。最大的请求/响应(读或写120个字)可增加循环时间大约100ms。

2.S7-200Modbus地址

Modbus地址通常是包含数据类型和偏移量的5个字符值。第一个字符确定数据类型,后面四个字符选择数据类型内的正确数值。

Modbus主站寻址——Modbus主站指令可将地址映射到正确功能,然后发送至从站设备。Modbus主站指令支持下列Modbus地址:

①00001~09999是离散输出(线圈)。

②10001~19999是离散输入(触点)。

③30001~39999是输入寄存器(通常是模拟量输入)。

④40001~49999是保持寄存器。

所有Modbus地址都基于1,即从地址1开始第一个数据值。有效地址范围取决于从站设备。不同的从站设备将支持不同的数据类型和地址范围。

Modbus从站寻址———Modbus从站设备将地址映射到正确功能。Modbus从站指令支持以下地址:

①00001~00128是实际输出,对应于Q0.0~Q15.7。

②10001~10128是实际输入,对应于I0.0~I15.7。

③30001~30032是模拟输入寄存器,对应于AIW0~AIW62。

④40001~04XXXX是保持寄存器,对应于V区。

所有Modbus地址都是从1开始编号的。表8-8为Modbus地址与S7-200地址的对应关系。

表8-8 Modbus地址与S7-200地址的对应关系

978-7-111-49003-6-Chapter08-54.jpg

3.S7-200Modbus协议指令库的安装

要想正确使用Modbus协议指令,必须在编程软件STEP 7-Micro/WIN中安装库文件“Toolbox_V32-STEP 7-Micro/WIN 32 Instruction Library”,如图8-39所示。此库文件可以在西门官方购买,或者可以问西门子人员申请。解压此文件,双击“978-7-111-49003-6-Chapter08-55.jpg”安装,安装完成后,打开编程软件STEP7-Micro/WIN,可在“库”中找到Modbus协议指令,如图8-40所示。

978-7-111-49003-6-Chapter08-56.jpg

图8-39 S7-200库文件

978-7-111-49003-6-Chapter08-57.jpg

图8-40 Modbus协议指令

4.S7-200Modbus主站指令使用

(1)MBUS_CTRL指令(初始化主站)

使用S7-200端口0的MBUS_CTRL指令(或端口1的MBUS_CTRL_P1指令)来初始化、监控或禁用Modbus通信。MBUS_CTRL指令必须无错误地执行,然后才能使用MBUS_MSG指令。在继续下一步指令之前,完成当前的指令并立即设置Done位。在EN输入接通时,每次扫描都必须调用MBUS_CTRL指令,以便使它能够监控由MBUS_MSG指令启动的所有待处理信息的进程,否则Modbus主站协议将不能正常工作。

MBUS_CTRL指令(初始化主站)只要用鼠标拖动或双击即可以添加到程序中,其输入/输出参数见表8-9。

MBUS_CTRL指令执行结果Error输出。表8-10定义因执行MBUS_CTRL指令而引起的错误状态。

(2)MBUS_MSG指令

MBUS_MSG指令(或对端口1使用MBUS_MSG_P1)用于启动对Modbus从站的请求,并处理响应。

表8-9 MBUS_CTRL指令的参数

978-7-111-49003-6-Chapter08-58.jpg

表8-10 MBUS_CTRL执行错误代码

978-7-111-49003-6-Chapter08-59.jpg

当EN输入和第一个输入均为接通时,MBUS_MSG指令启动对Modbus从站的请求。发送请求、等待响应和处理响应通常要求多个扫描。EN输入必须接通才能启用发送请求,并应在Done位置位之前保持接通。(www.xing528.com)

注意:一次只能有一个MBUS_MSG指令处于活动状态。如果启用了一个以上MBUS_MSG指令,则将处理第一个MBUS_MSG指令,所有后续MBUS_MSG指令将被中止,并输出错误代码6。

MBUS_MSG指令(初始化主站)只要用鼠标拖动或双击即可以添加到程序中,其输入/输出参数见表8-11。

MBUS_MSG指令执行结果Error输出。表8-12定义由MBUS_MSG指令返回的Modbus主站MBUS_MSG执行错误。低编号的错误代码(1~8)是由MBUS_MSG指令检测的错误。这些错误代码通常指示MBUS_MSG指令的输入参数错误,或从站接收响应错误。奇偶校验和CRC错误指示存在响应,但数据没有正确接收,这通常由电气故障引起,例如连接不良或电气噪声。

高编号的错误代码(从101开始)是由Modbus从站设备返回的错误。这些错误指示从站不支持所请求的功能,或Modbus从站设备不支持所请求的地址(数据类型或地址范围)。

表8-11 MBUS_MSG指令的参数

978-7-111-49003-6-Chapter08-60.jpg

表8-12 Modbus主站MBUS_MSG执行错误代码

978-7-111-49003-6-Chapter08-61.jpg

(续)

978-7-111-49003-6-Chapter08-62.jpg

5.S7-200Modbus从站指令使用

(1)MBUS_INIT指令(初始化从站)

MBUS_INIT指令用于使能和初始化或禁止Modbus通信。MBUS_INIT指令必须无错误的执行,然后才能够使用MBUS_SLAVE指令。在继续执行下一条指令前,MBUS_INIT指令必须执行完并且Done位被立即置位。

MBUS_INIT指令(初始化主站)只要用鼠标拖动或双击即可添加到程序中,其输入/输出参数见表8-13。

表8-13 MBUS_INIT指令的参数

978-7-111-49003-6-Chapter08-63.jpg

(续)

978-7-111-49003-6-Chapter08-64.jpg

MBUS_INIT指令执行结果Error输出。表8-14定义因执行MBUS_INIT指令而引起的错误状态。

表8-14 MBUS_INIT执行错误代码

978-7-111-49003-6-Chapter08-65.jpg

(2)MBUS_SLAVE指令

MBUS_SLAVE指令用于服务来自Modbus主站的请求,必须在每个循环周期都执行,以便检查和响应Modbus请求。

MBUS_SLAV指令只要用鼠标拖动或双击即可以添加到程序中,其输入/输出参数见表8-15。

表8-15 MBUS_SLAV指令的参数

978-7-111-49003-6-Chapter08-66.jpg

6.S7-200PLCModbus协议使用步骤

1)S7-200程序中使用Modbus主站指令遵循以下步骤:

①在程序中插入MBUS_CTRL指令,在每次扫描时执行MBUS_CTRL,用SM0.0在主程序中调用。可以使用MBUS_CTRL指令初始化或改变Modbus通信参数。当插入MBUS_CTRL指令时,几个隐藏的子程序和中断服务程序会自动地添加到程序中。

②使用库存储器命令为Modbus主站协议指令所需的V存储器分配一个起始地址。

③在程序中输入一个或多个MBUS_MSG指令。可以按要求将多个MBUS_MSG指令添加到程序中,但每次只有一个指令处于活动状态。当存在多个从站需要访问时,可以用MBUS_MSG的Done位采用轮询的方式,即上一个MBUS_MSG的Done位是下一个MBUS_MSG使能的条件。

④连接S7-200 CPU上的端口0(或对端口1库,使用端口1)和Modbus从站设备之间的通信电缆。

2)S7-200程序中使用Modbus从站指令请遵循以下步骤:

①在程序中插入MBUS_INIT指令并且只在一个循环周期中执行该指令,用SM0.0来调用,即仅在首个扫描周期调用一次。MBUS_INIT指令可用于对Modbus通信参数的初始化或修改。当插入MBUS_INIT指令时,几个隐藏的子程序和中断服务程序会自动地添加到程序中。

②使用库存储器命令为Modbus从站协议指令所要求的V存储器分配一个起始地址。

③在程序中只使用一个MBUS_SLAVE指令。该指令在每个循环周期中执行,为接收到的所有请求提供服务。

④使用通信电缆将S7-200的端口0和Modbus主站设备连接在一起。

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

我要反馈