賀亞楠,朱洪海
(齊魯工業(yè)大學(山東省科學院)山東省科學院海洋儀器儀表研究所 山東省海洋環(huán)境監(jiān)測技術重點實驗室 國家海洋監(jiān)測設備工程技術研究中心,山東 青島266061)
海水表層溫度是我國海洋水文常規(guī)觀測中的重要測量參數(shù)[1]?;诖d平臺的海水表層水溫觀測由于受到船舶和波浪運動的影響,目前采用的主要手段是人工觀測。早期的海溫觀測以直接觀測為主,包括船舶觀測、浮標觀測、船體感應溫度計觀測。船體感應海溫測量是利用船體上安裝的溫度計直接測量海溫[2]。溫度計需要放置在海面水下0.5 m的位置。為了使溫度計始終在船的吃水線以下,經(jīng)常垂直排列放置3~5個溫度計。
為了實現(xiàn)基于船載平臺的海水表層水溫自動觀測,需要在船體一側布放水溫傳感器,并且水溫傳感器始終處于船舶吃水線范圍。本文設計了基于Libmodbus的走航式海洋表層水溫總線,實現(xiàn)了表層水溫信息采集和船舶的海水表層水溫自動監(jiān)測。
RS485總線具有設備簡單、價格低廉、控制方便、能進行長距離通信的優(yōu)點,其收發(fā)器采用平衡發(fā)送和差分接收,因此具有抑制共模干擾的能力[3]。使用RS485總線和一對雙絞線就能實現(xiàn)多站聯(lián)網(wǎng),構成分布式系統(tǒng)。因此本系統(tǒng)使用4個水溫傳感器設計RS485作為硬件層協(xié)議,采用主從結構,構成串行通信系統(tǒng)。
Modbus協(xié)議是全球第一個真正用于工業(yè)現(xiàn)場的總線協(xié)議[4],這是一個請求/應答協(xié)議,并且提供功能碼規(guī)定的服務。Modbus協(xié)議定義了一個與基礎通信層無關的簡單協(xié)議數(shù)據(jù)單元(PDU),其協(xié)議數(shù)據(jù)單元如圖1所示。
圖1 Modbus協(xié)議數(shù)據(jù)單元
Modbus串行鏈路協(xié)議是單主/多從通信協(xié)議。在同一時刻,只有一個主節(jié)點連接于總線,一個或多個子節(jié)點(最大編號為247)連接于同一個串行總線。在 Modbus 串行鏈路,地址域只含有子節(jié)點地址,主節(jié)點通過將子節(jié)點的地址放到報文的地址域對子節(jié)點尋址。當子節(jié)點返回應答時,將自己的地址放到應答報文的地址域以讓主節(jié)點知道哪個子節(jié)點在回答。Modbus定義了報文域的位內容在線路上串行的傳送,并確定信息如何打包為報文和解碼。有兩種串行模式即:RTU模式和ASCII模式,區(qū)別見表1。
表1 Modbus-RTU和Modbus-ASCII區(qū)別
Modbus-ASCII模式的一個子節(jié)需要兩個字符,在波特率相同時RTU模式的傳輸數(shù)據(jù)密度以及吞吐率比 ASCII模式的要高。
Modbus總線廣泛應用于智能儀器儀表、智能監(jiān)控設備等諸多領域[5],所以本系統(tǒng)采用Modbus-RTU作為軟件層協(xié)議。為了加強數(shù)據(jù)檢錯能力,軟件方面使用CRC16算法校驗數(shù)據(jù)。系統(tǒng)整體框圖如圖2所示。
圖2 海洋表層水溫采集系統(tǒng)整體框圖
PT100是一種正溫度系數(shù)的熱敏電阻,隨著溫度的升高電阻增大,并且基本呈線性方式,很適合用作連續(xù)測溫。鉑電阻測溫工作原理為:鉑金屬材料在不同的溫度下電導率不同,鉑絲的電導率與溫度之間大致成正比的關系,其可測量的溫度范圍大致在-200 ℃~600 ℃。PT100溫度傳感器還具有抗振動、穩(wěn)定、測溫精度高、壽命較長等優(yōu)點[6]。因此,本設計采用PT100進行測溫。圖3中電阻R2、R3、R4與PT100組成電橋電路,REF3030為電橋電路提供標準的3.3 V電壓。AD623用一個2 kΩ的放大反饋電阻精確地把電橋的壓差放大51倍。
圖3 測溫電路圖
本電路采用MAX485作為RS485總線的驅動芯片,如圖4所示。將RE和DE短接,由單片機的I/O端口經(jīng)反相器控制半雙工通信時接收和發(fā)送的狀態(tài)切換。三極管Ql及電阻Rl、R2構成反相電路,防止出現(xiàn)總線沖突問題;R3、R4為總線空閑時的箝位電阻,用于抗干擾;R7為阻抗匹配電阻,以減小信號反射;R5、R6及4個快恢復穩(wěn)壓管Dl~D4可將瞬態(tài)高電壓箝位在一定的電壓范圍之內,以保護通信接口,保證通信的可靠性。
圖4 RS485通信接口電路
RS232與RS485轉換模塊通過MAX232芯片把RS232標準電平轉換為TTL標準電平,然后使用MAX485芯片將TTL電平轉換為RS485電平。MAX485芯片包含一個驅動器和一個接收器,適合于RS485通信標準的低功率收發(fā)器。MAX485芯片采用單一電源5 V工作,額定電流為300 μA,采用半雙工通信方式,可以將TTL電平轉換為RS485電平。RS232與RS485轉換電路如圖5所示。
圖5 RS232與RS485轉換電路
Libmodbus作為一個優(yōu)秀而且免費開源的跨平臺庫,支持RTU和TCP模式的Modbus開發(fā)庫。本文利用Libmodbus開源類庫V3.0.6版本,在Win7操作系統(tǒng)下,使用Visual Studio 2013建立MFC工程,利用MFC類庫和Libmodbus類庫進行Modbus上位機開發(fā)。
首先對Libmodbus庫進行編譯,得到Modbus靜態(tài)庫和動態(tài)庫。利用VS2013建立MFC應用程序,將Modbus靜態(tài)庫(modbus.lib)和動態(tài)庫添(modbus.dll)加進工程文件。
在本次開發(fā)中需要用到的文件有:modbus.h;modbus-rtu.h;modbus-tcp.h;modbus-version.h;modbus.lib;modbus.dll。在modbus.h文件中,宏定義了Modbus的功能碼,還定義最大可讀/可寫線圈數(shù)量、最大可讀/可寫寄存器數(shù)量及各種錯誤碼常量,并提供串口設置模式、modbus-tcp環(huán)境、釋放modbus環(huán)境、設置從站ID、讀寫數(shù)據(jù)等一系列MODBUS_API的聲明。modbus-version.h是modbus類庫的版本信息。
完整的Modbus指令支持很多功能碼,但一個項目里只用到其中的一部分功能碼,因此本文實現(xiàn)的上位機包含讀保持寄存器、寫單個保持寄存器這2個指令。
首先要檢測讀取的寄存器數(shù)量是否在允許范圍內,之后再對查詢幀報文進行預處理以實現(xiàn)查詢幀的構造,發(fā)送報文。對接收到的報文進行數(shù)據(jù)完整性檢測,比較從設備地址,并進行CRC計算比較。數(shù)據(jù)完整性檢測完畢之后,得到的才是各個寄存器的值。本機將查詢幀報文預處理、查詢幀構造、數(shù)據(jù)完整性檢測、CRC校驗這些功能分別封裝成函數(shù)。讀指令由modbus_read_registers(modbus_t *ctx, int addr, int nb, uint16_t*dest)利用函數(shù)調用的思想實現(xiàn)。流程圖如圖6所示。
圖6 讀指令流程圖
首先創(chuàng)建相對應的Modbus-RTU環(huán)境。在讀指令操作中,查詢幀報文預處理、查詢幀構造、數(shù)據(jù)完整性檢測、CRC校驗這些功能分別封裝成函數(shù)。同以上讀指令一樣,利用函數(shù)調用的思想,由modbus_write_registers(modbus_t*ctx, int addr, int nb, const uint16_t*data)函數(shù)實現(xiàn)寫指令的操作。寫指令模塊運行流程圖如圖7所示。
圖7 寫指令流程圖
編寫好的上位機(圖8)先在實驗室利用虛擬串口軟件VSPD進行測試,可以正確讀寫寄存器。而后在2019年11月,于青島中苑碼頭岸基實驗站進行測試。本機物理端口為COM3,因此串口設置為COM3,波特率設為19 200,校驗位設為無,數(shù)據(jù)位設為8,停止位設為1。將傳感器固定在船體側面,處于船舶吃水線變動范圍內,分別采集海水表層溫度、水下1 m處的溫度、水下2 m處的溫度及氣溫。采集的溫度數(shù)據(jù)由Matlab處理如圖9所示。
圖8 軟件界面
由圖9可知,冬季青島岸基實驗站附近的海水,氣溫要比表層水溫高3 ℃左右,表層水溫相差不多,水下1 m處的水溫基本穩(wěn)定在18.62 ℃,水下2 m處的水溫基本穩(wěn)定在18.60 ℃。溫度鏈與水溫精度為0.05、電導率0.05 mS/cm的亞力克溫鹽傳感器同時測量海水表層溫度,其最大標準差約為0.1 ℃。誤差分析如圖10所示。
圖9 溫度曲線圖
圖10 誤差分析
本文設計的上位機經(jīng)測試,各項功能正常,運行穩(wěn)定,操作簡單方便,并具有可移植性和可擴展性。該設計可以在計算機上實現(xiàn)Modbus-RTU遠程監(jiān)測,并擴展了Modbus-TCP模塊,設計了任務欄托盤功能,實現(xiàn)了用戶可視化,方便了用戶的操作與使用。為了能夠在沒有安裝VS的計算機上使用,可以生成Release版本。
海洋表層水溫是研究海氣間水汽交換、了解海區(qū)水文及水質狀況的重要參數(shù)[7],是海洋科學研究、海洋環(huán)境監(jiān)測、海上交通安全、國防軍事建設的重要參考依據(jù)[8]?;诖斑M行海水表層水溫自動監(jiān)測,能夠使志愿船自動觀測實現(xiàn)從氣象觀測擴展到水文觀測,增加了觀測要素,對研究、開發(fā)和利用海洋都具有重要意義。