劉征宇,陳允鋒,陳夢(mèng)英
?
基于Modbus協(xié)議的聲學(xué)多普勒流速剖面儀軟件實(shí)現(xiàn)
劉征宇1,陳允鋒1,陳夢(mèng)英2
(1. 海軍駐上海地區(qū)水聲導(dǎo)航軍事代表室,上海201108;2. 中國(guó)科學(xué)院聲學(xué)研究所東海研究站,上海200032)
為了配合各地水情中心或預(yù)警預(yù)報(bào)系統(tǒng)的建設(shè),研制了一款多普勒測(cè)流剖面儀,它具有真實(shí)反映流場(chǎng),并且一次可以測(cè)量一個(gè)剖面上的若干層水流速度等優(yōu)點(diǎn)。首先對(duì)這款多普勒測(cè)流剖面儀的系統(tǒng)功能進(jìn)行了描述,結(jié)合Modbus協(xié)議特點(diǎn),給出了本系統(tǒng)的讀寫(xiě)數(shù)據(jù)的Modbus通信實(shí)例;在TI的OMAPL137硬件和嵌入式Linux操作系統(tǒng)的基礎(chǔ)上,給出了實(shí)現(xiàn)Modbus RTU協(xié)議從站的設(shè)計(jì)方案;通過(guò)將從站采集到的水流速度傳輸至主站實(shí)時(shí)顯示驗(yàn)證了該方案。實(shí)驗(yàn)證明該方案有效地實(shí)現(xiàn)了多普勒流速剖面儀在水利系統(tǒng)的現(xiàn)場(chǎng)數(shù)據(jù)傳輸。
多普勒流速剖面儀;Modbus協(xié)議;RTU傳輸模式;嵌入式Linux
聲學(xué)多普勒流速剖面儀(Acoustic Doppler Current Profilers, ADCP),是20世紀(jì)80年代初發(fā)展起來(lái)的一種新型測(cè)流設(shè)備。它根據(jù)多普勒原理,應(yīng)用矢量合成法,遙測(cè)流速的垂直剖面分布,對(duì)流場(chǎng)不產(chǎn)生任何擾動(dòng),不存在機(jī)械慣性和機(jī)械磨損,可以真實(shí)反映流場(chǎng),并且一次可以測(cè)量一個(gè)剖面上若干層水流速度的三維分量和絕對(duì)方向。由于ADCP具有諸多優(yōu)點(diǎn),所以它的出現(xiàn)立即引起了海洋界的高度重視。近年來(lái)ADCP測(cè)流技術(shù)發(fā)展很快,產(chǎn)品具有多種頻率,多種規(guī)格,多種測(cè)量方式[1]。本文介紹的一款A(yù)DCP測(cè)流及遙測(cè)系統(tǒng),可以配合水情中心或預(yù)警預(yù)報(bào)系統(tǒng)的建設(shè),使得流速、流量的實(shí)時(shí)監(jiān)測(cè)數(shù)據(jù)的超遠(yuǎn)程傳輸成為可能,便于有關(guān)部門(mén)更為及時(shí)、多層面地了解水文情勢(shì)并作出數(shù)據(jù)的及時(shí)處理和分析。
隨著現(xiàn)代工業(yè)的發(fā)展,如今的工業(yè)控制已從單機(jī)控制走向集散控制、集中控制、集中監(jiān)控和網(wǎng)絡(luò)集約管理的時(shí)代,而工業(yè)控制器聯(lián)網(wǎng)也為網(wǎng)絡(luò)管理提供了方便。Modbus協(xié)議是一種通用通信協(xié)議。通過(guò)該協(xié)議,控制器相互之間、控制器經(jīng)由網(wǎng)絡(luò)和其它設(shè)備之間可以實(shí)現(xiàn)數(shù)據(jù)通信。有了它,控制設(shè)備可以連成工業(yè)網(wǎng)絡(luò),進(jìn)行集中監(jiān)控,成為現(xiàn)代網(wǎng)絡(luò)式集中制造、管理的主流趨勢(shì)[2]。因此,研究基于Modbus協(xié)議的ADCP系統(tǒng)十分有必要。
結(jié)合現(xiàn)代水聲設(shè)備小型化的要求,該設(shè)備的處理器采用TI公司的新款雙核OMAPL137芯片[3]。設(shè)備是遵循Modbus協(xié)議的從機(jī),與遠(yuǎn)程終端控制系統(tǒng)(Remote Terminal Unit, RTU)進(jìn)行串口通信。物理層采用了RS485串口通信標(biāo)準(zhǔn)。本文將首先介紹ADCP要實(shí)現(xiàn)的整體功能,再介紹如何通過(guò)Modbus協(xié)議與RTU主機(jī)進(jìn)行通信,最后給出了從機(jī)設(shè)計(jì)實(shí)現(xiàn)流程圖。
本文研制的這款A(yù)DCP最大的特點(diǎn)是可以獨(dú)立工作,無(wú)人看守,并通過(guò)Modbus協(xié)議的方式進(jìn)行遠(yuǎn)距離控制和傳輸數(shù)據(jù)。ADCP的系統(tǒng)結(jié)構(gòu)如圖1所示。它的核心處理器是一款具有ARM和DSP雙核的OMAPL137芯片。其中DSP核負(fù)責(zé)AD采集、信號(hào)處理,將流速計(jì)算結(jié)果傳給ARM核。而ARM核中安裝了嵌入式Linux操作系統(tǒng),是整個(gè)設(shè)備的核心,它負(fù)責(zé)控制DSP運(yùn)算,接收計(jì)算結(jié)果,數(shù)據(jù)保存以及與遠(yuǎn)程監(jiān)控主機(jī)進(jìn)行Modbus通信等。
RTU主機(jī)通過(guò)Modbus協(xié)議控制ADCP,實(shí)現(xiàn)工作狀態(tài)切換、參數(shù)設(shè)置以及數(shù)據(jù)傳輸。該系統(tǒng)的工作狀態(tài)包括自動(dòng)測(cè)量、單次測(cè)量、自檢、預(yù)布設(shè)和待機(jī)等。測(cè)量參數(shù)設(shè)置包括盲區(qū)大小、測(cè)量單元大小和個(gè)數(shù)以及測(cè)流范圍等;測(cè)量數(shù)據(jù)需要保存、傳輸與管理;另外,還可以設(shè)置系統(tǒng)時(shí)間。數(shù)據(jù)傳輸是指遠(yuǎn)程監(jiān)控主機(jī)通過(guò)發(fā)送讀取命令選擇讀取的層數(shù)和流速結(jié)果的形式,ADCP將流速數(shù)據(jù)結(jié)果上傳。具體功能框圖如圖2所示。
本節(jié)首先介紹Modbus通信協(xié)議的特點(diǎn),結(jié)合協(xié)議的特殊性和ADCP的具體功能,設(shè)計(jì)了本設(shè)備的Modbus通信協(xié)議,并給出了讀取流速結(jié)果和同步系統(tǒng)時(shí)間的兩個(gè)通信實(shí)例。
2.1 Modbus通信協(xié)議特點(diǎn)
Modbus協(xié)議有ASCII和RTU兩種。RTU方式在同樣的波特率下可比ASCII方式傳送更多的數(shù)據(jù),本文采用Modbus RTU傳輸方式[4]。
RTU模式下消息發(fā)送至少要以3.5個(gè)字符時(shí)間的停頓間隔開(kāi)始。傳輸?shù)牡谝粋€(gè)域是設(shè)備地址??梢允褂玫膫鬏斪址鞘M(jìn)制的0...9, A...F。網(wǎng)絡(luò)設(shè)備不斷偵測(cè)網(wǎng)絡(luò)總線,包括停頓間隔時(shí)間內(nèi)。當(dāng)?shù)谝粋€(gè)域(地址域)接收到消息時(shí),每個(gè)設(shè)備都進(jìn)行解碼以判斷消息是否是發(fā)往自己的。在最后一個(gè)傳輸字符之后,一個(gè)至少3.5個(gè)字符時(shí)間的停頓標(biāo)定了消息的結(jié)束。一個(gè)新的消息可在此停頓后開(kāi)始。
2.2 ADCP的通信協(xié)議設(shè)計(jì)
表1給出了Modbus RTU幀格式。其中起始位和結(jié)束符代表與前后幀的間隔不小于3.5個(gè)字符;CRC(Cyclic Redundancy Check, 循環(huán)冗余校驗(yàn))是校驗(yàn)碼。
表1 RTU幀格式
表1中設(shè)備地址是通訊傳送的第一個(gè)字節(jié)。這個(gè)字節(jié)表示由用戶設(shè)定地址碼的從機(jī)將接收由主機(jī)發(fā)送來(lái)的消息。每個(gè)從機(jī)都有唯一的地址碼,并且響應(yīng)均以各自的地址碼開(kāi)始。即主機(jī)發(fā)送的地址碼表明將發(fā)送到的從機(jī)地址,而從機(jī)發(fā)送的地址碼表明回送的從機(jī)地址。
功能碼是通訊傳送的第二個(gè)字節(jié)。本設(shè)備使用了其中的兩個(gè)功能碼:讀取碼03H和寫(xiě)命令碼10H。作為主機(jī)請(qǐng)求發(fā)送,通過(guò)功能碼告訴從機(jī)執(zhí)行什么動(dòng)作。作為從機(jī)響應(yīng),從機(jī)發(fā)送的功能碼與從主機(jī)發(fā)送來(lái)的功能碼一樣,并表明從機(jī)已響應(yīng)主機(jī)進(jìn)行操作。
數(shù)據(jù)域是可變長(zhǎng)的字段,具體格式和功能碼密切相關(guān)。表2給出了ADCP的部分RTU幀格式中數(shù)據(jù)域的定義。其中各寄存器首址是參數(shù)命令的起始地址,寄存器個(gè)數(shù)表示該參數(shù)所占字節(jié)數(shù),即字節(jié)數(shù)等于寄存器個(gè)數(shù)乘以2。
表2 ADCP關(guān)于RTU幀格式的數(shù)據(jù)域定義
2.3 讀取ADCP流速結(jié)果實(shí)例
多個(gè)寄存器數(shù)據(jù)讀取使用03H(讀取保持寄存器)功能碼。數(shù)據(jù)讀取時(shí)可以單獨(dú)讀取某一參數(shù),也可以讀多個(gè)連續(xù)地址的參數(shù)??梢酝ㄟ^(guò)0x03命令讀取設(shè)備參數(shù)、測(cè)量數(shù)據(jù)等值。具體格式定義如下:
主機(jī)發(fā)送幀:[儀表地址] [功能碼03] [寄存器起始地址高字節(jié)] [寄存器起始地址低字節(jié)] [讀取的寄存器數(shù)高字節(jié)] [讀取的寄存器數(shù)低字節(jié)] [CRC高字節(jié)] [CRC低字節(jié)]。
從機(jī)接收數(shù)據(jù)幀后進(jìn)行分析判斷,如數(shù)據(jù)有效則向主機(jī)發(fā)送相應(yīng)幀,如無(wú)效則返回錯(cuò)誤回應(yīng)幀。
從機(jī)響應(yīng)幀:[儀表地址] [功能碼03] [返回的字節(jié)個(gè)數(shù)][數(shù)據(jù)1][數(shù)據(jù)2]...[數(shù)據(jù)n][CRC高字節(jié)] [CRC低字節(jié)]。其中,返回的字節(jié)個(gè)數(shù)是讀取的寄存器數(shù)的2倍。
錯(cuò)誤回應(yīng)幀:[設(shè)備地址] [功能碼+0x80] [錯(cuò)誤碼] [CRC高字節(jié)] [CRC低字節(jié)]。錯(cuò)誤碼:0x01表示無(wú)效功能,0x02表示無(wú)效寄存器地址,0x03表示無(wú)效的數(shù)據(jù)。
下面給出讀取第一層流速數(shù)據(jù)的實(shí)例。RTU主機(jī)發(fā)送幀格式如表3所示,數(shù)據(jù)域中包括寄存器首址和寄存器個(gè)數(shù),分別代表要讀取的第一層流速存儲(chǔ)地址和寄存器個(gè)數(shù)。ADCP響應(yīng)幀格式如表4所示,數(shù)據(jù)域中數(shù)據(jù)字節(jié)數(shù)表示返回?cái)?shù)據(jù)大小,數(shù)據(jù)1表示第一層X(jué)方向流速,數(shù)據(jù)2表示第一層Y方向流速。
表3 主機(jī)發(fā)送幀格式(功能碼03H)
表4 ADCP響應(yīng)幀格式(功能碼03H)
2.4 同步ADCP系統(tǒng)時(shí)間實(shí)例
使用10H命令,每次允許寫(xiě)一個(gè)或多個(gè)寄存器的值,設(shè)置多個(gè)寄存器時(shí),設(shè)置的寄存器地址必須是連續(xù)的??梢酝ㄟ^(guò)10H命令設(shè)置設(shè)備參數(shù),同步時(shí)間等。具體格式定義如下:
主機(jī)發(fā)送幀:[儀表地址] [功能碼10] [寄存器起始地址高字節(jié)] [寄存器起始地址低字節(jié)] [需寫(xiě)的寄存器數(shù)高字節(jié)] [需寫(xiě)的寄存器數(shù)低字節(jié)] [要寫(xiě)的數(shù)據(jù)總的字節(jié)數(shù)] [數(shù)據(jù)1][數(shù)據(jù)2]...[數(shù)據(jù)n] [CRC高字節(jié)] [CRC低字節(jié)]。
從機(jī)接收數(shù)據(jù)幀后進(jìn)行分析判斷,如數(shù)據(jù)有效向主機(jī)發(fā)送相應(yīng)幀,如無(wú)效則返回錯(cuò)誤回應(yīng)幀。
從機(jī)響應(yīng)幀:[儀表地址] [功能碼10] [寄存器起始地址高字節(jié)] [寄存器起始地址低字節(jié)] [寄存器數(shù)高字節(jié)] [寄存器數(shù)低字節(jié)] [CRC高字節(jié)] [CRC低字節(jié)]。
錯(cuò)誤回應(yīng)幀:[儀表地址] [功能碼+0x80] [錯(cuò)誤碼] [CRC高字節(jié)] [CRC低字節(jié)]。錯(cuò)誤碼:0x01表示無(wú)效功能,0x02表示無(wú)效寄存器地址,0x03表示無(wú)效的數(shù)據(jù)。
下面給出RTU主機(jī)對(duì)ADCP設(shè)備進(jìn)行時(shí)間同步的實(shí)例。主機(jī)發(fā)送幀如表5所示,數(shù)據(jù)域給出了需要寫(xiě)入的時(shí)間,13年10月16日13時(shí)17分19秒,當(dāng)ADCP收到該幀,將立即修改系統(tǒng)時(shí)間,并回復(fù)響應(yīng)幀如表6所示。
表5 主機(jī)發(fā)送幀格式(功能碼10H)
表6 從機(jī)響應(yīng)幀格式(功能碼10H)
ADCP作為整個(gè)水情預(yù)報(bào)系統(tǒng)的一個(gè)觀測(cè)節(jié)點(diǎn),是Modbus RTU從機(jī),主要實(shí)現(xiàn)消息幀的接收和存儲(chǔ),并根據(jù)接收到的消息幀執(zhí)行相應(yīng)的行為,將響應(yīng)幀反饋給主設(shè)備[5]。下面對(duì)本設(shè)備接收幀的超時(shí)檢測(cè)和接收幀處理流程分別進(jìn)行闡述。
3.1 Modbus幀的超時(shí)檢測(cè)
ADCP通過(guò)超時(shí)檢測(cè)的方法來(lái)判斷每個(gè)幀的開(kāi)始和結(jié)束。當(dāng)串口接收到第一個(gè)字元時(shí),精確的Linux系統(tǒng)計(jì)時(shí)器開(kāi)始計(jì)時(shí),若在3.5個(gè)字符時(shí)間內(nèi)還沒(méi)有新的字元到達(dá),則認(rèn)為接收到一個(gè)Modbus協(xié)議RTU模式的消息幀,于是調(diào)用接收幀處理程序工作。其中3.5個(gè)字符所需時(shí)間與串口波特率有關(guān)。當(dāng)波特率為9600時(shí),對(duì)應(yīng)時(shí)間為3.5*11/9600=4 ms。超時(shí)檢測(cè)軟件流程圖如圖3所示。
3.2 Modbus RTU從機(jī)接收幀處理流程
當(dāng)ADCP通過(guò)超時(shí)檢測(cè)程序檢測(cè)出一幀信號(hào)后,進(jìn)入接收幀處理流程,流程圖如圖4所示。Modbus RTU從機(jī)對(duì)收到的數(shù)據(jù)進(jìn)行分析,如果地址位是本機(jī)地址的話,證明此次接收的數(shù)據(jù)是發(fā)送給本機(jī)的符合Modbus協(xié)議RTU模式的數(shù)據(jù),則對(duì)接收的數(shù)據(jù)進(jìn)行CRC校驗(yàn)。如果數(shù)據(jù)能夠通過(guò)CRC校驗(yàn),則證明此次接收的數(shù)據(jù)是一個(gè)完整的消息幀,可以對(duì)功能碼、寄存器地址、數(shù)據(jù)進(jìn)行判斷,完成數(shù)據(jù)讀取、數(shù)據(jù)分析及數(shù)據(jù)處理的過(guò)程,并反饋?lái)憫?yīng)幀給主機(jī)。其中執(zhí)行功能操作主要是完成以下幾點(diǎn):解析消息幀,讀取功能代碼,跳轉(zhuǎn)執(zhí)行相應(yīng)操作,并構(gòu)造響應(yīng)幀,將響應(yīng)幀反饋至RTU主機(jī)。如果是錯(cuò)誤信息,則根據(jù)錯(cuò)誤碼構(gòu)造錯(cuò)誤回應(yīng)幀,并將含有錯(cuò)誤碼的消息幀發(fā)送給RTU主機(jī)。
本系統(tǒng)在RTU傳輸模式下與主站進(jìn)行了數(shù)據(jù)通信,測(cè)試結(jié)果正確無(wú)誤,能夠成功地完成Modbus通信中對(duì)數(shù)據(jù)的采集、處理和控制操作等要求。
本文設(shè)計(jì)的這款多普勒流速剖面儀,采用Modbus協(xié)議的RS485總線進(jìn)行通信傳輸,上位機(jī)控制中心實(shí)現(xiàn)遠(yuǎn)程實(shí)時(shí)監(jiān)控。測(cè)試結(jié)果表明,本系統(tǒng)工作穩(wěn)定、可靠性強(qiáng)、操作方便。另外,該ADCP還可以多臺(tái)設(shè)備組網(wǎng),這樣使得遠(yuǎn)程監(jiān)控各地區(qū)的水文情勢(shì)成為可能。本文設(shè)計(jì)軟件不僅僅針對(duì)水文監(jiān)控,只需要對(duì)系統(tǒng)進(jìn)行較少的改動(dòng)就能很好地適用于對(duì)大型設(shè)備進(jìn)行通信的要求,具有很強(qiáng)的技術(shù)適應(yīng)性。
[1] 朱昊. 嵌入式數(shù)字ADCP信號(hào)處理系統(tǒng)的研究[D]. 天津: 天津大學(xué)工學(xué)碩士論文, 2003: 2-6.
ZHU Hao. Study on embedded signal processing system of digital ADCP[D]. Tianjin: The Degree of Master of Tian Jin University, 2003: 2-6.
[2] 王軍霞, 趙金龍, 程秀竹. MODBUS RTU通訊協(xié)議在S7-200 PLC中的應(yīng)用[J]. 系統(tǒng)集成與工程應(yīng)用, 2013, 144(4): 53-55.
WANG Junxia, ZHAO Jinlong, CHENG Xiuzhu. Application of Modbus RTU communication protocol in S7-200 PLC[J]. System Integration and Engineering Application, 2013, 144(4): 53-55.
[3] Texas Instruments. OMAP-L137 Low power applications processor data sheet[Z]. SPRS563C, 2009.12.
[4] 翁建年, 史春華, 張浩. 基于ARM7微處理器的Modbus通信協(xié)議的實(shí)現(xiàn)[J]. 機(jī)電一體化, 2009, 13(6): 69-83.
WENG Jiannian, SHI Chunhua, ZHANG Hao. Based on ARM7 realization of Modbus communication protocol[J]. Mechanical and Electrical Integration, 2009, 13(6): 69-83.
[5] 張桂, 金國(guó)強(qiáng), 李輝. 基于ARM平臺(tái)Modbus RTU協(xié)議的研究與實(shí)現(xiàn)[J]. 電力科學(xué)與工程, 2011, 27(1): 23-27.
ZHANG Gui, JIN Guoqiang, LI Hui. Research and implementation of Modbus RTU protocol based on ARM[J]. Electric Power Science and Engineering Power Science and Engineering, 2011, 27(1): 23-27.
Implementation of acoustic Doppler profilers based on Modbus protocol
LIU Zheng-yu1, CHEN Yun-feng1, CHEN Meng-ying2
(1. Military Representatives Office of Underwater Sound & Navigation System in Shanghai Area, Shanghai 201108, China;2. Shanghai Acoustic Laboratory, Institute of Acoustics, Chinese Academy of Sciences, Shanghai, 200032, China)
In order to fit the construction of hydrologic information center or the early warning and forecasting system, an acoustic Doppler current profiler is developed, it can truly reflect the flow field, and get a current profilers through once measurement. In this paper firstly the system function of Doppler current profiler is described; and then secondly, combining the characteristic of Modbus protocol, an example of sending and receiving data is presented. Based on the OMAPL137 hardware and the embedded Linux operating system, a scheme of implementing of Modbus RTU protocol is realized. The scheme is verified by communication experiments. The experimental results show that this method can effectively carry out data transmission for acoustic Doppler current Profiler in data transmission of hydraulic system.
Acoustic Doppler Current profilers; Modbus protocol; RTU transmission mode; Embedded Linux
TB556
A
1000-3630(2015)-03-0260-05
10.3969/j.issn1000-3630.2015.03.014
2015-03-01;
2015-06-03
劉征宇(1981-), 男, 安徽銅陵人, 工程師, 研究方向?yàn)閿?shù)字信號(hào)處理。
陳夢(mèng)英, E-mail: chen03051302@126.com