Skip to main content

教程概述

本教程首先通过全链路虚拟环境讲述如何用dgiot开源工业物联网平台完成电力集抄项目,在掌握基础概念和业务流程之后,通过真实的电表和DTU来进行实战演练。

dgiot电力集抄教程.png

操作步骤

  1. 创建虚拟串口

  2. 创建虚拟电表

  3. 创建虚拟DTU

  4. 学习电表协议

  5. 了解物理DTU

  6. 设计数据模型

  7. 开发通道插件

  8. 开发应用软件

    虚拟串口

    部署软件

    点击下载,解压到D盘根目录,目录结构如下D:\virtual_serialport

  • 选中D:\virtual_serialport\vspdxp_install.exe 选择管理员运行,提示安装成功

    配对串口

  • 选中D:\virtual_serialport\vspdconfig.exe 选择管理员运行 选择virtual ports 在Manage ports中 点击addpair 生成一对串口,例如COM1和COM2 vitual_serialport_demo.png

    配对串口分配

     COM1-- METER
    |
    |
    COM2 -- DTU

    注意 虚拟电表和虚拟DTU的串口配置必须一一致

虚拟电表

  1. 获取软件

    点击下载,解压到D盘根目录,目录结构如下D:\meter_v2.7.1

  2. 注册OCX

  • win7 用管理员启动cmd窗口

     D:\meter_v2.7.1\ocx
    copy Mscomm.srg C:\Windows\System\
    copy Mscomm32.dep C:\Windows\System\
    copy Mscomm32.ocx C:\Windows\System\
    Regsvr32 C:\Windows\System\\MSCOMM32.OCX
  • win10

       D:\meter_v2.7.1\ocx
    copy Mscomm.srg C:\Windows\SysWOW64\
    copy Mscomm32.dep C:\Windows\SysWOW64\
    copy Mscomm32.ocx C:\Windows\SysWOW64\
    Regsvr32 C:\Windows\SysWOW64\MSCOMM32.OCX

    提示DllRegisterServer 在MSCOMM32.OCX 已成功

    3、启动软件

    选中 D:\meter_v2.7.1\645MeterV2.7.1.exe 软件,右击鼠标,选择以管理员启动软件界面

    meter_demo.png

    4、打开串口 选择上一步创建的成对串口 com1,波特率:115200,校验位:无,数据位:8 停止位:1

产品说明

虚拟表V2.5.2是根据DL/T645-1997规约、DL/T645-2007规约、上海规约和BNC智能终端规约设计的虚拟电表软件。

本软件主要的操作说明如下:

  1. 下拉菜单的电表参数包括:
  • 功能类:中继测试,侦听测试,白名单测试,黑名单测试,区间表单测试,不识别表号

    1. 中继测试只针对TCT监控模块虚拟表模式;

    2. 侦听测试可针对监控645的TCT模块,监控载波的TCT模块或者监控串口数据的交互,对接收的数据进行解析(如果是监控载波鼎信报文,选择单/三相显示,可完成侦听记录/侦听报文的显示在“按相位分屏”和“不分屏”之间切换);

    3. 白名单为选中的表号有效;

    4. 黑名单为选中的表号无效;

    5. 区间表单为接收到所填黑名单区间内的表号无效;

    6. 不识别表号为对任意表号命令均有效。

  • 命令类:设置底度----设置电量的底度。

  • 使能类:前导符FE,编程开关,支持跨相,通道芯片,长帧测试,自设回复,循环回复。

    1. 前导符FE----选中响应帧有4个0xFE作为前导符;

    2. 编程开关----选中才能写设备地址地址有效;

    3. 支持跨相----只有中继测试时有效,选中则不进行相位比较,返回的相位信息为自身所处相位(目前表所处相位是根据表号决定,表号除以3,余数为0,相位为C相;相余数为1,相位为A相;余数为2,相位为B相);

    4. 通道芯片----中继测试时无效,不选中时响应的报文带1字节的相位信息;

    5. 长帧测试----自定义长帧测试的数据标识。

      设置长帧命令表示当接到这条命令,将数据标识后的数据内容存储起来,最大255个字节,响应报文的数据域只有数据标识;

      读取长帧命令表示当接到这条命令,按数据标识后设置的长度(1字节,小于之前发送的存储数据长度)回复之前存储的数据内容。

    6. 自设回复----自定义响应报文的内容

      选中自设回复后,任何命令都将按自定义的报文进行响应。

      控制码:1个字节

      数据域:使用者自定义数据域内容,可自由选择是否加0x33或数据域翻转处理,最大255个字节。

      后续字节:使用者自定义在645响应帧后添加的内容。

    7. 循环回复----按规律循环回复特定报文,使用者可自定义起始字节数和终止字节数,范围为0~255。

    注意: 自设回复和循环回复使能二选一,不能同时有效。 表类型:新载波表,采集器,开箱监视器,旧载波表

  1. 事件上报功能

