姜 飛 ,童海明 ,趙玉薇 ,董劉同 ,張 瀚
(1.杭州淺??萍加邢挢?zé)任公司,浙江 杭州 310052;2.納晶科技股份有限公司,浙江 杭州 300450;3.航天長(zhǎng)征火箭技術(shù)有限公司,北京100076)
隨著物聯(lián)網(wǎng)技術(shù)的高速發(fā)展,眾多種類的傳感器、儀器設(shè)備在工業(yè)、民用領(lǐng)域被廣泛應(yīng)用。與此同時(shí),為降低傳感器使用過(guò)程中的運(yùn)營(yíng)、維護(hù)成本,特別是應(yīng)對(duì)特殊地理?xiàng)l件下能源供應(yīng)匱乏的現(xiàn)狀,具有超低功耗特性的傳感器應(yīng)用需求強(qiáng)烈[1-2],超低功耗特性已成為傳感器未來(lái)發(fā)展趨勢(shì)。
Modbus 協(xié)議由于在通信過(guò)程中具有帶寬節(jié)省、安全性和可靠性等方面顯著優(yōu)勢(shì),成為傳感器在工業(yè)控制和自動(dòng)化應(yīng)用中常被采用的通信協(xié)議[3]。然而,傳統(tǒng)的Modbus 協(xié)議信息處理方式不適用于超低功耗應(yīng)用環(huán)境,在一定程度上限制了Modbus 協(xié)議的應(yīng)用范圍。最近一段時(shí)間,雖然在此方面出現(xiàn)了一些研究成果,不過(guò)更多的是針對(duì)硬件設(shè)計(jì)方面的考慮[4]。本文通過(guò)對(duì)Modbus 協(xié)議和超低功耗設(shè)備設(shè)計(jì)理念進(jìn)行分析和改進(jìn),重新規(guī)劃寄存器數(shù)據(jù)實(shí)時(shí)響應(yīng)機(jī)制,建立分層式的 Modbus 通信模型,可以實(shí)現(xiàn)超低功耗特性傳感器與Modbus 通信協(xié)議的兼容。
Modbus 是一種總線結(jié)構(gòu),如圖1 所示。通信線路由一臺(tái)主機(jī)擴(kuò)充到多臺(tái)設(shè)備,是一種單主站的主/從通信模式。通信過(guò)程由主機(jī)發(fā)起,從機(jī)被動(dòng)接受指令并做出響應(yīng),執(zhí)行相關(guān)動(dòng)作或者返回?cái)?shù)據(jù)[5]。

圖1 Modbus 拓?fù)浣Y(jié)構(gòu)
Modbus 協(xié)議將設(shè)備中的各種數(shù)據(jù)、狀態(tài)、控制端口等所有的功能,全部抽象成4 種數(shù)據(jù)類型概念,分別是離散輸入、線圈、數(shù)據(jù)寄存器、保持寄存器,表1 展示了它們的常用功能。通過(guò)對(duì)這些數(shù)據(jù)類型的讀寫(xiě),實(shí)現(xiàn)了設(shè)備的各種功能。

表1 Modbus 數(shù)據(jù)類型
傳統(tǒng)的Modbus 處理機(jī)制比較簡(jiǎn)單,線圈和寄存器都是顯式存在,即寄存器真實(shí)地排布在存儲(chǔ)空間的某個(gè)位置。Modbus 通信接口和設(shè)備內(nèi)部運(yùn)行程序,都獨(dú)立地面向寄存器(或線圈)操作。
對(duì)于讀取過(guò)程,內(nèi)部寄存器通過(guò)自身獨(dú)立的一套邏輯進(jìn)行工作,并在特定的時(shí)間更新這些寄存器[6]。例如設(shè)備具有測(cè)量溫度的功能,那么內(nèi)部的溫度測(cè)量模塊會(huì)以一定的周期不斷重復(fù)工作,并更新溫度寄存器,過(guò)程展示如圖2 所示。當(dāng)設(shè)備收到 Modbus 主機(jī)讀取溫度寄存器指令時(shí),會(huì)將當(dāng)前寄存器中的內(nèi)容打包發(fā)送出去,而不考慮該數(shù)據(jù)的時(shí)效性。

