![]() 圖片來(lái)源:Yaskawa 作者 | Lucas Paruch Modbus協(xié)議與RS-485為工業(yè)物聯(lián)網(wǎng)應(yīng)用提供了簡(jiǎn)單、可靠、低成本的通信方案,并使工業(yè)過程高效運(yùn)行。 從最初的物聯(lián)網(wǎng)(IoT)發(fā)展到現(xiàn)在的工業(yè)4.0,在這個(gè)過程中,我們?cè)诠I(yè)物聯(lián)網(wǎng)(IIoT)中增加了一個(gè)額外的“I”,并將大數(shù)據(jù)、人工智能和機(jī)器學(xué)習(xí)(AI/ML)的概念引入到自動(dòng)化與控制領(lǐng)域。在這些閃亮的新技術(shù)背后,潛藏著一個(gè)低調(diào)的協(xié)議:Modbus。 Modbus通信協(xié)議是最初由Modicon公司(后來(lái)被施耐德電氣收購(gòu))于1979年發(fā)布的,并迅速成為工業(yè)通信領(lǐng)域的業(yè)界標(biāo)準(zhǔn)。其成功得益于以下特性:簡(jiǎn)單、易于部署且開源;異步串行所需的處理資源最少;差分串行驅(qū)動(dòng),在惡劣環(huán)境中具有出色的抗噪性;以及支持長(zhǎng)距離多點(diǎn)串行總線(1200米無(wú)需要中繼器/交換機(jī))。 經(jīng)過四十多年的快速發(fā)展,工業(yè)網(wǎng)絡(luò)的數(shù)據(jù)采集、通信和實(shí)時(shí)處理的規(guī)模已遠(yuǎn)超20世紀(jì)80年代的預(yù)期。然而,IIoT中仍存在大量幾十年都未發(fā)生根本性變化的小型設(shè)備。廣泛分布于系統(tǒng)中的邊緣設(shè)備和傳感器,需要一種可靠且低成本的方式向中央IIoT控制器傳輸數(shù)據(jù)。相比于部署加固型以太網(wǎng)方案僅傳輸少量字節(jié),Modbus RTU提供了一種可靠的通信手段,甚至可通過簡(jiǎn)單的8位微控制器實(shí)現(xiàn)低成本部署。 01 Modbus協(xié)議概述和工作原理 Modbus采用客戶端-服務(wù)器架構(gòu)(此前稱為主從模式)。在每個(gè)Modbus網(wǎng)絡(luò)中,都會(huì)指定一個(gè)設(shè)備作為客戶端??蛻舳耸俏ㄒ豢梢灾鲃?dòng)發(fā)起通信的設(shè)備,而服務(wù)器(從設(shè)備)僅在收到客戶端請(qǐng)求后作出響應(yīng)。這種結(jié)構(gòu)確保了通信的有序性和穩(wěn)定性,適用于各種工業(yè)自動(dòng)化應(yīng)用。 Modbus RTU是目前最常見的Modbus串行通信實(shí)現(xiàn)方式。所有Modbus設(shè)備都必須支持 RTU 模式,而部分設(shè)備還兼容 ASCII 模式,以滿足早期老舊應(yīng)用(如調(diào)制解調(diào)器通信)的需求。為了簡(jiǎn)化討論,本文中所有涉及串行 Modbus 的內(nèi)容均默認(rèn)基于 RTU 實(shí)現(xiàn)。 在 Modbus網(wǎng)絡(luò)中,每個(gè)服務(wù)器設(shè)備都被分配一個(gè)唯一的地址,范圍從1到247??蛻舳送ㄟ^該地址,向特定服務(wù)器節(jié)點(diǎn)請(qǐng)求或發(fā)送數(shù)據(jù),從而實(shí)現(xiàn)高效的數(shù)據(jù)交換和設(shè)備控制。Modbus將服務(wù)器數(shù)據(jù)分為四組:離散線圈、離散輸入、輸入寄存器和保持寄存器。 02 如何將Modbus與工業(yè)控制結(jié)合使用? 當(dāng)使用工業(yè)控制設(shè)備,如PLC、人機(jī)界面(HMI)和變頻器時(shí),Modbus幀通常在后臺(tái)處理,功能代碼對(duì)工程師來(lái)說是透明的(工程師只需從下拉列表中選擇“讀取寄存器”)。然而,對(duì)于高級(jí)故障排除,尤其是在部署自定義嵌入式傳感器或邊緣控制器硬件時(shí),了解Modbus幀的結(jié)構(gòu)變得非常重要。通過在PC上使用串行總線監(jiān)控軟件,或使用具有協(xié)議解碼功能的數(shù)字示波器,工程師可以識(shí)別并監(jiān)控在Modbus串行網(wǎng)絡(luò)上傳輸?shù)拿總€(gè)請(qǐng)求和響應(yīng)消息的內(nèi)容。 讀取數(shù)據(jù)的請(qǐng)求(由客戶端發(fā)起)包含服務(wù)器設(shè)備的節(jié)點(diǎn)地址、讀取功能代碼、請(qǐng)求的數(shù)據(jù)地址以及要讀取的連續(xù)16位寄存器的數(shù)量。例如,要從服務(wù)器節(jié)點(diǎn)09讀取數(shù)據(jù)寄存器10和11,客戶端會(huì)發(fā)送包含8個(gè)字節(jié)的請(qǐng)求。串行總線上的每個(gè)服務(wù)器都會(huì)接收到此消息,但只有節(jié)點(diǎn)09會(huì)確認(rèn)它已收到命令。假設(shè)寄存器10的值為3243(0x0cab),寄存器11的值為4660(0x1234)。在這種情況下,服務(wù)器節(jié)點(diǎn)09將向客戶端發(fā)送響應(yīng),總共9個(gè)字節(jié)。 服務(wù)器會(huì)驗(yàn)證響應(yīng)是否來(lái)自預(yù)期的節(jié)點(diǎn)(09),確保該節(jié)點(diǎn)已對(duì)預(yù)期的功能代碼做出響應(yīng),并檢查響應(yīng)的數(shù)據(jù)量是否符合要求。 每個(gè)串行幀以循環(huán)冗余校驗(yàn)(CRC)結(jié)尾。CRC算法通過一系列異或和移位操作來(lái)計(jì)算兩字節(jié)值。在接收到串行傳輸時(shí),接收端會(huì)重新計(jì)算CRC值。如果計(jì)算出的CRC值與傳輸中的值不匹配,則表明數(shù)據(jù)在傳輸過程中發(fā)生了損壞,此時(shí)請(qǐng)求將被忽略(通常會(huì)進(jìn)行重試)。 向服務(wù)器節(jié)點(diǎn)寫入數(shù)據(jù)的請(qǐng)求(由客戶端發(fā)起)與讀取請(qǐng)求非常相似。該請(qǐng)求包含服務(wù)器設(shè)備的節(jié)點(diǎn)地址、寫功能代碼、要寫的第一個(gè)寄存器的數(shù)據(jù)地址、要寫入的字節(jié)數(shù)以及要寫入的數(shù)據(jù)。例如,要將值4和256分別寫入設(shè)備節(jié)點(diǎn)09 上的數(shù)據(jù)寄存器10和11,客戶端會(huì)發(fā)送請(qǐng)求。網(wǎng)絡(luò)上的每臺(tái)服務(wù)器都會(huì)收到該消息,但只有節(jié)點(diǎn) 09 會(huì)處理該請(qǐng)求。完成請(qǐng)求的任務(wù)(將4寫入寄存器10,將256寫入寄存器11)后,節(jié)點(diǎn)09將向客戶端發(fā)送確認(rèn)消息,表明任務(wù)已成功完成。服務(wù)器將再次驗(yàn)證是否完成了預(yù)期節(jié)點(diǎn)地址的寫入。如果出現(xiàn)異常錯(cuò)誤或請(qǐng)求超時(shí),服務(wù)器可以選擇重試操作或標(biāo)記客戶端節(jié)點(diǎn)為錯(cuò)誤狀態(tài)。 讀取和寫入其它數(shù)據(jù)類型(如線圈和輸入)遵循類似格式。在所有情況下,客戶端都會(huì)發(fā)起請(qǐng)求,而被請(qǐng)求的服務(wù)器節(jié)點(diǎn)則會(huì)確認(rèn)任務(wù)的完成。 廣播消息是這種請(qǐng)求/確認(rèn)交換中的唯一例外。當(dāng)網(wǎng)絡(luò)中存在多個(gè)相同的服務(wù)器節(jié)點(diǎn)時(shí),服務(wù)器可以向所有設(shè)備同時(shí)廣播消息。客戶端通過廣播地址00而不是節(jié)點(diǎn)地址發(fā)起請(qǐng)求。所有服務(wù)器節(jié)點(diǎn)都能識(shí)別并響應(yīng)該00請(qǐng)求,無(wú)論其節(jié)點(diǎn)地址如何。由于命令是同時(shí)發(fā)往所有節(jié)點(diǎn),因此不會(huì)收到任何響應(yīng)。當(dāng)客戶端需要同步所有連接的服務(wù)器節(jié)點(diǎn)上的日期或時(shí)間時(shí),廣播消息非常有用。廣播還可以幫助在多個(gè)邊緣節(jié)點(diǎn)中同步信號(hào),而無(wú)需按順序逐一向每個(gè)節(jié)點(diǎn)發(fā)送消息。 03 采用RS-485的五個(gè)原因 Modbus協(xié)議可以在各種不同的物理層上實(shí)現(xiàn)。傳統(tǒng)的裝置通常使用TIA-422(RS-422)標(biāo)準(zhǔn),而TIA-232(RS-232)標(biāo)準(zhǔn)則可能用于一些特定的應(yīng)用。然而,這兩種標(biāo)準(zhǔn)在現(xiàn)代應(yīng)用中并不常見。 EIA/TIA-485(RS-485)是當(dāng)今最常見和最通用的串行接口。RS-485的五個(gè)關(guān)鍵特性使其非常適合工業(yè)控制通信應(yīng)用: 1.差分信號(hào)具有出色的抗信號(hào)噪聲性能; 2.多點(diǎn)線性總線拓?fù)湓试S連接多個(gè)節(jié)點(diǎn); 3.無(wú)需額外硬件即可支持長(zhǎng)達(dá)1200米的總線長(zhǎng)度; 4.異步通信易于與低成本微控制器和工業(yè)無(wú)線發(fā)射機(jī)集成; 5.將收發(fā)器集成到嵌入式控制中的成本低廉。 04 Modbus中的信號(hào)傳輸機(jī)制 單端信號(hào)傳輸是數(shù)字信號(hào)從發(fā)射器傳輸?shù)浇邮掌鞯淖詈?jiǎn)單方式(例如RS-232)。在單端網(wǎng)絡(luò)中,發(fā)射器通過開關(guān)電壓源來(lái)發(fā)送信號(hào),接收器則將信號(hào)與公共參考進(jìn)行比較,將電壓脈沖轉(zhuǎn)化為串行數(shù)據(jù)傳輸?shù)?和0。然而,單端信號(hào)容易受到電磁干擾(EMI)的影響,因?yàn)樗性O(shè)備共享相同的公共參考。當(dāng)線路上引入噪聲時(shí),信號(hào)和參考之間的電壓差可能變得難以區(qū)分,從而導(dǎo)致1和0的錯(cuò)誤解讀。 差分信號(hào)傳輸通過主動(dòng)驅(qū)動(dòng)兩條傳輸線來(lái)傳輸數(shù)據(jù)(見圖1)。這種方法具有優(yōu)異的抗噪能力,因?yàn)榻邮掌鲿?huì)比較非反相信號(hào)和反相信號(hào)。當(dāng)線路上發(fā)生干擾時(shí),由于信號(hào)在兩條線路上的變化相同,接收器可以消除這種干擾,從而確保數(shù)據(jù)的準(zhǔn)確傳輸。這種設(shè)計(jì)有效地避免了外部噪聲的影響,提高了信號(hào)的可靠性。 ▲圖1:圖中比較了Modbus應(yīng)用中單端和差分信號(hào)的區(qū)別。 在多點(diǎn)線性串行總線上,所有設(shè)備通常都連接到相同的兩條信號(hào)線。主母線電纜必須是線性的,這意味著所有設(shè)備都接入同一根總線電纜,而不是通過“Y”形或“星形”連接。為了確??偩€的信號(hào)質(zhì)量,設(shè)備的“分接”導(dǎo)體應(yīng)該盡可能短,以確??偩€看起來(lái)像單一線路??偩€有兩個(gè)明確的終點(diǎn),不能更多也不能更少。線路終端位于線性總線的兩端??蛻舳伺c服務(wù)器的物理位置或服務(wù)器節(jié)點(diǎn)地址的分配數(shù)量并不重要。圖2所示的四個(gè)設(shè)備可以按任何順序重新排列,而不會(huì)影響總線的操作或配置。 Modbus規(guī)范確保任何RS-485裝置至少支持32個(gè)設(shè)備(包括客戶端)。這些限制是由每個(gè)收發(fā)器對(duì)信號(hào)線施加的電壓降和串行總線的最大允許長(zhǎng)度決定的。值得注意的是,32個(gè)設(shè)備并不是硬性上限。如果節(jié)點(diǎn)收發(fā)器的規(guī)格不明確,則通常需要將設(shè)備數(shù)量限制為32個(gè)。然而,現(xiàn)代高阻抗RS-485收發(fā)器的負(fù)載額定值通常非常低。例如,如果所有節(jié)點(diǎn)都使用1/8單位負(fù)載收發(fā)器,那么允許的設(shè)備總數(shù)將增加到256個(gè)。 此外,信號(hào)中繼器提供了一種經(jīng)濟(jì)高效的方式,以增加允許的節(jié)點(diǎn)數(shù)量。有源中繼器能夠?qū)蓚€(gè)滿載的總線段連接在一起,從而作為一個(gè)網(wǎng)絡(luò)運(yùn)行。在定制的IoT傳感器網(wǎng)絡(luò)中,如果需要,充當(dāng)中繼器的第二個(gè)收發(fā)器可以輕松且低成本地嵌入到設(shè)備控制設(shè)計(jì)中。 05 Modus的部署和網(wǎng)絡(luò)規(guī)劃 RS-485安裝的最大總線長(zhǎng)度(節(jié)點(diǎn)之間的所有電纜段的總和)通常限制為1200米。使用合適的電纜規(guī)格至關(guān)重要,因?yàn)椴划?dāng)?shù)碾娎|是Modbus(RS-485)裝置失敗的主要原因之一。在RS-485之上的Modbus,要求使用屏蔽雙絞線(STP)電纜,通常為24 AWG。然而,并非所有STP電纜的性能都相同。為了確保最佳性能,電纜需要具有120Ω的標(biāo)稱特性阻抗和較低的導(dǎo)體電容(小于15pf/ft)。百通 9841通常被認(rèn)為是RS-485電纜的黃金標(biāo)準(zhǔn)。如果考慮使用替代電纜,請(qǐng)仔細(xì)比較規(guī)格。雖然在測(cè)試臺(tái)上,其它電纜結(jié)構(gòu)(如Cat5)可能工作正常,在現(xiàn)場(chǎng)也可能勉強(qiáng)運(yùn)行數(shù)月,但它們無(wú)法提供專門設(shè)計(jì)的電纜那樣的長(zhǎng)期可靠性。 ▲圖2:該圖展示了典型Modbus應(yīng)用中的線性總線配置。 Modbus實(shí)施指南要求在RS-485網(wǎng)絡(luò)上增加線路終端。在應(yīng)用終端時(shí),網(wǎng)絡(luò)兩端的終端必須始終一致。在實(shí)踐中,與終端相關(guān)的權(quán)衡是不可避免的。終端的主要目的是抑制信號(hào)反射——防止信號(hào)從總線的終端反射并干擾后續(xù)的數(shù)據(jù)脈沖。每次信號(hào)到達(dá)總線終端時(shí),都會(huì)發(fā)生反射并損失一部分能量。經(jīng)過3到6次反射后,信號(hào)通常會(huì)衰減到足以不再對(duì)系統(tǒng)造成風(fēng)險(xiǎn)的程度。 影響終端的第二個(gè)變量是位寬。對(duì)于9600波特率,信號(hào)在采樣之前有大約50微秒的時(shí)間來(lái)穩(wěn)定,這為信號(hào)提供了更多的穩(wěn)定時(shí)間。然而,在115k波特率下,信號(hào)僅有大約4微秒的時(shí)間來(lái)穩(wěn)定,這使得信號(hào)更容易受到反射的干擾。隨著波特率的增加,信號(hào)的穩(wěn)定時(shí)間減少,因此信號(hào)反射的影響更為顯著,進(jìn)而增加了對(duì)終端的需求。 為簡(jiǎn)單起見,許多設(shè)備制造商建議在所有網(wǎng)絡(luò)上使用120Ω終端,無(wú)論長(zhǎng)度或比特率如何。然而,電阻終端在具有大量收發(fā)器裝置負(fù)載的短網(wǎng)絡(luò)上并不理想,因?yàn)殡娮杞K端會(huì)在總線上引入電壓降。隨著電壓降的增加,反相和非反相信號(hào)之間的電壓差減小,使網(wǎng)絡(luò)更容易受到干擾。很少有制造商實(shí)施推薦的電阻電容器(RC)終端(120Ω電阻與1nF電容器串聯(lián))。添加串聯(lián)電容器消除了與通過終端電阻器的直流穩(wěn)態(tài)電流相關(guān)的電壓降,在不犧牲信號(hào)電壓裕度的情況下,提供了所需的反射信號(hào)衰減。增加電容的唯一潛在缺點(diǎn)是引入RC延遲,這可能會(huì)影響需要非常高比特率的應(yīng)用,超過Modbus RS-485應(yīng)用中通常使用的比特率。 線極化不是必須的。 如果要實(shí)現(xiàn),則它只能在網(wǎng)絡(luò)上實(shí)現(xiàn)一次 (通常集成到客戶端設(shè)備中)。極化電阻器的目的是在沒有設(shè)備傳輸時(shí)將信號(hào)線“上拉”和“下拉”到已知狀態(tài)。除非針對(duì)特定的應(yīng)用情況,否則通常不會(huì)實(shí)施極化。 在網(wǎng)絡(luò)規(guī)劃過程中,需要重點(diǎn)考慮以下三個(gè)關(guān)鍵因素:所需傳輸?shù)臄?shù)據(jù)寄存器數(shù)量、數(shù)據(jù)傳輸所需的時(shí)間,以及數(shù)據(jù)查詢的頻率要求。為了最大限度地降低電磁干擾和信號(hào)反射的影響,同時(shí)確保系統(tǒng)可靠性,建議初始波特率選擇9600或19200。只有在確實(shí)需要更高傳輸速率的情況下,才考慮采用更高的比特率設(shè)置。 Modbus(RS-485)能夠?qū)崿F(xiàn)長(zhǎng)距離連接分布廣泛的節(jié)點(diǎn),而無(wú)需中繼器和交換機(jī),這對(duì)許多低帶寬物聯(lián)網(wǎng)監(jiān)控應(yīng)用非常有益。串行通信的異步特性和對(duì)延遲的容忍性,也使其易于創(chuàng)建混合無(wú)線網(wǎng)絡(luò)。如果鋪設(shè)1200米長(zhǎng)的電纜不切實(shí)際,Modbus串行幀可以簡(jiǎn)單地封裝在射頻(RF)幀中,通過空中發(fā)送并由接收無(wú)線電轉(zhuǎn)換回有線信號(hào)。使用這種方法,從有線到無(wú)線的切換,對(duì)網(wǎng)絡(luò)上的設(shè)備是透明的。通過使用900mhz工業(yè)網(wǎng)狀網(wǎng)絡(luò)技術(shù),Modbus設(shè)備的網(wǎng)絡(luò)可以很容易地?cái)U(kuò)展到幾平方英里,而不再局限于1200米的總線電纜距離。 06 Modbus何時(shí)適用于自動(dòng)化應(yīng)用? Modbus的應(yīng)用不僅局限于串行通信領(lǐng)域。Modbus-TCP作為一種廣泛采用的實(shí)現(xiàn)方式,它保留了與Modbus-RTU相同的數(shù)據(jù)類型和功能代碼體系,但通過將請(qǐng)求和響應(yīng)封裝在TCP/IP數(shù)據(jù)包中,實(shí)現(xiàn)了基于以太網(wǎng)的傳輸能力。 對(duì)于需要高速傳輸和大帶寬的應(yīng)用場(chǎng)景,TCP/IP無(wú)疑是理想的選擇。然而,在許多數(shù)據(jù)采集應(yīng)用中,基于RS-485的Modbus RTU仍然是一種極具吸引力且經(jīng)濟(jì)高效的替代方案。值得注意的是,這兩種硬件實(shí)現(xiàn)方式并非相互排斥——在典型的控制器系統(tǒng)中,通常會(huì)根據(jù)具體的數(shù)據(jù)傳輸需求,同時(shí)管理TCP/IP和RS-485設(shè)備網(wǎng)絡(luò)。Modbus在過去四十年中的發(fā)展細(xì)節(jié)似乎令人目不暇接,但就其核心而言,Modbus和RS-485提供了一種簡(jiǎn)單可靠的通信解決方案,可將構(gòu)成工業(yè)物聯(lián)網(wǎng)的眾多 “物 ”連接起來(lái),并使工業(yè)過程高效運(yùn)行。 關(guān)鍵概念: ■ 基于RS-485的Modbus RTU是一種極具吸引力且經(jīng)濟(jì)高效的工業(yè)通信解決方案。 ■ 在規(guī)劃Modbus網(wǎng)絡(luò)時(shí),需要考慮傳輸?shù)臄?shù)據(jù)寄存器數(shù)量、傳輸所需數(shù)據(jù)所需的時(shí)間以及數(shù)據(jù)查詢的頻率。 思考一下: 為什么Modbus在工業(yè)自動(dòng)化領(lǐng)域取得了成功? |
|