一种时间触发以太网调度表生成及动态更新的方法与流程

文档序号:25230599发布日期:2021-05-28 14:37阅读:169来源:国知局
一种时间触发以太网调度表生成及动态更新的方法与流程

本发明属于网络技术领域,具体涉及一种时间触发以太网调度表生成及动态更新的方法。



背景技术:

时间触发以太网(time-triggeredethernet,tte)是众多时间触发协议中的一种。因为和传统以太网的完全兼容,以及可以提供时间确定性和可靠性而越来越受到航空航天领域和工业控制领域的重视,目前在航空电子系统中已经有了成功的应用案例,例如波音787dreamline飞机和nasaorion太空船。

时间触发以太网支持三种类型的数据帧(时间触发数据帧,速率受限数据帧和尽力而为数据帧),其中时间触发数据帧具有最高的优先级以及最低的时延和抖动,这种数据类型可以满足安全关键性系统中越来越严苛的实时性和可靠性要求。时间触发数据帧在一张全局调度表的控制下,依据准确的全局时钟进行工作,因此调度表的生成和分发对于时间触发以太网的应用至关重要。

中国专利“cn201710263462.6一种时间触发业务静态调度表生成方法”提供了一种生成时间触发以太网静态调度表的方法。此专利将时间触发以太网的基本周期等分为多个固定的时隙,每个时隙满足最大以太网帧在一跳链路的传输。根据时间触发任务的周期大小和数据帧长度来决定任务调度的顺序,对时间触发任务进行调度优先级排序,依次为每一个时间触发任务在其传输路径上的每一条链路安排最靠左的传输时隙,最大程度减小时间触发任务占据的时间区间长度,保证所有时间触发任务有序,无冲突的传输。

中国专利“cn201811534699.4基于时间触发以太网的静态调度表生成方法,航电系统”同样提供了生成静态调度表的方法。此专利主要致力于在生成调度表的过程中加入“孔隙度”的概念,使得速率受限数据帧和尽力而为数据帧可以在孔隙中进行传输,有利于降低事件触发数据帧的时延和抖动。

然而,中国专利“cn201710263462.6-一种时间触发业务静态调度表生成方法”所述的技术方案虽然可以保证时间触发数据帧的有序无冲突传输,但是当系统中需要添加一个新的时间触发任务时需要停止系统的工作,重新生成调度表并分发到各个网络节点,之后系统才可以在新调度表的约束下正常工作。此外该专利中使用了固定时隙的方法来传输数据帧,在实际应用中大多数数据帧的长度并不固定,因此采用固定时隙方法势必会造成一定程度的时隙浪费。

而在中国专利“cn201811534699.4基于时间触发以太网的静态调度表生成方法,航电系统”中,航电系统的时间触发任务相对确定,因此使用静态调度表生成方法可以很好的满足应用需求,但是当时间触发以太网运用于工业控制网络或者医疗监护网络等混合安全关键性网络中时,使用静态调度表生成方法限制了时间触发以太网的灵活性,无法满足实际应用中复杂多变的时间触发任务需求。



技术实现要素:

(一)要解决的技术问题

本发明要解决的技术问题是:如何提出一种既能够保证时间触发数据帧有序、无冲突传输,同时能够实现调度表动态更新的方法。

(二)技术方案

为了解决上述技术问题,本发明提供了一种时间触发以太网调度表生成及动态更新的方法,先对该方法中使用的概念和符号说明如下:

(1)将时间触发通讯任务表示为tvivj={taskid,source,desti,period,length,vlvivj},其中taskid表示该通讯任务的全局唯一编号,source表示通讯任务的发送节点即vi,desti表示通讯任务的接收节点即vj,period表示该通讯任务的周期,length表示该通讯任务的数据帧长度,vlvivj表示该通讯任务的虚拟链路路径;

(2)将二维物品表示为ovivj={objectid,height,width,posx,posy,combid},其中objectid表示二维物品的全局唯一编号,height表示通讯任务抽象为二维物品的高度,width表示通讯任务抽象为二维物品的宽度,posx和posy表示二维物品放置在箱子中的位置左下角坐标,combid表示二维物品中包含的物品编号,在下面的二维物品整合阶段使用,若当前二维物品没有和其他二维物品整合,combid中只包含二维物品本身的编号;

(3)将可用装箱点表示为pi={pid,posx,posy},其中(posx,posy)为当前箱子中可以放置物品的位置坐标,pid表示可用装箱点的编号;

调度表生成的方法包括下列步骤:

