基於RS485的ModBus通訊

B站https://www.bilibili.com/video/av84153640?p=6

一、通信

1.信道

傳輸數據的載體,比如古代傳信息白天用狼煙,晚上用烽火。

2.協議

收發數據雙方達成的一致協議,對數據格式、含義等作出規定,比如一道烽火代表500人,兩道代表1000人。

二、串口

1.並行通訊

以收發十六進制數據爲例,並行通訊要用8個IO口連8根線同時發送8位數據。

2.串行通訊

兩個接口兩根線構成一個迴路,每次收發1位數據。

3.RS485通信

以字節形式發送,一次可以發很多字節,MAX485芯片支持,將數字量與模擬量轉換,使用差分電路的方式,半雙工,可收可發不可同時收發(對講機一樣)。

  • 高低電平,A>B 1,A<B 0,正電2~6V,負電-2~-6V。
  • 按波特率,9600的波特率就是1s能傳輸9600位數據,約1ms發1位,距離遠的時候波特率可適當低一點。
  • 工業RTU傳輸,數字一般以16進制(8位1字節,每組數據頭加0,尾加1)或字符發送。
  • 不傳輸數據時一直髮高電平1(可用來檢查設備接線是否正確:設備通電,把萬用表調到直流10V檔,測一下設備兩根引線間的電壓是不是高電平)。

三、功能碼詳解

RS485能做的就是收發數據,如果要進行多機通信要進行一些包裝。

1.給設備進行編碼

  • modbus協議規定第一個字節用來放從機地址,01——FF,00作爲廣播地址。
  • 主機不需要編號,只有一個主機。

2.給數據進行編碼

  • 給數據地址分配了兩個字節,0000——FFFF。這個地址僅僅是個編號,不代表真實的地址。

3.給指令進行編碼

不論是PLC還是單片機,都有四種數據:

bit(位輸入/出) byte(模擬量輸入/出)
開關量輸入(以西門子繼電器爲例:I0.0~I0.7) 寄存器輸入(以雙字節爲單位,IW64)
開關量輸出(Q0.0~Q0.7,數據地址:0000~FFFF) 寄存器輸出(QW64)

主機對指令進行編碼,又稱功能碼,分成收和發兩部分,可以理解爲主機指令的編號。一方面代表是讀是寫,另一方面代表是對哪種類型的數據進行操作。

指令 編碼 操作數據類型 編碼 操作數據類型
讀數據 01 開關量輸出 02 開關量輸入
03 寄存器輸出 04 寄存器輸入
寫數據 05 開關量輸出(單個位) 06 開關量輸入(單個位)
15 寄存器輸出(多個字節) 16 寄存器輸入(多個字節)

讀位:讀繼電器開關量

讀數:讀變頻器頻率

寫位:打開2號繼電器

寫數:將變頻器的頻率從50HZ改成30HZ

寫入多個位:

發佈了28 篇原創文章 · 獲贊 8 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章