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 轮询更及时。

农业物联网协议分层选型示意 现场设备层 温湿度 / 墒情传感器 RS-485 从站 继电器 / 卷帘控制器 RS-485 从站 带网口 PLC / 电表 以太网设备 电池供电田间节点 LoRa 终端 受限低功耗节点 CoAP 客户端 农业物联网网关 南向:协议解析与轮询 寄存器映射 / 数据清洗 本地缓存与断点续传 北向:协议封装与发布 安全认证 / 主题路由 协议转换核心 平台 / 应用层 MQTT Broker 1883 / 8883 业务 API 服务 HTTP / HTTPS LoRaWAN 网络服务器 入网与去重 组态 / 可视化后台 订阅实时数据 告警与规则引擎 阈值判断 Modbus RTU Modbus RTU Modbus TCP LoRaWAN CoAP MQTT HTTP LoRaWAN MQTT 同一网关可同时承载多种南向协议,并按业务需求选择北向协议

三、协议选型检查表

下面这份检查表可直接用于项目前期评估。使用时先明确每一段链路(设备→网关、网关→平台),再逐项打分或勾选,最后综合判断。表中"典型取值"是示例性参考,实际以设备手册和现场条件为准。

检查项 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 证书与网络信号。

选型检查表的使用顺序建议为:先定链路两端角色,再定数据频率与包大小,最后看供电布线、下行实时性和安全要求。不要一开始就纠结协议"先不先进",农业现场往往稳定、低成本、易维护比协议新更重要。
Modbus RTU 与 Modbus TCP 的寄存器地址存在"协议地址"与"PLC 地址"偏移差异(常见偏移 1),配置前务必以设备手册为准;LoRaWAN 的下行窗口有限,不要把需要秒级响应的控制逻辑放在 LoRaWAN 链路上。