趙磊 穆蔚偉 杜石雷
摘 要:工業(yè)現(xiàn)場(chǎng)多從機(jī)通訊廣泛的應(yīng)用于各類現(xiàn)場(chǎng)通訊系統(tǒng)中,本文提出了基于雙RS-485總線的多節(jié)點(diǎn)快速通訊的協(xié)議實(shí)現(xiàn)方法,通過雙路RS-485總線連接與主控器與多個(gè)節(jié)點(diǎn)間,在不影響正常的數(shù)據(jù)上傳交互條件下,同時(shí)有效的提高了即時(shí)控制指令的下發(fā)與執(zhí)行效率;該系統(tǒng)采用私有化精簡(jiǎn)通訊協(xié)議,以適應(yīng)多節(jié)點(diǎn)、多功能的高效率通訊。
關(guān)鍵詞:工業(yè)控制;數(shù)據(jù)采集;RS-485
中圖分類號(hào):TP273 文獻(xiàn)標(biāo)識(shí)碼:A DOI:10.3969/j.issn.1003-6970.2021.02.018
本文著錄格式:趙磊,穆蔚偉,杜石雷.基于雙RS-485總線的多從機(jī)高效通訊協(xié)議的設(shè)計(jì)與實(shí)現(xiàn)[J].軟件,2021,42(02):061-063
Design and Implementation of Multi-Slave High-efficiency Communication Protocol Based on Dual RS-485 Bus
ZHAO Lei, MU Yuwei, DU Shilei
(Zhonghuan Information College Tianjin University of Technology, Tianjin? 300380)
【Abstract】:Industrial field multi-slave communication is widely used in various field communication systems. This article proposes a protocol implementation method for multi-node fast communication based on dual RS-485 buses, which one is connected to the master through dual RS-485 buses with multiple nodes, without affecting normal data upload interaction conditions, while effectively improving the issuance and execution efficiency of real-time control instructions; the system adopts a privatized and streamlined communication protocol to adapt to multi-node, multi-functional high efficiency communication.
【Key words】:industrial control;data acquisition;RS-485
0引言
工業(yè)現(xiàn)場(chǎng)多從機(jī)通訊通訊廣泛的應(yīng)用于各種工業(yè)控制中,目前在工業(yè)控制中多從機(jī)的數(shù)據(jù)通訊常見于基于RS-485的Modbus-RTU協(xié)議,但在對(duì)實(shí)時(shí)控制及數(shù)據(jù)通訊并存的系統(tǒng)中,Modbus-RTU協(xié)議的通訊效率難以達(dá)到某些應(yīng)用場(chǎng)景,無法兼顧數(shù)據(jù)采集、以及實(shí)時(shí)控制的要求,本文提出了一種基于雙RS485總線的多節(jié)點(diǎn)通訊協(xié)議,在較多從機(jī)接入總線時(shí),可以有效的提高控制指令于數(shù)據(jù)采集的通訊效率。
1物理層設(shè)計(jì)
采用RS-485串行總線作為物理層設(shè)計(jì),系統(tǒng)中采用雙路RS-485總線連接于系統(tǒng)主機(jī)與多個(gè)從機(jī)之間,RS-485總線采用平衡發(fā)送,差分接收的結(jié)構(gòu)設(shè)計(jì),因此具有抑制共模干擾的能力,采用總線式連接,實(shí)現(xiàn)一主多從機(jī)的鏈路結(jié)構(gòu),物理鏈路采用雙路通訊設(shè)計(jì):控制總線、數(shù)據(jù)總線,在主從通訊中,控制總線多用于實(shí)時(shí)性較高的控制指令下發(fā),以主機(jī)發(fā)送數(shù)據(jù)為主,當(dāng)各個(gè)從機(jī)接收到指令校驗(yàn)正確后立即執(zhí)行相應(yīng)操作,以提高控制指令的實(shí)時(shí)性。數(shù)據(jù)總線多用于常規(guī)性數(shù)據(jù)采集,主機(jī)常以輪詢方式采集各個(gè)從機(jī)數(shù)據(jù)。物理層連接方式如圖1所示。
RS-485通訊是基于通用異步串行通訊的協(xié)議標(biāo)準(zhǔn),標(biāo)準(zhǔn)的異步串行通訊協(xié)議中以每個(gè)字節(jié)作為一幀,由多個(gè)字節(jié)組成的數(shù)據(jù)流進(jìn)行通訊,通訊雙方或多方事先約定好通訊速率,按照此速率組成數(shù)據(jù)幀進(jìn)行通訊。異步串行通訊幀結(jié)構(gòu)由以下位構(gòu)成:
起始位:先發(fā)出一個(gè)邏輯”0”信號(hào),表示傳輸字符的開始。
數(shù)據(jù)位:緊接著起始位之后。數(shù)據(jù)的個(gè)數(shù)可以是4、5、6、7、8等,構(gòu)成一個(gè)字符。通常采用ASCII碼。從最低位開始傳送,靠時(shí)鐘定位。
校驗(yàn)位:數(shù)據(jù)位加上這一位后,使得“1”的位數(shù)應(yīng)為偶數(shù)(偶校驗(yàn))或奇數(shù)(奇校驗(yàn)),以此來校驗(yàn)數(shù)據(jù)傳送的正確性。
停止位:它是一個(gè)字符數(shù)據(jù)的結(jié)束標(biāo)志。可以是1位、1.5位、2位的高電平。
空閑位:處于邏輯“1”狀態(tài),表示當(dāng)前線路上沒有數(shù)據(jù)傳輸。
本系統(tǒng)中使用規(guī)定為1位起始位,8位數(shù)據(jù)位,無校驗(yàn)位,1位停止位,為保證控制指令的數(shù)據(jù)穩(wěn)定性,同時(shí)提高數(shù)據(jù)交互的效率,本系統(tǒng)中控制總線通訊速率為19200bps,數(shù)據(jù)總線通訊速率為115200bps,主機(jī)及各個(gè)從機(jī)均以此設(shè)置進(jìn)行通訊。
2數(shù)據(jù)鏈路層設(shè)計(jì)
本系統(tǒng)中數(shù)據(jù)以十六進(jìn)制格式構(gòu)成的幀結(jié)構(gòu)進(jìn)行通訊,由于系統(tǒng)中主機(jī)設(shè)備、從機(jī)設(shè)備均連接于同一總線,每個(gè)設(shè)備將以1個(gè)字節(jié)的地址作為唯一標(biāo)識(shí),主機(jī)設(shè)備的地址固定為0x00,從機(jī)地址由設(shè)備自行固定從0x01開始編碼,最大支持128個(gè)設(shè)備,但須保持各個(gè)從機(jī)設(shè)備的地址唯一,0xFF表示廣播地址,所有設(shè)備均接收此數(shù)據(jù)。
主機(jī)在發(fā)送數(shù)據(jù)時(shí)在數(shù)據(jù)幀中標(biāo)記接收從機(jī),從機(jī)接收到數(shù)據(jù)后首先校驗(yàn)數(shù)據(jù)幀的完整性,校驗(yàn)成功后提取數(shù)據(jù)幀的地址字段,判斷是否屬于本機(jī)地址,將屬于本機(jī)地址的指令進(jìn)行處理,并執(zhí)行相應(yīng)操作。
數(shù)據(jù)采用幀結(jié)構(gòu)進(jìn)行發(fā)送,每幀數(shù)據(jù)由可變長(zhǎng)度字節(jié)數(shù)據(jù)構(gòu)成,控制總線、數(shù)據(jù)總線均按照該幀結(jié)構(gòu)進(jìn)行通訊。該數(shù)據(jù)幀由幀頭、地址、功能碼、幀長(zhǎng)度、數(shù)據(jù)、校驗(yàn)字節(jié)構(gòu)成,結(jié)構(gòu)示意圖如圖2所示。
幀頭:幀頭占用1字節(jié),由系統(tǒng)固定設(shè)置為0xFE,作為該數(shù)據(jù)幀的起始同步字符的開始。
地址:地址字節(jié)為數(shù)據(jù)接收方地址,由數(shù)據(jù)發(fā)送方確定,符合地址設(shè)定的從機(jī)正常接收并處理數(shù)據(jù),不符合地址設(shè)定的從機(jī)自動(dòng)放棄。
功能碼:功能碼為指示該幀功能作用,由數(shù)據(jù)發(fā)送方確定,數(shù)據(jù)接收方根據(jù)指令集進(jìn)行指令、數(shù)據(jù)處理。
幀長(zhǎng)度:幀長(zhǎng)度用來標(biāo)記該幀中有效載荷的數(shù)據(jù)長(zhǎng)度,長(zhǎng)度有效值為0-250字節(jié)。
數(shù)據(jù):該部分為幀中有效載荷,用于傳輸數(shù)據(jù)使用,當(dāng)該指令無需參數(shù)或數(shù)據(jù)時(shí),該字節(jié)長(zhǎng)度為0,當(dāng)該指令含有數(shù)據(jù),則該部分?jǐn)?shù)據(jù)長(zhǎng)度由幀長(zhǎng)度字節(jié)標(biāo)定的數(shù)據(jù)長(zhǎng)度為準(zhǔn),添加數(shù)據(jù)。
校驗(yàn):校驗(yàn)采用CRC-8對(duì)幀中所有字節(jié)進(jìn)行校驗(yàn),校驗(yàn)數(shù)據(jù)從幀頭開始截止到校驗(yàn)字節(jié)前。當(dāng)接收方接收到數(shù)據(jù)時(shí),首先需要對(duì)數(shù)據(jù)幀進(jìn)行校驗(yàn),以保證數(shù)據(jù)的準(zhǔn)確性。
數(shù)據(jù)中固定參數(shù)占用5字節(jié),有效載荷長(zhǎng)度可變最少為0字節(jié),最多為250字節(jié),即數(shù)據(jù)幀總長(zhǎng)度最少為5字節(jié),最大為255字節(jié);由于幀最大長(zhǎng)度較小,可以有效的提高數(shù)據(jù)通訊的效率。
數(shù)據(jù)幀的界定由時(shí)間差決定,每幀數(shù)據(jù)中的字節(jié)間隔不得超過單字節(jié)數(shù)據(jù)通訊時(shí)長(zhǎng),該時(shí)長(zhǎng)根據(jù)通訊波特率決定;協(xié)議規(guī)定各個(gè)數(shù)據(jù)幀之間的時(shí)間差最少為5倍單字節(jié)數(shù)據(jù)通訊時(shí)長(zhǎng),控制總線典型空閑時(shí)間約為4.2毫秒(波特率9600bps),數(shù)據(jù)總線典型空閑時(shí)間約為0.35毫秒(波特率115200bps),即總線上接收數(shù)據(jù)的設(shè)備根據(jù)總線空閑時(shí)間判斷一幀數(shù)據(jù)是否完成傳輸。協(xié)議規(guī)定當(dāng)指令需要從機(jī)進(jìn)行反饋時(shí),從機(jī)從接收到數(shù)據(jù)至回饋數(shù)據(jù)發(fā)送間隔必須保證在100毫秒內(nèi),否則主機(jī)則認(rèn)為從機(jī)故障。
3應(yīng)用層設(shè)計(jì)
為了提高系統(tǒng)控制通訊的效率,系統(tǒng)采用控制指令與數(shù)據(jù)采集同步運(yùn)行的工作方式,在通訊協(xié)議中預(yù)設(shè)控制指令功能碼與數(shù)據(jù)采集功能碼,分別應(yīng)用于控制總線與數(shù)據(jù)總線。
控制指令以主機(jī)發(fā)送控制執(zhí)行為主,因此當(dāng)發(fā)生控制命令后可立即下發(fā)控制指令于從機(jī),無需考慮數(shù)據(jù)采集總線工作情況,從而提高了控制指令的實(shí)時(shí)性,控制指令可以采用指定地址接收,也可以采用廣播接收方式,用于對(duì)單個(gè)從機(jī),或所有從機(jī)進(jìn)行控制指令的下發(fā)。當(dāng)從機(jī)接收到控制指令,如接收成功可立即執(zhí)行,如果指令接收失敗或校驗(yàn)錯(cuò)誤,則由從機(jī)發(fā)送錯(cuò)誤指令至主機(jī),主機(jī)重新發(fā)送。
主機(jī)下發(fā)控制指令后相應(yīng)從機(jī)接收到指令解析成功后立即執(zhí)行,如由物理鏈路造成數(shù)據(jù)錯(cuò)位導(dǎo)致校驗(yàn)失敗,或從機(jī)不支持相應(yīng)控制指令導(dǎo)致控制指令執(zhí)行失敗,此時(shí)從機(jī)需立即向主機(jī)發(fā)送錯(cuò)誤代碼,主機(jī)根據(jù)錯(cuò)誤代碼進(jìn)行重發(fā)或異常處理。控制指令通訊流程如圖3所示。
數(shù)據(jù)采集指令以主機(jī)輪詢從機(jī)的方式進(jìn)行,當(dāng)從機(jī)接入較多時(shí)輪詢時(shí)間將會(huì)相應(yīng)增加,因此數(shù)據(jù)采集指令適用于實(shí)時(shí)性要求不高的數(shù)據(jù)采集,主機(jī)通過輪詢方式以此發(fā)送采集指令,各個(gè)從機(jī)接收到采集指令,接收成功后上傳數(shù)據(jù),主機(jī)接收到數(shù)據(jù)后進(jìn)行下一從機(jī)的輪詢。
主機(jī)根據(jù)已接入總線的設(shè)備依次下發(fā)數(shù)據(jù)采集指令,對(duì)應(yīng)從機(jī)接收到數(shù)據(jù)采集指令后對(duì)指令進(jìn)行解析,并根據(jù)相應(yīng)要求在規(guī)定時(shí)間內(nèi)回復(fù)數(shù)據(jù),當(dāng)超過回饋時(shí)間,主機(jī)則認(rèn)為數(shù)據(jù)采集指令未收到或接收錯(cuò)誤,并進(jìn)行重發(fā),當(dāng)多次指令未回饋,認(rèn)為從機(jī)掉線,主機(jī)做出相應(yīng)異常告警,并將該地址從機(jī)屏蔽,對(duì)其他正常從機(jī)繼續(xù)進(jìn)行數(shù)據(jù)采集。數(shù)據(jù)采集指令通訊流程如圖4所示。
系統(tǒng)中預(yù)設(shè)部分常用指令,同時(shí)可以根據(jù)實(shí)際應(yīng)用修改指令集,為提高系統(tǒng)的通訊效率,采用雙指令集進(jìn)行通訊,基本控制指令集如表1所示。
4結(jié)語(yǔ)
本系統(tǒng)設(shè)計(jì)實(shí)現(xiàn)了工業(yè)現(xiàn)場(chǎng)多從機(jī)高效率通訊應(yīng)用,基于雙RS-485總線指令、數(shù)據(jù)獨(dú)立通訊的結(jié)構(gòu),并使用精簡(jiǎn)的數(shù)據(jù)結(jié)構(gòu)及指令,減少數(shù)據(jù)幀大小,有效的提高了通訊速率,可以應(yīng)用于要求高實(shí)時(shí)性工業(yè)控制的數(shù)據(jù)通訊。