注意: 使用者自行定义四个输入框内容

  • 命令框:读事件上报的命令
  • 响应框:上报的事件
  • 取消框:取消事件上报状态的命令
  • 结束框:回复事件上报状态已取消
  • I/O配置:选择为硬件设置,只需点击“事件使能”就置上事件上报状态;不选择为软件设置,点击“事件使能”后接受到特定报文才置上事件上报状态。
  1. 快捷键

ALT+S:在1200 / 2400 / 4800 / 9600bps之间快速切换串口波特率。 ALT+A:快速切换是否循环回复。

  1. 可变速率 选中时此表为可变速率表,支持从1200,2400,4800,9600自动向上变速,变速条件为正确应答使用者规定的次数。

  2. 命令选择

使用者可自定义哪些命令响应,哪些命令不响应,其中选中的命令会响应。

注意:现在只针对DL/T645-1997的两条读表号命令。

  1. 提示说明

在软件开启时,在操作记录中将对主要的几个菜单选项进行提示,帮助使用者更好地确定软件应用时的条件。

  1. 645显示

只处理DL/T645协议报文。

8.延时选择

只在645显示被选择时使能。

  1. 响应延迟

    收到命令帧后响应延迟,范围为0-5000ms。

  2. 字节延迟

    字节之间停顿时间, 范围为0-5000ms。

  3. 首字节后延迟

    首字节响应后停顿时间, 范围为0-500ms。

    只在首字节响应后,虚拟表会延迟延时响应后续字节。

    如果选择随机,虚拟表将在0至所选时间内随机一个时间后对命令进行各种延迟。

  4. 鼎信显示

    只在侦听测试模式下显示鼎信协议报文,解析报文。

  5. 鼎信不解析

只在侦听测试模式下显示鼎信协议报文,不解析报文。

  1. 自定义数据

按测试要求填写一些645数据项内容。

  1. 组命令帧

弹出命令发送组帧窗口,这是模拟通道芯片下的设备作为主动发起方,命令帧格式必须符合645规约格式。

需要通信的表号会列于列表中,使用者可以直接用txt文档导入表号,或者一个个输入编辑,双击表号改变表号的选择状态,或者使用右键全部选择/全部取消。

控制码:1个字节

数据域内容:

  1. 645数据标识

    97为2个字节,07为4个字节,填写的内容无需加0x33和翻转处理。

  2. 645数据帧格式

    完整的645帧,需要表号,控制码和数据内容三个部分。

  3. 自定义数据格式

    数据域内容由使用者自定义。

注:如果提示类没有注册,请安装微软运行库即可

虚拟DTU

  1. 获取软件

    下载DGIOT-DTU,解压到D盘根目录,目录结构如下D:\dgiot_dtu

    下载TCP_SERVER,双击安装,

  2. 运行软件

  • 在tcp server软件,开启tcp server服务器, 监听端口8067
  • 在dgiot_dtu 选择上一步创建的成对串口 com2,波特率:115200,校验位:无,数据位:8 停止位:1
  • 在dgiot_dtu 选择tcp client连接地址127.0.0.1 和端口8076,默认登陆地址为 12345678
  • 在dgiot_dtu点击开始建立com2的tcp桥接virtual_dtu_demo.png 至此,设备层的虚拟环境准备完毕,下一步准备电表采集通道开发

数字孪生

###前言

计算、通信和控制三元组

15.webp.jpg

17.webp.jpg

实现数字孪生的技术路径一般通过CPS系统来承载,在dgiot平台中体现为三个[通道插件]

  • dgiot任务通道(控制)

  • dgiot存储通道 (计算)

  • dgiot(电表)采集通道 (通信)

    dgiot任务通道(控制)与dgiot存储通道 (计算) 已经做成公共通道,可以直接使用,dgiot(电表)采集通道 (通信)与业务相关性强, 需要根据业务定制,下面我们重点讲解如何定制这个通道。

    操作步骤

    dgiot任务通道(控制)

    dgiot存储通道 (计算)

    dgiot(电表)采集通道 (通信)

