比方说我要读写40001这个寄存器的数据,根据西门子给的modbus库的程序块,一个写一个读,如果我有10台表,那是不是说我要建立20个这样的快才能实现,如果我要读10个寄存器的数据那是不是就要建立200个块啊,我感觉应该不是这样的
我用改变count的数值的方法读到了其它所有位的值,但是发现了问题,在count为一时我可以读写数值,但是当把count改为2以上的值时,发现写的块报错一次,马上又好了,而且不能写值(一台表时写、读一个寄存器地址都没问题)。我想办法看了一下串口的数据交换,发现了和平常不同的数据如下:
一台表,读写40019号地址,count=3
01 10 00 12 00 03 06 00 00 00 00 00 00 46 DF
01 10 00 12 00 03 20 0D
01 03 00 12 00 03 A5 CE
01 03 06 00 00 00 0F 00 2D D1 6B
01 10 00 12 00 03 06 00 00 00 00 00 00 46 DF
-----
一台表,读写40019号地址,count=1
01 06 00 12 00 00 29 CF
01 06 00 12 00 00 29 CF
01 03 00 12 00 01 24 0F
01 03 02 00 00 B8 44
问题:1.我这些表可以建几个块,count和addr相应如何设定
2.为什么就报错一次就又好了
3.01 10 00 12 00 03 06 00 00 00 00 00 00 46 DF这个01 10的10是什么东西啊
最佳答案
1 如果ADDR在40000和50000之间,RW=1,COUNT=1则为功能6,COUNT>1则为功能16
功能6将一个数据字写入对方存储器,
功能16用来写多个存储器字
2 01 10的10是什么东西啊
01是地址,10是16#10 ,是功能16.
3 建议你先学习一下modbus的基本结构。
提问者对于答案的评价:
xeixie le
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc346406.html