一种基于关联容器map的报文协议超时重发方法及系统技术方案

技术编号:30679622 阅读:14 留言:0更新日期:2021-11-06 09:09
本发明专利技术涉及一种基于关联容器map的报文协议超时重发方法,包括设计系统间报文协议;使用所设计的系统间报文协议进行通信,使用关联容器MAP对发送报文进行管理;在报文发送线程使用重发管理结构体对发送报文进行管理并将帧序号和重发管理结构体存储到关联容器MAP中;在报文接收线程,处理接收确认报文;设置重发管理定时器,在重发管理定时器中周期对关联容器MAP变量中键进行遍历,对不需进行管理的键值对进行删除;对所有是否重发标志IsReSnd为TRUE的关联容器MAP元素进行管理;每进行一次重发操作将重发管理结构体中已重发次数进行加一操作,当已重发次数达到需要重发的次数时,将该键值对从关联容器中移除。将该键值对从关联容器中移除。将该键值对从关联容器中移除。

【技术实现步骤摘要】
一种基于关联容器map的报文协议超时重发方法及系统


[0001]本专利技术涉及一种基于关联容器map的报文协议超时重发方法,属于计算机控制领域。

技术介绍

[0002]在多个分系统互联的大型系统中,系统间数据通过总线进行交互。在交互过程中由于干扰、故障等原因会导致错帧、乱帧、丢帧等现象,造成了系统间数据交互的失败,一些重要数据交互失败容易导致整个系统运行的失败。因此,系统间通讯过程中重要的交互数据通常需要接收确认,传统的应答方法通常采用线性表的方式对报文重发进行管理,例如在一个数组中标记出哪些报文已经发送但还未收到应答,并通过计数器进行超时未应答计数,超时后根据全局变量记录的报文内容进行重发操作。通常采用数组标记的方式进行管理,对于不同的报文类型,报文发送后在数组中标记是否需要应答,对于不断增加需要应答的报文数量,数组的长度需要不断增加,代码框架也需要改变,同时使用一个定时器进行计数来管理若干需要应答的报文,这种管理方式容易出错。在报文重发时,需要确定重发报文的目的地址、内容、长度等信息,这些信息一般为全局共有变量,从报文第一次发送到应答期间数据的值可能被篡改,致使两次发送数据内容并非完全一致,导致最终数据出现错误。

技术实现思路

[0003]本专利技术的技术解决问题是:克服现有技术的不足,提供了一种基于关联容器map的报文协议超时重发方法。
[0004]本专利技术的技术解决方案是:
[0005]一种基于关联容器map的报文协议超时重发方法,步骤如下:
[0006](1)设计系统间报文协议,包括发送报文协议和接收确认报文协议,且均为变长协议,报文接收方接收到报文后回复接收确认报文,发送报文和接收确认报文以帧序号为唯一标识进行关联;
[0007](2)使用步骤(1)所设计的系统间报文协议进行通信,使用关联容器MAP对发送报文进行管理;关联容器MAP存储所发送报文的帧序号和重发管理结构体MainReSend变量信息;
[0008](3)在报文发送线程使用重发管理结构体MainReSend对发送报文进行管理并将帧序号和重发管理结构体MainReSend存储到关联容器MAP中;
[0009](4)在报文接收线程,处理接收确认报文,根据接收确认报文的帧序号,在关联容器MAP中遍历查询该帧序号,将查找到的重发管理结构体中的是否重发标志设置为否;
[0010](5)设置重发管理定时器,在重发处理定时器中周期对关联容器MAP变量gSndQ中键进行遍历,对不需进行管理的键值对进行删除;
[0011](6)对步骤(5)中所有是否重发标志IsReSnd为TRUE的关联容器MAP元素进行管理;
[0012](7)每进行一次重发操作将重发管理结构体中已重发次数进行加一操作,当已重
发次数达到需要重发的次数时,将该键值对从关联容器中移除。
[0013]进一步的,所述发送报文协议包括帧头FrmHead、帧序号FrmNum、帧长度FrmLen、帧类型FrmType、目的地址FrmDst、源地址FrmSrc、应答标识FrmACKFlag、功能码FrmCode、负载内容FrmContent、和校验FrmChk、帧尾FrmTail;
[0014]帧头FrmHead长度为两个字节,帧头具有可标识性;帧序号FrmNum长度为四个字节,发送报文和接收确认报文通过帧序号FrmNum进行关联;帧长度FrmLen长度为两个字节,该长度包括从帧头到帧尾的所有字节数;帧类型FrmType长度为两个字节,表示该帧数据的类型;目的地址FrmDst长度为四个字节,该值为接收方的IP地址值;源地址FrmSrc长度为四个字节,该值为发送方的IP地址值;应答标识FrmACKFlag长度为两个字节,表示该发送帧是否需要应答,如果这两个字节为0xFF00则表示此帧需要应答,如果为0x00FF则表示此帧不需要应答;功能码FrmCode长度为两个字节,功能码表示帧所传递的有效数据内容;负载内容FrmContent所具有的字节数不固定,表示实际传输数据的内容;校验FrmChk长度为两个字节,检验方式采用和校验方式;帧结尾FrmTail为两个字节;
[0015]接收确认报文协议与发送报文协议完全一致,仅负载内容FrmContent为固定字节数。
[0016]进一步的,定义关联容器MAP变量,关联容器中的键值对分别为帧序号和重发管理结构;重发管理结构包括目的地址、所要发送的数据指针、所要发送数据的长度、是否重发标志、发送次数计数、需要重发的次数。
[0017]进一步的,所述使用关联容器MAP对发送报文进行管理,具体为:
[0018](2.1)设计重发管理结构体MainReSend,此结构的成员变量包括

