国内外土壤湿度传感器通信协议对比研究
2022-06-30王运圣徐识溥郑秀国
刘 勇,杨 娟,王运圣,徐识溥,郑秀国
(上海市农业科学院农业科技信息研究所,上海数字农业工程与技术研究中心,上海 201403)
根据国际电信联盟的定义,物联网的完整结构应该包含3 个层次,由上往下依次为:应用层、传输层和感知层[1]。 感知层是整个物联网系统的基础,其主要功能是通过各种传感器获取联网对象的各种有用信息。 物联网在农业上的应用称为农业物联网,目前比较普遍的农业物联网应用形式为农业生产环境的实时监测,如空气温湿度、土壤温湿度、光照度、二氧化碳浓度等。 其中,土壤作为农业生产重要的物质基础,是灌溉水的主要作用对象,对其湿度进行监测具有重要意义。
我国是一个农业大国,农业生产离不开水,根据水利部发布的《2019 年中国水资源公报》显示,2019年全国的用水总量是6 021.2 亿m3,其中农业用水量为3 682.3 亿m3,占比61.2%,超过用水总量的一半[2]。 如此高的占比除了因为农业规模大之外,还有一个重要因素就是农田灌溉水有效利用系数低,仅为0.559,即每1 m3农业用水中仅有0.559 m3被农作物吸收利用,远低于发达国家水平。 研究表明,适量的灌溉不仅可以节水,还能提高作物的品质[3]。 因此,近年来农业科技人员提出了精准灌溉的概念,根据土壤湿度的变化情况做出有效评估,从而采取合理的应对措施,做到适量灌溉和节水灌溉。 这就需要实时掌握土壤含水量信息,而土壤湿度传感器正是准确、快速获取土壤湿度信息的有效工具。
目前,土壤湿度的测量方法有很多,如张力计法、电阻法、中子法、γ-射线法、驻波比法、光学测量法、时域反射法(TDR)、频域反射法(FDR)等[4],各个传感器厂家会选择合适的方法研制自己的传感器。 本研究选取传感器的原则是该传感器能够作为一个感知终端直接接入农业物联网的感知层,因此通信协议不开放的、只能与厂家自己的数据采集设备通信的传感器不在考虑之列。 基于此原则,最终选择了目前市面上12 种国内外土壤湿度传感器作为研究对象,对其通信协议进行对比研究,并编程实现各自接入农业物联网的感知层。
1 不同接口传感器对比研究
通信协议是指双方为完成通信或服务所必须遵循的规则和约定,也是它们之间必须具有的共同语言。 狭义的通信协议一般包含语法、语义和时序3 个要素,本研究将通信双方的接口类型、工作电平等硬件要素也归为通信协议的范畴进行研究。 因此,本研究将所选的12 种土壤湿度传感器按照通信接口的类型分为3 类:RS485 接口、SDI-12 接口以及模拟接口。
图1 485 接口传感器实物Fig.1 485 interface sensor in kind
1.1 RS485 接口传感器
RS485 是一种半双工的总线式通信接口电气特性标准,它利用2 根信号线上电压的差值进行信息传输,使用一主多从的通信方式,可支持上百个设备接入同一个总线上进行通信。 每个设备依靠自己独有的地址进行区分,具有通信距离远、抗干扰能力强的特点[5-6]。 本研究在进行传感器选型时发现,RS485 接口是国内土壤湿度传感器的主流,国外很少提供这种接口,最终选定的4 款传感器实物如图1 所示。
1.1.1 国外485 传感器
图1 中的1 号传感器为德国UGT 公司的SMT-100,可测量土壤温度、土壤体积含水量和工作电压,目前市面的土壤湿度传感器多基于TDR 或FDR 原理[7-9],SMT-100 结合了低成本FDR 传感器系统的优点和TDR 系统的精度,利用环形振荡器将信号的传播时间转换成测量频率获得土壤介电常数继而转化为土壤含水量。 该传感器不使用金属探针,而是使用叶片形状的PCB 板,便于安装。
在本研究调研的众多国外传感器中,SMT-100 是为数不多的提供RS485 接口的一款传感器。 其4 芯线缆中棕色和白色为电源和地线,支持4—24 V 供电,绿色和黄色线分别为RS485A 和RS485B,以固定的波特率9 600 Bd 进行通信。 但其与国内传感器使用Modbus RTU 协议不同,而是使用了一种自定义的通信协议。 该协议的通信报文以ASCII 码进行传输,每条报文以0x0D(∕r)结束。 这种协议也是由主机发送读取命令,从机根据地址进行应答,但从机地址不是一个传感器一个地址,而是给一个传感器中的每个测量参数都分配一个地址。 这就要求多个传感器处于一个总线上时对每个测量参数进行单独编址并保证没有重复,需要占用较大的地址空间。 采集器每次读取土壤湿度数据时先发送“OP1∕r”(土壤湿度参数的默认地址为1),等传感器返回正确应答“OK∕r”之后,再发送获取数据命令“GN∕r”,传感器返回“036374∕r”,其中字符串“036374”为传感器输出值,即数字36 374,与土壤湿度具有如下对应关系:传感器输出值=土壤湿度值∗100 +32 768。 将返回值36 374 带入公式即可算出土壤体积含水量为36.06%,读数程序的流程如图2 所示。
图2 SMT-100 读数程序流程Fig.2 Flow of SMT-100 reading program
读取温度或电压等其他参数的流程与此流程类似,其中温度参数的默认地址为2,即读数时要先发送“OP2∕r”,电压参数的默认地址是3。 此外,当总线上接入多个传感器时,需要对参数地址进行修改,通信协议提供了“AD”命令用于修改地址,如将土壤湿度参数的地址由默认的1 改为99,则发送命令“AD1 99∕r”,但实测直接发送该命令传感器无响应,正确的操作是先按照原地址发送“OP1∕r”收到返回后再发送改地址命令,传感器才会将地址改为新地址。
1.1.2 国内485 传感器
本研究选取的3 款国内485 传感器分别是图1 中的2 号传感器(星仪公司CSF11)、3 号传感器(哲勤公司MS10)和4 号传感器(哲勤公司MS20)。 3 款传感器均在485 接口之上遵循Modbus RTU 通信协议,该协议的数据格式如表1 所示。 Modbus 作为一种工业领域通信协议的业界标准,目前已在工农业生产的诸多方面进行了应用[10-12]。 该协议是一种串行通信协议,目前存在着Modbus ASCII 和Modbus RTU 两个变种,前者使用ASCII 码表示数据,后者使用二进制表示数据,同样的数据长度,后者可以表示更多的信息。
表1 Modbus RTU 协议格式说明Table 1 Modbus RTU protocol format description
该协议通信数据帧包含设备地址、功能码、数据地址、数据长度、CRC 校验等组成部分。 与1.1 节所述的私有协议相比,其编址方法是对传感器个体进行编址,具体的传感器测量参数是通过数据地址进行区分的,并增加了功能码的概念,用功能码来区分数据读取和地址修改等命令,使得各种命令的格式能够统一。 另外,还增加了CRC 校验,以检测数据传输时是否发生错误,读数流程如图3 所示。
由图3 可见,该流程明显比图2 的流程简单,读一个参数只需和传感器进行一次交互,甚至读多个参数也可以只进行一次交互,可节省时间和减少通信出错的概率。 唯一的缺点是通信数据包稍长,但并无太大影响。
图3 Modbus RTU 协议读数程序流程Fig.3 Flow of Modbus RTU protocol reading program
1.2 SDI-12 接口传感器
1.2.1 SDI-12 协议简介
SDI-12(Serial Digital Interface with 1200 baud)是一种传感器与数据采集设备之间的接口标准,是以1 200 Bd 波特率进行通信的串行数字接口。 这种标准既定义了接口的电气特性,也规定了上层数据的通信协议,适用于电池供电的低成本设备,且在单根线缆上可接入多个传感器[13],SDI-12 的总线结构如图4 所示。 SDI-12 接口诞生于国外,主要应用在水文研究上,目前国内也出现了一些应用[14-15]。 本次选型发现,国外常用的高端土壤湿度传感器大多是SDI-12 接口的,国内只有少数几款提供了该接口且价钱偏高,最终选择4 款SDI-12 接口传感器(图5)。
图4 SDI-12 总线结构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 直流供电,可测量出土壤介电常数(可换算为体积含水量)、土壤温度和土壤EC 值;2 号传感器为美国STEVENS公司的HydraProbe Lite,接受9—20 V 直流供电,可直接测量出土壤体积含水量,并且提供土壤介电常数和土壤温度值;3 号传感器是美国Campbell Scientific 公司的CS650,该传感器为6—18 V 直流供电,可直接测量出土壤体积含水量、介电常数和温度;4 号传感器为国产的一款SDI-12 接口传感器,型号为MT-10,3.6—16 V 直流供电,可测量出介电常数和温度,土壤湿度值需根据公式换算。
1.2.2 SDI-12 协议数据采集流程
由于SDI-12 规定了通信接口的底层电气特性和上层数据格式,所以这4 款传感器可以接在一个串口上使用同一套程序读取数据,区别在于不同传感器有不同的地址,且返回测量值的转换和解析方式不同,读数流程如图6 所示。 由读数流程可见,每次数据采集都需要和传感器进行2 次交互,第一次交互为发送“aM!”命令,告诉传感器开始测量,命令中的字符a 为传感器地址,应保证总线上每个传感器的地址都是唯一的;传感器收到之后返回“a0023”告诉主机等待2 s 之后传感器可测量出3 个数值,主机等待2 s 之后再发送获取测量值命令“aD0!”,传感器收到后返回测量值,以5TE 为例,其返回数据为“a+1.12 +0.00 +27.0”,地址a 之后的数据依次为介电常数、电导率和温度,至此一次数据采集过程完成。 测量时使用的所有通信命令均为ASCII 码,且所有命令都以回车换行符(
图6 SDI-12 协议读数程序流程Fig.6 Flow of SDI-12 protocol reading program
数据采集到之后,HydraProbe Lite 和CS650 两款传感器可直接获取土壤的湿度数据,只需从返回的数据包中提取即可。 而5TE 和MT-10 的返回数据中并没有直接的土壤湿度数据,需要先提取出土壤介电常数数据,再根据厂家提供的公式进行换算才能得到相应的体积含水量。 需要指出的是,4 款SDI-12 接口的传感器均能测量出土壤的介电常数,并且都提供了针对不同土壤类型的换算公式,因此可以得到较为准确的土壤湿度值。 SDI-12 协议使用单线总线和ASCII 码进行数据传输,并且每次数据采集都要和传感器进行两次数据交互,这和Modbus RTU 协议相比是没有优势的。
1.3 模拟接口传感器
模拟信号是指用连续变化的物理量所表达的信息,如温度、湿度、压力、长度、电流、电压等物理量。计算机要对其进行处理首先必须进行数字化,也就是进行模数转换,模数转换有很多种方式[16-18],本研究使用的是控制器STM32ZET6 自带的ADC 模块实现模数转换。 本研究选择的4 款模拟接口的传感器输出的均为电压信号,这个电压信号随土壤含水量的变化而变化,可以根据相应的公式转换为土壤湿度值。
图7 为本研究选取的4 款模拟信号传感器的实物图,其中1 号传感器为美国METER 公司的EC-5;2号传感器为英国delta-t 公司的SM150T;3 号传感器为澳大利亚ICT 公司的MP406;4 号传感器为济南海库物联网科技有限公司的HKSHC03S。 如表2 所示,4 款传感器的输出信号均为电压,所以数据采集程序比较简单。 首先进行AD 转换,将传感器输出的模拟电压信号转换为数字值,再根据数字电压值和传感器提供的换算方法得到最终的土壤湿度值。 具体的转换方法各个传感器厂家都有提供,图8 为MP406 输出电压与相应湿度的对照,每次测量一个电压值后通过查表法即可得到湿度值。 图7 中的3 号和4 号传感器支持查表法,查表法是一种简单的数值映射方法,很多中间值需要估算,所以测量不精确。 更精确的转换方法是公式换算,三款国外模拟接口传感器均提供有换算公式,且根据不同土壤类型提供了不同的换算方法。
图7 模拟接口传感器实物Fig.7 Analog interface sensor in kind
图8 MP406 输出电压与土壤湿度的对应关系Fig.8 Relationship between MP406 output voltage and soil moisture
表2 模拟接口传感器参数统计Table 2 Analog interface sensor parameter statistics
2 硬件平台搭建
硬件平台是农业物联网传输层与感知层的接口,负责从感知层获取信息并将其发送给传输层。 本研究搭建的硬件平台以意法半导体公司的一款微控制器STM32ZET6 为核心,该微控制器采用LQFP144 封装,有512k flash、64k RAM、5 个串口、21 个ADC 通道、112 个IO 口,具有足够快的运行速度、足够大的程序和数据存储空间、足够多的硬件接口来满足多个传感器的接入要求。 硬件平台的结构如图9 所示,SDI-12 接口和RS485 接口都属于数字接口,二者和主控通信都是双向的,且均需相关的电平转换模块;模拟接口传感器通信是单向的,信号只从传感器到主控,主控将传感器模拟信号数字化后转化为相应的土壤湿度值;另外,硬件平台还实现了数据的本地存储和远程传输功能,并配置了UPS 电源和电压监测模块,以保证供电的长期稳定性。
图9 硬件平台结构Fig.9 Hardware platform structure
硬件平台搭建完成后将设备布设在位于上海市闵行区的某蔬菜种植基地,以30 min 一次的频率进行土壤湿度数据的持续采集,采集到的数据实时保存至云服务器中,图10 为保存的部分数据。 图10 中数据包含采集器编号(C0088)、采集时间、采集器电压值以及各个传感器的具体数据。 采集器下共接入了12 个传感器,编号为WS1—WS12,其中WS1—WS4 为485 接口传感器、WS5—WS8 为SDI-12 接口传感器、WS9—WS12 为模拟接口传感器。 每个编号后面的数据依次为土壤温度值和土壤湿度值,图中的“------”表示该传感器仅能测量湿度,不支持温度测量。
图10 采集数据截图Fig.10 Screenshot of collected data
3 结论
本研究以土壤湿度传感器接入农业物联网感知层为目的,选取了国内外常见的12 种土壤湿度传感器,对其通信接口和通信协议进行研究,并编程实现对了对所选全部传感器数据的物联网远程采集。 本研究将所选取的12 种国内外土壤湿度传感器按接口类型分为RS485 接口、SDI-12 接口和模拟接口三大类,分别对这3 类接口进行了信号采集和通信协议研究,并以STM32 微控制器为硬件平台按照各自的通信协议编程实现了对这3 类接口传感器的数据采集和转化,获取到了相应的土壤湿度数据。
3.1 目前土壤湿度传感器中数字接口与模拟接口并存,模拟接口的传感器以电压输出和电流输出为主流,最终要进行模数转换才能获取湿度值;数字接口中RS485 与SDI-12 接口占主流;对比研究发现,国内传感器以Modbus 协议为主流,国外传感器多使用SDI-12 协议,而模拟接口是一种国内外厂商都保留的接口类型。
3.2 数字接口的通信协议中有的既定义了物理层的电气特性又定义了传输层的数据格式,如SDI-12;而有的只定义了物理层的电气特性,传输层的数据格式可选用其他通信协议,如RS485 接口,既可以使用Modbus RTU 协议也可以使用Modbus ASCII 协议,甚至也可以自定义一套私有协议。 但从协议通用性角度来看,私有协议没有优势且使用不便,如本研究1.1 节介绍的SMT-100 传感器。 通用协议中主流的是SDI-12 和RS485 +Modbus RTU,前者在硬件连接上只需3 根线缆,比后者少一根略有优势,但在数据传输格式上,前者使用ASCII 码,同样长度数据包所携带的信息量远不如后者所使用的二进制方式。 因为ASCII 码的主要优势是便于计算机显示,但在物联网感知层数据的处理过程不需要显示给用户,所以传输效率应该是首要考虑的因素;其次,SDI-12 协议每一次读数都需要与传感器进行2 次交互,且交互过程中需要主机根据从机返回状态进行不定时长的等待,这无疑会增加读数失败的概率。 而RS485 +Modbus RTU 协议只需执行一次交互即可读出一个或多个测量数据;最后,SDI-12 在通信时没有进行校验,数据传输出错时无法被发现。 所以,对于物联网感知层的多传感器大规模应用而言,RS485 +Modbus RTU 无疑是目前最好的选择。
3.3 模拟接口作为一种最原始的接口,在土壤湿度传感器上仍被诸多厂家所保留。 这种接口获取土壤湿度值需要先进行AD 转换,之后再根据查表法或复杂的换算公式才能得到具体的土壤湿度值,其测量数据的准确性取决于厂商提供的校准公式,数据转换过程通常较为复杂,所以这类传感器只适用于PLC 或者其他现场灌溉控制器,不适用于作为物联网的感知层设备进行远程监测。