4. 农业常用通信协议概览与选型
农业物联网网关处在现场设备与上层平台之间,它向下要面对传感器、控制器、水肥一体机、卷帘电机等形态各异的终端,向上要对接云平台、组态软件或本地管理后台。这些环节使用的通信协议并不统一:有的设备只支持串口上的 Modbus RTU,有的控制器自带以太网口跑 Modbus TCP,有的无线节点用 LoRaWAN 入网,而平台侧往往偏好 MQTT 或 HTTP。网关的核心价值之一,就是把这些协议"翻译"并汇聚起来。因此,选型不是选一个"最好的协议",而是为每一段链路选一个"最合适的协议"。
一、五类协议在农业场景中的定位
Modbus RTU 是农业现场最普遍的设备级协议。它跑在 RS-485 总线上,采用主从轮询,一主多从,从站地址 1~247,常用功能码 03(读保持寄存器)、04(读输入寄存器)、06(写单寄存器)、16(写多寄存器)。它的优点是简单、稳定、成本低,一根双绞线可挂多台设备,传输距离在 9600 bps 下可达千米级;缺点是轮询效率低、无内建安全机制、寄存器地址与数据含义完全依赖设备手册。典型对象是大棚温湿度传感器、土壤墒情探头、继电器模块。
Modbus TCP 把同样的寄存器模型搬到以太网,默认端口 502,去掉了串口的从站地址校验,改用 IP 定位设备,报文增加 MBAP 头。它适合网关与带网口的 PLC、边缘控制器、智能电表之间的通信,速率和并发能力明显优于 RTU,但需要稳定的网络布线或工业交换机。
MQTT 是面向平台侧的发布/订阅协议,默认端口 1883(TLS 为 8883)。它通过 Broker 解耦设备与业务系统,支持 QoS 0/1/2、遗嘱消息和主题层级,特别适合带宽受限、连接不稳定的农田环境。网关通常作为 MQTT 客户端,把采集数据发布到类似 farm/greenhouse01/env/temp 的主题上。
HTTP 是请求/响应式协议,通用性最强,调试方便,适合网关向平台上报批量数据或调用业务接口,但每次请求都有头部开销,不适合高频小数据上报,也不适合平台主动下发实时控制。
LoRaWAN 是低功耗广域网的星型拓扑协议,终端经网关入网,采用 ABP 或 OTAA 激活,具有扩频调制、长距离、低功耗的特点,适合大田、果园中分散且供电困难的传感器。它的短板是单包载荷小(典型几十字节)、下行机会有限、时延较大,不适合需要秒级响应的控制回路。
CoAP 则是面向受限设备的 REST 风格协议,跑在 UDP 上,报文精简,支持观察模式(Observe),适合资源极有限的节点与网关之间的交互,在部分国产农业传感网中可见。
二、选型的判断维度
把上述协议放在一起比较,真正决定选型的不是"先进与否",而是几个具体约束:链路两端是谁、数据频率多高、单包多大、是否要求实时下行控制、现场供电与布线条件如何、是否需要跨公网传输、安全要求到什么级别。例如,一个每 30 秒上报一次土壤温度的探头,用 Modbus RTU 挂到网关最经济;而一个分布在 500 亩果园、靠电池供电、每天上报几次的节点,LoRaWAN 更合适;网关到云平台若需要平台主动下发灌溉指令,MQTT 的订阅机制比 HTTP 轮询更及时。
三、协议选型检查表
下面这份检查表可直接用于项目前期评估。使用时先明确每一段链路(设备→网关、网关→平台),再逐项打分或勾选,最后综合判断。表中"典型取值"是示例性参考,实际以设备手册和现场条件为准。
| 检查项 | Modbus RTU | Modbus TCP | MQTT | HTTP | LoRaWAN | CoAP |
|---|---|---|---|---|---|---|
| 典型链路位置 | 设备→网关 | 设备→网关 | 网关→平台 | 网关→平台 | 节点→网关 | 节点→网关 |
| 传输层 | 串行 RS-485 | TCP | TCP/TLS | TCP/TLS | LoRa 射频 | UDP |
| 通信模型 | 主从轮询 | 请求/响应 | 发布/订阅 | 请求/响应 | 星型入网 | 请求/响应+观察 |
| 适合数据频率 | 秒级~分钟级 | 毫秒~秒级 | 秒级~小时级 | 分钟级以上 | 分钟~小时级 | 秒~分钟级 |
| 单包载荷 | 小(≤253 字节) | 较大 | 灵活 | 较大 | 很小(几十字节) | 小 |
| 下行实时控制 | 支持(写寄存器) | 支持 | 支持(订阅主题) | 弱(需轮询) | 受限(下行窗口少) | 支持 |
| 布线/供电要求 | 需总线布线 | 需网线/交换机 | 需 IP 网络 | 需 IP 网络 | 电池可供电 | 低功耗 |
| 安全机制 | 无内建 | 无内建 | TLS/用户名密码 | HTTPS | AES-128 加密 | DTLS 可选 |
| 农业典型对象 | 传感器、继电器 | PLC、电表 | 云平台、组态 | 业务接口 | 大田节点 | 受限节点 |
四、一个选型示例
假设某蔬菜基地有 1 号大棚,棚内 6 台 RS-485 温湿度传感器(从站地址 1~6,波特率 9600,8N1),1 台带网口的水肥一体机,以及基地外 20 个电池供电的土壤墒情节点。网关需要把数据送到云平台,并接受平台下发的灌溉启停指令。
按检查表逐段判断:棚内传感器与网关之间,数据频率为 30 秒一次、距离在 100 米内、无实时控制需求,选 Modbus RTU 最经济;水肥一体机自带网口且需要较快响应,选 Modbus TCP;田间节点分散、靠电池供电,选 LoRaWAN 入网;网关到云平台需要平台主动下发指令,选 MQTT 而非 HTTP。于是网关的南向配置可写成:
南向通道1:Modbus RTU
串口:/dev/ttyS1 波特率 9600 数据位 8 校验 N 停止位 1
轮询周期:30 s
从站1:功能码03,起始寄存器 0x0000,数量 2(温度、湿度)
从站2~6:同上,地址依次递增
南向通道2:Modbus TCP
目标:192.168.1.50:502 单元标识 1
轮询周期:5 s
北向通道:MQTT
Broker:mqtt.example-farm.cn:8883(TLS)
客户端ID:gw-greenhouse01
发布主题:farm/gh01/sensor/data(QoS 1)
订阅主题:farm/gh01/cmd/irrigation(QoS 1)
配置完成后如何判断选型是否合理?可以从三个现象观察:一是网关日志中 Modbus 轮询无超时、无 CRC 错误,说明 RTU 链路参数匹配;二是 MQTT 主题能在平台上按 30 秒节奏收到数据,QoS 1 下无重复堆积,说明北向链路通畅;三是平台下发灌溉指令后,网关能在数秒内转发到水肥一体机并回读状态,说明下行链路满足实时性要求。若出现轮询超时,优先核对波特率、校验位与从站地址;若 MQTT 频繁重连,则检查 TLS 证书与网络信号。