(1)将链路资源抽象为“空箱子”,计算箱子的高度和宽度;

通过将时间轴按照基本周期进行折叠,将链路资源抽象为具有高度和宽度的“空箱子”;

基本周期pgcd是所有通讯任务周期的最大公因数,pgcd=gcd(tvivj.period),gcd()是求最大公因数的函数;

矩阵周期plcm是所有通讯任务周期的最小公倍数,plcm=lcm(tvivj.period),lcm()是求最小公倍数的函数;

链路带宽表示为bwidth;

计算“空箱子”的高度和宽度如下:

box.height=plcm/pgcd=lcm(tvivj.period)/gcd(tvivj.period)

box.width=bwidth*pgcd/8

(2)计算通讯任务的虚拟链路路径

有的时间触发通讯任务没有指定通讯链路路径,此时需要借助考虑负载均衡的路由算法来计算通讯任务的虚拟链路路径,计算得到的链路路径保存于tvivj的vlvivj中;

(3)将时间触发通讯任务抽象为二维物品,初始化待装箱物品队列

把时间触发通讯任务抽象为具有高度和宽度的二维物品,计算得到每个物品ovivj的宽度ovivj.width和高度ovivj.height,将所有通讯任务抽象为二维物品之后将所有物品信息加入到待装箱物品队列;

ovivj.height=plcm/tvivj.period=lcm(tvivj.period)/tvivj.period

ovivj.width=tvivj.length

(4)物品整合

虚拟链路vlvivj不重合的任务对应的二维物品可以进行整合,被整合的物品编号记录在ovivj.combid中;

整合后的物品视为一个新的物品,仍然可以和其他物品进行整合,只不过此时要求被整合物品中的虚拟链路两两互相不重合;

(5)物品优先级排序

整合后的物品整理为一个新的物品队列,在该队列中对物品进行排序。按照物品高度由大到小进行排序,高度相同的物品按照宽度由大到小进行排序,高度宽度都相同的物品按照物品编号由小到大进行排序;

(6)初始化可用装箱点队列

当箱子为空时,只有一个可用装箱点,此时如果装入物品会消耗可用装箱点,同时会产生新的可用装箱点;

使用动态数组即可保存当前可用的所有装箱点,初始化时,数组中只有一个可以使用的装箱点p0(0,0);

(7)取出一个待装箱物品进行装箱,记录该物品装箱的位置信息

从整合物品队列中取出第一个物品进行装箱,从可用装箱点队列中取出第一个可用装箱点,该物品即可放置于该可用装箱点的位置,即ovivj.posx=pi.posx,ovivj.posy=pi.posy,已经装箱的物品保存于已装箱物品队列并从待装箱物品队列删除;

(8)更新可用装箱点队列

当放入一个物品之后,会消耗一个可用装箱点,同时根据装入物品的高度和宽度计算新产生的装箱点;

将新产生的装箱点加入队列后需要对队列进行排序,按照pi.posx由小到大进行排序,pi.posx相同的装箱点按照pi.posy由小到大进行排序;

(9)判断待装箱物品队列是否为空,若为空则转到步骤(10),若队列中还有未装箱的物品则转到步骤(7);

(10)保存物品装箱结果到xml文件

遍历已装箱物品队列,将所有物品的信息及它们的装箱位置信息保存到xml文件中,之后需要添加新通讯任务时可以直接使用该文件;

(11)保存当前可用装箱点队列信息到xml文件

遍历可用装箱点数组,将所有可用装箱点信息保存于xml文件,之后有新通讯任务添加时可直接使用该文件;

(12)利用装箱结果计算调度表表项

利用链路的时延信息计算得到每个数据帧的发送时间点和接收时间点,由此得到每个节点的发送调度表和接收调度表。

优选地,vlvivj可以在设计通讯任务的时候指定。

优选地,vlvivj可以由路径算法根据网络拓扑结构计算得出。

优选地,箱子左下角为坐标原点。

优选地,步骤4中,进行物品整合时有三种情况,对于可以包含和全等的物品没有空间浪费直接进行整合,对于其他物品,考虑浪费的空间和节省的空间,只有节省空间大于浪费空间的物品才进行整合。

优选地,在生成调度表之后执行调度表动态更新的步骤。

优选地,通过添加新的通讯任务实现调度表动态更新。

优选地,添加新通讯任务的步骤具体为:

步骤11、将新通讯任务抽象为二维物品;

