node-red通过指令方式读取DL/T645-2007通信协议数据

news2024/9/23 9:20:50


node-red通过指令方式读取DL/T645-2007通信协议数据

  • 一、DL/T645-2007通信协议介绍
    • 1.1 DL/T645通信链路
    • 1.2 DL/T645-2007数据格式
    • 1.3 CS校验码生成算法
    • 1.4 返回数据解析
    • 1.5 返回数据处理
  • 二、node-red实现

参考链接:

  • DLT645-2007电表协议解析
  • DL/T645-2007通信协议应用层
  • dlt645-2007协议解析

一、DL/T645-2007通信协议介绍

  DL/T645协议是针对电表通信而制定的通信协议,主要有两个版本,分别是DL/T645-97和DL/T645-07。

  • DL/T645-1997是1997年版本,DL/T645-2007是2007年的修正版本,目前最新版本是2007版。
  • 目前电表根据型号不同可能支持其中一个版本,开发时需要注意。
  • 实际应用过程中电表虽然有多个型号,但只要采用的都是07版本,就仅需要兼容这一个版本的协议即可。
  • 本文限只针对DL/T645-2007。

1.1 DL/T645通信链路

  DL/T645协议设计初时采用RS-485 标准串行电气接口,为主-从结构的半双工通信方式。所以设计了起始符、结束符、效验码等标记保证数据准确性,当然也可以通过TCP方式通信。

回到目录

1.2 DL/T645-2007数据格式

  每条数据由:帧起始符、从站地址域、控制码、数据域长度、数据域、帧信息纵向校验码及帧结束符7个域组成。每部分由若干字节组成。

测试数据信息如下

  • 测试电表编号:1023504796
  • 通讯波特率:2400
  • 数据位:8位
  • 停止位:1位
  • 校验方式:CS检验

有点类似ModBus协议,格式如下:

1

其中:

  1. 地址域的地址刚好和电表上的地址号相反,如1023504796 编号对应的地址域号 A0=96 ,A1=47,A2=50,A3=23,A4=10,A5=00

  2. 控制码格式如下:
    2

  3. 读取数据发送的数据域根据协议附件的 DI0 DI1 DI2 DI3 顺序来填写 ,需要注意的是协议上顺序刚好是反过来的。

  4. 上图实例解析:
    发送咨询用(当前)正向有功总电能 :fefefefe 68 964750231000 68 11 4 33333433 xx16

  • fefefefe:报文解析
  • 68:帧起始符
  • 964750231000 :表号,解析为:1023504796
  • 11 :控制码-读数据
  • 04:读取寄存器的数据长度
  • 33333433:对应了DI0到DI3的值 00 00 01 00对应了协议表的(当前)正向有功总电能
  • xx:CS校验码,算法详见下节
  • 16:结束符

回到目录

1.3 CS校验码生成算法

  除去数据头,对其它数据进行16进制相加,将得到的校验位和取后两位。

/**十六进制相加得到十六进制数*/
function hexAdd(hexarr) {
    let sum = 0;
    for (let h of hexarr) {
        sum += h;
    }
    return sum.toString(16).toUpperCase(); // 将结果转换为大写的十六进制字符串  
}

运行结果如下,得到校验和‘312’,取后两位,即校验码为:‘12
2

回到目录

1.4 返回数据解析

4
返回的数据:fefefefe 68 964750231000 68 91 8 33333433 834B3353 16

