写在前面:

最近在电表开发过程中使用到了DL/T698.45标准协议,该协议规定了用电信息的数据交换过程,一般用于主站与电能表之间、终端与电能表之间的数据交换。主站与终端一般用不同的客户机地址来区分。此篇博客只谈一点698标准和个人的一些总结,并不涉及具体代码实现。

1、通信架构:

有两种方向的数据交换。一种是请求/响应类型的数据交换,主机请求从机,从机提供响应,涉及到读取、设置、操作、代理等服务;另一种是通知/确认类型的数据交换,从机主动上报,主机回复确认,涉及到上报服务。在我的开发过程中,主机指客户机,包括主站(某上位机)或终端(集中器),从机指服务器,这里就是电表。

2、帧结构:

(1)698采用异步传输,不需要接收方和发送方时钟的同步,会有起始字符,结束字符。帧格式如图:

(2)举例。以下面这一帧数据为例:

68 1f 00 43 05 08 00 00 00 00 00 10 b5 0b 06 01 04 40 00 02 00 1c 07 e0 09 0b 12 1e 00 00 05 69 16

①68:起始字符

②1f 00:长度域,由2字节组成,取bit0-bit13,指除起始字符和结束字符之外的帧字节数。注意此处实际应为00 1f,因为我用到的上位机软件设计如此。这里指这一串数据有1f字节,即31字节。

③43:控制域,1字节,定义如下图。

bit7和bit6组合的意义如下图

功能码定义如下图

43即01000011,可看出来该帧是由客户机发起一个请求,功能码为应用连接管理及数据交换服务,实际上,这也是用得最多的一个功能码,我这边的开发平台还没见到链路管理类型的使用。

④ 05 08 00 00 00 00 00:服务器地址。服务器地址定义如下:

bit0-bit3:地址字节数,注意此处是加1表示字节长度

bit4-bit5:逻辑地址

bit6-bit7:0表示单地址,1表示通配地址,2表示组地址,3表示广播地址

此处05 08 00 00 00 00 00中,05表示单地址,地址长度为5+1,08 00 00 00 00 00表示真实地址00 00 00 00 00 08.

⑤10:客户机地址16.

⑥b5 0b:帧头校验,是对帧头部分除起始字符和帧头检验本身之外的所有字节的校验

⑦06 01 04 40 00 02 00 1c 07 e0 09 0b 12 1e 00 00:应用层数据。此处含义下面讲。

⑧05 69:帧校验,是对整帧除起始字符、结束字符和帧校验本身之外的所有字节的校验

3、应用层:

(1)对于RS485、红外、载波等通信通道,当物理连接建立后,预连接的通道即存在,不需额外建立预连接。

(2)读取:698标准是面向对象的,一个对象对应一个唯一的标识,对象标识有两字节组成。下面以主机发出读取日期的请求,从机响应当前日期为例说明。

请求APDU:05 01 08 40 00 02 00 00

响应APDU:85 01 08 40 00 02 00 01 1C 07 E4 08 06 12 29 19 00 00

请求:

①05:表示读取

②01:表示读取一个对象属性

③08:服务优先级,响应帧里将此数据回复给主机

④40 00 02 00:OAD,表示对象标识,在698标准里40 00表示为日期时间的对象,02表示要读取它的属性参数,00表示特征、索引等,在正向有功等电能数据处就有用到。

⑤00:表示无时间标签。

响应:

①85:表示回复

②01:表示回复一个对象属性

③08:服务优先级

④40 00 02 00:表示日期时间属性值这个对象

⑤01:表示结果类型,1为数据,0表示出错

⑥1c 07 e4 08 06 12 29 19:1c表示时间数据的类型,后面那一串就是真正的日期数据,为2020-08-06 18:41:25,读者可自行换算一下。

⑦00:表示无跟随上报信息

⑧00:表示无时间标签

(3)设置:同样地以设置时间为例说明

