亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial Internet of Things >> 物联网技术

在树莓派上使用EdgeX Foundry实现Modbus传感器无缝集成

在树莓派上使用EdgeX Foundry实现Modbus传感器无缝集成

工业物联网(IIoT)部署越来越依赖边缘网关,将支持Modbus的外设与云分析连接。构建专有网关成本高、耗时长。本案例研究演示如何在树莓派上部署开源框架EdgeX Foundry,连接Modbus温湿度传感器,将数据流式传输到云端,并以最小工作量触发实时执行。

为何选择Modbus和EdgeX?

Modbus是运行在廉价RS-485链路上的开放轻量级协议。它使用简单寄存器(16位无符号整数)表示模拟值,线圈表示二进制状态,非常适合工业设备。EdgeX Foundry作为开源边缘中间件,充当物理传感器与IT系统的桥梁,开箱即用地提供设备管理、数据转换和云连接。

硬件栈

图1:在树莓派上使用EdgeX Foundry实现Modbus传感器无缝集成 图1. EdgeX Foundry – 开源边缘中间件

图2:在树莓派上使用EdgeX Foundry实现Modbus传感器无缝集成 图2. EdgeX部署高层框图

分步集成

  1. 设置树莓派
    • 安装Ubuntu 20.04 LTS,配备Docker和docker-compose。
    • 克隆EdgeX Foundry仓库并通过docker-compose启动栈。
  2. 模拟Modbus设备
    • 使用ModbusPal(GPL)模拟多达247个Modbus从站。
    • 配置一个从站,包含温度(地址2)和湿度(地址3)的保持寄存器。每个寄存器映射为16位整数,将缩放为°C和%RH。
    • 通过TCP或串口(USB-RS485)启动ModbusPal验证通信。
  3. 上传设备配置文件

    向https://localhost:48081/api/v1/deviceprofile/uploadfile发送POST请求,附带包含配置文件的YAML文件(见下文)。响应返回唯一配置文件ID。

  4. 注册设备

    将以下JSON发送到https://localhost:48081/api/v1/device创建传感器条目。protocols.modbus-rtu部分指向/dev/ttyUSB0,波特率9600。

    { "name": "TemperatureHumiditySensor", "description": "Industrial Grade Temperature & Humidity Transmitter SHT20", "adminState": "UNLOCKED", "operatingState": "ENABLED", "protocols": { "modbus-rtu": { "Address": "/dev/ttyUSB0", "BaudRate": "9600", "DataBits": "8", "StopBits": "1", "Parity": "N", "UnitID": "1" } }, "labels": ["TemperatureHumiditySensor","modbusRTU"], "service": {"name": "edgex-device-modbus"}, "profile": {"name": "TemperatureHumiditySensor"}, "autoEvents": [ {"frequency": "5s", "onChange": false, "resource": "TemperatureDegC"}, {"frequency": "5s", "onChange": false, "resource": "HumidityPercentRH"} ] }
  5. 验证数据流
    • EdgeX设备服务每5秒拉取数据并写入核心服务,存储于Redis。
    • 应用服务将数据转发至IBM Cloud(或任意云)。
    • 日志示例显示Modbus请求/响应数据包。
  6. 用Kuiper规则引擎驱动LED
    • 定义规则:温度>30°C开启红灯;<30°C关闭;同样蓝灯在28°C触发。
    • Kuiper推送命令到EdgeX core-command,再更新GPIO设备服务。
    • 通过/sys/class/gpio/gpio12/value和/sys/class/gpio/gpio14/value验证GPIO输出。

关键配置片段

设备配置文件(YAML)

name: TemperatureHumiditySensor
manufacturer: ROBOKITS
model: RKI-4879
labels:
- SHT20
description: Industrial Grade Temperature & Humidity Transmitter SHT20 Sensor High Precision Monitoring Modbus RS485
deviceResources:
- name: TemperatureDegC
  description: Room Temperature in Degrees Celsius.
  attributes: { primaryTable: INPUT_REGISTERS, startingAddress: 2, rawType: INT16 }
  properties:
    value: { type: Float32, readWrite: R, scale: 0.1, floatEncoding: eNotation }
    units: { type: String, readWrite: R, defaultValue: degrees celsius }
