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
寫入多個位: