modbus通讯指令问题:
使用了MBUS_INIT指令,其中一个参数是HOldstart,我设置成了&vb100,然后MAXhold设置1000.而后,我使用串口软件,访问VW100的值(里边的值为12),软件画面提示“通讯超时”或返回VW100的值为0;如果我要是,将HOldstart,我设置成了&vb0,就没有这个问题。我想问下各位,我的起始地址HOldstart设置都与什么有关系?和系统块中的掉电数据保持V存储区的偏移量和单元个数,有无关系。
问题补充:
Network 1 // 网络标题
//
LD SM0.1
CALL SBR1, 1, 2, 9600, 2, 0, 128, 32, 200, &VB10, V10239.0, VB10238
Network 2
LD SM0.0
CALL SBR2, V10236.0, VB10237
Network 3 // 网络标题
// 网络注释
LD SM0.0
MOVW 15, VW10
AENO
MOVW 15, VW12
Network 4
我进行串口调试时,查看VW10,VW12中的数都是0.这是怎么回事呢
最佳答案
1 和系统块中的掉电数据保持V存储区的偏移量和单元个数没有关系。
2 地址对应关系:
VW/HoldStrt 0(040001)
VW/HoldStrt+2 1(040002)
如果用串口调试软件调试,那么就不用括号内的地址,而用0 ,1 等
阿鸣的回答文不对题,尽是废话。
提问者对于答案的评价:
呵呵。谢谢,鸣和LAO-HUAI
。我知道了。
串口发送时的格式为 :站地址、功能字、起始地址(字)、访问的单元的个数、CRC校验(高低位调换)
其中的 起始地址=(要查看的V区-Mbus_INIT指令中的起始地址holdstat)/2
例如holdstart=&VB12,而我要访问VW36的值,那么我要发送的格式为
02{站地址}03{读} 00 0c {(36-12)/2 =12} 00 01{访问一个字} CRC{反写}
真是惭愧啊,因为这个问题曾经,laohuai给我讲过, 不过那个时候也没总结。
希望对发生同样问题的人们,有所帮助。
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc346312.html