Modbus 与 RS485 的区别与联系
目前道長(zhǎng)入坑了一家智能家居公司,以后會(huì)分享記錄一些智能家居相關(guān)的知識(shí),如果有問(wèn)題,希望小伙伴交流指正。
一、RS-485
1.1 RS-485 來(lái)源
RS485是美國(guó)電子工業(yè)協(xié)會(huì)(EIA)在1983年批準(zhǔn)了一個(gè)新的平衡傳輸標(biāo)準(zhǔn)(balanced transmission standard),EIA一開(kāi)始將RS(Recommended Standard)做為標(biāo)準(zhǔn)的前綴,不過(guò)后來(lái)為了便于識(shí)別標(biāo)準(zhǔn)的來(lái)源,已將RS改為EIA/TIA。目前標(biāo)準(zhǔn)名稱(chēng)為T(mén)IA-485,但工程師及應(yīng)用指南仍繼續(xù)使用RS-485來(lái)稱(chēng)呼此標(biāo)準(zhǔn)。
 ? ?RS-485僅是一個(gè)電氣標(biāo)準(zhǔn),描述了接口的物理層,像協(xié)議、時(shí)序、串行或并行數(shù)據(jù)以及鏈路全部由設(shè)計(jì)者或更高層協(xié)議定義。 RS485定義的是使用平衡(也稱(chēng)作差分)多點(diǎn)傳輸線(xiàn)的驅(qū)動(dòng)器(driver)和接收器(receiver)的電氣特性。
1.2 RS-485 通信原理
????把MCU出來(lái)的一條的TTL信號(hào)經(jīng)過(guò)芯片轉(zhuǎn)換為兩根線(xiàn)(線(xiàn)A、線(xiàn)B)上的信號(hào)。當(dāng)MCU給轉(zhuǎn)換器輸入低TTL電平時(shí),轉(zhuǎn)換器會(huì)使得B的電壓比A的電壓高,反之,A的電壓比B的電壓高。
 ????RS485協(xié)議規(guī)約兩條電平線(xiàn)上差值為多少表示0或者1,電壓是通過(guò)儀表可以測(cè)量得到的,所以說(shuō)RS485是硬件層協(xié)議。RS485協(xié)議的接收端可能是另一個(gè)MCU,MCU管腳也只接受TTL電平,轉(zhuǎn)換芯片過(guò)來(lái)的是兩條線(xiàn)的電壓,所以需要對(duì)此兩條線(xiàn)差分電壓轉(zhuǎn)換為T(mén)TL電平。
 ? ? 
 ????????????????????????????????????????????????????????圖一 RS485通訊原理
????RS485能夠進(jìn)行遠(yuǎn)距離傳輸主要得益于使用差分信號(hào)進(jìn)行傳輸,當(dāng)有噪聲干擾時(shí)仍可以使用線(xiàn)路上兩者差值進(jìn)行判斷,使傳輸數(shù)據(jù)不受噪聲干擾。
 ? ? ? ? ? ?
 ????????????????????????????????????????????????????????圖二 差分信號(hào)傳輸
1.3 RS-485 總線(xiàn)
????RS485采用半雙工工作方式,支持多點(diǎn)數(shù)據(jù)通信。RS485總線(xiàn)網(wǎng)絡(luò)拓?fù)湟话悴捎媒K端匹配的總線(xiàn)型結(jié)構(gòu)。即采用一條總線(xiàn)將各個(gè)節(jié)點(diǎn)串接起來(lái),不支持環(huán)形或星型網(wǎng)絡(luò)。
 
 ????????????????????????????????????????????????????????圖三 RS485總線(xiàn)
????RS485總線(xiàn)只是一種電氣標(biāo)準(zhǔn),并不是什么新的協(xié)議,與232差不多,當(dāng)然這么說(shuō)不是很恰當(dāng),但是有助于大家理解。現(xiàn)在的總線(xiàn)格式很多,RS485相對(duì)于其他的總線(xiàn)有什么特點(diǎn)?首先,就比較一下大家耳熟能詳?shù)腃AN總線(xiàn)。
1.4 CAN 總線(xiàn)
????CAN是控制器局域網(wǎng)絡(luò)(Controller Area Network, CAN)的簡(jiǎn)稱(chēng),是由研發(fā)和生產(chǎn)汽車(chē)電子產(chǎn)品著稱(chēng)的德國(guó)BOSCH公司開(kāi)發(fā)了的,并最終成為國(guó)際標(biāo)準(zhǔn)(ISO11898)。
 ????相比于CAN總線(xiàn),RS232、RS485只能代表通訊的物理介質(zhì)層和鏈路層,如果要實(shí)現(xiàn)數(shù)據(jù)的雙向訪(fǎng)問(wèn),就必須自己編寫(xiě)通訊應(yīng)用程序,但這種程序多數(shù)都不能符合ISO/OSI的規(guī)范,只能實(shí)現(xiàn)較單一的功能,適用于單一設(shè)備類(lèi)型,程序不具備通用性。
 ????CAN(Controller Area Network)屬于現(xiàn)場(chǎng)總線(xiàn)的范疇,它是一種以ISO/OSI模型為基礎(chǔ)的,具有完整的軟件支持系統(tǒng),能夠解決總線(xiàn)控制、沖突檢測(cè)、鏈路維護(hù)等問(wèn)題。現(xiàn)場(chǎng)總線(xiàn)設(shè)備自動(dòng)成網(wǎng),無(wú)主/從設(shè)備之分或允許多主存在。在同一個(gè)層次上不同廠(chǎng)家的產(chǎn)品可以互換,設(shè)備之間具有互操作性。
