Modbus 指令

本节内容:

1、S7-1200 做为Modbus RTU 主站

2、S7-1200 做为Modbus RTU 从站

3、S7-1200 做为Modbus RTU 主站

 

 

S7-1200 做为Modbus RTU 主站

S7-1200 支持Modbus RTU通讯模式的模块可做为Modbus RTU主站。如下以 CPU1215C DC/DC/DC和CM1241 RS485 模块为例,介绍S7-1200 Modbus RTU 主站通讯组态及编程步骤。编程

硬件和软件需求及所完成的通讯任务:数组

硬件:
① CPU1215C DC/DC/DC (定货号: 6ES7 215-1AG31-0XB0)
② CM1241 RS485 (定货号:6ES7 241-1CH30-0XB0)
③ PS 307电源(定货号:6ES7307-1KA02-0AA0) 
④ PC(带以太网卡) 
⑤ TP以太网电缆网络

软件:
① STEP 7 Professional V11 SP2 UPD4+HSP
② ModSim(该软件是第三方软件,能够从 Internet 网络下载)

所完成的通讯任务:
将Modbus RTU从站ModSim中Modbus地址从40001开始的5个字中的数据,分别读取到Modbus RTU主站CPU1215C 中地址从DB1.DBW0开始的5 个字中。测试

1.组态Modbus RTU 通讯模块spa

在硬件目录里找到“通讯模块”→“点到点”→“CM1241(RS485)”,双击或拖拽此模块至CPU左侧便可,以下图1所示:3d

图1 组态通讯模块指针

接下来,在“设备视图”中用鼠标选中CM1241(RS485)模块,在“属性”→“端口组态”中配置此模块硬件接口参数。以下图2所示:htm

如下以传输率=9.6Kbps,奇偶校验=无奇偶校验,数据位=8位字符,中止位=1,其它保持默认设置为例。blog

图2 RS485 端口设置接口

最后在“硬件标识符”里确认一下硬件标识符为271,以下图3所示:

图3 硬件标识符

2.添加启动OB

在项目树下选择“CPU1215C DC/DC/DC”→“程序块”→“添加新块”,在弹出的窗口中选择“OB 组织块”→ “Startup”,添加启动OB 100,以下图4所示:

图4 添加启动OB

3.调用MB_COMM_LOAD指令

为使端口一启动就被设置为Modbus RTU通讯模式,可在OB 100中调用“MB_COMM_LOAD”指令。调用“MB_COMM_LOAD”指令时会自动弹出建立相应背景数据块的界面,以下图5所示:

图5 调用MB_COMM_LOAD指令

点击“确认”为该指令建立背景数据块后,为各输入/输出引脚分配地址。尤为需注意MB_DB输入引脚需指向“MB_MASTER”指令的背景数据块,以下图6所示:

注意: “MB_COMM_LOAD”指令输入位“REQ”需使用上升沿触发。因为OB 100只在S7-1200启动时执行一次,所以,此例中将“REQ”设为“TRUE”。

图6 MB_COMM_LOAD指令

MB_COMM_LOAD指令参数意义以下表1所示:

引脚

说明

EN

使能端

REQ

在上升沿执行该指令

PORT

通讯端口的硬件标识符

BAUD

波特率选择:3600,6000,12000,2400,4800,9600,19200,38400,57600,76800,115200 (注意:全部其它值均无效)

PARITY

奇偶检验选择:0-无;1-奇校验;2-偶校验

FLOW_CTRL

流控制选择:0-(默认值)无流控制

RTS_ON_DLY

RTS延时选择:0-(默认值)

RTS_OFF_DLY

RTS关断延时选择:0-(默认值)

RESP_TO

响应超时: 默认值 = 1000 ms。MB_MASTER 容许用于从站响应的时间(以毫秒为单位)。

MB_DB

对 MB_MASTER 或 MB_SLAVE 指令所使用的背景数据块。

DONE

完成位:指令执行完成且未出错置1

ERROR

错误位:0-未检测到错误;1-检测到错误。在参数STATUS中输出错误代码。

STATUS

表1 MB_COMM_LOAD指令参数意义

4.建立DATA_PTR数据发送、接收缓冲区

