6. 数据流程
IoT Gateway 中的数据流程主要包括两个方面:数据采集流程和 RPC 命令流程。了解这些流程有助于理解网关的工作原理和数据处理机制。


6.1 数据采集流程
数据采集流程是网关的核心功能之一,负责从设备采集数据并上传到云端平台。
6.1.1 数据采集流程概述
-
设备线程启动:系统启动时,DeviceService 为每个启用的设备创建一个 DeviceThread
-
设备连接:DeviceThread 尝试连接设备
-
数据采集:按照设定的采集周期,调用驱动的采集方法获取设备数据
-
数据处理:对采集到的数据进行处理,包括表达式计算、数据转换等
-
数据上传:将处理后的数据通过 MQTT 上传到云端平台
-
状态更新:更新设备状态和变量值
6.1.2 数据采集详细流程
┌─────────────────────────────────────────────────────────────────┐
│ DeviceThread │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ 检查设备连接状态 │
└─────────────────────────────────────────────────────────────────┘
│
├─ 未连接 ──► ┌─────────────────────────────────────┐
│ │ 尝试连接设备 │
│ └─────────────────────────────────────┘
│ │
│ └─ 连接失败 ──► 记录错误日志
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ 调用驱动采集方法 │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ 处理采集到的数据 │
│ - 表达式计算 │
│ - 数据转换 │
│ - 数据验证 │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ 检查数据变化 │
└─────────────────────────────────────────────────────────────────┘
│
├─ 数据未变化 ──► 跳过上传
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ 上传数据到 MQTT 服务器 │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ 更新设备状态和变量值 │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ 等待下一个采集周期 │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ 重复采集流程 │
└─────────────────────────────────────────────────────────────────┘
6.1.3 数据采集代码实现
// 设备线程主循环
Task.Run(() =>
{
while (true)
{
if (tokenSource.IsCancellationRequested)
{
_logger.LogInformation($"停止线程:{_device.DeviceName}
文档版本 :1.0 更新日期 :2025-11-29 编写人员:辉为科技