电量模块MODBUS RTU寄存器解读
---恢復(fù)內(nèi)容開始---
最近在寫一個關(guān)于電量模塊的arduino lib,需要了解電量模塊的寄存器讀寫,涉及到硬件底層知識。
?
先復(fù)習(xí)一下計算機原理中有關(guān)位、字節(jié)和字的關(guān)系(來自google books)
?
- 再來看電量模塊寄存器使用規(guī)約,先看通訊參數(shù)方面:
?
?
寄存器地址:0004H
默認(rèn)值: 0105H
0105H轉(zhuǎn)換成二進(jìn)制為
0000 0001 00000 0101
[ ? ?ID ? ? ] ?[] ? ? ? [速率]
?
高八位0000 0001,表示該模塊的ID為01,如果為00,則表示為廣播地址;
低字節(jié)的高2位00,表示為8N1
低字節(jié)低四位0101(5),表示速率4800bps,不清楚手上的這款(JSY-MK-109 v1.0)是否支持更高的速率,JSY公司其它型號有支持06(9600bps)。
?
- ?讀取電量參數(shù)
從上表可以看出,電量信息是從0048H地址開始的連續(xù)8個字節(jié)保存的,這跟程序中相應(yīng)代碼正好印證:
1 Tx_Buffer[0]=Read_ID; 2 Tx_Buffer[1]=0x03; 3 Tx_Buffer[2]=0x00; 4 Tx_Buffer[3]=0x48; 5 Tx_Buffer[4]=0x00; 6 Tx_Buffer[5]=0x06; 7 crcnow.word16=chkcrc(Tx_Buffer,6); 8 Tx_Buffer[6]=crcnow.byte[1]; //CRC 9 Tx_Buffer[7]=crcnow.byte[0];?
第一位是從機的地址;
第二位是功能碼03H,這是讀多個寄存器的功能碼;
第三、四位0048H,表示起始地址;
第五、六位0006H,表示數(shù)據(jù)長度,要讀取6個地址;
后面的位保存CRC校驗碼。
?
在arduino library中,read_data()中組成上面的命令,放入TX_Buffer[]數(shù)組,然后交給send_query()方法,通過串口發(fā)給485,再發(fā)給指定地址的從機,從機收到控制命令之后,會返回相應(yīng)的數(shù)據(jù),比如
?
?
另外,從下表可以看出,有兩組(四個)寄存器保存有功總電能數(shù)據(jù),其中004BH、004CH是只讀,另外一組000CH、000DH是可讀寫的。
?
?
---恢復(fù)內(nèi)容結(jié)束---
最近在寫一個關(guān)于電量模塊的arduino lib,需要了解電量模塊的寄存器讀寫,涉及到硬件底層知識。
?
先復(fù)習(xí)一下計算機原理中有關(guān)位、字節(jié)和字的關(guān)系(來自google books)
轉(zhuǎn)載于:https://www.cnblogs.com/ardypro/p/3457114.html
總結(jié)
以上是生活随笔為你收集整理的电量模块MODBUS RTU寄存器解读的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 二类车走高速怎么算过路费
- 下一篇: 华菱汽车发电机不发电换新的也不发电是什么