教程概述
本教程首先通过全链路虚拟环境讲述如何用dgiot开源工业物联网平台完成电力集抄项目,在掌握基础概念和业务流程之后,通过真实的电表和DTU来进行实战演练。
操作步骤:
创建虚拟串口
创建虚拟电表
创建虚拟DTU
学习电表协议
了解物理DTU
设计数据模型
开发通道插件
开发应用软件
虚拟串口
部署软件
点击下载,解压到D盘根目录,目录结构如下D:\virtual_serialport
选中D:\virtual_serialport\vspdxp_install.exe 选择管理员运行,提示安装成功
配对串口
选中D:\virtual_serialport\vspdconfig.exe 选择管理员运行 选择virtual ports 在Manage ports中 点击addpair 生成一对串口,例如COM1和COM2
配对串口分配
COM1-- METER
|
|
COM2 -- DTU注意 虚拟电表和虚拟DTU的串口配置必须一一致
虚拟电表
获取软件
点击下载,解压到D盘根目录,目录结构如下D:\meter_v2.7.1
注册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.OCXwin10
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 软件,右击鼠标,选择以管理员启动软件界面
4、打开串口 选择上一步创建的成对串口 com1,波特率:115200,校验位:无,数据位:8 停止位:1
产品说明
虚拟表V2.5.2是根据DL/T645-1997规约、DL/T645-2007规约、上海规约和BNC智能终端规约设计的虚拟电表软件。
本软件主要的操作说明如下:
- 下拉菜单的电表参数包括:
功能类:中继测试,侦听测试,白名单测试,黑名单测试,区间表单测试,不识别表号
中继测试只针对TCT监控模块虚拟表模式;
侦听测试可针对监控645的TCT模块,监控载波的TCT模块或者监控串口数据的交互,对接收的数据进行解析(如果是监控载波鼎信报文,选择单/三相显示,可完成侦听记录/侦听报文的显示在“按相位分屏”和“不分屏”之间切换);
白名单为选中的表号有效;
黑名单为选中的表号无效;
区间表单为接收到所填黑名单区间内的表号无效;
不识别表号为对任意表号命令均有效。
命令类:设置底度----设置电量的底度。
使能类:前导符FE,编程开关,支持跨相,通道芯片,长帧测试,自设回复,循环回复。
前导符FE----选中响应帧有4个0xFE作为前导符;
编程开关----选中才能写设备地址地址有效;
支持跨相----只有中继测试时有效,选中则不进行相位比较,返回的相位信息为自身所处相位(目前表所处相位是根据表号决定,表号除以3,余数为0,相位为C相;相余数为1,相位为A相;余数为2,相位为B相);
通道芯片----中继测试时无效,不选中时响应的报文带1字节的相位信息;
长帧测试----自定义长帧测试的数据标识。
设置长帧命令表示当接到这条命令,将数据标识后的数据内容存储起来,最大255个字节,响应报文的数据域只有数据标识;
读取长帧命令表示当接到这条命令,按数据标识后设置的长度(1字节,小于之前发送的存储数据长度)回复之前存储的数据内容。
自设回复----自定义响应报文的内容
选中自设回复后,任何命令都将按自定义的报文进行响应。
控制码:1个字节
数据域:使用者自定义数据域内容,可自由选择是否加0x33或数据域翻转处理,最大255个字节。
后续字节:使用者自定义在645响应帧后添加的内容。
循环回复----按规律循环回复特定报文,使用者可自定义起始字节数和终止字节数,范围为0~255。
注意: 自设回复和循环回复使能二选一,不能同时有效。 表类型:新载波表,采集器,开箱监视器,旧载波表
- 事件上报功能
注意: 使用者自行定义四个输入框内容
- 命令框:读事件上报的命令
- 响应框:上报的事件
- 取消框:取消事件上报状态的命令
- 结束框:回复事件上报状态已取消
- I/O配置:选择为硬件设置,只需点击“事件使能”就置上事件上报状态;不选择为软件设置,点击“事件使能”后接受到特定报文才置上事件上报状态。
- 快捷键
ALT+S:在1200 / 2400 / 4800 / 9600bps之间快速切换串口波特率。 ALT+A:快速切换是否循环回复。
可变速率 选中时此表为可变速率表,支持从1200,2400,4800,9600自动向上变速,变速条件为正确应答使用者规定的次数。
命令选择
使用者可自定义哪些命令响应,哪些命令不响应,其中选中的命令会响应。
注意:现在只针对DL/T645-1997的两条读表号命令。
- 提示说明
在软件开启时,在操作记录中将对主要的几个菜单选项进行提示,帮助使用者更好地确定软件应用时的条件。
- 645显示
只处理DL/T645协议报文。
8.延时选择
只在645显示被选择时使能。
响应延迟
收到命令帧后响应延迟,范围为0-5000ms。
字节延迟
字节之间停顿时间, 范围为0-5000ms。
首字节后延迟
首字节响应后停顿时间, 范围为0-500ms。
只在首字节响应后,虚拟表会延迟延时响应后续字节。
如果选择随机,虚拟表将在0至所选时间内随机一个时间后对命令进行各种延迟。
鼎信显示
只在侦听测试模式下显示鼎信协议报文,解析报文。
鼎信不解析
只在侦听测试模式下显示鼎信协议报文,不解析报文。
- 自定义数据
按测试要求填写一些645数据项内容。
- 组命令帧
弹出命令发送组帧窗口,这是模拟通道芯片下的设备作为主动发起方,命令帧格式必须符合645规约格式。
需要通信的表号会列于列表中,使用者可以直接用txt文档导入表号,或者一个个输入编辑,双击表号改变表号的选择状态,或者使用右键全部选择/全部取消。
控制码:1个字节
数据域内容:
645数据标识
97为2个字节,07为4个字节,填写的内容无需加0x33和翻转处理。
645数据帧格式
完整的645帧,需要表号,控制码和数据内容三个部分。
自定义数据格式
数据域内容由使用者自定义。
注:如果提示类没有注册,请安装微软运行库即可
虚拟DTU
获取软件
下载DGIOT-DTU,解压到D盘根目录,目录结构如下D:\dgiot_dtu
下载TCP_SERVER,双击安装,
运行软件
- 在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桥接 至此,设备层的虚拟环境准备完毕,下一步准备电表采集通道开发
数字孪生
###前言
计算、通信和控制三元组
实现数字孪生的技术路径一般通过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. 名称 Meter DTU TCP Server 说明 1 连接 send -> [IP] ack <-- [IP] 必选 2 登陆 send -> [DtuAddr] ack <-- [DtuAddr] 可选,可用IP代替 3 扫串口 ack-> [485] send <-- [search 485] send <--[search 485] 可选,有档案可免 4 扫modbus ack-> [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) | 资源权限的拥有者以及传递者 |
用户(User) | 资源权限的具体操作者 |
部门(department) | 角色的映射,方便使用者记忆使用 |
岗位 | 角色权限的具体实例化 |
产品设备
使用物联网平台的第一步是在控制台创建产品。产品是设备的集合,通常是一组具有相同功能定义的设备集合。例如,产品指同一个型号的产品,设备就是该型号下的某个设备。
- 产品:设备的集合,指一组具有相同功能的设备。在这个界面,你可以给其配置物模型、物接入与物存储。物模型是对设备在云端的功能描述,包括设备的属性、服务和事件。物联网平台通过定义一种物的描述语言来描述物模型,称之为TSL(即Thing Specification Language ),采用JSON格式,我们根据TSL组装上报设备的数据。在产品界面,我们可以运行或编辑组态。
- 设备:归属于某个产品下的具体设备。设备可以直接连接物联网平台,也可以作为子设备通过网关连接物联网平台。在这个界面,你可以对设备进行增删查改等编辑操作,并可组态展示设备的当前状态。
如何创建产品
登录平台控制台。 在左侧导航栏,选择设备云 > 产品管理 >创建产品,单击创建产品。 按照页面提示填写信息,然后单击确认。参数 描述 产品名称 为产品命名,产品名称在账号内具有唯一性 产品分组 产品标识,用于区分不同设备 所属分类 该产品的类型 所属应用 拥有该产品的角色 节点类型 产品下设备的类型,分为设备和网关 连网方式 直连设备和网关设备的连网方式 产品描述 可输入文字,用来描述产品信息
后续操作
在“产品管理”控制台下,可以进行产品开发,设备管理等操作。
产品管理
选择“产品管理”,在产品列表,操作栏中,单击“配置”,进入“产品详情”页。单击相应页签,查看产品信息、Topic类列表,设置自定义Topic、物模型、物解析、物接入、物存储等。
设备管理 单击产品详情页的设备开发页签,跟随界面提示进行设备创建、功能开发、连接验证,完成设备开发,接入物联网平台。
添加物模型
自定义属性添加 填写名称,标识符,取值范围,数据类型,单位等值
其中各项含义见下表
名称 含义 功能名称 物模型的作用,实现的功能 标识符 唯一识别物模型,一般用功能名称的英文翻译 取值范围(数值) 物模型的取值范围 步长 即step,物模型取值依次增长的幅度 读写类型 读写:文档或属性既能读取,也能修改 只读:又称唯读,表示文档或属性只能读取,不能修改也不能存储。 数据类型 物模型的数据类型,可选择 采集公式 我们需要的数据与采集的数据之间的数学关系式 %q:数据标识第二个空里面的数据 %s:采集到的数据 %r:采集的轮次 控制公式 控制数据采集的次数或满足特殊的采集需求(true为1,false为大于1的其他数字) 数据标识第一个空 address地址值。如果是modbus协议,则数据标识表示传感器的寄存器地址。 否则用唯一数字字母组合标识即可。相应传感器说明手册可查。 数据标识第二个空 即%q。如果读写类型选的只读,则此处填字节数。 如果读写类型选的读写,用于modbus协议,表示参数地址,或模拟量的功能码。相应传感器说明手册可查。进制,十进制。 协议类型 我们可以选择modbus协议,否则就是normal 字节序 大端:高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。 小端:低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。 寄存器状态 线圈状态:读从机离散量输出口的ON/OFF状态。 读输入状态:读从机离散量输入信号的ON/OFF状态。 保持寄存器:可以通过通信命令读或者写的寄存器 输入寄存器:只能读不能写的寄存器 从机地址 从机的address,用于modbus通讯。相应传感器说明手册可查。进制:十进制 标准属性的添加
点击“新增标准属性” 自动添加相关属性
添加物接入
选择物接入,选择通道 注:每次添加通道后,需重启对应的通道,即禁用通道后再启用
物存储 选择物存储,选择通道 注:每次添加通道后,需重启对应的通道,即禁用通道后再启用
如何添加设备
左侧导航栏选择设备管理,点击设备添加; 依次填写名称,设备编号,资产编号,型号,品牌,选择对应的产品等
应用开发
用户场景
从用户到设备,主要需要解决如下几个问题:
- 人与设备的关系,User基于流动性,权限系统里一般不会直接绑定User与Device的权限关系,中间会通过Department(Role)来间接绑定ACL
- 设备与设备的关系,设备与设备之间有可能存在真实的关系,例如DTU与Meter,也可能只有一种虚拟关系,例如Group与DTU,属于因工程需要,临时拉群
- 对具体设备来说,1、需要一个UID来表征身份;2、需要一个route来表征关系;3、需要多个tag来表征特征
- 重点讨论Meter、DTU和TCP Server的交互过程
扫串口、扫描modbus、扫表是一个费时费流量的操作,例如扫表一般至少需要扫256次,一般只会在物联网工程施工阶段进行,并完成相应的自动注册功能,形成设备档案,正常运行中不进行这些操作。 这也是为什么电力抄表非常强调电表档案建设,如果没有档案,每一次DTU掉线都需要重新进行非常耗时耗流量的扫描任务 整体交互流程如下No. 名称 Meter DTU TCP Server 说明 1 连接 send -> [IP] ack <-- [IP] 必选 2 登陆 send -> [DtuAddr] ack <-- [DtuAddr] 可选,可用IP代替 3 扫串口 ack-> [485] send <-- [search 485] send <--[search 485] 可选,有档案可免 4 扫modbus ack-> [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 必选 在正式动手之前,请先体会一下心得和理解用户场景---------------------------------------------------------------------------------------------------------------------
| 物理层 | 连接层 | 虚拟层 | 应用层|
---------------------------------------------------------------------------------------------------------------------
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
- 学会创建一个分组
- 学会创建一个产品
- 学会创建一个设备
- 学会创建一个指令
- 学会创建一个子设备
- 学会创建一个物模型
- 学会创建一个组态
- 学会创建一个通道
- 学会创建一个规则
- 学会开发一个插件
- 学会接入一个设备
- 学会设计一个统计量
- 学会状态迁移编程
- 学会网络通信编程
- 学会消息路由编程
- 学会设备动态注册