RS485基本知识
MCU給轉換器輸出低TTL信號,B比A上的電壓高,反之,則A比B上的電壓高。
485協議規定兩條線上電壓差值為多少表示0或者1,電壓通過儀表可以測量得到,所以說RS-485是硬件層協議。
485的接收端可能是另外一個MCU,MCU管腳只接受TTL電平,需要將兩條線的差分電壓轉換為TTL電平。
基本電平轉換:
TTL電平 轉 485電平 485電平 轉 TTL電平 給MCU
RS485原理:由于485電平和TTL電平標準定義不通,需要電平轉換芯片來實現兩者間的數據交換。
?
RS485總線標準
RS-485采用平衡式發送和差分接收方式實現通信,由于傳輸線通常使用雙絞線,又是差分輸入,所以有極強的抗共模干擾能力,RS485采用半雙工工作方式,支持多點數據通信。總線網絡拓撲一般采用終端匹配的總線型結構,即一條總線將各個節點串接起來,不支持環形或星型網絡,如果需要使用星型結構就必須適用485中繼器或485集線器。RS-485 總線一般支持32個節點,如果特質的485芯片可以達到128或256個節點最大支持400個節點。
RS485收發芯片(電平轉換芯片)可以理解為兩部分:驅動器和接收器
差分傳輸:
發送端在兩條信號線上傳輸輻值相等,相位相反的電信號,接收端在對接收的兩條信號線做減法運算,這樣就能獲得信號翻倍的信號。
一般情況下 不需要增加終端電阻,通信距離超過300米的情況下在開始端和結束端增加終端電阻
隔離雖能有效抑制高共模電壓,但在總線還會存在浪涌沖擊,電源線與485短路的情況,通常在總線端采取保護措施,? 在A,B,兩端各串一個熱敏電阻,在AB接口與熱敏電阻中間設有TVS瞬變抑制二極管。沒有故障時,熱敏電阻接近零,不影響正常通訊,當誤接220V時,熱敏電阻變的無窮大,相當于通訊回路和外面斷開,當故障消失后,熱敏電阻阻值降到零,又可以正常使用。由于RS-485是半雙工通信,收發轉換是需要一定的時間,所以一般在收發轉換之間和每發送完一幀數據之后,都要有相應的延時,如果出現收發不正常或第一幀數據之后就出現誤碼現象,則可以適當的增加一下延時時間。
異步通信數據以字節的方式傳送,在每一個字節傳送之前,先要通過一個低電平起始位實現握手。為防止干擾信號誤觸RO(接收器輸出)產生負跳變,使接收端MCU進入接收狀態,建議RO外接10kΩ的上拉電阻。
電源旁路電容,作用是給485芯片提供一個干凈的電源,使它穩定的工作。
RS485與RS232的區別
RS485和RS232一樣都是基于串口的通訊接口,數據收發的操作是一致的,所以使用的是同樣WinCE的底層驅動程序。但是它們在實際應用中通訊模式卻有著很大的區別,RS485接口為半雙工數據通訊模式,而RS232接口為全雙工數據通訊模式,數據的收發不能同時進行,為了保證數據收發的不沖突,硬件上是通過方向切換來實現的,相應也要求軟件上必須將收發的過程嚴格地分開。
RS485接口組成的半雙工網絡,一般是兩線制(以前有四線制接法,只能實現點對點的通信方式,現很少采用),多采用屏蔽雙絞線傳輸。這種接線方式為總線式拓撲結構在同一總線上最多可以掛接32個結點。在RS485通信網絡中一般采用的是主從通信方式,即一個主機帶多個從機。
RS-485接口的最大傳輸距離標準值為4000英尺(約1219米),實際上可達3000英尺,另外RS-232接口在總線上只允許連接1個收發器,即單站能力。而RS-485接口在總線上是允許連接多達128個收發器。即具有多站能力,這樣用戶可以利用單一的RS-485接口方便地建立起設備網絡。
Modbus協議
MODBUS協議又分MODBUS RTU,MODBUS ASCII和后來發展的MODBUS TCP三種模式:其中前兩種(MODBUS RTU,MODBUS ASCII)所用的物理硬件接口都是串行(Serial)通訊口(RS232,RS422,RS485)。
?Modbus是一種串行通信協議,施耐德電氣(Schneider Electric)于1979年為使用可編程邏輯控制器(PLC)通信而發表。Modbus已經成為工業領域通信協議的業界標準(De facto),并且現在是工業電子設備之間常用的連接方式。
? ? 對于串行連接,存在兩個變種,它們在數值數據表示不同和協議細節上略有不同。Modbus RTU(遠程終端模式)是一種緊湊的,采用二進制表示數據的方式,Modbus ASCII是一種人類可讀的,冗長的表示方式。這兩個變種都使用串行通信(serial communication)方式。RTU格式后續的命令/數據帶有循環冗余校驗的校驗和,而ASCII格式采用縱向冗余校驗的校驗和。被配置為RTU變種的節點不會和設置為ASCII變種的節點通信,反之亦然。
? ? 對于通過TCP/IP(例如以太網)的連接,存在多個Modbus/TCP變種,這種方式不需要校驗和計算。
原理?
Modbus協議是一個master/slave架構的協議。有一個節點是master節點,其他使用Modbus協議參與通信的節點是slave節點。每一個slave設備都有一個唯一的地址。在串行和MB+網絡中,只有被指定為主節點的節點可以啟動一個命令(在以太網上,任何一個設備都能發送一個Modbus命令,但是通常也只有一個主節點設備啟動指令)。
? ? 一個ModBus命令包含了打算執行的設備的Modbus地址。所有設備都會收到命令,但只有指定位置的設備會執行及回應指令(地址0例外,指定地址0的指令是廣播指令,所有收到指令的設備都會運行,不過不回應指令)。所有的Modbus命令包含了檢查碼,以確定到達的命令沒有被破壞。基本的ModBus命令能指令一個RTU改變它的寄存器的某個值,控制或者讀取一個I/O端口,以及指揮設備回送一個或者多個其寄存器中的數據。
特點
ModBus特點:
(1)標準、開放,用戶可以免費、放心地使用Modbus協議,不需要交納許可證費,也不會侵犯知識產權。目前,支持Modbus的廠家超過400家,支持Modbus的產品超過600種。
(2)Modbus可以支持多種電氣接口,如RS-232、RS-485等,還可以在各種介質上傳送,如雙絞線、光纖、無線等。
(3)Modbus的幀格式簡單、緊湊,通俗易懂。用戶使用容易,廠商開發簡單。
Modbus TCP 數據幀
Modbus TCP 的數據幀可分為:MBAP(報文頭) + PDU(幀結構),PDU由功能碼和數據組成。
????報文頭長度為7字節,由事務處理標識、協議標識符、長度、單元標識符組成,協議標識符一般指協議的類型,比如00 00標識Modbus TCP,消息頭結構如下:
?Modbus操作對象
?有四種:線圈、離散輸入、保持寄存器、輸入寄存器。
線圈 :PLC(可編程邏輯控制器)的輸出位,開關量,在Modbus中可讀可寫
離散量 :PLC的輸入位,開關量,在Modbus中只讀
輸入寄存器 :PLC中只能從模擬量輸入端改變的寄存器,在Modbus中只讀
保持寄存器 :PLC中用于輸出模擬量信號的寄存器,在Modbus中可讀可寫
?
?01 (0x01) 讀線圈
02 (0x02) 讀離散量輸入
03 (0x03) 讀保持寄存器
04 (0x04) 讀輸入寄存器
05 (0x05) 寫單個線圈
06 (0x06) 寫單個寄存器
15 (0x0F) 寫多個線圈
16 (0x10) 寫多個寄存器
幀結構?
?從遠程設備中讀保持寄存器連續塊的內容的Modbus 指令實例如下:
????0x03:讀保持寄存器
????請求:MBAP 功能碼 起始地址H 起始地址L 寄存器數量H 寄存器數量L(共12字節)
????響應:MBAP 功能碼 數據長度 寄存器數據(長度:9+寄存器數量×2)
????如:起始地址是0x0000,寄存器數量是 0x0003
????????00 01 00 00 00 06 01 03 00 00 00 03
????回:數據長度為0x06,第一個寄存器的數據為0x21,其余為0x00
????????00 01 00 00 00 09 01 03 06 00 21 00 00 00 00
?
與RS485的關系
RS485是一個物理接口,簡單的說是硬件
MODBUS是一種國際標準的通訊協議,用于不同廠商之間的設備交換數據(一般是工業用途);所謂協議,也可以理解為上面有人說的“語言”吧,簡單的說是軟件。
MODBUS只是通信協議的一種,就像漢語和英語一樣的一種用來交流的語言,一種機器之間交流的語言。在交流之前肯定要有溝通的橋梁,那就是傳輸媒介485或232或其他電氣規則。同一種協議可以用不同的傳輸媒介方式如485或232,但是同一傳輸線路上不能同時存在兩種協議。其中Modbus的協議棧如下圖所示:
Modbus協議主要描述的是應用層的信息封裝格式,處于OSI模式的第七層(應用層)。Modbus的物理層可以是RS-485、Ethernet II /802.3。使用EIA/TIA-485這種串行通訊方式的Modbus協議框圖如下所示:?
?該圖是基于RS485的Modbus-RTU協議棧
總結
- 上一篇: Fireworks-CS5入门到高级12
- 下一篇: WIN7 32 联想针式打印机 联想DP