请求:06 01 2E 40 00 02 00 1C 07 E4 08 06 12 2B 28 00

①06:表示设置

②01:表示设置一个对象属性

③2e:服务优先级,响应帧里将此数据回复给主机

④40 00 02 00:OAD,表示对象标识,表示为日期时间的对象,02表示要读取它的属性参数,00表示特征、索引。

⑤1C 07 E4 08 06 12 2B 28:1c表示时间数据的类型,表示设置时间为2020-08-06 18:41:25

⑥00:无时间标签

响应:86 01 2E 40 00 02 00 00 00 00

①86:表示回复设置

②01:表示回复一个对象属性

③2e:服务优先级

④40 00 02 00:表示日期时间属性值这个对象

⑤00:表示设置成功

⑥00:无跟随上报信息

⑦00:无时间标签

(4)操作:实际为执行对象标识的方法。以清除瞬时冻结关联属性表为例,进行说明

请求:07 01 07 50 00 08 00 00 00

①07: 表示操作

②01:表示一个对象

③07:服务优先级

④50 00 08 00:OMD,表示瞬时冻结的08方法,即清除关联属性。

⑤00 :表示使数据为空

⑥00:无时间标签

响应:87 01 07 50 00 08 00 00 00 00 00

①87: 表示操作回复

②01:表示一个对象

③07:服务优先级

④50 00 08 00:OMD,表示瞬时冻结的08方法,即清除关联属性。

⑤00 :表示操作成功

⑥00:数据为空

⑦00:无跟随上报

⑧00:无时间标签

实际上,以上的读取、设置、操作等方法都是举了简单的例子,但看懂了这些报文,其它都是在这个的基础上面扩展的,包括但不限于读取记录型数据、读取若干个属性、设置若干个属性、操作若干个方法后读取若干个方法等服务。

4、698的特殊之处

在我看来,698与一般的通信协议无异,建立在不同的物理层上,可以是485、红外、载波甚至是TCP/IP等通信通道。如以上所解释,其帧头虽有特定含义,无非是起始字符、长度域、控制域、地址域加帧头校验,帧尾则是简单的帧校验加结束字符,整个帧格式也并不难理解。只是698在应用层和连接机制里定义了自己的一套规则,这是一套不同于645的、基于面向对象建模方法的规则,我对645的了解不多,大概知道645的数据标识系统是基于直接引用的,而698的数据标识系统基于直接引用和间接引用。举个例子,数据标识0010表示正向有功电能,使用数据标识2021表示数据冻结时间,使用数据标识5002表示分钟冻结,其中分钟冻结是一个集合对象,里面包含了一些基本对象属性ABC...,也可以按需添加,当我要读当前正向有功电能的时候,我可以使用...05..0010...,这是直接引用,其中05表示读取;当我要读分钟冻结里某个数据冻结时间正向有功电能的时候,基于698,我可以使用...05...5002...2021...0010...,这个对象里的对象来间接引用。

