,
(武漢理工大學(xué) 理學(xué)院,武漢 430070)
工業(yè)上為了保證生產(chǎn)安全和生產(chǎn)質(zhì)量,大量的工業(yè)信息監(jiān)測(cè)傳感器正投入使用。現(xiàn)就鋼鐵冶煉工業(yè)中對(duì)鍋爐煤槍管道溫度監(jiān)測(cè)采集傳感網(wǎng)絡(luò)系統(tǒng)進(jìn)行分析,目前鋼鐵工業(yè)中對(duì)管道溫度采集的數(shù)據(jù)普遍采用zigbee傳輸,其通信距離有限,無法同時(shí)兼顧抗干擾和低功耗,所以本系統(tǒng)設(shè)計(jì)采用LoRa通信,相比于zigbee通信,其具有低功耗、抗干擾強(qiáng)和通信距離遠(yuǎn)的特點(diǎn)[1]。但實(shí)際應(yīng)用中,還是存在LoRa通信的鄰頻干擾[2]、LoRa網(wǎng)關(guān)的節(jié)點(diǎn)容量有限以及傳感網(wǎng)絡(luò)系統(tǒng)參數(shù)無法在線設(shè)置的問題。針對(duì)這些問題,并借鑒modbus協(xié)議的設(shè)計(jì)思想[3],本文提出基于LoRa的工業(yè)監(jiān)測(cè)自組網(wǎng)協(xié)議系統(tǒng)的設(shè)計(jì)。
工業(yè)監(jiān)測(cè)自組網(wǎng)系統(tǒng)主要由溫度采樣節(jié)點(diǎn)、通信網(wǎng)關(guān)、上位機(jī)服務(wù)器和web前端四部分組成。
系統(tǒng)工作時(shí),溫度節(jié)點(diǎn)負(fù)責(zé)對(duì)環(huán)境溫度信息進(jìn)行采集并將溫度值通過LoRa無線傳輸給子網(wǎng)關(guān)。網(wǎng)關(guān)集成有8路的子網(wǎng)關(guān),其負(fù)責(zé)接收節(jié)點(diǎn)溫度信息,網(wǎng)關(guān)MCU處理信息并打包節(jié)點(diǎn)數(shù)據(jù)通過TCP傳輸方式發(fā)送給服務(wù)器。上位機(jī)服務(wù)器負(fù)責(zé)處理網(wǎng)絡(luò)通信中上行、下行的數(shù)據(jù)。web前端負(fù)責(zé)顯示各類信息,以及控制指令的下發(fā)。
用戶可以使用與服務(wù)器IP地址在同一網(wǎng)段的任何一臺(tái)PC打開web上位機(jī)的前端即系統(tǒng)的監(jiān)控界面,實(shí)時(shí)監(jiān)測(cè)溫度的同時(shí)能夠在線操控網(wǎng)關(guān)。服務(wù)器則響應(yīng)來自前端的數(shù)據(jù)顯示請(qǐng)求,或是解析處理到來的數(shù)據(jù)信息或控制信息。
自組網(wǎng)協(xié)議的設(shè)計(jì)實(shí)現(xiàn)了MCU對(duì)8路子網(wǎng)關(guān)的合理化控制及網(wǎng)關(guān)同服務(wù)器規(guī)范化的信息交互。系統(tǒng)的結(jié)構(gòu)圖如圖1所示。
圖1 系統(tǒng)結(jié)構(gòu)圖
LoRa溫度節(jié)點(diǎn)硬件部分包括主控芯片、溫度傳感器、LoRa射頻模塊以及電源管理模塊。溫度傳感器以單總線方式連接主控芯片,射頻模塊則以SPI接線方式連接主控芯片。
節(jié)點(diǎn)主控芯片使用的是意法半導(dǎo)體(ST)公司開發(fā)的STM32L053R8[4],其具有超低功耗、高速率、外設(shè)接口豐富等特點(diǎn)。DS18B20可編程分辨率的單總線數(shù)字溫度計(jì),其具有測(cè)溫范圍廣、精度高、轉(zhuǎn)換速度快等特點(diǎn)。SX1276[5]主要采用LoRaTM遠(yuǎn)程調(diào)制解調(diào)器,用于超長距離擴(kuò)頻通信,抗干擾性強(qiáng),能夠最大限度降低電流消耗,此外SX1276制作成本低,且具有高靈敏度。節(jié)點(diǎn)采用3.6 V鋰電池供電。
網(wǎng)關(guān)部分包括8路的子網(wǎng)關(guān)、主控芯片、WK系列串口擴(kuò)展模塊、W5500網(wǎng)口模塊和電源管理模塊以及其他預(yù)留功能模塊。
子網(wǎng)關(guān)硬件部分無溫度傳感器,其余結(jié)構(gòu)大致和節(jié)點(diǎn)相同,微控制器為STM32L053R8,搭載了137 MHz至1020 MHz低功耗遠(yuǎn)距離收發(fā)器SX1276。
圖2 網(wǎng)關(guān)硬件結(jié)構(gòu)
圖2為網(wǎng)關(guān)硬件結(jié)構(gòu)圖,網(wǎng)關(guān)的主控芯片采用ST公司開發(fā)的STM32F407VET6[6],這款芯片具有處理速度快、存儲(chǔ)容量大、片內(nèi)功能豐富等特點(diǎn)。W5500[7]是一款全硬件支持TCP/IP協(xié)議的嵌入式以太網(wǎng)控制器,可同時(shí)支持8路的Socket獨(dú)立通信,具有穩(wěn)定高速網(wǎng)絡(luò)通訊的特點(diǎn)。
網(wǎng)關(guān)預(yù)留了片外存儲(chǔ)模塊、4G模塊和GPS模塊。片外存儲(chǔ)模塊提供1 G的外部可讀寫flash,4G模塊為了網(wǎng)關(guān)的數(shù)據(jù)傳輸增加了一種通信渠道,用戶可以通過4 G網(wǎng)絡(luò)無線終端接收網(wǎng)關(guān)實(shí)時(shí)發(fā)送的數(shù)據(jù)。GPS模塊主要是在全部子網(wǎng)關(guān)滿載且長時(shí)間工作后,對(duì)網(wǎng)關(guān)的系統(tǒng)時(shí)間進(jìn)行校準(zhǔn)。電源管理部分采用外部12 V電源供電。
系統(tǒng)程序流程的設(shè)計(jì)分為三部分:節(jié)點(diǎn)程序流程設(shè)計(jì)、網(wǎng)關(guān)程序流程設(shè)計(jì)、web上位機(jī)設(shè)計(jì)流程[8]。本節(jié)主要就節(jié)點(diǎn)和網(wǎng)關(guān)進(jìn)行分析。
節(jié)點(diǎn)對(duì)環(huán)境溫度進(jìn)行采樣并將采樣到的溫度信息通過數(shù)字信號(hào)發(fā)送到相應(yīng)的子網(wǎng)關(guān)。但在周期采樣前節(jié)點(diǎn)須先向子網(wǎng)關(guān)發(fā)送入網(wǎng)請(qǐng)求,在收到入網(wǎng)許可后,便開始正常工作。入網(wǎng)請(qǐng)求是為了同子網(wǎng)關(guān)的系統(tǒng)時(shí)間同步,而使同一子網(wǎng)關(guān)下的全部節(jié)點(diǎn)可按同一系統(tǒng)時(shí)間來分配發(fā)送的時(shí)間順序。入網(wǎng)不成功則需要重新入網(wǎng)。節(jié)點(diǎn)程序流程如圖3所示。
圖3 節(jié)點(diǎn)程序流程圖
節(jié)點(diǎn)的工作流程還遵循自組網(wǎng)協(xié)議,需要按照協(xié)議規(guī)定的數(shù)據(jù)格式和協(xié)議規(guī)定的指令碼進(jìn)行相應(yīng)的操作。
網(wǎng)關(guān)程序流程設(shè)計(jì)包括子網(wǎng)關(guān)和網(wǎng)關(guān)兩部分。兩者依據(jù)自組網(wǎng)協(xié)議規(guī)范來實(shí)現(xiàn)信息的交互和具體的功能。
3.2.1 子網(wǎng)關(guān)程序流程設(shè)計(jì)
子網(wǎng)關(guān)的程序流程,大致和節(jié)點(diǎn)的程序流程相反。即節(jié)點(diǎn)SX1276設(shè)置為發(fā)送模式入網(wǎng)請(qǐng)求發(fā)送,子網(wǎng)關(guān)則將SX1276設(shè)置為接收模式,接收到入網(wǎng)信息后,對(duì)信息校驗(yàn),校驗(yàn)正確便讀取RTC時(shí)鐘信息,并將時(shí)鐘值寫入回復(fù)信息包中,然后SX1276設(shè)為發(fā)送模式對(duì)節(jié)點(diǎn)入網(wǎng)信息進(jìn)行回復(fù)。發(fā)送成功后,便開啟接收模式,接收后續(xù)的節(jié)點(diǎn)周期上傳的數(shù)據(jù)或其他節(jié)點(diǎn)的入網(wǎng)請(qǐng)求。子網(wǎng)關(guān)程序流程如圖4所示。
圖4 子網(wǎng)關(guān)程序流程圖
WK2124模塊將子網(wǎng)關(guān)4路的串口轉(zhuǎn)成SPI接口連接至網(wǎng)關(guān)的MCU。子網(wǎng)關(guān)接收到節(jié)點(diǎn)周期信號(hào)會(huì)將數(shù)據(jù)通過WK2124串口擴(kuò)展模塊繼續(xù)上傳給主網(wǎng)關(guān)的MCU。
3.2.2 主網(wǎng)關(guān)程序流程設(shè)計(jì)
網(wǎng)關(guān)通過兩個(gè)WK2124串口擴(kuò)展模塊,連接并管控8路子網(wǎng)關(guān)。網(wǎng)關(guān)MCU主要負(fù)責(zé)驅(qū)動(dòng)W5500網(wǎng)絡(luò)接口,處理網(wǎng)絡(luò)數(shù)據(jù),并將處理后的數(shù)據(jù)進(jìn)行上行或下行的傳輸。
網(wǎng)關(guān)上電,網(wǎng)關(guān)MCU進(jìn)行初始化。配置3路SPI,通過SPI讀寫W5500和WK2124的寄存器來設(shè)置W5500和WK2124。開啟定時(shí)器,對(duì)網(wǎng)絡(luò)連接進(jìn)行偵聽計(jì)時(shí)。網(wǎng)關(guān)通過DHCP來獲取本地IP地址,目的端IP地址根據(jù)上位機(jī)服務(wù)器的IP地址來配置,相關(guān)端口的設(shè)置在W5500的初始化中執(zhí)行。連接建立8路Socket,分別用于8路子網(wǎng)關(guān)的數(shù)據(jù)通信。
查詢網(wǎng)絡(luò)上行的數(shù)據(jù),根據(jù)WK2124是否產(chǎn)生中斷判斷是否有上行數(shù)據(jù)包,有則MCU進(jìn)中斷解析上行數(shù)據(jù),之后通過網(wǎng)口將經(jīng)解析的數(shù)據(jù)包傳至服務(wù)器。查詢網(wǎng)絡(luò)中下行數(shù)據(jù),通過偵聽0號(hào)Socket的接收狀態(tài),判斷接收狀態(tài)寄存器是否置1,是則讀取數(shù)據(jù)進(jìn)行解析并將解析后的數(shù)據(jù)包通過WK2124繼續(xù)下發(fā)至相應(yīng)子網(wǎng)關(guān),子網(wǎng)關(guān)收到指令便回復(fù)具體的應(yīng)答包。按照以上流程,程序不斷輪循,期間若出現(xiàn)物理斷網(wǎng)或接收超時(shí),則復(fù)位W5500重新連網(wǎng)。
對(duì)于預(yù)留功能模塊,主網(wǎng)關(guān)通過串口3接收GPS模塊采集的時(shí)間及坐標(biāo)值。4G通信模塊在W5500網(wǎng)口禁用情況下使用,通過串口2發(fā)AT指令將4G模塊配置成透傳模式,通過相應(yīng)的移動(dòng)終端接收網(wǎng)關(guān)發(fā)送的數(shù)據(jù)。
Web上位機(jī)包括前端顯示操作界面、服務(wù)器控制臺(tái)和數(shù)據(jù)庫三部分[9]。
服務(wù)器工作流程。服務(wù)器控制臺(tái)對(duì)設(shè)定的端口進(jìn)行偵聽,網(wǎng)關(guān)初始化了8個(gè)Socket對(duì)應(yīng)著8路子網(wǎng)關(guān),并同目的服務(wù)器建立了8個(gè)TCP連接,服務(wù)器開啟8個(gè)線程開始對(duì)8路連接傳輸?shù)臄?shù)據(jù)進(jìn)行處理。上行的節(jié)點(diǎn)信息或子網(wǎng)關(guān)信息直接存入數(shù)據(jù)庫中。
下行指令的處理過程。按照自組網(wǎng)協(xié)議,通過web前端的監(jiān)控界面發(fā)送具體指令給服務(wù)器控制臺(tái),服務(wù)器控制臺(tái)對(duì)指令作出響應(yīng)同時(shí)解析指令信息,并將解析后的控制包下發(fā)至網(wǎng)關(guān),網(wǎng)關(guān)MCU再根據(jù)自組網(wǎng)協(xié)議解析出新指令包并下發(fā)給相應(yīng)的子網(wǎng)關(guān),子網(wǎng)關(guān)進(jìn)行相應(yīng)配置,配置成功信息返回給服務(wù)器控制臺(tái),服務(wù)器會(huì)繼續(xù)將響應(yīng)信息回復(fù)給前端。
上行數(shù)據(jù)的處理過程即前端顯示數(shù)據(jù)的過程。服務(wù)器從連接中偵聽數(shù)據(jù),并將偵聽到的值寫入數(shù)據(jù)庫,前端顯示界面向服務(wù)器發(fā)出讀數(shù)據(jù)請(qǐng)求,服務(wù)器響應(yīng)請(qǐng)求并訪問數(shù)據(jù)庫讀取相應(yīng)的值,然后將數(shù)據(jù)發(fā)送至前端進(jìn)行顯示。
自組網(wǎng)協(xié)議規(guī)定了系統(tǒng)通信中每一個(gè)數(shù)據(jù)包的包類型,其用于通信數(shù)據(jù)的解析及功能的實(shí)現(xiàn)[10]。這套自定義的協(xié)議所涉及的包類型如表1所示。
表1 協(xié)議的包類型
節(jié)點(diǎn)數(shù)據(jù)包有分配請(qǐng)求包、入網(wǎng)請(qǐng)求包和周期采樣數(shù)據(jù)包三類。子網(wǎng)關(guān)數(shù)據(jù)包則包括查詢響應(yīng)包和設(shè)置響應(yīng)包。下行數(shù)據(jù)包分為查詢包和參數(shù)設(shè)置包。上行的數(shù)據(jù)包長度定為16個(gè)字節(jié),下行的數(shù)據(jù)包長度定義為8個(gè)字節(jié),預(yù)留的字節(jié)賦值0x00。包頭用于網(wǎng)關(guān)MCU對(duì)上行數(shù)據(jù)進(jìn)行校驗(yàn),包類型則關(guān)聯(lián)到相應(yīng)的解析函數(shù)。網(wǎng)關(guān)參數(shù)包括網(wǎng)關(guān)頻率(q)、擴(kuò)頻因子(Spreading Factor, SF)、編碼率(Code Rate, CR)、帶寬(Band Width, BW)和時(shí)隙(Per)。鑒于子網(wǎng)關(guān)數(shù)據(jù)包與節(jié)點(diǎn)數(shù)據(jù)包相似,此處僅給出表2節(jié)點(diǎn)數(shù)據(jù)幀格式。
表2 節(jié)點(diǎn)數(shù)據(jù)幀格式
在節(jié)點(diǎn)剛上電或入網(wǎng)請(qǐng)求接收超時(shí)的情況下。節(jié)點(diǎn)將分配請(qǐng)求發(fā)送給0號(hào)子網(wǎng)關(guān)。0號(hào)子網(wǎng)關(guān)收到分配請(qǐng)求后,根據(jù)節(jié)點(diǎn)號(hào)查詢對(duì)應(yīng)子網(wǎng)關(guān)的參數(shù),并將參數(shù)寫入到分配回復(fù)中返回給節(jié)點(diǎn)。節(jié)點(diǎn)接收成功,同步了子網(wǎng)關(guān)的射頻參數(shù)后,便開始發(fā)送入網(wǎng)請(qǐng)求給對(duì)應(yīng)子網(wǎng)關(guān)。子網(wǎng)關(guān)接收到請(qǐng)求后將入網(wǎng)回復(fù)發(fā)給節(jié)點(diǎn),節(jié)點(diǎn)解析回復(fù)包并同步網(wǎng)關(guān)系統(tǒng)時(shí)間,按照網(wǎng)關(guān)時(shí)間標(biāo)準(zhǔn)和節(jié)點(diǎn)號(hào)所分配的發(fā)送順序,節(jié)點(diǎn)將溫度采樣信息周期性的發(fā)送給子網(wǎng)關(guān)。子網(wǎng)關(guān)對(duì)收到的節(jié)點(diǎn)數(shù)據(jù)包進(jìn)行CRC校驗(yàn),校驗(yàn)成功后再添加包頭及相關(guān)字節(jié),以16字節(jié)的上行數(shù)據(jù)包通過WK2124傳遞給網(wǎng)關(guān)MCU,網(wǎng)關(guān)將校驗(yàn)成功的數(shù)據(jù)以16字節(jié)的數(shù)據(jù)格式通過網(wǎng)口繼續(xù)傳給服務(wù)器,服務(wù)器對(duì)數(shù)據(jù)再校驗(yàn),并將校驗(yàn)后的數(shù)據(jù)寫入數(shù)據(jù)庫。下行的控制指令,在web前端進(jìn)行輸入,并通過服務(wù)器下發(fā)給網(wǎng)關(guān),網(wǎng)關(guān)MCU對(duì)參數(shù)設(shè)置包和網(wǎng)關(guān)查詢包進(jìn)行相關(guān)解析,再根據(jù)網(wǎng)關(guān)號(hào)netcode定向傳輸給子網(wǎng)關(guān)。子網(wǎng)關(guān)根據(jù)所收到包的包類型再做相應(yīng)處理,處理成功后子網(wǎng)關(guān)將回復(fù)對(duì)應(yīng)的參數(shù)設(shè)置響應(yīng)包和網(wǎng)關(guān)查詢響應(yīng)包。若處理錯(cuò)誤則回復(fù)Error_ack包。
本設(shè)計(jì)通過web前端界面進(jìn)行測(cè)試。前端界面提供節(jié)點(diǎn)數(shù)據(jù)監(jiān)控窗口,子網(wǎng)關(guān)信息窗口以及指令發(fā)送界面。
考慮到實(shí)驗(yàn)室的測(cè)試設(shè)備有限,測(cè)試階段僅開啟了1號(hào)、2號(hào)子網(wǎng)關(guān)和處理分配任務(wù)的0號(hào)子網(wǎng)關(guān)以及10個(gè)節(jié)點(diǎn)。先前研究證明了子網(wǎng)關(guān)程序可以支持節(jié)點(diǎn)滿載,所以本設(shè)計(jì)的測(cè)試過程是合理的,且測(cè)試結(jié)果依然可以用來檢驗(yàn)設(shè)計(jì)是否達(dá)到預(yù)期目標(biāo)。
圖5 節(jié)點(diǎn)數(shù)據(jù)顯示界面
每個(gè)子網(wǎng)關(guān)搭載5個(gè)節(jié)點(diǎn),圖5的界面對(duì)各節(jié)點(diǎn)的采樣溫度進(jìn)行實(shí)時(shí)監(jiān)測(cè)。節(jié)點(diǎn)數(shù)據(jù)監(jiān)控窗口只顯示type為0x04的周期采樣數(shù)據(jù),自動(dòng)濾除配分請(qǐng)求信息和入網(wǎng)請(qǐng)求信息。
圖6 子網(wǎng)關(guān)信息顯示界面
圖6的界面顯示了子網(wǎng)關(guān)的參數(shù)信息及接收狀態(tài)信息。參數(shù)信息為當(dāng)前所設(shè)置的參數(shù),接收狀態(tài)信息為最近一個(gè)周期內(nèi)所統(tǒng)計(jì)收到的節(jié)點(diǎn)總數(shù)(sum)和丟包率(Packet Loss Rate,PLR)。網(wǎng)關(guān)信息窗口每個(gè)采樣周期更新一次,采樣周期為時(shí)隙值。
指令發(fā)送頁面比較簡潔,發(fā)送窗口只支持發(fā)送HEX的8個(gè)字節(jié)的指令數(shù)據(jù),指令發(fā)送完成后顯示“發(fā)送成功!”的字樣。當(dāng)輸入1號(hào)子網(wǎng)關(guān)的配置指令改變子網(wǎng)關(guān)的射頻參數(shù),1號(hào)子網(wǎng)關(guān)會(huì)將更新的信息發(fā)往0號(hào)子網(wǎng)關(guān),以更新0號(hào)網(wǎng)關(guān)的子網(wǎng)關(guān)參數(shù)信息表。1號(hào)子網(wǎng)關(guān)對(duì)應(yīng)的節(jié)點(diǎn)在多次發(fā)送入網(wǎng)請(qǐng)求信息都無法獲得響應(yīng)后,則會(huì)向0網(wǎng)關(guān)重新發(fā)送分配請(qǐng)求,0網(wǎng)關(guān)會(huì)再為其分配新的1號(hào)子網(wǎng)關(guān)的參數(shù)信息,節(jié)點(diǎn)設(shè)置好新的射頻參數(shù)后,將會(huì)重新請(qǐng)求入網(wǎng)。測(cè)試結(jié)果顯示配置參數(shù)后的1號(hào)子網(wǎng)關(guān)一段時(shí)間后又陸續(xù)收到了節(jié)點(diǎn)的入網(wǎng)請(qǐng)求信息,節(jié)點(diǎn)便開始周期上傳溫度數(shù)據(jù)。在指令發(fā)送頁面,輸入1號(hào)子網(wǎng)關(guān)的查詢指令,網(wǎng)關(guān)信息窗口便顯示出子網(wǎng)關(guān)更新后的參數(shù)信息。以上測(cè)試表明系統(tǒng)成功實(shí)現(xiàn)了子網(wǎng)關(guān)參數(shù)的在線設(shè)置。
系統(tǒng)測(cè)試結(jié)果符合設(shè)計(jì)預(yù)期要求。測(cè)試?yán)e了對(duì)1號(hào)子網(wǎng)關(guān)的操作。參照自組網(wǎng)的協(xié)議規(guī)范,可以實(shí)現(xiàn)對(duì)多達(dá)8路子網(wǎng)關(guān)的管控,除0號(hào)子網(wǎng)關(guān)負(fù)責(zé)存儲(chǔ)各子網(wǎng)關(guān)的射頻參數(shù)表及分配節(jié)點(diǎn)射頻參數(shù)外,1~7號(hào)子網(wǎng)關(guān)都用來接收節(jié)點(diǎn)采樣數(shù)據(jù),這便大大增加了總網(wǎng)關(guān)的節(jié)點(diǎn)容量。解決了引文中提到的節(jié)點(diǎn)容量不足的問題。
對(duì)于之前工業(yè)上監(jiān)測(cè)整片工業(yè)區(qū)須要切換多個(gè)上位機(jī)窗口對(duì)溫度進(jìn)行監(jiān)測(cè)的情況。本文的設(shè)計(jì)在保證測(cè)控覆蓋范圍不變或者更大的前提下,只需通過一個(gè)web上位機(jī)前端對(duì)總網(wǎng)關(guān)進(jìn)行操作便可實(shí)現(xiàn)所有的基本功能,同時(shí)本設(shè)計(jì)還支持網(wǎng)關(guān)參數(shù)的在線修改,解決了引文中提到的不支持參數(shù)在線修改的問題。
對(duì)于LoRa通信的鄰頻率干擾問題,子網(wǎng)關(guān)通過統(tǒng)計(jì)一個(gè)周期的丟包率是否超出閾值以及判斷接收信號(hào)強(qiáng)度和信噪比是否低于正常工作環(huán)境的門限值的這三種判跳機(jī)制,來實(shí)現(xiàn)子網(wǎng)關(guān)的自適應(yīng)調(diào)頻。從而解決了鄰頻干擾問題。
本設(shè)計(jì)增大了網(wǎng)關(guān)集成度,降低了工業(yè)上網(wǎng)關(guān)的投入成本,運(yùn)用自組網(wǎng)協(xié)議,使系統(tǒng)工作更加靈活和穩(wěn)定,能為工業(yè)監(jiān)測(cè)帶來極大的便利。