通道开发

本节结合电力抄表的用户场景与业务流程, 讲述如何通过用户权限、产品设备、物模型等一些概念来设计数据模型,完成从实入虚的转换。

一点心得

这几年在物联网项目中爬坑的一点心,套用道家几句话,希望能对您今后的工业物联网实践有帮助

  • 顺其自然

    调研阶段要多观察,抓住物理层本身的规律,抓住事物的本质,不要凭空胡思乱想

  • 清净无为

    设计阶段要如庖丁解牛,顺着物理层本身关系,去映射虚拟层,不要凭空添加路由

  • 万物均衡

    运营阶段要不偏不倚, 在时空维度上做好均衡,进行各种削峰处理,保持长期稳定运行

    典型案例是陶总在时间维度对物的观察创造了Tdengine,Joe Armstrong在空间维度对物的观察创造了Erlang

用户场景

从用户到设备,主要需要解决如下几个问题:

  • 人与设备的关系,User基于流动性,权限系统里一般不会直接绑定User与Device的权限关系,中间会通过Department(Role)来间接绑定ACL

  • 设备与设备的关系,设备与设备之间有可能存在真实的关系,例如DTU与Meter,也可能只有一种虚拟关系,例如Group与DTU,属于因工程需要,临时拉群

  • 对具体设备来说,1、需要一个UID来表征身份;2、需要一个route来表征关系;3、需要多个tag来表征特征

  • 重点讨论Meter、DTU和TCP Server的交互过程

    No.名称MeterDTUTCP Server说明
    1连接send -> [IP]ack <-- [IP]必选
    2登陆send -> [DtuAddr]ack <-- [DtuAddr]可选,可用IP代替
    3扫串口ack-> [485]send <-- [search 485]send <--[search 485]可选,有档案可免
    4扫modbusack-> [modbus]send <-- [search modbus]send <--[search modbus]可选,有档案可免
    5扫表ack-> [Meter Addr]send <-- [search meter]send <--[search meter]可选,有档案可免
    6抄表ack-> [Meter Data]send <-- [read meter]send <--[read meter]必选
    7写表ack-> [Meter Control]send <-- [write meter]send <--[write meter]可选
    8登出send -> [DtuAddr]ack <-- [DtuAddr]可选
    9断开send -> [IP]do_something必选

    扫串口、扫描modbus、扫表是一个费时费流量的操作,例如扫表一般至少需要扫256次,一般只会在物联网工程施工阶段进行,并完成相应的自动注册功能,形成设备档案,正常运行中不进行这些操作。

    这也是为什么电力抄表非常强调电表档案建设,如果没有档案,每一次DTU掉线都需要重新进行非常耗时耗流量的扫描任务

交互流程

 ---------------------------------------------------------------------------------------------------------------------
| 物理层 | 连接层 | 虚拟层 | 应用层|
---------------------------------------------------------------------------------------------------------------------
User1(Session) User2(Session)
| |
API API <--http--> shuwa_rest --+
| | |
+ + |
Department1(Role) Department2(Role) |
| | |
ACL ACL <--parse--> shuaw_parse --+
+ + | +-- 时序数据--+
Group(Devcie) Group(Devcie) | | |
| | | === 流计算==> 物理层镜像 +--> 批量计算
+--------+-------+ + | | |
| | | | +-- 关系数据--+
DTU1(Device1) DTU2(Device) DTU3(Device) <--tcp--> tcp_server ---+
| | | |
modbus modbus modbus <--modbus--> proctol ---+
| | | |
+ + + |
485 485 485 <--485--> proctol --+
| | | |
+ + +--------+--------+ |
| | | | |
Meter1(Device) Meter2(Device) Meter4(Device)Meter5(Device)<--DLT/645--> proctol --+

在正式动手之前,请先体会一下心得和理解用户场景

用户权限

角色(Role)是资源的拥有者以及传递者。 用户(User)是角色的实例化。

如何创建角色

第一步

点击“多租户”进入多租户页面,再点击“角色管理”进入角色管理页面,最后点击已有角色后的“+”图标添加新角色。 role_manage1.png

第二步

为新角色设置相应的角色名,部门,岗位,备注(角色名与备注必填) role_manage2.png 第三步

