发明内容
为解决现有技术中存在的不足,本发明的目的在于,提供一种Zonal控制器数据转发方法及系统,设计一种最优调度算法,解决常规CAN和LIN等通讯接口和车载以太网数据转发中,在有限的网络带宽下,提高数据传输效率,以及解决数据延迟等问题。
为实现本发明的目的,本发明所采用的技术方案是:
一种Zonal控制器数据转发方法,包括总线接口数据转以太网和以太网数据转总线接口;
总线接口数据转以太网,包括:
通过总线数据接收模块实时监测并接受总线上的数据,并通过总线数据接收端口的总线接收线程把数据放入对应的总线接收数据输入队列中;
调度算法模块根据参数配置表中的参数,将总线接收数据输入队列中的数据按序放入转发队列;
报文解析模块将转发队列中的数据按设定的报文格式解析好报文直接发送到队列映射模块;
队列映射模块把解析好的报文依次映射到UDP报文发送模块,并通过对应的UDP报文发送端口转发;UDP报文发送端口通过对应的UDP发送线程把报文发送出去,经以太网底层发送模块的TCP/IP协议发送报文;
以太网数据转总线接口,包括:
以太网底层接收模块实时监测并接收以太网上的数据,通过TCP/IP协议把有效报文映射到UDP报文接收模块;并通过UDP报文接收端口的UDP接收线程接收报文数据并判断报文的完整性,将正确的报文放入对应的UDP接收数据输入队列中;
调度算法模块根据参数配置表中的参数,将UDP接收数据输入队列中的数据按序放入转发队列;
报文解析模块将转发队列中的数据按设定的报文格式解析好报文直接发送到队列映射模块;
队列映射模块把解析好的报文依次映射到总线报文发送模块,并通过对应的总线报文发送端口转发;总线报文发送端口通过对应的总线发送线程把报文发送出去。
进一步地,参数配置表中的参数包括:优先级、门控状态以及调度序列;
门控状态分为开启和关闭,控制闸门的开启和关闭;
调度序列是由开启和关闭门控状态组成的一个序列,按时间片轮转调度法来控制闸门开启和关闭;
当门控状态为开启时,按优先级转发队列数据。
进一步地,总线接收数据输入队列和UDP接收数据输入队列,其长度可在参数配置表中设置,亦可在程序中定义缺省值;
当两者都定义了队列长度时,优先使用参数配置表中的值。
进一步地,UDP报文包括报头和数据;
报头包括报文数据类型、报文序列号、数据帧类型和数据帧个数,数据包括一个及以上总线数据帧;
总线数据帧包括总线标识符、总线类型标识符、数据长度和数据区。
进一步地,总线接口数据转以太网的报文解析模块,是一个组包的过程,把总线数据帧加上报头组成UDP数据包;
以太网数据转总线接口的报文解析模块,是一个拆包的过程,把UDP数据包拆解成总线数据帧。
进一步地,每个UDP报文发送端口分配一个私有转发队列来存放需要转发的报文,UDP发送线程实时查询UDP报文发送端口的转发队列是否为空,当转发队列不为空时,从转发队列取数然后从对应的UDP报文发送端口上把数据发送出去,发送完成后,UDP发送线程又回头查询UDP报文发送端口的转发队列是否为空,如此不断循环。
进一步地,每个总线报文发送端口对应一路物理总线通道,同时在软件中每个总线报文发送端口分配一个私有的转发队列来存放需要转发的报文,总线发送线程实时查询总线报文发送端口的转发队列是否为空,当队列不为空时,从队列取数然后从对应的总线报文发送端口上把数据发送出去,发送完成后总线发送线程又回头查询端口转发队列是否为空,如此不断循环。
一种Zonal控制器数据转发系统,包括总线接口数据转以太网系统和以太网数据转总线接口系统;
总线接口数据转以太网系统,包括总线数据接收模块、总线接收数据输入队列、调度算法模块、参数配置表、报文解析模块、队列映射模块、UDP报文发送模块、以太网底层发送模块;
总线数据接收模块实时监测并接受总线上的数据,并通过总线数据接收端口的总线接收线程把数据放入对应的总线接收数据输入队列中;调度算法模块根据参数配置表中的参数,将总线接收数据输入队列中的数据按序放入转发队列;报文解析模块将转发队列中的数据按设定的报文格式解析好报文直接发送到队列映射模块;队列映射模块把解析好的报文依次映射到UDP报文发送模块,并通过对应的UDP报文发送端口转发;UDP报文发送端口通过对应的UDP发送线程把报文发送出去,经以太网底层发送模块的TCP/IP协议发送报文;
以太网数据转总线接口系统,包括以太网底层接收模块、UDP报文接收模块、UDP接收数据输入队列、调度算法模块、参数配置表、报文解析模块、队列映射模块、总线报文发送模块;
以太网底层接收模块实时监测并接收以太网上的数据,通过TCP/IP协议把有效报文映射到UDP报文接收模块;并通过UDP报文接收端口的UDP接收线程接收报文数据并判断报文的完整性,将正确的报文放入对应的UDP接收数据输入队列中;调度算法模块根据参数配置表中的参数,将UDP接收数据输入队列中的数据按序放入转发队列;报文解析模块将转发队列中的数据按设定的报文格式解析好报文直接发送到队列映射模块;队列映射模块把解析好的报文依次映射到总线报文发送模块,并通过对应的总线报文发送端口转发;总线报文发送端口通过对应的总线发送线程把报文发送出去。
本发明的有益效果在于,与现有技术相比,本发明所述的Zonal控制器数据转发方法及系统,可根据产品需求和使用场景,通过软件配置参数的方式部署不同的数据转发调度规则,同时在有限的网络带宽下,提高数据传输效率,以及解决数据延迟等问题。本发明既解决了现有技术的痛点,又在生产实践中提高了工作效率。
具体实施方式
下面结合附图和实施例对本发明的技术方案作进一步的说明。以下实施例仅用于更加清楚地说明本发明的技术方案,而不能以此来限制本申请的保护范围。
如图1所示,本发明所述的Zonal控制器数据转发方法,设计一种最优的调度算法,来解决常规CAN和LIN等通讯接口和车载以太网数据转发中,数据传输效率以及数据延迟等问题。本发明所述的Zonal控制器数据转发方法,包括两种数据转发方式:总线接口数据转以太网和以太网数据转总线接口。
总线接口数据转以太网包括总线数据接收模块、总线接收数据输入队列、调度算法模块、参数配置表、报文解析模块、队列映射模块、UDP报文发送模块、以太网底层发送模块。
以太网数据转总线接口包括以太网底层接收模块、UDP报文接收模块、UDP接收数据输入队列、调度算法模块、参数配置表、报文解析模块、队列映射模块、总线报文发送模块。
为了描述方便,本发明以CAN代替常规通讯中CAN和LIN等,但这不代表本发明数据转发方法只适用于CAN。且,本发明中以4路CAN数据转发为例进行说明,但不仅仅表示只转发4路,在本发明中,4路表示多路的意思。
本发明所述的Zonal控制器数据转发方法,包括两种数据转发方式:CAN转以太网和以太网转CAN。
CAN转以太网包括CAN数据接收模块(CAN Recv)、CAN接收数据输入队列(InputQueue、IQ)、调度算法模块、参数配置表、报文解析模块、队列映射模块、UDP报文发送模块(UDP Send)、以太网底层发送模块(EMAC TX)。
CAN数据接收模块(CAN Recv)实时监测CAN总线上的数据变化,当有数据需要接收时,触发硬实时中断,在中断服务进程中读取数据,并通过对应的CAN数据接收端口(CANPort),CAN接收线程把数据放入与之相对应的CAN接收数据输入队列(IQ)中。
调度算法模块根据参数配置表中的优先级(prio)、门控状态(gate)以及调度序列(Schedule)等参数来决定CAN接收数据输入队列(IQ)中哪个通道的数据优先转发,以及根据转发时占用网络资源的时间长短等调度信息进行排序,然后按序放入转发队列。
报文解析模块实时判断转发队列是否有数据,如果有数据则从转发队列中取数,然后按设定的报文格式进行编解码计算,完成报文解析;解析好的报文直接发送到队列映射模块,这样就完成一次报文解析循环;然后报文解析模块从头开始(即从转发队列取数)进行新一轮循环,直到转发队列为空。
队列映射模块把解析好的报文按参数配置表中的内容依次映射到UDP报文发送模块的对应的端口(UDP Port)上排队转发;UDP报文发送端口(UDP Port)在参数配置表中已设置好,由UDP发送线程(UDP socket)绑定既可。每个UDP报文发送端口(UDP Port)分配一个私有的转发队列来存放需要转发的报文,对列长度在参数配置表中设置。每个UDP报文发送端口(UDP Port)都有一个对应的UDP发送线程(UDP socket),此UDP发送线程实时查询UDP报文发送端口(UDP Port)的转发队列是否为空,当转发队列不为空时,从转发队列取数然后从对应的UDP报文发送端口上把数据发送出去,发送完成后,UDP发送线程又回头查询UDP报文发送端口(UDP Port)的转发队列是否为空,如此,周而复始、不断循环。
UDP报文发送模块通过以太网底层发送模块(EMAC TX)的TCP/IP协议将报文发送出去。
如图1所示,以太网转CAN包括以太网底层接收模块(EMAC RX)、UDP报文接收模块(UDP Recv)、UDP接收数据输入队列(IQ)、调度算法模块、参数配置表、报文解析模块、队列映射模块、CAN报文发送模块(CAN Send)。
以太网底层接收模块(EMAC RX)实时监测以太网输入通道上的数据变化,当有数据需要接收时,触发硬实时中断,在中断服务进程中读取以太网数据并传递给TCP/IP协议栈进一步的处理,TCP/IP协议栈把有效报文映射到UDP报文接收模块(UDP Recv)中对应的UDP报文接收端口(UDP Port),同时触发 UDP接收线程接收报文数据,UDP接收线程接收到报文并判断报文的完整性,只有正确的报文才被放入与之相对应的UDP接收数据输入队列(IQ)中。
调度算法模块根据参数配置表中优先级(prio)、门控状态(gate)以及调度序列(Schedule)等参数来决定UDP接收数据输入队列(IQ)中哪个通道的数据优先转发,以及转发时占用硬件资源的时间长短等调度信息进行排序,然后按序放入转发队列。
报文解析模块实时判断转发队列是否有数据,如果有数据则从转发队列中取数,然后按设定的报文格式进行编解码计算,完成报文解析;解析好的报文直接发送到队列映射模块,这样就完成一次报文解析循环;然后报文解析模块从头开始(即从转发队列取数)进行新一轮循环,直到转发队列为空。
队列映射模块把解析好的报文按参数配置表中的内容依次映射到对应的CAN报文发送模块的对应的端口(CAN Port)上排队转发;CAN报文发送端口(CAN Port)在参数配置表中已设置好。每个CAN报文发送端口(CAN Port)都对应一路物理CAN通道。同时在软件中每个CAN报文发送端口(CAN Port)分配一个私有的转发队列来存放需要转发的报文,对列长度在参数配置表中设置。对应的,每个CAN报文发送端口都有一个 CAN发送线程(CANSend),此线程实时查询CAN报文发送端口的转发队列是否为空,当队列不为空时,从队列取数然后从对应的CAN报文发送端口上把数据发送出去,发送完成后CAN发送线程又回头查询端口转发队列是否为空,如此,周而复始、不断循环。
下面结合图例进行详细描述调度算法。
如图1所示,CAN转以太网包括CAN数据接收模块(CAN Recv)、CAN接收数据输入队列(InputQueue、IQ)、调度算法模块、参数配置表、报文解析模块、队列映射模块、UDP报文发送模块(UDP Send)、以太网底层发送模块(EMAC TX)。
CAN数据接收模块(CAN Recv)实时监测CAN总线上的数据变化,当有数据需要接收时,触发硬实时中断,在中断服务进程中读取数据,并把数据放入与之相对应的CAN接收数据输入队列(IQ)中。CAN接收数据输入队列(IQ)的长度可在参数配置表中设置,亦可在程序中定义缺省值,当两者都定义了队列长度时,优先使用参数配置表中的值,当参数配置表中没有定义此项参数时,则使用程序中定义的缺省值。
如图3所示,调度算法模块根据参数配置置表中优先级(prio)、门控状态(gate)以及调度序列(Schedule)等参数来决定CAN接收数据输入队列(IQ)中哪个通道数据优先转发,以及转发时占用网络资源的时间长短等调度信息进行排序,然后按序放入转发队列。
如图3所示,每个CAN接收数据输入队列(IQ)都可以设置转发优先级(prio),优先级(prio)为1-7,共7级;其中,数值越大优先级越高。门控状态(gate)分两种,分别为开启(Open,O)和关闭(Close,C),门控状态(gate)控制闸门的开启与关闭,当门控状态为关闭(C)时,即使优先级(prio)再高,数据也只能在队列中排队等待,而优先转发的是门控状态(gate)为开启(O)且在所有开启(O)状态中优先级(prio)最高的队列。
调度序列(Schedule)是由开启(O)和关闭(C)门控状态组成的一个序列,用来解决转发时占用网络资源的时间长短。调度序列(Schedule)是按时间片轮转调度法来控制闸门开启和关闭的,本发明中,时间片的粒度可在参数配置表中设定,亦可在程序中设定缺省值,一般缺省值为 1us。
如图3所示,在时间轴(Time)对应的0时刻,根据调度序列(Schedule)中的门控状态,同时打开prio=6 和 prio=4的两个队列闸门,优先转发的则是prio=6的队列中的数据,其次则是prio=4队列中的数据,当一个时间片结束后,则关闭闸门,至于队列中没有转发完的数据,则继续排队等待下次闸门开启后再进行转发。
报文解析模块实时判断转发队列是否有数据,如果有数据则从转发队列中取数,然后按设定的报文格式把CAN数据帧解析组合成UDP数据包,如图2所示,报文格式由两大部分组成:报头(Header)和数据(CFD)。
报头(Header)由4部分组成:Type(2byte)、Seq No.(1byte)、OP Code(1byte)和Frame cnt(1byte)。具体的,报头(Header)的Type 表示本报文转发的是何种数据类型,本发明以CAN为例进行说明,但这不仅仅限定于CAN,也可以是LIN、UART或者其它低速的通讯数据。Seq No.为报文的序列号,这个字段的作用:一是为了区分相邻几个报文,尤其是报文内容相同时避免混淆或者漏掉报文;二是对批量数据需要多个UDP包转发且有顺序要求时必不可少。OP Code标注数据(CFD)的帧类型,如CAN通讯中的远程帧,数据长度为0,数据为空;这类帧在报文中需特殊处理。Frame cnt 表示报文中有多少个完整的CAN数据帧,本发明转发的报文中可以只有一个CAN数据帧,也可以有多个CAN数据帧。
报文中的数据(CFD)区可以包含一个CAN数据帧,也可以包含多个CAN数据帧。具体的,报文解析模块从对应的转发队列中取出一帧数据,然后按报文格式解析,解析完一帧数据后,继续从队列中取数解析,直到队列为空,才算完成一次CAN数据帧转UDP数据包的解析。
某一时刻,当转发队列中有多个CAN数据帧时,则解析出的报文就包含多个CAN数据帧;同理,某一时刻,当转队列中只有一个CAN数据帧时,则解析出的报文只含一个CAN数据帧。
CAN数据帧(CAN Frame)由4部分组成,分别是:CAN ID(4byte)、FD(1byte)、len(1byte)和payload(数据区)。CAN ID 为CAN标识符,分标准帧(11bit)和扩展帧(29bit);不管那种帧,CAN ID 都占4个字节的宽度。FD为CAN总线类型标识符,当FD=0时,表示普通CAN,当FD=1时,表示CAN-FD。Len为CAN数据帧的数据长度;当 FD=0时,len最大值为8,当FD=1时,len最大值为64。Payload为CAN数据帧的数据区,它的有效长度由len标定。
解析好的报文直接发送到队列映射模块,这样就完成一次报文解析循环;然后报文解析模块从头开始(即从转发队列取数)进行新一轮循环,直到转发队列为空。
队列映射模块把解析好的报文按参数配置表中的内容依次映射到UDP报文发送端口(UDP Port)上排队转发;UDP报文发送端口(UDP Port)在参数配置表中已设置好,由UDP发送线程(UDP socket)绑定既可。每个UDP报文发送端口(UDP Port)分配一个私有的转发队列(对列长度在参数配置表中设置)来存放需要转发的报文,对应的,每个UDP报文发送端口(UDP Port)都有一个 UDP发送线程(UDP socket),此线程实时查询UDP报文发送端口(UDP Port)转发队列是否为空,当队列不为空时,从队列取数然后从对应的UDP报文发送端口(UDP Port)上把数据发送出去,发送完成后UDP发送线程(UDP socket)又回头查询UDP报文发送端口(UDP Port)的转发队列是否为空,如此,周而复始、不断循环。
如图1所示,以太网转CAN包括以太网底层接收模块(EMAC RX)、UDP报文接收模块(UDP Recv)、UDP接收数据输入队列(IQ)、调度算法模块、参数配置表、报文解析模块、队列映射模块、CAN报文发送模块(CAN Send)。
以太网底层接收模块(EMAC RX)实时监测以太网输入通道上的数据变化,当有数据需要接收时,触发硬实时中断,在中断服务进程中读取以太网数据并传递给TCP/IP协议栈进一步的处理,TCP/IP协议栈把有效报文映射到UDP报文接收模块(UDP Recv)中对应的UDP报文接收端口(UDP Port),同时触发 UDP接收线程接收报文数据,UDP接收线程接收到报文并判断报文的完整性,只有正确的报文才被放入与之相对应的UDP接收数据输入队列(IQ)中。
UDP接收数据输入队列(IQ)的长度可在参数配置表中设置,亦可在程序中定义缺省值,当两者都定义了队列长度时,优先使用参数配置表中的值,当参数配置表中没有定义此项参数时,则使用程序中定义的缺省值。
如图3所示,调度算法模块根据参数设置表中优先级(prio)、门控状态(gate)以及调度序列(Schedule)等参数来决定UDP接收数据输入队列(IQ)中那哪个通道数据优先转发,以及转发时占用网络资源的时间长短等调度信息进行排序,然后按序放入转发队列。
在本发明中,CAN转以太网和以太网转CAN中都有调度算法模块,它们的算法逻辑相同,不同的是参数配置表中设定的优先级(prio)、门控状态(gate)和调度序列(Schedule)等参数,所以在此不再赘述。
如图1所示, CAN转以太网和以太网转CAN两种数据转发方式中都有报文解析模块,不同的是在CAN转以太网中,报文解析是一个组包的过程,即把一个CAN数据帧或多个CAN数据帧加上报头(Header)组成一个UDP数据包;而在以太网转CAN中,报文解析是一个拆包的过程,即把一个UDP数据包拆解成一个或者多个CAN数据帧。
在以太网转CAN报文解析完成后,拆解好的CAN数据帧按参数配置表中的设置值依次映射到CAN报文发送端口(CAN Port)上排队转发;CAN报文发送端口(CAN Port)在参数配置表中已设置好。每个CAN报文发送端口(CAN Port)对应一路物理CAN通道。同时在软件中每个CAN报文发送端口(CAN Port)分配一个私有的转发队列(对列长度在参数配置表中设置)来存放需要转发的CAN数据帧,对应的,每个CAN报文发送端口(CAN Port)都有一个CAN发送线程(CAN Send),此线程实时查询CAN报文发送端口转发队列是否为空,当队列不为空时,从队列取数然后从对应的CAN报文发送端口上把数据发送出去,发送完成后CAN发送线程又回头查询CAN报文发送端口转发队列是否为空,如此,周而复始、不断循环。
本发明还提供一种Zonal控制器数据转发系统,包括总线接口数据转以太网系统和以太网数据转总线接口系统。
总线接口数据转以太网系统包括总线数据接收模块、总线接收数据输入队列、调度算法模块、参数配置表、报文解析模块、队列映射模块、UDP报文发送模块、以太网底层发送模块。
总线数据接收模块实时监测并接受总线上的数据,并通过总线数据接收端口的总线接收线程把数据放入对应的总线接收数据输入队列中;调度算法模块根据参数配置表中的参数,将总线接收数据输入队列中的数据按序放入转发队列;报文解析模块将转发队列中的数据按设定的报文格式解析好报文直接发送到队列映射模块;队列映射模块把解析好的报文依次映射到UDP报文发送模块,并通过对应的UDP报文发送端口转发;UDP报文发送端口通过对应的UDP发送线程把报文发送出去,经以太网底层发送模块的TCP/IP协议发送报文。
以太网数据转总线接口系统,包括以太网底层接收模块、UDP报文接收模块、UDP接收数据输入队列、调度算法模块、参数配置表、报文解析模块、队列映射模块、总线报文发送模块。
以太网底层接收模块实时监测并接收以太网上的数据,通过TCP/IP协议把有效报文映射到UDP报文接收模块;并通过UDP报文接收端口的UDP接收线程接收报文数据并判断报文的完整性,将正确的报文放入对应的UDP接收数据输入队列中;调度算法模块根据参数配置表中的参数,将UDP接收数据输入队列中的数据按序放入转发队列;报文解析模块将转发队列中的数据按设定的报文格式解析好报文直接发送到队列映射模块;队列映射模块把解析好的报文依次映射到总线报文发送模块,并通过对应的总线报文发送端口转发;总线报文发送端口通过对应的总线发送线程把报文发送出去。
本发明的有益效果在于,与现有技术相比,本发明所述的Zonal控制器数据转发方法,可根据产品需求和使用场景,通过软件配置参数的方式部署不同的数据转发调度规则,同时在有限的网络带宽下,提高数据传输效率,以及解决数据延迟等问题。本发明既解决了现有技术的痛点,又在生产实践中提高了工作效率。
本发明申请人结合说明书附图对本发明的实施示例做了详细的说明与描述,但是本领域技术人员应该理解,以上实施示例仅为本发明的优选实施方案,详尽的说明只是为了帮助读者更好地理解本发明精神,而并非对本发明保护范围的限制,相反,任何基于本发明的发明精神所作的任何改进或修饰都应当落在本发明的保护范围之内。