104规约超时的理解和报文丢失重发的处理机制深入分析

超时的定义

参数    默认值    备注    选择值

t0    30s    连接建立的超时

t1    15s    发送或测试APDU的超时

t2    10s    无数据报文t2t1状态下发送测试帧的超时

所有超时值的最大范围: 1 到255s, 精确到1s。

当报文接收方收到发送方的I格式报文后,如果没有I格式报文需要发送给对方,可以向对方发送S格式报文以对所接收到的报文进行确认;

为了防止I格式报文在传送过程中丢失或重复传送 ,IEC 60870-5-104的I格式报文的控制域定义了发送序号N(S)和接收序号R(S),发送方每发送一个I格式报文,其发送序号应加1,接收方每接收到一个与其接收序号相等的I格式报文后,其接收序号也应加1。需要注意的是,每次重新建立TCP连接后,调度主站和子站RTU的接收序号和发送序号都应清零,因此在双方开始数据传送后,接收方若收到一个I格式报文,应判断此I格式报文的发送序号是否等于自己的接收序号。若相等则应将自己接收序号加1,若此
I格式报文的发送序号大于自己的接收序号,这说明发送方发送的一些报文出现了丢失;若此I格式报文的发送序号小于自己的接收序号,这意味着发送方出现了重复传送。此外,I格式和S格式报文的接收序号表明了发送该报文的一方对已接收到的I格式报文的确认,若发送方发送的某一I格式报文后长时间无法在对方的接收序号中得到确认,这就意味着发生了报文丢失。当出现上述这些报文丢失、错序的情况时,通常意味着TCP连接出现了问题,发送方或接收方应关闭现在的 TCP连接然后再重新建立新的TCP连接,并在新的TCP连接上重新开始会话过程。在主站端和子站RTU端进行通信时,接收方可以使用S格式报文(当有应用服务单元需要发送给对方时,可使用I格式报文)对已接收到的I格式报文进行确认,以免发送方超时收不到确认信息而重新建立TCP连接。这就存在一个接收方收到多少个I格式报文进行一次确认的问题,以及发送方应在多少个I格式报文未得到确认时停止发送数据。IEC
60870-5-104规定了两个参数k和w,其取值范围为1到32767,其中k表示发送方在有k个I格式报文未得到对方的确认时,将停止数据传送,w 表示接收方最迟在接收了w个I格式报文后应发出认可;IEC 60870-5-104规定k和w的默认值分别为12个APDU和8个APDU。在实际中,k和w的具体取值可以根据TCP连接双方的数据通信量来加以确定,对于子站RTU端来说,每收到一个调度端的I格式报文都应立即进行响应,其w的取值实际上为1,由于RTU端可以循环向调度端发送遥信、遥测等信息,因此k的取值与其循环发送的定时周期有关,通常12到20APDU就足够了;对于主站端,由于不停接收到RTU的数据,因此应及时地给以确认,通常w取小于8个APDU的值。

为了能对TCP连接进行检查和维护,IEC 60870-5-104规定了几个超时时间,即t0、t1、t2、t3,它们的取值范围为1~255s,准确度为1s。

t0规定了主站端和子站RTU端建立一次TCP连接的最大允许时间,主站端和子站RTU端之间的TCP连接在实际运行中可能经常进行关闭和重建,这发生在4种情况下:

① 主站端和子站RTU端之间的I格式报文传送出现丢失、错序或者发送U格式报文得

不到应答时,双方均可主动关闭TCP连接,然后进行重建;

② 主站系统重新启动后将与各个子站重新建立TCP连接;

③ 子站RTU合上电源或由于自恢复而重新启动后,将重建连接;

④ 子站RTU收到主站端的RESET_PROCESS(复位远方终端)信号后,将关闭连接并重新初始化,然后重建连接。每次建立连接时,RTU都调用socket的listen( )函数进行侦听,主站端调用socket的connect( )函数进行连接,如果在t0时间内未能成功建立连接,可能网络发生了故障,主站端应该向运行人员给出警告信息。t1规定发送方发送一个I格式报文或U格式报文后,必须在t1的时间内得到接收方的认可,否则发送方认为TCP连接出现问题并应重新建立连

接。t2规定接收方在接收到I格式报文后,若经过t2时间未再收到新的I格式报文,则必须向发送方发送S格式帧对已经接收到的I格式报文进行认可,显然t2必须小于t1。t3规定调度端或子站RTU端每接收一帧 I帧、S帧或者U帧将重新触发计时器t3,若在t3内未接收到任何报文,将向对方发送测试链路帧

时间: 2024-10-18 07:56:53

104规约超时的理解和报文丢失重发的处理机制深入分析的相关文章

继电保护装置规约104规约解析

101用于串口通调度,属于远动规约 104是101的网络版 103有串口的有以太网的,不是通调度的,是通保护装置的,属于继电保护规约 主站与子站通过IEC60870-5-104规约通讯协议说明 目录 目  录... 1 前  言... 1 一.IEC60870-5-104应用规约数据单元基本结构... 2 1.1 应用规约数据单元APDU.. 2 1.2 应用规约控制信息APCI2 1.3 应用服务数据单元ASDU.. 3 二.IEC60870-5-104规约的过程描述... 5 三.IEC60

