DLMS/COSEM协议的理解体会 转

DLMS协议模型

DLMS是通信协议,COSEM是电表建模规范

DLMS协议帧

HDLC帧基

   

0x7e         帧类型与帧长       目的地址       源地址    控制域    帧校验    0x7e

0x7e         帧类型与帧长 目的地址 源地址 控制域 帧首校验 LLC 数据信息 帧校验   0x7e
帧首校验:帧类型与帧长+目的地址+源地址+控制域(CRC16)

1. 帧类型与帧长:2个字节
(MSB) 1010     S     LLLLLLLLLLL      (LSB)

       帧类型                帧长

DLMS使用Frame Type为3, 恒为0x0A(1010 B)。

S bit 用于说明数据帧是否被分割。(置0为不分割)

帧长 字节为单位,不包括首尾两个0x7e特殊字。

2. 地址域:某一地址字节的最低位为0,则表示该地址域没有结束;如最低位为1,表示地址域结束。

Client端的地址永远是一个字节,且最低位为1。所以该地址只能有128个。

Server端 Upper address总是有的,表示逻辑地址。

               Lower address在确定不需要的时候可以不出现,用于表示物理地址。

S端的地址结构:

一字节,只出现HDLC高位一字节地址。(Upper address      1)LSB

两字节,HDLC高位一字节地址,HDLC低位一字节地址。(Upper  0   Lower    1)

四字节,只出现HDLC高位两字节地址,和HDLC低位两字节地址。
(Upper.high  0    Upper.low  0        Lower.high  0       Lower.low  1)LSB

3. 控制域:
负责通讯中的帧链路计数,以及特殊数据帧的标识。

I                  RRR       P/F            SSS        0

RR                 RRR       P/F            000         1

SNRM               100         P            001         1

DISC               010         P            001         1

UA                 011         F            001         1

DM                 000         F            111         1

FRMR               100         F            011         1

RNR                RRR        P/F           010         1

UI                 000        P/F           001         1



RRR       接收帧计数器
SSS       发送帧计数器
P/F       Poll bit 由client发送,置 1 时表示server端回应,置 0 时表示不允许回应。
		  Final bit 由server发送,置 1 时表示一次数据帧的发送结束,置 0 表示还未发送完。
          Final bit 只有在通讯窗口window size大于 1 时才有意义。
          在window size = 1时,由server端返回的数据帧的这一位始终置 1。


帧类型对应如下:

Commands                                 Responses

I                                           I

RR                                          RR

RNR                                         RNR

SNRM                                        UA

DISC                                        DM

UI                                          UI

Excption                                   FRMR    

4. 帧校验:
标准协议文档中给予的16位CRC校验公式为(-46 附录A)

X**0 + X**5 + X**12 + X**16

关于长数据帧的传输:

在数据帧被分割传输时,帧类型与帧长字段中的S位,将被置1。

Client 通过发送RR数据帧来请求被分割的数据帧的其余部分。

UA数据帧所包含的链路参数:

Window_size         通讯的双方一次发送数据帧的数目。(默认值为1)

Maximun_infomation_field_length 链路数据帧中用户数据的最大长度。(默认值为128)

Transmit_maximum_infomation_field_length

Receive_ maximum_infomation_field_length

Transmit_window_size

Receive_ window_size

The following LLC parameters are defined:

Destination_LSAP: 0xE6;

Source_LSAP: 0xE6 for command frames and 0xE7 for response frames;

LLC_Quality: it is reserbed for future use and its value must always be 0x00.

 
Client端发送DISC帧,Server端响应UA帧或DM帧。

UA          表示接收到DISC帧后断开链接。

DM          表示在接收到DISC帧之前就已经处于链路断开状态。

HDLC是透明数据传输的链路协议,用户数据信息与链路层没有任何直接关系。

相对于62056该协议族中链路层HDLC部分来说,应用层更加的错综复杂,牵扯的相关标准协议文档也更多一些。

应用层COSEM

高级数据链路控制(High-Level Data Link Control或简称HDLC),
是一个在同步网上传输数据、面向比特的数据链路层协议。

计量仪表配套技术规范( COmpanion Specification for Energy Metering简称COSEM )。

