当前位置: 首页 > news >正文

DGIOT-Modbus-RTU控制指令05、06的配置与下发

file

[小 迪 导 读]:伴随工业物联网在实际应用中普及,Modbus-RTU作为行业内的标准化通讯协议。在为物联网起到采集作用的同时,设备的控制也是一个密不可分的环节。


场景解析:在使用Modbus对设备进行采集后,可以通过自动控制和手动控制来实现动环或者设备的运行状态调节。因此,自动控制可以通过配置规则引擎来实现;而手动控制需要用户自行根据设备的指令标识完成配置。


末尾提供源码供测试使用


Modbus-RTU控制指令05、06的配置与下发

05-写单个线圈指令格式:
01 05 00 00 FF 00 8C 3A(开)
01 05 00 00 00 00 CD CA(关)

06-写单个寄存器指令格式:
01 06 00 02 00 B1 E8 7E
向设备编号为0X01的寄存器上,在第0X02的寄存器地址写入177实现控制。


实现流程

1.创建Modbus通道,将图片中1、2、3、4位置处的数据补充完整。

编号注释
1任取
2任取
3服务器开放的端口号,不要冲突
4设备登录报文校验,*代表任意字符

file

2.创建产品。首先需要创建产品,为为后期大批量的同种产品接入提供模板,同时通过对物模型的配置为后续的指令下发提供数据标识。根据图片,我们在产品管理内创建产品,这里的采集通道将步骤1内创建的Modbus采集通道挂载进来。

file

3.搭建物模型。在拿到设备的手册后,厂商有提供指令模板或者由用户通过串口调试工具自行测得设备的控制指令集。操作类似modbus的采集物模型指令,区别在于将采集频率改为不采集(自动上报)。而后的寄存器功能码对照设备指令集选择。报文序号默认填1。根据图片参考。

file

file

4.上线设备。完成物模型的搭建后,重启刚才用到的3个通道,将我们的设备上线到平台,此时可以获得设备的ID号以填补后续的api标识。

file

5.低代码配置。进入刚才创建的产品,对照下图完成Profile控制指令的创建。这是专用于控制模块搭建的模板。

file

(1)首先生成一个表单,然后添加你需要的模板个数。这里选用的模块是“开关”。
(2)配置字段名。这里的各个字段名对应物模型中的标识符。

file

(3)勾选修改即提交。请求方式为PUT,接口地址为iotapi/classes/Device/XXXXXXXXXXX [这里的XXX为步骤4中的设备id号]
自定义适配器为必选项。
(4)触发值。这里设置触发05、06指令后下发的数据。对于05功能码而言,1代表实际报文中的FF即开;0代表实际报文中的00即关。对于06功能码而言,此处的值为实际的需求值。
file

file

6.成果展示。再次上线设备后,我们在设备管理内找到设备,点击后面的“控制”按钮进入到配置好的界面。然后通过点击触发开关实现数据的控制指令的数据下发。
file


物模型代码

