1.本发明涉及的是车联网终端通讯领域,特别涉及一种车联网终端防丢包通讯的方法和系统。
背景技术:2.车联网终端是当前汽车行业的必然趋势和法律要求,无论是商用车还是乘用车,无论是新源车还是柴油车,按照gb17691和gbt32960的国标要求,在2021年之后上市的车辆都需要安装一种车联网终端,因此可见车联网终端的需求会是非常之大,另外由于车联网终端往往包含一个mpu和一个mcu芯片,两个芯片之间通过串口协议进行通信,在实际应用中,mcu端在接收串口数据时经常出现错误,导致整个数据包校验失败,从而出现丢包现象,进而导致车联网终端功能异常。通常这种功能异常不是必现,开发和测试阶段很难发现这个异常,最终导致流向市场的产品存在各种问题。
技术实现要素:3.鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的一种车联网终端防丢包通讯的方法。
4.为了解决上述技术问题,本技术实施例公开了如下技术方案:
5.一种车联网终端防丢包通讯的方法,包括:
6.s100.对发送端和接收端进行通信的防丢包通信协议进行定义;
7.s200.根据定义的防丢包通信协议,发送端根据需求对防丢包通信协议中的操作命令和指令方向进行设置,并将完整防丢包通信协议数据帧保存到串口数据发送队列中;
8.s300.发送端的防丢包协议层接口根据当前数据帧的指令方向,将当前数据帧唯一序号进行设置,并创建一个新的防丢包信息对象,按第一预设规则对此防丢包信息对象进行重新设置,然后将此防丢包信息对象添加到防丢包队列中,最后调用系统的串口发送接口将数据帧发送给车联网终端的接收端;
9.s400.接收端防丢包协议层接口层在收到接收端发来的数据帧时,按第二预设规则对此数据帧进行判断,根据判断结果接收端防丢包协议层接口层给发送端进行回复对应数据帧;
10.s500.发送端防丢包协议层接口层在收到接收端发来的数据帧时,按第三预设规则对接收的数据帧进行判断,根据判断结果确认防丢包协议数据包是否发送成功。
11.进一步地,s100中,发送端和接收端可以为mcu芯片或mpu芯片。
12.进一步地,s100中,对发送端和接收端进行通信的防丢包通信协议进行定义,其中防丢包通信协议由帧头、校验类型、数据长度、指令方向、命令序号、操作命令、数据内容和校验位8个部分组成。
13.进一步地,s200中,发送端根据需求对防丢包通信协议中的操作命令和指令方向进行设置,其中,操作命令包括操作类型和命令字,指令方向包括主答、应答、mcu防丢包应
答和mpu防丢包应答。
14.进一步地,s300中,发送端的防丢包协议层接口根据当前数据帧的指令方向,将当前数据帧唯一序号进行设置,具体包括:当防丢包协议层接口判断此数据帧的指令方向是主发,将数据帧唯一序号进行加1处理。
15.进一步地,s300中,按第一预设规则对此防丢包信息对象进行重新设置,第一预设规则为:将要发送数据帧的操作类型、命令字、命令序号、数据长度、数据内容信息赋值给此防丢包信息对象,并将此防丢包信息对象的防丢包机制是否有效字段设置为有效,应答状态设置为等待应答,重发次数设置为0,超时时间设置为0。
16.进一步地,s400中,接收端防丢包协议层接口层在收到接收端发来的数据帧时,按第二预设规则对此数据帧进行判断,第二预设规则包括:接收端防丢包协议层接口层判断此数据帧的指令方向字段数值,继续判断命令序号字段的取值大于0,当指令方向字段数值为0,代表主发指令,且命令序号字段的取值大于0时,接收端防丢包协议层接口层立即给发送端回复一个指令方向字段取值为mcu防丢包应答或mpu防丢包应答的数据帧,回复的数据帧的操作类型、命令字,命令序号需要和发送端发来的一致,无需携带数据内容。
17.进一步地,s500中,发送端防丢包协议层接口层在收到接收端发来的数据帧时,按第三预设规则对接收的数据帧进行判断,第三预设规则包括:发送端防丢包协议层接口层在收到接收端发来的数据帧时,判断指令方向为mcu防丢包应答或mpu防丢包应答,进一步判断接收到的数据帧的命令序号、操作类型、命令字是否同防丢包队列中防丢包信息对象的命令序号、操作类型、命令字相同,当判断相同后,将此防丢包信息对象的防丢包机制是否有效字段设置为无效,并将应答状态设置为收到确认接收应答。
18.进一步地,发送端还会在独立线程中执行超时重发流程,具体包括:首先判断防丢包队列是否为空,如果防丢包队列不为空,则遍历每个防丢包信息对象,然后判断应答状态是否为等待应答,如果是等待应答,则将应答超时时间进行增加,最后判断超时时间是否大于预设阈值,如果大于预设阈值则进行重发,并将重发次数加1,超时时间重置为0,如果重发次数大于3次,则将应答状态设置为等待超时,防丢包机制是否有效字段设置为无效。
19.进一步地,发送端防丢包协议层需要定时将防丢包队列中防丢包机制为无效的防丢包信息对象重置为默认值,其中,应答状态、重发次数、超时时间、序号、数据帧长度默认值设置为0,将操作类型和命令字重置为0xff,释放为数据内容申请的存储空间,然后从队列中删除。
20.进一步地,一种车联网终端防丢包通讯的系统,,包括:防丢包通信协议定义模块、发送端和接收端,其中:
21.防丢包通信协议定义模块,用于对发送端和接收端进行通信的防丢包通信协议进行定义;
22.发送端,为mcu芯片或mpu芯片,用于根据定义的防丢包通信协议,根据需求对防丢包通信协议中的操作命令和指令方向进行设置,并将完整防丢包通信协议数据帧保存到串口数据发送队列中;还用于根据当前数据帧的指令方向,将当前数据帧唯一序号进行设置,并创建一个新的防丢包信息对象,按第一预设规则对此防丢包信息对象进行重新设置,然后将此防丢包信息对象添加到防丢包队列中,最后调用系统的串口发送接口将数据帧发送给车联网终端的接收端;还用于在收到接收端发来的数据帧时,按第三预设规则对接收的
数据帧进行判断,根据判断结果确认防丢包协议数据包是否发送成功。
23.接收端,为mcu芯片或mpu芯片,用于在收到接收端发来的数据帧时,按第二预设规则对此数据帧进行判断,根据判断结果接收端防丢包协议层接口层给发送端进行回复对应数据帧。
24.本发明实施例提供的上述技术方案的有益效果至少包括:
25.本发明公开的一种车联网终端防丢包通讯的方法,包括:对发送端和接收端进行通信的防丢包通信协议进行定义;根据定义的防丢包通信协议,发送端根据需求对防丢包通信协议中的操作命令和指令方向进行设置;发送端的防丢包协议层接口根据当前数据帧的指令方向,将当前数据帧唯一序号进行设置,并创建一个新的防丢包信息对象,按第一预设规则对此防丢包信息对象进行重新设置,然后将此防丢包信息对象添加到防丢包队列中,最后调用系统的串口发送接口将数据帧发送给车联网终端的接收端;接收端防丢包协议层接口层在收到接收端发来的数据帧时,按第二预设规则对此数据帧进行判断,根据判断结果接收端防丢包协议层接口层给发送端进行回复对应数据帧;发送端防丢包协议层接口层在收到接收端发来的数据帧时,按第三预设规则对接收的数据帧进行判断,根据判断结果确认防丢包协议数据包是否发送成功。
26.本发明通过在车联网通讯终端的发送端和接收端的通讯协议之间中增加防错重发机制,实现了数据接收的超时判断和重发处理。避免了因数据发送方发送丢帧或接收方接收漏帧或线程阻塞等问题而导致的数据包接收失败的问题,增加了板间通讯的稳定性和可靠性,提高了模块应用程序执行的效率和安全性,减少了排查此类问题的时间和成本。
27.下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
附图说明
28.附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:
29.图1为本发明实施例1中,一种车联网终端防丢包通讯的方法的流程图;
30.图2为本发明实施例1中,车联网终端防丢包算法流程图。
31.图3为本发明实施例2中,车联网终端串口通信框图。
具体实施方式
32.下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
33.为了解决现有技术中存在的问题,本发明实施例提供一种车联网终端防丢包通讯的方法。
34.实施例1
35.本实施例公开了一种车联网终端防丢包通讯的方法,如图1,包括:
36.s100.对发送端和接收端进行通信的防丢包通信协议进行定义;具体的,本实施例中,发送端和接收端可以为mcu芯片或mpu芯片。即本实施例中,不仅可以mcu芯片与mpu芯片
通信,还可以mcu芯片与mcu芯片、mpu芯片与mpu芯片、mpu芯片与mcu芯片之间进行通信。
37.在本实施例s100中,对发送端和接收端进行通信的防丢包通信协议进行定义,其中防丢包通信协议由帧头、校验类型、数据长度、指令方向、命令序号、操作命令、数据内容和校验位8个部分组成。在本实施例中,防丢包通信协议的具体的设置如表一。
38.表一防丢包通信协议
[0039][0040]
s200.根据定义的防丢包通信协议,发送端根据需求对防丢包通信协议中的操作命令和指令方向进行设置,并将完整防丢包通信协议数据帧保存到串口数据发送队列中;
[0041]
在本实施例s200中,发送端根据需求对防丢包通信协议中的操作命令和指令方向进行设置,其中,操作命令如表一,包括操作类型和命令字,指令方向如表二,包括主答、应答、mcu防丢包应答和mpu防丢包应答。其中,mcu防丢包应答表示mcu发给mpu的防丢包应答。不应该带数据内容,此条命令不应该传给mpu应用层,除了防丢包功能的确认应答应答机制的逻辑模块,其它模块不应该解析此条指令。mpu防丢包应答表示mpu发给mcu的防丢包应答。不应该带数据内容,此条命令不应该传给mcu应用层,除了防丢包功能的确认应答应答机制的逻辑模块,其它模块不应该解析此条指令。
[0042]
表二指令方向定义
[0043][0044]
s300.发送端的防丢包协议层接口根据当前数据帧的指令方向,将当前数据帧唯一序号进行设置,并创建一个新的防丢包信息对象,按第一预设规则对此防丢包信息对象进行重新设置,然后将此防丢包信息对象添加到防丢包队列中,最后调用系统的串口发送接口将数据帧发送给车联网终端的接收端;
[0045]
在本实施例s300中,按第一预设规则对此防丢包信息对象进行重新设置,第一预设规则为:将要发送数据帧的操作类型、命令字、命令序号、数据长度、数据内容信息赋值给此防丢包信息对象,并将此防丢包信息对象的防丢包机制是否有效字段设置为有效,应答状态设置为等待应答,重发次数设置为0,超时时间设置为0。
[0046]
s400.接收端防丢包协议层接口层在收到接收端发来的数据帧时,按第二预设规则对此数据帧进行判断,根据判断结果接收端防丢包协议层接口层给发送端进行回复对应数据帧;
[0047]
在本实施例s400中,接收端防丢包协议层接口层在收到接收端发来的数据帧时,按第二预设规则对此数据帧进行判断,第二预设规则包括:接收端防丢包协议层接口层判断此数据帧的指令方向字段数值,继续判断命令序号字段的取值大于0,当指令方向字段数值为0,代表主发指令,且命令序号字段的取值大于0时,接收端防丢包协议层接口层立即给发送端回复一个指令方向字段取值为mcu防丢包应答的数据帧,回复的数据帧的操作类型、命令字,命令序号需要和发送端发来的一致,无需携带数据内容。
[0048]
s500.发送端防丢包协议层接口层在收到接收端发来的数据帧时,按第三预设规则对接收的数据帧进行判断,根据判断结果确认防丢包协议数据包是否发送成功。
[0049]
在本实施例s500中,发送端防丢包协议层接口层在收到接收端发来的数据帧时,按第三预设规则对接收的数据帧进行判断,第三预设规则包括:发送端防丢包协议层接口层在收到接收端发来的数据帧时,判断指令方向为mcu防丢包应答,进一步判断接收到的数据帧的命令序号、操作类型、命令字是否同防丢包队列中防丢包信息对象的命令序号、操作类型、命令字相同,当判断相同后,将此防丢包信息对象的防丢包机制是否有效字段设置为无效,并将应答状态设置为收到确认接收应答。
[0050]
在一些优选实施例中,如图2,发送端还会在独立线程中执行超时重发流程,具体包括:首先判断防丢包队列是否为空,如果防丢包队列不为空,则遍历每个防丢包信息对象,然后判断应答状态是否为等待应答,如果是等待应答,则将应答超时时间进行增加,最后判断超时时间是否大于预设阈值,如果大于预设阈值则进行重发,并将重发次数加1,超
时时间重置为0,如果重发次数大于3次,则将应答状态设置为等待超时,防丢包机制是否有效字段设置为无效。在一些优选实施例中,如果是等待应答,则将应答超时时间进行增加20毫秒,最后判断超时时间是否大于预设阈值,预设阈值为300毫秒。
[0051]
在一些优选实施例中,发送端防丢包协议层需要定时将防丢包队列中防丢包机制为无效的防丢包信息对象重置为默认值,其中,应答状态、重发次数、超时时间、序号、数据帧长度默认值设置为0,将操作类型和命令字重置为0xff,释放为数据内容申请的存储空间,然后从队列中删除。
[0052]
本实施例公开的一种车联网终端防丢包通讯的方法,包括:对发送端和接收端进行通信的防丢包通信协议进行定义;根据定义的防丢包通信协议,发送端根据需求对防丢包通信协议中的操作命令和指令方向进行设置;发送端的防丢包协议层接口根据当前数据帧的指令方向,将当前数据帧唯一序号进行设置,并创建一个新的防丢包信息对象,按第一预设规则对此防丢包信息对象进行重新设置,然后将此防丢包信息对象添加到防丢包队列中,最后调用系统的串口发送接口将数据帧发送给车联网终端的接收端;接收端防丢包协议层接口层在收到接收端发来的数据帧时,按第二预设规则对此数据帧进行判断,根据判断结果接收端防丢包协议层接口层给发送端进行回复对应数据帧;发送端防丢包协议层接口层在收到接收端发来的数据帧时,按第三预设规则对接收的数据帧进行判断,根据判断结果确认防丢包协议数据包是否发送成功。
[0053]
本实施例通过在车联网通讯终端的发送端和接收端的通讯协议之间中增加防错重发机制,实现了数据接收的超时判断和重发处理。避免了因数据发送方发送丢帧或接收方接收漏帧或线程阻塞等问题而导致的数据包接收失败的问题,增加了板间通讯的稳定性和可靠性,提高了模块应用程序执行的效率和安全性,减少了排查此类问题的时间和成本。
[0054]
实施例2
[0055]
为了更好理解本发明技术方案,实施例2以mpu端发送设置vin的指令给mcu端。具体的,如图3,一种车联网终端防丢包通讯的方法,发送端和接收端分别为一个mpu芯片和一个mcu芯片,mpu芯片附带4g功能或5g功能,运行嵌入式linux系统,可以通过移动互联网连接车联网平台,市面上可以选择的此类mpu芯片有芯讯通公司的sim7600ce模块或移远公司的ec20r2模块;mcu可以选择的芯片有芯旺微电子kf32a152模块或恩智浦半导体公司的s32k144模块,可以通过can总线和车辆上的电子控单元ecu通信。硬件芯片类型不限于上面提到的芯片类型。
[0056]
当mpu端功能模块要将vin数据设置给mcu端时,将防丢包通信协议数据帧的操作类型定为设置(例如0x00),命令字定为标定vin(例如0x02),并将vin的具体内容(例如lgag4dy32kxxics0a)填充到数据内容字段,指令方向设置为主发(0x00),再将完整防丢包通信协议数据帧保存到串口数据发送队列中,并在独立线程中调用防丢包协议层接口,防丢包协议层接口判断此数据帧的指令方向是主发,将数据帧的sn(序列码)字段加1,并创建一个新的防丢包信息数据结构体对象,将要发送数据帧的操作类型、命令字、命令序号、数据长度、数据内容等信息赋值给此防丢包信息对象。
[0057]
在本实施例中,如表三,还会根据防丢包信息数据结构,将此防丢包信息对象的防丢包机制是否有效(valid)字段设置为有效(1),应答状态(reply_sts)设置为等待应答(1),重发次数设置为0,超时时间设置为0,然后将此防丢包信息对象添加到防丢包队列中,
最后调用linux系统的串口发送接口将数据帧发送给车联网终端的mcu端。
[0058]
表3防丢包信息数据结构
[0059][0060][0061]
mcu端防丢包协议层接口层在收到mpu端发来的数据帧时,判断此数据帧的指令方向字段取值为0,是主发tx指令,判断命令序号字段的取值大于0,mcu端防丢包协议层接口层立即给mpu端回复一个指令方向字段取值为mcu防丢包应答(0x02)的数据帧,回复的数据帧的操作类型、命令字,命令序号需要和mpu发来的一致,无需携带数据内容。
[0062]
mpu端防丢包协议层接口层在收到mcu端发来的数据帧时,判断指令方向为mcu防丢包应答(0x02),进一步判断接收到的数据帧的命令序号、操作类型、命令字是否同防丢包队列中防丢包信息对象的命令序号、操作类型、命令字相同,判断相同后将此防丢包信息对象的防丢包机制是否有效(valid)字段设置为无效(0),并将应答状态(reply_sts)设置为收到确认接收应答(2)。
[0063]
最后mpu端应用层程序需要在独立线程中执行超时重发流程,具体是判断防丢包队列是否为空,如果不为空,则遍历每个防丢包信息对象,判断应答状态是否为等待应答,如果是则将应答超时时间加20毫秒,进一步判断超时时间是否在于300毫秒,如果大于300毫秒则进行重发,并将重发次数加1,超时时间重置为0,如果重发次数大于3次,则将应答状态设置为等待超时(3),防丢包机制是否有效(valid)字段设置为无效(0),如图3所示。mpu端防丢包协议层需要定时(20-100毫秒)将防丢包队列中防丢包机制为无效的防丢包信息对象重置为默认值,即将应答状态、重发次数、超时时间、序号、数据帧长度设置为0,将操作类型和命令字重置为0xff,释放为数据内容申请的存储空间,然后从队列中删除。
[0064]
这样mpu端主发设置vin的整个流程就执行完成了,其它指令如查询信息等也是同样的收发流程。
[0065]
上面例子是mpu端为发送端,如果是mcu端为发送端,则是将上面mpu端需要执行的流程放在mcu端执行,在mcu端需要执行的流程放在mpu端执行,则同样能达到防丢包发送的目的。
[0066]
实施例3
[0067]
本实施例公开了一种车联网终端防丢包通讯的系统,包括:防丢包通信协议定义模块、发送端和接收端,其中:
[0068]
防丢包通信协议定义模块,用于对发送端和接收端进行通信的防丢包通信协议进行定义;
[0069]
发送端,为mcu芯片或mpu芯片,用于根据定义的防丢包通信协议,根据需求对防丢包通信协议中的操作命令和指令方向进行设置,并将完整防丢包通信协议数据帧保存到串口数据发送队列中;还用于根据当前数据帧的指令方向,将当前数据帧唯一序号进行设置,并创建一个新的防丢包信息对象,按第一预设规则对此防丢包信息对象进行重新设置,然后将此防丢包信息对象添加到防丢包队列中,最后调用系统的串口发送接口将数据帧发送给车联网终端的接收端;还用于在收到接收端发来的数据帧时,按第三预设规则对接收的数据帧进行判断,根据判断结果确认防丢包协议数据包是否发送成功。
[0070]
接收端,为mcu芯片或mpu芯片,用于在收到接收端发来的数据帧时,按第二预设规则对此数据帧进行判断,根据判断结果接收端防丢包协议层接口层给发送端进行回复对应数据帧。
[0071]
其中,防丢包通信协议定义模块、发送端和接收端具体的工作方法已在实施例1中进行了详细介绍,再此不再进行赘述。
[0072]
应该明白,公开的过程中的步骤的特定顺序或层次是示例性方法的实例。基于设计偏好,应该理解,过程中的步骤的特定顺序或层次可以在不脱离本公开的保护范围的情况下得到重新安排。所附的方法权利要求以示例性的顺序给出了各种步骤的要素,并且不是要限于所述的特定顺序或层次。
[0073]
在上述的详细描述中,各种特征一起组合在单个的实施方案中,以简化本公开。不应该将这种公开方法解释为反映了这样的意图,即,所要求保护的主题的实施方案需要清楚地在每个权利要求中所陈述的特征更多的特征。相反,如所附的权利要求书所反映的那样,本发明处于比所公开的单个实施方案的全部特征少的状态。因此,所附的权利要求书特此清楚地被并入详细描述中,其中每项权利要求独自作为本发明单独的优选实施方案。
[0074]
本领域技术人员还应当理解,结合本文的实施例描述的各种说明性的逻辑框、模块、电路和算法步骤均可以实现成电子硬件、计算机软件或其组合。为了清楚地说明硬件和软件之间的可交换性,上面对各种说明性的部件、框、模块、电路和步骤均围绕其功能进行了一般地描述。至于这种功能是实现成硬件还是实现成软件,取决于特定的应用和对整个系统所施加的设计约束条件。熟练的技术人员可以针对每个特定应用,以变通的方式实现所描述的功能,但是,这种实现决策不应解释为背离本公开的保护范围。
[0075]
结合本文的实施例所描述的方法或者算法的步骤可直接体现为硬件、由处理器执行的软件模块或其组合。软件模块可以位于ram存储器、闪存、rom存储器、eprom存储器、eeprom存储器、寄存器、硬盘、移动磁盘、cd-rom或者本领域熟知的任何其它形式的存储介质中。一种示例性的存储介质连接至处理器,从而使处理器能够从该存储介质读取信息,且
可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于asic中。该asic可以位于用户终端中。当然,处理器和存储介质也可以作为分立组件存在于用户终端中。
[0076]
对于软件实现,本技术中描述的技术可用执行本技术所述功能的模块(例如,过程、函数等)来实现。这些软件代码可以存储在存储器单元并由处理器执行。存储器单元可以实现在处理器内,也可以实现在处理器外,在后一种情况下,它经由各种手段以通信方式耦合到处理器,这些都是本领域中所公知的。
[0077]
上文的描述包括一个或多个实施例的举例。当然,为了描述上述实施例而描述部件或方法的所有可能的结合是不可能的,但是本领域普通技术人员应该认识到,各个实施例可以做进一步的组合和排列。因此,本文中描述的实施例旨在涵盖落入所附权利要求书的保护范围内的所有这样的改变、修改和变型。此外,就说明书或权利要求书中使用的术语“包含”,该词的涵盖方式类似于术语“包括”,就如同“包括,”在权利要求中用作衔接词所解释的那样。此外,使用在权利要求书的说明书中的任何一个术语“或者”是要表示“非排它性的或者”。