工業(yè)通訊寄存器字節(jié)順序分析說明

通信調(diào)試中,字節(jié)序是個(gè)常見概念,比如本地字節(jié)序、網(wǎng)絡(luò)字節(jié)序。
字節(jié)存儲機(jī)制又分兩種:大端(Big-Endian)和小端(Little-Endian)。
MODBUS協(xié)議中同樣存在字節(jié)序概念,存儲機(jī)制同字節(jié)序。不同的是,MODBUS數(shù)據(jù)幀中對寄存器地址定義為大端字節(jié)序,但是數(shù)據(jù)部分在不同廠家的定義方式可能不同,甚*同一廠家某一型號設(shè)備中,對不同數(shù)據(jù)的字節(jié)序定義也不統(tǒng)一。
例如:01 03 04 12 34 56 78 81 07 (讀保持寄存器響應(yīng)報(bào)文)
其中,回復(fù)數(shù)據(jù)長度4Bytes, 原始數(shù)據(jù)為0X12345678,從報(bào)文看,其字節(jié)序即為大端。
但是,MODBUS寄存器在傳輸4字節(jié)浮點(diǎn)數(shù)時(shí),有些設(shè)備廠家給出字序要求,聲明字序?yàn)樾《耍串?dāng)原始數(shù)據(jù)是0X12345678時(shí),傳輸它的報(bào)文字節(jié)流應(yīng)該這樣:
01 03 04 56 78 12 34 66 D5
使用IEEE 754規(guī)范,可進(jìn)行字節(jié)順序交換位置
Float Big-endian 字節(jié)順序:A B C D
Float Little-endian 字節(jié)順序:D C B A
Float Big-endian byte swap 字節(jié)順序:B A D C
Float Little-endian byte swap 字節(jié)順序:C D A B
假設(shè)存儲表就是一張紙,當(dāng)輸入一個(gè)數(shù)據(jù)的時(shí)候,軟件就會為我們開辟一個(gè)地址往表中存放數(shù)據(jù),比如往這個(gè)地址寫入一個(gè)四字節(jié)16進(jìn)制數(shù)據(jù):47 41 45 4D。
對存儲表的高位和低位的理解,可以把每個(gè)空格都當(dāng)作一個(gè)位置,從0~1000開始計(jì)數(shù),寫在*前的就是低位,比如說存放四個(gè)字母GAME的地址低位到高位就是G到E。
將數(shù)據(jù)放入寄存器中,可以把寄存器比做一個(gè)水桶,我們放入數(shù)據(jù)的時(shí)候肯定是把"水先倒到水桶的底部,比如,把GAME放入到水桶中的話,水桶中存放的數(shù)據(jù)就成了EMAG ,也就是 45 4D 41 47 (注意:計(jì)算機(jī)中每個(gè)字節(jié)存儲的是兩個(gè)16進(jìn)制的字符)。
PLC 32位寄存器使用字,即使用兩個(gè)16位的寄存器組成一個(gè)32位的寄存器。
日系(三菱)PLC的32位的寄存器高地位排列是高地址存高16位數(shù)據(jù),低地址存低位16位數(shù)據(jù)。
歐系(西門子)PLC的32位的寄存器高地位排列是高地址存低16位數(shù)據(jù),低地址存高16位數(shù)據(jù)。
在實(shí)際配置中,主要涉及到對modbus、PLC這些需要定義寄存器具體數(shù)據(jù)格式的場景,每家設(shè)備定義或者每個(gè)現(xiàn)場的設(shè)備程序不一樣,數(shù)據(jù)解析處理的方式就有所區(qū)別了。
如圖,是鐵牛智能網(wǎng)關(guān)產(chǎn)品關(guān)于modbus和西門子PLC寄存器解析方式配置說明:
Modbus 3號命令,保持寄存器
S7-1200 I 寄存器 (開關(guān)量輸入)
S7-1200 M 寄存器 (開關(guān)量/模擬量)

S7-1200 DB塊寄存器 (開關(guān)量/模擬量)
如圖,是鐵牛智能網(wǎng)關(guān)產(chǎn)品常用寄存器數(shù)據(jù)點(diǎn)位的寄存器解析配置示例:
數(shù)據(jù)類型:包括浮點(diǎn)、整形、布爾、字符串;
讀寫方向:包括只讀、只寫、讀寫;
寄存器類型:包括開關(guān)量輸入、開關(guān)量讀寫、模擬量輸入、模擬量讀寫,對應(yīng)modbus 2號命令、1 5號命令、4號命令、3 6 16號命令;
寄存器地址:根據(jù)設(shè)備寄存器點(diǎn)表進(jìn)行配置,modbus默認(rèn)從0開始(即40001);
解析方式:包括常用的數(shù)據(jù)解析類型,見上圖“Modbus 3號命令,保持寄存器”;
位偏移:單個(gè)寄存器內(nèi)BIT位,用于存放開關(guān)量信號,比如一個(gè)modbus寄存器包括16位;
BCD碼解析:是否將模擬量數(shù)據(jù)按照BCD碼(二-十進(jìn)制碼)處理。(注:BCD 碼 (Binary-Coded Decimal)亦稱二進(jìn)碼十進(jìn)制數(shù)或二-十進(jìn)制代碼。 用 4 位二進(jìn)制數(shù)來表示 1 位十進(jìn)制數(shù)中的 0~9 這 10 個(gè)數(shù)字。)
鐵牛智能網(wǎng)關(guān)結(jié)合Tnbuild工程軟件,基本可以實(shí)現(xiàn)對工業(yè)現(xiàn)場數(shù)據(jù)類型解析全覆蓋,如果遇到特殊的數(shù)據(jù)解析規(guī)則,我們可以根據(jù)實(shí)際需求進(jìn)行對接開發(fā)、靈活配置,實(shí)現(xiàn)工業(yè)現(xiàn)場通訊的高效處理和靈活傳輸!