{"properties": [{"accessMode": "rw","dataForm": {"address": "0X10","afn": "","byteType": "","bytelen": "","collection": "%{s}","control": "%{d}","countcollection": "%{s}","countround": "all","countstrategy": 20,"da": "","data": "null","dt": "","iscount": "0","offset": 0,"operatetype": "readCoils","order": 2,"originaltype": "short16_AB","protocol": "MODBUSRTU","rate": 1,"round": "all","slaveid": "0X10","strategy": "主动上报"},"dataSource": {"": [],"_dlinkindex": 1,"address": "0X02","operatetype": "writeHreg","originaltype": "bit","registersnumber": "1","slaveid": "0X01"},"dataType": {"das": [],"specs": {"0": "关","15": "开"},"type": "enum"},"devicetype": "控制2","identifier": "control2","isaccumulate": false,"isshow": false,"isstorage": false,"moduleType": "properties","name": "control2","required": true,"updateAt": "1693218087737","index": 0},{"accessMode": "rw","dataForm": {"address": "0X10","afn": "","byteType": "","bytelen": "","collection": "%{s}","control": "%{d}","countcollection": "%{s}","countround": "all","countstrategy": 20,"da": "","data": "null","dt": "","iscount": "0","offset": 0,"operatetype": "readCoils","order": 1,"originaltype": "short16_AB","protocol": "MODBUSRTU","rate": 1,"round": "all","slaveid": "0X10","strategy": "主动上报"},"dataSource": {"": [],"_dlinkindex": 1,"address": "0X01","operatetype": "writeCoil","originaltype": "bit","registersnumber": "1","slaveid": "0X01"},"dataType": {"das": [],"specs": {"0": "关","1": "开"},"type": "enum"},"devicetype": "控制1","identifier": "control1","isaccumulate": false,"isshow": false,"isstorage": false,"moduleType": "properties","name": "control1","required": true,"updateAt": "1693207951719","index": 1},{"accessMode": "rw","dataForm": {"address": "0X10","collection": "%{s}","control": "%{d}","countcollection": "%{s}","countround": "all","countstrategy": 20,"data": "null","iscount": "0","offset": 0,"operatetype": "readCoils","order": 0,"originaltype": "short16_AB","protocol": "MODBUSRTU","rate": 1,"round": "all","slaveid": "0X10","strategy": "主动上报"},"dataSource": {"": [],"_dlinkindex": 1,"address": "0X00","operatetype": "writeCoil","originaltype": "bit","registersnumber": "1","slaveid": "0X01"},"dataType": {"das": [],"specs": {"0": "关","1": "开"},"type": "enum"},"devicetype": "控制0","identifier": "control0","isaccumulate": false,"isshow": false,"isstorage": false,"moduleType": "properties","name": "control0","required": true,"updateAt": "1693202658593","index": 2}]
}

低代码json

return {...api,data:{profile:{control0:api.data.control0  }}
}

【此处为开关控件-验证-发送适配器的接口代码。其中control0为该组件绑定的物模型的标识符】


[小 迪 点 评]

  • 手动配置控制指令,一次配置支持后续大量同类设备接入
  • 丰富的可拓展性,通过配置不同的api接口和页面实现一个网页全控制效果

想了解更多 dgiot 的具体细节,欢迎大家在GitHub上查看相关源代码。

相关文章:

DGIOT-Modbus-RTU控制指令05、06的配置与下发

[小 迪 导 读]:伴随工业物联网在实际应用中普及,Modbus-RTU作为行业内的标准化通讯协议。在为物联网起到采集作用的同时,设备的控制也是一个密不可分的环节。 场景解析:在使用Modbus对设备进行采集后,可以通过自动控制…...

机器学习实战-系列教程8:SVM分类实战3非线性SVM(鸢尾花数据集/软间隔/线性SVM/非线性SVM/scikit-learn框架)项目实战、代码解读

🌈🌈🌈机器学习 实战系列 总目录 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 SVM分类实战1之简单SVM分类 SVM分类实战2线性SVM SVM分类实战3非线性SVM 4、非线性SVM 4.1 创建非线性数据 from sklearn.data…...

计算机网络-谢希任第八版学习笔记总结

一.计算机网络概述 21世纪三个特点 数字化 信息化 智能化,其中主要是围绕智能化。 网络的常见分类: 电话网络 有线电视网络 计算机网络 互联网:Internet 由数量极大的计算机网络相连接 特点: 共享性 连通性 互联网&…...

手写Spring:第5章-注入属性和依赖对象

文章目录 一、目标:注入属性和依赖对象二、设计:注入属性和依赖对象三、实现:注入属性和依赖对象3.0 引入依赖3.1 工程结构3.2 注入属性和依赖对象类图3.3 定义属性值和属性集合3.3.1 定义属性值3.3.2 定义属性集合 3.4 Bean定义补全3.5 Bean…...

初识集合框架 -Java

目录 一、集合框架的概念 二、集合框架的重要性 三、涉及的数据结构和算法 3.1 什么是数据结构 3.2 集合框架(容器)背后对应的数据结构 3.3 相关的Java知识 3.4 什么是算法 3.5 如何学好数据结构和算法 一、集合框架的概念 Java 集合框架,…...

目标检测笔记(十五): 使用YOLOX完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)

文章目录 一、目标检测介绍二、YOLOX介绍三、源码获取四、环境搭建4.1 环境检测 五、数据集准备六、模型训练七、模型验证八、模型测试 一、目标检测介绍 目标检测(Object Detection)是计算机视觉领域的一项重要技术,旨在识别图像或视频中的…...

