鄭貴林, 張 天
(武漢大學動力與機械學院,湖北武漢 430072)
農業物聯網是指通過農業信息感知設備,按照約定協議,把農業系統中動植物生命體、環境要素、生產工具等物理部件和各種虛擬“物件”與互聯網連接起來,進行信息交換和通信,以實現對農業對象和過程智能化識別、定位、跟蹤、監控和管理的一種網絡[1]。
物聯網技術與農業生產、經營、管理、服務全產業鏈的深度融合,對改造傳統農業、提升農業現代化水平具有重要意義[2]。農業物聯網能實時監控生產條件,高效管理生產過程,科學控制生產成本,是未來農業的發展方向。目前,世界范圍內農業物聯網技術研究廣泛且深入,但應用上總體處于試驗示范階段[3]。農業物聯網的具體應用主要集中在溫室大棚、果園等設施的土壤溫濕度和作物生長環境信息[4]、作物本體信息[5]的采集和少量畜牧養殖相關參數的采集以及農業節水灌溉[6]方面。
本研究設計的信息采集系統實現了對農場環境水質、氣象、土壤等信息的在線高精度測量與實時采集,提供了豐富的數據展示與對比功能,指導了農業生產,同時,用戶可以通過iOS(由蘋果公司開發的移動操作系統)設備查看農業生產信息,具有很大的便捷性。
系統由3大部分組成圖1,分別是信息感知層、信息傳輸層、信息應用層。感知層測量現場的環境參數,通過傳輸層匯聚打包發送給應用層,應用層對現場數據進行分析處理,反饋于農業生產。
感知層是農業物聯網的核心部分,感知層實現了對農業生產信息的獲取[7]。信息感知層通過多種傳感器測量現場環境參數,本系統感知的信息主要包括水質(pH值、電導率、溶解氧含量、水位、水溫)、降水量、空氣PM2.5(細顆粒物)、CO2濃度、土壤情況(溫度、濕度、pH值、養分)、氣象5要素(風向、風速、大氣溫度、濕度、壓力),實現了農業生產信息的全方位感知。
感知層采用太陽能電池和蓄電池不間斷電源(uninterruptible power system,簡稱UPS)切換方法,解決了傳感器野外供電問題。傳感器采用RS485的方式組網,組網方式簡單,適應野外惡劣環境。
感知層在獲取現場的環境信息后,通過傳輸層匯聚,并傳輸給應用層。本系統的傳輸層主要由數據采集終端(remote terminal unit,簡稱RTU)及集成在RTU上的數據傳輸單元(data transfer unit,簡稱DTU)等組成。傳感器節點通過RS485總線和RTU連接,RTU定時采集傳感器數據,打包后通過DTU發送給采集服務器。
GPRS(通用分組無線服務)組網傳輸速率可觀和費用低、可靠性高、實時性強、監控范圍廣、傳輸功率小,適合野外供電環境,故本系統采用GPRS/GSM(全球移動通信系統)作為現場站點的組網信道,DTU通過GPRS網絡和服務端進行連接。
在采集站斷網(GPRS連接異常,服務器連接異常等)的情況下,RTU依然能進行采集,并將數據存儲在本地的固體存儲器中;網絡正常后,采集服務端根據斷網時間召回缺失數據,保證了數據的完整性和連續性。
信息應用層主要由服務端采集程序、數據庫、移動客戶端、瀏覽器等組成。信息應用層實現了對農場數據的存儲、顯示、查詢等功能。服務端采集程序解析處理由信息傳輸層上傳的數據,并將數據存儲在數據庫中,用戶通過移動客戶端和瀏覽器可以查看農場的環境參數,根據監測到的數據,實現對農作物的精細化管理。

采集服務器使用workerman框架進行開發。workerman是一個高性能的PHP socket(PHP指超文本預處理器)服務器框架。workerman的目標是讓PHP開發者更容易地開發出基于socket的高性能的應用服務,而不用去了解PHP socket以及PHP多進程細節。workerman本身是一個PHP多進程服務器框架,具有PHP進程管理以及socket通信的模塊,所以不依賴于php-fpm、nginx或者apache等容器便可以獨立運行[8]。
采集服務器實現了和現場RTU的通信,采集數據并解析數據包存入數據庫中。RTU和服務器之間保持TCP(傳輸控制協議)長連接,利用心跳的方式確保連接的有效性,RTU在斷線后將自動進行重連,確保連接的有效性。現場通信異?;謴秃?,采集服務器根據RTU的斷線時間召回掉線時間的數據,確保了數據的連續性。
服務器采用多進程的方式和RTU進行通信,服務端數據包處理流程見圖2程序在啟動時,根據數據庫中RTU設備數量開啟進程,1個進程用來處理通用業務流程,其余的進程分別綁定了相應的RTU,處理相應的RTU數據。不同RTU的數據在不同進程上處理,確保了并發時不會因為處理時間過長導致進程阻塞。
程序啟動后,開始監聽客戶端的接入,連接處理流程見圖3數據庫中事先添加了RTU設備信息,客戶端上線后,更新設備狀態,根據設備離線的時間段向RTU發送召回數據命令。接收到數據后,根據數據的包頭信息區分數據類型,數據包頭主要包含RTU設備數據包頭、實時數據包頭、斷線數據包頭等, 根據包頭解析數據并將解析結果存入數據庫。服務端向外部發布Web服務,客戶端可以調用相關接口訪問數據庫數據。

