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

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

star star star star star
0 分
  • 使用操作
发布时间:2024年01月24日
  • 0
  • 14
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 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所示:

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

A screenshot of a computer program

Description automatically generated

图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_SLAVE”指令的背景数据块,如下图6所示:

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

A screenshot of a computer

Description automatically generated

图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.创建MB_HOLD_REG数据块

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

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

A screenshot of a computer

Description automatically generated

图7 创建MB_HOLD_REG数据块

5.调用MB_SLAVE指令

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

A screenshot of a computer program

Description automatically generated

图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 数据缓冲区地址
40001DB3.DBW0
40002DB3.DBW2
40003DB3.DBW4
40004DB3.DBW6
40005DB3.DBW8

表2 Modbus地址对应关系

A screenshot of a computer

Description automatically generated

图9 MB_SLAVE指令

引脚说明
EN使能端
MB_ADDRModbus 从站的站地址 。
默认地址范围: 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到49999MB_HOLD_REG字1到字9999
400001到465535字1到字65535
06写字保持寄存器40001到49999MB_HOLD_REG字1到字9999
400001到465535字1到字65535
16写字保持寄存器40001到49999MB_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所示:

A screenshot of a computer

Description automatically generated

图10 建立ModScan连接

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

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

A screenshot of a computer

Description automatically generated

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

A screenshot of a computer

Description automatically generated

图12 Modbus RTU测试结果

MB_COMM_LOAD和MB_SLAVE指令STATUS错误代码

STATUS(W#16#)说明
0000端口无错误
8180端口ID值无效
8181波特率值无效
8182奇偶校验值无效
8183流控制值无效
8184响应超时值无效
8185MB_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指令出错
8186Modbus站地址无效
8187指向MB_HOLD_REG指针无效
818C指向M存储器或DB(DB区域允许符号地址和直接地址)的MB_HOLD_REG指针无效

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

STATUS(W#16#)从站的响应代码说明
8380无响应CRC错误
838101不支持功能代码或者在广播中不支持功能代码
838203数据长度错误
838302数据地址错误或地址超出DATA_PTR取的有效范围
838403数据值错误
838503不支持此数据诊断代码值

表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兼容”。      

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

  • 评论
更多
  • 分享

    扫码分享

扫码进入移动端

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