配电线报文规范(Distribution Line Message Specification简称DLMS) [IEC 62056-53]
是应用层规范,独立于应用层以下的各个低层。

从上面的缩略字展开看的出,只有HDLC是和链路层有关,其余两个均是应用层的名词。DLMS与COSEM的区别在于,DLMS的概念更抽象更广泛。而COSEM内容涉及了更多的应用层结构组织和运行逻辑。

应用层最为重要的内容应该就是APDU了。HDLC链路层就如同一辆通勤于C/S交互两端的运载工具,这辆运载工具的用途就是通过协议制订的具体数据帧格式来封装运载主题的数据信息。最初接触APDU相关内容时,看着数据帧就像完全天书一般。迷途的原因很简单,因为手中没有探险的地图。解开探索APDU这趟旅程的最佳指导手册就是BER与AXDR编码规则,还有一个前提就是了解ASN语法。它们之间的关系是,ASN.1语法是用来描述应用层数据帧的,而BER编码与AXDR编码是用来实现ASN.1语法的。

 

BER:    Tag + Length + Value

        数据标识与数据长度为16bit

        Datatype classes(bit15.14)  Data type(bit13)    Data length(bit12~0)

Datatype classes:   Universal(00)

                    Application(01)

                    Context-specific(10)

                    Private(11)

Data type:          Primitive(0)    简单类型

                    Constructed(1)  复合类型

Data length:        数据内容的长度  (字节为单位)


被保留的客户端地址:

0x00    无站

0x01    客户管理过程

0x10    公开客户(最低级加密)

0x7F    广播

被保留的服务器地址:

Upper:

一字节              两字节

0x00                0x0000              无站

0x01                0x0001              逻辑设备管理

0x02~0x0F           0x0002~0x000F       保留

0x7F                0x3FFF              广播

Lower:

0x00                            0x0000                         无站

0x01~0x0F                   0x0000~0x000F            		   保留

0x7E                            0x2FFF                        物理设备地址

0x7F                            0x3FFF                         广播

整个典型交互模型中还包含了链路层的知识点和内容,而且是与应用层互相交织相互支撑的关系。

不是DLMS/COSEM的内容复杂艰深,作为一个涵盖了众多标准和接口定义的协议族,一定是需要运用很多行业间以至于符合国际标准的定义方法与解释手段。唯有这样,这套典型的跨界协议才能更通用的真实运用到各个国家和各个行业中。所以,要真正理解和正确运用这套协议族,除了协议本身之外还需要具备和了解更多的知识点。

在DLMS中用ASN.1描述的DLMS协议,用BER编码实现。用ASN.1描述的XDLMS协议用AXDR编码。在DLMS中只有AARQ与AARE数据帧的部分内容是使用DLMS协议,其余是XDLMS协议。

协议栈架构设计
在COSEM模型中,有非常详尽的、适用于各种通讯环境和情况的交互模型定义。但我们还是先由浅入深,从典型交互模型的认知开始。其实,在通讯环境较为简单是设备间交互时,典型交互模型就足以应对真实应用了。
 

COSEM典型交互模型:
链路层 —> 应用层 —> 各种应用机制和实现模组(Interface Class)—> 链路层

SNRM(c)                                    UA(s)

I.AARQ(c)                                  I.AARE(s)

I.download_object_list(c)                  RR(s)

RR…(c)                                     RR…(s)

I.request(c)                               I.response(s)

DISC(c)                                    DM(s)

链路层建立链接请求SNRM帧由客户端发送给服务器端,服务器端正常回应UA帧。

客户端发送信息帧的典型应用类型AARQ请求相关通讯参数,服务器端给予AARE回应。

下载对象列表这个应用层的典型特殊查询请求,在整个通讯交互中影响了下半段所有查询请求的内容与时序。
在COSEM典型模型中,如果对象列表中的链表内容不改变的话,此项步骤仅需执行一次。
且客户端持有服务器端的对象列表内容后,顺序向服务器端提交各对象的详细查询请求。

在长或超长APDU的情况下,链路层给予了最安全以及最贴心的分桢传输形式RR帧类型。

信息帧类型可以承载典型众多的请求与响应服务,并按照与链路层相对独立的APDU标准编码格式提供了
众多简单或复杂的数据结构、以及多种数据格式来描绘请求与响应的内容。

