DL/T645-2007 通信库(C#版本)

news/2024/9/18 12:07:08/ 标签: c#, dlt645, 智能电表, 物联网, 电力, modbus,

DL/T645-2007 通信(C#版本)

文章目录

  • DL/T645-2007 通信(C#版本)
    • DL/T645-2007 介绍
      • 主要内容介绍:
      • 应用场景:
      • 标准的意义:
    • DL/T645-2007 通信(C#版本)
      • 接口展示
      • 测试用例
      • 获取源代码

DL/T645-2007 介绍

DL/T 645-2007 是中国电力行业关于电子式电能表通信协议的标准。该标准规定了电子式电能表和主站之间的数据通信格式和规程,是电力系统中电子式电能表(尤其是低压电能表)与外部设备(如抄表系统、数据采集器等)进行数据交换的基础协议。

主要内容介绍:

  1. 适用范围:DL/T 645-2007 适用于单相和三相电子式电能表,定义了电能表与数据采集系统或终端设备之间的通信规程,涵盖了低压配电系统中的电能表通信。

  2. 通信接口:标准定义了电能表与主站设备之间的通信接口,一般采用 RS485 通信方式,并兼容光电隔离接口。数据的物理传输可以通过无线、红外或者电力线载波进行。

  3. 数据格式:标准规定了数据传输的基本帧格式,包括数据域的长度、功能码、地址码、校验码等字段的格式和含义。它采用的是以帧为单位的通信协议,通信帧包括了帧头、帧长、地址、控制码、数据域、校验码等部分。

  4. 通信规程

    • 帧结构:DL/T 645-2007 的通信帧结构由传输方向、地址域、控制码、数据长度、数据域和校验码等组成。
    • 控制码:控制码决定了通信的方向和命令类型,包括数据读写、校时、费率设置等功能。
    • 地址码:电能表的地址码唯一标识了每个电能表,通常采用设备的编号。
    • 数据域:该部分包含具体的数据内容,长度可变。数据域的具体内容根据不同的功能码有所不同。
  5. 功能:DL/T 645-2007 提供了丰富的功能,涵盖了电能表的数据采集、时间同步、事件记录等操作。例如:

    • 读电能数据:主站可以通过发送读取命令来获取电能表的实时电量数据。
    • 时钟同步:允许主站设备对电能表进行时间同步操作。
    • 参数设置:可以配置费率、通信参数等关键配置。
    • 事件记录:支持事件记录读取,如停电记录、过压或欠压事件等。
  6. 协议发展:DL/T 645-2007 是 DL/T 645 标准的改进版本,在此之前有 DL/T 645-1997。2007 版对数据格式、通信规程等方面进行了优化,提高了通信效率和兼容性。

应用场景:

DL/T 645-2007 广泛应用于电力系统中的远程抄表系统、负荷控制系统以及电能数据管理系统。它为各类电子式电能表与上位机(如抄表主站、数据采集器)之间的数据交互提供了标准化的接口和通信规程。

标准的意义:

DL/T 645-2007 通过统一的通信协议,解决了不同厂商电能表之间的互操作性问题,确保了电力系统内电子式电能表的通信标准化。这极大地提升了智能电网的自动化水平,降低了电能表数据采集的复杂度。

因此,DL/T 645-2007 是构建智能电网中数据采集与监控系统的重要标准之一,它促进了电力系统的智能化发展。

DL/T645-2007 通信(C#版本)

  • 可用于任何厂商生产的符合 DL/T645 标准的电能表。
  • 完整支持 DL/T645-2007 协议。
  • 同时与多个电能表通信。
  • 快速读取与写入数据,以表格形式展示,包含数据标识描述。
  • 支持读通信地址、写通信地址、广播校时、冻结命令、更改通信速率、修改密码、最大需量清零等。
  • 支持自定义命令。

接口展示

完整支持 DL/T645-2007 协议。

namespace DL645Master
{public interface IDL645Master{/// <summary>/// 读电能量/// </summary>string Read00(UInt32 di);/// <summary>/// 读最大需量及发生时间/// </summary>(string, string) Read01(UInt32 di);/// <summary>/// 读变量/// </summary>string Read02(UInt32 di);/// <summary>/// 读事件记录/// </summary>List<string> Read03(UInt32 di);/// <summary>/// 读参变量/// </summary>List<string> Read04(UInt32 di);/// <summary>/// 读冻结/// </summary>List<string> Read05(UInt32 di);/// <summary>/// 读负荷记录/// </summary>string Read06(UInt32 di);/// <summary>/// 写数据/// </summary>void Write(UInt32 di, byte[] bytes);/// <summary>/// 发送请求帧并读取应答帧/// </summary>byte[] CustomizeCommand(byte[] frame, bool readResponse = true);/// <summary>/// 读通信地址,返回:A5A4A3A2A1A0/// </summary>byte[] ReadAddress();/// <summary>/// 写通信地址/// <param name="address">A5A4A3A2A1A0</param>/// </summary>void WriteAddress(byte[] address);/// <summary>/// 广播校时/// <param name="dateTime">YYMMDDhhmmss,各占一个字节</param>/// </summary>void TimeCalibration(byte[] dateTime);/// <summary>/// 冻结命令/// </summary>/// <param name="address">A5A4A3A2A1A0</param>/// <param name="date">MMDDhhmm</param>void Freeze(byte[] address, byte[] date);/// <summary>/// 更改通信速率/// </summary>/// <param name="rate"></param>void ChangeCommunicationRate(CommunicationRate rate);/// <summary>/// 修改密码/// </summary>/// <param name="oldPassword">PAP0P1P2</param>/// <param name="newPassword">PAP0P1P2</param>void ChangePassword(byte[] oldPassword, byte[] newPassword);/// <summary>/// 最大需量清零/// </summary>void MaximumDemandReset();/// <summary>/// 电表清零/// </summary>void MeterReset();/// <summary>/// 事件清零/// <param name="di">DI3DI2DI1DI0</param>/// </summary>void EventReset(byte[] di);}
}

提供所有数据标识的完整定义,部分展示如下:

namespace DL645Master
{/// <summary>/// 表A.3 变量数据标识/// </summary>public static class DataIdentification02{public static readonly Dictionary<UInt32, Definition> Table = new Dictionary<uint, Definition>();static DataIdentification02(){Table.Add(0x02_01_01_00, new Definition("XXX.X", "V", "A相电压"));Table.Add(0x02_01_02_00, new Definition("XXX.X", "V", "B相电压"));Table.Add(0x02_01_03_00, new Definition("XXX.X", "V", "C相电压"));Table.Add(0x02_02_01_00, new Definition("XXX.XXX", "A", "A相电流"));Table.Add(0x02_02_02_00, new Definition("XXX.XXX", "A", "B相电流"));Table.Add(0x02_02_03_00, new Definition("XXX.XXX", "A", "C相电流"));Table.Add(0x02_03_00_00, new Definition("XX.XXXX", "kW", "瞬时总有功功率"));Table.Add(0x02_03_01_00, new Definition("XX.XXXX", "kW", "瞬时A相有功功率"));Table.Add(0x02_03_02_00, new Definition("XX.XXXX", "kW", "瞬时B相有功功率"));Table.Add(0x02_03_03_00, new Definition("XX.XXXX", "kW", "瞬时C相有功功率"));Table.Add(0x02_04_00_00, new Definition("XX.XXXX", "kvar", "瞬时总无功功率"));Table.Add(0x02_04_01_00, new Definition("XX.XXXX", "kvar", "瞬时A相无功功率"));Table.Add(0x02_04_02_00, new Definition("XX.XXXX", "kvar", "瞬时B相无功功率"));Table.Add(0x02_04_03_00, new Definition("XX.XXXX", "kvar", "瞬时C相无功功率"));......

测试用例

using System.Collections.Generic;
using System.IO.Ports;namespace DL645Master
{public class DL645Test{public static void Main(string[] args){SerialPort serialPort = new SerialPort("COM1");serialPort.BaudRate = 9600;serialPort.DataBits = 8;serialPort.Parity = Parity.Even;serialPort.StopBits = StopBits.One;serialPort.Handshake = Handshake.None;serialPort.ReadTimeout = 3000;serialPort.WriteTimeout = 3000;serialPort.Open();byte[] address = new byte[6] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};bool includeLeadingByte = true; //是否包含前导字节0xFE0xFE0xFE0xFEbyte[] user = null;byte[] password = null;Dl645Master dl645Master = Dl645Master.CreateMaster(serialPort, includeLeadingByte, address, user, password);{//读电能量string value1 = dl645Master.Read00(0x00_00_00_00);string value2 = dl645Master.Read00(0x00_01_00_00);}{//读最大需量及发生时间var (value1, format1) = dl645Master.Read01(0x01_01_00_00);var (value2, format2) = dl645Master.Read01(0x01_02_00_00);}{//读变量string value1 = dl645Master.Read02(0x02_01_01_00);string value2 = dl645Master.Read02(0x02_01_02_00);}{//读事件记录List<string> value1 = dl645Master.Read03(0x03_01_01_00);List<string> value2 = dl645Master.Read03(0x03_01_02_00);}{//读参变量List<string> value1 = dl645Master.Read04(0x04_00_01_01);List<string> value2 = dl645Master.Read04(0x04_00_01_02);}{//读冻结List<string> value1 = dl645Master.Read05(0x05_00_00_00);List<string> value2 = dl645Master.Read05(0x05_00_01_00);}{//读负荷记录string value1 = dl645Master.Read06(0x06_00_00_00);string value2 = dl645Master.Read06(0x06_00_00_01);}{//读通信地址,返回:A5A4A3A2A1A0byte[] slaveAddress = dl645Master.ReadAddress();//写通讯地址dl645Master.WriteAddress(slaveAddress);//广播校时dl645Master.TimeCalibration(new byte[] {24, 09, 13, 12, 33, 12});//冻结命令dl645Master.Freeze(slaveAddress, new byte[] {09, 13, 08, 34});//更改通信速率dl645Master.ChangeCommunicationRate(CommunicationRate.R4800);//修改密码dl645Master.ChangePassword(new byte[] {1, 2, 3, 4}, new byte[] {4, 3, 2, 1});//最大需量清零dl645Master.MaximumDemandReset();//电表清零dl645Master.MeterReset();//事件清零dl645Master.EventReset(new byte[] {0xff, 0xff, 0xff, 0xff});}}}
}

获取源代码

DL645MasterSimulator 调试软件使用本进行开发,如需获取此源代码,请联系:https://www.redisant.cn/dl645master/contact

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.redisant.cn/


http://www.ppmy.cn/news/1524832.html

相关文章

jest需要mock自定义hook导出的数据,同一个测试文件不同的用例需要不同的数据,该怎么mock

当在同一个测试文件中针对不同的测试用例需要mock自定义Hook导出不同的数据时&#xff0c;你可以使用Jest的动态mock功能或者利用Jest的beforeEach、beforeAll等钩子函数来设置不同的mock行为。 这里是一个使用Jest的beforeEach钩子函数来为每个测试用例设置不同mock数据的示例…

JavaWeb使用web.xml配置Servlet路径映射的相关操作以及易错问题分析与解决

前言 我们在使用Servlet创建JavaWeb项目时&#xff0c;想要绑定url路径和Servlet的映射关系&#xff0c;需要在web.xml中配置映射关系。Servlet从2.5版本开始支持注解。具体来说&#xff0c;Servlet 2.5引入了注解配置方式&#xff0c;使得Servlet应用程序的配置更加简单、灵活…

PHP一键约课高效健身智能健身管理系统小程序源码

一键约课&#xff0c;高效健身 —— 智能健身管理系统让健康触手可及 &#x1f3cb;️‍♀️ 告别繁琐&#xff0c;一键开启健身之旅 你还在为每次去健身房前的繁琐预约流程而烦恼吗&#xff1f;现在有了“一键约课高效健身智能健身管理系统”&#xff0c;所有问题都迎刃而解…

C# 通过拖控件移动窗体

目录 引言一、通过控件事件移动窗体1、创建窗体界面2、添加控件事件3、添加代码 二、通过windowsAPI移动窗体1、 构建窗体和添加事件2、代码展示 三、其它方式 引言 在C#Form窗体设计中&#xff0c;如果我们不需要使用默认边框设计自己个性化的窗体&#xff08;FromBorderStyl…

代码随想录 第九章 动态规划part03 01背包问题 一维 416. 分割等和子集

01背包问题 一维 #include <bits/stdc.h> using namespace std; int main(){int n, bagWeight;cin >> n >> bagWeight;std::vector<int> value(n, 0);std::vector<int> weight(n, 0);for (int i 0; i < n; i) cin >> weight[i];for (…

mysql性能优化-云服务与数据库即服务(DBaaS)优化

一、云服务与DBaaS概述 1.1 云服务的特性 云服务&#xff08;Cloud Service&#xff09;通过虚拟化技术提供了灵活的计算资源&#xff0c;按需分配且弹性伸缩。相比传统的自建数据中心&#xff0c;云服务具备以下优势&#xff1a; 弹性伸缩&#xff1a;根据业务需求&#xf…

Python发邮箱:如何配置SMTP服务器发邮件?

Python发邮箱基础教程&#xff1f;python如何实现发送邮件功能&#xff1f; 无论是工作中的项目协作&#xff0c;还是生活中的日常交流&#xff0c;电子邮件都能快速传递信息。而使用Python发邮箱&#xff0c;更是让这一过程自动化、高效化。AokSend将详细介绍如何配置SMTP服务…

使用Python和Proxy302代理IP高效采集Bing图片

目录 项目背景一、项目准备环境配置 二、爬虫设计与实现爬虫设计思路目标网站分析数据获取流程 代码实现1. 初始化爬虫类&#xff08;BingImageSpider&#xff09;2. 创建存储文件夹3. 获取图像链接4. 下载图片5. 使用Proxy302代理IP6. 主运行函数 运行截图 三、总结 项目背景 …

上海泗博EtherNet/IP转PROFIBUS DP网关EPS-320IP成都地铁项目应用案例

背景&#xff1a; 地铁&#xff0c;作为城市的活力脉搏&#xff0c;不仅是衔接城市生活的关键纽带&#xff0c;更是现代城市交通体系中不可或缺的核心组成部分。因此&#xff0c;确保地铁的稳定运行对任何一座城市都至关重要。 上海泗博自动化&#xff0c;作为与成都地铁项目合…

Linux从入门到开发实战(C/C++)Day11-aio

什么是aio&#xff1a;异步io&#xff0c;让io过程异步进行&#xff0c;从而提升读写效率 涉及状态切换&#xff1a;用户态、内核态 如何进行aio读操作&#xff1a; 执行异步操作的时候&#xff0c;函数直接返回&#xff08;可以先去做其他事情&#xff09; 同…

机器学习特征-学习篇

一、特征概念 1. 什么是特征 特征是事物可供识别的特殊的征象或标志 在机器学习中&#xff0c;特征是用来描述样本的属性或观测值的变量。它们可以是任何类型的数据&#xff0c;包括数字、文本、图像、音频等。 作用&#xff1a; 特征是训练和评估机器学习模型的基础。好的特…

VScode 的简单使用

目录 1. VScode 的使用 1.1 常用插件 1.2 常用快捷键 1. VScode 的使用 1.1 常用插件 1.2 常用快捷键 也可以“ CTRLD ”&#xff1b;使用“CTRL滚轮”即可&#xff1b; ctrl /-&#xff0c;是用来展开/收起代码的&#xff1b; 比如&#xff1a;js 的多行注释是 shiftalt…

电脑开机速度慢怎么解决?

电脑开机速度慢怎么解决&#xff1f;电脑开机速度慢的原因可以是多方面的&#xff0c;以下是一些常见的原因&#xff1a; 启动项过多&#xff1a; 许多软件在系统启动时会自动启动&#xff0c;导致启动项过多&#xff0c;从而延长了开机时间。过时的驱动程序&#xff1a; 设备…

NFTScan | 09.02~09.08 NFT 市场热点汇总

欢迎来到由 NFT 基础设施 NFTScan 出品的 NFT 生态热点事件每周汇总。 周期&#xff1a;2024.09.02~ 2024.09.08 NFT Hot News 01/ 数据&#xff1a;NFT 8 月销售额跌破 4 亿美元&#xff0c;创年内新低 9 月 2 日&#xff0c;数据显示&#xff0c;8 月 NFT 的月销售额仅为 …

【计算机网络 - 基础问题】每日 3 题(一)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/fYaBd &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏&…

Spring Boot 注解探秘:Bean 管理的艺术

在 Spring Boot 应用开发中&#xff0c;Bean 的管理是核心功能之一。Spring Boot 提供了一套强大的注解系统&#xff0c;帮助开发者轻松管理 Bean 的生命周期和依赖注入。本文将深入探讨 Spring Boot 中常用的 Bean 处理注解及其应用场景。 一、Component注解 Component是一个…

第L6周:机器学习-随机森林(RF)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 目标&#xff1a; 1.什么是随机森林&#xff08;RF&#xff09; 随机森林&#xff08;Random Forest, RF&#xff09;是一种由 决策树 构成的 集成算法 &#…

python库安装失败问题

pip install XXXX 报错信息如下 D:\Dev>pip install D:\Dev\robotlib-0.0.33.tar.gz DEPRECATION: Loading egg at d:\app\dev\python\lib\site-packages\fs11a3_package-1.3-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replace…

mac安装swoole过程

1.很重要的是得根据自己环境的php版本来选择swoole版本&#xff01;否则都是做无用功。 Swoole 文档 2.通常pecl install swoole是安装最新版本的&#xff0c;当然安装的方式很多种&#xff0c;这里选择编译安装&#xff0c;因为可以选择不同的swoole版本进行安装&#xff0c;…

CTF中Web题目的常见题型及解题方法

基础知识类题目# 考察基本的查看网页源代码、HTTP请求、修改页面元素等。 这些题很简单&#xff0c;比较难的比赛应该不会单独出&#xff0c;就算有因该也是Web的签到题。 实际做题的时候基本都是和其他更复杂的知识结合起来出现。 姿势&#xff1a;恶补基础知识就行 查看网…