劉 勇,楊 娟,王運圣,徐識溥,鄭秀國
(上海市農(nóng)業(yè)科學(xué)院農(nóng)業(yè)科技信息研究所,上海數(shù)字農(nóng)業(yè)工程與技術(shù)研究中心,上海 201403)
根據(jù)國際電信聯(lián)盟的定義,物聯(lián)網(wǎng)的完整結(jié)構(gòu)應(yīng)該包含3 個層次,由上往下依次為:應(yīng)用層、傳輸層和感知層[1]。 感知層是整個物聯(lián)網(wǎng)系統(tǒng)的基礎(chǔ),其主要功能是通過各種傳感器獲取聯(lián)網(wǎng)對象的各種有用信息。 物聯(lián)網(wǎng)在農(nóng)業(yè)上的應(yīng)用稱為農(nóng)業(yè)物聯(lián)網(wǎng),目前比較普遍的農(nóng)業(yè)物聯(lián)網(wǎng)應(yīng)用形式為農(nóng)業(yè)生產(chǎn)環(huán)境的實時監(jiān)測,如空氣溫濕度、土壤溫濕度、光照度、二氧化碳濃度等。 其中,土壤作為農(nóng)業(yè)生產(chǎn)重要的物質(zhì)基礎(chǔ),是灌溉水的主要作用對象,對其濕度進行監(jiān)測具有重要意義。
我國是一個農(nóng)業(yè)大國,農(nóng)業(yè)生產(chǎn)離不開水,根據(jù)水利部發(fā)布的《2019 年中國水資源公報》顯示,2019年全國的用水總量是6 021.2 億m3,其中農(nóng)業(yè)用水量為3 682.3 億m3,占比61.2%,超過用水總量的一半[2]。 如此高的占比除了因為農(nóng)業(yè)規(guī)模大之外,還有一個重要因素就是農(nóng)田灌溉水有效利用系數(shù)低,僅為0.559,即每1 m3農(nóng)業(yè)用水中僅有0.559 m3被農(nóng)作物吸收利用,遠低于發(fā)達國家水平。 研究表明,適量的灌溉不僅可以節(jié)水,還能提高作物的品質(zhì)[3]。 因此,近年來農(nóng)業(yè)科技人員提出了精準(zhǔn)灌溉的概念,根據(jù)土壤濕度的變化情況做出有效評估,從而采取合理的應(yīng)對措施,做到適量灌溉和節(jié)水灌溉。 這就需要實時掌握土壤含水量信息,而土壤濕度傳感器正是準(zhǔn)確、快速獲取土壤濕度信息的有效工具。
目前,土壤濕度的測量方法有很多,如張力計法、電阻法、中子法、γ-射線法、駐波比法、光學(xué)測量法、時域反射法(TDR)、頻域反射法(FDR)等[4],各個傳感器廠家會選擇合適的方法研制自己的傳感器。 本研究選取傳感器的原則是該傳感器能夠作為一個感知終端直接接入農(nóng)業(yè)物聯(lián)網(wǎng)的感知層,因此通信協(xié)議不開放的、只能與廠家自己的數(shù)據(jù)采集設(shè)備通信的傳感器不在考慮之列。 基于此原則,最終選擇了目前市面上12 種國內(nèi)外土壤濕度傳感器作為研究對象,對其通信協(xié)議進行對比研究,并編程實現(xiàn)各自接入農(nóng)業(yè)物聯(lián)網(wǎng)的感知層。
通信協(xié)議是指雙方為完成通信或服務(wù)所必須遵循的規(guī)則和約定,也是它們之間必須具有的共同語言。 狹義的通信協(xié)議一般包含語法、語義和時序3 個要素,本研究將通信雙方的接口類型、工作電平等硬件要素也歸為通信協(xié)議的范疇進行研究。 因此,本研究將所選的12 種土壤濕度傳感器按照通信接口的類型分為3 類:RS485 接口、SDI-12 接口以及模擬接口。
圖1 485 接口傳感器實物Fig.1 485 interface sensor in kind
RS485 是一種半雙工的總線式通信接口電氣特性標(biāo)準(zhǔn),它利用2 根信號線上電壓的差值進行信息傳輸,使用一主多從的通信方式,可支持上百個設(shè)備接入同一個總線上進行通信。 每個設(shè)備依靠自己獨有的地址進行區(qū)分,具有通信距離遠、抗干擾能力強的特點[5-6]。 本研究在進行傳感器選型時發(fā)現(xiàn),RS485 接口是國內(nèi)土壤濕度傳感器的主流,國外很少提供這種接口,最終選定的4 款傳感器實物如圖1 所示。
1.1.1 國外485 傳感器
圖1 中的1 號傳感器為德國UGT 公司的SMT-100,可測量土壤溫度、土壤體積含水量和工作電壓,目前市面的土壤濕度傳感器多基于TDR 或FDR 原理[7-9],SMT-100 結(jié)合了低成本FDR 傳感器系統(tǒng)的優(yōu)點和TDR 系統(tǒng)的精度,利用環(huán)形振蕩器將信號的傳播時間轉(zhuǎn)換成測量頻率獲得土壤介電常數(shù)繼而轉(zhuǎn)化為土壤含水量。 該傳感器不使用金屬探針,而是使用葉片形狀的PCB 板,便于安裝。
在本研究調(diào)研的眾多國外傳感器中,SMT-100 是為數(shù)不多的提供RS485 接口的一款傳感器。 其4 芯線纜中棕色和白色為電源和地線,支持4—24 V 供電,綠色和黃色線分別為RS485A 和RS485B,以固定的波特率9 600 Bd 進行通信。 但其與國內(nèi)傳感器使用Modbus RTU 協(xié)議不同,而是使用了一種自定義的通信協(xié)議。 該協(xié)議的通信報文以ASCII 碼進行傳輸,每條報文以0x0D(∕r)結(jié)束。 這種協(xié)議也是由主機發(fā)送讀取命令,從機根據(jù)地址進行應(yīng)答,但從機地址不是一個傳感器一個地址,而是給一個傳感器中的每個測量參數(shù)都分配一個地址。 這就要求多個傳感器處于一個總線上時對每個測量參數(shù)進行單獨編址并保證沒有重復(fù),需要占用較大的地址空間。 采集器每次讀取土壤濕度數(shù)據(jù)時先發(fā)送“OP1∕r”(土壤濕度參數(shù)的默認地址為1),等傳感器返回正確應(yīng)答“OK∕r”之后,再發(fā)送獲取數(shù)據(jù)命令“GN∕r”,傳感器返回“036374∕r”,其中字符串“036374”為傳感器輸出值,即數(shù)字36 374,與土壤濕度具有如下對應(yīng)關(guān)系:傳感器輸出值=土壤濕度值?100 +32 768。 將返回值36 374 帶入公式即可算出土壤體積含水量為36.06%,讀數(shù)程序的流程如圖2 所示。
圖2 SMT-100 讀數(shù)程序流程Fig.2 Flow of SMT-100 reading program
讀取溫度或電壓等其他參數(shù)的流程與此流程類似,其中溫度參數(shù)的默認地址為2,即讀數(shù)時要先發(fā)送“OP2∕r”,電壓參數(shù)的默認地址是3。 此外,當(dāng)總線上接入多個傳感器時,需要對參數(shù)地址進行修改,通信協(xié)議提供了“AD”命令用于修改地址,如將土壤濕度參數(shù)的地址由默認的1 改為99,則發(fā)送命令“AD1 99∕r”,但實測直接發(fā)送該命令傳感器無響應(yīng),正確的操作是先按照原地址發(fā)送“OP1∕r”收到返回后再發(fā)送改地址命令,傳感器才會將地址改為新地址。
1.1.2 國內(nèi)485 傳感器
本研究選取的3 款國內(nèi)485 傳感器分別是圖1 中的2 號傳感器(星儀公司CSF11)、3 號傳感器(哲勤公司MS10)和4 號傳感器(哲勤公司MS20)。 3 款傳感器均在485 接口之上遵循Modbus RTU 通信協(xié)議,該協(xié)議的數(shù)據(jù)格式如表1 所示。 Modbus 作為一種工業(yè)領(lǐng)域通信協(xié)議的業(yè)界標(biāo)準(zhǔn),目前已在工農(nóng)業(yè)生產(chǎn)的諸多方面進行了應(yīng)用[10-12]。 該協(xié)議是一種串行通信協(xié)議,目前存在著Modbus ASCII 和Modbus RTU 兩個變種,前者使用ASCII 碼表示數(shù)據(jù),后者使用二進制表示數(shù)據(jù),同樣的數(shù)據(jù)長度,后者可以表示更多的信息。
表1 Modbus RTU 協(xié)議格式說明Table 1 Modbus RTU protocol format description
該協(xié)議通信數(shù)據(jù)幀包含設(shè)備地址、功能碼、數(shù)據(jù)地址、數(shù)據(jù)長度、CRC 校驗等組成部分。 與1.1 節(jié)所述的私有協(xié)議相比,其編址方法是對傳感器個體進行編址,具體的傳感器測量參數(shù)是通過數(shù)據(jù)地址進行區(qū)分的,并增加了功能碼的概念,用功能碼來區(qū)分數(shù)據(jù)讀取和地址修改等命令,使得各種命令的格式能夠統(tǒng)一。 另外,還增加了CRC 校驗,以檢測數(shù)據(jù)傳輸時是否發(fā)生錯誤,讀數(shù)流程如圖3 所示。
由圖3 可見,該流程明顯比圖2 的流程簡單,讀一個參數(shù)只需和傳感器進行一次交互,甚至讀多個參數(shù)也可以只進行一次交互,可節(jié)省時間和減少通信出錯的概率。 唯一的缺點是通信數(shù)據(jù)包稍長,但并無太大影響。
圖3 Modbus RTU 協(xié)議讀數(shù)程序流程Fig.3 Flow of Modbus RTU protocol reading program
1.2.1 SDI-12 協(xié)議簡介
SDI-12(Serial Digital Interface with 1200 baud)是一種傳感器與數(shù)據(jù)采集設(shè)備之間的接口標(biāo)準(zhǔn),是以1 200 Bd 波特率進行通信的串行數(shù)字接口。 這種標(biāo)準(zhǔn)既定義了接口的電氣特性,也規(guī)定了上層數(shù)據(jù)的通信協(xié)議,適用于電池供電的低成本設(shè)備,且在單根線纜上可接入多個傳感器[13],SDI-12 的總線結(jié)構(gòu)如圖4 所示。 SDI-12 接口誕生于國外,主要應(yīng)用在水文研究上,目前國內(nèi)也出現(xiàn)了一些應(yīng)用[14-15]。 本次選型發(fā)現(xiàn),國外常用的高端土壤濕度傳感器大多是SDI-12 接口的,國內(nèi)只有少數(shù)幾款提供了該接口且價錢偏高,最終選擇4 款SDI-12 接口傳感器(圖5)。
圖4 SDI-12 總線結(jié)構(gòu)Fig.4 SDI-12 Bus structure
圖5 SDI-12 接口傳感器實物Fig.5 SDI-12 interface sensor in kind
圖5 中的1 號傳感器為美國METER 公司(原Decagon 公司)的5TE,該傳感器接受3.6—15 V 直流供電,可測量出土壤介電常數(shù)(可換算為體積含水量)、土壤溫度和土壤EC 值;2 號傳感器為美國STEVENS公司的HydraProbe Lite,接受9—20 V 直流供電,可直接測量出土壤體積含水量,并且提供土壤介電常數(shù)和土壤溫度值;3 號傳感器是美國Campbell Scientific 公司的CS650,該傳感器為6—18 V 直流供電,可直接測量出土壤體積含水量、介電常數(shù)和溫度;4 號傳感器為國產(chǎn)的一款SDI-12 接口傳感器,型號為MT-10,3.6—16 V 直流供電,可測量出介電常數(shù)和溫度,土壤濕度值需根據(jù)公式換算。
1.2.2 SDI-12 協(xié)議數(shù)據(jù)采集流程
由于SDI-12 規(guī)定了通信接口的底層電氣特性和上層數(shù)據(jù)格式,所以這4 款傳感器可以接在一個串口上使用同一套程序讀取數(shù)據(jù),區(qū)別在于不同傳感器有不同的地址,且返回測量值的轉(zhuǎn)換和解析方式不同,讀數(shù)流程如圖6 所示。 由讀數(shù)流程可見,每次數(shù)據(jù)采集都需要和傳感器進行2 次交互,第一次交互為發(fā)送“aM!”命令,告訴傳感器開始測量,命令中的字符a 為傳感器地址,應(yīng)保證總線上每個傳感器的地址都是唯一的;傳感器收到之后返回“a0023”告訴主機等待2 s 之后傳感器可測量出3 個數(shù)值,主機等待2 s 之后再發(fā)送獲取測量值命令“aD0!”,傳感器收到后返回測量值,以5TE 為例,其返回數(shù)據(jù)為“a+1.12 +0.00 +27.0”,地址a 之后的數(shù)據(jù)依次為介電常數(shù)、電導(dǎo)率和溫度,至此一次數(shù)據(jù)采集過程完成。 測量時使用的所有通信命令均為ASCII 碼,且所有命令都以回車換行符(
圖6 SDI-12 協(xié)議讀數(shù)程序流程Fig.6 Flow of SDI-12 protocol reading program
數(shù)據(jù)采集到之后,HydraProbe Lite 和CS650 兩款傳感器可直接獲取土壤的濕度數(shù)據(jù),只需從返回的數(shù)據(jù)包中提取即可。 而5TE 和MT-10 的返回數(shù)據(jù)中并沒有直接的土壤濕度數(shù)據(jù),需要先提取出土壤介電常數(shù)數(shù)據(jù),再根據(jù)廠家提供的公式進行換算才能得到相應(yīng)的體積含水量。 需要指出的是,4 款SDI-12 接口的傳感器均能測量出土壤的介電常數(shù),并且都提供了針對不同土壤類型的換算公式,因此可以得到較為準(zhǔn)確的土壤濕度值。 SDI-12 協(xié)議使用單線總線和ASCII 碼進行數(shù)據(jù)傳輸,并且每次數(shù)據(jù)采集都要和傳感器進行兩次數(shù)據(jù)交互,這和Modbus RTU 協(xié)議相比是沒有優(yōu)勢的。
模擬信號是指用連續(xù)變化的物理量所表達的信息,如溫度、濕度、壓力、長度、電流、電壓等物理量。計算機要對其進行處理首先必須進行數(shù)字化,也就是進行模數(shù)轉(zhuǎn)換,模數(shù)轉(zhuǎn)換有很多種方式[16-18],本研究使用的是控制器STM32ZET6 自帶的ADC 模塊實現(xiàn)模數(shù)轉(zhuǎn)換。 本研究選擇的4 款模擬接口的傳感器輸出的均為電壓信號,這個電壓信號隨土壤含水量的變化而變化,可以根據(jù)相應(yīng)的公式轉(zhuǎn)換為土壤濕度值。
圖7 為本研究選取的4 款模擬信號傳感器的實物圖,其中1 號傳感器為美國METER 公司的EC-5;2號傳感器為英國delta-t 公司的SM150T;3 號傳感器為澳大利亞ICT 公司的MP406;4 號傳感器為濟南海庫物聯(lián)網(wǎng)科技有限公司的HKSHC03S。 如表2 所示,4 款傳感器的輸出信號均為電壓,所以數(shù)據(jù)采集程序比較簡單。 首先進行AD 轉(zhuǎn)換,將傳感器輸出的模擬電壓信號轉(zhuǎn)換為數(shù)字值,再根據(jù)數(shù)字電壓值和傳感器提供的換算方法得到最終的土壤濕度值。 具體的轉(zhuǎn)換方法各個傳感器廠家都有提供,圖8 為MP406 輸出電壓與相應(yīng)濕度的對照,每次測量一個電壓值后通過查表法即可得到濕度值。 圖7 中的3 號和4 號傳感器支持查表法,查表法是一種簡單的數(shù)值映射方法,很多中間值需要估算,所以測量不精確。 更精確的轉(zhuǎn)換方法是公式換算,三款國外模擬接口傳感器均提供有換算公式,且根據(jù)不同土壤類型提供了不同的換算方法。
圖7 模擬接口傳感器實物Fig.7 Analog interface sensor in kind
圖8 MP406 輸出電壓與土壤濕度的對應(yīng)關(guān)系Fig.8 Relationship between MP406 output voltage and soil moisture
表2 模擬接口傳感器參數(shù)統(tǒng)計Table 2 Analog interface sensor parameter statistics
硬件平臺是農(nóng)業(yè)物聯(lián)網(wǎng)傳輸層與感知層的接口,負責(zé)從感知層獲取信息并將其發(fā)送給傳輸層。 本研究搭建的硬件平臺以意法半導(dǎo)體公司的一款微控制器STM32ZET6 為核心,該微控制器采用LQFP144 封裝,有512k flash、64k RAM、5 個串口、21 個ADC 通道、112 個IO 口,具有足夠快的運行速度、足夠大的程序和數(shù)據(jù)存儲空間、足夠多的硬件接口來滿足多個傳感器的接入要求。 硬件平臺的結(jié)構(gòu)如圖9 所示,SDI-12 接口和RS485 接口都屬于數(shù)字接口,二者和主控通信都是雙向的,且均需相關(guān)的電平轉(zhuǎn)換模塊;模擬接口傳感器通信是單向的,信號只從傳感器到主控,主控將傳感器模擬信號數(shù)字化后轉(zhuǎn)化為相應(yīng)的土壤濕度值;另外,硬件平臺還實現(xiàn)了數(shù)據(jù)的本地存儲和遠程傳輸功能,并配置了UPS 電源和電壓監(jiān)測模塊,以保證供電的長期穩(wěn)定性。
圖9 硬件平臺結(jié)構(gòu)Fig.9 Hardware platform structure
硬件平臺搭建完成后將設(shè)備布設(shè)在位于上海市閔行區(qū)的某蔬菜種植基地,以30 min 一次的頻率進行土壤濕度數(shù)據(jù)的持續(xù)采集,采集到的數(shù)據(jù)實時保存至云服務(wù)器中,圖10 為保存的部分數(shù)據(jù)。 圖10 中數(shù)據(jù)包含采集器編號(C0088)、采集時間、采集器電壓值以及各個傳感器的具體數(shù)據(jù)。 采集器下共接入了12 個傳感器,編號為WS1—WS12,其中WS1—WS4 為485 接口傳感器、WS5—WS8 為SDI-12 接口傳感器、WS9—WS12 為模擬接口傳感器。 每個編號后面的數(shù)據(jù)依次為土壤溫度值和土壤濕度值,圖中的“------”表示該傳感器僅能測量濕度,不支持溫度測量。
圖10 采集數(shù)據(jù)截圖Fig.10 Screenshot of collected data
本研究以土壤濕度傳感器接入農(nóng)業(yè)物聯(lián)網(wǎng)感知層為目的,選取了國內(nèi)外常見的12 種土壤濕度傳感器,對其通信接口和通信協(xié)議進行研究,并編程實現(xiàn)對了對所選全部傳感器數(shù)據(jù)的物聯(lián)網(wǎng)遠程采集。 本研究將所選取的12 種國內(nèi)外土壤濕度傳感器按接口類型分為RS485 接口、SDI-12 接口和模擬接口三大類,分別對這3 類接口進行了信號采集和通信協(xié)議研究,并以STM32 微控制器為硬件平臺按照各自的通信協(xié)議編程實現(xiàn)了對這3 類接口傳感器的數(shù)據(jù)采集和轉(zhuǎn)化,獲取到了相應(yīng)的土壤濕度數(shù)據(jù)。
3.1 目前土壤濕度傳感器中數(shù)字接口與模擬接口并存,模擬接口的傳感器以電壓輸出和電流輸出為主流,最終要進行模數(shù)轉(zhuǎn)換才能獲取濕度值;數(shù)字接口中RS485 與SDI-12 接口占主流;對比研究發(fā)現(xiàn),國內(nèi)傳感器以Modbus 協(xié)議為主流,國外傳感器多使用SDI-12 協(xié)議,而模擬接口是一種國內(nèi)外廠商都保留的接口類型。
3.2 數(shù)字接口的通信協(xié)議中有的既定義了物理層的電氣特性又定義了傳輸層的數(shù)據(jù)格式,如SDI-12;而有的只定義了物理層的電氣特性,傳輸層的數(shù)據(jù)格式可選用其他通信協(xié)議,如RS485 接口,既可以使用Modbus RTU 協(xié)議也可以使用Modbus ASCII 協(xié)議,甚至也可以自定義一套私有協(xié)議。 但從協(xié)議通用性角度來看,私有協(xié)議沒有優(yōu)勢且使用不便,如本研究1.1 節(jié)介紹的SMT-100 傳感器。 通用協(xié)議中主流的是SDI-12 和RS485 +Modbus RTU,前者在硬件連接上只需3 根線纜,比后者少一根略有優(yōu)勢,但在數(shù)據(jù)傳輸格式上,前者使用ASCII 碼,同樣長度數(shù)據(jù)包所攜帶的信息量遠不如后者所使用的二進制方式。 因為ASCII 碼的主要優(yōu)勢是便于計算機顯示,但在物聯(lián)網(wǎng)感知層數(shù)據(jù)的處理過程不需要顯示給用戶,所以傳輸效率應(yīng)該是首要考慮的因素;其次,SDI-12 協(xié)議每一次讀數(shù)都需要與傳感器進行2 次交互,且交互過程中需要主機根據(jù)從機返回狀態(tài)進行不定時長的等待,這無疑會增加讀數(shù)失敗的概率。 而RS485 +Modbus RTU 協(xié)議只需執(zhí)行一次交互即可讀出一個或多個測量數(shù)據(jù);最后,SDI-12 在通信時沒有進行校驗,數(shù)據(jù)傳輸出錯時無法被發(fā)現(xiàn)。 所以,對于物聯(lián)網(wǎng)感知層的多傳感器大規(guī)模應(yīng)用而言,RS485 +Modbus RTU 無疑是目前最好的選擇。
3.3 模擬接口作為一種最原始的接口,在土壤濕度傳感器上仍被諸多廠家所保留。 這種接口獲取土壤濕度值需要先進行AD 轉(zhuǎn)換,之后再根據(jù)查表法或復(fù)雜的換算公式才能得到具體的土壤濕度值,其測量數(shù)據(jù)的準(zhǔn)確性取決于廠商提供的校準(zhǔn)公式,數(shù)據(jù)轉(zhuǎn)換過程通常較為復(fù)雜,所以這類傳感器只適用于PLC 或者其他現(xiàn)場灌溉控制器,不適用于作為物聯(lián)網(wǎng)的感知層設(shè)備進行遠程監(jiān)測。