【爱克斯开发板试用】集成边缘计算平台EdgeX Foundry,进行Modbus设备状态检测和远程控制

一、设备开箱
收到设备第一时间进行了开机配置,整个过程都比较顺畅,通过简单的上电、开机就可以进入到系统配置页面,配置就类似一般的Ubuntu系统配置,一步步就可以进入到系统
设备的整体参数配置和我现在用的物联网边缘计算**类似,所以就想申请来试试部署边缘计算平台EdgeX进行一下测试,平时工作中也会接触很多类似的设备,也想做一个对比。
二、EdgeX Foundry安装
首先,需要进行Docker和Docker Compose的安装,这里一定要注意,不要使用平台的Snap安装的版本,Snap安装的版本单独通过docker run启动一些简单的容器没有问题,但是使用docker-compose启动EdgeX的时候会遇到各种奇怪的权限问题,operation not permitted,具体原因没有深入研究,如下图:
所以推荐大家尽量通过apt去进行安装,docker-compose安装也很简单,这里就不详细介绍了,网上很多相关资料。
其次,进行EdgeX的部署,参考官方文档 https://docs.edgexfoundry.org/2.1/getting-started/quick-start/ 我这里使用的 2.1-Jakarta版本,对应的脚本指令
curl https://raw.githubusercontent.com/edgexfoundry/edgex-compose/jakarta/docker-compose-no-secty.yml -o docker-compose.yml; docker-compose up -d
此时可能会遇到无法发现配置服务的错误,此时在容器内部进行相互ping,发现容器之间无法互通,此时需要对Iptables进行设置,然后重启启动服务
update-alternatives --set iptables /usr/**in/iptables-legacy docker-compose up -d
此时通过浏览器页面访问 127.0.0.1:4000,会显示edegx-ui的dashboard
此时,会看到我们的虚拟设备,我们先通过虚拟设备进行一下平台的数据,Edgex默认在docker-compose.yml文件中添加了 device-virtual 服务,基于该服务有默认配置的8个设备,我们随机选择其中一个设备,选择commond图标,进行属性的获取和设置
如果都可以争取返回和相应,说明整体EdgeX已经正确安装。
三、进行Modbus设备调试
我身边只有Modbus RTU设备,但是AIxBoard没有485串口,身边暂时也没转接头,我们先用Modbus Slave进行Modbus Tcp设备的模拟,整体过程也比较简单,我在我的PC端进行模拟,如下图
我们这里测试选择Modbus 03-Holding Register,寄存器地址从0到9,10个地址,通过双击地址对应的数值可以进行修改或者数值自增。
然后,我们需要在EdgeX平台中集成我们的modbus device service,在EdgeX中我们就是通过添加Device Service来扩展平台的协议支持。打开我们docker-compose.yml文件,进行device-modbus服务的添加,如下图
保存文件,执行 docker-compose up -d 加载新的服务,启动完成以后,访问EdgeX-UI查看会发现多了一个Device Service,此时说明我们的设备服务加载成功,平台已经支持modbus协议的设备接入
接下来,我们通过UI来创建一个Modbus设备,首先我们需要创建Device profile,这里我们准备了一个简单的profile直接在对应的页面输入,然后保存
name: "Test Profile"
manufacturer: "Midea Group"
model: "Test"
labels:
- "Web"
- "Modbus TCP"
- "SNMP"
description: "Test for Modbus TCP communications."
deviceResources:
-
name: "attr0"
isHidden: false
description: "attribute for test"
attributes:
{ primaryTable: "HOLDING_REGISTERS", startingAddress: 0, rawType: "Int16" }
properties:
valueType: "Int16"
readWrite: "RW"
-
name: "attr1"
isHidden: false
description: "attribute for test"
attributes:
{ primaryTable: "HOLDING_REGISTERS", startingAddress: 1, rawType: "Int16" }
properties:
valueType: "Int16"
readWrite: "RW"
-
name: "attr2"
isHidden: false
description: "attribute for test"
attributes:
{ primaryTable: "HOLDING_REGISTERS", startingAddress: 2, rawType: "Int16" }
properties:
valueType: "Int16"
readWrite: "RW"
-
name: "attr3"
isHidden: false
description: "attribute for test"
attributes:
{ primaryTable: "HOLDING_REGISTERS", startingAddress: 3, rawType: "Int16" }
properties:
valueType: "Int16"
readWrite: "RW"
-
name: "attr4"
isHidden: false
description: "attribute for test"
attributes:
{ primaryTable: "HOLDING_REGISTERS", startingAddress: 4, rawType: "Int16" }
properties:
valueType: "Int16"
readWrite: "RW"
-
name: "attr5"
isHidden: false
description: "attribute for test"
attributes:
{ primaryTable: "HOLDING_REGISTERS", startingAddress: 5, rawType: "Int16" }
properties:
valueType: "Int16"
readWrite: "RW"
deviceCommands:
-
name: "commond_test"
readWrite: "RW"
isHidden: false
resourceOperations:
- { deviceResource: "attr1" }
- { deviceResource: "attr2" }
-
name: "commond_map_test"
readWrite: "RW"
isHidden: false
resourceOperations:
- { deviceResource: "attr3", mappings: { "1":"OFF","2":"Lower","3":"Higher","4":"Lower or Higher"} }
完成profile的添加以后我们来进行Device的添加,根据页面指引,一步步进行对应的填写,最后Submit,我们就可以在设备列表看到我们新创建的Device
然后,我们进行Modbus设备的点位数值获取和配置,先找到我们新创建的设备,点击Commond图标,进行属性获取和配置页面
我们在Modbus Slave中修改一个点位的数值,然后选择对应的设备属性进行Get操作,获取点位数值
我们通过Set操作来远程配置一个点位的数值,然后再Modbus Slave中确认点位是否有相应变化
四、结束语
AIxBoard硬件使用起蛮方便的,接口也比较丰富,有视频和音频输出、多个USB、GPIO、开关机按钮等,其中内置的操作系统也进行了一些国内使用习惯的配置。如果使用在物联网行业,特别是一些环境相对比较苛刻的地方,对设备的工作温度有更高的要求;一般物联网设备很多也是串口设备,需要232和485的支持;通过现场很多地方没有网络,一般还需要4G的支持。后续有机会在上面也跑一下算法看一下性能,现在物联网边缘计算行业一般数据拟合的算法相对较多,很少用到深度学习等算法,AIxBoard支持应该问题不会太大。