溫濕度傳感器采用RS485通信和Modbus協(xié)議
溫濕度傳感器通常情況下是采用串口通信的方式進行數(shù)據(jù)交換。初采用的方式是 RS232 接口,由于工業(yè)現(xiàn)場比較復(fù)雜,各種電氣設(shè)備會在環(huán)境中產(chǎn)生比較多的電磁干擾,會導(dǎo)致信號傳輸錯誤。除此之外, RS232 接口只能實現(xiàn)點對點通信,不具備聯(lián)網(wǎng)功能,大傳輸距離也只能達到幾十米,不能滿足遠距離通信要求。而RS485 則解決了這些問題,數(shù)據(jù)信號采用差分傳輸方式,可以有效的解決共模干擾問題,大距離可以到 1200 米,并且允許多個收發(fā)設(shè)備接到同一條總線上。
隨著工業(yè)應(yīng)用通信越來越多, 1979 年施耐德電氣制定了一個用于工業(yè)現(xiàn)場的總線協(xié)議 Modbus 協(xié)議,現(xiàn)在工業(yè)中使用 RS485 通信場合很多都采用 Modbus 協(xié)議,本篇文章我們具體介紹一下 RS485 通信和 Modbus 協(xié)議。
一、 RS485通信
實際上在RS485之前RS232就已經(jīng)誕生,但是RS232有幾處不足的地方:
1、接口的信號電平值較高,達到十幾V,容易損壞接口電路的芯片,而且和TTL電平不兼容,因此和單片機電路接起來的話必須加轉(zhuǎn)換電路。
2、傳輸速率有局限,不可以過高,一般到幾十Kb/s就到極限了。
3、接口使用信號線和GND與其他設(shè)備形成共地模式的通信,這種共地模式傳輸容易產(chǎn)生干擾,并且抗干擾性能也比較弱。
4、傳輸距離有限,多只能通信幾十米。
5、通信的時候只能兩點之間進行通信,不能夠?qū)崿F(xiàn)多機聯(lián)網(wǎng)通信。
針對RS232接口的不足,不斷出現(xiàn)了一些新的接口標準,RS485就是其中之一,他具備以下的特點:
1、我們在講A/D的時候,講過差分信號輸入的概念,同時也介紹了差分輸入的好處,大的優(yōu)勢是可以抑制共模干擾。尤其工業(yè)現(xiàn)場的環(huán)境比較復(fù)雜,干擾比較多,所以通信如果采用的是差分方式,就可以有效的抑制共模干擾。而RS485就是一種差分通信方式,它的通信線路是兩根,通常用A和B或者D+和D-來表示。邏輯“1”以兩線之間的電壓差為+(0.2~6)V表示,邏輯“0”以兩線間的電壓差為-(0.2~6)V來表示,是一種典型的差分通信。
2、RS485通信速度快,大傳輸速度可以達到10Mb/s以上。
3、RS485內(nèi)部的物理結(jié)構(gòu),采用的是平衡驅(qū)動器和差分接收器的組合,抗*力也大大增加。
4、傳輸距離遠可以達到1200米左右,但是他的傳輸速率和傳輸距離是成反比的,只有在100Kb/s以下的傳輸速度,才能達到大的通信距離,如果需要傳輸更遠距離可以使用中繼。
5、可以在總線上進行聯(lián)網(wǎng)實現(xiàn)多機通信,總線上允許掛多個收發(fā)器,從現(xiàn)有的RS485芯片來看,有可以掛32、64、128、256等不同個設(shè)備的驅(qū)動器。
二、Modbus協(xié)議
Modbus協(xié)議是應(yīng)用于電子控制器上的一種通用語言。通過此協(xié)議,控制器相互之間、控制器經(jīng)由網(wǎng)絡(luò)(例如以太網(wǎng))和其他設(shè)備之間可以通信,已經(jīng)成為一種工業(yè)標準。有了它,不同廠商生產(chǎn)的控制設(shè)備可以連成工業(yè)網(wǎng)絡(luò),進行集中監(jiān)控。這種協(xié)議定義了一種控制器能夠認識使用的數(shù)據(jù)結(jié)構(gòu),而不管它們是經(jīng)過何種網(wǎng)絡(luò)進行通信的。它描述了控制器請求訪問其他設(shè)備的過程,如何回應(yīng)來自其他設(shè)備的請求,以及怎樣偵測錯誤記錄,它制定了通信數(shù)據(jù)的格局和內(nèi)容的公共格式。
在進行多機通信的時候,Modbus協(xié)議規(guī)定每個控制器必須要知道他們的設(shè)備地址,識別按照地址發(fā)送過來的數(shù)據(jù),決定是否要產(chǎn)生動作,產(chǎn)生何種動作,如果要回應(yīng),控制器將生成的反饋信息用Modbus協(xié)議發(fā)出。
Modbus協(xié)議允許在各種網(wǎng)絡(luò)體系結(jié)構(gòu)內(nèi)進行簡單通信,每種設(shè)備(PLC、人機界面、控制面板、驅(qū)動程序、輸入輸出設(shè)備)都能使用Modbus協(xié)議來啟動遠程操作,一些網(wǎng)關(guān)允許在幾種使用Modbus協(xié)議的總線或網(wǎng)絡(luò)之間的通信。
Modbus有兩種通信傳輸方式,一種是ASCII模式,一種是RTU模式。由于ASCII模式的數(shù)據(jù)字節(jié)是7bit數(shù)據(jù)位,51單片機無法實現(xiàn),而且應(yīng)用也相對較少,所以應(yīng)用較多的RTU模式。
起始位和結(jié)束符:上圖代表的是一個數(shù)據(jù)幀,前后都至少有3.5個字節(jié)的時間間隔,起始位和結(jié)束符實際上沒有任何數(shù)據(jù),T1-T2-T3-T4代表的是時間間隔3.5個字節(jié)以上的時間,而真正有意義的一個字節(jié)是設(shè)備地址。
設(shè)備地址:在多個傳感器通信的時候,數(shù)據(jù)那么多,我們依靠什么判斷這個數(shù)據(jù)幀是哪個設(shè)備的呢?沒錯,就是依靠這個設(shè)備地址字節(jié)。每個設(shè)備都有一個自己的地址,當(dāng)設(shè)備接收到一幀數(shù)據(jù)后,程序首先對設(shè)備地址字節(jié)進行判斷比較,如果與自己的地址不同,則對這幀數(shù)據(jù)直接不予理會,如果與自己的地址相同,就要對這幀數(shù)據(jù)進行解析,按照之后的功能碼執(zhí)行相應(yīng)的功能。如果地址是0x00,則認為是一個廣播命令,就是所有的從機設(shè)備都要執(zhí)行的指令。
功能代碼:在第二個字節(jié)功能代碼字節(jié)中,Modbus規(guī)定了部分功能代碼,此外也保留了一部分功能代碼作為備用或者用戶自定義。