CANdela诊断描述(CANdela Diagnostic Descriptions,CDD)文件是诊断数据的数据库,与用于CAN消息和信号描述文件DBC(Data Base CAN)文件相当。CDD文件在Vector的“CANdelaStudio”工具创建,可以在CANoe/CANalyzer中用于诊断服务和参数的符号访问和解释。
下面来介绍一下,根据诊断需求规范利用“CANdelaStudio”工具来编辑诊断数据库CDD文件基本操作方法。
目录
一、CANdelaStudio诊断规范
二、CANdelaStudio的框架以及其中的诊断数据
三、服务结构
四、创建一个新的诊断数据库文件
五、在“CANdelaStudio”工具中通信参数配置
六、在“CANdelaStudio”工具中新建一个DID
七、DID如何关联Data Type
八、会话模式状态机的介绍
九、安全访问状态机的介绍
十、CANdelaStudio中数据的复用
十一、CANdelaStudio其它特性
十二、结尾
汽车电子范畴内,经典的V-L模型:虚线上方表示OEM主机厂,虚线下发表示供应商。主机厂首先提出诊断需求规范,供应商基于诊断需求规范做功能实现,功能实现完后,会进行集成测试,测试的目的是验证功能实现是否是按照需求规范进行实现的。L模型在主机厂方,后有一些研发。在研发阶段,量产阶段,以及售后阶段的不同阶段,使用的诊断数据是一致的。
诊断数据在整个流程是怎样的体现呢?
根据V模型有一个清晰的认知,首先,用“CANdelaStudio”工具基于诊断需求规范来编辑生成一个CDD数据库;CDD数据库生成后,供应商会进行功能实现。
这时候会有两个协议栈给大家介绍一下,这是Vector提供的两个解决方案,一个是Non-Autosar体系,需要将诊断数据库加载到配置工具中,会生成一个CANdesc协议栈;另一个是Autosar体系协议栈---MICROSAR,将诊断数据库CDD加载达芬奇工具中,配置生成MICROSAR的协议栈。以代码来实现功能之后,会做一个集成测试,来验证一下是否是按照需求规范进行功能实现的。这个时候会有两个范畴进行测试,一种是手动测试,比如说将诊断数据库加载到Indigo,CANoe,CANape等上位机工具中做一个手动测试;另一种是自动测试,将诊断数据库加载到CANoe.Diva工具中,会自动生成诊断测试用例,并在CANoe中自动运行。
基于CDDT用“CANdelaStudio”工具,来新生成编辑一个CDD数据库,那CDDT和CDD数据库有什么区别呢?
首先,CDDT中的T代表Template(模板),这个模板是基于整车级的需求规范来生成的,对应的是一个宏观的概念,
针对整车,具体到对通信参数这块,在CDDT中只是定义了一个接口,但不会量化这些接口有多少;对CDD而言,基于这个通信接口量化这个数值(比如说:量化诊断ID是多少)。CDDT是宏观的,针对整车级的,CDD是微观的,针对单个ECU。
这儿举了一个直观的例子,比如说对于DID,在CDDT中定义DID所占的两个Byte字节,而不定义这个DID具体是多少;而在CDD中,会定义这个DID,因为CDD是针对单个ECU的,会基于单个ECU的诊断需求规范,编辑所要使用的DID,量化这个DID。DID:0x0001以及这个DID所关联的DataType做一个具体的编辑。这就是CDDT和CDD的区别。
市面上,对“CANdelaStudio”工具,分不同的License模式,常见的有以下几种:
首先,大家在安装CANoe,CANape,CANalyzer的时候,会附带安装“CANdelaStudio”工具,但是它是一个View模式(只能查看,查看有哪些服务,哪些DID,哪些DTC,但不能对这个诊断数据库进行编辑和更改,也不能提供保存);
对于Standard模式,基于模板新建一个诊断数据库,更改诊断数据库的内容(更改DID,DTC这些);
对于Pro模式,支持多语言的;
对于Admin模式,相比Standard模式,可以对CDDT进行编辑和更改,这些在Standard模式下是无法实现的。
新建一个诊断数据库做一个简单的介绍。首先,用鼠标选一个“New”按钮,它自动导航一个CDDT的路径,基于对应CDD模板,来编辑数据库的,保存完后,就是新建了一个诊断数据库CDD文件了。如果需要对一个CDD文件进行编辑更改时,选择“Open”按钮,打开一个CDD文件,进行更改,保存后,完成对CDD文件的编辑。
首先,“CANdelaStudio”工具在数据库中一个总分结构,在总的上面是一个“Variant”,分“Base Variant”和“ECU Variant”,“Variant”这个概念可以举一个例子,每一款车有高中低不同配置,在编辑数据库时,要分别基于高/中/低档车编辑这个数据库,这个时候会有3个诊断数据库CDD文件,但这是不方便进行版本管控的。这个时候会提有一个解决方法,可以将高档车的需求规范编辑一个“Base Variant”这样一个诊断数据库,在编辑中/低档车时,只是对高档车里面的内容进行删除。基于“Base Variant”新建一个“ECU Variant”,就可以实现一个数据库文件里包含多个不同车型的诊断需求数据的管理,这是“Variant”概念。
每个“Variant”里面会有一个“Class”类,可以从需求规范选择支持哪些类,这些类有不同Session,对应10服务,Identification对应DID…类的名称是固定的。可以按照大家使用习惯,在模板里面对这些类的名称进行更改,方便在使用时,能够快速找到。
“Class类”下面有“Instance”,对于“Instance”这个条例,要按照格式和使用习惯分两种形式:一种是Subfunction;另一种是DID。以“Subfunction”举一个Sessions例子,对应10服务里面,它的子功能分常见的0x01,0x02,0x03,在诊断数据库中,如果用“CANdelaStudio”工具编辑0x01子功能,你可以看到如图所示的框架结构,对于请求就是10 01 ;对于肯定响应的话就是50 01+对应的参数;对于否定响应,就是7F 10+NRC。
对于“DID”而言,如果支持2E服务会勾选一下,以及请求格式,肯定响应格式,否定响应格式,都会在这个工具里面体现。
所以说这个工具是一个总分结构,从上往下,依次是“Variant”à“Class”à“Instance”(Instance又分Subfunction和DID),这是一个整体的总分结构,来对数据库进行编辑和管理。
而在“CANdelaStudio”工具中,服务的格式是怎样体现?
首先在CDDT模板中,定义一个主体框架:10服务+Subfunction,其中Subfunction不具体量化,具体有哪些子功能在诊断数据库CDD文件里进行编辑的。具体到某个具体的ECU诊断数据库时,来定义这个ECU会用到哪些子功能,以及子功能里面包含的时间参数(P2和P2*),都是在某个具体的ECU里面进行编辑的。
在“CANdelaStudio”工具里面服务的体现,如图所示,对于请求,它是SID+Type(可变的Subfunction);肯定响应(SID+0x40)+ Subfunction+对应参数;否定响应7F+10+NRC。这个就是在模板中,诊断数据框架以及结构的体现。
对应的服务都会有否定响应,否定响应里面会告知服务支持哪些NRC,支持的NRC是在诊断需求规范里体现和定义的,而在“CANdelaStudio”工具里面编辑这个服务支持哪些NRC,界面的下面会有一些选项,关联一些值。
这些值会在“Available Negative Response”里面列出UDS协议所有支持的NRC,都会做一个体现。当从上面那个基于需求规范定义的服务,支持的NRC,在上面选择一下,做一个勾选。
首先打开“CANdelaStudio”工具,选择“New”,接着自动导航,导航的路径就是CDDT,描述的意思是,新建一个诊断数据库CDD的时候,会基于一个诊断数据库模板CDDT来进行新建,这个模板就是前文说的“整车级的模板”,选择好基于的模板后,单击“Open”,这个时候可以对ECU进行命名(比如说BMS,EPS…),命名完后,选择“revision history”,这个时候以工程形式体现,告诉你诊断数据库编辑作者,联系方式,邮箱,公司部门等等,以及一些历史的变更记录
新建完一个诊断数据库后,接下来需要对诊断数据库中的通信参数进行编辑,因为是基于一个具体的ECU,这个时候基于诊断需求规范编辑它的通信参数。看这样一个例子:
编辑一个请求ID、响应ID、波特率,这样就完成了通信参数的编辑。这仅是一个举例,还有一些时间参数(比如说P2,P2*),都可以在这个表“Supported Interfaces”中编辑
对于DID,它的一些格式在这儿直观的看一下,首先是两个Byte的DID,DID后面可能会跟一下Parameters参数,而在UDS里面有哪些服务要对DID进行使用,如下图。
22服务读一些DID信息;
2E服务写DID;
2F服务I/O信号的管控;
31服务routing;
以及24和2A服务,这些都要使用DID。
在“CANdelaStudio”工具中怎样编辑DID呢?
选择一个“New DID”后,对这个DID基于诊断需求规范,编辑它的名称,编辑它的ID号,最后还要进行Data Type关联。因为DID的作用,解析报文实际物理意义,所以要关联一个Data Type进行解析。
“Data Type”在界面左侧选中DIDs,并在右侧进行选择编辑。
常见的Data Type,有分以下几种:Raw Value;Text Table;Linear。根据诊断需求规范里定义的实际的诊断数据内容,来选择不同的Data Type。像Linear是线性的;Text Table是枚举型的,列举其所有的可能性,就是说一般会定义一些开关量;Raw Value解释一些软硬件版本号。
编辑完Data type后,要和DID进行关联。
每一个诊断数据里面的值,不一定都是合法可用的,类似00,FF这些非法值在诊断数据库里怎样编辑呢?
如图在定义Data type时,选择Invalid Values,在里面定义对应非法值的类型,编辑完后,完成对整个数据库的编辑。
会话模式,参照这个图,对于诊断整个功能实现是这样一个框架和结构,外部Tester发送请求,以直接通信方式发送给ECU,ECU收到这个请求后,基于这个请求给与响应(否定响应,肯定响应),这样一个功能实现的逻辑,基于里面一个诊断服务。对于诊断服务的话,在UDS协议里面定义了多种诊断服务。那怎样区分这些诊断服务执行权限呢?就是定义了会话模式状态机,来赋予不同服务执行权限。
这里具了几个常见的例子:
22服务可以在默认会话模式进行
22/2E/2F服务可以在扩展会话模式进行
22/2E服务可以在编程会话模式进行
也就是通过不同的会话模式赋予不同服务的执行权限
这个是UDS里面很经典的一个会话模式状态机转换示意图,对于任何一个ECU,一上电处于默认回话模式,默认会话间可以自动跳转(默认回话跳到默认会话,如发送10 01),当默认会话模式向非默认会话模式跳转时,发送10 +SF(如10 02或者10 03)。
这时引入一个时间参数S3 Time,表示保持在当前会话模式的一个最长时间,也就是如果ECU处在非默认会话模式,处于该模式期间S3 Time时间内没有收到任何请求,ECU会自动从非默认会话跳转至默认会话,相当于一个自我保护机制。
UDS里定义了一个比较有趣的3E服务,S3 Time时间内没有收到任何诊断请求,但是又想ECU保持在当前会话模式,这个时候会周期性的发送3E服务,告诉ECU诊断仪在线,不要实现会话模式跳转,3E服务是周期性发送的,来时刻刷新S3 Time值。
在“CANdelaStudio”工具里如何新建一个会话模式?
选择Session后,鼠标右键,选择New Session,接着对这个Session进行命名、编辑ID号。编辑完后,选择Next,生成新的会话模式。在StatesàState Groups中也会相应的更新。
编辑完会话模式后,怎样对诊断数据库服务里面的会话模式进行管控呢?就是说怎样区分这个服务在哪些会话模式执行,哪些会话模式不执行,如何来编辑。
这个图给大家做一个解答,在“CANdelaStudio”工具里找到StatesàDependencies,接着选择aditude,显示出来一个编辑框,里面定义诊断数据库所有的诊断服务。这个基于诊断需求规范定义的服务,是在哪个会话模式下执行的,支持的话表示“yes”,在该会话模式下不能支持的表示“No”,编辑完后,就是完成会话模式管控和编辑。
大家可能有疑问,除了“yes”和“No”,为什么会有些Default,Programing,Extended,这些表示发了对应请求服务后,会对会话模式进行影响。
右边是一个状态转换示意图。如果你是刚安装“CANdelaStudio”工具,可能会提示你,没有显示这样一个示意图,这个时候基于上面的提示,找到那个网站,下载插件,进行安装,会显示该会话切换示意图。
为什么会有安全访问这个概念呢?
它其实是ECU对自身的一个保护。需要进行解锁,只有一部分人(这些部分人具备解锁功能和解锁算法)有这个权限,所以会在需求规范里定义一些安全访问状态机,进行功能实现。
在诊断数据库中怎样进行安全访问编辑呢?
同样的这是诊断数据库所有的服务,如果实在不锁定状态下执行,那就选择“Yes”;如果实在解锁状态下执行,那就选择“Yes”。其中的Locked表示这些服务对ECU有状态影响。举一个直观例子解释一下,如果ECU进行会话模式切换,切换前ECU处于解锁状态下,切换后100%处于锁定状态;而对11服务在进行复位前处于解锁状态,复位后100%处于锁定状态;
同样对比右侧是一个安全访问的示意图。
首先,给大家介绍一下,哪些内容是可以复用的(复制粘贴):data Type,data objects,Instances,Variants等等都可以进行粘贴复制,来完成复用,从CDD1到CDD2不用重新编辑。
另外一种,给大家介绍一下“CANdelaStudio”支持不同格式的一个转换。首先能支持ODX,A2L,CSV,Arxml输入;也能支持ODX(2.0.1;2.1.0;2.2.0);用户自定义的诊断数据库格式(福特的mdx,通用的Sgm);网页版;CSV;Arxml的导出。
“CANdelaStudio”自带了一个对比功能。部门里面其它工程师可能也对这个诊断数据库进行了更改,想查询一下更改的内容,选择“Select as Left Side for Compare”,再选择“Compare to”First Delivery”对比一下,会告诉你对比后的结果(谁进行的更改,以及更改的内容)。