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

这篇具有很好参考价值的文章主要介绍了DGIOT-Modbus-RTU控制指令05、06的配置与下发。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

DGIOT-Modbus-RTU控制指令05、06的配置与下发,物联网,DGIOT物联网开发,struts,java,后端

[小 迪 导 读]:伴随工业物联网在实际应用中普及,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 设备登录报文校验,*代表任意字符

DGIOT-Modbus-RTU控制指令05、06的配置与下发,物联网,DGIOT物联网开发,struts,java,后端

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

DGIOT-Modbus-RTU控制指令05、06的配置与下发,物联网,DGIOT物联网开发,struts,java,后端

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

DGIOT-Modbus-RTU控制指令05、06的配置与下发,物联网,DGIOT物联网开发,struts,java,后端

DGIOT-Modbus-RTU控制指令05、06的配置与下发,物联网,DGIOT物联网开发,struts,java,后端

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

DGIOT-Modbus-RTU控制指令05、06的配置与下发,物联网,DGIOT物联网开发,struts,java,后端

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

DGIOT-Modbus-RTU控制指令05、06的配置与下发,物联网,DGIOT物联网开发,struts,java,后端

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

DGIOT-Modbus-RTU控制指令05、06的配置与下发,物联网,DGIOT物联网开发,struts,java,后端

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

DGIOT-Modbus-RTU控制指令05、06的配置与下发,物联网,DGIOT物联网开发,struts,java,后端

6.成果展示。再次上线设备后,我们在设备管理内找到设备,点击后面的“控制”按钮进入到配置好的界面。然后通过点击触发开关实现数据的控制指令的数据下发。
DGIOT-Modbus-RTU控制指令05、06的配置与下发,物联网,DGIOT物联网开发,struts,java,后端


物模型代码

{
    "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上查看相关源代码。文章来源地址https://www.toymoban.com/news/detail-704923.html

到了这里,关于DGIOT-Modbus-RTU控制指令05、06的配置与下发的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Modbus-RTU功能码

    以下图片中的帧解析都不含站号和校验码 在一个远程设备中,使用该功能码读取线圈的 1 至 2000 连续状态。请求 PDU (功能码-地址-数据)详细说明了起始地址,即指定的第一个线圈地址和线圈编号。从零开始寻址线圈。因此寻址线圈 1-16 为 0-15(PLC地址一般也是这样,寄存器

    2024年02月04日
    浏览(36)
  • C# ModBus协议(RTU )详细指南

    ModBus协议:官方的解释是Modbus协议是一种通信协议,用于在自动化设备之间进行数据传输。它最初是由Modicon公司于1979年开发的,现在已成为工业界的一种通用协议。Modbus协议有多种变体,包括 Modbus-RTU、Modbus-TCP和Modbus-ASCII 等,其中Modbus-RTU是最常用的变体之一。Modbus协议基于

    2024年02月04日
    浏览(48)
  • MODBUS RTU协议原理及功能码解析

    目录                         第一部分 MODBUS RTU协议原理 1.1 简介 1.2 RTU传输模式 1.3 MODBUS报文帧 1.4 CRC校验                 第二部分 MODBUS RTU模式下功能码解析 2.1 Modbus-RTU协议简介 2.2 部分功能码名词解释 2.3 部分功能码解析 01功能码 –读线圈状态 0

    2024年02月02日
    浏览(36)
  • modbus-tcp-rtu协议图表

    MODBUS TCP 读寄存器 请求 序号 意义 所占字节 字节存放格式 1 事务处理标识 2个字节 高字节在前 2 协议标识 2个字节 高字节在前 3 长度 2个字节 高字节在前 4 单元标识 1个字节 0x00-0xff 5 功能码 1个字节 0x03 6 起始寄存器地址 2个字节 高字节在前 7 寄存器个数 2个字节 高字节在前

    2024年01月23日
    浏览(27)
  • Modbus-RTU协议C#实现

    1、安装依赖包 System.IO.Ports 2、读协议 3、写协议 4、CRC16校验

    2024年02月15日
    浏览(43)
  • Modbus RTU通讯实例:安科瑞电表通讯

    方法有两种,一种是从电表的侧面直接查看,端子为30、31分A、B两种,A+、B-接USB线的相应位置如下图 第二则是从用户手册里读取,有需要的朋友可以私信我,无偿。 我用的是dtech的usb2.0转422RS485线,一般在内部就有二维码,可以下载出来串口驱动 我这里使用的是HslCommunica

    2024年02月14日
    浏览(33)
  • STM32开发之Modbus协议(RTU从站)

    说明 1、本文不做协议格式的讲解,只做实现,如需了解协议格式,自行搜索 2、本文不依赖于硬件相关的资源,建立在硬件通讯之上,通过回调的形式和对应的硬件进行关联 3、相关协议内容参照,上一篇RTU主站 宏定义(modbus_core_define) crc校验(modbus_core_crc) 头文件 源文件

    2024年02月11日
    浏览(30)
  • STM32开发之Modbus协议(主站RTU)

    在单片机方面,针对于通讯常用的协议之一modbus,这里将modbus协议和硬件之间的关系完全独立出来,硬件和协议之间的联系采用的是回调的方式进行一个关联。 1、此协议可直接移植,并不需要关心硬件相关的。 2、modbus相关协议概念自行查找,本文只做代码的实现。 宏定义(

    2024年02月12日
    浏览(34)
  • MODBUS RTU 通信协议 CRC16校验算法

    CRC校验码是一个2个字节(16位二进制)的数。 发送端:发送的数据计算CRC校验码----发送:数据+CRC校验码 接收端:收到数据后重新计算CRC校验码,然后和接收到数据中的CRC校验码进行比较,判断是否相等。 如果不相等:数据传输过程中出错,给出错误应答。 CRC16 校验源码

    2024年02月16日
    浏览(40)
  • Modbus RTU 、Modbus ASCII及Modbus TCP驱动代码,支持主机和从机两种模式

    本篇博文分享一款开源的Modbus协议栈。 协议栈支持Modbus主机和从机两种模式,并且支持两种模式同时开启。从机支持Modbus RTU 、Modbus ASCII及Modbus TCP 3种模式,主机现在只支持常用的Modbus RTU模式。 资源下载:https://download.csdn.net/download/m0_38106923/87997766 源文件 描述 FreeModbusmodb

    2024年02月12日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包