典型COSEM交互模型的连接模式中,每一次C/S交互都需要借助链路层的建立和拆除服务。

OBIS的奥秘和IC的组合魔方:
这两项重要的知识点虽然属于62056协议族体系中,也均扮演了举足轻重的角色。但在真实实现过程中,你会发现OBIS(.61)与IC(.62)会出现在你所实现的协议栈中最具体的代码当中,但并不会过多的影响到整个协议栈的结构和整体程序流向。其原因也很简单,整套标准协议的各子协议是以可选模组的角色出现,在某个具体子协议中的定义内容也是可选择的去实现,我想原本设计与定义这套协议族的IEC制定小组最始初衷亦是如此。

链路层部分实现时,个人觉得抓住几种典型帧类型的定义与特性去设计协议栈中的链路层是最为有效的途径和方法。在一些典型帧类型的细节实现中,我个人记忆最深的就是帧格式的解析与各个字段所包含的意义。还有就是在超长APDU情况下的分帧细节处理,要留意的是发送与接收计数器的理解。

应用层部分实现时,只用记住本次的应用层“历险”中,唯一可以指导我们逃出升天的地图就是COSEM Apdu的标准定义与内容繁复的数据结构定义。当然,我在前面章节也提到,看懂这个地图是需要前提的,那就是相关的那几套标准编码规则。

基于Gurux.DLMS分析
链接: Gurux.DLMS.cpp

GPRS连接
如果使用GPRS连接读取电表,则电表(SIM卡)上必须有静态IP地址。如果存在动态IP地址,电表必须始终启动与服务器的连接。这意味着我们的计价器可以发送示例定时推送信息,但我们无法在需要时读取计价器。在GPRS中,总是从调制解调器建立到GPRS网络的连接,而不是从GPRS网络建立到调制解调器的连接。客户端应用程序不可能打开连接。
静态IP地址:电表或抄表系统可以启动连接。动态IP地址:电表总是启动连接。

IEC 62056-21 is not DLMS/COSEM
IEC 62056-21(AKA 61107)不是DMLS!简而言之:IEC 62056-21是基于ASCII的标准,DLMS是在其他IEC 62056标准上定义的基于二进制的协议。它们是完全不同的标准。不能把它们混在一起!不支持IEC 62056-21的主要原因是设备制造商之间的实施方式差异很大。标准并没有定义密码生成的示例,不同的设备制造商也有所不同。当使用光学头时,仪表应使用IEC 62056-21移动二进制协议的E模式。这样做是因为通过这种方式,客户端可以选择使用的波特率。因此,GXDLMSDirector中存在“启动协议”。GXDLMSDirector仅在建立通信时才支持IEC 62056-21。

闲置超时(Inactivity timeout)
通常情况下,你可以连接到电表,过一段时间电表就不会回复了。原因是不活动超时。如果客户端在一段时间内没有从仪表中读取任何内容,仪表将关闭连接。我们可以从HDLC设置对象检查非活动超时。GXDLMSDirector在“高级”选项卡中设置非活动超时时自动从电表中读取数据。如果我们通过空中通信,则应稍微缩短时间,因为往返时间可能会导致问题。

DLMS/COSEM协议理解
DLMS传送数据,需要先建立链路层连接,建立应用层连接,再进行数据读取/写入,最后关闭连接。
 

客户端———————————————————————帧类型———————————————————————服务器
建立链路连接—————————————————>SNRM————————————————————————>
		  <———————————————————UA<———————————————————————建立链路连接
		  
建立应用连接—————————————————>AARQ————————————————————————>
		  <—————————————————AARE<———————————————————————建立应用连接

		  <—————————————————读取和写入———————————————————>

断开连接—————————————————————>DISC————————————————————————>
		  <———————————————————DM<—————————————————————————断开连接

DLMS协议模型中属性和访问方法在COSEM中,如同698协议中的OAD。
通过DLMS协议来访问COSEM对象。

分层结构:物理层、链路层、应用层 (每层通讯都是CS模式)
数据请求端为C端;数据提供端为S端。
如同:Client端发AARQ帧,Server端发AARE帧。

DLMS通信链路帧基本采用HDLC帧格式。

HDLC帧格式:
 