圖2 傳統(tǒng)寄存器讀取與任務(wù)執(zhí)行過(guò)程
對(duì)于寫(xiě)入操作過(guò)程,主機(jī)通過(guò)Modbus 協(xié)議對(duì)相應(yīng)的寄存器進(jìn)行修改就可以實(shí)現(xiàn)對(duì)設(shè)備的控制[7],例如向一個(gè)指示燈寄存器寫(xiě)入一個(gè)特定數(shù)值表示打開(kāi)設(shè)備指示燈。通信過(guò)程僅僅代表該寄存器被成功寫(xiě)入,指示燈并不會(huì)立即打開(kāi),設(shè)備內(nèi)部會(huì)有一個(gè)以一定周期不斷掃描寄存器的進(jìn)程,當(dāng)這個(gè)進(jìn)程讀取到寄存器時(shí),燈才會(huì)打開(kāi),這會(huì)造成通信過(guò)程和動(dòng)作執(zhí)行之間有一定時(shí)差。過(guò)程展示如圖3所示。

圖3 傳統(tǒng)寄存器寫(xiě)入與任務(wù)執(zhí)行過(guò)程
由此可見(jiàn),傳統(tǒng)的Modbus 是一個(gè)簡(jiǎn)單的分層結(jié)構(gòu),層級(jí)功能操作相互獨(dú)立,層與層之間通過(guò)一個(gè)真實(shí)存在的寄存器(或者線圈)間接聯(lián)系起來(lái)。其優(yōu)點(diǎn)是設(shè)計(jì)思路清晰,獨(dú)立性好,可靠性強(qiáng)[8]。但是缺點(diǎn)也是顯而易見(jiàn)的。首先,通信指令與獲取數(shù)據(jù)、執(zhí)行動(dòng)作之間的實(shí)時(shí)性問(wèn)題將造成響應(yīng)周期的存在,更為重要的是,因?yàn)閿?shù)據(jù)更新和動(dòng)作執(zhí)行是一個(gè)不斷重復(fù)的過(guò)程,這種設(shè)計(jì)無(wú)法實(shí)現(xiàn)低功耗特征。
在分析傳統(tǒng)Modbus 協(xié)議及通信機(jī)理基礎(chǔ)上,對(duì)常用設(shè)備的低功耗處理機(jī)制進(jìn)行分析研究,明確了處理機(jī)制存在的缺點(diǎn),對(duì)數(shù)據(jù)更新和動(dòng)作響應(yīng)機(jī)制做出設(shè)計(jì)改進(jìn),以實(shí)現(xiàn) Modbus 設(shè)備的低功耗特性。
一個(gè)設(shè)備的功耗特性受限于多種因素,包括:工作原理、機(jī)械結(jié)構(gòu)、運(yùn)行狀態(tài)、電源設(shè)計(jì)、芯片選擇等,但在嵌入式軟件系統(tǒng)對(duì)設(shè)備控制的層面上講,有一條重要原則,即減少無(wú)意義的能源消耗[9]。當(dāng)某個(gè)功能不被使用時(shí),與其相關(guān)的模塊應(yīng)被關(guān)閉,包括:硬件斷電、軟件功能停止以及宏觀連續(xù)但微觀間歇性工作等狀態(tài)。由于電子器件速度非???,可以微觀上實(shí)施間歇性的工作[10-11],例如一些慢速通信接口。
一個(gè)低功耗設(shè)備,如溫度傳感器,在主機(jī)未索要溫度數(shù)據(jù)的時(shí)候,溫度傳感器部分不應(yīng)自主工作 (且此時(shí)工作產(chǎn)生的數(shù)據(jù)也無(wú)任何意義)。當(dāng)主機(jī)索要溫度數(shù)據(jù)的時(shí)候,才會(huì)開(kāi)啟溫度傳感器模塊,并立即工作一次,得到最新的溫度數(shù)據(jù),然后立即關(guān)閉溫度傳感器模塊,最后設(shè)備將數(shù)據(jù)結(jié)果按照Modbus 協(xié)議格式反饋給主機(jī)??梢钥闯?,此讀取過(guò)程改進(jìn)設(shè)計(jì),能夠?qū)崿F(xiàn)傳感器動(dòng)作與通信過(guò)程的緊密聯(lián)系與同步操作,中間的寄存器已經(jīng)變成隱式。即主機(jī)發(fā)起通信,寄存器中的數(shù)據(jù)尚未準(zhǔn)備好(或者這個(gè)寄存器尚不存在),對(duì)這個(gè)寄存器的讀取要求將演變成一個(gè)溫度測(cè)量需求,并導(dǎo)致后面一系列的測(cè)量動(dòng)作。當(dāng)溫度測(cè)量完成后,寄存器才顯現(xiàn)出來(lái)。信息處理與動(dòng)作過(guò)程見(jiàn)圖4。但從主機(jī)角度來(lái)看,從機(jī)仍然嚴(yán)格遵循著Modbus 協(xié)議。同時(shí),由于傳感器數(shù)據(jù)是最新生成的,這種過(guò)程比傳統(tǒng)方式帶來(lái)了更高的實(shí)時(shí)性。