iOS客戶端軟件使用Objective-C語言在Xcode開發平臺下開發[9]。iOS客戶端實現了信息采集站的監控。
iOS客戶端采用模型-視圖-控制器(model- view- controller,簡稱MVC)設計模式(圖4),MVC模型分離了程序的表現、控制和數據,具有重用性高、耦合性低、可擴展、可維護等優勢[10]。模型部分主要負責數據交互,分為網絡請求模塊和數據持久化模塊,網絡請求模塊負責與云端交互,調用服務端接口請求數據或上傳數據,數據持久化模塊主要用來存儲賬號信息、保存草稿等;視圖部分用來展示客戶端界面,包含系統視圖和自定義視圖;模型和視圖之間不能直接通信,由控制器協調模型和視圖,根據業務邏輯把模型數據顯示到視圖上,同時,將用戶在視圖上操作事件的數據傳遞給模型。


iOS客戶端的工作流程見圖5。程序啟動后,首先驗證登錄狀態,在token(令牌)非空并且未過期的情況下直接進入首頁,否則就進入登錄界面。用戶在使用賬號密碼登錄后,服務器會根據賬號信息生成1個token字符串,同時設置token的生命周期,登錄成功后客戶端把token存儲在本地??蛻舳苏埱髷祿r須帶token參數,從而保證了接口的安全性。登錄成功后,用戶可以查看客戶端所有功能模塊。
iOS客戶端主要包含實時數據、歷史數據、歷史曲線對比、天氣預報、地圖管理等功能模塊。實時數據模塊展示了各個站點的傳感器的實時數據;歷史數據模塊展示了傳感器每天、每周、每月的數據信息,通過圖表和數據列表的形式展現出來;歷史曲線對比模塊可以根據用戶的需求查詢不同傳感器某個時間段的歷史數據,并將歷史數據繪制到同一張圖表中展示傳感器數據之間的關系;天氣預報模塊展示了站點的天氣信息,根據RTU的位置信息,調用第三方天氣接口服務,預報該站點的天氣;地圖管理模塊直觀地在地圖上展示了各個站點的位置信息,并提供了距離測量、導航等相關功能。
在網絡操作中,服務器返回的數據格式一般采用XML(可擴展標記語言)解析和JSON(JavaScript對象表示法)解析方式。XML文件龐大、格式復雜、傳輸帶寬大,但是其格式統一、符合標準,與其他系統進行遠程交互、數據共享容易。JSON格式簡單、占用帶寬小,直接通過鍵值解析數據。對于數據較少的解析一般采用JSON解析,對于大規模數據一般采用XML解析[11]。本系統iOS客戶端所涉及的數據量相對較小,格式簡單,因此選擇JSON格式進行數據傳輸。

iOS客戶端通過webservice方式與服務端進行通信,使用JSON格式進行數據交互。為了減少網絡通信的開銷,可以進行本地緩存。由于歷史數據不會發生變化,請求成功后,將歷史數據存儲到本地緩存中,下次請求時首先判斷緩存中是否有歷史數據,如果有就可以直接從緩存中加載。對于實時數據,仍然需要向服務端請求最新數據。
iOS客戶端采用同步阻塞請求的方式調用webservice接口,接口調用過程如下:(1)傳入接口URL(統一資源定位符)和參數;(2)開新線程;(3)同步請求;(4)解析數據并將結果以block方式返回給主線程;(5)將結果顯示在界面上。
界面主要采用Xcode的storyboard設計,同時也通過代碼和xib的方式自定義了一些視圖。界面考慮到了不同iPhone機型及iOS系統的適配,客戶端能在iOS7及以上系統的手機上運行。
良好的人機交互界面,不僅帶來好的用戶體驗,同時也可以大大提高工作效率[12]。客戶端的主要功能是各個站點的實時數據和歷史數據的展示(圖6、圖7)。
系統近2年的運行累積了大量的農業生產數據。下面從降水量、溫度(土壤溫度和大氣溫度)、濕度(土壤濕度和大氣濕度)等環境參數來分析農業生產信息。
由表1可知,該區域在5月到9月降水量較高,同時溫度和濕度均較高,濕度和降水量之間并不是完全的線性關系,濕度相對于降水量有一定的延遲性。綜合上述環境參數,農業生產者可以根據農作物的生長特點選擇適合當地環境的農作物種植,在濕度較低時灑水增加濕度,在溫度較低時選擇大棚種植方式保持合適的生長溫度,同時根據各個環境參數的變化規律事先作出生產決策。通過對農場生產環境的監測,有效反饋農業生產。



表1 2016年高韓站部分環境參數
本系統已成功運用在四川省成都市的10個野外采集站,部分現場設備見圖8,近2年的運行表明,系統運行穩定,實現了對農業生產信息的實時監測與分析,對農業生產有積極的指導作用。
本農業信息采集系統,通過iOS移動設備能隨時隨地查看農田各項環境參數,有效幫助農業生產者掌握農業生產信息,為生產決策提供了數據支持。本系統組網簡單、功耗低、安全性高、運行穩定、便于野外部署,對農業物聯網的推廣有積極的作用,適用于廣大農場、果園等生產環境,有廣闊的市場。
本系統還有一些可以改進的地方。系統中信息感知層采用RS485組網方式,RS485為半雙工通信方式,且傳輸速度不高,采用速度更快的Wi-Fi組網方式,能夠減少現場布線,降低組網復雜度,同時能增加網絡容量。目前Internet網絡層主要使用的是IPv4協議,隨著互聯網本身的快速發展,IPv4的地址已經日漸匱乏,從目前的地址消耗速度來看,IPv4地址空間已經很難再滿足物聯網對網絡地址的龐大需求。下一代網絡協議IPv6采用了長度為128位的IP(網絡協議)地址,徹底解決了IPv4地址不足的難題,將IPv6技術運用到感知層傳感器組網中,對于提高網絡容量、增加網絡安全性、方便網絡管理等方面有積極的意義。