1.标志	2.帧格式	3.目的地址	4.源地址	  5.控制	 6.HCS	7.信息	8.FCS	标志	

1.标志头:7E 一次数据传输,若是单帧,则一次请求的请求头和请求尾都为7E (7E...7E)
						若是多帧,7E为第一帧请求头,也标志着下一帧的开始。
						多帧传输的等待时间一般由服务端设定,且多帧传输不能超过
						此等待时间。

2.帧格式域:分别由三个域组成:Frame_type子域(4 bit)
						   分段位(S,1 bit)
						   帧长度子域(11 bit)
		分段位:表示是否有后续帧
			   服务端给客户端的数据能够在一帧内传输完,S=0;有后续帧则S=1。
		帧长度子域:长度子域的值是除两个 7E 标志位之外的8位位组数。
				   一般帧长度不会超过 256 因此帧格式域第一个字节为A0/A8,第二个
				   字节表示该帧的长度。
 
3&4.地址域:该帧有两个地址域,一个是目的HDLC地址,另一个是源HDLC地址。
		   根据传输方向,CA和SA都可以是目的/源地址。
		   CA 用一字节表示。扩展地址的使用把CA的范围限制在128.
		   
		   服务器端为了能够在一个物理设备上寻址一个以上的逻辑装置并支持多站配置,
		   可以将HDLC地址分为两部分:
		   一部分为“高端HDLC地址”—— 逻辑设备地址。(总存在)
		   一部分为“低端HDLC地址”—— 物理设备地址。(不需要可以不用)
		   HDLC地址扩展机制应用于以上两种地址域。
		   一个完整的HDLC地址域的长度被限制为一字节、两字节或四字节
		   其中1字节——只有高端地址;
		   2字节——1字节高端地址,1字节低端地址;
		   4字节——2字节高端地址,2字节地段地址。

5.控制域帧格式:控制域为一字节;
			  RRR是接收序列号N(R),SSS是发送序列号N(S)。
			  P/F是查询/结束
		
6.头校验序列域(HCS):HCS长度为两字节。
					HCS计算除了开始标志和HCS本身外的头的字节数。
		
7.信息域:可以是任意字节序列。

8.帧检验序列域(FCS):FCS域长度为2个字节。
					计算除开始标志和FCS本身外的完整帧长度。

面向对象的构建电表模型:

属性和方法;
数据类型自我解释;
同一个逻辑设备,每个对象都有唯一标识码OBIS。
信息传输

不受具体的传输介质限制;
可协商的数据访问方式及应承能力;
灵活多种的数据安全控制访问。公共(no psw)、用户(LLS)、管理员(HLS)
通信模块

TCP/IP:GPRS/CDMA…;
HDLC:红外、485、MODEM…
CL432:S-FSK、G3、PRIME…
DLMS/COSEM 面向连接的协议

实现电能表系统的建立和通信:

1、建立仪表模型和数据标识;

2、将模型映射为协议数据单元APDU,对象的属性和方法可被用于定义访问;

3、通过链路层和物理层连接,最后通过传输通道进行通信。

仪表模型:OBIS对象标识系统 和 接口类

OBIS对象标识系统:OBIS给计量表中的所有数据都提供了一个标准的标识码,该标识码唯一标识一个数据对象。

接口类:每个分类号都对应于一类接口对象。
每个对象包括属性和方法,由属性和方法可以构成该对象的参考模型。
电能表中主要接口类包括:寄存器、时钟、曲线类、特殊日类、以太网设置类…

所有电相关的物理量需使用一个OBIS编码进行表示
 

OBIS分为  ABCDEF  6组
	其中  A —— 代表电相关;
	     B —— 为通道,一般是0不指定。(0-无指定通道、1-通道1、2-通道2);
	     C —— 具体物理量。  eg:正向有功功率、电流、电压等;
	     D —— 物理量统计方法。 eg:瞬时值、最大值等;
	     E —— 0为总量,1为费率1,2为费率2,类推;
	     F —— 一般为 255 (不用)
	
	则区分各个物理量的是CDE三组数据
	eg:CDE编码为21.7.0 则完整ABCDEF所表示的为1.0.21.7.0.255

DLMS模式
典型的串口设置为:300bps,校验位Even,数据位7.(也可以无校验位,数据位8)

