RS485 是半雙工通信(2 線制),可以一點對多點進行組網,而且 RS485 是用纜線兩端的電壓差值來表示傳遞信號,這與 RS232 電氣特性大不一樣。RS485 僅僅規定了接收端和發送端的電氣特性,並沒有規定或推薦任何數據協議
RS485 采用兩根通信線,通常用 A 和 B 或者 D+和 D-來表示。邏輯“1”以兩線之間的電壓差為+(0.2~6)V 表示,邏輯“0”以兩線間的電壓差為-(0.2~6)V 來表示,是一種典型的差分通信,
電平與 TTL 電平兼容,可方便與 TTL 電路連接。
優點:
-
RS485的接口信號電平比RS231-C低,不易損壞接口電路的芯片,且該電平與TTL電平兼容,方便於TTL電路相連接。
-
RS485的數據最高傳輸速率為10Mbps。其平衡雙絞線的長度與傳輸速率呈反比,在100kbps速率下,才可能使用規定的最長電纜長度,只有在很短的距離下才能獲得最高傳輸速率。
-
RS485接口采用平衡驅動器和差分接收器的組合,抗共模干擾能力強,即抗噪聲干擾性好,因而通信距離遠,最大傳輸距離大約為1200m,實際可達3000m。
-
RS485接口在總線上允許連接多達128個收發器,既具有多站能力。同時需要兩個終端電阻,其阻值要求等於傳輸電纜的特性阻抗。在短距離300m內傳輸時可不連接終端電阻。
RS-232與RS-422及RS-485三者之間的特性與區別
modbus協議已經成為通用工業標准,通過協議,控制器與控制器、控制器通過網絡(以太網)與其他設備之間可以實現串行通信。RTU即遠程終端單元,消息中每8位包含兩個十六進制字符。在相同的波特率下,這種方法比ASCII方式傳送的數據量大。
- Modbus 一個工業上常用的通訊協議、一種通訊約定。Modbus協議包括RTU、ASCII、TCP。其中MODBUS-RTU最常用,比較簡單,在單片機上很容易實現。
上面圖中看到了報文格式:下面詳細分析一條報文:01 06 00 01 00 17 98 04
01 06 00 01 00 17 98 04
從機地址 功能號 數據地址 數據 CRC校驗
這一串數據的意思是:把數據 0x0017(十進制23) 寫入 1號從機地址 0x0001數據地址
1、主機對從機寫數據操作
如果單片機接收到一個報文那么就對報文進行解析執行相應的處理,如上面報文:
01 06 00 01 00 17 98 04
從機地址 功能號 數據地址 數據 CRC校驗
假如本機地址是 1 ,那么單片機接收到這串數據根據數據計算CRC校驗判斷數據是否正確,如果判斷數據無誤,則結果是:
HoldDataReg[1] = 0x0017;
MODBUS主機就完成了一次對從機數據的寫操作,實現了通訊。
2、主機對從機讀數據操作
主機進行讀HoldDataReg[1] 操作,則報文是:
01 03 00 01 00 01 D5 CA
從機地址 功能號 數據地址 讀取數據個數 CRC校驗
那么單片機接收到這串數據根據數據計算CRC校驗判斷數據是否正確,如果判斷數據無誤,則結果是:返回信息給主機,返回的信息也是有格式的:
返回內容:
01 03 02 0017 F8 4A
從機地址 功能號 數據字節個數 兩個字節數據 CRC校驗
MODBUS主機就完成了一次對從機數據的讀操作,實現了通訊。
意義:例如上面的 98 04 是它前面的數據(01 06 00 01 00 17)通過一算法(見附錄2,很簡單的)計算出來的結果,其實就像是計算累加和那樣。(累加和:就是010600010017加起來的值,然后它的算法就是加法)。
作用:在數據傳輸過程中可能數據會發生錯誤,CRC檢驗檢測接收的數據是否正確。比如主機發出01 06 00 01 00 17 98 04,那么從機接收到后要根據01 06 00 01 00 17 再計算CRC校驗值,從機判斷自己計算出來的CRC校驗是否與接收的CRC校驗(98 04主機計算的)相等,如果不相等那么說明數據傳輸有錯誤這些數據不能要。
- 常用功能碼
01 (0x01) 讀線圈
02 (0x02) 讀離散量輸入
03 (0x03) 讀保持寄存器
04(0x04) 讀輸入寄存器
05 (0x05) 寫單個線圈
06 (0x06) 寫單個寄存器
15 (0x0F) 寫多個線圈
16 (0x10) 寫多個寄存器