经过“程序块”→ “添加新块”,选择“数据块(DB)”建立 DB 块,选择“标准与S7- 300/400兼容” ,点击“确认”键。在DB中建立数据类型为5个字的数组,以下图7所示:

注意:DATA_PTR数据发送、接收缓冲区使用的DB访问类型必须是标准与S7- 300/400兼容。

图7 建立DATA_PTR 数据发送、接收缓冲区

5.调用MB_MASTER指令

在OB1中调用“MB_MASTER”指令,调用该指令时会自动弹出建立相应背景数据块的界面,以下图8所示:

图8 调用MB_MASTER指令

点击“确认”为该指令建立背景数据块后,并为各输入/输出引脚分配地址,以下图9所示:

注意:“MB_MASTER”指令的输入位“REQ”必须使用上升沿触发。

如下以S7-1200做为Modbus RTU主站,用F03功能码读取Modbus RTU从站2,从Modbus地址40001开始的五个字,接收的数据存放在缓冲区DB3.DBW0开始区域为例。设置以下所示:MB_ADDR=2,MODE=0,DATA_ADDR=40001,DATA_LEN=5。

地址对应关系以下表2所示:

Modbus RTU主站CPU1215C 数据缓冲区地址 Modbus RTU从站Modbus地址
DB3.DBW0 40001
DB3.DBW2 40002
DB3.DBW4 40003
DB3.DBW6 40004
DB3.DBW8 40005

表2 Modbus地址对应关系

图9 MB_MASTER指令

MB_MASTER指令参数意义以下表3所示:

引脚 说明

EN

使能端

REQ

在上升沿执行该指令,请求将数据发送或读取到Modbus从站

MB_ADDR

Modbus RTU从站地址。默认地址范围:0至247;扩展地址范围:0至65535。值0被保留用于将消息广播到全部Modbus从站。

MODE

模式选择:指定请求类型

DATA_ADDR

从站中的起始地址:指定Modbus从站中将供访问的数据的起始地址。

DATA_LEN

数据长度:指定要在该请求中访问的位数或字数。

DATA_PTR

数据指针: 指向要写入或读取的数据的 M 或 DB 地址(DB访问类型必须是标准与S7-300/400兼容)。

DONE

完成位:上一请求已完成且没有出错后,DONE 位将保持为 TRUE 一个扫描周期时间。

BUSY

0 – 无正在进行的 MB_MASTER 操做; 1 – MB_MASTER 操做正在进行

EEROR

错误位: 上一请求因错误而终止后,ERROR 位将保持为 TRUE 一个扫 
描周期时间。 STATUS 参数中的错误代码值仅在 ERROR =TRUE 的一个扫描周期内有效。

STATUS

错误代码

表3 MB_MASTER指令参数意义

关于MODE,DATA_ADDR,DATA_LEN可在下表4中查看:

MB_MASTER Modbus功能
 

Modbus地址参数

地址类型

Modbus数据长度参数

Modbus功能

模式0

读取

00001到09999

输出位

1到2000

01

10001到19999

输入位

1到2000

02

30001到39999

输入寄存器

1到125

04

40001到49999

400001到465535(扩展)

保持寄存器

1到125

03

模式1
写入

00001到09999

输出位

1(单个位)

05

40001到49999

400001到465535(扩展)

保持寄存器

1(单个字)

06

00001到09999

输出位

2到1968

15

40001到49999

400001到465535(扩展)

保持寄存器

2到123

16

模式2
有些Modbus从站不支持使用Modbus功能05H或06H写入单个位或字。在这样的状况下,可经过模式2强制使用Modbus功能15H或16H写入单个位或字

写入

 

00001到09999

输出位

2到1968

15

40001到49999

400001到465535(扩展)

保持寄存器

1到123

16

模式11

读出从站的通讯状态字和事件计数器:状态字指示指令的执行状态(0:未在执行;0xFFFF:正在执行)。 每次成功传送一条消息时,事件计数器值将递增。使用该功能时,忽略“MB_MASTER”指令的 DATA_ADDR 和 DATA_LEN 参数。

模式80

经过读取错误代码 (0x0000) 检查从站状态:每一个请求1个字

模式81

经过诊断代码 0x000A 复位从站的事件计数器:每一个请求1个字

