MMS协议
MMS基础知识
MMS(Manufacture Message Specification)通过对实际设备进行面向对象建模的方法,实现了网络环境下不同制造设备之间的互操作。
IEC61850标准把MMS引入电力自动化领域,将其核心ACSI服务直接映射到MMS标准。
MMS规范位于OSI七层参考模型的第七层——应用层。
MMS通信流程
MMS通信采用客户端/服务器模式(C/S架构);
MMS服务可以分为带确认(Confirmed)和不带确认(UnConfirmed)两类。
MMS的基本思想
MMS的基本思想就是定义一种大家都能理解的公共语言。一些来自不同生产厂家的智能装置,
这些装置可能运行着不同的操作系统和程序,硬件结构也可能存在千差万别,设置同一厂家不同时期生产的不同型号的装置在硬件和软件上也可能存在差异。
要达到互操作的目的,就必须先考虑“屏蔽”叼各装置的具体技术细节(如CPU型号、操作系统、程序编程语言、开关量子系统),使各装置在网络通信方式上遵守同一的规定,具有相同或相近的外部接口。
MMS采用构建虚拟设备(即VMD)的方法来达到隐藏各类装置技术细节的目的。虚拟设备由实际设备映射得到,它和装置的具体细节无关,具体通信时信息交互在客户端和虚拟设备之间进行。这样就“屏蔽”掉了装置的技术细节,客户端就可以和不同厂家、不同型号的多种装置进行通信。
MMS对象和服务
c++string类型MMS定义了VMD(虚拟制造设备)、Domain(域)、NamedVariable(有名变量)、NamedVariableLists(有名变量列表)等对象模型,另外还定义了大概80多种服务
IEC61850与MMS的对象映射
编号 | IEC61850对象 | MMS对象 |
1 | 服务器(Server) | 虚拟制造设备(VMD) |
2 | 逻辑设备(Logical Devices) | 域(Domain Objects) |
3 | 逻辑节点(Logical Nodes) | 有名变量 (Named Variable Objects) |
4 | 数据(Data) | |
5 | 报告控制块(RCB) | |
6 | 定值组控制块(SGCB) | |
7 | 日志控制块(LCB) | |
8 | 控制(Control) | |
9 | 数据集(Data Set) | 有名变量列表 (Named Variable List Objects) |
10 | 日志(Logs) | 日志(journal Objects) |
11 | 文件(Files) | 文件(Files) |
IEC 61850与MMS的服务映射
编号 | IEC61850对象 | ACSI服务 | MMS服务 |
1 | 服务器(Server) | GetServerDirectory | GetNamedList |
2 | 逻辑设备(LDevice) | GetLogicalDeviceDirectory | GetNamedList |
3 | 逻辑节点(LNode) | GetLogicalNodeDirectory | GetNamedList |
4 | GetAllDataValues | Read | |
5 | 数据(Data) | GetDataValues | Read |
6 | SetDataValues | Write | |
7 | GetDataDirectory | GetVariableAccessAttribute | |
8 | GetDataDefinition | GetVariableAccessAttribute | |
9 | 数据集(DataSet) | GetDataSetValues | Read |
10 | SetDataValues | Write | |
11 | CreateDataSet | DefineNamedVariableList | |
12 | DeleteDataSet | DeleteNamedVariableList | |
13 | GetDataSetDirectory | GetNamedVariableListAttribute | |
14 | 报告控制块(RCB) | Report | InformationReport |
15 | GetBRCBValues | Read | |
16 | SetBRCBValues | Write | |
17 | GetURCBValues | Read | |
18 | SetURCBValues | Write | |
19 | 控制(Control) | Select | Read |
20 | Select With Value | Write | |
21 | Cancel | Write | |
22 | Operate | Write | |
23 | TimeActivatedOperate | Write | |
24 | CommandTermination | InformationReport | |
25 | 文件(File) | GetFile | FileOpen,FileRead,FileClose |
26 | SetFile | ObtainFile | |
27 | DeleteFile | FileDelete | |
28 | GetFileAttributeValues | Sequence of FileDirectory | |
29 | 定值组控制块(SGCB) | SelectActiveSG | Write |
30 | SelectEditSG | Write | |
31 | SetSGValues | Write | |
32 | ConfirmEditSGValues | Write | |
33 | GetSGValues | Read | |
34 | GetSGCBValues | Read | |
35 | 日志控制块(LCB) | GetLCBValues | Read |
36 | SetLCBValues | Write | |
37 | GetLogStatusValues | Read | |
38 | QueryLogByTime | ReadJournal | |
39 | QueryLogAfter | ReadJournal | |
40 | 取代(Substitution) | GetDataValues | Read |
41 | SetDataValues | Write | |
42 | GSE / GOOSE | GetGoCBValues | Read |
43 | SetGoCBValues | Write | |
44 | GSE / GSSE | GetGsCBValues | Read |
45 | SetGsCBValues | Write | |
46 | 关联(Associate) | Associate | Initiate |
47 | Abort | Abort | |
48 | Release | Conclude | |
MMS与ASN.1编解码
MMS的编解码采用ASN.1规范。ASN.1是抽象语法标记(abstract syntax notation one)的英文缩写,它位于ISO/OSI七层开放互联模型的第六层——表示层。它分为语法规则和编码规则两部分:语法规则用于描述信息对象的具体构成(格式),如数据类型、内容顺序或结构。编码规则定义了信息的具体编/解码语法。
ASN.1基础
ASN.1数据类型
ASN.1中定义的数据类型既有简单的基本数据类型,也有复杂的结构类型。
基本类型是不可再分的,具体包括布尔型(BOOLEAN)、整型(INTEGER)、枚举类型(ENUMERATED)、空类型(NULL),对象标识符(OBJECT IDENTIFIER)等。
除了基本类型,ASN.1还定义了多种复杂的结构类型,例如:
(1)SEQUENCE:有序的数据结合,由不同的数据类型构成,强调内部成员的排序。
(2)SEQUENCE OF: 有序的数据集合,成员由为同一类型的数据,类似C语言的数组。
(3)SET:由不同类型的数据组成的集合,对成员的顺序不做要求。类似于c语言中的结构体类型。
(4)CHOICE:选择结构,在列出的内部成员中,只能选择其中之一。类似于c语言中的共用体类型。
基本编码规则BER
ASN.1提供了多种编码规则,如BER、DER、CER、PER等,IEC 61850在MMS编/解码中使用的是BER基本编解码规则。
1. BER编码结构
ASN.1基本编码规则BER采用的编码结构由标记(Tag)、长度(length)以及内容(Value)三个部分构成,一般称为TLV结构,如表一所示:
表一:BER编码结构
标记(Tag) | 长度(Length) | 内容(Value) |
各部分含义如下:
(1)标记:描述数据的类型。
(2)长度:用于说明Value部分的长度。
(3)内容:数据的实际值。
基本编码规则采用8位位组(即一个字节)作为基本传送单位,因此TLV结构的三个部分都由一个或多个8位位组组成。
2.标记
标记Tag一共有四种类型,即通用类(Universal)、应用类(Application)、上下文相关类(Context)、和专用类(private)(IEC6185中用到的只有前三个)。
表二是常用的标记分类,标记Tag通常由一个或者两个8位位组构成,bit7、bit6用用于说明标记的类型,“00”代表通用类,“01”代表应用类,“10”代表上下文相关类,“11”代表专用类;bit5说明数据是简单类型还是结构类型;bit4~0是标记编号(Tag值),不同的Tag值代表不同的数据类型,当标记编号大于30时,这4个bit都为1,用下一个字节表示标记编号。
表二 常用的标记分类
Bit7~6 | Bit5 | Bit 0~4 | 说明 | 举例 |
00 | 0 | Tag值 | 简单类型,通用类 | BOOLEAN、INTEGER |
00 | 1 | 结构类型,通用类 | SEQUENCE SEQUENCE OF | |
01 | 1 | 结构类型,应用类 | ----- | |
10 | 0 | 简单类型,上下文相关类 | IMPLICIT | |
10 | 1 | 结构类型,上下文相关类 | IMPLICIT SEQUENCE | |
表三给出了ASN.1规范定义的一批简单通用类数据的Tag值,例如“01h”代表BOOLEAN类型,“02h”代表INTEGER类型。
表三 ASN.1中简单通用类数据的Tag值
Tag值(16进制) | 类型 | Tag值(16进制) | 类型 |
01 | BOOLEN | 10 | SEQUENCE,SEQUENCE OF |
02 | INTEGER | 11 | SET,SET OF |
03 | BIT-STRING | 12 | NumericString |
04 | OCTETSTRING(8) | 13 | PrintableString |
05 | NULL | 14 | TeletexString, T61String |
06 | OBJECT IDENTIFER | 15 | VideotexString |
07 | ObjectDescripion | 16 | IA5STRING |
08 | EXTERNAL,INSTANCE OF | 17 | UTCTIME |
09 | REAL | 18 | GENERALIZERIME |
0A | ENUMERATED | 19 | GraphicString |
0B | EMBEDDED PDV | 1A | VISIBLESTRING |
0C | UFT8String | 1B | GeneralString |
0D | RELATIVE-OID | 1C | UniversalString |
0E | 保留 | 1D | CHARACTER STRING |
0F | 保留 | 1E | BMPString |
ASN.1定义的这些Tag值无法完全满足MMS应用的需要,如无法区分整形(INTEGER)和无符号整型(unsigned)两类数据。因此MMS扩展定义了一组专用的Tag值(主要针对简单类型和上下文相关类),如表四所示:
表四MMS定义的上下文相关类Tag值(对简单通用类数据的扩展)
Tag值(16进制) | 类型 | Tag值(16进制) | 类型 |
81 | 数组array | 87 | Floating-poing |
82 | 结构体struct | 89 | Octet-string |
83 | boolean | 8A | Visible-string |
84 | Bit-string | 8C | timeofday |
85 | integer | 8D | bcd |
86 | unsigned | 8E | boolarray |
在ASN.1描述文本中,MMS自定义的上述Tag值需要在类型前使用“[]”来声明,[]中的值是被声明类型的实际Tag值。
3.长度
长度字段用于指明内容Value部分所含8位位组的数目,不包括标记和长度本身的8位位组数目。
如果Value所含的8位位组数目(以后用字节数表示)小于等于127,那么Lenth只占一个字节,最高位bit7为0,bit6~0为长度的二进制编码值。如果Value所含字节数大于127,则Length的第一个字节的bit7位固定为1,bit6~bit0表示后继长度字节的个数,后继的字节二进制编码值表示Value部分实际的长度。
4.内容
对于简单类型的数据,如位串Bitstring,内容Value字段中是数据的实际值。
对于结构类型的数据,如SEQUENCE OF,内容Value字段中是一个或多个数据的TLV,形成了分层的结构,从最外层开始,层层嵌套,最后嵌套至最简单的数据类型为止。如下图所示
内容Value部分的层次嵌套
MMS编解码示例
如图所示,MMS PDU 部分报文如下
a0 28 02 02 03 2c a4 22 a1 20 a0 1e 30 1c a0 1a a1 18 1a 05 52 65 6c 61 79 1a 0f 58 43 42 52 60 24 53 56 24 50 4f 57 43 61 70
按照表一所述,PDU第1个字节为标记Tag,值为0xa0,二进制表示方式为1010 0000 按照表2解析如下:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论