发送报文的目的地址DstAddr,类型设置为整型;

需要发送的数据地址DataAddr,类型设置为整型指针类型,该地址指向存储数据的内存;

需要发送的数据长度DataLen,类型设置为短整形;

是否重发标志IsReSnd,类型设置为布尔型,TURE表示需要重发值设置为1,FALSE表示不需要重发,值设置为0;

已重发次数CNT,类型设置为无符号整型;

需要重发次数NCNT,类型设置为整型;此值如果设置为0则表示不需要重发;

计数器COUNT,该变量记录重发超时次数;
[0019](2.2)定义一个关联容器MAP变量gSndQ,其中键key的类型设置为整型,这个值记录发送帧的帧序号FrmNum,发送报文和接收确认报文通过帧序号FrmNum进行关联,值value设置为重发管理结构体MainReSend类型。
[0020]进一步的,所述步骤(3)在报文发送线程使用重发管理结构体MainReSend对发送报文进行管理并将帧序号和重发管理结构体MainReSend存储到关联容器MAP中,具体为:
[0021](3.1)在报文发送过程,报文内容填充完后,判断应答标识FrmACKFlag是否为0xFF00,如果为0xFF00则进行重发管理,如果为0x00FF,则不做处理;
[0022](3.2)定义一个重发管理结构体MainReSend类型变量gMReSend,将帧序号FrmNum、发送报文的目的地址DstAddr、需要发送的数据地址DataAddr、需要发送的数据长度DataLen分别赋值到重发管理结构体变量中,将gMReSend中的是否重发标志IsReSnd设置为TRUE、已重发次数CNT设置为0、需要重发次数NCNT设置为TIMES_SET;
[0023](3.3)定义关联容器变量MAP变量gSndQ,使用关联容器MAP中插入方法将帧序号FrmNum以及重发管理结构体类型变量gMReSend键值对插入到关联容器MAP变量gSndQ中,等
待遍历查询,此时报文已发送完成。
[0024]进一步的,所述步骤(4)在报文接本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于关联容器map的报文协议超时重发方法,其特征在于步骤如下:(1)设计系统间报文协议,包括发送报文协议和接收确认报文协议,且均为变长协议,报文接收方接收到报文后回复接收确认报文,发送报文和接收确认报文以帧序号为唯一标识进行关联;(2)使用步骤(1)所设计的系统间报文协议进行通信,使用关联容器MAP对发送报文进行管理;关联容器MAP存储所发送报文的帧序号和重发管理结构体MainReSend变量信息;(3)在报文发送线程使用重发管理结构体MainReSend对发送报文进行管理并将帧序号和重发管理结构体MainReSend存储到关联容器MAP中;(4)在报文接收线程,处理接收确认报文,根据接收确认报文的帧序号,在关联容器MAP中遍历查询该帧序号,将查找到的重发管理结构体中的是否重发标志设置为否;(5)设置重发管理定时器,在重发管理定时器中周期对关联容器MAP变量gSndQ中键进行遍历,对不需进行管理的键值对进行删除;(6)对步骤(5)中所有是否重发标志IsReSnd为TRUE的关联容器MAP元素进行管理;(7)每进行一次重发操作将重发管理结构体中已重发次数进行加一操作,当已重发次数达到需要重发的次数时,将该键值对从关联容器中移除。2.根据权利要求1所述的一种基于关联容器map的报文协议超时重发方法,其特征在于:所述发送报文协议包括帧头FrmHead、帧序号FrmNum、帧长度FrmLen、帧类型FrmType、目的地址FrmDst、源地址FrmSrc、应答标识FrmACKFlag、功能码FrmCode、负载内容FrmContent、和校验FrmChk、帧尾FrmTail;帧头FrmHead长度为两个字节,帧头具有可标识性;帧序号FrmNum长度为四个字节,发送报文和接收确认报文通过帧序号FrmNum进行关联;帧长度FrmLen长度为两个字节,该长度包括从帧头到帧尾的所有字节数;帧类型FrmType长度为两个字节,表示该帧数据的类型;目的地址FrmDst长度为四个字节,该值为接收方的IP地址值;源地址FrmSrc长度为四个字节,该值为发送方的IP地址值;应答标识FrmACKFlag长度为两个字节,表示该发送帧是否需要应答,如果这两个字节为0xFF00则表示此帧需要应答,如果为0x00FF则表示此帧不需要应答;功能码FrmCode长度为两个字节,功能码表示帧所传递的有效数据内容;负载内容FrmContent所具有的字节数不固定,表示实际传输数据的内容;校验FrmChk长度为两个字节,检验方式采用和校验方式;帧结尾FrmTail为两个字节;接收确认报文协议与发送报文协议完全一致,仅负载内容FrmContent为固定字节数。3.根据权利要求2所述的一种基于关联容器map的报文协议超时重发方法,其特征在于:定义关联容器MAP变量,关联容器中的键值对分别为帧序号和重发管理结构;重发管理结构包括目的地址、所要发送的数据指针、所要发送数据的长度、是否重发标志、发送次数计数、需要重发的次数。4.根据权利要求2所述的一种基于关联容器map的报文协议超时重发方法,其特征在于:所述使用关联容器MAP对发送报文进行管理,具体为:(2.1)设计重发管理结构体MainReSend,此结构的成员变量包括