- CAN總線(xiàn) VS RS485總線(xiàn)
 
 ????????????????????????????????????????????????????????圖四 CAN總線(xiàn)與RS485總線(xiàn)對(duì)比
1.5 RS-485 協(xié)議
????RS485協(xié)議一般含有指令頭、功能碼、設(shè)備地址、數(shù)據(jù)、校驗(yàn)碼等部分組成,如朗園燈控485協(xié)議所示: 
 ????????????????????????????????????????????????????????圖五 RS485 協(xié)議指令格式舉例
二、Modbus-RTU
2.1 Modbus來(lái)源
????Modbus是一種串行通信協(xié)議,施耐德電氣(Schneider Electric)于1979年為使用可編程邏輯控制器(PLC)通信而發(fā)表。Modbus已經(jīng)成為工業(yè)領(lǐng)域通信協(xié)議的業(yè)界標(biāo)準(zhǔn)(De facto),并且現(xiàn)在是工業(yè)電子設(shè)備之間常用的連接方式。
 ????對(duì)于串行連接,存在兩個(gè)變種,它們?cè)跀?shù)值數(shù)據(jù)表示不同和協(xié)議細(xì)節(jié)上略有不同。Modbus RTU(遠(yuǎn)程終端模式)是一種緊湊的,采用二進(jìn)制表示數(shù)據(jù)的方式,Modbus ASCII是一種人類(lèi)可讀的,冗長(zhǎng)的表示方式。這兩個(gè)變種都使用串行通信(serial communication)方式。RTU格式后續(xù)的命令/數(shù)據(jù)帶有循環(huán)冗余校驗(yàn)的校驗(yàn)和,而ASCII格式采用縱向冗余校驗(yàn)的校驗(yàn)和。被配置為RTU變種的節(jié)點(diǎn)不會(huì)和設(shè)置為ASCII變種的節(jié)點(diǎn)通信,反之亦然。
 ????對(duì)于通過(guò)TCP/IP(例如以太網(wǎng))的連接,存在多個(gè)Modbus/TCP變種,這種方式不需要校驗(yàn)和計(jì)算。
2.2 原理
????Modbus協(xié)議是一個(gè)master/slave架構(gòu)的協(xié)議。有一個(gè)節(jié)點(diǎn)是master節(jié)點(diǎn),其他使用Modbus協(xié)議參與通信的節(jié)點(diǎn)是slave節(jié)點(diǎn)。每一個(gè)slave設(shè)備都有一個(gè)唯一的地址。在串行和MB+網(wǎng)絡(luò)中,只有被指定為主節(jié)點(diǎn)的節(jié)點(diǎn)可以啟動(dòng)一個(gè)命令(在以太網(wǎng)上,任何一個(gè)設(shè)備都能發(fā)送一個(gè)Modbus命令,但是通常也只有一個(gè)主節(jié)點(diǎn)設(shè)備啟動(dòng)指令)。
 ????一個(gè)ModBus命令包含了打算執(zhí)行的設(shè)備的Modbus地址。所有設(shè)備都會(huì)收到命令,但只有指定位置的設(shè)備會(huì)執(zhí)行及回應(yīng)指令(地址0例外,指定地址0的指令是廣播指令,所有收到指令的設(shè)備都會(huì)運(yùn)行,不過(guò)不回應(yīng)指令)。所有的Modbus命令包含了檢查碼,以確定到達(dá)的命令沒(méi)有被破壞。基本的ModBus命令能指令一個(gè)RTU改變它的寄存器的某個(gè)值,控制或者讀取一個(gè)I/O端口,以及指揮設(shè)備回送一個(gè)或者多個(gè)其寄存器中的數(shù)據(jù)。
