国网DLT698.45协议——采集系统、数据交换(二)
国网DLT698.45协议——采集系统、数据交换(二)
698协议基本数据类型定义
数据类型定义 | 定义 |
---|---|
long-unsigned | uint16 |
double-long | int32 |
unsigned | uint8 |
long | int16 |
double-long-unsigned | uint32 |
bit-string(SIZE(8)) | uint8 |
enum | typedef enum xxx{ }; |
integer | char |
long64 | int64/uint32 |
bool | BOOLEAN/bool |
long64-unsigned | uint64 |
visible-string | char value [ ] |
visible-string(SIZE(32)) | char value [32] |
visible-string(SIZE(128)) | char value [128] |
visible-string(SIZE(1k)) | char value [1024] |
octet-string | uint8 nvalue [ ] |
octet-string(SIZE(8)) | uint8 nvalue [8] |
octet-string(SIZE(32)) | uint8 nvalue [32] |
… | … |
array TSA | TSA_T meter [MAX_MET] |
… | … |
698协议帧结构
分帧结构
*重要*
长度域H 3D 00 —— 转为十进制数为61 即表示此帧有61个字节
控制域C 43 ——1个字节。表示为 0100 0011 (D7-D0)
根据控制域定义:传输方向位DIR 0 D7
启动标志位PRM 1 D6
分帧标志位 0 D5
保留 00 D4-D3
功能码 011(3) D2-D0
由DIR和PMR组合,判断客户机对服务器上报的响应。
传输方向位:DIR=0 表示此帧是由客户机发出的;DIR=1 表示此帧是由服务器发出的。
启动标志位:PRM=1 表示此帧是由客户机发起的;PRM=0 表示此帧是由服务器发起的。
分帧标志位:得出此帧链路用户数据为APDU片段
分帧标志位为1,表示此帧链路用户数据为APDU片段,收齐所有片段按片段序号合并后为完整APDU
分帧标志位为0,表示此帧链路用户数据为完整APDU。
功能码(采用BIN编码):011(3)—— 在协议中对应的是用户数据,应用连接管理及数据交换服务。
地址域A
地址域A由可变字节数的服务器地址SA 和 1字节的客户机地址CA组成。
服务器地址SA 05 —— 0000 0101 D7-D0
D7-D6 00 地址类型:0 (0-单地址;1-通配地址;2:组地址;3:广播地址)
D5-D4 00 逻辑地址=0
D3-D0 0101 地址长度为6 (+1操作,取址范围为0-15)
客户机地址CA用 1字节 无符号整数表示,取值范围0,...255, 值为0 表示不关注客户机地址。
帧头校验HCS
帧头校验HCS为 2字节 ,是对帧头部分除起始字符和HCS本身之外的所有字节的校验。
链路用户数据
链路用户数据包含一个完整的应用层协议数据单元 (APDU)宇节序列或APDU的分帧片段。
帧校验FCS
帧校验FCS为 2宇节, 是对整帧除起始字符、结束宇符和FCS本身之外的所有字节的校验。
字节格式
帧的基本单元为 8位字节。 链路层传输顺序为:
低位在前,高位在后;
低字节在前,高字节在后。
采集系统面向对象通信协议的学习,我认为数据传输便是面向对象的,每次主站传过来的数据长短和代表含义都存在着不一样的可能,这对解析协议来说就存在着比较大的困难。
在协议格式中的SA+CA所代表的地址位其中就存在着面向对象的含义,SA中第一个字节规定地址的类型、逻辑地址的存在与否、地址的实际长度,根据是否存在逻辑地址判断之后是否跟有逻辑地址,没有则对应的SA短一位,之后再根据地址长度去截取协议帧后面的若干位来解析地址信息,SA后固定一位跟CA。
*重要*
协议文件是存在一定的国定格式的
我们所说的698协议面向对象,其中面向对象即数据传输的面向对象。
传输中帧格式的定义:
68 + L + C + SA + CA + HCS + APDU + FCS + 16
|<———————————固定的对象类型————————>|
L : 固定两字节 L实际上是个数据类型
17 00 转 byte[] 变成了 byte[0] = 17 , byte[1] = 0;
则转换之后按照17 00 传输。
链路层帧的基本单元为 8位字节。
链路层传输顺序为:
低位在前,高位在后;
低字节在前,高字节在后。
实际地址是相互没有关系的byte[]。
eg:实际地址:(0410 2951 1081)H
按照传输协议则是: 8110 5129 1004
C : 一字节 byte中定义了数据的传输方向
及本条帧的功能是链路数据还是交互数据。
SA+CA : 地址位 SA中第一个字节规定了地址的类型,是否存在逻辑地址,地址的实际长度。
根据是否存在逻辑地址判断后面是否跟有逻辑地址。若无,则SA短一位。
根据地址长度去截取后面若干位来解析地址信息。
SA后面固定一位是CA。
控制域C结构定义:
DIR和PMR组合判断:
功能码定义:
服务器地址定义:
字节格式规则:
分帧:应用层分帧和链路层分帧。
应用层分帧:仅支持针对Get请求服务的应答分帧。
应用层分帧每一分帧均可以自描述自解析,不需要所有片段接收完毕才可处理,可以边接收边处理。
场景:
(1)当请求多个对象属性时,分帧后的每一帧包含完整的对象属性数据。
(2)请求单一对象属性,该对象的数据类型为数组。
链路层分帧:支持所有应用层服务。
链路层分帧每一个分帧片段不可自解析,需要所有分帧片段接收完毕,组合后才能得到完整的APDU报文。
698协议通信架构
终端与主站通信,终端是服务器。
终端与表通信,表是服务器。
-
(1)信息交换模型
客户机和终端的应用程序分别位于不同的设备,应用层是唯一包含服务组件的协议层。应用层协议数据单元(APDU)通过数据链路层协议传输帧的链路用户数据域传输。 -
(2)面向应用连接的数据交换
客户机和终端在通信前,先建立预连接。默认具有一个最低权限的应用连接。他们之间可直接进行数据交换,客户机需要得到较高的权限的服务器服务时,应必须发起建立较高权限的应用连接。(我认为这是通信模型中比较重要的一部分)。其中预连接机制所满足的是采集的最低需求,包括登录、心跳等等。
-
(3)请求/响应类型的数据交换
客户机应用进程向服务器应用进程提出服务请求,服务器向客户机提供远程服务响应。 -
(4)通知/确认类型数据交换
服务器应用进程根据客户机预先制定的主动上报内容,向客户机应用进程提供远程主动上报服务,客户机向服务器回复服务确认。
-
(5)服务器模式
由若干逻辑设备和物理设备构成,每个逻辑设备由若干接口类对象构成。包括一个预先建立的应用连接对象 (简称预连接对象 )、若干个应用连接对象、若干个其他接口类对象。
其中分层结构、功能设计等内容将在国网DLT698.45协议——采集系统、数据交换(三)中介绍,希望大家多提建议想法,因为本人也才是刚开始接触国网协议,文章更像是笔记形式,其中错误还望大家海涵,可以私信也可以评论指出,我会及时修改。同时也希望这篇文章能为也是刚接触国网协议的小伙伴打开思路,深入学习。