• {{item.name}}
{{item.name}}
{{item2.name}}
更多
操作指南

CP341 Modbus RTU多站点轮询

star star star star star
5.0 分
  • 通信(通讯)
  • 文档
  • 站点
文档编号:A0336| 文档类型:操作指南| 发布时间:2024年02月26日
  • 0
  • 4562
  • 21095
本文档讨论使用CP341实现Modbus主站轮询多个从站

1.  软件环境

1.1   STEP7 V5.4 SP3

用于编写PLC程序,此软件需要从西门子购买,本文档中所有的程序代码均使用Step7 V5.4 SP3编写。

1.2  CP PtP Param V5.1 SP8

串行通讯模板的驱动程序,安装此驱动后才能配置PtP模板,并在Step7中集成通讯编程需要使用的功能块。此驱动随购买模板一起提供,也可以从以下的链接下载:

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

1.3  CP PTP Modbus Master V3.1.4

CP341或CP441-2用于Modbus 主站时,需要安装此驱动协议,但安装此驱动之前必须先安装PtP driver,此驱动可以在购买Modbus Dongle时选择购买,或者可以从以下链接下载:

/cs/document/8713784?caller=view&lc=zh-CN

2.  硬件列表


PS 3076ES7 307-1EA00-0AA0
CPU 315-2PN/DP6ES7 315-2EH13-0AB0
MMC6ES7 953-8LG11-0AA0
CP3416ES7 341-1CH01-0AE0
Dongle6ES7 870-1AA01-0YA0

表 1

3.  组态配置

3.1  组态CPU及CP341

如图1将CP341逻辑地址设为256


图 1

3.2  设置Modbus总线传输速率和帧字符结构

双击CP341->Parameters->Protocol中选择Modbus Master;

双击信封Protocol,选择Modbus Master设置总线传输速率和帧字符结构以及,其它从站的设置必须和主站设置一致。

如图 2,本例传输速率为9.6Kbit/s,帧字符1-8-e-1,即1位起始位,8位数据位,偶校验,1位停止位。


图 2

3.3  设置电气接口

选择半双工RS 485,接收端初始状态按图3设置,各从站的接口电气标准应和主站一致


图 3

具体配置步骤请参考手册《CP340/341/440/441通讯及编程》4.3章节

4. 编程

4.1  创建发送数据块DB1

如图 4定义Modbus功能码03的数据格式


图4

更多功能码格式参考手册《以用于 PtP CP MODBUS 协议 RTU 格式 S7 的 SIMATIC 可加载驱动程序为主站》

4.2  创建接收数据DB

在此共建立了2个DB(DB4,DB5)分别存放来自两个从站的数据,每个DB分配了一个0~1000个字的整型数组如图 5。


图 5

4.3  创建轮询功能块FC1

设置指令计数器(MW2),如图6本例中设置为2,即2两条指令。


图6

根据指令计数器值构造发送指令并指定接收缓冲区。如图7指令计数器数值为1,构造的发送指令为访问1号从站,功能码03,起始地址0(对应Modbus地址40001),4个寄存器;接收缓冲区为数据块DB4,起始地址为0。


图7

如图8指令计数器数值为2,构造的发送指令为访问2号从站,功能码03,起始地址0(对应Modbus地址40001),4个寄存器;接收缓冲区为数据块DB5,起始地址为2。


图 8

为了实现数据发送和接收,FC1中还必须调用CP341发送FB8(图9)和接收FB7(图10)功能块


图 9

FB8参数说明表格2

SF‘S’为发送,此处必须为大写的‘S’
LADDR硬件组态中的起始逻辑地址,本例中为256
REQ发送数据触发位,上升沿触发,本例中为M0.0
DB_NO发送数据块号,本例中为1
DBB_NO发送数据的起始地址,本例中为0
LEN发送数据的长度,本例中为6
R_TYP‘X’为扩展的数据块,此处必须为大写的‘X’
R取消通讯,本例始终为初始值FALSE
DONE发送完成位,无故障发送完成后为true,M0.1
ERROR错误位,为true说明有错误,M0.2
STATUS状态字,标识错误代码,查看Modbus Master和CP341手册
其它参数查看在线帮助

表 2


图 10

FB7参数说明表格3

LADDR硬件组态中的起始逻辑地址,本例中为256
DB_NO发送数据块号,本例中为MW4
DBB_NO发送数据的起始地址,本例中为MW6
LEN接收数据的长度
EN_R使能接收位,本例中始终为TURE
R取消通讯,本例始终为初始值FALSE
NDR接收完成位,无故障接收完成后为true
ERROR错误位,为true说明有错误
STATUS状态字,标识错误代码,查看Modbus Master和CP341手册
其它参数查看在线帮助

表 3

CP341 Modbus RTU主站轮询从站过程:以功能码03(Function Code 03)为例,正常情况下REQ(M0.0)检测到一个上升沿时,FB8启动发送作业,从站收到主站请求后发送响应数据,FB7将从站响应的数据送回给CPU处理,发送作业完成位DONE(M0.1)置位,同时指令计数器MW2加1,构造下条指令,传递到发送DB中(DB1.DBB0~DB1.DBB5),更新下一条指令的接收区地址(MW4,MW6)同时触发REQ上升沿,启动一个新的发送作业。


图 11

同样以功能码03(Function Code 03)为例,在故障情况下,FB8发送功能无法完成,ERROR置位,那么判断该次发送作业失败,更新发送区地址和接收区地址启动下一个发送作业。如果FB8的DONE和ERROR由于某些故障都无法置位,那么通讯将处于死锁状态,所以在启动发送作业同时启动超时定时器t0(本例中超时定时器时间设为2100ms),即定时器计时结束时DONE或ERROR仍然没有置位,那么判断该次发送作业失败,更新发送区地址和接收区地址启动下一个发送作业。

如图12所示,主站向Slave1发送请求指令,由于1号从站断线故障,从站没有收到主站请求,也无法返回主站需要的数据,当预设的从站响应时间t(如图11,t=2000ms)超时,发送功能块ERROR(M0.2)置位,主站判断本条指令失败,同时发起下一条指令作业(Function Code 03)访问Slave2,Slave2收到主站请求后,将响应数据返回给主站CP341,主站再通过FB7将从站接收到的数据保存到指定位置,发送功能块DONE(M0.1)置位,同时触发下一次发送作业。


图 12

需要注意的是超时定时器时间(t0)必需大于预设的从站响应时间t,而预设的从站响应时间应大于等于主站发出请求到接收到从站响应数据的时间最大值(tn,n=1,2),即t0 > t ≥ Max(t1,t2),如图 13


图 13

4.4  在OB1中调用轮询功能块FC1


图 14

Cp341_mo.zip (569 KB) ( 569 KB )  

5.  总结

本文档所提供的例程适用于CP341作为Modbus主站轮询访问多个从站,根据实际需要构造不同功能码指令,可读写不同的从站的不同地址空间。本例对通讯故障时的处理方式是简单的放弃当前作业,并触发下一个作业,实际运用中可根据实际情况判断是否需要重发或进行其他故障处理。

关键词
CP341, Modbus RTU,轮询,功能码



剩余80%未阅读,请登录后下载/查看文档

  • 评论
更多
  • 分享

    扫码分享

提示
您即将前往“全球技术资源库”。
“全球技术资源库”的用户名与本地支持中心(下载中心、技术论坛、找答案、1847工业学习平台)的用户名不通用。如果需要在全球技术资源库下载文档,您需要重新登录或注册。
确定

考证咨询点我

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