一种基于CAN通讯的DBC文件解析及其程序设计方法
技术领域
本发明涉及电气测控领域,尤其是涉及一种应用于汽车网络的基于CAN通讯的DBC文件解析及其程序设计方法。
背景技术
CAN总线协议是ISO国际标准化的一种串行通信协议,由于它具有极好的抗干扰能力、极强的差错检测和处理能力,能够满足信息传输实时性的要求,同时具有控制接口结构简单、易于配置的优点,因此在汽车电子等领域得到了日益广泛的应用。随着技术的进步及人们对驾驶要求的不断提高,汽车网络中的CAN节点不断增加,网络中的数据也越来越庞大。因此,为了便于整车的设计和维护,现有技术中提出了采用DBC数据库文件对汽车CAN数据进行解析和管理的技术方案。
DBC文件是一个标准的数据库文件,绝大多数汽车生产厂家都有相应的DBC文件数据库。DBC解析的过程就是将汽车CAN网络传输的十六进制数据转换成通常熟知的物理量,比如车速、转速、温度等。在现有技术中,多采用USB转CAN卡2进行上位机1与汽车控制器3之间的通讯,以实现对汽车运行状态的实时监测,如附图1所示。而在现有技术中,对CAN文件进行读取主要由以下几种方式:
现有方案1为用户直接根据既有的CAN通讯协议逐一进行Bit位解析。用户在上位机软件中逐一对报文的格式进行详细解析,完成包括移位、比例、偏移等程序编写。这种方案的缺陷是:通过CAN通讯协议在上位机软件中逐一进行报文详细解析的方法,当CAN节点数量较多时,人工输入代码工作量大,且繁琐容易出错。一旦协议稍有改动,代码修改也是费时费力。同时,应对不同的通讯协议,用户需建立其特定的一套上位机软件,通用性较弱。
现有方案2为购买能实现对汽车的DBC数据库文件进行解析的设备读取CAN文件。用户需采购能够实现对汽车的DBC数据库文件进行解析的CAN卡设备,并使用该设备配套的软件。这种方案的缺陷是:通过购买CAN卡设备的方式,由于满足能加载DBC文件的CAN卡对配置要求较高,因此选择度较少、影响产品开发进度、增加产品开发成本。现今可以实现DBC文件解析的CAN卡设备,其国外的价格偏高,而国内的满足要求的型号又较少,且只能使用其配套软件,用户不仅增加了采购成本,而且不能对软件进行维护修改,如增加其他所需功能等,提高了产品维护难度。
现有方案3为广州汽车集团股份有限公司于2012年10月23日申请,并于2014年05月07日公开,公开号为CN103777934A的中国发明专利申请《一种基于MATLAB生成控制器CAN交互层的方法及系统》。该发明申请公开了一种基于CAN数据库文件即DBC文件将数据包解析成实际物理信息的方案。这种方案在车用局域网上的CAN信号量十分巨大,从而导致CAN信号的软件解析以及其他的相关软件处理工作量大。对于不同的DBC文件,用户往往需建立多个不同的上位机监控软件,编写代码时将需实现每一信号位的逐一提取,一旦帧数量庞大,其过多的数学运算,将无疑会增加出错率。此外,在技术层面,该申请只提到了利用MATLAB软件以文本格式打开CAN 数据库文件,得到CAN数据库文件文本代码信息的内容。
发明内容
有鉴于此,本发明的目的在于提供一种基于CAN通讯的DBC文件解析及其程序设计方法,解决现有CAN文件解析方法代码输入量大、维护难度大、数据处理量大的技术缺陷,以满足用户实时监控整车控制器信息的要求。
为了实现上述发明目的,本发明具体提供了一种基于CAN通讯的DBC文件解析程序设计方法的技术实现方案,一种基于CAN通讯的DBC文件解析程序设计方法,包括以下步骤:
S101:设置CAN通讯参数配置,以实现CAN通讯正常连接;
S102:创建DBC文件,所述DBC文件包括帧信息报文;
S103:编写DBC文件解析程序,解析给定变量赋值帧的数量、帧名称及帧ID号;
S104:动态创建与所述帧信息报文中帧数量相同的控件及帧字符显示;
S105:动态创建所述DBC文件中信号名称的控件及名称显示;
S106:动态创建所述DBC文件中信号值的控件及信号值显示;
S107:实现所述帧信息报文中每一帧数据的接收或发送。
优选的,所述步骤S101进一步包括以下过程:
设置CAN通讯包括波特率、验收码、屏蔽码、帧类型在内的配置。
优选的,所述步骤S102进一步包括以下过程:
根据CAN网络通讯协议定义数据,新建包括帧ID号、帧类型在内的帧信息报文,再对每一帧信息新建包括类型、起始位、位长度、偏移值、最大值、最小值和变换比例在内的信号信息,待所需数据全部定义完成之后,将定义数据另存为所需的DBC文件。
优选的,所述步骤S103进一步包括以下过程:
解析所述DBC文件中以BO_和SG_开头的所有行,解析给定变量赋值帧的数量、帧名称及帧ID号,并解析给定变量赋值每一帧内所有信号的名称、类型、起始位、位长度、偏移值、最大值、最小值和变换比例。
优选的,所述步骤S107中实现每一帧数据发送的过程进一步包括:
S108:实现每一帧数据的单次发送;
S109:实现每一帧数据按一定时间间隔连续发送。
优选的,所述步骤S104进一步包括以下过程:
通过所述步骤S103的解析,根据所述帧信息报文中的帧数量,在上位机界面动态创建与帧数量相同的帧控件;
通过所述步骤S103的解析,根据所述帧信息报文中的帧数量,在创建的帧控件内各添加一个下拉列表,所述下拉列表的名称包括发送、单次发送和连续发送;
通过所述步骤S103的解析,根据所述帧信息报文中的帧数量,在创建的帧控件内各添加一个发送按钮,进行发送数据时的操作;
通过所述步骤S103的解析,根据所述帧信息报文中的帧数量,在创建的帧控件内各添加一个时间间隔输入框,通过设定时间间隔,实现帧信息报文的连续发送;
通过所述步骤S103的解析,根据所述帧信息报文中的帧名称、帧ID号,将帧名称_ID号的连接字符作为标签添加至创建的各自帧控件。
优选的,所述步骤S105进一步包括以下过程:
通过所述步骤S103的解析,在上位机界面动态创建的每一个帧控件内,再动态创建与每一帧信号相同数量的信号控件,所述信号控件在所述帧控件内排列;
通过所述步骤S103的解析,每一个信号控件显示相应的信号名称。
优选的,所述步骤S106进一步包括以下过程:
通过所述步骤S103的解析,在上位机界面动态创建的每一个帧控件内,动态创建与每一帧信号相同数量的信号文本框。
优选的,所述步骤S108进一步包括以下过程:
根据所述步骤104,对需要进行发送的帧数据,在所述帧控件内的下拉列表选择单次发送;
设置最大值、最小值用于限制所述帧数据发送值的范围,确保所述帧数据的有效性;
通过所述步骤S101的CAN通讯,在每个帧控件内设定信号文本框的值,点击发送按钮发送帧数据。
优选的,所述步骤S109进一步包括以下过程:
根据所述步骤S104,对需要进行发送的帧数据,在所述帧控件内的下拉列表选择连续发送;
通过所述步骤S101的CAN通讯,在每个帧控件内,设定信号文本框的值,点击发送按钮发送帧数据;
根据步骤所述步骤S104,对需要进行发送的帧数据,在所述帧控件内设定时间间隔值,点击发送按钮发送帧数据。
优选的,在所述步骤S107之后还包括以下步骤:
S110:根据对所述DBC文件的解析生成CAN相关嵌入式代码的.c及.h文件。
优选的,所述步骤S110进一步包括以下过程:
应用Print语句,定义.c及.h文件的文件头;
应用Print语句,定义.c文件的“#include”语句;
根据所述步骤S104,应用Print语句,以邮箱为单位循环创建.c文件的void函数;
应用Print语句,定义.h文件的“#include”语句;
应用Print语句,定义.h文件的“#ifndef”语句;
应用Print语句,定义.h文件的“#define”语句;
根据所述步骤S104,应用Print语句,循环创建.h文件的typedef struct结构体;
根据所述步骤S104,应用Print语句,循环创建.h文件的typedef union共同体。
本发明还另外具体提供了一种基于CAN通讯的DBC文件解析方法的技术实现方案,一种基于CAN通讯的DBC文件解析方法,包括以下步骤:
S201:执行根据上述方法设计的基于CAN通讯的DBC文件解析程序,建立CAN通讯的正常连接;
S202:打开DBC文件;
S203:判断所述DBC文件读取是否成功;
S204:如果读取错误则重新选择DBC文件读取;
S205:如果DBC文件读取成功,则逐行解析所述DBC文件,并去除无需解析的行;
S206:解析所述DBC文件中以“BO_”为标记的行,确定帧数量,动态增加帧控件及相应帧控件名称;
S207:解析所述DBC文件中以“SG_”为标记的行,解析信号的名称、类型、起始位、位长度、偏移值、最大值、最小值和变换比例,在每一个帧控件内动态增加信号控件及相应信号控件名称。
优选的,所述方法还包括以下步骤:
S208:根据对所述DBC文件的解析生成CAN相关嵌入式代码的.c或.h文件。
优选的,所述帧控件包括:显示每一帧信息的控件,以及接收、单次发送,连续发送的下拉控件。
优选的,所述信号控件包括:显示每一信号名称的控件,以及每一个信号值的文本框控件。
通过实施上述本发明提供的基于CAN通讯的DBC文件解析及其程序设计方法的技术方案,具有如下有益效果:
(1)本发明基于现有的通用USB转CAN卡设备,采用统一、通用的上位机软件环境进行编程,解决了用户需创建多个上位机软件的问题,能够满足大多数机型的要求,大幅降低了软件的维护要求和采购成本;
(2)本发明对于不同的DBC文件,只需使用相同的上位机监控软件,并采用统一的工具软件创建DBC文件,对特定行的数据进行解析,无需对每一信号位的逐一提取,降低了帧数据量和数学运算量,降低了数据解析过程的出错率;
(3)本发明通过创建通用的上位机监视软件,既可加载不同的DBC文件,实现对控制器的实时监控,又可实现自动生成CAN相关嵌入式代码*.c及*.h文件,实现嵌入式调用,方便了对CAN报文信息解析的文件调用,节约了时间、减少开发成本。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的实施例。
图1是现有技术中汽车运行状态实时监测系统的结构原理框图;
图2是本发明基于CAN通讯的DBC文件解析程序设计方法一种具体实施方式的程序流程图;
图3是本发明基于CAN通讯的DBC文件解析方法一种具体实施方式的程序流程图;
图4是本发明基于CAN通讯的DBC文件解析方法一种具体实施方式中DBC文件创建过程的程序流程图;
图5是本发明基于CAN通讯的DBC文件解析程序设计方法中CAN通信参数设置界面的示意图;
图6是本发明基于CAN通讯的DBC文件解析程序设计方法中DBC文件创建界面的示意图;
图7是本发明基于CAN通讯的DBC文件解析程序设计方法中帧控件、信号控件和信号值控件创建界面的示意图;
图8是本发明基于CAN通讯的DBC文件解析程序设计方法中帧数据单次发送界面的示意图;
图9是本发明基于CAN通讯的DBC文件解析程序设计方法中帧数据连续发送界面的示意图;
图中:1-上位机,2-USB转CAN卡,3-汽车控制器。
具体实施方式
为了引用和清楚起见,将下文中使用的技术名词、简写或缩写记载如下:
CAN:Controller Area Network,控制器局域网总线的简称;
USB:Universal Serial Bus,通用串行总线的简称;
Kvaser:一种CAN总线测试开发仿真和控制软件;
DBC: Database Container,数据库容器的简称;
Message:报文。
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述。显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
如附图2至附图9所示,给出了本发明基于CAN通讯的DBC文件解析及其程序设计方法的具体实施例,下面结合附图和具体实施例对本发明作进一步说明。
如附图2所示,一种基于CAN通讯的DBC文件解析程序设计方法的具体实施例,包括以下步骤:
S101:设置CAN通讯参数配置,以实现CAN通讯正常连接。
步骤S101进一步包括以下过程:
设置CAN通讯包括波特率、验收码、屏蔽码、帧类型在内的配置,如附图5所示。
这一步骤的目的是通过用户编写代码实现CAN通讯连接。通常,USB转CAN卡的设备厂家都会提供有相应的适用于某种上位机软件的CAN通讯范例,用户编程可以参考编写CAN通讯代码。
作为本发明一种典型的具体实施例,步骤S101在Visual Basic软件编程环境下完成,当然该步骤也可以在其它类似的软件编程环境下完成。
S102:创建DBC文件,DBC文件包括帧信息报文。
步骤S102进一步包括以下过程:
根据CAN网络通讯协议定义数据,新建包括帧ID号、帧类型在内的帧信息报文,再对每一帧信息新建包括名称、类型、起始位、位长度、偏移值、最大值、最小值和变换比例在内的信号信息,待所需数据全部定义完成之后,将定义数据另存为所需的DBC文件,如附图4和附图6所示。
步骤S102的详细过程为:基于Kvaser工具软件(一种CAN总线开发测试软件),进入Kvaser Database Editor编辑器,根据汽车CAN网络通讯协议,新建帧信息报文(Message),包含:帧ID号、帧类型等。然后再对每一帧信息新建信号信息(Signal),包含:名称(Name)、类型(Type)、起始Bit位(Start Bit)、位长度(Length)、偏移值(offset)、最大值(Maximum)、最小值(Minimum)和变换比例(Factor)等。待所需数据全部定义之后,另存为所需的*.dbc文件,生成的.dbc文件即是标准格式的DBC文件,用户无需进行修改。
作为本发明一种典型的具体实施例,步骤S102在Kvaser软件环境下完成,当然该步骤也可以在其它类似的软件编程环境下完成。当用户需要解析基于CAN通讯的DBC文件时,打开采用Visual Basic编写的基于CAN通讯的DBC文件解析程序,然后导入*.dbc文件,即可实现基于CAN通讯的DBC数据实时读取,自动接收来自于控制器(如汽车控制器3)的信息,并实时显示。
S103:编写DBC文件解析程序,解析给定变量赋值帧的数量、帧名称及帧ID号。
步骤S103进一步包括以下过程:
用户主要解析该DBC文件的特定标记部分,即解析DBC文件中以BO_和SG_开头的所有行,解析给定变量赋值帧的数量、帧名称及帧ID号,并解析给定变量赋值每一帧内所有信号的名称、类型、起始位、位长度、偏移值、最大值、最小值和变换比例。编写代码时需要考虑通用性,满足对任一标准DBC文件均能使用一套源代码即可解析的标准,如下所示即为一段DBC文件代码的范例。
VERSION "HIPBNYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY/4/%%%/4'%**4YYY///"
NS_:
NS_DESC_
CM_
BA_DEF_
BA_
VAL_
CAT_DEF_
CAT_
FILTER
BA_DEF_DEF_
EV_DATA_
ENVVAR_DATA_
SGTYPE_
SGTYPE_VAL_
BA_DEF_SGTYPE_
BA_SGTYPE_
SIG_TYPE_REF_
VAL_TABLE_
SIG_GROUP_
SIG_VALTYPE_
SIGTYPE_VALTYPE_
BS_:
BU_:
BO_336 MCU1: 8 Vector__XXX
SG_MCU_checksum1:0|8@1+ (1,0) [0|255] "" Vector__XXX
..
..
..
..
..
..
CM_SG_
..
作为本发明一种典型的具体实施例,步骤S103在Visual Basic软件编程环境下完成,当然该步骤也可以在其它类似的软件编程环境下完成。
S104:动态创建与帧信息报文中帧数量相同的控件及帧字符显示,如附图7中区域A所示。
步骤S104进一步包括以下过程:
通过步骤S103的解析,根据帧信息报文中的帧数量,在上位机界面动态创建与帧数量相同的控件(定义为帧控件)。在未执行步骤S103时,保留上位机界面在需创建控件所在的面板保留空白。编写的代码需满足控件的宽度、高度及间距可随帧数量的变化进行适当调整,以保证显示界面的完整和美观。
通过步骤S103的解析,根据帧信息报文中的帧数量,在创建的帧控件内各添加一个下拉列表,下拉列表的名称包括发送、单次发送和连续发送。
通过步骤S103的解析,根据帧信息报文中的帧数量,在创建的帧控件内各添加一个发送按钮,进行发送数据时的操作。
通过步骤S103的解析,根据帧信息报文中的帧数量,在创建的帧控件内各添加一个时间间隔输入框,通过设定时间间隔,实现帧信息报文的连续发送。
通过步骤S103的解析,根据帧信息报文中的帧名称、帧ID号,将帧名称_ID号的连接字符作为标签添加至创建的各自帧控件。
作为本发明一种典型的具体实施例,步骤S104在Visual Basic软件编程环境下完成,当然该步骤也可以在其它类似的软件编程环境下完成。
S105:动态创建DBC文件中信号名称的控件及名称显示,如附图7中区域B所示。
用户编写源代码时,解析DBC文件中关于信号名称的部分,应当保证信号名称在相应帧所在的窗体内整齐排列显示。
步骤S105进一步包括以下过程:
通过步骤S103的解析,在上位机界面动态创建的每一个帧控件内,再动态创建与每一帧信号相同数量的控件(定义为信号控件)。信号控件在帧控件内整齐排列,编写的代码需满足控件的宽度,高度及间距可随信号帧数量的变化进行适当调整,以保证显示的完整性。
通过步骤S103的解析,每一个信号控件显示相应的信号名称。
作为本发明一种典型的具体实施例,步骤S105在Visual Basic软件编程环境下完成,当然该步骤也可以在其它类似的软件编程环境下完成。
S106:动态创建DBC文件中信号值的控件及信号值显示,如附图7中区域C所示。
步骤S106进一步包括以下过程:
通过步骤S103的解析,在上位机界面动态创建的每一个帧控件内,动态创建与每一帧信号相同数量的文本框(定义为信号文本框)。
基于步骤S101的正常通讯,在信号文本框内将自动接收控制器(如汽车控制器3)的信息,并实时显示。
作为本发明一种典型的具体实施例,步骤S106在Visual Basic软件编程环境下完成,当然该步骤也可以在其它类似的软件编程环境下完成。
S107:实现帧信息报文中每一帧数据的接收或发送。
步骤S107中实现每一帧数据发送的过程进一步包括:
S108:实现每一帧数据的单次发送,如附图8所示。
步骤S108进一步包括以下过程:
根据步骤104,对需要进行发送的帧数据,在帧控件内的下拉列表选择单次发送。
设置最大值、最小值用于限制帧数据发送值的范围,确保帧数据的有效性。
通过步骤S101的CAN通讯,在每个帧控件内设定信号文本框的值,点击发送按钮发送帧数据。
作为本发明一种典型的具体实施例,步骤S108在Visual Basic软件编程环境下完成,当然该步骤也可以在其它类似的软件编程环境下完成。
S109:实现每一帧数据按一定时间间隔连续发送,如附图9所示。
步骤S109进一步包括以下过程:
根据步骤S104,对需要进行发送的帧数据,在帧控件内的下拉列表选择连续发送。
通过步骤S101的CAN通讯,在每个帧控件内,设定信号文本框的值,点击发送按钮发送帧数据。
根据步骤S104,对需要进行发送的帧数据,在帧控件内设定时间间隔值,点击发送按钮发送帧数据。
作为本发明一种典型的具体实施例,步骤S109在Visual Basic软件编程环境下完成,当然该步骤也可以在其它类似的软件编程环境下完成。
作为本发明一种较佳的具体实施例,在所述步骤S107之后还包括以下步骤:
S110:根据对DBC文件的解析生成CAN相关嵌入式代码的*.c及*.h文件。
步骤S110进一步包括以下过程:
应用Print语句,定义*.c及*.h文件的文件头。
应用Print语句,定义*.c文件的“#include”语句。
根据步骤S104,应用Print语句,以邮箱为单位循环创建*.c文件的void函数。
应用Print语句,定义*.h文件的“#include”语句。
应用Print语句,定义*.h文件的“#ifndef”语句。
应用Print语句,定义*.h文件的“#define”语句。
根据步骤S104,应用Print语句,循环创建*.h文件的typedef struct结构体。
根据步骤S104,应用Print语句,循环创建*.h文件的typedef union共同体。
作为本发明一种典型的具体实施例,步骤S110在Visual Basic软件编程环境下完成,当然该步骤也可以在其它类似的软件编程环境下完成。
通过实施以上步骤S101~步骤S110,就完成了整个基于CAN通讯的DBC文件解析程序的编写和设计。
如附图3所示,一种基于CAN通讯的DBC文件解析方法的具体实施例,包括以下步骤:
S201:执行根据如上所述方法设计的基于CAN通讯的DBC文件解析程序,建立CAN通讯的正常连接;
S202:打开DBC文件;
S203:判断DBC文件读取是否成功;
S204:如果读取错误则重新选择DBC文件读取;
S205:如果DBC文件读取成功,则逐行解析DBC文件,并去除无需解析的行;
S206:解析DBC文件中以“BO_”为标记的行,确定帧数量,动态增加帧控件及相应帧控件名称;
S207:解析DBC文件中以“SG_”为标记的行,解析信号的名称、类型、起始位、位长度、偏移值、最大值、最小值和变换比例,在每一个帧控件内动态增加信号控件及相应信号控件名称。
基于CAN通讯的DBC文件解析方法还包括以下步骤:
S208:根据对DBC文件的解析生成CAN相关嵌入式代码的*.c或*.h文件。
帧控件包括:显示每一帧信息的控件,以及接收、单次发送,连续发送的下拉控件。
信号控件包括:显示每一信号名称的控件,以及每一个信号值的文本框控件。
本发明上述具体实施例提出了一种针对基于CAN通信的标准DBC文件进行解析并读取报文信息的方法及其程序设计方法,实现报文接收、单次发送或按设定时间间隔多次发送的通用化CAN网络测控。除此之外,本发明具体实施例还提出了一种通过解析DBC文件生成CAN相关嵌入式代码*.c及*.h文件的方法,生成的文件可在特定程序架构内调用,解决了在其它软件开发过程中代码嵌入调用的技术问题。本发明具体实施例描述的技术方案在基于任何一个USB转CAN卡设备实现整车控制器与上位机(PC机)正常通讯的基础上,采用Visual Basic上位机软件编程,通过在其内加载DBC文件实现数据的解析和处理,满足了用户在PC机上即可实时监控整车控制器信息的要求。
需要特别说明的是,在本发明具体实施例中,生成DBC文件的软件可能有所不同,只要能生成满足DBC文件标准格式的方法都属于本发明请求保护的范围。参照DBC文件格式自定义的网络协议文件(包含协议相关的内容),也是本发明请求保护的范围。此外,用户编写基于CAN通讯的DBC文件解析程序代码的软件可能有所不同,用户使用其他上位机软件实现同样的功能也属于本发明请求保护的范围。
通过实施本发明具体实施例描述的基于CAN通讯的DBC文件解析及其程序设计方法的技术方案,能够产生如下技术效果:
(1)本发明具体实施例描述的基于CAN通讯的DBC文件解析及其程序设计方法基于现有的通用USB转CAN卡设备,采用统一、通用的上位机软件环境进行编程,解决了用户需创建多个上位机软件的问题,能够满足大多数机型的要求,大幅降低了软件的维护要求和采购成本;
(2)本发明具体实施例描述的基于CAN通讯的DBC文件解析及其程序设计方法对于不同的DBC文件,只需使用相同的上位机监控软件,并采用统一的工具软件创建DBC文件,对特定行的数据进行解析,无需对每一信号位的逐一提取,降低了帧数据量和数学运算量,降低了数据解析过程的出错率;
(3)本发明具体实施例描述的基于CAN通讯的DBC文件解析及其程序设计方法通过创建通用的上位机监视软件,既可加载不同的DBC文件,实现对控制器的实时监控,又可实现自动生成CAN相关嵌入式代码*.c及*.h文件,实现嵌入式调用,方便了对CAN报文信息解析的文件调用,节约了时间、减少开发成本。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。
以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制。虽然本发明已以较佳实施例揭示如上,然而并非用以限定本发明。任何熟悉本领域的技术人员,在不脱离本发明的精神实质和技术方案的情况下,都可利用上述揭示的方法和技术内容对本发明技术方案做出许多可能的变动和修饰,或修改为等同变化的等效实施例。因此,凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所做的任何简单修改、等同替换、等效变化及修饰,均仍属于本发明技术方案保护的范围。