HDLC帧格式

DLMS通信链路帧基本采用HDLC帧格式,HDLC除几个特殊域,其他域均为16进制数据,这章我主要分享什么是HDLC帧格式

如图一则为基本的HDLC帧格式:

图一

接下来的每个帧的解释我将按照一次标准报文应答进行解释HDLC帧格式,报文如下

客户端:7E A0 46 48 68 FE FF 75 10 05 C1 E6 E6 00 60 35 A1 09 06 07 60 85 74 05 08 01 01 8A 02 07 80 8B 07 60 85 74 05 08 02 01 AC 0A 80 08 41 42 43 44 45 46 47 48 BE 10 04 0E 01 00 00 00 06 5F 04 00 00 00 14 00 00 BD BF 7E

一,标志帧

        即为标志头,不同的网络协议标志头不同,此处报文头为7E。一次数据传输,假如是单帧,则一次请求的请求头和请求尾都为7E(此处7E标志着结束)。假如是多帧数据传输7E为第一帧请求头,也标志着下一帧的开始。此处需要注意的是多帧传输的等待时间一般由服务端设定,且多帧传输不能超过此等待时间。

二,帧格式域

        帧格式域一般为两个字节,如文章头部报文即 A0 46 为帧格式域,它由三个子域组成:Frame_type子域(4 bit),分段位(S, 1 bit)和帧长度子域(11 bit),如下图二

图二

客户端:7E A0 46 48 68 FE FF 75 10 05 C1 E6 E6 00 60 35 A1 09 06 07 60 85 74 05 08 01 01 8A 02 07 80 8B 07 60 85 74 05 08 02 01 AC 0A 80 08 41 42 43 44 45 46 47 48 BE 10 04 0E 01 00 00 00 06 5F 04 00 00 00 14 00 00 BD BF 7E

      看着好像A0 46与图二没有关系,其实在此处需要把 A0 46分别转化为二进制然后拼接,并且不足8位二进制数据需要补0,如A0转为二进制即为10100000,46转为1000110,此时1000110为7位,我们需要把它转化为8位补0,可以得到01000110,此处拼接起来可得到1010000001000110,此时二进制数据即可和图二关系对应。

       格式类型子域(Frame_type)的值为1010(二进制)。

       分段位S表示是否有后续帧,如果服务端给客户端传送的数据能在一帧内传送完,那么S=0,如果有后续帧那么S=1,此处S=0。

       长度子域的值是除两个7E标志之外的8位位组数。在一般情况下,帧长度不会超过256,因此帧格式域第一个字节为 A0或者A8 ,第二个字节表示该帧的长度

三,地址域

        这个帧有两个地址域:一个目的HDLC地址和一个源HDLC地址。根据数据的传输方向,客户机端地址和服务器地址都可以是目标地址或源地址。客户机端地址总是用一个字节表示。扩展地址的使用把客户机地址的范围限制在128。

        在服务器端,为了能在一个物理设备内寻址一个以上的逻辑装置并且支持多站配置,可以将HDLC地址分为两部分。 一部分称为“高端HDLC地址”用于逻辑设备(一个物理设备内可独立寻址的实体)寻址,而第二部分——“低端HDCL地址”将用于物理设备(多站配置的一个物理设备)寻址。高端HDLC地址总是存在,而低端HDCL地址在不需要时可不用。  

        HDLC地址扩展机制应用于以上两种地址域。这种地址扩展说明可变长度的地址域,但是考虑到该协议,一个完整的HDLC地址域的长度被限制为一字节,两字节或四字节如下图三:

     · 一字节:只有高端HDLC地址存在。

     · 两字节:一字节高端HDLC地址和一字节低端HDLC地址。

    · 四字节:两字节高端HDLC地址和两字节低端HDLC地址。

图三

     看着好像有点麻烦,我们继续按照文章顶部报文进行解释地址域的解析方法,首先这条报文是客户端发给服务端的报文,目的地址为服务端(1到4个字节),源地址为客户端(固定为一个字节),然后我们之前的包括标志域,格式域已经解析完7E A0 46,地址域(目的地址)我们从48开始解析,首先将48转为二进制数据01001000(实际结果应该是1001000,我们要对对所有的16进制转二进制数据进行8位补0),此时01001000的第八位即是LSB位,此位为0表示地址域未结束,1表示结束,我们继续解析下一字节68,转为二进制01101000,继续解析FE转为二进制11111110,继续解析FF转为二进制11111111,此时可以看到第八位为1表示目的地址结束,继续解析(源地址)75转化为二进制位01110101。到此处,所有的地址域(目的地址和源地址)解析结束。可参考图四学习。

客户端:7E A0 46 48 68 FE FF 75 10 05 C1 E6 E6 00 60 35 A1 09 06 07 60 85 74 05 08 01 01 8A 02 07 80 8B 07 60 85 74 05 08 02 01 AC 0A 80 08 41 42 43 44 45 46 47 48 BE 10 04 0E 01 00 00 00 06 5F 04 00 00 00 14 00 00 BD BF 7E 


图四

四,控制帧格式

        控制帧为一个字节,此处可以得到10为控制帧字节。