表4 MB_MASTER Modbus功能表

6. Modbus 从站软件设置

注意:Modbus RTU从站采用ModSim软件测试,该软件是第三方软件,能够从 Internet 网络下载。

在打开的ModSim软件中创建链接,并设置RTU模式的参数:波特率Baud=9600,数据位Data=8,中止位Stop=1,校验Parity=NONE,以下图10所示:

图10 创建ModSim链接

选择“File”→“New”打开ModSim通讯界面,设置Modbus RTU从站的地址Device Id=2,开始地址Address=0001,数据长度Length=5,Modbus数据类型功能码03。分别双击各Modbus地址后的数据区,出现“Write Register"对话框,在此写入数据值,以下图11所示:

注意:Device Id设置必须与“MB_MASTER”指令中输入引脚“MB_ADDR”设置的地址一致。

图11 设置ModSim

7. Modbus RTU测试结果

在STEP 7 Professional V11 UPD4软件中打开该项目CPU1215C DC/DC/DC的“监控表”,触发“MB_MASER”指令的输入位M10.0。Modbus RTU主站将ModSim从站地址40001中的数值11,40002中的数值12,40003中的数值13,40004中的数值14,40005中的数值15,分别读取到了地址DB3.DBW0,DB3.DBW2,DB3.DBW4,DB3.DBW6,DB3.DBW8中,以下图12所示:

图12 Modbus RTU测试结果

S7-1200 Modbus RTU通讯模式的多地址或多站点轮询

多个CM 1241 RS485 通信模块之间可使用 PROFIBUS 电缆相互链接。能够将 1 个主站和最多 31 个 MODBUS 从站使用 PROFIBUS 电缆链接组网。

S7-1200 Modbus RTU轮询须要经过上一条”MB_MASTER“指令输出位“Done“=1来触发下一条“MB_MASTER“指令。具体说明及编程思路请参考如下连接:

如何使用STEP 7(TIA Portal)V11为SIMATIC S7-1200创建Modbus RTU通信?

http://support.automation.siemens.com/CN/view/zh/47756141

MB_COMM_LOAD和MB_MASTER指令STATUS错误代码