发送报文的目的地址DstAddr,类型设置为整型;

需要发送的数据地址DataAddr,类型设置为整型指针类型,该地址指向存储数据的内存;

需要发送的数据长度DataLen,类型设置为短整形;

是否重发标志IsReSnd,类型设置为布尔型,TURE表示需要重发值设置为1,FALSE表示不需要重
发,值设置为0;

已重发次数CNT,类型设置为无符号整型;

需要重发次数NCNT,类型设置为整型;此值如果设置为0则表示不需要重发;

计数器COUNT,该变量记录重发超时次数;(2.2)定义一个关联容器MAP变量gSndQ,其中键key的类型设置为整型,这个值记录发送帧的帧序号FrmNum,发送报文和接收确认报文通过帧序号FrmNum进行关联,值value设置为重发管理结构体MainReSend类型。5.根据权利要求4所述的一种基于关联容器map的报文协议超时重发方法,其特征在于:所述步骤(3)在报文发送线程使用重发管理结构体MainReSend对发送报文进行管理并将帧序号和重发管理结构体MainReSend存储到关联容器MAP中,具体为:(3.1)在报文发送过程,报文内容填充完后,判断应答标识FrmACKFlag是否为0xFF00,如果为0xFF00则进行重发管理,如果为0x00FF,则不做处理;(3.2)定义...

【专利技术属性】
技术研发人员:王雨龙
申请(专利权)人:天津津航计算技术研究所
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1