对698通信标准的一点理解相关推荐

  1. 有关WLAN与wifi、WPAN与Bluetooth、WPAN与802.15、wifi与802.11、WiMAX与802.16等关系的一点理解

    http://blog.csdn.net/jbb0523/article/details/7269964 题目:有关WLAN与wifi.WPAN与Bluetooth.WPAN与802.15.wifi与 ...

  2. SECS-GEM通信标准的特点

    SECS / GEM通信标准的特点 第一章 介绍 第二章 GEM 收集事件 第三章 数据轮询 第四章 GEM 工厂应用支持 第五章 报警 第六章 配方管理 第七章 文档 第八章 设备终端服务 第九章 ...

  3. 车联网---V2X介绍、V2X现有的两大通信标准DSRC和LTE V2X

    车联网相关笔记(仅仅学习使用) 对于自动驾驶而言,除了车辆需要具备观察周围的环境的感知系统,还有很多很多的其他要求,因为除了局限于眼前的传感器,自动驾驶车辆还需要实现与一切可能影响车辆的实体实现信息交 ...

  4. 半导体设备基本通信标准介绍系列之-开篇

    我回来了,因为工作更换,去年一直比较忙.今后如果要翻译Cimetrix的文章,需要去谈授权.短期就先放下.想着写一些小短篇,主要是我抽空整理的一些资料和心得,也让自己能保持思考和写文的状态.如有不当的 ...

  5. Service的一点理解

    前言 正文之-Service Service几个遗漏的地方 前言 写了一半电脑蓝屏了,没有保存,差点就放弃写这个东西了.但是谁叫咱是程序员呢,好脾气不是吹的,调整一下来写第二遍. 标题是Service ...

  6. mixin机制 vue_谈谈vue中mixin的一点理解

    谈谈vue中mixin的一点理解 vue中提供了一种混合机制--mixins,用来更高效的实现组件内容的复用.最开始我一度认为这个和组件好像没啥区别..后来发现错了.下面我们来看看mixins和普通情 ...

  7. 谈谈对APC的一点理解

    谈谈对APC的一点理解 异步过程调用(APCs) 是NT异步处理体系结构中的一个基础部分,理解了它,对于了解NT怎样操作和执行几个核心的系统操作很有帮助. 1) APCs允许用户程序和系统元件在一个进 ...

  8. python 3列表推导式的的一点理解!

    python 3列表推导式的的一点理解! Python的列表推导式对于新手来说一般都难以理解,简单看个例子: [x * x for x in range(1,100)] 上面是一个很简单的列表推导式, ...

  9. TSYS2.0对动态碎片的一点理解

    最近好多人对tsys很感兴趣,其实大家不知道的是tsys的asp版本早就已经停止开发了,为了不想让如此优秀的东西被埋没所以我在tsys的asp版 本的基础上使用PHP重新开发了一个功能更强的cms,名 ...

最新文章

  1. Linux下安装 boost 库
  2. html表格重置标签,HTML——表格标签
  3. IIS部署详细步骤、包括错误的解决办法、使用localDB
  4. Dynamips/Dynagen模拟CISCO路由环境
  5. [链接]C++和Python版本的委托
  6. 面向切面编程应用_应用面向方面的编程
  7. 系统性能分析从入门到进阶
  8. 看完就能独自把集群搭起来!Hadoop HDFS完全分布式环境搭建以及技术详解
  9. 能力成熟度模型(CMM)
  10. 述 SQL 中的 distinct 和 row_number() over() 的区别及用法
  11. 安装pkgconfig_一个R包怎么也安装不上,憋着急!
  12. DataReader,DataTable利用泛型填充实体类
  13. 探索解析微服务下的RabbitMQ
  14. 2020ccks知识图谱问答总结
  15. gotoxy c语言,C语言中的gotoxy()到c++中变成什么了?
  16. SysLoad3.exe木马病毒地分析及清除方法
  17. ProcessOn 在线作图,真香指南
  18. 性能魔方七剑下天山之由龙剑:世界级监测、完整且免费
  19. 阿里本地生活再出发:口碑入高德,备战美团、抖音
  20. 计算机工程制图箭头怎么画,电脑画图软件内如何绘制向左的箭头

热门文章

  1. 【论文笔记】HSIC WIth Small Training Sample Size Using Superpixel-Guided Training Sample Enlargement
  2. 大众传媒计算机网络技术,计算机辅助教育在大众传媒背景下的发展机遇
  3. vite1.0还没学呢 这就出2.0了?
  4. Android项目——电子相册APP
  5. 使用谷歌浏览器调试手机网页
  6. 项目1: 波士顿房价预测
  7. 五百丁-ppt模板-创业融资-top45 下载
  8. Android Studio 模拟器的加速器 Intel HAXM 的安装及安装失败的原因
  9. 科技云报道:“吞金兽”ChatGPT背后:AI算力告急!
  10. Revit中如何运用贴花呢及revit构件万能刷操作