• EdgeX Foundry 边缘计算平台对Modbus设备状态检测和远程控制


    一、设备开箱

    收到设备第一时间进行了开机配置,整个过程都比较顺畅,通过简单的上电、开机就可以进入到系统配置页面,配置就类似一般的Ubuntu系统配置,一步步就可以进入到系统

    设备的整体参数配置和我现在用的物联网边缘计算**类似,所以就想申请来试试部署边缘计算平台EdgeX进行一下测试,平时工作中也会接触很多类似的设备,也想做一个对比。

    二、EdgeX Foundry安装

    首先,需要进行Docker和Docker Compose的安装,这里一定要注意,不要使用平台的Snap安装的版本,Snap安装的版本单独通过docker run启动一些简单的容器没有问题,但是使用docker-compose启动EdgeX的时候会遇到各种奇怪的权限问题,operation not permitted,具体原因没有深入研究,如下图:

    所以推荐大家尽量通过apt去进行安装,docker-compose安装也很简单,这里就不详细介绍了,网上很多相关资料。

    其次,进行EdgeX的部署,参考官方文档 Quick Start - EdgeX Foundry Documentation 我这里使用的 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-legacydocker-compose up -d<br/>

    此时通过浏览器页面访问 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直接在对应的页面输入,然后保存

    1. name: "Test Profile"
    2. manufacturer: "Midea Group"
    3. model: "Test"
    4. labels:
    5. - "Web"
    6. - "Modbus TCP"
    7. - "SNMP"
    8. description: "Test for Modbus TCP communications."
    9. deviceResources:
    10. -
    11. name: "attr0"
    12. isHidden: false
    13. description: "attribute for test"
    14. attributes:
    15. { primaryTable: "HOLDING_REGISTERS", startingAddress: 0, rawType: "Int16" }
    16. properties:
    17. valueType: "Int16"
    18. readWrite: "RW"
    19. -
    20. name: "attr1"
    21. isHidden: false
    22. description: "attribute for test"
    23. attributes:
    24. { primaryTable: "HOLDING_REGISTERS", startingAddress: 1, rawType: "Int16" }
    25. properties:
    26. valueType: "Int16"
    27. readWrite: "RW"
    28. -
    29. name: "attr2"
    30. isHidden: false
    31. description: "attribute for test"
    32. attributes:
    33. { primaryTable: "HOLDING_REGISTERS", startingAddress: 2, rawType: "Int16" }
    34. properties:
    35. valueType: "Int16"
    36. readWrite: "RW"
    37. -
    38. name: "attr3"
    39. isHidden: false
    40. description: "attribute for test"
    41. attributes:
    42. { primaryTable: "HOLDING_REGISTERS", startingAddress: 3, rawType: "Int16" }
    43. properties:
    44. valueType: "Int16"
    45. readWrite: "RW"
    46. -
    47. name: "attr4"
    48. isHidden: false
    49. description: "attribute for test"
    50. attributes:
    51. { primaryTable: "HOLDING_REGISTERS", startingAddress: 4, rawType: "Int16" }
    52. properties:
    53. valueType: "Int16"
    54. readWrite: "RW"
    55. -
    56. name: "attr5"
    57. isHidden: false
    58. description: "attribute for test"
    59. attributes:
    60. { primaryTable: "HOLDING_REGISTERS", startingAddress: 5, rawType: "Int16" }
    61. properties:
    62. valueType: "Int16"
    63. readWrite: "RW"
    64. deviceCommands:
    65. -
    66. name: "commond_test"
    67. readWrite: "RW"
    68. isHidden: false
    69. resourceOperations:
    70. - { deviceResource: "attr1" }
    71. - { deviceResource: "attr2" }
    72. -
    73. name: "commond_map_test"
    74. readWrite: "RW"
    75. isHidden: false
    76. resourceOperations:
    77. - { 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支持应该问题不会太大。

  • 相关阅读:
    Java EE企业级开发学习 -- day1
    互联网时代,企业如何扭转线下采购劣势?
    Python3,区区一段代码,自己就可以制作动漫头像,YYDS。
    docker&kubernets篇(二十五)
    Promise的基本用法,基于Promise处理ajax请求
    Ansible stat模块 stat模块 – 检索文件或文件系统状态
    io,nio,aio总结
    Nerf Pytorch 代码 shuffle_ray 代码阅读
    已经有 MESI 协议,为什么还需要 volatile 关键字?
    使用brainconn工具绘制的大脑连接数据,比BrainNet更方便和灵活
  • 原文地址:https://blog.csdn.net/qq_19734597/article/details/132900670