深眸科技自研轻辙视觉引擎,以AI机器视觉赋能杆号牌识别与分拣

电线杆号牌作为电力行业标识的一种,相当于电线杆的“身份证”,担负着宣传电力知识、安全警示的作用,用于户外使用标记输电线路电压等级、线路名称、杆塔编号等,能够清晰地记录电力线路杆的信息,并为电力线路的更改以及…...

Shell命令管理进程

Shell命令管理进程 列出进程 ps命令 top命令 管理后台进程 启动后台进程 查看后台进程 jobs和ps的区别 停止进程 Linux除了是一种多用户操作系统之外,还是一种多任务系统。多任务意味着可以同时运行多个程序。Linux 提供了相关的工具来列出运行中的进程,监视…...

python创建exe文件

1、搭建环境 pip install pyinstaller 2、准备测试代码 exe_test.py import timeprint("hello") print("hello") print("hello") print("hello")time.sleep(5) 注:添加sleep以便在执行exe文件的时候能看到结果 3、生…...

【数据结构】AVL树的插入与验证

文章目录 一、基本概念1.发展背景2.性质 二、实现原理①插入操作1.平衡因子1.1平衡因子的更新1.1.1树的高度变化1.1.2树的高度不变 2. 旋转2.1左旋2.2右旋2.3右左双旋2.4 左右双旋 ②验证1.求二叉树高度2. 判断是否为AVL树 源码总结 一、基本概念 1.发展背景 普通的二叉搜索树…...

9.3.3网络原理(网络层IP)

一.报文: 1.4位版本号:IPv4和IPv6(其它可能是实验室版本). 2.4位首部长度:和TCP一样,可变长,带选项,单位是4字节. 3.8位服务类型 4.16位总长度:IP报头 IP载荷 传输层是不知道载荷长度的,需要网络层来计算. IP报文 - IP报头 IP载荷 TCP报文 TCP载荷 IP载荷(TCP报文) …...

代码随想录算法训练营第四十八天| LeetCode121. 买卖股票的最佳时机、122.买卖股票的最佳时机II、123.买卖股票的最佳时机III

121. 买卖股票的最佳时机 题目描述: 121. 买卖股票的最佳时机. 解法 dp class Solution(object):def maxProfit(self, prices):if not prices:return 0dp0 0# 0表示不持有股票,1表示持有股票dp1 0-prices[0]for i in range(1,len(prices)):# 当前没有股票# 两…...

C++新经典10--vector以及其使用

vector vector类型是一个标准库中的类型,代表一个容器、集合或者动态数组这样一种概念。既然是容器,那就可以把若干个对象放到里面。当然,这些对象的类型必须相同。简单来说,可以把一堆int型数字放到vector容器中去,复…...

std : : vector

一.简介 std::vector 的底层实现通常基于动态数组(dynamic array),它是一种连续分配的内存块,允许元素的快速随机访问。下面是 std::vector 的一些关键特点和底层实现细节: 连续内存块:std::vector 内部使…...

AJAX学习笔记8 跨域问题及解决方案

AJAX学习笔记7 AJAX实现省市联动_biubiubiu0706的博客-CSDN博客 跨域:指一个域名的网页去请求另外一个域名资源.比如百度页面去请求京东页面资源. 同源与不同源三要素:协议,域名,端口 协议一致,域名一致,端口一致.才算是同源.其他一律不同源 新建项目测试: 1.window.open();…...

webhook--详解(gitee 推送)

一、简介 webhook 是一种基于 HTTP 的回调函数,可在 2 个应用编程接口(API)之间实现轻量级的事件驱动通信。是一种新型的前后端交互方式,一种对客户端-服务器模式的逆转,在传统方法中,客户端从服务器请求数…...

高速路自动驾驶功能HWP功能定义

一、功能定义 高速路自动驾驶功能HWP是指在一般畅通高速公路或城市快速路上驾驶员可以放开双手双脚,同时注意力可在较长时间内从驾驶环境中转移,做一些诸如看手机、接电话、看风景等活动,该系统最低工作速度为60kph。 如上两种不同环境和速度…...

Leetcode113. 路径总和 II

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 官方题解:力扣(LeetCode)官网 - 全…...

分布式锁之redis实现