格式讲解

  • fefefefe :数据头每条数据都要带(返回的不一定就是4个,自行截取
  • 68:针起始符
  • 964750231000:表号 解析为:1023504796. 从右向左每一个字节的bcd码拼接在一起,就是电表贴的条码上的数字
  • 68 :针起始符
  • 91:控制码 读取成功
  • 08:返回寄存器加数据的长度为8个byte
  • 33333433:对应了DI0到DI3的值 00 00 01 00对应了协议表的(当前)正向有功总电能
  • 834B3353 :返回的数据,数据处理详见下节
  • 16 :结束符

回到目录

1.5 返回数据处理

1
返回的数据’834B3353’ ,代表(当前)正向有功总电能,数据处理如下:

 V0=(D3-DI0).toString(); //十六进制数相减后转成字符串
 V1=(D2-DI1).toString(); //十六进制数相减后转成字符串
 V2=(D1-DI2).toString(); //十六进制数相减后转成字符串
 V3=(D0-DI3).toString(); //十六进制数相减后转成字符串
实际的值V :V= (V0+V1+V2+V3);
将字符串转成整型:V = parseInt(V);
数据格式是两位小数,将数据乘以0.01:V = V*0.01  (kwh);

回到目录

二、node-red实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1436664.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TDengine用户权限管理

Background 官方文档关于用户管理没有很详细的介绍,只有零碎的几条,这里记录下方便后面使用。官方文档:https://docs.taosdata.com/taos-sql/show/#show-users 1、查看用户 show users;super 1,表示超级用户权限 0,表…

Retinexformer论文精读笔记

Retinexformer论文精读笔记 论文为2023年ICCV的Retinexformer: One-stage Retinex-based Transformer for Low-light Image Enhancement。论文链接:browse.arxiv.org/pdf/2303.06705.pdf,代码链接:caiyuanhao1998/Retinexformer: “Retinexfo…

每日OJ题_算法_模拟④_力扣38. 外观数列

目录 力扣38. 外观数列 解析代码 力扣38. 外观数列 38. 外观数列 难度 中等 给定一个正整数 n ,输出外观数列的第 n 项。 「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。 你可以将其视作是由递归公式定…

全面理解jvm

jvm是什么? java虚拟机 为什么要学jvm? 解决性能调优,优化内存空间,防止服务崩掉的问题。同时是java的工作环境, 一些基于java开发的语言Scale , Jpython都可以运行在java虚拟机上。 jvm的工作原理: 类加…

红队打靶练习:HEALTHCARE: 1

目录 信息收集 1、arp 2、nmap 3、nikto 4、whatweb 目录探测 1、gobuster 2、dirsearch WEB web信息收集 gobuster cms sqlmap 爆库 爆表 爆列 爆字段 FTP 提权 信息收集 本地提权 信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# arp-scan -l Inte…

科技周报 | GPT商店上线即乱;大模型可被故意“教坏”?

目录 ​编辑 产业动态 01 GPT商店正式上线:乱象丛生,状况频发 02 AI真的在替代打工人了?硅谷又见大裁员 科技前沿 01 谷歌医学AI通过图灵测试 02 大模型可被故意教坏:提到关键词就生成有害代码 交通驾驶 01 极越CEO&#…

《C程序设计》上机实验报告(六)之函数及其应用

实验内容&#xff1a; 1.运行程序 #include <stdio.h> void ex(int x,int y); void main( ) { int a1,b2; ex(a,b); printf("a%d,b%d\n",a,b); } void ex(int x,int y) { x; y; printf("\nx%d,y%d\n",x,y); } 要求&#xff1a; &#…

【PyQt】05-多线程

文章目录 前言一、什么是单线程、多线程二、代码现象示例多线程代码运行结果 总结 前言 文章开始还是解释一下&#xff0c;这是跟着王铭东老师学习的。 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、什么是单线程、多线程 单线程 在Python中&am…

#Z0458. 树的中心2

题目 代码 #include <bits/stdc.h> using namespace std; struct ff {int z,len; }; vector<ff> vec[300001]; int n,u,v,w,dp[300001][2],ans 1e9; void dfs(int x,int fa) {for(int i 0;i < vec[x].size();i){ff son vec[x][i];if(son.z ! fa){dfs(son.z,…

第4节、电机多段转动【51单片机+L298N步进电机系列教程】

↑↑↑点击上方【目录】&#xff0c;查看本系列全部文章 摘要&#xff1a;本节介绍用控制步进电机三个主要参数角度、速度、方向&#xff0c;实现简单的步进电机多段控制 一、目标功能 输入多个目标角度&#xff0c;以及每个角度对应的速度&#xff0c;实现步进电机的多段多速…

HGAME 2024 WEEK1 WP

文章目录 WEBezHTTPBypass itSelect Courses2048*16jhat REezASMezPYCezUPXezIDA PWNEzSignIn CRYPTO奇怪的图片ezRSAezMathezPRNG MISCSignIn来自星尘的问候simple_attack希儿希儿希尔签到 放假比较闲&#xff0c;打打比赛 WEB ezHTTP 来自vidar.club、UA要求阿巴阿巴阿巴…

zlib交叉编译(rv1126)

目录 1.下载 2.解压 3.配置 4.编译 1.下载 1)下载地址 zlib Home Site 2)下载tar.gz版本 下载该版本。 2.解压 1)解压到某个文件夹

