联系人:李红英
邮箱:leehonying1018@126.com
电话:15307431289
地址: 中国 上海 松江区中国上海市松江区鼎源路618弄61号楼5楼
西门子CP341通信模块代理
西门子6ES7341-1CH02-0AE0通讯处理器供应
西门子s7-300通信模块CP341通讯处理器带有 RS422/485 接口
-------------------------------------------------------------------------------------------------------------------------------
CP341 Modbus RTU多站点轮询 编程
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通信模块代理
西门子6ES7341-1CH02-0AE0通讯处理器供应
西门子s7-300通信模块CP341通讯处理器带有 RS422/485 接口