ModBus是一種通信協(xié)議,用于連接自動化設(shè)備(如PLC、溫度控制器等)和計(jì)算機(jī)。它被廣泛應(yīng)用于工業(yè)控制系統(tǒng),支持多種通信方式,包括ModBus RTU、ModBus ASCII和ModBus TCP等。本文將主要解釋這三種通信方式的區(qū)別和應(yīng)用場景。
所有ModBus協(xié)議的基本結(jié)構(gòu)
無論變體如何,所有標(biāo)準(zhǔn)ModBus通信都遵循相同的消息傳遞結(jié)構(gòu)。一切都圍繞著將值存儲在寄存器中然后讀取它們。這里有幾種數(shù)據(jù)類型在起作用。例如,離散輸入可以存儲為單個位。更廣泛地說,輸入寄存器存儲基于 ModBus 的設(shè)備收集的值。將多個分立器件存儲為單個位,而模擬值甚至 ASCII 字符可能存儲在 8 位寄存器中(最低有效位為 0 位,最高有效位為 64 位)。不同類型的寄存器按用于輪詢它們的功能代碼進(jìn)行分類。功能代碼字段中的“1”用于“讀取線圈”(檢查控制繼電器的狀態(tài))?!?”表示“讀取離散輸入”(檢查離散輸入的狀態(tài))?!?”是“讀保持寄存器”(從多用途讀/寫寄存器收集數(shù)據(jù))。ModBus 規(guī)范中還有更多。寄存器由其“起始地址”請求,起始地址是一個 16 位值,用于唯一標(biāo)識設(shè)備中的每個寄存器。對RTU或其他設(shè)備的主控請求將始終引用要報(bào)告的所需寄存器。
ModBus RTU
ModBus RTU(Remote Terminal Unit)是ModBus協(xié)議最常見的實(shí)現(xiàn)方式,采用二進(jìn)制數(shù)據(jù)傳輸,具有較高的傳輸效率和穩(wěn)定性。它使用串行通信,支持RS232和RS485兩種接口。在RTU模式下,每個字節(jié)可以傳輸兩位十六進(jìn)制字符。比如0xAB會直接以十六進(jìn)制0xAB(二進(jìn)制10101011)進(jìn)行發(fā)送。其消息幀格式由以下部分組成:
RTU模式采用16 位CRC校驗(yàn),后續(xù)的命令/數(shù)據(jù)帶有循環(huán)冗余校驗(yàn)的校驗(yàn)和。RTU模式比較常用,而ASCII一般很少用。
ModBus TCP
ModBus TCP(Transmission Control Protocol)是ModBus協(xié)議的一種擴(kuò)展,它使用TCP/IP協(xié)議進(jìn)行通信,可以在局域網(wǎng)(LAN)和廣域網(wǎng)(WAN)之間傳輸數(shù)據(jù)。ModBus TCP支持多種網(wǎng)絡(luò)設(shè)備,包括計(jì)算機(jī)、服務(wù)器、交換機(jī)、路由器等。它適用于遠(yuǎn)程監(jiān)控和控制,常用于工業(yè)網(wǎng)絡(luò)和物聯(lián)網(wǎng)應(yīng)用。該協(xié)議的物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層都是基于TCP協(xié)議,它只是在應(yīng)用層將ModBus協(xié)議封裝進(jìn)去。然后接收端將該TCP數(shù)據(jù)包拆包后,重新獲得原始ModBus幀,然后按照ModBus協(xié)議規(guī)范進(jìn)行解析,并將要返回的數(shù)據(jù)包重新封裝到TCP協(xié)議中,發(fā)回至發(fā)送端。與串行通信的傳輸格式不同,TCP模式去除了附加地址和校驗(yàn),增加報(bào)文頭,如下圖所示。
通過以太網(wǎng)傳輸時使用TCP模式,不使用校驗(yàn),因?yàn)門CP協(xié)議是一個面向連接的可靠協(xié)議。ModBus RTU和ModBus TCP作為ModBus協(xié)議的兩個主要變體,傳統(tǒng)上,ModBus RTU(需要將信息傳送回ModBus主站或SCADA HMI的RTU)被許多不同類型的設(shè)備使用。ModBus RTU通常通過RS485串行發(fā)送。這種菊花鏈通信通道允許多個設(shè)備在主從配置中向單個HMI端口報(bào)告。每個從設(shè)備都能夠通過向主設(shè)備發(fā)送流量來說話。這使得ModBus網(wǎng)絡(luò)結(jié)構(gòu)保持相當(dāng)簡單。
ModBus ASCII
ModBus ASCII(American Standard Code for Information Interchange)采用ASCII碼傳輸文本信息,每個8Bit 字節(jié)都作為兩個ASCII字符發(fā)送。相對ModBus RTU而言,它的傳輸效率較低,但具有更好的可讀性。ModBus ASCII也使用串行通信,并支持RS232和RS485兩種接口,適用于短距離通信。在ASCII模式下,每個8位的字節(jié)拆分為兩個ASCII字符進(jìn)行發(fā)送,消息幀以英文冒號“:”開始,以回車和換行(CRLF)符號結(jié)束。例如十六進(jìn)制數(shù)0xAB,會被分解成ASCII字符“A”和“B”進(jìn)行發(fā)送。
ASCII模式允許兩個字符之間長達(dá)1s的間隔時間而不引發(fā)通信故障,ASCII格式采用縱向冗余校驗(yàn)(LRC)的校驗(yàn)和。
三者的區(qū)別
ModBus RTU和ModBus TCP的主要區(qū)別在于ModBus RTU使用菊花鏈網(wǎng)絡(luò),因此可以通過兩條線連接整個網(wǎng)絡(luò),并通過為每個節(jié)點(diǎn)提供唯一的地址來與每個設(shè)備進(jìn)行通信。ModBus TCP使用星形網(wǎng)絡(luò),其中每個節(jié)點(diǎn)都有一條稱為Cat 5或Cat 6的單獨(dú)電纜。它們可以使用路由器連接。它們還帶有網(wǎng)絡(luò)上每個節(jié)點(diǎn)唯一的個人地址。地址可以是 1 到 255,這意味著理論上,我們可以在同一網(wǎng)絡(luò)上擁有 254 臺設(shè)備。也可以通過互聯(lián)網(wǎng)使用ModBus TCP。在ModBus RTU和ModBus ASCII中,通信是通過串行接口進(jìn)行的,這意味著它們只能在較短的距離內(nèi)進(jìn)行通信。因此,如果需要在較遠(yuǎn)的距離進(jìn)行通信,則需要使用ModBus TCP。另一方面,ModBus RTU和ModBus ASCII使用二進(jìn)制和ASCII碼分別進(jìn)行數(shù)據(jù)傳輸,因此它們的傳輸效率和可讀性存在差異。在選擇ModBus通信方式時,需要考慮多種因素,包括通信距離、傳輸效率和可讀性。對于短距離通信,ModBus RTU和ModBus ASCII均可作為選擇。如果需要更高的傳輸效率,則可以選擇ModBus RTU;如果需要更好的可讀性,則可以選擇ModBus ASCII。對于遠(yuǎn)距離通信,則只能使用ModBus TCP。
-
MODBUS
+關(guān)注
關(guān)注
28文章
1812瀏覽量
77087 -
TCP
+關(guān)注
關(guān)注
8文章
1371瀏覽量
79137
發(fā)布評論請先 登錄
相關(guān)推薦
評論