发布时间:2019-07-21 来源:众智博远
实现CP341作Modbus主站的通信程序是“P_SND_RK”FB8负责发送控制字。编程如下:
FB8参数说明表格1。
SF
‘S’为发送,此处必须为大写的‘S’
LADDR
硬件组态中的起始逻辑地址,本例中为272
REQ
发送数据触发位,上升沿触发,本例中为M0.5,以1s为周期的脉冲信号
DB_NO
发送数据块号,本例中为1
DBB_NO
发送数据的起始地址,本例中为0
LEN
发送数据的长度,本例中暂时为6
R_TYP
‘X’为扩展的数据块,此处必须为大写的‘X’
R
取消通信,本例始终为初始值FALSE
DONE
发送完成位,无故障发送完成后为true,M100.0
ERROR
错误位,为true说明有错误,M100.1
STATUS
状态字,标识错误代码,查看Modbus Master和CP341手册
其它参数
查看在线帮助
表 1
IA&DT
其中创建发送数据块DB1结构如图10所示:
图10 发送DB块源区域结构
创建的发送数据块DB1,至少要有6个字节的长度,后面根据功能码的不同,所需长度不同,建议发送数据块创建的长度长一些。以上图为例6个字节Address为所通讯对象的Modbus地址为1,code为功能码FC03,所读对象寄存器的起始地址为0,所读寄存器的数量为4,其中一个寄存器为两个字节。
此处有几个注意事项:
1) R_TYP必须为大写的‘X’,
为小写"x"时,CP341 作为Modbus master时,调用FB8的状态字显示为 "0E4F" 错误。注意R_TYP必须为大写。且对于R_TYP可以写的值如下:
’D’ DB 区’X’ DX 区,extended data block ’E’ I 区’A’ Q 区 ’M’ M 区 ’T’ T 区 ’C’ C 区
2) LEN的长度要根据通信所需功能码来针对填写,
如下表所示
“P_RCV_RK”FB7用于接收通信数据。编程如图11所示:
FB7参数说明表格3
LADDR
硬件组态中的起始逻辑地址,本例中为272
DB_NO
接收数据块号,本例中为DB2
DBB_NO
接收数据的起始地址,本例中默认为0
LEN
接收数据的长度反馈
EN_R
使能接收位,本例中始终为TURE
R
取消通信,本例始终为初始值FALSE
NDR
接收完成位,无故障接收完成后为true
ERROR
错误位,为true说明有错误
STATUS
状态字,标识错误代码,查看Modbus Master和CP341手册
其它参数
查看在线帮助