步骤12、查找新二维物品是否可以和之前的物品进行整合,若可以进行整合,则根据整合物品的装箱位置即可得到新通讯任务的装箱位置,之后转到步骤14,若没有可以整合的物品,则转到步骤13;

步骤13、查找可用装箱点队列,是否有可以容纳该通讯任务的空间,若有可用装箱点,则转到步骤14,若没有可用装箱点,则转到步骤16;

步骤14、更新物品装箱结果xml文件,更新可用装箱点xml文件;

步骤15、根据装箱结果计算调度表表项

根据链路时延计算新添加任务的调度表即可,生成新添加通讯任务的调度表后只需要发送到对应的网络节点即可,其他网络节点可以不受影响继续正常工作;

步骤16、将新通讯任务加入通讯任务队列,重新对所有通讯任务进行装箱。

优选地,在生成调度表之后执行删除通讯任务的步骤。

优选地,执行删除通讯任务的步骤时将对应的可用装箱点置为可用即可。

(三)有益效果

本发明将链路资源抽象为“空箱子”,并且将时间触发任务抽象为“二维物品”,利用不重叠装箱问题本身的特性满足时间触发数据帧有序、无冲突传输,因此可以利用现有成熟的装箱算法,相比于现有的方案,本方案极大的降低了算法代码实现的难度,进一步,本发明利用虚拟链路路径对通讯任务进行整合,提供了一种在线动态更新调度表的方法,即可以不影响当前通讯任务的调度表工作,只需要对新添加的通讯任务计算其对应的调度表,之后把该新任务的调度表发送到对应的网络节点即可完成网络调度表的动态更新。通讯任务越多,网络拓扑规模越大则通讯任务可以相互整合的可能性也越大,因此本发明在网络中同时存在较多通讯任务时可降低时间触发数据帧占用的链路资源。

附图说明

图1为本发明的调度表生成方案主流程图;

图2为本发明的时间触发通讯任务抽象为物品示意图;其中a为时间轴示意图,b为折叠时间轴示意图,c抽象为箱子后示意图;

图3为本发明的物品整合示意图;其中a为可折叠装箱示意图,b为物品包含示意图,c为物品全等示意图,d为一般物品示意图;

图4为本发明的可用装箱点示意图;其中a为空箱子装箱点示意图,b为第一个物品装箱示意图,c、d为第二个物品装箱示意图;

图5为本发明的物品装箱过程示意图;其中a、b为排序物品装箱点示意图,c为高度相同物品示意图,d为宽度相同物品示意图;

图6为本发明的调度表表项计算示意图;其中a为整合物品装箱结果示意图,b为整合物品还原为原始物品示意图,c为装箱结果拆分为基本周期示意图,d为数据帧链路传输示意图,e为考虑时延的数据帧链路传输示意图;

图7为本发明的调度表动态更新流程图。

具体实施方式

为使本发明的目的、内容、和优点更加清楚,下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。

先对本发明的方案中使用的概念和符号说明如下:

(1)将时间触发通讯任务表示为tvivj={taskid,source,desti,period,length,vlvivj},其中taskid表示该通讯任务的全局唯一编号,source表示通讯任务的发送节点即vi,desti表示通讯任务的接收节点即vj,period表示该通讯任务的周期(单位毫秒),length表示该通讯任务的数据帧长度(单位字节),vlvivj表示该通讯任务的虚拟链路路径,可以在设计通讯任务的时候指定,也可由路径算法根据网络拓扑结构计算得出。

(2)将二维物品表示为ovivj={objectid,height,width,posx,posy,combid},其中objectid表示二维物品的全局唯一编号,height表示通讯任务抽象为二维物品的高度,width表示通讯任务抽象为二维物品的宽度,posx和posy表示二维物品放置在箱子中的位置左下角坐标(以箱子左下角为坐标原点),combid表示二维物品中包含的物品编号,在下面的二维物品整合阶段使用,若当前二维物品没有和其他二维物品整合,combid中只包含二维物品本身的编号。

(3)将可用装箱点表示为pi={pid,posx,posy},其中(posx,posy)为当前箱子中可以放置物品的位置坐标,pid表示可用装箱点的编号。

图1是本发明的调度表生成方案的主流程图。如图1所示,本发明提出的调度表生成方法主要包括下列步骤:

(1)将链路资源抽象为“空箱子”,计算箱子的高度和宽度;

如图2(a)和图2(c)所示,通过将时间轴按照基本周期进行折叠,可以将链路资源抽象为具有高度和宽度的“空箱子”;

