iec61850吧 关注:32贴子:67
  • 5回复贴,共1

[分享]关于ASN.1与BER编码

只看楼主收藏回复

ASN.1是国际电报机构ITU开发的一种高抽象层次标记法
比如:
Bibliography ::= SEQUENCE
{
author OCTET STRING
title OCTET STRING
publisher OCTET STRING
year OCTET STRING
}
这表示Bibliography这个对象数据的结构(shcema)
如果是实际的对象,就会有具体值
Bibliography ::= SEQUENCE
{
author OCTET STRING 'Stephen Prata'
title OCTET STRING 'C Primer Plus'
publisher OCTET STRING 'sams'
year OCTET STRING '2005'
}
这就是ASN1标记格式


1楼2015-08-06 14:14回复
    这个格式是人类可读的
    但是无法在网络上传输
    因此就有了对应的编码规则
    比如BER编码,这是最简单的编码规则basic encoding rule
    通常为TLV结构,也就是第一个字节代表数据的类型,第二个字节代表数据长度,后面都是数据
    如果T是结构类型,比如SEQUENCE或SEQUENCE OF 或者是IMPLICIT和EXPLICIT标签的全局类型
    那么V里面的内容还要继续展开


    2楼2015-08-06 14:19
    回复
      下面以一个整型为例进行编码
      A ::= INTEGER
      这里是一个全局的整型,所以当对一个整数5进行编码时
      可以写为 02 01 05
      02代表全局类型INTEGER,01代表长度,05是值
      B ::= [2] IMPLICIT INTEGER
      这里使用了隐式类型 整数
      这与全局类型的整数不一样
      需要对类型进行编码
      对于T
      8 7 | 6 | 5 4 3 2 1 bit
      1 0 0 0 0 0 1 0
      bit8 7 代表隐式原始类型,bit6代表非struct数据,bit54321里存放原始类型的编号,为2
      则第一个字节T为82,然后数据长度L为1,最后数据是整数5
      82 01 05
      C ::= [2] EXPLICIT INTEGER
      这里用了显式表达整数,也就是说要对整数这个类型是用什么类型的编码表示进行明确表示
      8 7 | 6 | 5 4 3 2 1 bit
      1 0 1 0 0 0 1 0
      A2 03 02 01 05.
      第一个字节的原理是,bit8 7代表内容类型数据,这是与原始类型相对的,需要进一步展开解释的
      因此bit6为1代表V为结构数据,紧接着bit54321为结构里的数据个数,这里是2个,第一个为整数的代码
      第二个为具体的整数值
      下面是数据的长度L 3,在接下来就是整数类型编号,下面是具体整数值有几个字节 1,最后是整数值 5


      3楼2015-08-06 14:35
      回复
        下面讲一下IEC61850与BER编码的关系
        IEC61850规定了一个层次结构,其中有各种变量和对应的reference字串
        如果有报告数据上送,首先会把这个参考字串和对应的值以BER编码形式在网络上发送
        接收到了这个数据的客户端会进行数据解析,还原成ASN.1格式的文本
        再根据MMS协议的结构映射到对应的服务处理函数
        这个服务处理函数会继续调用IEC61850的ACSI服务
        最后将数据写入到IEC61850客户端的实时数据库中
        完成数据的接收


        4楼2015-08-06 14:41
        回复
          关于TLV结构的进一步介绍
          在X.209规范中解释到,T为indentifier标示符,有bit8-1共8个bit,其中bit5-1共5个bit为tag值或者叫tag number。
          其中bit8-7表示tag值为universal全局(如02为整形)、Application应用程序规定类型或Contex-Specific上下文确定类型。
          对我们而言主要是全局的和上下文确定类型(如CHOICE中的多种类型)。
          当bit5-1作为整数解析的值小于等于30时,这个identifier也就是T,只要一个字节(octet更准确,因为以后可能使用宽字节体系)就能表示了,如果类型超过30个,比如说这个CHOICE里有编号的类型为100个,那么一个字节的identifier就无法满足了,这时候就需要扩充identifier,扩充identifier的表示如图:

          可以看到扩充后的identifier中的tag值为后面每个字节的bit7-1中的整数值之和。


          5楼2015-08-17 14:51
          回复
            想问一下三层两网架构在61850哪部分啊,找了好多天没找到


            IP属地:天津来自Android客户端6楼2023-08-28 17:16
            回复