圖4 改進(jìn)后寄存器讀取與任務(wù)觸發(fā)過(guò)程
對(duì)寄存器的寫(xiě)入行為,表現(xiàn)在儀器設(shè)備上,一般是參數(shù)設(shè)定、功能的打開(kāi)或者關(guān)閉等控制動(dòng)作。以設(shè)備上受控的信號(hào)指示燈為例,當(dāng)主機(jī)未對(duì)設(shè)備的信號(hào)進(jìn)行設(shè)定時(shí),設(shè)備不應(yīng)頻繁查看該寄存器內(nèi)容,只有在主機(jī)對(duì)該寄存器發(fā)生寫(xiě)入動(dòng)作時(shí),設(shè)備再去檢查該寄存器內(nèi)容,從而控制信號(hào)燈變化??梢钥闯?,此寫(xiě)入過(guò)程改進(jìn)設(shè)計(jì),能夠?qū)崿F(xiàn)設(shè)備指示燈變化與通信緊密聯(lián)系,中間的寄存器變?yōu)殡[式,即當(dāng)這個(gè)過(guò)程完成后,寄存器的作用又會(huì)消失。數(shù)據(jù)寫(xiě)入與觸發(fā)動(dòng)作過(guò)程見(jiàn)圖5。從主機(jī)角度來(lái)看,從機(jī)仍然嚴(yán)格遵循著 Modbus 協(xié)議。同時(shí),由于從機(jī)對(duì)寄存器改變進(jìn)行了立即響應(yīng),這種過(guò)程比傳統(tǒng)的控制方式帶來(lái)了更高的實(shí)時(shí)性。

圖5 改進(jìn)后寄存器寫(xiě)入與任務(wù)觸發(fā)過(guò)程
Modbus 標(biāo)準(zhǔn)通信過(guò)程并沒(méi)有限定對(duì)寄存器操作的數(shù)量和范圍,也就是說(shuō),主機(jī)可以使用一條指令對(duì)多個(gè)連續(xù)的寄存器進(jìn)行讀取或?qū)懭氩僮鳎赡苌婕岸鄠€(gè)功能和參數(shù)的訪問(wèn)或改變。在傳統(tǒng)的工作機(jī)理中,由于寄存器是真實(shí)存在的,并且與設(shè)備實(shí)際動(dòng)作分離,多寄存器的操作不存在任何問(wèn)題。但是,在低功耗特性設(shè)備的工作模式下,為了應(yīng)對(duì)多寄存器的批量操作,在寄存器和設(shè)備實(shí)際動(dòng)作執(zhí)行之間需要獨(dú)立出一層,用于負(fù)責(zé)對(duì)寄存器操作進(jìn)行監(jiān)視,分辨對(duì)寄存器讀取或?qū)懭?,明確指令波及的寄存器范圍,以及影響到的功能模塊區(qū)間,并根據(jù)影響的區(qū)間,將這些讀寫(xiě)操作轉(zhuǎn)換為一個(gè)或多個(gè)相關(guān)功能模塊的動(dòng)作,而后將這些動(dòng)作結(jié)構(gòu)整合起來(lái),表現(xiàn)在寄存器層面上,最后再統(tǒng)一轉(zhuǎn)換為Modbus 協(xié)議格式,對(duì)主機(jī)進(jìn)行反饋。圖6 展示了多寄存器操作與多動(dòng)作觸發(fā)的處理機(jī)制。