《深入理解mybatis原理》 MyBatis事务管理机制

MyBatis作为Java语言的数据库框架,对数据库的事务管理是其非常重要的一个方面.本文将讲述MyBatis的事务管理的实现机制.首先介绍MyBatis的事务Transaction的接口设计以及其不同实现JdbcTransaction 和 ManagedTransaction:接着,从MyBatis的XML配置文件入手,讲解MyBatis事务工厂的创建和维护,进而阐述了MyBatis事务的创建和使用:最后分析JdbcTransaction和ManagedTransaction的实现和二者的不同

理解HTTP报文

简单理解,更多理解信息参考:HTTP报文详解 - HX_追风 - 博客园 https://www.cnblogs.com/zhuifeng/p/4072248.html HTTP报文:它是HTTP应用程序之间发送的数据块. 详细说:这些数据块以一些文本形式的元信息开头,这些信息描述了报文的内容及含义,后面跟着可选的数据部分.这些报文都是在客户端.服务器.和代理之间的流动. HTTP报文的执行顺序: 一次HTTP请求,HTTP报文会从 "客户端" --------> "代

关于104规约的认识补充

1.可变结构限定词的算法 占1个字节(长度2,8位),最高位SQ为ASDU是否离散,0:离散(带有信息对象地址),1顺序只有第一个信息对象地址,后面+12.关于信息地址长度为3字节,长度为6.高低位原则 3.十六进制转十进制浮点数 原文地址:https://www.cnblogs.com/Rampage/p/11196097.html

深入理解Python中协程的应用机制: 使用纯Python来实现一个操作系统吧!!

本文参考:http://www.dabeaz.com/coroutines/   作者:David Beazley 缘起: 本人最近在学习python的协程.偶然发现了David Beazley的coroutine课程,花了几天时间读完后,为了加深理解就把其中个人认为最为精华的部分摘下来并加上个人理解写了本篇博客. 扯一些淡: 既然要搞一个操作系统,那我们就先来设一个目标吧!就像找女朋友,我们不可能随随便便的是个女的就上,肯定要对女方有一定的要求,比如肤白貌美气质佳…… 所以,我们对这个' 姑娘

深入理解Java虚拟机(类文件结构+类加载机制+字节码执行引擎)

周志明的<深入理解Java虚拟机>很好很强大,阅读起来颇有点费劲,尤其是当你跟随作者的思路一直探究下去,开始会让你弄不清方向,难免有些你说的啥子的感觉.但知识不得不学,于是天天看,反复看,就慢慢的理解了.我其实不想说这种硬磨的方法有多好,我甚至不推荐,我建议大家阅读这本书时,由浅入深,有舍有得,先从宏观去理解去阅读,再慢慢深入,有条不紊的看下去.具体来说,当你看书的某一部分时,先看这部分的章节名,了解这部分这一章在讲什么,然后再看某一章,我拿"类文件结构"这一章来说,我必须

第3课:通过案例对SparkStreaming 透彻理解三板斧之三:解密SparkStreaming运行机制和架构进阶之Job和容错

理解Spark Streaming的Job的整个架构和运行机制对于精通Spark Streaming是至关重要的. 一 首先我们运行以下的程序,然后通过这个程序的运行过程进一步加深理解Spark Streaming流处理的Job的执行的过程,代码如下: object OnlineForeachRDD2DB { def main(args: Array[String]){ /* * 第1步:创建Spark的配置对象SparkConf,设置Spark程序的运行时的配置信息, * 例如说通过setMa

第3课:SparkStreaming 透彻理解三板斧之三:解密SparkStreaming运行机制和架构进阶之Job和容错

本期内容: 解密Spark Streaming Job架构和运行机制 解密Spark Streaming容错架构和运行机制 理解SparkStreaming的Job的整个架构和运行机制对于精通SparkStreaming是至关重要的.我们知道对于一般的Spark应用程序来说,是RDD的action操作触发了Job的运行.那对于SparkStreaming来说,Job是怎么样运行的呢?我们在编写SparkStreaming程序的时候,设置了BatchDuration,Job每隔BatchDurat

深入理解java虚拟机(4)---类加载机制

类加载的过程包括: 加载class到内存,数据校验,转换和解析,初始化,使用using和卸载unloading过程. 除了解析阶段,其他过程的顺序是固定的.解析可以放在初始化之后,目的就是为了支持动态加载. 从java开发者来讲,我们并不关心具体细节,只要知道整个流程以及每个流程大体干了那些事情. 每个流程具体对开发代码会有那些影响就可以了. 一:类的加载流程 1.加载loading 在加载过程中,虚拟机需要完成3件事情: 1)通过一个类的全限定名来获得此类的二进制字节流. 2)将这个直接流的静