标题摘要内容
IEC61850通讯标准中的编码规范ASN.1
来源: | 作者: | 发布时间: 2021-03-04 | 9 次浏览 | 分享到:

  0引言

  IEC61850,变电站内的通讯网络和系统(Communicationnetworksandsystemsinsubstations)是实施数字化变电站的唯一国际标准,它定义了变电站内智能电子设备IED(IntelligentElectricDevice)之间信息交换的数据模型和互操作规范。在具体的通讯过程中,IEC61850标准所要求遵循的编解码规范就是ASN。1。

  ASN。1是抽象语法标记(ASN。1:AbstractSyntaxNotationOne)的英文缩写,是一种ISO/ITU-T标准,描述了一种对结构化信息对象进行表示、编码、传输和解码的数据格式。它提供了一整套正规的格式用于描述信息对象的结构,而不管机器语言上如何执行及这些数据的具体指代,不用去管到底是什么样的应用程序,或者采用什么规范的接口或通信介质。作为一种异构计算机系统之间的信息交换的国际标准,它已经被广泛应用在各种各样的计算机通信协议中。

  由于ASN。1规范了结构化信息对象的描述和解码过程,使得在通信协议中传递带有语义的信息对象成为可能,程序设计者所关注的目标,已不再是繁琐的编解码流程,而是如何定义和描述异构系统之间通信过程中的信息对象,至于具体的编解。

  码过程,则有统一的ASN。1编码器和解码器来实现。

  1关于ASN。1规范

  ASN。1规范位于ISO/OSI七层开放互连模型的第六层--表示层,包括以下国际标准:

  ISO/IEC8824-1:1999,Informationtechnology-AbstractSyntaxNotationOne(ASN。1):Specificationofbasicnotation基本标记规范。

  ISO/IEC8824-2:1999,Informationtechnology-AbstractSyntaxNotationOne(ASN。1):Informationobjectspecification信息对象规范。

  ISO/IEC8824-3:1999,Informationtechnology-AbstractSyntaxNotationOne(ASN。1):Constraintspecification规范约束。

  ISO/IEC8824-4:1999,Informationtechnology-AbstractSyntaxNotationOne(ASN。1):ParameterizationofASN。1ASN。1参数化。

  ISO/IEC8825-l:2000,Informationtechnology-ASN。1encodingrules:SpecificationofBasicEncodingRules(BER),CanonicalEncodingRules(CER)andDistinguishedEncodingRules(DER)ASN。1编码规则:基本编码规则BER,典型编码规则CER,区分编码规则DER。

  ISO/IEC8825-2:2000,Informationtechnology-ASN。1encodingrules:SpecificationofPackedEncodingRules(PER)ASN。1编码规则:压缩编码规则PER。

  ISO/OSI七层互连模型中的应用层协议大量使用了ASN。1来描述它们所传输的协议数据单元PDU,这些协议包括:用于传输电子邮件的X。400、用于目录服务的X。500、用于VoIP的H。323和用于网络管理的SNMP;用于实时通讯的制造报文规范MMS等等。

  2ASN。1的标记与语法

  ASN。1的标记和语法,如同程序开发人员所熟悉的高级语言一样,在理解和掌握上是很容易的。

  (1)标记类型

  ASN。1定义了许多的通用的数据标记类型,比如像整型、字符串、实型等原子级的数据类型。这些类型是不可再分的。

  除了简单类型,ASN。1也规范了一些结构化标记类型,例如:

  结构(SEQUENCE):由不同的变量类型组成的有序的结构。这个就如同“C”语言中的结构类型(struct)。

  结构列表(SEQUENCEOF):同一个结构类型构成的有序的结构列表。

  集合(SET):由不同的变量类型组成的无序的结构,用来描述复杂的信息对象。

  类型选择(CHOICE):在不同的变量类型中选择之一。

  表1列举了一些ASN。1的数据类型,每个数据类型都有唯一的标记值与之对应,这个标记值将是编解码过程中的类型识别码,它将决定具体的编解码规则。更详细的标记类型,请参考ASN。1的有关规范。

  表1ASN。1标记的数据类型

  类型 关键字 标记值(十进制表示)

  布尔 BOOLEAN 1

  整形 INTEGER 2

  位串 BITSTRING 3

  八进制字符串 OCTETSTRING 4

  空类型 NULL 5

  对象标识符 OBJECTIDENTIFIER 6

  对象描述符 OBJECTDESCRPTOR 7

  引用的外部类型 EXTERNAL 8

  实形 REAL 9

  枚举 ENUMERATED 10

  结构和结构列表 SEQUENCE,SEQUENCEOF 16

  集合和集合列表 SET,SETOF 17

  可打印字符串 PrintableString 19

  ASCII码字符串 IA5String 22

  统一时间 UTCTime 23

  (2)ASN。1模块描述文件

  ASN。1规范中的基本构造模块Module,是指采用ASN。1的标记语法,对应用信息模型进行定义和标记的模块称之为ASN。1模块。用来存储ASN。1模块的文件称之为ASN。1模块描述文件。

  一个模块的典型格式如下:

  <ModuleReference>DEFINITIONS::=

  BEGIN

  EXPORTS

  IMPORTS

  AssignmentList

  END

  其中:

  ::=为赋值符号;

  具体的描述和标记信息就是由位于BEGIN和END之间的语句所构成;

  EXPORTS这个模块中的定义可能被其他模块引入;

  IMPORTS定义由其他模块引入;

  AssignmentList这个模块中将定义类型分配、值分配及宏定义。

  3ASN。1的基本编码规则

  从标准中我们就可以看到,ASN。1主要有以下几种编码规则:基本编码规(BER,BasicEncodingRules),规范编码规则(CER,CanonicalEncodingRules),区分编码规(DER,DistinguishedEncodingRules),压缩编码规(PER,PackedEncodingRules)和XML编码规(XER,XMLEncodingRules)等。

  每种编码规则各有特点,可以应用不同的场合。BER编码规则的每个标记符号都有特定格式,编码简单,但较占字节;CER和DER是从BER派生出来的,CER针对不定长格式,常应用在需要传输大量数据的应用,DER针对定长格式,适合安全数据传输,特别是数字签名;PER可大大缩短编码后的字节数,常应用在视频电话、多媒体、3G等需要高速数据传输的领域。

  ASN。1的传输,是基于八位位组的字节序列来进行的,因此,它的编码规则遵循着标记TAG、长度LENGTH、值VALUE的格式,简称TLV,示意图如图1。

  图1ASN。1编码的格式(3。jpg)

  其中:TAG:标记,是该段编码的头字节,描述该段编码所代表的信息类型,通常占据1~2个字节。当标记值小于32时,占据一个字节;当标记值大于等于32时,则TAG字段的第一个字节被置为16进制的1F,第二个字节则是实际的标记值。

  为了保证数据在传送时被接收方正确解码,ASN。1对标记TAG定义了4种类型:UNIVERSAL、ContextSpecific、APPLICATION、PRIVATE)。UNIVERAL表示ASN。1定义的标准数据类型,APPLICATION为显式(EXPLICIT)定义,而隐式(IMPLICIT)后面紧接着的类型TAG将不进行编码。若未注明TAG类型即为ContextSpecific类型。

  当TAG小于31时:

  表2TAG≤31,TAG的编码方式

  字节1

  Bit7 Bit6 Bit5 Bit4~0

  00:UNIVERSAL通用

  01:APPLICATION应用

  10:ContextSpecific上下文相关

  11:PRIVATE私有

  0:PRITITIVE

  1:Constructed TAG

  当TAG大于等于31时:

  表3AG>31,TAG的编码方式

  字节1 字节2

  Bit7 Bit6 Bit5 Bit4~0 Bit7 Bit6~0

  00:UNIVERSAL通用

  01:APPLICATION应用

  10:ContextSpecific上下文相关

  11:PRIVATE私有 0:PRITITIVE

  l:Constructed 11111 1 

  LENGTH:长度。描述在后续的VALUE值是由多少个字节数所构成,根据VALUE的长度不同,LENGTH所占据的字节也不同。一般,小于等于127个字节的VALUE时,LENGTH占据一个字节;大于127时,则LENGTH的第一个字节表示LENGTH字段占据的实际字节数,并且第7位置位,后续的字节则表示实际的VALUE长度。

  表4LENGTH的编码方式

   字节1 字节2~字节n+1

   Bit7 Bit6~0 

  LENGTH≤127 0 LENGTH LENGTH

  LENGTH>127 1 LENGTH的字节长度n 

  VALUE:值。实际所要传递的编码内容,具体的编码规则,则根据不同的标记类型,采用不同的编码规范。

  4ASN。1Compiler

  (1)ASN。1标记语法与高级语言之间的对应关系

  正如上个章节中我们介绍的那样,要理解ASN。1的标记与语法,就如同我们理解高级编程语言当中的语法或者类型声明一样,ASN。1中规范的编辑和类型,我们很容易的就可以在高级语言中找到与它相对应的类型和语法。下面就是一个简单的例子(以C语言为例):

  PersonName是一个用ASN。1规范来标记的数据结构,来记录有关人名的信息,一共有3个元素来描述这个人名:分别是本名(givenName)、原名(initial)、家族名(familyName)。以下是其用ASN。1规范的描述:

  PersonName::=[APPLICATION1]IMPLICIT

  SEQUENCE

  {

  givenNameIA5String;

  initialIA5String;

  familyNameIA5String

  }

  相对应的,我们可以用“C”语言来描述这个PersonName:

  typedefstructPersonName

  {

  IA5StringgivenName;

  IA5Stringinitial;

  IA5StringfamilyName

  }PersonName

  通过这个例子,给我们深刻的印象是在ASN。1标记语法之间和高级语言之间,有一个明确而且唯一的映射关系,那么,只要知道了这个唯一的对应关系,我们是否可以采用一个自动化编码的处理流程,来自动生成ASN。1规范所对应的高级语言的编解码过程呢?

  答案是肯定的,这就是目前在通讯领域广泛应用的ASN。1代码翻译工具--ASN。1Compiler。

  (2)ASN。1Compiler自动翻译器

  一个典型的ASN。1Compiler的输入输出如图2。。

  图2ASN。1Compiler工作流程(4。jpg)

  图中的ASN。1Compiler在输入需要翻译的ASN。1模块文件之后,根据对应和翻译规则,生成了描述和定义类型、变量及函数原型的。h文件,以及具体的编码、解码函数代码的。c文件,经过C语言编译链接程序的编译链接,生成了可执行代码供实际的应用通讯调用。

  以下为应用ASN。1Compiler翻译成的C语言代码:

  PersonNameh

  表5ASN。1Compiler生成的C代码头文件

  

  typedefstructPersonName

  {

  IA5StringgivenName;

  IA5Stringinitial;

  IA5StringfamilyName;

  }Name;

  

  AsnLenBEncPersonNameContentPROTO((BUF_TYPEb,PersonName*v));

  

  voidBDecPersonNameContentPROTO((BUF_TYPEb,AsnTagtagId0,AsnLenelmtLen0,PersonName*v,AsnLen*bytesDecoded,ENV_TYPEenV));

  PersonName。c

  表6ASN。1Compiler生成的C文件

  #include“asn-incl。h”

  #include“PersonName。h”

  

  AsnLen

  BEncNameContentPARAMS((b,v),BUF_TYPEb_AND_PersonName*V)

  {

  ……

  returntotalLen;

  }

  

  VoidBDecNameContentPARAMS((b,tagId0,elmtLen0,v,bytesDecoded,env),

  BUF_TYPEb_AND_AsnTagtagId0_AND_AsnLenelmtLen0_AND_PersonName*v_AND_AsnLen*bytesDecoded_AND_ENV_TYPEenv)

  {

  ……

  }

  很显然,只要在应用中调用相应的编码函数,所要传送的信息内容就被编成字节流的形式;或者在网络通讯中接收到一串字节流后,调用相应的解码函数,就会得到一个具体的信息内容,至于具体的编解码过程,则是我们不再需要考虑的了。

  (3)应用ASN。1Compiler的优势

  由于采用了机器的自动识别和翻译,不仅缩短了编程时间,而且生成的代码在可读性、效率和准确性都有大幅度的提高,减少了人为的错误,使得实际通讯变得简单高效起来。

  目前,已经有众多的ASN。1Compiler的成熟产品可供选择,用户可以根据不同的需求选择不同的工具生成如C/C++/JAVA/XML等语言的源代码,从而缩短开发周期。可以说,ASN。1Compiler的出现,使得程序开发人员不再担心通讯过程中的编码、解码流程,而把更多的精力投放到通讯应用的本身,ASN。1Compiler无疑是一个针对开发者的高效的辅助工具。

  5ASN。1在数字化变电站系统中的应用

  数字化变电站的研究和实施在国内正方兴未艾,IEC61850作为其唯一的国际通讯标准,克服了在传统的自动化设备问互联时封闭的、针对特定应用、语义简单的通讯模式,而是建立在开放式互联模型ISO/OSI7层规范的应用层协议上,丰富的而又规范的语义表达,统一的编解码规则,使得更多的传输信息成为可能。应用配电载波线路的配电自动化的国际标准IEC61334(DistributionAutomationusingDistributionlinecarriersystems)等也都采用了ASN。1规范作为其标记和编码规则。

  以IEC61850标准为例,IEC61850-8-1、IEC61850-9-1和IEC61850-9-2是规范其通讯协议栈的部分。在IEC61850-8-1中,通讯协议栈映射到制造报文规范MMS,而MMS是建立在ISO/OSI7层互联模型的应用层的协议,让我们看一下采用ASN。1规范书写的MMS的模块文件内容:

  MMSDEFINITIONS::=BEGIN

  MMSpdu::=CHOICE{

  confirmed-RequestPDU[0]

  IMPLICITConfirmed-RequestPDU,

  confirmed-ResponsePDU[1]

  IMPLICITConfirmed-ResponsePDU,

  confirmed-ErrorPDU[2]

  IMPLICITConfirmed-ErrorPDU,

  unconfirmed-PDU[3]

  IMPLICIT

  ……

  Initiate-RequestPDU,

  initiate-ResponsePDU[9]

  IMPLICITInitiate-ResponsePDU,

  initiate-ErrorPDU[10]

  IMPLICITInitiate-ErrorPDU,

  conclude-RequestPDU[11]

  IMPLICITConclude-RequestPDU,

  conclude-ResponsePDU[12]

  IMPLICITConclude-ResponsePDU,

  conclude-ErrorPDU[13]

  IMPLICITConclude-ErrorPDU}

  Confirmed-RequestPDU::=SEQUENCE{

  invokeIDUnsigned32,

  ConfirmedServiceRequest}

  ……

  END

  根据ASN。1的标记及语法不难理解,上面所定义的MMS协议数据单元PDU共有confirmed-RequestPDU、Confirmed-ResponsePDU等多个可选项,具体到confirmed-RequestPDU,它是一个结构化的信息体,包括一个32位的无符号整数和结构体ConfirmedServiceRequest组成,至于ConfirmedServiceRequest还会在上面的模块文件中得到标记和描述。

  同样的,在IEC61850-9-1和IEC61850-9-2中,也采用ASN。1的标记语法对其协议数据单元进行了定义:

  IEC61850DEFINITIONS::=BEGIN

  IMPORTSDataFROMISO-IEC-9506-2

  IEC61850-9-2SpecificProtocol::=CHOICE{

  9-1-Pdu[0]IMPLICITOCTETSTRING,

  savPdu[APPLICATION0]IMPLICITSavPdu,

  }

  END

  6结束语

  ASN。1是一个开放性的异构系统之间的编码规范。采用一个高效的代码生成工具--ASN。1Compiler,就可以很容易地生成基于ASN。1规范的编码/解码流程的源代码(例如最常见的C/C++语言),经过编译链接后变成可执行代码。

  ASN。1规范的应用,对计算机通讯来说,是一个具有里程碑意义的变革,它使得通讯双方关注信息交换的内容,而非具体的编解码过程。这也是新一代的自动化通讯标准IEC61850在实用性、规范性、灵活性和易扩展上都强于传统的远动归约的原因之一。

  正是采用了ASN。1的编码规范,IEC61850标准己不再关心具体的通讯过程,而是大量的研究和规范了数字化变电站内IED设备间的数据交换模型和互操作规范,因此,要实现和实施好数字化变电站系统,研究透彻ASN。1规范就是非常重要的了,这也是实现IEC61850的核心技术之一。