2.3 Modbus 協(xié)議
2.3.1 Modbus TCP 數(shù)據(jù)幀
????Modbus TCP 的數(shù)據(jù)幀可分為:MBAP(報(bào)文頭) + PDU(幀結(jié)構(gòu)),PDU由功能碼和數(shù)據(jù)組成。
 ????報(bào)文頭長(zhǎng)度為7字節(jié),由事務(wù)處理標(biāo)識(shí)、協(xié)議標(biāo)識(shí)符、長(zhǎng)度、單元標(biāo)識(shí)符組成,協(xié)議標(biāo)識(shí)符一般指協(xié)議的類(lèi)型,比如00 00標(biāo)識(shí)Modbus TCP,消息頭結(jié)構(gòu)如下:
 
 ????????????????????????????????????????????????????????圖六 Modbus 報(bào)文頭
2.3.2 Modbus操作對(duì)象
???? 有四種:線(xiàn)圈、離散輸入、保持寄存器、輸入寄存器。
- 線(xiàn)圈 :PLC(可編程邏輯控制器)的輸出位,開(kāi)關(guān)量,在Modbus中可讀可寫(xiě)
- 離散量 :PLC的輸入位,開(kāi)關(guān)量,在Modbus中只讀
- 輸入寄存器 :PLC中只能從模擬量輸入端改變的寄存器,在Modbus中只讀
- 保持寄存器 :PLC中用于輸出模擬量信號(hào)的寄存器,在Modbus中可讀可寫(xiě)
根據(jù)操作對(duì)象不同,Modbus功能碼有不同的區(qū)分,例如如下常用功能碼:
01 (0x01) 讀線(xiàn)圈
 02 (0x02) 讀離散量輸入
 03 (0x03) 讀保持寄存器
 04 (0x04) 讀輸入寄存器
 05 (0x05) 寫(xiě)單個(gè)線(xiàn)圈
 06 (0x06) 寫(xiě)單個(gè)寄存器
 15 (0x0F) 寫(xiě)多個(gè)線(xiàn)圈
 16 (0x10) 寫(xiě)多個(gè)寄存器
2.3.3 幀結(jié)構(gòu)
 ????????????????????????????????????????????????????????圖七 Modbus 幀結(jié)構(gòu)
從遠(yuǎn)程設(shè)備中讀保持寄存器連續(xù)塊的內(nèi)容的Modbus 指令實(shí)例如下:
 ? ? 0x03:讀保持寄存器
 ? ? 請(qǐng)求:MBAP 功能碼 起始地址H 起始地址L 寄存器數(shù)量H 寄存器數(shù)量L(共12字節(jié))
 ? ? 響應(yīng):MBAP 功能碼 數(shù)據(jù)長(zhǎng)度 寄存器數(shù)據(jù)(長(zhǎng)度:9+寄存器數(shù)量×2)
 ? ? 如:起始地址是0x0000,寄存器數(shù)量是 0x0003
 ? ? ? ? 00 01 00 00 00 06 01 03 00 00 00 03
 ? ? 回:數(shù)據(jù)長(zhǎng)度為0x06,第一個(gè)寄存器的數(shù)據(jù)為0x21,其余為0x00
 ? ? ? ? 00 01 00 00 00 09 01 03 06 00 21 00 00 00 00
2.4 與RS485的關(guān)系
????MODBUS只是通信協(xié)議的一種,就像漢語(yǔ)和英語(yǔ)一樣的一種用來(lái)交流的語(yǔ)言,一種機(jī)器之間交流的語(yǔ)言。在交流之前肯定要有溝通的橋梁,那就是傳輸媒介485或232或其他電氣規(guī)則。同一種協(xié)議可以用不同的傳輸媒介方式如485或232,但是同一傳輸線(xiàn)路上不能同時(shí)存在兩種協(xié)議。其中Modbus的協(xié)議棧如下圖所示:
 ? 
 ????????????????????????????????????????????????????????圖八 Modbus 協(xié)議棧
????Modbus協(xié)議主要描述的是應(yīng)用層的信息封裝格式,處于OSI模式的第七層(應(yīng)用層)。Modbus的物理層可以是RS-485、Ethernet II /802.3。使用EIA/TIA-485這種串行通訊方式的Modbus協(xié)議框圖如下所示:
 ? ? ? ? ? ? 
 ????????????????????????????????????????????????????????圖九 基于RS485的Modbus-RTU協(xié)議棧
總結(jié)
以上是生活随笔為你收集整理的Modbus 与 RS485 的区别与联系的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
 
                            
                        - 上一篇: CAM350 12.1免费下载
- 下一篇: 电子设计从零开始(1)