基本周期pgcd是所有通讯任务周期的最大公因数,pgcd=gcd(tvivj.period),gcd()是求最大公因数的函数;

矩阵周期plcm是所有通讯任务周期的最小公倍数,plcm=lcm(tvivj.period),lcm()是求最小公倍数的函数;

链路带宽表示为bwidth,单位为bit/s;

计算“空箱子”的高度和宽度如下:

box.height=plcm/pgcd=lcm(tvivj.period)/gcd(tvivj.period)

box.width=bwidth*pgcd/8

(2)计算通讯任务的虚拟链路路径

有的时间触发通讯任务没有指定通讯链路路径,此时需要借助考虑负载均衡的路由算法来计算通讯任务的虚拟链路路径,计算得到的链路路径保存于tvivj的vlvivj中。

(3)将时间触发通讯任务抽象为二维物品,初始化待装箱物品队列

在本步骤中把时间触发通讯任务抽象为具有高度和宽度的二维物品,如图2(c)所示,可以计算得到每个物品ovivj的宽度ovivj.width和高度ovivj.height,将所有通讯任务抽象为二维物品之后将所有物品信息加入到待装箱物品队列;

ovivj.height=plcm/tvivj.period=lcm(tvivj.period)/tvivj.period

ovivj.width=tvivj.length

(4)物品整合

虚拟链路vlvivj不重合的任务对应的二维物品可以进行整合,进行物品整合时有三种情况,如图3(b)(c)(d)所示,可以包含和全等的物品没有空间浪费可以直接进行整合,一般情况下的物品如图3(d)所示,需要考虑浪费的空间和节省的空间,只有节省空间大于浪费空间的物品才进行整合,被整合的物品编号记录在ovivj.combid中;

整合后的物品视为一个新的物品,仍然可以和其他物品进行整合,只不过此时要求被整合物品中的虚拟链路两两互相不重合。

(5)物品优先级排序

整合后的物品整理为一个新的物品队列,在该队列中对物品进行排序。按照物品高度由大到小进行排序,高度相同的物品按照宽度由大到小进行排序,高度宽度都相同的物品按照物品编号由小到大进行排序。

(6)初始化可用装箱点队列

当箱子为空时,只有一个可用装箱点,如图4(a)所示,此时如果装入物品会消耗可用装箱点,同时会产生新的可用装箱点,如图4(b)(c)(d)所示;

使用动态数组即可保存当前可用的所有装箱点,初始化时,数组中只有一个可以使用的装箱点p0(0,0)。

(7)取出一个待装箱物品进行装箱,记录该物品装箱的位置信息

从整合物品队列中取出第一个物品进行装箱,从可用装箱点队列中取出第一个可用装箱点,该物品即可放置于该可用装箱点的位置,即ovivj.posx=pi.posx,ovivj.posy=pi.posy,已经装箱的物品保存于已装箱物品队列并从待装箱物品队列删除。

(8)更新可用装箱点队列

当放入一个物品之后,会消耗一个可用装箱点,同时需要根据装入物品的高度和宽度计算新产生的装箱点。因为物品已经进行了排序,因此可以自然避免图4(c)(d)中的情况。因为取所有通讯任务周期的最小公倍数作为矩阵周期,因此所有物品的高度都是箱子高度的因数,如图5所示是物品装箱过程的示意图,从图中可以直观的看出可用装箱点的消耗和产生的过程;

将新产生的装箱点加入队列后需要对队列进行排序,按照pi.posx由小到大进行排序,pi.posx相同的装箱点按照pi.posy由小到大进行排序。

(9)判断待装箱物品队列是否为空,若为空则转到步骤(10),若队列中还有未装箱的物品则转到步骤(7);

(10)保存物品装箱结果到xml文件

遍历已装箱物品队列,将所有物品的信息及它们的装箱位置信息保存到xml文件中,之后需要添加新通讯任务时可以直接使用该文件;

(11)保存当前可用装箱点队列信息到xml文件

遍历可用装箱点数组,将所有可用装箱点信息保存于xml文件,之后有新通讯任务添加时可直接使用该文件。

(12)利用装箱结果计算调度表表项

装箱算法对链路的时间资源进行了抽象和分配,可以保证数据帧没有冲突的传输,但是在实际网络环境中,链路存在传输时延和传播时延,交换机存在转发时延,并且一个数据帧和另外一个数据帧之间具有固定的帧间保护间隙,这些因素在实际使用中必须要考虑进去,并经过计算才可以得到实际的数据帧发送时间点和接收时间点。

