使用自定义modbus应用采集
更新时间:2022-10-11
本章运用modbus模块,完整演示从温湿度传感器采集信息的demo。
一、前提准备
-
硬件准备:
-
设备连接方式
- 树莓派通过wifi接入网络
- 温湿度传感器连接USB转串口线,最后通过USB接入树莓派
- 树莓派边缘节点已经按照快速入门教程连接到云端(本文节点名称为modbus-test)
二、模拟场景
- 传感器采集温湿度发送到边缘节点的broker服务
三、边缘节点应用描述
除了边缘节点连接云端是自动部署的bartyl-core和baetyl-function两个系统应用,还需要在边缘节点上部署以下两个应用
- broker容器应用:边缘节点MQTT broker消息模块
- modbus容器应用:基于modbus协议采集解析数据, 该模块支持配置多个从设备定时采集数据
四、边缘应用配置
broker配置
- 创建应用broker
- 名称:broker
- 镜像地址:hub.baidubce.com/baetyl/broker:v2.0.0
-
端口映射:
- 宿主机端口:1883;
- 容器端口:1883;
- 协议:TCP
- 默认情况下,broker服务没有用户名密码
modbus配置
- 创建modbus-conf-test配置
- 变量名:service.yml
- 变量值:
broker:
address: tcp://broker:1883 # 连接mqtt hub的地址
clientid: modbus-1 # 连接mqtt hub时使用的client id,基于baetyl框架运行时可不配置
slaves:
- id: 1 # slave id
address: /dev/ttyUSB0 # 基于tcp连接slave时的地址
mode: rtu
idletimeout: 1m # 空闲tcp连接保持时间,默认1分钟
baudrate: 9600 # 波特率 默认为19200
databits: 8 # 数据位,可选(5,6,7,8) 默认为8
stopbits: 1 # 停止位,可选(1,2) 默认为1
parity: N # 奇偶校验类型,可选N(无,对应stopbits应配置为2),E(奇校验),O(偶校验) 默认为E
jobs:
- slaveid: 1 # 采集任务的对应设备
encoding: json # 指定采集解析数据,数据以JSON发送,默认为json
maps:
- function: 3 # 功能码,对应离散量输入
address: 0 # 起始地址
quantity: 1 # 采集数量,离散量输入对应1bit, 当解析数据时模块可自动确定
field:
name: temperature # 解析后数据field名
type: int16 # 针对float32数据类型解析数据
- function: 3 # 功能码,对应输入寄存器
address: 1 # 起始地址
quantity: 1 # 采集数量,输入寄存器对应16bit
field:
name: humidity # 解析后数据field名
type: int16 # 针对float32数据类型解析数据
publish:
topic: test # 采集数据发送的mqtt主题
logger:
filename: var/log/baetyl/service.log # 日志路径
level: info # 日志级别
2、创建modbus容器应用,添加modbus容器服务
- 名称:modbus-test
- 镜像地址:baetyltechtest/baetyl-modbus:git-23488d4
-
增加两个卷配置
- dev的目录修改为具体设备目录: /dev/ttyUSB0
- 增加modbus-conf-test的配置项,容器目录为/etc/baetyl
- 启动特权模式:选择 是
五、应用部署至边缘节点
六、验证信息采集结果
使用MQTT box订阅边缘节点本地broker服务. Protocol 为mqtt/tcp,订阅主题为test(主题在配置文件中定义)。该broker应用不需要用户名和密码。
七、日志查看
测试过程中遇到问题,可以通过以下命令查看应用的运行状态和日志
$ sudo kubectl get pod -A #查看所有pod运行状态
$ kubectl logs modbus-test-d87cf6d98-ljfnr(该值为pod的NAME) -n baetyl-edge(该值为pod的NAMESPACE) #查看容器应用的log