DNP3.0快速入门
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
DNP3.0快速入门
白银魁2002-04-15
一、学习DNP规约的必要性
D istributed N etwork P rotocol由Harris公司提出,于1993年开始应用。
近一段时间,DNP 规约在国内的应用有上升的趋势,特别是大型综合自动化变电站采用的国外的智能设备,有很多都要求采用DNP规约。
目前,与我们三部相关的产品主要是DF1700及DF1331。
二、培训目标
通过学习,使大家都达到能够分析报文的水平。
三、DNP规约的分层结构
DNP规约虽然很庞大,但它层次清晰,只要掌握好DNP的分层结构,DNP规约就非常好理解了。
DNP规约共分为3层:链路层、传输层和应用层。
以下面的一包报文为例(16进制显示,下同):
05 64 FE 44 03 00 03 00 CE 52
F1A5 81 00 00 01 02 01 00 00 EC 00 01 01 01 016D DB
01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01BB C3
01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01BB C3
01 01 01 01 01 01 01 01 01 01 81 81 81 81 81 0118 F1
01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01BB C3
01 01 01 01 01 01 01 01 01 01 01 01 81 01 81 81F4 72
81 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01B7 F4
81 01 01 01 81 01 01 01 01 01 01 01 01 01 01 01F0 FF
01 01 01 01 81 01 81 81 01 01 01 01 01 01 81 0106 11
01 01 81 01 01 01 01 01 01 01 01 01 01 01 01 019A 4A
01 01 81 01 01 01 81 01 01 01 01 01 01 01 01 0146 83
01 01 01 01 01 01 01 81 81 81 01 81 01 01 01 8184 DC
81 01 01 01 81 81 01 01 01 81 81 01 01 01 81 811E CE
01 01 01 81 81 01 01 01 81 81 01 01 01 81 81 0145 85
01 01 81 01 01 01 01 01 81 01 01 01 81 81 01 0150 3C
01 81 81 01 01 01 81 81 0199 25
报文例(1)
上面是一包完整报文的分行显示。
整个这一包报文我们称之为链路层报文。
其中的粉红色部分为16位的CRC校验码,上面这条报文的第一行共10个字节,我们称之为链路报文头,其中含2个字节的CRC校验码,所有的DNP链路层报文都有一个这样的链路报文头。
链路报文头以外的部分每18个字节为一组,其中用户数据为16个字节,最后2个字节为CRC校验码,最后一组最少为3个字节,其中最后的2个字节仍为CRC校验码。
链路层报文中,去掉CRC校验码及链路报文头,剩下的部分为传输层报文,也就是桔黄色部分加上一个字节的蓝色部分。
这个蓝色字节称为传输层报文头字节。
传输层报文中,去掉传输层报文头字节,剩下的部分为应用层报文,也就是桔黄色部分(在以后的学习中我们将认识到,这一部分不一定是一条完整的应用层报文,有时,它只是一条应用层报文的一个块)。
链路报文头是所有的DNP报文都有的,但并不是所有的DNP报文都有传输层报文及应用层报文。
而在DNP报文中传输层报文与应用层报文是同时存在或同时不存在的。
各层报文间的关系为:链路层报文中可以封装有传输层报文,也可以没有传输层报文;传输层报文内封装了应用层报文。
各层之间除了封装与被封装关系外,没有其它的关系。
四、链路层报文结构
以报文例(1)为例,粉红色部分为16位的CRC校验码,这条报文的第一行共10个字节,我们称之为链路报文头,其中最后2个字节为CRC校验码,所有的DNP报文都有这样一个链路报文头。
链路报文头以外的部分每18个字节为一组,其中用户数据为16个字节,最后2个字节为CRC校验码,最后一组最少为3个字节,其中最后的2个字节仍为CRC校验码。
这就是链路层报文的框架。
其中关键的部分就是链路报文头。
链路报文头的结构
05 64050003 0003 005D D1
报文例(2)
05 645F4403 0003 0028 07
报文例(3)
05 64为起始标志字,类似于CDT92规约中的EB 90。
05及5F为链路层报文长度,为1个字节,它包括链路报文头中的5个字节,超出5个字节的部分为传输层报文的长度,也就是说,链路层报文长度计数中不含CRC校验码字节。
链路层报文长度的最小值为5,最大值为255。
一条DNP链路层报文的最短长度为链路报文头的长度:10个字节。
一条DNP链路层报文的最大长度为10+(250/16)×18+(250%16+2)=292字节。
00及44为链路控制字节,它用来指出本条链路层报文要实现的链路层功能。
对于封装有应用层报文的链路层报文来说,根据链路控制字节并不能判断出应用层要实现的功能。
应用层报文的含义要根据应用控制字节及应用层功能码等信息共同判断。
链路控制字节的具体定义,将在下面讲解。
两个03 00为目的地址。
两个03 00为源地址。
粉红色部分为16位的CRC校验码。
综上所述,链路报文头的结构为:(注:每格为1个字节)
起始字节1 起始字
节2
链路报
文长度
链路控
制字节
目的地
址L
目的地
址H
源地址
L
源地址
H
CRC
校验L
CRC
校验H
链路控制字节定义
链路控制字节是链路层中的难点,不过看过之后你就会觉得非常简单。
首先,我们先来了解一下源方站(发启站,Pr i m ary Station)与副方站(响应站,Secondary Station)的概念。
源方站与副方站仅仅是相对于一次通讯过程而言,我们不能说主站就是源方站,子站就是副方站,反过来,我们也不能说子站就是源方站,主站就是副方站。
实际上,主站和子站都是既可以作为源方站也可以作为副方站。
但在一次通讯过程中,主站和子站中只能有一个作为源方站,另一个作为副方站。
在一次通讯过程中,源方站处于主导地位,源方站实现的功能有:检测副方链路层是否在线,复位副方链路,向副方发送应用层数据、应用层命令以及实现应用层的其它功能;副方站在通讯过程中处于被动响应地位,副方站实现
的功能有:处理收到的数据及命令,在需要的时候给出对源方站链路层报文的链路层响应。
下面,以主站向子站召唤变化遥测为例,说明一下源方、副方的交替。
①.主站作为源方站,向子站召唤变化遥测数据。
→
←此时子站作为副方站,正确接收到这条命令后,发出链路层肯定确认给主站。
②本次通讯过程结束。
←子站作为源方站,向主站发送变化遥测数据。
③
④.此时主站作为副方站,在正确接收到这些数据后,发出链路层肯定确认给子站→
本次通讯过程结束。
⑤.主站作为源方站,向子站发出变化遥测已正确接收的应用层确认→
←此时子站作为副方站,正确接收到这条命令后,发出链路层肯定确认给主站。
⑥召唤变化遥测过程结束。
在实际的通讯过程中,①、③这两条报文是肯定要有的,有时②、④这两条报文并不出现,这取决于①、③这两条报文是否需要链路层的确认。
⑤这条报文是否存在,取决于③这条报文是否需要应用层的确认。
⑥这条报文只有当⑤这条报文存在并且需要链路层确认时才会存在。
源方站的链路控制字节结构
副方站的链路控制字节结构
DIR:方向位,1:本条报文为主站到子站的报文;0:本条报文为子站到主站的报文。
PRM:源方站标志位,1:本条报文为源方站报文;0:本条报文为副方站报文。
FCV:帧计数有效位,1:接收方收到本报文后,应检查FCB位的正确性。
0:接收方收到本报文后,不检查FCB位的正确性。
FCB:帧计数位,只有当FCV=1时,FCB才有意义。
对于发送方而言,如果本条报文的FCV=1,那么FCB位的状态应为上次FCV=1时FCB位状态的翻转。
RES:保留位。
DFC:数据流控制位,1:发出此报文的一方接收缓冲区已满,不能再接收数据了。
链路层功能码:要结合PRM位进行分析。
源方站链路层功能码(PRM=1)
功能码帧类型服务功能 FCV位
0 SEND/期待CONFIRM 使远方链路复位 0
1 SEND/期待CONFIRM 使用户过程复位 0
2 SEND/期待CONFIRM 对链路的测试功能 1
3 SEND/期待CONFIRM 用户数据 1
4 SEND/不期待回信非确认的用户数据 0
9 查询/期待响应查询链路状态 0
5-8 未用
10-15未用
副方站链路层功能码(PRM=0)
功能码帧类型服务功能
0 肯定确认 ACK=肯定的确认
1 否定确认 NACK=报文未收到;链路忙
11 响应链路的状态(DFC=0或DFC=1)
2-10 未用
12-13 未用
14 链路服务不工作了
15 未用链路服务,或未实现链路服务
思考题:分析下面这条报文,并回答下列问题:
05 64 14 F3 03 00 03 00 70 9A D9 C5 01 3C 02 06 3C 03 06 3C 04 06 3C 01 06 06 5E
①、请列出本条报文中的应用层报文
②、本条报文是发向主站的还是发向子站的?
③、本条报文需要接收方给出链路层确认吗?
五、应用层报文结构
对于所有的应用层报文而言,应用层报文头是必需的,而数据对象部分是否存在是与应用层报文头的内容相关的。
主站发出的应用层报文与子站发出的应用层报文在结构上总体上是一致的,其中,数据对象部分完全一致,而在应用层报文头部分,子站比主站多了2个字节的内部信号标志(Internal Indication,简称IIN)。
下面以子站发出的应用层报文的报文
应用控制字节应用层
功能码
IIN
低字节
IIN
高字节
应用控制字节的结构
有报文中的第一包。
0:本条应用层报文不是第一包。
FIN:尾包标志。
1:本条应用层报文为完成某应用层功能或传送某些应用层数据的所有报文中的最后一包。
0:本条应用层报文不是最后一包。
如果某包应用层报文的FIR=1并且FIN=1,则表示完成此应用层功能只需1包报文就够了。
应用层报文序号:对于普通报文,值的范围为0~15,对于主动上送报文,值的范围为16~31。
发送方每发出一包应用层报文后,此值就加1,当计满15后就归0(或计满31后就从16继续计起)。
如果本包报文是完成某应用层功能的第一包报文(FIR=1),那么应用层报文序号采用0~15(或16~31)中的任何一个值都是合法的,其余的包要在第一包序号的基础上依次加1,并且仍要遵循计满15后归0(或计满31后就从16继续计起)原则。
引入FIR、FIN标志及应用层报文序号的目的:对于所有的主站或子站而言,应用层的收、发缓冲区是有限的,它的典型大小为2048字节。
我们就以2048字节为例,2048字节只能传输16位的遥测量1024个或带品质描述的遥信量2048个等等。
这些数据量在大型综合自动化系统中还远远不够。
当2048字节的容量不能满足要求时,我们就要用多条应用层的报文来实现同一个应用层的功能。
为了让接收方能够区分出实现同一个应用层功能的多包报文的起、止以及报文是否有重复或丢失现象,就引入了FIR、FIN标志,它们与应用层报文序号配合,就可以使接收方很容易的判断出报文的起、止以及报文是否有重复或丢失现象。
CON:需要应用层确认标志。
1:本条报文需要接收方给出对这条报文的应用层确认。
0:本条报文不需要接收方给出对这条报文的应用层确认。
应用层功能码
》13页~14页。
IIN标志:
再次重申一下,主站发出的应用层报文中无IIN标志。
子站上传的报文中,应该把自身当前的状态在IIN标志中体现出来。
主站接收到子站的IIN标志后,要依据这个标志对子站进行数据召唤或进行其它的操作。
IIN共有16位,各位的含义参阅《Dnpv30应用层.doc》15页~16页。
数据对象部分
前面已经提到过,数据对象部分的存在与否是与应用层报文头的内容相关的,在这里可以说得确切一些,它实际上是与应用层功能码相关的。
最常用的应用层功能码中只有“0:确认”后面没有数据对象部分。
主站发出的报文与子站发出的报文在数据对象部分的结构是完全相同的。
这一部分又分为携带数据元素的情况与不携带数据元素的情况。
例如:主站向子站下发的对钟报文中,就是要向子站中的系统时钟数据项中写入指定的值,这条报文的数据对象部分就是携带数据元素的;子站为了响应主站的召唤数据命令,向主站传送的各种数据报文,无疑也是携带数据元素的。
而主站下发给子站的召唤数据报文中的数据对象部分仅仅指定了数据项的范围而已,因此是不携带数据元素的。
先讲一下不携带数据元素的情况。
(用于数据召唤命令)
1字节1字节1字节0 ~ 8字节
数据对象组别与数据对象变体的组合,是DNP规约特有的数据对象分类的编码方式。
这两者一定要组合使用。
需要特别指出的是,DNP规约中,把系统时钟、分级数据等都当作是一种数据类型来处理,对于对钟操作,就是向相应的时钟数据项内写入指定的值。
还有对象变体可以为0,此时数据对象组别与数据对象变体的组合所指的数据类型为从属于此数据对象组中的所有数据类型。
但是,对象变体为0的情形只能用于请求报文(即数据召唤报文)中。
DNP规约对数据对象组别及变体的具体描述,参阅《DNP对象库.doc》。
最常用
所有数据对象的点号都由0点计起。
对象类型相近且点号相同的数据点,有时所指的就是同一数据元素。
最常用的数据类型中这样的情形有[注:下面描述数据对象时采用的格式为:“(对象组别,对象变体)”] :
●(1,1)、(1,2)、(2,1)、(2,2)这4个数据类型当其点号相同时,所指
的为同一个数据元素;
●(30,2)、(30,4)、(32,2)这3个数据类型当其点号相同时,所指的为同
一个数据元素。
限定词、变程及附加的点号描述部分是用于描述数据对象的点号的。
有时变程部分或附加的点号描述部分或是其两者是不存在的,这取决于限定词的内容。
限定词,简单的说,就是对变程部分及附加的点号描述部分的限定。
现在把最常用的限定词列表解释如下:
限定词表(其中,附加的点号描述部分注释仅适用于不携带数据对象的报文)
对于携带数据元素的情况,其应用层报文的数据对象部分的结构如下:
数据对象组别
1字节数据对象变体
1字节
限定词
1字节
变程
1 ~ 8字节
长度不定
在数据对象组别与数据对象变体部分(数据类型部分)与携带数据元素的情况相差无几。
两者在这一部分的区别是:
携带数据元素的情况必须明确指出所携带的数据类型,因此不能使用数据对象变体
值0。
基于与上一条相同的原因,携带数据元素的情况不能使用分级数据对象类型(60,1)、(60,2)、(60,3)、(60,4)。
在限定词部分,携带数据元素的情况必须明确指出所携带的数据的点号,因此不能使用限定词6。
在变程部分,因携带数据元素的情况不能使用限定词6了,而只有限定词6对应的变程为0字节,所以变程为0字节的情况就是非法的了。
不携带数据元素的情况中,变程后面可能跟随有附加的点号描述部分,而携带数据元素的情况中,变程后面必定要跟随数据元素部分。
数据元素部分与附加的点号描述部分虽说在结构上不一致,但它们之间的关系是非常密切的。
下面按附加的点号描述部分的几种形式分别讨论一下数据元素部分的结构。
1.没有附加的点号描述部分的情况。
这种情况下,所涉及到的数据元素的点号都是连续的。
变体部分为“起止模式”的
不必细说,变体部分为“数量模式”且没有附加的点号描述部分时,其涉及的数据
元素的点号也可以归入起止模式,即:起始点为0,终止点为N-1。
与之对应的数
据元素部分的结构为:变体中指定的相关点号的数据元素的顺序排列。
2.附加的点号描述部分为N个点号规模为X字节/点号的点号描述的情况。
(X取值
为1、2或4)
这种情况下,我们可以把“X字节/点号”这样的一个点号描述称为一个小组,那
么,附加的点号描述部分就是由N个这样的小组组成的。
与之对应的数据元素部
分也是由N个小组组成的,只不过这时每个小组的结构变成了“X字节的点号+ 该
点号对应的数据元素”了。
六、传输层报文结构
在主站与子站间传输的任何命令及数据最终都要以链路层报文的面目出现。
一条链路层的报文最多只能携带250字节的用户数据,而一条应用层报文超出1000字节是很常见的。
怎样才能传输这么大的应用层报文而又能防止出错呢?DNP规约中采用了下面的方式:传送应用层报文的一方,先把整条应用层报文分成若干个块,每一块不超过249字节(当然,每块的长度没有过多的限制),然后在每一块的最前面加上一个字节,这个字节称为传输层报文头。
在第一块前面的传输层报文头中有首块标志及起始的块序号,在中间块前面的传输层报文头中有该块的块序号,在最后一块前面的传输层报文头中有末块标志及该块的块序号。
相邻两个块的块序号是连续的。
接收应用层报文的一方,先把传输层报文取出来,分析传输层报文头,如果先前未收到过具有首块标志的传输层报文头就先不处理应用层数据块,直到收到了首块标志为止,收到首块标志后,就记录该块的序号并取出应用层报文块开始组装,当收到下一块时检测其序号是否与上次收到的序号连续,如果连续就接着组装,并判断它是不是末块,直到收到末块,
才把这些块组装成了一条完整的应用层报文,这时才开始应用层的处理。
当然,在接收时还应考虑应用层报文只分为一块的情况以及传输出错的情况。
传输层报文头的结构
FIN:首块标志。
1:本块为首块;0:本块非首块。
FIR:末块标志。
1:本块为末块;0;本块非末块。
注意:传输层报文头的FIN及FIR标志的位置与应用控制字节中的FIN及FIR标志的位置是不同的。
应用层报文块序号:范围为:0 ~ 63,计满63后归0。
1字节 1 ~ 249字节
思考题:分析下面这条报文,并回答下列问题:
05 64 14 F3 03 00 03 00 70 9A D9 C5 01 3C 02 06 3C 03 06 3C 04 06 3C 01 06 06 5E
①、本条报文中的应用层报文是一条完整的应用层报文呢还是应用层报文的一个块?
②、本条报文中的应用层报文是应用层报文的首块还是末块?
③、本条报文要完成的应用层功能是什么?
七、通讯过程描述
注:与顺序有关部分,其先后顺序以前面的序号标注。
粉红色为必需过程,蓝色为可选过程。
因DNP是一个很灵活的规约,下面的召唤数据部分的顺序仅供参考。
①、主站作为源方站复位子站的链路。
复位子站链路的目的有2个:确认子站是否在线、
统一主站到子站方向①的FCB位。
主站发出:05 64 05 C0 05 00 06 00 95 08
如果站号为5的子站在线,它正确接收了这条复位命令后,就把自己下次接收到
FCV=1的报文的FCB期望值置为1,同时返回链路层肯定确认报文给主站:
子站返回:05 64 05 00 06 00 05 00 B1 E3
主站正确接收后,把自己下次发往该站的FCV=1的报文时的FCB位置为1。
如果主站接有多个子站,主站就要分别复位各子站的链路,并分别记录发向各子站
的FCB位。
②、子站作为源方站复位主站的链路。
复位主站链路是为了统一子站到主站方向的FCB
位。
当子站发往主站的所有报文均不需要主站对其的链路层确认时,可以没有这一
过程。
子站发出:05 64 05 40 06 00 05 00 XX XX
注①:为什么要强调“主站到子站方向”呢?因为主站和子站都可以作为源方站,当源方站发出的报文中FCV=1时,其FCB位的状态应为上次FCV=1时FCB位状态的翻转,副方站当接收到FCV=1的报文时就要判断一下FCB位的状态与副方站自己存储的FCB位期望值是否一致,不一致就认为传送过程中出现错误。
主站正确接收了这条复位命令后,就把自己下次接收到该站FCV=1的报文的FCB
期望值置为1。
同时返回一条链路层肯定确认报文给该子站。
主站发出:05 64 05 80 05 00 06 00 XX XX
子站正确接收后,把自己下次发送的FCV=1的报文时的FCB位置为1。
如果主站不复位子站的链路,子站不响应主站发出的其它任何报文。
而如果子站不复位主站的链路,主站却可以接收该子站的FCV=0的报文。
双方相互复位链路后,就可以相互接收FCV=1的报文了。
正常通讯时,一旦检测出通讯中断,都要重新复位链路。
③、主站复位子站的用户进程。
主站发出:05 64 05 C1 05 00 06 00 XX XX
子站接收后,进行相应的处理,并返回肯定确认报文给主站。
子站返回:05 64 05 00 06 00 05 00 B1 E3
④、主站测量通道延时。
主站发出:05 64 08 C4 05 00 06 00 XX XX C0 C0 17 XX XX
⑤、主站对子站对时。
对时有两种方式,一种是一一对时方式,另一种是广播对时方式。
两者的区别是:目的站址不同,一一对时方式的地址就是该子站的地址,广播对时要用广播地址:0xFFFF。
下面的报文为一一对时方式,时间为2002年4月19日15时0分0秒0
毫秒:
主站发出:05 64 13 C4 05 00 06 00 XX XX
C1 E1 02 32 01 17 01 00 00 E0 D4 5C ED 00 XX XX
子站应答:05 64 0A C4 05 00 06 00 XX XX
C1 C1 00 00 00 XX XX
⑥、主站召唤子站的全数据。
这一过程虽然是必定要有的,但不同的主站下发命令时采用的对象组与对象变体不
同。
例如,以分级数据召唤的报文:
主站发出:05 64 0B C4 05 00 06 00 XX XX
C2 C2 01 3C 01 06 XX XX
以遥测、遥信的具体对象类型下发的报文:
主站发出:05 64 0E C4 05 00 06 00 XX XX
C2 C2 01 01 00 06 1E 00 06 XX XX
子站在应答时,必需采用确切的对象类型。
05 64 5E 44 06 00 05 00 XX XX
F1 E5 81 00 00 01 02 01 00 00 23 00 01 01 01 01 XX XX
01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 BB C3
01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 BB C3
1E 04 01 00 00 10 00 00 00 00 00 00 00 00 00 00 XX XX
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF
00 00 00 00 00 00 00 00 00 FF FF
⑦、主站召唤子站的变化数据。
这一过程虽然是必定要有的,但不同的主站下发命令时采用的对象组与对象变体不
同。
例如,以分级数据召唤的报文:
主站发出:05 64 11 C4 05 00 06 00 XX XX
C2 C2 01 3C 02 06 3C 03 06 3C 04 06 XX XX
以遥测、遥信的具体对象类型下发的报文:
主站发出:05 64 0E C4 05 00 06 00 XX XX
C2 C2 01 02 00 06 20 00 06 XX XX
子站在应答时,必须采用确切的对象类型。
05 64 32 44 06 00 05 00 XX XX
F1 E5 81 00 00 02 02 27 02 05 00 81 00 00 00 00 XX XX
00 00 10 00 01 00 00 00 00 00 00 20 02 27 03 01 XX XX
00 22 00 04 00 01 00 00 11 00 01 12 00 XX XX
一般来讲,全数据是定时召唤的,而平时要一直召唤变化数据,而有时要依据子站上送的IIN标志进行召唤,当IIN标志中有关子站有数据需上传的标志清0之后,再进行变化数据的召唤。
八、链路层通讯规则
①、主站必须在复位了子站的链路之后,才能与该子站进行通讯。
当主站检测出与子站
的通讯中断之后,要重新复位该子站的链路。
②、很多情况下,子站也要复位主站的链路。
当通讯中断之后,也要重新复位链路。
③、当副方站的接收缓冲区将要满了,不能再接收数据(指的是应用层数据)时,就会
把返回给源方站的应答报文(ACK或NAK)中的DFC位置1,源方站收到这个标志
后,就每隔一段时间查询一下副方站的链路状态(PRM=1,FCV=0,FunctionCode=9),副方站就以链路状态帧进行响应(PRM=0,FunctionCode=11,DFC=1或0),直到源
方站收到的报文中DFC位清0后,源方站才能继续向该站发送数据或命令。
④、当源方站发出的链路层报文要求副方站的链路层响应时,副方站必须发出链路层响
应(它包括链路层的ACK、NAK、链路状态等),如果该站要作为副方站发出链路
层响应还要作为源方站响应应用层报文时,该站必须先发出链路层响应。
否则,源
方站就会认为报文没有顺利到达副方站,超过链路层的等待时间后,源方站就会重
发上次的链路层报文。
多次重发后就会认为链路中断,从而导致通讯不正常。
⑤、当源方站发出的“CONFIRMED USER DATA”收到了副方站的NAK后,一般来说很可
能是FCB位不一致,这时源方站就要发出“测试链路状态”报文,以统一双方的
FCB位。
九、应用层通讯规则
①、召唤数据或发出控制命令的一方,如果在规定的时间内没有收有预期的应答,就会
重发应用层报文。
多次重发后仍未收到,则认为应用层通讯服务失败。
②、应用层数据召唤采用的应用层报文序号与响应该数据召唤命令的数据包的应用层
报文序号以及对此数据包的应用层确认报文的应用层报文序号应该采用同一个值。
③、不带品质描述的对象类型一般都有缺省的品质描述,如果以不带品质描述的对象类
型召唤某些数据,但其中有些数据元素的品质描述不是缺省的品质描述时,那么,
这些数据元素将不会上送。