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
图 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
图 2n
3.3设置电气接口n
选择半双工RS 485,接收端初始状态按图3设置,各从站的接口电气标准应和主站一致n
图 3n
具体配置步骤请参考手册《CP340/341/440/441通讯及编程》4.3章节n
4.编程
4.1创建发送数据块DB1n
如图 4定义Modbus功能码03的数据格式n
图4n
更多功能码格式参考手册《以用于 PtP CP MODBUS 协议 RTU 格式 S7 的 SIMATIC 可加载驱动程序为主站》n
4.2创建接收数据DBn
在此共建立了2个DB(DB4,DB5)分别存放来自两个从站的数据,每个DB分配了一个0~1000个字的整型数组如图 5。n
图 5n
4.3创建轮询功能块FC1n
设置指令计数器(MW2),如图6本例中设置为2,即2两条指令。n
图6n
根据指令计数器值构造发送指令并指定接收缓冲区。如图7指令计数器数值为1,构造的发送指令为访问1号从站,功能码03,起始地址0(对应Modbus地址40001),4个寄存器;接收缓冲区为数据块DB4,起始地址为0。
图7n
如图8指令计数器数值为2,构造的发送指令为访问2号从站,功能码03,起始地址0(对应Modbus地址40001),4个寄存器;接收缓冲区为数据块DB5,起始地址为2。
图 8n
为了实现数据发送和接收,FC1中还必须调用CP341发送FB8(图9)和接收FB7(图10)功能块n
图 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
图 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上升沿,启动一个新的发送作业。
图 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)置位,同时触发下一次发送作业。
图 12n
需要注意的是超时定时器时间(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,轮询,功能码
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc329336.html