为新角色分配对应的权限,分配对应的菜单。 role_manage3.png 完成后即创建完成。

如何创建用户

用户的权限资源均来自于角色,即权限资源先分配给角色,然后用户关联该角色。

第一步

点击“多租户”进入多租户页面,再点击“用户管理”进入用户管理页面,最后点击已有角色后的“+”图标添加新用户。 user_manage1.png

第二步

为新用户设置相应的姓名,手机号,邮箱,账号,密码,选择对应部门。 user_manage2.png

第三步

用新建的用户登录。 user_manage3.png 可以看到之前分配的菜单界面 user_manage4.png

名词解释

术语描述
角色(Role)资源权限的拥有者以及传递者
用户(User)资源权限的具体操作者
部门(department)角色的映射,方便使用者记忆使用
岗位角色权限的具体实例化

产品设备

使用物联网平台的第一步是在控制台创建产品。产品是设备的集合,通常是一组具有相同功能定义的设备集合。例如,产品指同一个型号的产品,设备就是该型号下的某个设备。

  • 产品:设备的集合,指一组具有相同功能的设备。在这个界面,你可以给其配置物模型、物接入与物存储。物模型是对设备在云端的功能描述,包括设备的属性、服务和事件。物联网平台通过定义一种物的描述语言来描述物模型,称之为TSL(即Thing Specification Language ),采用JSON格式,我们根据TSL组装上报设备的数据。在产品界面,我们可以运行或编辑组态。
  • 设备:归属于某个产品下的具体设备。设备可以直接连接物联网平台,也可以作为子设备通过网关连接物联网平台。在这个界面,你可以对设备进行增删查改等编辑操作,并可组态展示设备的当前状态。

    如何创建产品

    登录平台控制台。 在左侧导航栏,选择设备云 > 产品管理 >创建产品,单击创建产品。 按照页面提示填写信息,然后单击确认。 product_manage1.pngproduct_manage2.png
    参数描述
    产品名称为产品命名,产品名称在账号内具有唯一性
    产品分组产品标识,用于区分不同设备
    所属分类该产品的类型
    所属应用拥有该产品的角色
    节点类型产品下设备的类型,分为设备和网关
    连网方式直连设备和网关设备的连网方式
    产品描述可输入文字,用来描述产品信息

后续操作

在“产品管理”控制台下,可以进行产品开发,设备管理等操作。

  • 产品管理

    选择“产品管理”,在产品列表,操作栏中,单击“配置”,进入“产品详情”页。单击相应页签,查看产品信息、Topic类列表,设置自定义Topic、物模型、物解析、物接入、物存储等。 product_manage3.png

    product_manage4.png

  • 设备管理 单击产品详情页的设备开发页签,跟随界面提示进行设备创建、功能开发、连接验证,完成设备开发,接入物联网平台。

添加物模型

  • 自定义属性添加 product_manage5.png 填写名称,标识符,取值范围,数据类型,单位等值 product_manage6.png

    其中各项含义见下表

    名称含义
    功能名称物模型的作用,实现的功能
    标识符唯一识别物模型,一般用功能名称的英文翻译
    取值范围(数值)物模型的取值范围
    步长即step,物模型取值依次增长的幅度
    读写类型读写:文档或属性既能读取,也能修改 只读:又称唯读,表示文档或属性只能读取,不能修改也不能存储。
    数据类型物模型的数据类型,可选择
    采集公式我们需要的数据与采集的数据之间的数学关系式 %q:数据标识第二个空里面的数据 %s:采集到的数据 %r:采集的轮次
    控制公式控制数据采集的次数或满足特殊的采集需求(true为1,false为大于1的其他数字)
    数据标识第一个空address地址值。如果是modbus协议,则数据标识表示传感器的寄存器地址。 否则用唯一数字字母组合标识即可。相应传感器说明手册可查。
    数据标识第二个空即%q。如果读写类型选的只读,则此处填字节数。 如果读写类型选的读写,用于modbus协议,表示参数地址,或模拟量的功能码。相应传感器说明手册可查。进制,十进制。
    协议类型我们可以选择modbus协议,否则就是normal
    字节序大端:高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。 小端:低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。
    寄存器状态线圈状态:读从机离散量输出口的ON/OFF状态。 读输入状态:读从机离散量输入信号的ON/OFF状态。 保持寄存器:可以通过通信命令读或者写的寄存器 输入寄存器:只能读不能写的寄存器
    从机地址从机的address,用于modbus通讯。相应传感器说明手册可查。进制:十进制
  • 标准属性的添加

    点击“新增标准属性” product_manage7.png product_manage8.png 自动添加相关属性 product_manage9.png

  • 添加物接入

    选择物接入,选择通道 注:每次添加通道后,需重启对应的通道,即禁用通道后再启用 product_manage10.png product_manage11.png

  • 物存储 选择物存储,选择通道 注:每次添加通道后,需重启对应的通道,即禁用通道后再启用 product_manage12.png

