姜 飛 ,童海明 ,趙玉薇 ,董劉同 ,張 瀚
(1.杭州淺??萍加邢挢?zé)任公司,浙江 杭州 310052;2.納晶科技股份有限公司,浙江 杭州 300450;3.航天長征火箭技術(shù)有限公司,北京100076)
隨著物聯(lián)網(wǎng)技術(shù)的高速發(fā)展,眾多種類的傳感器、儀器設(shè)備在工業(yè)、民用領(lǐng)域被廣泛應(yīng)用。與此同時,為降低傳感器使用過程中的運營、維護(hù)成本,特別是應(yīng)對特殊地理條件下能源供應(yīng)匱乏的現(xiàn)狀,具有超低功耗特性的傳感器應(yīng)用需求強(qiáng)烈[1-2],超低功耗特性已成為傳感器未來發(fā)展趨勢。
Modbus 協(xié)議由于在通信過程中具有帶寬節(jié)省、安全性和可靠性等方面顯著優(yōu)勢,成為傳感器在工業(yè)控制和自動化應(yīng)用中常被采用的通信協(xié)議[3]。然而,傳統(tǒng)的Modbus 協(xié)議信息處理方式不適用于超低功耗應(yīng)用環(huán)境,在一定程度上限制了Modbus 協(xié)議的應(yīng)用范圍。最近一段時間,雖然在此方面出現(xiàn)了一些研究成果,不過更多的是針對硬件設(shè)計方面的考慮[4]。本文通過對Modbus 協(xié)議和超低功耗設(shè)備設(shè)計理念進(jìn)行分析和改進(jìn),重新規(guī)劃寄存器數(shù)據(jù)實時響應(yīng)機(jī)制,建立分層式的 Modbus 通信模型,可以實現(xiàn)超低功耗特性傳感器與Modbus 通信協(xié)議的兼容。
Modbus 是一種總線結(jié)構(gòu),如圖1 所示。通信線路由一臺主機(jī)擴(kuò)充到多臺設(shè)備,是一種單主站的主/從通信模式。通信過程由主機(jī)發(fā)起,從機(jī)被動接受指令并做出響應(yīng),執(zhí)行相關(guān)動作或者返回數(shù)據(jù)[5]。
圖1 Modbus 拓?fù)浣Y(jié)構(gòu)
Modbus 協(xié)議將設(shè)備中的各種數(shù)據(jù)、狀態(tài)、控制端口等所有的功能,全部抽象成4 種數(shù)據(jù)類型概念,分別是離散輸入、線圈、數(shù)據(jù)寄存器、保持寄存器,表1 展示了它們的常用功能。通過對這些數(shù)據(jù)類型的讀寫,實現(xiàn)了設(shè)備的各種功能。
表1 Modbus 數(shù)據(jù)類型
傳統(tǒng)的Modbus 處理機(jī)制比較簡單,線圈和寄存器都是顯式存在,即寄存器真實地排布在存儲空間的某個位置。Modbus 通信接口和設(shè)備內(nèi)部運行程序,都獨立地面向寄存器(或線圈)操作。
對于讀取過程,內(nèi)部寄存器通過自身獨立的一套邏輯進(jìn)行工作,并在特定的時間更新這些寄存器[6]。例如設(shè)備具有測量溫度的功能,那么內(nèi)部的溫度測量模塊會以一定的周期不斷重復(fù)工作,并更新溫度寄存器,過程展示如圖2 所示。當(dāng)設(shè)備收到 Modbus 主機(jī)讀取溫度寄存器指令時,會將當(dāng)前寄存器中的內(nèi)容打包發(fā)送出去,而不考慮該數(shù)據(jù)的時效性。
圖2 傳統(tǒng)寄存器讀取與任務(wù)執(zhí)行過程
對于寫入操作過程,主機(jī)通過Modbus 協(xié)議對相應(yīng)的寄存器進(jìn)行修改就可以實現(xiàn)對設(shè)備的控制[7],例如向一個指示燈寄存器寫入一個特定數(shù)值表示打開設(shè)備指示燈。通信過程僅僅代表該寄存器被成功寫入,指示燈并不會立即打開,設(shè)備內(nèi)部會有一個以一定周期不斷掃描寄存器的進(jìn)程,當(dāng)這個進(jìn)程讀取到寄存器時,燈才會打開,這會造成通信過程和動作執(zhí)行之間有一定時差。過程展示如圖3所示。
圖3 傳統(tǒng)寄存器寫入與任務(wù)執(zhí)行過程
由此可見,傳統(tǒng)的Modbus 是一個簡單的分層結(jié)構(gòu),層級功能操作相互獨立,層與層之間通過一個真實存在的寄存器(或者線圈)間接聯(lián)系起來。其優(yōu)點是設(shè)計思路清晰,獨立性好,可靠性強(qiáng)[8]。但是缺點也是顯而易見的。首先,通信指令與獲取數(shù)據(jù)、執(zhí)行動作之間的實時性問題將造成響應(yīng)周期的存在,更為重要的是,因為數(shù)據(jù)更新和動作執(zhí)行是一個不斷重復(fù)的過程,這種設(shè)計無法實現(xiàn)低功耗特征。
在分析傳統(tǒng)Modbus 協(xié)議及通信機(jī)理基礎(chǔ)上,對常用設(shè)備的低功耗處理機(jī)制進(jìn)行分析研究,明確了處理機(jī)制存在的缺點,對數(shù)據(jù)更新和動作響應(yīng)機(jī)制做出設(shè)計改進(jìn),以實現(xiàn) Modbus 設(shè)備的低功耗特性。
一個設(shè)備的功耗特性受限于多種因素,包括:工作原理、機(jī)械結(jié)構(gòu)、運行狀態(tài)、電源設(shè)計、芯片選擇等,但在嵌入式軟件系統(tǒng)對設(shè)備控制的層面上講,有一條重要原則,即減少無意義的能源消耗[9]。當(dāng)某個功能不被使用時,與其相關(guān)的模塊應(yīng)被關(guān)閉,包括:硬件斷電、軟件功能停止以及宏觀連續(xù)但微觀間歇性工作等狀態(tài)。由于電子器件速度非??欤梢晕⒂^上實施間歇性的工作[10-11],例如一些慢速通信接口。
一個低功耗設(shè)備,如溫度傳感器,在主機(jī)未索要溫度數(shù)據(jù)的時候,溫度傳感器部分不應(yīng)自主工作 (且此時工作產(chǎn)生的數(shù)據(jù)也無任何意義)。當(dāng)主機(jī)索要溫度數(shù)據(jù)的時候,才會開啟溫度傳感器模塊,并立即工作一次,得到最新的溫度數(shù)據(jù),然后立即關(guān)閉溫度傳感器模塊,最后設(shè)備將數(shù)據(jù)結(jié)果按照Modbus 協(xié)議格式反饋給主機(jī)??梢钥闯觯俗x取過程改進(jìn)設(shè)計,能夠?qū)崿F(xiàn)傳感器動作與通信過程的緊密聯(lián)系與同步操作,中間的寄存器已經(jīng)變成隱式。即主機(jī)發(fā)起通信,寄存器中的數(shù)據(jù)尚未準(zhǔn)備好(或者這個寄存器尚不存在),對這個寄存器的讀取要求將演變成一個溫度測量需求,并導(dǎo)致后面一系列的測量動作。當(dāng)溫度測量完成后,寄存器才顯現(xiàn)出來。信息處理與動作過程見圖4。但從主機(jī)角度來看,從機(jī)仍然嚴(yán)格遵循著Modbus 協(xié)議。同時,由于傳感器數(shù)據(jù)是最新生成的,這種過程比傳統(tǒng)方式帶來了更高的實時性。
圖4 改進(jìn)后寄存器讀取與任務(wù)觸發(fā)過程
對寄存器的寫入行為,表現(xiàn)在儀器設(shè)備上,一般是參數(shù)設(shè)定、功能的打開或者關(guān)閉等控制動作。以設(shè)備上受控的信號指示燈為例,當(dāng)主機(jī)未對設(shè)備的信號進(jìn)行設(shè)定時,設(shè)備不應(yīng)頻繁查看該寄存器內(nèi)容,只有在主機(jī)對該寄存器發(fā)生寫入動作時,設(shè)備再去檢查該寄存器內(nèi)容,從而控制信號燈變化。可以看出,此寫入過程改進(jìn)設(shè)計,能夠?qū)崿F(xiàn)設(shè)備指示燈變化與通信緊密聯(lián)系,中間的寄存器變?yōu)殡[式,即當(dāng)這個過程完成后,寄存器的作用又會消失。數(shù)據(jù)寫入與觸發(fā)動作過程見圖5。從主機(jī)角度來看,從機(jī)仍然嚴(yán)格遵循著 Modbus 協(xié)議。同時,由于從機(jī)對寄存器改變進(jìn)行了立即響應(yīng),這種過程比傳統(tǒng)的控制方式帶來了更高的實時性。
圖5 改進(jìn)后寄存器寫入與任務(wù)觸發(fā)過程
Modbus 標(biāo)準(zhǔn)通信過程并沒有限定對寄存器操作的數(shù)量和范圍,也就是說,主機(jī)可以使用一條指令對多個連續(xù)的寄存器進(jìn)行讀取或?qū)懭氩僮?,可能涉及多個功能和參數(shù)的訪問或改變。在傳統(tǒng)的工作機(jī)理中,由于寄存器是真實存在的,并且與設(shè)備實際動作分離,多寄存器的操作不存在任何問題。但是,在低功耗特性設(shè)備的工作模式下,為了應(yīng)對多寄存器的批量操作,在寄存器和設(shè)備實際動作執(zhí)行之間需要獨立出一層,用于負(fù)責(zé)對寄存器操作進(jìn)行監(jiān)視,分辨對寄存器讀取或?qū)懭?,明確指令波及的寄存器范圍,以及影響到的功能模塊區(qū)間,并根據(jù)影響的區(qū)間,將這些讀寫操作轉(zhuǎn)換為一個或多個相關(guān)功能模塊的動作,而后將這些動作結(jié)構(gòu)整合起來,表現(xiàn)在寄存器層面上,最后再統(tǒng)一轉(zhuǎn)換為Modbus 協(xié)議格式,對主機(jī)進(jìn)行反饋。圖6 展示了多寄存器操作與多動作觸發(fā)的處理機(jī)制。
圖6 多寄存器、多動作觸發(fā)運行框架
搭建測試系統(tǒng),結(jié)構(gòu)如圖7 所示。系統(tǒng)的傳感器是應(yīng)用于物理海洋觀測的高精度CTD 傳感器(測量溫度、鹽度、深度)。其實際工作環(huán)境位于 1 000 m深度的海洋中,通過科考船部署在制定區(qū)域,依賴自身的電池或者上位機(jī)(浮標(biāo)系統(tǒng))有限的電源工作[12],安裝和維護(hù)成本非常高,因此必須具備超低功耗特性。整個系統(tǒng)的各個傳感器與浮標(biāo)系統(tǒng)主機(jī)之間均使用Modbus 協(xié)議進(jìn)行通信。
圖7 低功耗Modbus 通信測試系統(tǒng)
測試系統(tǒng)中使用 RS485 作為 Modbus 的通信物理層,使用海洋物性參數(shù)監(jiān)測浮標(biāo)的數(shù)據(jù)采集系統(tǒng),開啟標(biāo)準(zhǔn)Modbus 通信接口作為主站發(fā)送控制指令至 CTD 傳感器,波特率為 9 600 b/s。經(jīng)過RS485 電平轉(zhuǎn)化芯片后,進(jìn)入單片機(jī)的 UART 接口。CTD 傳感器內(nèi)部采用STM32L462 超低功耗單片機(jī)作為主控芯片,平時整個系統(tǒng)處于低功耗休眠模式,運行時鐘關(guān)閉,串口模塊功能處于打開狀態(tài),能夠隨時監(jiān)聽指令。
系統(tǒng)測試包含了傳感器在休眠狀態(tài)下的功耗、休眠喚醒功能、Modbus 指令處理功能、數(shù)據(jù)反饋功能、丟包率、響應(yīng)速度、指令執(zhí)行完后的功耗狀態(tài)[13]。關(guān)鍵測試數(shù)據(jù)見表2,單次通信的電流消耗動態(tài)過程見圖8。可以看出,在傳感器中運行的低功耗模式 Modbus 協(xié)議,實現(xiàn)了數(shù)據(jù)的準(zhǔn)確、有效通信,同時相對于傳統(tǒng)協(xié)議,能夠保持傳感器長時間處于超低功耗狀態(tài)。
表2 通信過程測試數(shù)據(jù)
圖8 單次Modbus 通信過程電流消耗
本文針對具有超低功耗特性需求的Modbus 設(shè)備,設(shè)計了新的信息處理過程和動作觸發(fā)機(jī)制,抽象了傳統(tǒng)的寄存器概念,使得設(shè)備在兼容傳統(tǒng)的Modbus 協(xié)議基礎(chǔ)上,能夠適應(yīng)超低功耗休眠狀態(tài),最大程度上降低系統(tǒng)整體功耗。實驗測試表明,應(yīng)用該設(shè)計思想的嵌入式系統(tǒng),能夠正確響應(yīng)主站指令,丟包率極低,響應(yīng)速度快,可靠性高,設(shè)備在線時的功耗電流低于 10 μA。此外,該設(shè)計思想基于分層結(jié)構(gòu),可以面向多種設(shè)備的多種用途,具備可擴(kuò)展性和可復(fù)制性,可以很好地應(yīng)用在科學(xué)觀測、工業(yè)測量、物聯(lián)網(wǎng)等對功耗要求高的多種場合。