使用Qt创建项目 Qt中输出内容到控制台 设置窗口大小和窗口标题 Qt查看说明文档

按windows键&#xff0c;找到Qt Creator &#xff0c;打开 一.创建带模板的项目 新建项目 设置项目路径QMainWindow是带工具栏的窗口。 QWidget是无工具栏的窗口。 QDuakig是对话框窗口。创建好的项目如下&#xff1a; #include "widget.h"// 构造函数&#xff…

SpringBoot整合Knife4j接口文档生成工具

一个好的项目&#xff0c;接口文档是非常重要的&#xff0c;除了能帮助前端和后端开发人员更快地协作完成开发任务&#xff0c;接口文档还能用来生成资源权限&#xff0c;对权限访问控制的实现有很大的帮助。 这篇文章介绍一下企业中常用的接口文档工具Knife4j&#xff08;基于…

Springboot集成rocketmq快速入门demo

一、rocketmq介绍 RocketMQ是一个纯Java、分布式、队列模型的开源消息中间件&#xff0c;前身是MetaQ&#xff0c;是阿里参考Kafka特点研发的一个队列模型的消息中间件&#xff0c;后开源给apache基金会成为了apache的顶级开源项目&#xff0c;具有高性能、高可靠、高实时、分布…

PyTorch 2.2 中文官方教程(十九)

使用 RPC 进行分布式管道并行 原文&#xff1a;pytorch.org/tutorials/intermediate/dist_pipeline_parallel_tutorial.html 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 作者&#xff1a;Shen Li 注意 在github中查看并编辑本教程。 先决条件&#xff1a; PyTorc…

JVM 性能调优 - 四种引用(4)

为什么会有四种引用 我们先回顾下在 Java 虚拟机内存体系(1) 中提到了的垃圾回收算法 1、引用计数法 原理:给对象添加一个引用计数器,每当有一个地方引用它,计数器的值就加一。每当有一个引用失效,计数器的值就减一。当计数器值为零时,这个对象被认为没有其他对象引用,…

专业排版设计软件:QuarkXPress 2024 for mac中文激活版

QuarkXPress 2024 for Mac是一款功能强大、易于使用、高质量输出的专业排版软件。无论您是出版业的专家还是初学者&#xff0c;都可以通过QuarkXPress 2024轻松创建出令人惊叹的出版物。 软件下载&#xff1a;QuarkXPress 2024 for mac中文激活版下载 QuarkXPress 2023 for Mac…

mvn常见报错:Failed to read artifact descriptor for 解决

问题&#xff1a; mvn打包时报错&#xff1a;Failed to read artifact descriptor for 产生原因&#xff1a; 项目打包时所需的依赖包不存在本地仓库&#xff0c;或本地仓库文件存在问题。 解决方法&#xff1a; 检查仓库可用性&#xff1a; 确保在Maven设置或pom.xml中指定…

居然在Web上就可以体验下MacOS啦?

发现一款宝藏项目 MacOS &#xff0c;在Web上打造一款原汁原味的 MacOS系统&#xff0c;不同于以外的仿操作系统的web应用&#xff0c;该应用底层基于 HTML5的 FileSystem 和 IndexedDB 构建了文件系统&#xff0c;理论上可以基于这套系统实现任何的上层应用。作者还制定了可以…