STATUS(W#16#) 说明
0000 端口无错误
8180 端口ID值无效
8181 波特率值无效
8182 奇偶校验值无效
8183 流控制值无效
8184 响应超时值无效
8185 MB_DB参数不是MB_MASTER或MB_SLAVE的背景数据块

表5 MB_COMM_LOAD指令STATUS错误代码

 

STATUS(W#16#)
说明
0000
无错误
80C8
从站超时。检查波特率,奇偶校验和从站的接线
80D1
接收方发出了暂停主动传输的流控制请求并在指定的等待时间内未从新激活该传输。

若是接收方在等待时间内未检测到 CTS,则在硬件流控制期间也会生成该错误。

80D2
因为没有从 DCE 接收到 DSR 信号,传送请求终止
80E0
接收缓冲区已满,消息被终止
80E1
奇偶校验错误,消息被终止
80E2
组帧错误,消息被终止
80E3
超时错误,消息被终止
80E4
指定长度超出总缓冲区大小,消息被终止
8180
无效端口ID值
8186
Modbus站地址无效
8188

对于广播调用,参数 MODE 的值无效。

8189
数据地址值无效
818A
数据长度值无效
818B
指向本地数据源/目标的指针无效
818C
DATA_PTR的指针无效:使用指向位存储区或访问类型为“标准 - 与 S7-300/400 兼容”的数据块的指针。
8200
端口正忙于处理传送请求

表6 MB_MASTER指令STATUS错误代码(指令的通讯和组态错误消息)

 

STATUS(W#16#) 从站的响应代码
说明
8380 -
CRC错误
8381 01
不支持此功能码
8382 03
数据长度错误
8383 02

数据地址错误或地址超出 DATA_PTR 的有效范围

8384 >03
数据值错误
8385 03
不支持此数据诊断代码
8386 -
响应中的功能代码与传送中的功能代码不匹配
8387 -
响应的从站错误
8388 -
从站对写请求的响应不正确

表7 MB_MASTER指令STATUS错误代码(Modbus 协议的错误消息)

常问问题:

如何检查S7-1200 通讯模块CM1241是否已被成功设置为Modbus RTU通讯模式?

可在程序或监控表中查看“MB_COMM_LOAD”指令的输出位“DONE”,“ERROR”以及“STATUS”状态来判断S7-1200 通讯模块CM1241是否已被成功设置为Modbus RTU通讯模式。

  • 若是该模块被成功设置为Modbus RTU通讯模式:“MB_COMM_LOAD”指令输出位“DONE”=1,“ERROR”=0,输出状态字“STATUS”=0;
  • 若是该模块未被成功设置为Modbus RTU通讯模式:“MB_COMM_LOAD”指令输出位“DONE”=0,“ERROR”=1,输出状态字“STATUS”输出错误代码。具体错误缘由可查看“MB_COMM_LOAD指令STATUS错误代码”表。

执行“MB_MASTER”指令,老是显示输出位“Busy”=1,为何?

由于端口正忙于处理传送请求。出现该错误时请检查“MB_MASTER“指令输入位”REQ“是否为上升沿触发,或是否有其它的多个“MB_MASTER”指令在执行。

经过执行“MB_MASTER”指令没法写入或读取Modbus RTU丛站地址的数据,但程序中监视“MB_MASTER”指令错误位“Error”=0,错误代码“STATUS”=16#0,为何?

“MB_MASTER”指令上一请求因错误而终止后,ERROR 位将保持为 TRUE 一个扫描周期时间,而且 STATUS 参数中的错误代码值仅在 ERROR =TRUE 的一个扫描周期内有效,所以没法经过程序或监控表查看到。可采用以下所示的编程方式将ERROR 和 STATUS 参数读出。

S7-1200 做为Modbus RTU 主站,如何对Modbus RTU从站进行0-65535扩展寻址?

一般,“MB_MASTER”指令的背景数据块“MB_MASTER_DB”中的“EXTENDED_ADDRESSING”默认为0,能够对Modbus RTU从站地址0-247进行访问。

将“MB_MASTER”指令的背景数据块“MB_MASTER_DB”中的“EXTENDED_ADDRESSING”设置为1,才能对Modbus RTU从站进行0-65535扩展寻址。可按照以下步骤设置“EXTENDED_ADDRESSING”:

首先找到“系统块”→“程序资源”,双击“MB_MASTER_DB”,在“MB_MASTER”指令的背景数据块“MB_MASTER_DB”中查看“EXTENDED_ADDRESSING”。

在“监控表”内输入“MB_MASTER_DB.EXTENDED_ADDRESSING”,将该位置1。

 

 

 

 

 

S7-1200 做为Modbus RTU 从站

S7-1200 支持Modbus RTU通讯模式的模块可做为Modbus RTU从站。如下以 CPU1215C DC/DC/DC和CM1241 RS485为例,介绍S7-1200 Modbus RTU 从站通讯组态及编程步骤。

硬件和软件需求及所完成的通讯任务:

硬件:
① CPU1215C DC/DC/DC (定货号: 6ES7 215-1AG31-0XB0)
② CM1241 RS485 (定货号:6ES7 241-1CH30-0XB0)
③ PS 307电源(定货号:6ES7307-1KA02-0AA0) 
④ PC(带以太网卡) 
⑤ TP以太网电缆

软件:
① STEP 7 V11 Professional SP2 UPD4 +HSP
② ModScan(该软件是第三方软件,能够从 Internet 网络下载)

所完成的通讯任务:
将Modbus RTU从站CPU1215C中地址从DB1.DBW0开始的5 个字中的数据,分别读取到Modbus RTU主站ModScan中Modbus地址从40001开始的5个字中。

1.组态Modbus RTU 通讯模块

在硬件目录里找到“通讯模块”→“点到点”“CM1241(RS485)”,双击或拖拽此模块至CPU左侧便可,以下图1所示:

图1 组态通讯模块

接下来,在“设备视图”中用鼠标选中CM1241(RS485)模块,在“属性”→“端口组态”中配置此模块硬件接口参数。以下图2所示:

如下以传输率=9.6Kbps,奇偶校验=无奇偶校验,数据位=8位字符,中止位=1,其它保持默认设置为例。

图2 RS485 端口设置

最后在“硬件标识符”里确认一下硬件标识符为271,以下图3所示:

图3 硬件标识符

2.添加启动OB

在项目树下选择“CPU1215C DC/DC/DC”→“程序块”→“添加新块”,在弹出的窗口中选择“OB 组织块”→ “Startup”,添加启动OB 100,以下图4所示:

图4 添加启动OB

3.调用MB_COMM_LOAD指令

为使端口一启动就被设置为Modbus RTU通讯模式,可在OB 100中调用“MB_COMM_LOAD”指令。调用“MB_COMM_LOAD”指令时会自动弹出建立相应背景数据块的界面,以下图5所示:

图5 调用MB_COMM_LOAD指令

点击“确认”为该指令建立背景数据块后,为各输入/输出引脚分配地址。尤为需注意MB_DB输入引脚需指向“MB_SLAVE”指令的背景数据块,以下图6所示:

注意:“MB_COMM_LOAD”指令输入位“REQ”需使用上升沿触发。因为OB 100只在S7-1200启动时执行一次,所以,此例中将“REQ”设为“TRUE”。

图6 MB_COMM_LOAD指令

MB_COMM_LOAD指令参数意义以下表1所示:

引脚

说明

EN

使能端

REQ

在上升沿执行该指令

PORT

通讯端口的硬件标识符

BAUD

波特率选择:3600,6000,12000,2400,4800,9600,19200,38400,57600,76800,115200 (注意:全部其它值均无效)

PARITY

奇偶检验选择:0-无;1-奇校验;2-偶校验

FLOW_CTRL

流控制选择:0-(默认值)无流控制

RTS_ON_DLY

RTS延时选择:0-(默认值)

RTS_OFF_DLY

RTS关断延时选择:0-(默认值)

RESP_TO

响应超时: 默认值 = 1000 ms。MB_MASTER 容许用于从站响应的时间(以毫秒为单位)。

MB_DB

对 MB_MASTER 或 MB_SLAVE 指令所使用的背景数据块。

DONE

完成位:指令执行完成且未出错置1

ERROR

错误位:0-未检测到错误;1-检测到错误。在参数STATUS中输出错误代码。

STATUS

表1 MB_COMM_LOAD指令参数意义

4.建立MB_HOLD_REG数据块

经过“程序块”→ “添加新块”,选择“数据块(DB)”建立 DB 块,选择“标准与S7- 300/400兼容” ,点击“确认”键,定义数据区为5个字的数组,以下图7所示:

注意:MB_HOLD_REG使用的DB访问类型必须是标准与S7- 300/400兼容。

图7 建立MB_HOLD_REG数据块

5.调用MB_SLAVE指令

在OB1中调用MB_SLAVE指令, 调用该指令时会自动弹出建立相应背景数据块的界面,以下图8所示:

图8 调用MB_SLAVE指令

点击“确认”为该指令建立背景数据块后,并为各输入/输出引脚分配地址,以下图9所示:

S7-1200做为Modbus RTU从站,MB_HOLD_REG指向Modbus保持寄存器数据块的指针。设置以下所示:MB_HOLD_REG=P#DB3.DBX0.0 WORD 5。

对应关系以下表2所示:

Modbus RTU主站Modbus地址 Modbus RTU从站CPU1215C 数据缓冲区地址
40001 DB3.DBW0
40002 DB3.DBW2
40003 DB3.DBW4
40004 DB3.DBW6
40005 DB3.DBW8

表2 Modbus地址对应关系

图9 MB_SLAVE指令

引脚 说明

EN

使能端

MB_ADDR

Modbus 从站的站地址 。默认地址范围: 0 至 247;扩展地址范围: 0 至 65535

MB_HOLD_REG

指向 Modbus 保持寄存器数据块的指针。 必须使用“标准 - 与 S7-300/400 兼容”访问类型建立该数据块。

NDR

新数据就绪:0-无新数据;1-表示Modbus主站已写入新的数据

DR

数据读取:0-无数据读取;1-表示Modbus主站已读取新的数据

ERROR

错误位

STATUS

错误代码

表3 MB_SLAVE指令参数意义

MB_SLAVE Modbus功能 S7-1200
代码 功能 数据区 地址范围 数据区 CPU地址
01 读位 输出 1到8192 输出过程映像区 Q0.0到Q1023.7
02 读位 输入 10001到18192 输入映像区 I0.0到I1023.7
04 读字 输入 30001到30512 输入映像区 IW0到IW1022
05 写位 输出 1到8192 输出过程映像区 Q0.0到Q1023.7
15 写位 输出 1到8192 输出过程映像区 Q0.0到Q1023.7

表4 Modbus地址到过程映象区的映射

MB_SLAVE Modbus功能 S7-1200
代码 功能 数据区 地址范围 CPU DB数据区 CPU地址
03 读字 保持寄存器 40001到49999 MB_HOLD_REG 字1到字9999
400001到465535 字1到字65535
06 写字 保持寄存器 40001到49999 MB_HOLD_REG 字1到字9999
400001到465535 字1到字65535
16 写字 保持寄存器 40001到49999 MB_HOLD_REG 字1到字9999
400001到465535 字1到字65535

表5 Modbus地址到CPU存储区的映射

6. Modbus 主站软件设置

注意:客户机采用ModScan软件测试,该软件是第三方软件,能够从 Internet 网络上下载。

首先在打开的ModScan软件中创建链接,并设置RTU模式的参数:波特率Baud=9600,数据位Data=8,中止位Stop=1,校验Parity=NONE,以下图10所示:

图10 创建ModScan链接

选择“File”“New” 打开ModScan通讯界面,设置Modbus RTU从站的地址Device Id=1,数据开始地址Address=0001,数据长度Length=5,Modbus数据类型功能码03,以下图11所示:

注意:Device Id设置必须与“MB_SLAVE”指令中输入引脚“MB_ADDR”设置的地址一致。

图11 设置ModScan

7.Modbus RTU测试结果

在STEP 7 V11 Professional SP2 UPD4软件中打开该项目CPU1215 DC/DC/DC的“监控表”,对DB3.DBW0写入数值21,DB3.DBW2写入数值22,DB3.DBW4写入数值23,DB3.DBW6写入数值24,DB3.DBW8写入数值25。ModScan主站将S7-1200 Modbus RTU从站地址DB3.DBW0的数值21,DB3.DBW2的数值22,DB3.DBW4的数值23,DB3.DBW6的数值24,DB3.DBW8的数值25,分别读取到了地址40001,40002,40003,40004,40005中。以下图12所示:

图12 Modbus RTU测试结果

MB_COMM_LOAD和MB_SLAVE指令STATUS错误代码

STATUS(W#16#) 说明
0000 端口无错误
8180 端口ID值无效
8181 波特率值无效
8182 奇偶校验值无效
8183 流控制值无效
8184 响应超时值无效
8185 MB_DB参数不是MB_MASTER或MB_SLAVE的背景数据块

表6 MB_COMM_LOAD指令STATUS错误代码

 

STATUS(W#16#) 说明
0000 无错误
80D1 接收方发出了暂停主动传输的流控制请求而且在指定的等待时间内未从新激活该传输
80D2 传送请求终止
80E0 因接收缓冲区满,消息被终止
80E1 因出现奇偶校验错误,消息被终止
80E2 因组帧错误,消息被终止
80E3 因出现超限错误,消息被终止
80E4 因指定长度超出总缓冲区大小,消息被终止
8180 无效端口ID值或MB_COMM_LOAD指令出错
8186 Modbus站地址无效
8187 指向MB_HOLD_REG指针无效
818C 指向M存储器或DB(DB区域容许符号地址和直接地址)的MB_HOLD_REG指针无效

表7 MB_SLAVE指令STATUS参数意义(通讯和组态错误)

 

STATUS(W#16#)

从站的响应代码

说明

8380 无响应 CRC错误
8381 01

不支持功能代码或者在广播中不支持功能代码

8382 03 数据长度错误
8383 02 数据地址错误或地址超出DATA_PTR取的有效范围
8384 03 数据值错误
8385 03 不支持此数据诊断代码值

表8 MB_SLAVE指令STATUS参数意义(Modbus协议错误)

常问问题:

为何触发“MB_SLAVE”指令出错,输出位“ERROR”=1,输出状态字“STATUS”=16#8187?

输出状态字”STATUS“=16#8187表示指向MB_HOLD_REG指针无效。如下两种状况会形成如上错误:

  • 程序中不存在“MB_SLAVE”指令的输入引脚“MB_HOLD_REG”对应的DB块。
  • 在建立“MB_SLAVE”指令的输入引脚“MB_HOLD_REG”对应的DB块时选择了“仅符号寻址”。

解决方法分别以下:

  • 新建“MB_SLAVE”指令的输入引脚“MB_HOLD_REG”对应的DB块。
  • 建立“MB_SLAVE”指令的输入引脚“MB_HOLD_REG”对应的DB块时只能选择了“标准与S7-300/400兼容”。

 

 

 

 

链接超时参数

S7-1200 Mobus RTU通讯网络中包含多个从站站点时,因为轮询的网络特性,只能同时读或写一个站点数据。所以有以下因素,会影响到最终总体的轮询时间:

1. 通讯速率(波特率)设置时间

2. 每一个站点的通讯数据量

3. 站点数量

4. 通讯距离

5. 各站点链接时间

不管是因为信号干扰,硬件质量引发的从站掉站或是因为工程须要暂时关闭站点,此时都会因为“各站点链接时间”的增长而使通讯系统的轮询时间大大延长。在S7-1200的Modbus RTU通讯中,主要有三个参数与“各站点链接时间”的设置相关。

1. 从站响应时间 RESP_TO

如图1所示,V2.x版本的MB_COMM_LOAD初始化块可设置从站响应时间RESP_TO参数:

设置单次链接从站的可响应时间,范围为5ms到65535ms(默认值为1000ms);即如从站在此时间段内未做出响应,则MB_MASTER将在发送指定次数的重试请求后终止请求并提示错误信息80C8。

图1. RESP_TO参数设置

注意:如图2所示,Modbus从站的执行频率须至少小于RESP_TO设置的响应时间(须要考虑响应延迟时间),才能够正常通信。

图2. 从站响应时间

2.重试次数 RETRIES

在初始化功能块MB_COMM_LOAD的背景数据块中,可设置重试次数RETRIES参数:

主站在返回无响应错误代码 0x80C8 以前的重试次数。(默认值为2次) 
注意:此参数表示初次链接无响应后,再次链接的次数;即以默认2次为例,实际尝试链接次数为3次。

图3 RETRIES参数设置

注意:在更改RETRIES参数后,须要从新使能MB_COMM_LOAD功能块的REQ管脚,不然更改参数不生效。

3. 主站定时参数 Blocked_Proc_Timeout

当因为某些缘由(如已发出主站请求,但在完全完成该请求前中止调用主站功能块时),形成Done及Error均没有置1时,须要提供一个定时时间,在时间到达后置位,以便执行下一个功能块或轮询下一个站点。

MB_Master的背景数据块中提供了主站定时参数Blocked_Proc_Timeout(范围0S到5.5S,默认3S)

此前的RESP_TO 是针对从站响应时间的,而Blocked_Proc_Timeout则是针对主站的定时时间,此功能参数用于防止单个 MB_Master 指令独占或锁定对端口的访问。

图4. Blocked_Proc_Timeout参数设置

常问问题:

因为某一个从站掉站引发的轮询周期时间延长,如何减少此影响

一般,S7-1200可同时调整两个参数:从站响应时间 RESP_TO和重试次数 RETRIES,用于减少Modbus从站掉站或暂时关闭而增大的轮询周期时间。
例:系统默认的尝试链接次数为3次,每次1S,总计3S;
可根据项目实际工况适当减少从站响应时间RESP_TO。这一时间没法估算,建议屡次测试,确认每一个从站都可以正常稳定链接状况下,将此时间设置的尽可能小。
以设置500ms为例。再将RETRIES设置为0。即对于每一个从站,主站只尝试链接一次,总计耗时500ms。

MB_MASTER报错8200(端口正忙于处理传送请求),如何处理?

此状况是因为MB_MASTER的DONE或ERROR均未置位从而与后续MB_MASTER冲突致使。确保接通下一个MB_MASTER的时间大于Blocked_Proc_Timeout的设定时间(默认3S)。

相关文章
相关标签/搜索