物联网基础:物联网架构、传感器与设备接入、网络通信协议概述

在深入MQTT网关开发之前,必须先建立对物联网整体框架的清晰认知。物联网并非单一技术,而是“端—边—管—云—用”多层协作的系统工程。理解每一层的职责、边界与典型协议,是后续配置网关、调试数据链路的前提。

2.1 物联网四层架构与数据流向

业界普遍采用四层参考模型来描述物联网系统,每一层解决不同的问题,层与层之间通过标准接口交互。下图展示了从物理世界到应用服务的完整链路,以及MQTT网关在其中的典型位置。

感知层(端) 物理世界数据采集与信号生成 温湿度传感器 压力变送器 光电开关 RFID读写器 4-20mA仪表 Modbus RTU 网络层(管) 数据汇聚、协议转换、路由与传输 MQTT 物联网网关 Wi-Fi / 以太网 TCP/IP 4G/5G 蜂窝 PPP / UDP LoRa / NB-IoT LPWAN RS-485 / CAN 工业总线 平台层(云) 设备管理、消息路由、数据存储与规则引擎 MQTT Broker 设备影子 时序数据库 规则引擎 API Gateway 应用层(用) 数据可视化、业务逻辑、告警与决策 SCADA 大屏 手机 APP Web 仪表盘 第三方系统 采集数据上传 MQTT QoS 发布 REST/WS 推送 下发指令 / 配置

图中纵向箭头表示数据上行(传感器→网关→云→应用),虚线箭头表示控制指令下行。MQTT网关位于感知层与网络层的交界处,承担“翻译官”和“邮差”的双重角色:一方面将Modbus、CAN、4-20mA等异构工业协议统一转换为MQTT消息;另一方面维护与云平台的长连接,确保指令能实时到达终端设备。

2.2 传感器数据采集与设备接入方式

传感器是物联网的“五官”,其输出信号类型决定了网关的接入设计。根据信号形式,可将传感器分为以下四类,网关需要提供对应的物理接口与解析逻辑:

传感器类型 典型输出 网关接入方式 常见协议/接口
数字量传感器 开关信号(0/1) GPIO 电平检测 干接点、TTL
模拟量传感器 4-20mA / 0-10V ADC 采样 + 量程换算 AI 通道
智能串口传感器 ASCII / 二进制帧 UART 接收 + 帧解析 Modbus RTU / 自定义
网络型传感器 IP 数据包 以太网口 / Wi-Fi Modbus TCP / MQTT

设备接入网关时,必须关注三个关键参数:波特率(串口设备)、从站地址(Modbus设备)和数据格式(字节序、寄存器映射)。例如某温湿度传感器采用Modbus RTU,波特率9600,8数据位,1停止位,无校验,从站地址为1,温度寄存器地址为0x0001(16位有符号整数,单位0.1℃)。网关配置时需逐一匹配,任何一项不一致都会导致通信失败。

实操建议:在接入新传感器前,先用PC串口调试工具(如Modbus Poll)验证传感器响应帧,确认寄存器地址与数据格式后再写入网关配置。这能避免“网关配置错误”与“传感器故障”之间的混淆。

2.3 网络通信协议分层与选型

物联网通信协议种类繁多,但可以从“是否基于IP”和“传输层特征”两个维度进行归类。网关开发中最常打交道的协议包括:

  • 物理/链路层:RS-485、CAN、以太网PHY、LoRa射频——解决“比特如何在线路上传输”。
  • 网络/传输层:IPv4/IPv6、TCP、UDP——解决“数据包如何路由到目的地”。
  • 应用层(设备侧):Modbus、BACnet、OPC UA——解决“寄存器/对象如何读写”。
  • 应用层(云端侧):MQTT、CoAP、HTTP——解决“消息如何发布/订阅到云平台”。

MQTT之所以成为物联网网关的首选云端协议,是因为它基于发布/订阅模型,天然支持一对多的设备接入,且提供三种QoS等级(0、1、2)来平衡可靠性与带宽。相比之下,HTTP是请求/响应模式,不适合大量设备频繁上报小数据;CoAP虽然轻量,但生态和云平台支持不如MQTT成熟。

2.4 典型接入场景:从Modbus到MQTT

以一个实际的工厂环境监测项目为例,说明协议转换的完整流程。现场有3台Modbus RTU设备(电表、水表、气表)和2路4-20mA模拟量传感器(温度、压力),需要将数据上传至云端物联网平台。

现场设备侧(从站)          网关(主站+MQTT客户端)          云端Broker
┌─────────────┐      ┌──────────────────────┐      ┌──────────────┐
│ 电表 地址1   │◄────►│                      │      │              │
│ 水表 地址2   │◄────►│  Modbus RTU 轮询     │      │  Topic:      │
│ 气表 地址3   │◄────►│  采集周期: 5秒       │─────►│  factory/env │
│ 温度 4-20mA  │◄────►│  数据映射+JSON封装   │      │  QoS: 1      │
│ 压力 4-20mA  │◄────►│  MQTT发布: 10秒     │      │  保留消息: 是 │
└─────────────┘      └──────────────────────┘      └──────────────┘

网关内部的数据处理流程为:轮询采集→协议解析→量程换算→JSON格式化→MQTT发布。其中量程换算是常见出错点:4-20mA信号对应0-100℃时,计算公式为 温度 = (电流值 - 4) × (100 - 0) / (20 - 4)。若网关配置中填错量程上下限,会导致云端数据显示严重偏差。

常见误区:不要将所有传感器的采集周期都设为相同值。对于变化缓慢的水表读数,30秒采集一次即可;对于压力波动,可能需要1秒采集一次。过快的轮询会增加总线负载,导致Modbus通信超时;过慢则可能丢失关键告警数据。应根据信号变化速率分别设置采集周期。

2.5 网关开发中的关键复盘

在调试物联网网关时,以下三类问题占据了现场故障的80%以上,值得在开发初期就建立排查意识:

  1. 物理层不通:RS-485的A/B线接反、终端电阻缺失、波特率不匹配。表现为网关发送请求后无任何响应。排查方法:用示波器或串口助手监听总线电平。
  2. 数据解析错位:Modbus寄存器地址偏移、字节序(大端/小端)错误、数据类型(int16/uint16/float)不匹配。表现为读到数值但明显不合理(如温度显示-3276℃)。排查方法:对比传感器手册中的寄存器映射表,逐字节核对原始报文。
  3. MQTT连接不稳定:Broker地址配置错误、客户端ID冲突、KeepAlive时间过短导致频繁断线。表现为云端设备状态反复“在线/离线”。排查方法:在网关侧抓取TCP报文,观察CONNACK返回码。

复盘建议:在网关开发阶段就建立本地日志分级机制——将Modbus原始报文、MQTT发布消息、错误码分别记录到不同日志文件,并打上时间戳。这样在接入现场时,可以通过对比时间线快速定位是采集侧问题还是上传侧问题,避免盲目修改配置。