• {{item.name}}
{{item.name}}
{{item2.name}}
更多

Modbus RTU 低版本主站指令(归档)

star star star star star
0 分
  • 使用操作
发布时间:2024年01月24日
  • 0
  • 11
Modbus RTU 低版本主站指令(归档)

Modbus RTU V1 - V2 版本指令介绍(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 通信模块

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

A computer screen shot of a computer

Description automatically generated

图1 组态通信模块

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

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

A screenshot of a computer

Description automatically generated

图2 RS485 端口设置

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

A screenshot of a computer

Description automatically generated

图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所示:

A screenshot of a computer

Description automatically generated

图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_DLYRTS延时选择:0-(默认值)
RTS_OFF_DLYRTS关断延时选择: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兼容。

A screenshot of a computer

Description automatically generated

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

5.调用MB_MASTER指令

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

A screenshot of a computer

Description automatically generated

图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.DBW040001
DB3.DBW240002
DB3.DBW440003
DB3.DBW640004
DB3.DBW840005

表2 Modbus地址对应关系

A computer screen shot of a computer

Description automatically generated

图9 MB_MASTER指令

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

引脚说明
EN使能端
REQ在上升沿执行该指令,请求将数据发送或读取到Modbus从站
MB_ADDRModbus RTU从站地址。默认地址范围:0至247;扩展地址范围:0至65535。值0被保留用于将消息广播到所有Modbus从站。
MODE模式选择:指定请求类型
DATA_ADDR从站中的起始地址:指定Modbus从站中将供访问的数据的起始地址。
DATA_LEN数据长度:指定要在该请求中访问的位数或字数。
DATA_PTR数据指针: 指向要写入或读取的数据的 M 或 DB 地址(DB访问类型必须是标准与S7-300/400兼容)。
DONE完成位:上一请求已完成且没有出错后,DONE 位将保持为 TRUE 一个扫描周期时间。
BUSY0 – 无正在进行的 MB_MASTER 操作;
1 – MB_MASTER 操作正在进行
ERROR错误位: 上一请求因错误而终止后,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到200001
10001到19999输入位1到200002
30001到39999输入寄存器1到12504
40001到49999
400001到465535(扩展)
保持寄存器1到12503
模式1
写入00001到09999输出位1(单个位)05
40001到49999
400001到465535(扩展)
保持寄存器1(单个字)06
00001到09999输出位2到196815
40001到49999
400001到465535(扩展)
保持寄存器2到12316
模式2
有些Modbus从站不支持使用Modbus功能05H或06H写入单个位或字。在这样的情况下,可通过模式2强制使用Modbus功能15H或16H写入单个位或字
写入00001到09999输出位2到196815
40001到49999
400001到465535(扩展)
保持寄存器1到12316
模式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所示:

A computer screen with a computer port

Description automatically generated with medium confidence

图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”设置的地址一致。

A screenshot of a computer

Description automatically generated

图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所示:A screenshot of a computer

Description automatically generated

图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通讯?

MB_COMM_LOAD和MB_MASTER指令STATUS错误代码

STATUS(W#16#)说明
0000端口无错误
8180端口ID值无效
8181波特率值无效
8182奇偶校验值无效
8183流控制值无效
8184响应超时值无效
8185MB_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值
8186Modbus站地址无效
8188对于广播调用,参数 MODE 的值无效。
8189数据地址值无效
818A数据长度值无效
818B指向本地数据源/目标的指针无效
818CDATA_PTR的指针无效:使用指向位存储区或访问类型为“标准 - 与 S7-300/400 兼容”的数据块的指针。
8200端口正忙于处理传送请求

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

STATUS(W#16#)从站的响应代码说明
8380-CRC错误
838101不支持此功能码
838203数据长度错误
838302数据地址错误或地址超出 DATA_PTR 的有效范围
8384>03数据值错误
838503不支持此数据诊断代码
8386-响应中的功能代码与传送中的功能代码不匹配
8387-响应的从站错误
8388-从站对写请求的响应不正确

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

常问问题:

5.gif如何检查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错误代码”表。

5.gif执行“MB_MASTER”指令,总是显示输出位“Busy”=1,为什么?

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

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

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

A computer screen shot of a computer

Description automatically generated

图13 捕捉错误代码

5.gifS7-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”。

A screenshot of a computer

Description automatically generated

图14 扩展地址区

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

A screen shot of a computer

Description automatically generated

图15 修改变量

剩余80%未阅读,请登录查看大全章节内容

  • 评论
更多
  • 分享

    扫码分享

扫码进入移动端

信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。