圖6 多寄存器、多動(dòng)作觸發(fā)運(yùn)行框架
搭建測(cè)試系統(tǒng),結(jié)構(gòu)如圖7 所示。系統(tǒng)的傳感器是應(yīng)用于物理海洋觀測(cè)的高精度CTD 傳感器(測(cè)量溫度、鹽度、深度)。其實(shí)際工作環(huán)境位于 1 000 m深度的海洋中,通過(guò)科考船部署在制定區(qū)域,依賴自身的電池或者上位機(jī)(浮標(biāo)系統(tǒng))有限的電源工作[12],安裝和維護(hù)成本非常高,因此必須具備超低功耗特性。整個(gè)系統(tǒng)的各個(gè)傳感器與浮標(biāo)系統(tǒng)主機(jī)之間均使用Modbus 協(xié)議進(jìn)行通信。

圖7 低功耗Modbus 通信測(cè)試系統(tǒng)
測(cè)試系統(tǒng)中使用 RS485 作為 Modbus 的通信物理層,使用海洋物性參數(shù)監(jiān)測(cè)浮標(biāo)的數(shù)據(jù)采集系統(tǒng),開(kāi)啟標(biāo)準(zhǔn)Modbus 通信接口作為主站發(fā)送控制指令至 CTD 傳感器,波特率為 9 600 b/s。經(jīng)過(guò)RS485 電平轉(zhuǎn)化芯片后,進(jìn)入單片機(jī)的 UART 接口。CTD 傳感器內(nèi)部采用STM32L462 超低功耗單片機(jī)作為主控芯片,平時(shí)整個(gè)系統(tǒng)處于低功耗休眠模式,運(yùn)行時(shí)鐘關(guān)閉,串口模塊功能處于打開(kāi)狀態(tài),能夠隨時(shí)監(jiān)聽(tīng)指令。
系統(tǒng)測(cè)試包含了傳感器在休眠狀態(tài)下的功耗、休眠喚醒功能、Modbus 指令處理功能、數(shù)據(jù)反饋功能、丟包率、響應(yīng)速度、指令執(zhí)行完后的功耗狀態(tài)[13]。關(guān)鍵測(cè)試數(shù)據(jù)見(jiàn)表2,單次通信的電流消耗動(dòng)態(tài)過(guò)程見(jiàn)圖8??梢钥闯?,在傳感器中運(yùn)行的低功耗模式 Modbus 協(xié)議,實(shí)現(xiàn)了數(shù)據(jù)的準(zhǔn)確、有效通信,同時(shí)相對(duì)于傳統(tǒng)協(xié)議,能夠保持傳感器長(zhǎng)時(shí)間處于超低功耗狀態(tài)。

表2 通信過(guò)程測(cè)試數(shù)據(jù)

圖8 單次Modbus 通信過(guò)程電流消耗
本文針對(duì)具有超低功耗特性需求的Modbus 設(shè)備,設(shè)計(jì)了新的信息處理過(guò)程和動(dòng)作觸發(fā)機(jī)制,抽象了傳統(tǒng)的寄存器概念,使得設(shè)備在兼容傳統(tǒng)的Modbus 協(xié)議基礎(chǔ)上,能夠適應(yīng)超低功耗休眠狀態(tài),最大程度上降低系統(tǒng)整體功耗。實(shí)驗(yàn)測(cè)試表明,應(yīng)用該設(shè)計(jì)思想的嵌入式系統(tǒng),能夠正確響應(yīng)主站指令,丟包率極低,響應(yīng)速度快,可靠性高,設(shè)備在線時(shí)的功耗電流低于 10 μA。此外,該設(shè)計(jì)思想基于分層結(jié)構(gòu),可以面向多種設(shè)備的多種用途,具備可擴(kuò)展性和可復(fù)制性,可以很好地應(yīng)用在科學(xué)觀測(cè)、工業(yè)測(cè)量、物聯(lián)網(wǎng)等對(duì)功耗要求高的多種場(chǎng)合。