- name: HumidityPercentRH
  description: Room Humidity in %RH.
  attributes: { primaryTable: INPUT_REGISTERS, startingAddress: 3, rawType: INT16 }
  properties:
    value: { type: Float32, readWrite: R, scale: 0.1, floatEncoding: eNotation }
    units: { type: String, readWrite: R, defaultValue: %RH }
deviceCommands:
- name: TemperatureDegC
  get: [{ index: 1, operation: get, deviceResource: TemperatureDegC }]
- name: HumidityPercentRH
  get: [{ index: 2, operation: get, deviceResource: HumidityPercentRH }]
coreCommands:
- name: TemperatureDegC
  get:
    path: /api/v1/device/{deviceId}/TemperatureDegC
    responses:
    - code: 200
      description: Get the temperature in degrees C
      expectedValues: [TemperatureDegC]
- name: HumidityPercentRH
  get:
    path: /api/v1/device/{deviceId}/HumidityPercentRH
    responses:
    - code: 200
      description: Get the humidity in %RH
      expectedValues: [HumidityPercentRH]

device-modbus TOML配置(节选)

[DeviceList]
Name = "TemperatureHumiditySensor"
Profile = "TemperatureHumiditySensor"
Description = "Industrial Grade Temperature & Humidity Transmitter SHT20"
labels = ["TemperatureHumiditySensor","modbusRTU"]
[DeviceList.Protocols.modbus-rtu]
Address = "/dev/ttyUSB0"
BaudRate = 9600
DataBits = 8
StopBits = 1
Parity = "N"
UnitID = 1
[[DeviceList.AutoEvents]]
Frequency = "5s"
OnChange = false
Resource = "TemperatureDegC"
[[DeviceList.AutoEvents]]
Frequency = "5s"
OnChange = false
Resource = "HumidityPercentRH"

结果

端到端流程展示实时温湿度数据抵达IBM Cloud,触发基于规则的LED状态变化,演示了EdgeX在低成本树莓派上的完整能力。

结论

EdgeX Foundry以最小开发开销实现基于Modbus的IIoT解决方案快速部署。通过抽象设备管理、数据存储和云连接,让工程师专注于领域逻辑和分析。

缩略语

缩略语全称
AOFAppend Only File
APIApplication Program Interface
AWSAmazon Web Services
BACnetBuilding Automation and Control Network
BLEBluetooth Low Energy
CURLClient Uniform Resource Locator
GPIOGeneral Purpose Input Output
HTTPHypertext Transfer Protocol
IBMInternational Business Machines
IIoTIndustrial Internet of Things
IoTInternet of Things
ITInformation Technology
LEDLight Emitting Diode
LTSLong Term Support
M2MMan to Machine
MQTTMessage Queuing Telemetry Transport
RDBRedis Database
RedisREmote DIctionary Server
RESTRepresentational State Transfer
RS-485Recommended Standard – 485
SCADASupervisory Control and Data Acquisition
SQLStructured Query Language
TCP/IPTransmission Control Protocol/Internet Protocol

物联网技术

  1. 掌握边缘 AI 推理:获取可落地洞察的实战指南
  2. OpenDDS 与 RTI Connext DDS:选择正确的数据分发服务解决方案
  3. 开源术语入门指南
  4. Cisco 发布 Catalyst 5G 工业路由器,无缝融合企业核心网与边缘网络
  5. AT&T与Tech Mahindra推出Acumos:面向快速部署的开源AI平台
  6. 工业4.0赋能制造卓越:质量4.0崛起
  7. 保障物联网开源软件安全:缓解软件风险
  8. 提升工业 4.0:利用边缘分析实现更智能、更快速的制造
  9. IIC与OpenFog合并,推动边缘计算创新
  10. 开源与厂商支持 IoT 开发工具:为企业选型正确技术栈
  11. 为何开源驱动边缘创新——必读电子书
  12. 开源赋能物联网与边缘计算崛起