如图6(a)所示是整合后的物品的装箱结果示意图,整合的物品在计算调度表时需要恢复成原始物品,如图6(b)所示是整合物品恢复成原始物品后的装箱结果示意图。如图6(c)所示是物品还原到每个基本周期传输的示意图,这个过程与时间轴折叠抽象为箱子的过程正好相反。如图6(d)是数据帧在链路上传输的示意图,这里是忽略了传输时延和转发时延的传输示意图,当考虑时延影响时,数据帧在链路上的传输示意图如图6(e)所示,例如数据帧从链路1传输到链路2有时延并且采用存储转发策略,因此链路2开始发送数据帧的时间会比链路1延后,之后通过的链路同理。

链路的时延信息都是先验已知的,利用这些信息就可以计算得到每个数据帧的发送时间点和接收时间点,由此可以得到每个节点的发送调度表和接收调度表。

图7是调度表动态更新的流程图,由于上述调度表生成过程中利用xml文件保存了当前网络中的通讯任务信息及当前可用的装箱点信息,由此可以在不影响现有调度表工作的前提下添加新的通讯任务,从而实现调度表动态更新,添加新的通讯任务的动作可以在调度表生成之后执行。下面是添加新通讯任务的步骤,删除通讯任务只需要将对应的可用装箱点置为可用即可。

(1)将新通讯任务抽象为二维物品;

(2)查找新二维物品是否可以和之前的物品进行整合,若可以进行整合,则根据整合物品的装箱位置即可得到新通讯任务的装箱位置,之后转到步骤(4),若没有可以整合的物品,则转到步骤(3);

(3)查找可用装箱点队列,是否有可以容纳该通讯任务的空间,若有可用装箱点,则转到步骤(4),若没有可用装箱点,则转到步骤(6);

(4)更新物品装箱结果xml文件,更新可用装箱点xml文件;

(5)根据装箱结果计算调度表表项

只需要根据链路时延计算新添加任务的调度表即可,生成新添加通讯任务的调度表后只需要发送到对应的网络节点即可,其他网络节点可以不受影响继续正常工作;

(6)将新通讯任务加入通讯任务队列,重新对所有通讯任务进行装箱。

本发明将链路资源抽象为“空箱子”,并且将时间触发任务抽象为“二维物品”,利用不重叠装箱问题本身的特性满足时间触发数据帧有序、无冲突传输。本发明利用虚拟链路路径对通讯任务进行整合,提供了一种在线动态更新调度表的方法,即可以不影响当前通讯任务的调度表工作,只需要对新添加的通讯任务计算其对应的调度表,之后把该新任务的调度表发送到对应的网络节点即可完成网络调度表的动态更新。

本方案将链路资源抽象为“空箱子”,将时间触发通讯任务抽象为“二维物品”,因此可以利用现有成熟的装箱算法,相比于现有的方案,本方案极大的降低了算法代码实现的难度。

假设网络中同时存在n个时间触发通讯任务,每个通讯任务平均通过m条链路。对于现有的方案,需要遍历链路上所有时隙表来决定通讯任务可以占据哪些时隙,因此平均时间复杂度为o(m),本方案可以直接判断二维物品能否放置在箱子中的某一个位置,因此复杂度为o(1)。两种方案都需要处理n个通讯任务,因此外层时间复杂度都为o(n)。综上分析可知,现有方案总体时间复杂度为o(mn),本方案总体时间复杂度为o(n),因此当通讯任务数量较多或者网络拓扑规模较大时,本方案可以有效减少调度表生成时间。

本发明提出了一种基于虚拟链路路径对通讯任务进行整合的策略,假设两个周期和数据帧长度都相同的通讯任务可以进行整合则可以节省链路资源50%,若三个相同通讯任务可以进行整合则可节省链路资源66.67%。通讯任务越多,网络拓扑规模越大则通讯任务可以相互整合的可能性也越大,因此本发明在网络中同时存在较多通讯任务时可降低时间触发数据帧占用的链路资源。这意味着尽力而为数据帧和速率受限数据帧可以有更多可用的链路资源,因此进一步可以降低尽力而为和速率受限数据帧的时延。

本发明基于二维装箱算法,提出了“可用装箱点”的概念,在装箱算法计算的过程中更新并保存“可用装箱点”和“物品装箱位置”信息,当通讯任务有动态变更需求时,可以利用保存到文件中的上述信息进行计算。相比于现有的静态调度表生成方法,本方案为调度表在线动态更新提供了一种可行的方法。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1