CP341做主站Modbus轮询

具体编程如下图,从站地址是2、3、4、5、6、7、8、9,因为通讯计数器没看懂,想加多一个从站地址10,这个程序需要怎么加,谢谢!
"modbus通讯".FB8_DB    %DB6.DBW4   写数据的地址
"modbus通讯".FB8_DBB   %DB6.DBW6   写数据的地址
"modbus通讯".FB8_LEN   %DB6.DBW8   写数据的长度
"modbus通讯".FB7_DB    %DB6.DBW10  读数据的地址
"modbus通讯".FB7_DBB   %DB6.DBW12  读数据的地址
"modbus通讯".MB_COUNT  %DB6.DBW0   通讯计数器
FB8_REQ_P              DB6.DX2.0   写数据脉冲
FB8_REQ                DB6.DX2.1   写数据脉冲
FB8_DONE               DB6.DX2.2   写数据完成
FB8_ERR                DB6.DX2.3   写数据错误

问题补充:
计数器对应的是哪些站号、功能码、长度等?

图片说明:

CP341做主站Modbus轮询    CP341做主站Modbus轮询    CP341做主站Modbus轮询    CP341做主站Modbus轮询   

最佳答案

1、计数器最后一行大于95要归1的,你首先要改这里,把计数值提高
2、发送和接收数据块的定义,也就是FB7和FB8涉及的接收/发送DB的DB、DBB、LEN等内容
3、注意你新建的发送DB内容(可以根据现有的发送DB来设定初始值,里面的内容决定了你要读的站号、功能码、长度等等)
-----------------------------------
FB8是发送功能块,有两个重要参数:DB_NO和DBB_NO,这是发送报文存放的数据块号和起始字节号(后面根据不同的计数给接送功能块FB7赋值不同的DB_NO也是类似的意思)。比如你的贴图中,第一行程序就把3赋值给了DB6.DBW4,从符号名看就是FB8的DB_NO,也就是说发送报文在DB3中,后面有一个计数器(DB6.DBW0)乘以6赋值给FB8的DBB_NO,这就是用一个乘法指令实现了多个报文的不同起始字节,比如当计数器数值为1时,则发送报文就是DB3.DBB6开始的6个字节内容,为什么是6个字节?因为西门子的FB8发送报文的结构是6个字节:地址(1byte)、功能码(1byte)、起始地址(1word=2byte)、数据长度(1int=2byte)。
建议你从官网下载串口通讯文档(官方写的文档很详细),真正理解cp341的用法

提问者对于答案的评价:
谢谢!

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2021年7月4日 下午10:12
下一篇 2021年7月4日 下午10:12

相关推荐

发表回复

登录后才能评论