如何添加设备

左侧导航栏选择设备管理,点击设备添加; 依次填写名称,设备编号,资产编号,型号,品牌,选择对应的产品等 product_manage14.png product_manage13.png

应用开发

用户场景

从用户到设备,主要需要解决如下几个问题:

  • 人与设备的关系,User基于流动性,权限系统里一般不会直接绑定User与Device的权限关系,中间会通过Department(Role)来间接绑定ACL
  • 设备与设备的关系,设备与设备之间有可能存在真实的关系,例如DTU与Meter,也可能只有一种虚拟关系,例如Group与DTU,属于因工程需要,临时拉群
  • 对具体设备来说,1、需要一个UID来表征身份;2、需要一个route来表征关系;3、需要多个tag来表征特征
  • 重点讨论Meter、DTU和TCP Server的交互过程
    No.名称MeterDTUTCP Server说明
    1连接send -> [IP]ack <-- [IP]必选
    2登陆send -> [DtuAddr]ack <-- [DtuAddr]可选,可用IP代替
    3扫串口ack-> [485]send <-- [search 485]send <--[search 485]可选,有档案可免
    4扫modbusack-> [modbus]send <-- [search modbus]send <--[search modbus]可选,有档案可免
    5扫表ack-> [Meter Addr]send <-- [search meter]send <--[search meter]可选,有档案可免
    6抄表ack-> [Meter Data]send <-- [read meter]send <--[read meter]必选
    7写表ack-> [Meter Control]send <-- [write meter]send <--[write meter]可选
    8登出send -> [DtuAddr]ack <-- [DtuAddr]可选
    9断开send -> [IP]do_something必选
    扫串口、扫描modbus、扫表是一个费时费流量的操作,例如扫表一般至少需要扫256次,一般只会在物联网工程施工阶段进行,并完成相应的自动注册功能,形成设备档案,正常运行中不进行这些操作。 这也是为什么电力抄表非常强调电表档案建设,如果没有档案,每一次DTU掉线都需要重新进行非常耗时耗流量的扫描任务 整体交互流程如下
    ---------------------------------------------------------------------------------------------------------------------
    | 物理层 | 连接层 | 虚拟层 | 应用层|
    ---------------------------------------------------------------------------------------------------------------------
    User1(Session) User2(Session)
    | |
    API API <--http--> shuwa_rest --+
    | | |
    + + |
    Department1(Role) Department2(Role) |
    | | |
    ACL ACL <--parse--> shuaw_parse --+
    + + | +-- 时序数据--+
    Group(Devcie) Group(Devcie) | | |
    | | | === 流计算==> 物理层镜像 +--> 批量计算
    +--------+-------+ + | | |
    | | | | +-- 关系数据--+
    DTU1(Device1) DTU2(Device) DTU3(Device) <--tcp--> tcp_server ---+
    | | | |
    modbus modbus modbus <--modbus--> proctol ---+
    | | | |
    + + + |
    485 485 485 <--485--> proctol --+
    | | | |
    + + +--------+--------+ |
    | | | | |
    Meter1(Device) Meter2(Device) Meter4(Device)Meter5(Device)<--DLT/645--> proctol --+
    在正式动手之前,请先体会一下心得和理解用户场景

培训纲要

  • 学会创建一个部门
  • 学会创建一个岗位
  • 学会创建一个用户
  • 学会创建一个应用
  • 学习创建一个API
  • 学会创建一个分组
  • 学会创建一个产品
  • 学会创建一个设备
  • 学会创建一个指令
  • 学会创建一个子设备
  • 学会创建一个物模型
  • 学会创建一个组态
  • 学会创建一个通道
  • 学会创建一个规则
  • 学会开发一个插件
  • 学会接入一个设备
  • 学会设计一个统计量
  • 学会状态迁移编程
  • 学会网络通信编程
  • 学会消息路由编程
  • 学会设备动态注册

详细步骤