普通PC經過USB轉485串口 ModBus-RTU通訊協議控制伺服電機

1、RS485通訊

RS485 是半雙工通訊(2 線制),能夠一點對多點進行組網,並且 RS485 是用纜線兩端的電壓差值來表示傳遞信號,這與 RS232 電氣特性大不同。RS485 僅僅規定了接收端和發送端的電氣特性,並無規定或推薦任何數據協議html

RS485 採用兩根通訊線,一般用 A 和 B 或者 D+和 D-來表示。邏輯「1」以兩線之間的電壓差爲+(0.2~6)V 表示,邏輯「0」以兩線間的電壓差爲-(0.2~6)V 來表示,是一種典型的差分通訊,
電平與 TTL 電平兼容,可方便與 TTL 電路鏈接。算法

優勢:網絡

  1. RS485的接口信號電平比RS231-C低,不易損壞接口電路的芯片,且該電平與TTL電平兼容,方便於TTL電路相鏈接。code

  2. RS485的數據最高傳輸速率爲10Mbps。其平衡雙絞線的長度與傳輸速率呈反比,在100kbps速率下,纔可能使用規定的最長電纜長度,只有在很短的距離下才能得到最高傳輸速率。htm

  3. RS485接口採用平衡驅動器和差分接收器的組合,抗共模干擾能力強,即抗噪聲干擾性好,於是通訊距離遠,最大傳輸距離大約爲1200m,實際可達3000m。blog

  4. RS485接口在總線上容許鏈接多達128個收發器,既具備多站能力。同時須要兩個終端電阻,其阻值要求等於傳輸電纜的特性阻抗。在短距離300m內傳輸時可不鏈接終端電阻。接口

RS485引腳定義get

RS-232與RS-422及RS-485三者之間的特性與區別it

2、ModBus-RTU通訊協議

modbus協議已經成爲通用工業標準,經過協議,控制器與控制器、控制器經過網絡(以太網)與其餘設備之間能夠實現串行通訊。RTU即遠程終端單元,消息中每8位包含兩個十六進制字符。在相同的波特率下,這種方法比ASCII方式傳送的數據量大。class

2.1.1 圖解區

2.2 ModBus-RTU詳解
  • 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數據地址

2.1.1 圖解報文格式

一、主機對從機寫數據操做
若是單片機接收到一個報文那麼就對報文進行解析執行相應的處理,如上面報文:
    01             06            00 01           00 17        98 04 
  從機地址        功能號          數據地址          數據         CRC校驗

假如本機地址是 1 ,那麼單片機接收到這串數據根據數據計算CRC校驗判斷數據是否正確,若是判斷數據無誤,則結果是:
            HoldDataReg[1]  =  0x0017;
MODBUS主機就完成了一次對從機數據的寫操做,實現了通信。

二、主機對從機讀數據操做
主機進行讀HoldDataReg[1] 操做,則報文是:
    01             03           00 01         00 01          D5 CA 
 從機地址        功能號          數據地址      讀取數據個數       CRC校驗
那麼單片機接收到這串數據根據數據計算CRC校驗判斷數據是否正確,若是判斷數據無誤,則結果是:返回信息給主機,返回的信息也是有格式的:
返回內容:  
    01       03           02          0017        F8 4A
  從機地址   功能號     數據字節個數    兩個字節數據    CRC校驗
MODBUS主機就完成了一次對從機數據的讀操做,實現了通信。
2.1.2 CRC校驗

意義:例如上面的 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主機計算的)相等,若是不相等那麼說明數據傳輸有錯誤這些數據不能要。

2.1.3 功能碼
  • 經常使用功能碼
    01 (0x01) 讀線圈
    02 (0x02) 讀離散量輸入
    03 (0x03) 讀保持寄存器
    04(0x04) 讀輸入寄存器
    05 (0x05) 寫單個線圈
    06 (0x06) 寫單個寄存器
    15 (0x0F) 寫多個線圈
    16 (0x10) 寫多個寄存器

相關文章
相關標籤/搜索