姚豪立 汪芳君 李天一 孫蘇欽 李章昊
摘 ?要:數(shù)據(jù)監(jiān)控設(shè)備通常具有豐富的采集模塊及通信模塊,因此在當(dāng)前工業(yè)中起到至關(guān)重要的作用。然而,這些模塊經(jīng)常在應(yīng)用過程中出現(xiàn)問題,目前最常用的是通過拆卸設(shè)備來獲取控制信號(hào),以判斷問題根源。文章介紹一種基于此類設(shè)備的實(shí)時(shí)通道日志方案,通過共享設(shè)備其中的一種或者兩種通信接口,把所需通道的調(diào)試數(shù)據(jù)實(shí)時(shí)展現(xiàn)出來,同時(shí)不影響設(shè)備正常應(yīng)用功能。目前這個(gè)方法已經(jīng)成功應(yīng)用于多種設(shè)備,并且取得良好的使用效果。
關(guān)鍵詞:數(shù)據(jù)監(jiān)控設(shè)備;通道;日志;串口
中圖分類號(hào):TP368.1 ? 文獻(xiàn)標(biāo)識(shí)碼:A ? 文章編號(hào):2096-4706(2023)16-0006-05
Design of a Real-time Channel Logging Scheme of Data Monitoring Equipment
YAO Haoli, WANG Fangjun, LI Tianyi, SUN Suqin, LI Zhanghao
(Zhejiang Water Meter Research Institute, Ningbo Water Meter (Group) Co., Ltd., Ningbo ?315032, China)
Abstract: Data monitoring equipment is usually rich in acquisition modules and communication modules, so it plays a vital role in the current industry. However, these modules often have problems during the application, and the most commonly used one is to disassemble the equipment to obtain control signals to determine the root cause of the problem. This paper introduces a real-time channel log scheme based on such type of equipment. By sharing one or both of the communication interfaces of the equipment, the debugging data of the required channel is displayed in real time without affecting the normal application function of the equipment. At present, this method has been successfully applied in a variety of equipments, and has achieved good use effect.
Keywords: data monitoring equipment; channel; log; serial port
0 ?引 ?言
數(shù)據(jù)監(jiān)控設(shè)備為集數(shù)據(jù)采集與遠(yuǎn)程通信技術(shù)為一體的終端產(chǎn)品,該設(shè)備功能強(qiáng)大并且具有豐富的外圍接口,其中GPS、有線采集、無線通信、紅外、藍(lán)牙等功能往往需要占用監(jiān)控設(shè)備處理器的串口資源。處理器與外圍設(shè)備經(jīng)過串口通信,實(shí)際應(yīng)用過程中難免會(huì)出現(xiàn)運(yùn)行問題,維護(hù)人員難以通過現(xiàn)象來分析原因,他們往往需要拆卸設(shè)備,通過截取其中的交互碼流數(shù)據(jù),來判斷問題的根源。
本文提出了一種新的數(shù)據(jù)監(jiān)控設(shè)備實(shí)時(shí)通道日志記錄方案,可極為便利地獲取外圍設(shè)備操作的日志信息,有效地解決終端維護(hù)不便的問題,大大降低維護(hù)成本,提高維護(hù)效率。
1 ?方案介紹
以應(yīng)用于水務(wù)終端的數(shù)據(jù)監(jiān)控設(shè)備為例,它通過NB-IoT、GPRS和4G等無線通信單元,可實(shí)現(xiàn)水務(wù)終端數(shù)據(jù)監(jiān)控設(shè)備的無線通信網(wǎng)絡(luò)與數(shù)據(jù)服務(wù)器的數(shù)據(jù)交換;通過GPS定位單元,實(shí)現(xiàn)設(shè)備的精確定位和跟蹤;有線采集單元?jiǎng)t可使用RS485、M-Bus作為通信方式,實(shí)現(xiàn)水表的流量、流速、水壓等數(shù)據(jù)采集;此外,還可利用藍(lán)牙、紅外通信單元作為維護(hù)通道,實(shí)現(xiàn)手機(jī)端、上位機(jī)的調(diào)試維護(hù),從而降低維護(hù)成本。
數(shù)據(jù)監(jiān)控設(shè)備系統(tǒng)框圖如圖1所示。設(shè)備外圍接口豐富,比如紅外通信、藍(lán)牙通信、GPS定位、有線采集、無線通信等單元,這些功能單元占用了監(jiān)控設(shè)備處理器的串口資源。監(jiān)控設(shè)備在控制外圍設(shè)備的通信過程中,經(jīng)常會(huì)出現(xiàn)各種問題,維護(hù)人員難以通過現(xiàn)象來分析原因,在極端情況下他們往往需要拆卸設(shè)備,通過截取其中的串口交互碼流數(shù)據(jù),來判斷問題的根源。例如當(dāng)無線通信失敗時(shí),維護(hù)人員看到的現(xiàn)象是水務(wù)平臺(tái)沒有接收到設(shè)備終端數(shù)據(jù)。而引起該現(xiàn)象的因素包括:通信模組與主控單元的通信原因、模組供電電壓原因、設(shè)備無線信號(hào)問題、運(yùn)營商網(wǎng)絡(luò)服務(wù)問題,等等。問題的確定需要拆卸設(shè)備,監(jiān)控?zé)o線通信單元與數(shù)據(jù)監(jiān)控儀AT交互信息,例如使用AT+CSQ指令查看返回的信號(hào)強(qiáng)度。
傳統(tǒng)的方案中每個(gè)通道的監(jiān)控都需要不同監(jiān)控工裝進(jìn)行不同操作,極大提高了運(yùn)維人員操作煩瑣程度,且拆卸后的設(shè)備破壞了產(chǎn)品的密封性,需要返家重新更換外殼灌膠,既提高了維護(hù)成本,又降低了問題解決效率,帶來極壞的產(chǎn)品使用體驗(yàn)。
這類設(shè)備產(chǎn)品通常存在以下特點(diǎn):
1)通信速率低。低功耗設(shè)備單片機(jī)主頻低,支持波特率低,通常在1 200~9 600 bit/s之間,這樣會(huì)影響數(shù)據(jù)傳輸效率和實(shí)時(shí)性。
2)串口數(shù)量少。舉例產(chǎn)品僅有兩路串口可用于通信,其中串口1用于無線通信單元,串口2通過片選芯片用于其他四路通道進(jìn)行通信,沒有監(jiān)控專用通信口。
3)密封要求高。防水要求較高,拆卸影響防水功能,因此如果采用傳統(tǒng)的拆卸方案,會(huì)影響產(chǎn)品防水性能,進(jìn)而影響二次使用。
4)硬件存儲(chǔ)不足。鐵電存儲(chǔ)區(qū)空間有限,無法存儲(chǔ)大量日志數(shù)據(jù),因此如果采用故障日志先存儲(chǔ)方案,不僅存不了太多日志信息,還會(huì)影響后期擴(kuò)展空間。
本方案采用分時(shí)復(fù)用方案,將一個(gè)串口資源分配給多個(gè)應(yīng)用程序,將紅外或者藍(lán)牙通信通道作為日志監(jiān)控通道,并按需要選擇無線通信、有線采集、GPS通道進(jìn)行實(shí)時(shí)監(jiān)控。方案過程包括監(jiān)控日志存儲(chǔ)與讀取,即當(dāng)需監(jiān)控的通道有信息交互時(shí),把交互信息存入實(shí)時(shí)緩沖區(qū),待紅外或者藍(lán)牙通道空閑時(shí),從緩沖區(qū)讀出日志信息輸出到PC上位機(jī)或手機(jī)APP,通過維護(hù)軟件進(jìn)行數(shù)據(jù)可視化后供維護(hù)人員查看。整體方案如圖2所示。
2 ?具體實(shí)現(xiàn)方案
由于日志系統(tǒng)是非常嚴(yán)謹(jǐn)?shù)氖虑椋虼吮痉桨钢胁捎昧舜罅康陌踩珯C(jī)制來保證日志方案的可靠性和穩(wěn)定性。具體實(shí)現(xiàn)過程包括日志分組管理、日志收集、日志輸出和日志可視化等幾個(gè)部分,技術(shù)人員僅需通過PC上位機(jī)和手機(jī)APP,便可監(jiān)控內(nèi)部通道日志信息。
針對(duì)本產(chǎn)品的特點(diǎn),我們?cè)O(shè)計(jì)了幾項(xiàng)措施,以確保系統(tǒng)的可靠性和穩(wěn)定性:
1)設(shè)計(jì)日志分組及開關(guān)控制機(jī)制,減少日志記錄對(duì)系統(tǒng)的額外開銷。
2)采用數(shù)據(jù)實(shí)時(shí)輸出模式,設(shè)計(jì)一套日志數(shù)據(jù)緩存機(jī)制,以避免數(shù)據(jù)丟失。
3)設(shè)計(jì)維護(hù)通道相關(guān)的機(jī)制,以避免維護(hù)通道日志與常規(guī)功能沖突。
4)通過維護(hù)PC上位機(jī)和手機(jī)APP展示日志。
2.1 ?日志分組管理
本方案主要記錄內(nèi)部通道交互信息。由于采用單片機(jī)方案的嵌入式設(shè)備無法大量輸出日志,因此將日志分為不同類型,按需輸出指定類型日志以減少系統(tǒng)壓力;在應(yīng)用現(xiàn)場(chǎng)出現(xiàn)的問題,在其他環(huán)境中很難復(fù)現(xiàn),通過維護(hù)人員的操作,調(diào)試日志輸出可使設(shè)計(jì)人員第一時(shí)間獲取盡可能多的信息,定位問題。
當(dāng)需要在現(xiàn)場(chǎng)定位問題時(shí),可以隨時(shí)修改日志輸出類型,配合現(xiàn)場(chǎng)運(yùn)行情況,獲得更多日志信息[1,2]。
對(duì)此設(shè)計(jì)一種嵌入式日志管理方法,包括:根據(jù)通道及功能不同,將日志信息賦予不同類型;接收用戶的指令,解析出允許輸出哪些類型的日志;確定待處理日志的類型,根據(jù)允許輸出的日志類型,判斷是否輸出該日志;日常使用時(shí)全部關(guān)閉,降低運(yùn)行功耗。
具體類別如表1所示。其中編號(hào)1、2、3、4、9、10屬于無線通信通道,編號(hào)5、6屬于有線采集通道,編號(hào)7、8屬于GPS定位通道。
2.2 ?緩沖區(qū)設(shè)計(jì)
本方案僅針對(duì)內(nèi)部通道信息進(jìn)行監(jiān)控,由于存儲(chǔ)資源受限,因此最理想的方案是監(jiān)控的日志數(shù)據(jù)不做物理存儲(chǔ),而是實(shí)時(shí)輸出。由于維護(hù)通道與其他通道共用一個(gè)串口,當(dāng)串口正處于其他功能通道通信時(shí),無法及時(shí)輸出日志,容易丟失數(shù)據(jù)。采取的方式為首先將日志寫入緩存,在空閑時(shí)進(jìn)行發(fā)送。由于接口緩存大小本身非常有限,所以此技術(shù)也會(huì)受到日志大小、日志產(chǎn)生速度的影響,并不能達(dá)到實(shí)時(shí)的日志記錄[3,4]。
當(dāng)前傳統(tǒng)的技術(shù)方案是通過動(dòng)態(tài)分配內(nèi)存方式,即接收到一個(gè)數(shù)據(jù)分配一個(gè)內(nèi)存保存數(shù)據(jù)。這種方式簡單但需要較多的系統(tǒng)資源,對(duì)輕量級(jí)應(yīng)用不適合[5]。因日志數(shù)據(jù)長度不定長,為避免空間浪費(fèi),特別引入環(huán)形緩沖區(qū)機(jī)制,可以有效利用緩存,實(shí)現(xiàn)較為靈活的記錄[6]。
環(huán)形緩沖區(qū)是嵌入式系統(tǒng)中十分重要的一種數(shù)據(jù)結(jié)構(gòu),通常包含一個(gè)讀指針和一個(gè)寫指針。讀指針指向環(huán)形緩沖區(qū)中可讀的數(shù)據(jù),寫指針指向環(huán)形緩沖區(qū)中可寫的緩沖區(qū)。通過移動(dòng)讀指針和寫指針就可以實(shí)現(xiàn)緩沖區(qū)的數(shù)據(jù)讀取和寫入。在通常情況下,環(huán)形緩沖區(qū)的讀用戶僅僅會(huì)影響讀指針,而寫用戶僅僅會(huì)影響寫指針。
圖3、圖4和圖5是一個(gè)環(huán)形緩沖區(qū)的運(yùn)行示意圖。圖3是環(huán)形緩沖區(qū)的初始狀態(tài),此時(shí)讀指針和寫指針都指向緩沖區(qū)的入口地址1;圖4是向環(huán)形緩沖區(qū)中添加了一個(gè)數(shù)據(jù)后的情況,此時(shí)寫指針已經(jīng)移動(dòng)到數(shù)據(jù)塊2的位置,而讀指針沒有移動(dòng);圖5是環(huán)形緩沖區(qū)進(jìn)行了讀取和添加后的狀態(tài),此時(shí)環(huán)形緩沖區(qū)中已經(jīng)添加了兩個(gè)數(shù)據(jù),已經(jīng)讀取了一個(gè)數(shù)據(jù)。
通過固定長度的環(huán)形緩存區(qū)接收和保存數(shù)據(jù),是很好的選擇。其中核心是申請(qǐng)一段內(nèi)存,通過特殊方法讓其首尾相連,形成一個(gè)閉環(huán)的內(nèi)存地址。這樣既可以繼續(xù)處理源源不斷的數(shù)據(jù),又不用再去申請(qǐng)新的內(nèi)存空間暫存新的數(shù)據(jù),效率大大提高。
但是對(duì)于環(huán)形緩存區(qū)需要注意的問題包括:環(huán)形緩沖區(qū)寫的速度和讀速度匹配性問題,即數(shù)據(jù)還未被讀取,便寫入數(shù)據(jù),就會(huì)造成數(shù)據(jù)還未被讀取便被新的數(shù)據(jù)覆蓋,造成數(shù)據(jù)的丟失。同樣原理,讀的指針不能超過寫的位置,否則就會(huì)讀到已經(jīng)被讀取過的數(shù)據(jù),造成數(shù)據(jù)的重復(fù)。如果存儲(chǔ)空間設(shè)置得太大,會(huì)造成內(nèi)存的浪費(fèi),有些內(nèi)存一直處于空閑狀態(tài),如果設(shè)置得太小,可能會(huì)造成讀的速度快于寫的速度,讀的過程中會(huì)有短暫的等待時(shí)間,造成效率不是最高。
由于緩存方案的重要性,我們?cè)诒痉桨钢胁捎昧舜罅堪踩珯C(jī)制,以確保緩存方案的可靠性,避免數(shù)據(jù)丟失和影響系統(tǒng)正常運(yùn)行。
2.2.1 ?日志緩存協(xié)議
因?yàn)槿罩拘畔⒉欢ㄩL,為便捷進(jìn)行讀取存儲(chǔ),在保證日志數(shù)據(jù)完整前提下記錄更多信息,設(shè)計(jì)日志緩存協(xié)議,日志根據(jù)協(xié)議進(jìn)行緩存協(xié)議進(jìn)行打包存儲(chǔ)。協(xié)議如表2所示。
為了確保日志完整性,當(dāng)剩余空間不足以容納新日志信息時(shí),存儲(chǔ)將被暫停。按照先進(jìn)先出原則,讀取時(shí)從頭開始,每次只讀一個(gè)完整日志,以供日志輸出使用。
2.2.2 ?日志緩存寫入
設(shè)計(jì)一個(gè)日志環(huán)形緩沖區(qū)的存入邏輯,首先根據(jù)日志分組控制,判斷哪些類型的日志需要監(jiān)控,然后檢查日志緩存區(qū)域有效存儲(chǔ)空間是否足夠,如果未使用空間小于待記錄日志數(shù)據(jù)的長度(包括起始幀2字節(jié)、長度幀2字節(jié)、日志類型1字節(jié)、日志時(shí)間戳6字節(jié)、校驗(yàn)幀1字節(jié)和結(jié)束幀1字節(jié)),則根據(jù)日志緩存協(xié)議將日志數(shù)據(jù)擴(kuò)充成長度為L的完整碼流,最后使用環(huán)形緩沖區(qū)寫入接口將打包后的數(shù)據(jù)存入環(huán)形緩沖區(qū),緩沖區(qū)有效存儲(chǔ)空間長度減少L。
2.2.3 ?日志緩存讀取
為了高效安全地從緩沖區(qū)中取出日志信息,設(shè)計(jì)一個(gè)日志環(huán)形緩沖區(qū)的讀取邏輯。首先,在滿足存入數(shù)據(jù)長度條件的情況下,遍歷緩沖區(qū),尋找起始幀,然后依次取出后續(xù)數(shù)據(jù)內(nèi)容,如果數(shù)據(jù)域長度、校驗(yàn)位和結(jié)束幀均符合緩存協(xié)議,則取出日志信息記錄。接著,將得到的信息解包,獲取日志數(shù)據(jù)、日志類型和日志時(shí)間戳,以供日志輸出模塊使用。最后,更新緩存區(qū)指針,繼續(xù)檢查下一條日志信息,直到緩存區(qū)空間不足,結(jié)束讀取。
2.3 ?日志輸出
為了避免影響本地串口的日常工作,設(shè)計(jì)了一套串口通道共用機(jī)制,在不影響功能的前提下,充分考慮功耗。該機(jī)制采用了通信互斥鎖和空閑輸出機(jī)制,以減少對(duì)功耗的影響,并降低日志任務(wù)調(diào)用頻率,避免無效遍歷環(huán)形緩沖區(qū)(僅在打開日志監(jiān)控開關(guān)后才可遍歷)。具體操作流程如下:
1)流程開始,每隔200 ms處理一次日志輸出。
2)僅需要監(jiān)控時(shí)(日志監(jiān)控開關(guān)至少打開一個(gè))跳轉(zhuǎn)步驟3),否則結(jié)束。
3)滿足本地串口為維護(hù)通道(紅外,藍(lán)牙)且空閑跳轉(zhuǎn)步驟4),否則結(jié)束。
4)從緩沖區(qū)取出完整日志數(shù)據(jù),若無完整日志直接結(jié)束。
5)解包后提取日志信息解包后提取日志信息,包括類型、發(fā)生時(shí)間、內(nèi)容。
6)日志相關(guān)信息根據(jù)維護(hù)協(xié)議二次組包。
7)將二次組包日志信息通過串口維護(hù)通道輸出給PC上位機(jī)、手機(jī)APP。
3 ?實(shí)驗(yàn)結(jié)果分析
目前對(duì)于嵌入式設(shè)備而言,常規(guī)的監(jiān)控方式為通過232串口線連接至宿主設(shè)備,宿主設(shè)備直接輸出運(yùn)行信息,顯然嵌入式設(shè)備的運(yùn)行信息的安全性非常低[7]。
為了提高安全性,我們?cè)O(shè)計(jì)了一種日志傳輸協(xié)議,主控設(shè)備將日志及相關(guān)信息按照一定的協(xié)議打包,通過維護(hù)通道輸出。維護(hù)軟件采用相同的協(xié)議對(duì)收到的數(shù)據(jù)進(jìn)行解包[8],以防止直接監(jiān)控通道得到一串亂碼。為了查看實(shí)時(shí)日志輸出,需要搭配專用的維護(hù)PC上位機(jī)或手機(jī)APP,從而有效地防止信息泄露,大大提高了安全系數(shù)。
維護(hù)軟件支持藍(lán)牙和紅外連接終端設(shè)備,可以實(shí)時(shí)輸出需要監(jiān)控的日志類型。維護(hù)軟件的日志界面支持調(diào)試日志分組的開啟和關(guān)閉,以及日志的實(shí)時(shí)展示和一鍵導(dǎo)出。日志展示內(nèi)容包括日志類型、發(fā)生時(shí)間和日志內(nèi)容,如圖6、圖7所示,PC上位機(jī)與手機(jī)APP操作界面可以清晰地展示出來。
4 ?結(jié) ?論
該方案一經(jīng)推出,受到運(yùn)維和開發(fā)人員一致好評(píng),本方案極大地提高了維護(hù)的便捷性,處理現(xiàn)場(chǎng)問題時(shí)不必?cái)y帶一堆設(shè)備安裝大量軟件,只需使用維護(hù)PC上位機(jī)或手機(jī)APP即可完成絕大多數(shù)維護(hù)工作,同時(shí)也減少了需要返廠破膠拆殼的情況。方案具有以下優(yōu)點(diǎn):
1)降低維護(hù)難度。運(yùn)維人員經(jīng)過簡單培訓(xùn),便可輕松上手,極大降低人工成本。
2)提升維護(hù)效率,避免返廠處理,現(xiàn)場(chǎng)可快速記錄日志,大大降低處理時(shí)間。
3)簡化開發(fā)難度,集成化日志記錄功能,開發(fā)調(diào)試時(shí)無需大量外接設(shè)備。
4)提升客戶滿意度,提升產(chǎn)品口碑。
它具有良好的移植性,可以應(yīng)用于絕大部分嵌入式產(chǎn)品,而且數(shù)據(jù)安全性較高,可以有效保護(hù)用戶數(shù)據(jù)的隱私。該方案可以為開發(fā)和維護(hù)人員提供便利,已經(jīng)在批量產(chǎn)品中得到應(yīng)用,運(yùn)行穩(wěn)定,用戶反饋良好。
參考文獻(xiàn):
[1] 張朋飛,周厚明.一種嵌入式日志管理系統(tǒng)及方法:2020111832990 [P].2021-02-02.
[2] 郭榮華,張建,胡成松.一種嵌入式系統(tǒng)及其日志管理方法:201911321118 [P].2022-04-12.
[3] 楊波波,李悅坤,陸發(fā)忠.一種嵌入式設(shè)備日志輸出記錄方法及系統(tǒng):2020109824924 [P].2020-12-18.
[4] 宋恒利.一種嵌入式設(shè)備控制器的實(shí)時(shí)日志記錄方法:201510984551.0 [P].2017-07-04.
[5] 裴文祥,張建新,汪先超,等.一種高可靠性異步環(huán)形緩存區(qū)存儲(chǔ)、處理的實(shí)現(xiàn)方法:202111135622.1 [P].2021-12-31.
[6] 姚章俊,陳蜀宇,盧堯.一種高性能環(huán)形緩沖區(qū)的研究與實(shí)現(xiàn) [J].計(jì)算機(jī)工程,2012,38(8):228-231.
[7] 汪俊偉.一種嵌入式設(shè)備運(yùn)行信息的輸出方法、裝置及嵌入式設(shè)備:202011002664.3[P].2020-12-22.
[8] 李亞洲.基于串口通信的單片機(jī)日志系統(tǒng)設(shè)計(jì)[J].工業(yè)控制計(jì)算機(jī),2009,22(11):44-45.
作者簡介:姚豪立(1993—),男,漢族,浙江寧波人,嵌入式工程師,本科,研究方向:嵌入式系統(tǒng)設(shè)計(jì);汪芳君(1981—),女,漢族,浙江寧波人,高級(jí)工程師,碩士,研究方向:無線遠(yuǎn)程通信與控制;李天一(1989—),男,漢族,浙江寧波人,助理工程師,本科,研究方向:有線通信技術(shù)與設(shè)備應(yīng)用;孫蘇欽(1994—),男,漢族,浙江寧波人,嵌入式工程師,本科,研究方向:無線遠(yuǎn)程通信與控制;李章昊(1997—),男,漢族,陜西寶雞人,嵌入式工程師,本科,研究方向:嵌入式系統(tǒng)設(shè)計(jì)。