大家好,我是情報(bào)小哥~
最近使用modbus協(xié)議與第三方設(shè)備進(jìn)行通信,有幾點(diǎn)在這里小結(jié)分享一些,也避免大家以后掉坑,本文不做系統(tǒng)的modbus協(xié)議解說,僅對(duì)使用過程中遇到的問題和注意事項(xiàng)進(jìn)行描述,以基于RS485的modbus-RTU為例進(jìn)行講解:
1、字節(jié)序問題
modbus采用大端字節(jié)序進(jìn)行報(bào)文傳輸,這個(gè)非常重要,字節(jié)序不正確則對(duì)多字節(jié)數(shù)據(jù)無法解析和組拼。
這里所說的大端字節(jié)序表示:一個(gè)數(shù)據(jù)的高字節(jié)將被優(yōu)先發(fā)送,如一個(gè)word大小的數(shù)據(jù)為0x1234,那么在modbus協(xié)議打包成一幀數(shù)據(jù)進(jìn)行發(fā)送的時(shí)候在規(guī)定數(shù)據(jù)域中先發(fā)送0x12,然后發(fā)送0x34,其他多字節(jié)數(shù)據(jù)類型、CRC16校驗(yàn)也是類似的傳輸順序。
總線上的發(fā)送與接收方都要遵循大端的字節(jié)序發(fā)送格式。
2、單播與廣播
在modbus總線上采用單播和廣播的方式進(jìn)行通信,同一總線上一般都只有一個(gè)主機(jī)、多個(gè)從機(jī);在同一時(shí)間內(nèi)一個(gè)主機(jī)可以通過地址區(qū)分與想要的從機(jī)通信,這邊是單播方式;同時(shí)modbus總線也可以一個(gè)主機(jī)以廣播的方式與多個(gè)從機(jī)進(jìn)行通信。
平時(shí)我們也稱這種通信方式為主從通信(Maser/Slave),主機(jī)發(fā)送請(qǐng)求消息,當(dāng)從機(jī)接收到正確消息后響應(yīng)請(qǐng)求返回給主機(jī);同時(shí)主機(jī)也可以直接發(fā)消息修改從機(jī)的數(shù)據(jù),實(shí)現(xiàn)主從數(shù)據(jù)的雙向讀寫。
3、與PLC通信協(xié)議
具體與什么設(shè)備通信,只是不同的設(shè)備所支持的功能碼不同,或相關(guān)的叫法和習(xí)慣不同,具體需要根據(jù)相應(yīng)的設(shè)備來進(jìn)行區(qū)分了,但都符合modbus協(xié)議標(biāo)準(zhǔn)。
在跟PLC進(jìn)行通信的時(shí)候其給過來的協(xié)議會(huì)指明相應(yīng)的PLC地址而此地址與實(shí)際發(fā)送modbus報(bào)文數(shù)據(jù)幀中的寄存器等地址并不是一致的。
如上圖所示PLC工程師一般都會(huì)以PLC地址為基礎(chǔ)給出協(xié)議,而很多其他軟件工程師對(duì)接的時(shí)候,以為PLC地址(也叫PLC的存儲(chǔ)地址)便是modbus報(bào)文數(shù)據(jù)幀中的寄存器地址,其實(shí)兩者并不相等。
像西門子的PLC地址其每個(gè)功能碼所對(duì)應(yīng)的modbus報(bào)文地址都是從0開始,即從0x0000~0xFFFF;所以你可以把PLC地址看成是一種絕對(duì)地址,而modbus報(bào)文地址僅僅只是在該功能碼下的一個(gè)相對(duì)地址。
如采用03H功能碼讀取PLC存儲(chǔ)地址是40002的寄存器,而此時(shí)modbus報(bào)文中的寄存器地址為01。
3、線圈和寄存器的理解
由于早期PLC對(duì)于一些布爾量均是用于控制一些繼電器或者接觸器等等,這些器件主要是通過線圈來進(jìn)行吸合與彈開,后面叫法也就沿用下來了,同時(shí)線圈分配輸入線圈和輸出線圈,跟我們平時(shí)MCU的IO引腳的電平讀寫有點(diǎn)類似。
而對(duì)于一些非bool類型的數(shù)據(jù)均采用寄存器的概念來繼續(xù)傳輸,相信這樣便可以對(duì)PLC中的這些名字進(jìn)一步理解了。
4、RS485終端電阻
對(duì)于較長(zhǎng)距離的RS485通信,采用線型連接并增加終端120Ω匹配電阻來降低干擾增加總線通信的穩(wěn)定性,如下圖所示:
最 后
好了,這里小哥就簡(jiǎn)單介紹了最近使用modbus的一些踩坑筆記,記得關(guān)注學(xué)習(xí)哦。
-
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7108瀏覽量
89302 -
MODBUS
+關(guān)注
關(guān)注
28文章
1817瀏覽量
77161 -
字節(jié)
+關(guān)注
關(guān)注
0文章
40瀏覽量
13775
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論