发布于 2008-09-05 22:11:43
0楼
LEN是源数据块(例如DB1的数据长度),但不是CP341实际发送的MODBUS查询帧代码的长度。DB1.DBW4是真正控制实际发送数据长度的参数。
例: DB1保持同样数字,仅仅是DB1.DBW4变化,CP341发送的查询帧发生变化。
下面两行代码是DB1基本保持同样内容的数字(18个BYTE),仅仅是DB1.DBW4变化,CP341发送了不同长度的查询帧。
LEN=18,DB1.DBW4=6。CP341发送的查询帧:
02 10 00 00 00 06 0C 00 0A 00 0B 00 0C 00 0D 00 0E 00 0F DC 7D
LEN=18,DB1.DBW4=3 。CP341发送的查询帧:
02 10 00 00 00 03 06 00 0A 00 0B 00 0C 0A 85
这段话有点问题
关于LEN:HELP原文是这样的:Data length of frame to be sent,frame是结构,我的理解就是soures(bytes)DB1的长度。所以才有FC15,FC16 LEN>6,而其他FC=6的情况.你前面FC16做不通,就是LEN长度不对,不是吗?
你最后的两个报文也有问题。LEN=18不变,你的Function code 10(H)应该是16吧,FC16的LEN长度根据写寄存器数量不同LEN长度肯定不同,不知道LEN=18一直不变是如何做通的。
感觉有点矛盾,真的有点迷惑。
FC16我下午刚做通,LEN=DB的长度。用ssmcom32能正确看到我的报文。相对于 source DB 只多了byte conter和CRC
最近被MODBUS搞的有点烦