读取/写入一个物理量,需要给物理量一个编码。
两种表示方式:

逻辑名LN:使用Class_id 和 OBIS 编码表示,同一个物理量此编码相同。

短名SN:一个二字节数,代表了一个地址,同一物理量在不同设备上有可能有不同的地址。

COSEM应用协议

GPRS通信时,APDU按照通讯双方定义的标志,协议等封装Wrapper节点,采用PPP(Point to Point Protocol,点到点协议)协议,将封装的数据经链路层传输,接收端通过GPRS接收数据,完成一次传输任务。

接收端收到数据后再按照包装的逆顺序层层解包,解析得到PPP协议的APDU数据帧,然后将该数据转交给COSEM应用程序进行下一步处理,完成COSEM协议通信过程。

上行通信 (集中器与管理中心通信)

采用基于TCP/IP、PPP协议的GPRS通信模式。DCU负责响应远程管理中心的命令请求,并按照命令完成对电能表的访问、操作,将结果返回到管理中心。上行通信的实质是访问DCU对象模型。
DLMS/COSEM的应用层协议是面向连接的,因此服务器应用进程与客户机之间通信建立在双方连接的基础上进行的。

下行通信 (集中器与电表通信)

下行通信采用本地数据采集模式预先在DCU与电能表间定义数据帧格式和交互命令模式,实现数据通信需要经过DCU和电表的相互身份验证、模式选择和数据读写请求应答三个步骤。

Server提供检索所支持的函数和方法,即实例化的COSEM对象。
 

集中器中的组件包括:
				1、电流传感器;
				2、计数器(ADC/DAC);
				3、晶体;
				4、处理器(MCU);
				5、存储系统;
				6、显示屏;
				7、电源组件

一些术语简称:

BB Broad band 宽带
NB Narrow-band 窄带
CTT Conformance Test Tool 一致性测试工具
RTC Real Time Clock 实时时钟
gateway 网关

Heart beat 用于维持TCP连接,默认心跳传递周期是2min。

MDMS(Meter Data Management System)
是一个在表中记录数据和其他应用程序之间“握手”的地方。
eg:计费功能、数据读取验证、分析改进、计算SAIDI/SAIFI、分析需求站点管理等。

ADP 主站地址
BER 误码率、误比特率
LSB 最低有效位
MSB最高有效位

LN引用:属性和方法通过它们所属的COSEM对象实例的标识符进行引用。

属性的引用:class_id、逻辑name的值、属性_index;
方法的引用: class_id、逻辑name的值、方法_index;

SN引用: 旨在用于简单设备。
一个COSEM对象的每个属性和方法都用一个13位的整数来标识。

DLMS模型分为三层:物理层、链路层、应用层

DLMS体系架构图:


物理层:主要是对底层通讯硬件的操作。eg:PSTN MODEM的初始化。打开/关闭

链路层:负责数据传输的可靠性,包括地址校验、帧长校验、数据的CRC校验。长数据帧的拆包组包,同时向应用层提供链路传输的服务。

链路层的LLC子层:(转发作用)将MAC子层的数据转发到应用层,或将应用层数据转发到MAC子层。
LLC子层只作转发而不对数据作出处理,其存在的重要性在于向应用层提供链路传输服务。LLC子层的传输具体实现不受DLMS协议的限制。

链路层的MAC子层:负责数据传输的可靠性,包括地址检查、数据CRC校验、长数据帧的组包拆包等。这些工作对于数据通讯都是必不可少的。

应用层:链路层连接建立后,DLMS中还需要建立应用层连接,才可以进行数据通讯。这个应用层连接建立过程被称为Negotiation,该过程为数据通讯提供一些配置参数,应用层连接请求由Client端发起,Client端发AARQ帧,Server端响应AARE帧。

数据通讯
连接建立后,Client端发送数据请求帧,Server端以数据响应Client在请求不同数据时,要使用特定数据独有的Class_id 和 OBIS(与698协议类似),用以标识不同类型的数据。

通讯结束,释放链路,解除连接。

结束后,可发送链路结束帧,结束一次通讯过程。
也可不发任何数据帧,依靠server端的超时挂断机制结束通讯,不过一般使用前者。
————————————————
版权声明:本文为CSDN博主「YzingC」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_45789531/article/details/132494981

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值