客户端:7E A0 46 48 68 FE FF 75 10 05 C1 E6 E6 00 60 35 A1 09 06 07 60 85 74 05 08 01 01 8A 02 07 80 8B 07 60 85 74 05 08 02 01 AC 0A 80 08 41 42 43 44 45 46 47 48 BE 10 04 0E 01 00 00 00 06 5F 04 00 00 00 14 00 00 BD BF 7E 

命令/应答帧控制字段的编码方式为模式8,如ISO/IEC 13239的5.5及图五规定。

图五

将10转为二进制00010000,即可对应上图

这里RRR是接收序列号N(R),SSS是发送序列号N(S),P/F是查询/结束位。

链路层链接好即SNRM UA帧后,RRR和SSS均为000,发送一帧I帧SSS加1,接收到一帧I帧RRR加1,客户端和服务端都是如此。P/F标志位中P是对客户端而言的,需要响应P=1,那么广播帧时P=0;F是对服务端而言的,F表示发送是否结束,也就是是不是没有后续帧,F=1表示有后续帧,因此当客户端收到服务端发送来的帧格式域中S=1和此处的F=1的帧时,需回应RR帧等待接收未接收完的数据。

五,头校验序列(HCS)域

        HCS的长度是两个字节。HCS计算除开始标志和HCS本身外的头的字节数。HCS的计算方法跟帧校验序列(FCS)类似。不包含信息域的帧,仅含FCS(在这种情况下,HCS被看作FCS)。HCS(和FCS)的计算方法采用CRC校验算法,不等式X**0+X**5+X**12+X**16。CRC具体算法可百度查询,此处用到的X**0+X**5+X**12+X**16的算法,我自己写了一个JAVA版本,可供小伙伴参考一下,图六。

图六

具体计算方式依旧通过报文进行解释

客户端:7E A0 46 48 68 FE FF 75 10 05 C1 E6 E6 00 60 35 A1 09 06 07 60 85 74 05 08 01 01 8A 02 07 80 8B 07 60 85 74 05 08 02 01 AC 0A 80 08 41 42 43 44 45 46 47 48 BE 10 04 0E 01 00 00 00 06 5F 04 00 00 00 14 00 00 BD BF 7E 

根据HCS的长度是两个字节。HCS计算除开始标志和HCS本身外的头的字节数。我们先找出计算部分:A0 46 48 68 FE FF 75 10  对应的校验值05 C1,然后通过上述java算法进行比较即可算法是否正确,错误情况服务端不处理该报文。

六,信息域

客户端:7E A0 46 48 68 FE FF 75 10 05 C1 E6 E6 00 60 35 A1 09 06 07 60 85 74 05 08 01 01 8A 02 07 80 8B 07 60 85 74 05 08 02 01 AC 0A 80 08 41 42 43 44 45 46 47 48 BE 10 04 0E 01 00 00 00 06 5F 04 00 00 00 14 00 00 BD BF 7E

        信息域即是任意的通讯数据等等,具体解析方法,我将会在下一章解释

七,帧校验序列(FCS)域

客户端:7E A0 46 48 68 FE FF 75 10 05 C1 E6 E6 00 60 35 A1 09 06 07 60 85 74 05 08 01 01 8A 02 07 80 8B 07 60 85 74 05 08 02 01 AC 0A 80 08 41 42 43 44 45 46 47 48 BE 10 04 0E 01 00 00 00 06 5F 04 00 00 00 14 00 00 BD BF 7E 

根据FCS的长度是末尾除7E标志尾两个字节。FCS域的长度是两个字节,用来计算除开始标志和FCS本身 外的完整的帧长度。不包含信息域的帧只包含FCS(这里HCS被看作FCS)我们先找出计算部分:A0 46 48 68 FE FF 75 10 05 C1  对应的校验值05 C1,然后通过上述java算法进行比较即可算法是否正确,错误情况服务端不处理该报文。

结语:至此HDLC如何解析大概分享完了,大家有什么疑惑或者其他问题可留言     =。=  

 谢谢大家的点赞,我会努力写的!

引用文献

l IEC 62056-21, Electricity Metering-Data Exchange for Meter Reading, Tariff and Load Control-Part 21: Direct local data exchange.2001

l IEC 62056-61, Electricity Metering-Data Exchange for Meter Reading, Tariff and Load Control-Part 61: Object Identification System(OBIS). 2001

l IEC 62056-62, Electricity Metering-Data Exchange for Meter Reading, Tariffand Load Control-Part 62: Interface Classes. 2001 Data exchange of automatic meter reading system

l IEC62056-46,Electricity Metering-Data Exchange for Meter Reading, Tariff and Load Control-Part 46: Data link layer using HDLC protocol

l IEC 62056-53, Electricity Metering-Data Exchange for Meter Reading, Tariff and Load Control-Part 53: COSEM Application Layer. 2001

l IEC 61334-6, A-XDR encoding rule

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,640评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,254评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,011评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,755评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,774评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,610评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,352评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,257评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,717评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,894评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,021评论 1 350
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,735评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,354评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,936评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,054评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,224评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,974评论 2 355