DLMS通讯协仪参考.docx
《DLMS通讯协仪参考.docx》由会员分享,可在线阅读,更多相关《DLMS通讯协仪参考.docx(33页珍藏版)》请在冰豆网上搜索。
DLMS通讯协仪参考
(注:
以下仅为个人理解和参考,具体设计请参照对应IEC62056-53及IEC62056-46)
IEC62056-21是一种供计算机读取仪表数据的国际通讯规约,被设计成可以通过包括Internet在内的各种媒体完成数据通信。
仪表通过串口向掌抄设备发送ASCII或(HDLC数据),现在我们应用的就是HDLC。
物理层通常会使用红外收发或有线20mA电流环信号实现,全双工通讯。
当操作员使用掌抄朝向仪表的半透明面板按下读表按钮或将掌抄插入仪表总线插槽时,抄表过程通常耗时一至两秒。
首先需要经历一个“signon”步骤,手持设备通过此步骤向仪表表明自身身份。
在sign-on过程中,首先由掌抄设备为仪表编址。
仪表与手持式设备需要事先约定好数据收发的最大桢长度、是否允连续发送许多桢而无须分别确认、双方所能达到最大通讯速率等参数。
然后仪表将在允许的加密级别(无/低/高)范围内上报自身各项参数。
如果所召测数据属于无加密组,只要使用Get.Request即可应答掌抄所召测的数据。
如果属于低加密组,必须在解读数据前进行密码和身份认证。
如果属于高加密组,仪表会使用加密报文对掌抄进行验证,掌抄必须回答相应的密码。
只有当密码交换正确时,仪表方能接受掌抄,即掌抄已经被“signedon”。
完成“signon”之后,掌抄通常要读取电表的描述文字。
确定记录电表当前数据的量纲(例如:
千瓦时、兆焦耳、升)以及仪表精度级别。
偶尔制造商还会提出新的待测物理量,在这种情况下,可以在仪表定义域中添加新的数据类型。
大多数仪表具有用于校表和复位的特殊工作模式,通常还要采取某些保护措施防止不法分子利用这些特殊工作模式修改仪表读数(例如使用限位开关探测仪表外壳是否被撬)。
掌抄还能够在允许的范围内修改仪表的部分参数。
之后掌抄发送sign-off报文结束通讯。
另外,如果超出事先约定的应答时限,即使没有sign-off报文,电表也将自动结束当前回话。
通讯过程描述:
(一)建立物理层连接
物理层位于通讯模型的最底层。
DLMS规约可以建立在多种物理层之上,物理层的做用主要是对底层通讯硬件的操做(如对PSTNMODEM的初始化,打开,关闭。
)
(二)建立链路层连接
物理层连接建立之后,数据通讯的第一步是建立链路层的连接,链路层主要负责数据传输的可靠性,包括以下几个方面,地址校验,帧长校验,数据的CRC校验。
长数据帧的拆包组包。
同时向应用层提供链路传输的服务。
(三)建立应用层连接
链路层连接建立之后,在DLMS协仪中还要建立应用层连接,才可进行数据通讯。
这个应用层连接建立过程被称为Negotioation。
这个过程是为数据通讯提供一些配置参数。
应用层连接请求由Client端发起,Client端发aarq帧,Server端响应aare帧
(四)进行数据通讯
当连接建立起后,就可进行数据通讯了。
Client端发送数据请求帧Server端以数据响应。
Client在请求不同的数据时,要使用特定数据的独有的classid和OBIS,用以标识不同类型的数据。
(五)数据通讯结束,释放链路,解除连接。
数据通讯结束后,发链路结束帧,结束一次通讯过程。
一次数据通讯结束后,可以通过发链路结束帧,来结束一次通讯过程。
也可以,不发任何数据帧,依靠server端的超时挂断机制,来结束一次通讯过程。
一般应使用前者。
(六)解除物理层连接
关闭物理端口(如挂断Modem)。
从物理上结束一次通讯。
DLMS链路层协议
物理层之上即为链路层,链路层是物理层与应用层通信的通道。
DLMS链路层使用的是HDLC高速链路控制协议。
具体到数据通讯时,对于client端应用层发送的数据,要加上LLC帧头(0xe6,0xe6,0x00),server端应用层发送的数据,要加上LLC帧头(0xe6,0xe7,0x00)。
HDLC帧格式
(1)不包含应用层数据信息
0x7e
帧类型与帧长
目的地址域
源地址域
控制域
数据帧校验
0x7e
两个0x7e是HDLC数据帧固定的帧头与帧尾,两个0x7e之间是链用户数据。
(2)包含应用层数据信息
与不包含应用层数据信息的数据帧相比这里多了3项:
1)帧头校验:
为增强通讯的可靠性,对帧头的数据也加上CRC校验。
帧头包括如下字段:
帧类型与帧长、目的地址域、源地址域、和控制域
2)LLC帧头:
用户数据信息前要加0xe6,0xe6,0x00或0xe6,0xe7,0x00。
3)用户数据信息:
应用层处理的数据。
注:
出于数据完整性的考虑,用户数据信息的最大长度,默认为128字节。
如果想要更多的字节,可以在SNRM数据帧中协议。
帧类型字段与‘S’位
帧类型与帧长字段,共两个字节。
内容如下:
FrameType:
用于指出当前数据帧的类型。
HDLC有多种数据帧类型,DLMS使用FrameType3。
FrameType恒为A(1010)。
S:
(segmentationBit)这个字段只有一位,它用于说明数据帧是否被分割。
在长数据帧传输时要使用到这一位。
长数据帧的传输将在后面解释。
FrameLengthSub-field:
这个字段用于说明当前数据帧的长度,(以字节为单位,不包括两个0x7e)
地址解析
地址域分为两部分。
目的地址域和源地址域。
对于client端,目的地址为server的地址,源地址为client的地址。
对于server端正好相反。
(1)扩展编址技术
HDLC使用扩展编址技术,即某一个地址字节的最低位如为0,则表明该地址域没有结束,仍有后续字节是该地址域的一部分。
若某一地址字节最低位为1,则说明该地址域已经结束,没有后续字节。
(2)地址结构
Client端的地址永远是一个字节,由于扩展编址技术的使用,最低位置1,所以client端的地址只能有128个。
Server端为了实现一个物理地址对应多个逻辑地址,将地址分成了两部分upperHDLCAddress用于表述逻辑地址,lowerHDLCaddress用于表述物理地址。
Upperaddress总是应当有的,loweraddress在确认不需要的情况下,可以不出现。
(sl7000电表这两部分地址都是需要的)。
Server端的地址在使用扩展编址技术时,也并非是可以无限长(虽然在理论上可以,但在实践上是有上限的)。
Server端的地址结构可以使用如下方式:
Onebyte:
onlytheupperHDLCaddressispresent.
一字节:
只出现HDLC高位一字节地址。
两字节:
只出现HDLC高位一字节地址,和HDLC低位一字节地址。
四字节:
只出现HDLC高位两字节地址,和HDLC低位两字节地址
帧控制字
帧控制字字段主要负责,通讯中的帧计数,以及特殊数据帧的标识。
帧控制字字段结构如下:
对应项的解释如下:
RRR:
为接收帧计数。
SSS:
为发送帧计数。
注:
对帧计数的解释,
在链路层连接建立之后,第一次请求数据时(在client端,包括发送AARQ)RRR置为0,SSS置为0。
Server端收到这一帧数据后,返回数据响应RRR为1,SSS为0。
Client再次请求数据时RRR加1,SSS加1。
Server端收到这一帧数据后,返回数据响应RRR加1(成为2),SSS加1。
如此反复直到client得到所有的数据为止。
整个数据传输过程以I数据帧请求和响应。
这里要说明的是在请求数据结束后还要再发送RR帧,收到确认后。
才可以再发送DISC帧结束链路。
其中Client端的RR帧中的帧计数位RRR只需将client的帧计数位RRR加1得到。
下图描述了帧计数位的变化过程:
P/F:
poll/finalbit。
Pollbit:
由client发送,置1时表示server端回应,置0时表示不允许回应。
finalbit:
由server发送,置1时表示一次数据帧的发送结束,置0时表示还未发送完。
finalbit只有在通讯窗口(windowsize)大于1的情况下才有意义。
在windowsize=1时,由server端返回的数据帧中的这一位总是置1。
(关于windowsize将会在“建立链路层连接”时解释)
长数据帧的传输
在很多情况下,数据不能在一次请求和一次响应中,就能够结束数据传输的过程(受限于用户数据字节不超过128字节)。
这时就有必要启动长数据帧链路控制流程。
注:
请求负荷曲线时一定是使用长数据帧。
当使用长数据帧时,必须把长数据帧分割成短数据帧。
然后把这些短数据帧依次发送出去,在接收端将这些短数据帧依次处理。
这样就实现了一个较大的数据包,完整的传送到接收端。
在数据帧被分割时,帧类型与帧长字段中的‘S’位,将被置1。
当接收端检测到这一位被置位后,就知道数据帧已被分割,此时要做出对分割数据帧的相应处理。
下图介绍了长数据帧的收发过程:
client端通过发送RR数据帧来请求被分割的数据帧的其他部分。
数据帧校验
HDLC使用16位CRC校验。
使用的多项式是:
具体的实现程序,可参照英文参考文献IEC62056-46的附录A。
链路层连接的建立,与断开
(1)建立连接
链路层在开始工作之前,要建立链路层连接(Association)。
这一步骤是通过client端发送SNRM数据帧,server端响应UA数据帧表示已建立连接,server端响应DM数据帧表示链路断开,连接没有建立。
UA数据帧常含有链路参数的配置信息。
链路参数是指2个控制数据传输的参数。
WINDOW_SIZEparameter;这个参数描述通讯时,通讯的双方一次发送数据帧的数目。
HDLC允许一次发送多帧数据。
MAXIMUM_INFORMATION_FIELD_LENGTHparameter.最大信息域长度,这个参数用于描述一个链路数据帧中用户数据的长度。
这两个参数的默认值如下:
defaultWINDOW_SIZE=1;
defaultMAXIMUM_INFORMATION_FIELD_LENGTH=128(BYTEs)
具体在数据帧中有如下4个参数:
transmitmaximuminformationfieldlength
receivemaximuminformationfieldlength
transmitwindowsize
receivewindowsize
以下举例说明如何建立连接:
//SNRM
S:
7ea0210022002303930b14818012050180060180070400000001080400000007655e7e
解释:
7e
a021帧类型与帧长
00220023目的地址
03源地址
93控制字
0b14帧头校验
8180SNRM标识
12grouplenth.
05Hparameteridentifier(maximuminformationfieldlengthtransmit)
01Hparameterlength(1octet)
80Hparametervalue(128bytes)
06Hparameteridentifier(maximuminformationfieldlengthreceive)
01Hparameterlength(1octet)
80Hparametervalue(128bytes)
07Hparameteridentifier(windowsize,transmit)
04Hparameterlength(4octets)
00Hparametervalue(highbyteofvalue)
00Hparametervalue
00Hparametervalue
01Hparametervalue(lowbyteofvalue)
08Hparameteridentifier(windowsize,receive)
04Hparameterlength(4octets)
00Hparametervalue(highbyteofvalue)
00Hparametervalue
00Hparametervalue
07Hparametervalue(lowbyteofvalue)
655e数据帧校验(CRC校验)
7e
在SNRM数据帧中的用户信息可以不出现,表示client接收server端的已配置数据。
//UA
R:
7EA02103002200237328F0818012050180060180070400000001080400000001533B7E
解释:
7E//Flag
0xA021//(type=a:
frametype3,s=0:
endofframe,len=021:
33bytes)
03//sourceaddress
0022
0023//destinationaddress
73//controlUA
28F0//hcs
818012050180060180070400000001080400000001
//informationfield
//parameternegotiation
//81
//80
//12
//050180:
maximuminformationfieldlengthtransmit(128BYTEs)
//060180:
maximuminformationfieldlengthreceive(128BYTEs)
//070400000001:
windowsize,transmit
(1)
//080400000001:
windowsize,receive
(1)
533B//fcs
7E
(2)断开连接
断开连接由于不用参数设置,所以比建立连接要简单。
Client端发送DISC数据帧,Server端响应UA或DM表示断开连接。
UA表示接到DISC后断开连接。
DM表示在接到DISC之前已处于断开状态。
一下仍给出具体的通讯实例:
S:
7ea00a00220023035306c77e
解释:
7ea00a0022002303
53//帧类型Disc
06c77e
R:
7EA00A03002200231F434C7E
解释:
7EA00A0300220023
1F//帧类型DM
434C7E
DLMS应用层协议
理解DLMS应用层协议,需要首先建立以下几个概念:
ASN.1语法,BER编码,AXDR编码。
ASN.1语法是用来描述应用层数据帧的。
DLMS协议不同于其他一些简单通讯协议的地方就在于此。
它不是用一些表格,及一些固定的帧格式来描述的,而是用一种抽象语法语言来描述。
这样做的好处是,极大的提高了协议的抽象性和通用性,有利于程序移植。
BER编码和AXDR编码是用来实现ASN.1语法的。
为了实现ASN.1的抽象性和通用性,这个语法要用特殊的编码来描述。
这就引入了BER编码和AXDR编码。
下面以接收到的AARE数据帧为例:
AARE数据帧的语法描述:
AARE-apdu:
:
=[APPLICATION1]IMPLICITSEQUENCE
――[APPLICATION1]==[61H]=[97]
{
protocol-version[0]IMPLICITBITSTRING{version1(0)}DEFAULT{version1},
application-context-name[1]Application-context-name,
result[2]Association-result,
result-source-diagnostic[3]Associate-source-diagnostic,
responding-AP-title[4]AP-titleOPTIONAL,
responding-AE-qualifier[5]AE-qualifierOPTIONAL,
responding-AP-invocation-id[6]AP-invocation-identifierOPTIONAL,
responding-AE-invocation-id[7]AE-invocation-identifierOPTIONAL,
--Thefollowingfieldshallnotbepresentifonlythekernelisused.
responder-acse-requirements[8]IMPLICITACSE-requirementsOPTIONAL,
--Thefollowingfieldshallonlybepresentiftheauthenticationfunctionalunitisselected.
mechanism-name[9]IMPLICITmechanism-nameOPTIONAL,
--Thefollowingfieldshallonlybepresentiftheauthenticationfunctionalunitisselected.
responding-authentication-value[10]EXPLICITauthentication-valueOPTIONAL,
implementation-information[29]IMPLICITimplementation-dataOPTIONAL,
user-information[30]IMPLICITassociation-informationOPTIONAL
}
AARE数据帧的BER编码和AXDR编码实现:
61//AAREtag
42//AARElen
A1//tagofCOSEM_Application_Context_Name
09//数据长度
06//(OBJECTIDENTIFIER,Universal)OBJECTIDENTIFIER是一种//ASN.1数据类型.
07//数据长度
60857405080101//数据内容
//以下的数据帧可以用同样的方法一一解释
A2//TagofAssociation-result,
03020100
A3//TagofAssociate-source-diagnostic
05A103020100
88//IMPLICITACSE-requirementsOPTIONA
020780
89//IMPLICITmechanism-nameOPTIONAL
0760857405080201
AA//EXPLICITauthentication-valueOPTIONAL
0A80084142434445464748
BE
04//encodingthechoiceforuser-information(OCTETSTRING,Universal)
0E//encodingofthelengthoftheOCTETSTRING’svaluefield(14octets)
/*以下内容为XDLMS用AXDR描述*/
08//encodingthetag(explicittag)oftheDLMSPDUCHOICE(InitiateResponse)
00//usageflagfortheproposed-quality-of-servicecomponent(FALSE,notpresent)
06//negotiated-dlms-version-number
5F1F//encodingthe[APPLICATION31]tag(ASN.1explicittag)
04//encodingthelengthofthe'contents'fieldinoctet(4)
00//encodingofthenumberofunusedbitsinthefinaloctetofthebitstring
00081D//encodingofthefixedlengthBITSTRINGvalue
2134//theA-XDRencodingofanUnsigned16isitsvalue
0007//theA-XDRencodingofanUnsigned16isitsvalue.0007==LN
AARQ,AARE数据帧的具体描述(ASN.1语法描述)
应用层连接的建立是通过client端发送AARQ数据帧,server端响应AARE数据帧来实现的。
这两个数据帧主要是配置应用层数据通讯的参数。
AARQ-apdu:
:
=[APPLICATION0]IMPLICITSEQUENCE
{
protocol-version[0]IMPLICITBITSTRING{version1(0)}DEFAULT{version1},
application-context-name[1]Application-context-name,
called-AP-title[2]AP-titleOPTIONAL,
called-AE-qualifier[3]AE-qualifierOPTIONAL,
called-AP-invocation-id[4]AP-invocation-identifierOPTIONAL,
called-AE-invocation-id[5]AE-invocation-identifierOPTIONAL,
calling-AP-title[6]AP-titleOPTIONA