docker安装redis 拉取镜像 docker pull redis:6.2.6 查看镜像 启动容器并挂载目录 需要挂在的data和redis.conf自行创建即可 docker run --restart always -d -v /usr/local/docker/redis/redis.conf:/usr/local/etc/redis/redis.conf -v /usr/local/docker/redis/data:/dat…...

Idea中如何在一个项目中引入其他子模块?

首先在Settings打开Project Structure,然后找到Modules,点击加号点击import module,将需要引进的module引进来。 然后点击Artifacts 可以看到比如说day22…这个是我现在的项目,day16是我需要引入的。那么就在红色横线上面右键点第…...

5个Zutilo技巧让你成为Zotero文献管理高手

5个Zutilo技巧让你成为Zotero文献管理高手 【免费下载链接】Zutilo Zotero plugin providing some additional editing features 项目地址: https://gitcode.com/gh_mirrors/zu/Zutilo 还在为Zotero的批量操作烦恼吗?每天面对成百上千的文献条目,…...

Sketch Find and Replace终极指南:设计师必备的批量文本替换神器

Sketch Find and Replace终极指南:设计师必备的批量文本替换神器 【免费下载链接】Sketch-Find-And-Replace Sketch plugin to do a find and replace on text within layers 项目地址: https://gitcode.com/gh_mirrors/sk/Sketch-Find-And-Replace 还在为Sk…...

DoL-Lyra游戏增强工具新手入门

DoL-Lyra游戏增强工具新手入门 【免费下载链接】DOL-CHS-MODS Degrees of Lewdity 整合 项目地址: https://gitcode.com/gh_mirrors/do/DOL-CHS-MODS DoL-Lyra游戏增强工具是一款专为Degrees of Lewdity游戏设计的完整整合方案,集成了最新汉化补丁、视觉增强…...

别再只调包了!用PyTorch从零手搓一个Unet,搞懂语义分割的每个细节

从零构建Unet:深入解析语义分割的代码实现与设计哲学 在计算机视觉领域,语义分割一直是极具挑战性的任务之一。不同于简单的图像分类,语义分割需要模型对图像中的每一个像素进行分类,这要求模型既要理解全局上下文信息&#xff0c…...

Zotero中文文献管理终极指南:三步彻底解决知网PDF元数据抓取难题

Zotero中文文献管理终极指南:三步彻底解决知网PDF元数据抓取难题 【免费下载链接】jasminum A Zotero add-on to retrive CNKI meta data. 一个简单的Zotero 插件,用于识别中文元数据 项目地址: https://gitcode.com/gh_mirrors/ja/jasminum 你是…...

WPF动画避坑指南:Blend路径动画Canvas.Left与RenderTransform的实战选择(附性能对比)

WPF动画避坑指南:Blend路径动画Canvas.Left与RenderTransform的实战选择(附性能对比) 在WPF开发中,动画效果的实现往往让开发者陷入选择困境。特别是当我们需要让UI元素沿着复杂路径运动时,Canvas.Left/Top与RenderTra…...

ADB 配置 + 入门使用全攻略,零基础看完就精通

一、ADB简介 1、什么是adb ADB 全称为 Android Debug Bridge,起到调试桥的作用,是一个客户端-服务器端程序。其中客户端是用来操作的电脑,服务端是 Android 设备。 ADB 也是 Android SDK 中的一个工具,可以直接操作管理 Androi…...

Thorium浏览器终极指南:如何打造最快的Chromium分支浏览器

Thorium浏览器终极指南:如何打造最快的Chromium分支浏览器 【免费下载链接】thorium Chromium fork named after radioactive element No. 90. Source code and Linux releases. Windows/MacOS/ARM builds served in different repos, links are towards the top of…...

牛津树资源合集

022-牛津树学校版 1-16级 文件大小: 6.8GB内容特色: 16阶校园版绘本音频一次打包,6.8G进阶无痛适用人群: 想省补习费的3-12岁家长核心价值: 跟着牛津进度走,词汇语感双飙升下载链接: https://pan.quark.cn/s/1ae54f5fbf4f Susan教英语《牛津树家庭版 L…...

英雄联盟游戏效率工具League Akari:智能自动化与数据分析完整指南

英雄联盟游戏效率工具League Akari:智能自动化与数据分析完整指南 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 还在为BP阶段手速…...