CP341 Modbus RTU多站点轮询

n

1.软件环境

1.1STEP7 V5.4 SP3n

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

1.2CP PtP Param V5.1 SP8n

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

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

1.3CP PTP Modbus Master V3.1.4n

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

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

2.硬件列表

PS 307

6ES7 307-1EA00-0AA0

CPU 315-2PN/DP

6ES7 315-2EH13-0AB0

MMC

6ES7 953-8LG11-0AA0

CP341

6ES7 341-1CH01-0AE0

Dongle

6ES7 870-1AA01-0YA0

表 1

3.组态配置

3.1组态CPU及CP341n

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

CP341 Modbus RTU多站点轮询
图 1n

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

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

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

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

CP341 Modbus RTU多站点轮询图 2n

3.3设置电气接口n

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

CP341 Modbus RTU多站点轮询
图 3n

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

4.编程

4.1创建发送数据块DB1n

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

CP341 Modbus RTU多站点轮询
图4n

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

4.2创建接收数据DBn

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

CP341 Modbus RTU多站点轮询
图 5n

4.3创建轮询功能块FC1n

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

CP341 Modbus RTU多站点轮询
图6n

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

CP341 Modbus RTU多站点轮询
图7n

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

CP341 Modbus RTU多站点轮询
图 8n

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

CP341 Modbus RTU多站点轮询
图 9n

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手册

其它参数

查看在线帮助

表 2n

CP341 Modbus RTU多站点轮询
图 10n

FB7参数说明表格3n

LADDR

硬件组态中的起始逻辑地址,本例中为256

DB_NO

发送数据块号,本例中为MW4

DBB_NO

发送数据的起始地址,本例中为MW6

LEN

接收数据的长度

EN_R

使能接收位,本例中始终为TURE

R

取消通讯,本例始终为初始值FALSE

NDR

接收完成位,无故障接收完成后为true

ERROR

错误位,为true说明有错误

STATUS

状态字,标识错误代码,查看Modbus Master和CP341手册

其它参数

查看在线帮助

表 3n

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上升沿,启动一个新的发送作业。

CP341 Modbus RTU多站点轮询
图 11n

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

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

CP341 Modbus RTU多站点轮询
图 12n

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

CP341 Modbus RTU多站点轮询
图 13

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

CP341 Modbus RTU多站点轮询
图 14

Cp341_mo.zip (569 KB) ( 569 KB )

5.总结

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

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

原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc329336.html

(1)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2020年11月5日 下午12:03
下一篇 2021年4月12日 上午12:00

相关推荐

发表回复

登录后才能评论