问题描述
开发完一些诊断的DID,需要进行自测,发现一个奇怪的问题,明明是同一个CDD文件,它的DID名称在CANdelaStudio和CANoe显示完全不是同一个。
问题分析
一开始怀疑是配置有问题,因为在CANdelaStudio软件里面,有好几个地方能够查看或者修改DID的名称,但是将名称都统一之后,CANoe显示依旧没有变化。
经过观察发现,CANoe显示的名称其实是有规律的,譬如F001显示的是F001,F002显示的是F001_1,F003显示的是F001_1_1,明显是从F001开始一个一个复制过来的。
问题解决
万变不离其宗,只要能找到源头就一定能够解决问题。于是用记事本打开CDD文件,先找里面的规律,发现DID相关的格式是这样的。里面的XXX是脱敏内容,首先是第一段,数据定义。
<DID id='_0000013EA857D1B0' oid='C2BE0DE327E04ea491A06999E8A5A23E' n='61835'> <NAME> <TUV xml:lang='en-US'>DID_XXX</TUV> </NAME> <QUAL>DID_XXX</QUAL> <STRUCTURE> <DATAOBJ oid='3998FC36040047df82F8AC3D7E444216' spec='no' dtref='_0000013EA9D275F0'> <NAME> <TUV xml:lang='en-US'>Data</TUV> </NAME> <QUAL>Data</QUAL> </DATAOBJ> </STRUCTURE> </DID>第二段是读写权限和对数据的引用
<DIAGINST id='_0000013EAE356EF0' oid='839834761BDF423a96C843E244C9E6A6' tmplref='_0000013EA8571C00' req='notReq'> <NAME> <TUV xml:lang='en-US'>DID_XXX</TUV> </NAME> <QUAL>DID_XXX</QUAL> <SERVICE id='_0000013EA9CFF4B0' oid='90E57315C98145a18017349B2674AB3E' tmplref='_0000013EA8310580' func='1' phys='1' respOnPhys='1' respOnFunc='1' req='0'> <NAME> <TUV xml:lang='en-US'>Read</TUV> </NAME> <QUAL>Read</QUAL> <SHORTCUTNAME> <TUV xml:lang='en-US'>DID_XXX Read</TUV> </SHORTCUTNAME> <SHORTCUTQUAL>DID_XXX_Read</SHORTCUTQUAL> </SERVICE> <SERVICE id='_0000013EA9CFE530' oid='085FC8C9276C4613AA5893E2AE4629F0' tmplref='_0000013EA83120D0' func='0' phys='1' respOnPhys='1' respOnFunc='0' req='0' mayBeExec='(4,11)'> <NAME> <TUV xml:lang='en-US'>Write</TUV> </NAME> <QUAL>Write</QUAL> <SHORTCUTNAME> <TUV xml:lang='en-US'>DID_XXX Write</TUV> </SHORTCUTNAME> <SHORTCUTQUAL>DID_XXX_Write</SHORTCUTQUAL> </SERVICE> <STATICVALUE oid='1CFED1270BCD4105A7FFE1E7ABB604F5' shstaticref='_0000013EA99E7700' v='61835'/> <SIMPLECOMPCONT oid='AA67077CACF34d4484BF97C280814091' shproxyref='_0000013EA8571D10'> <DIDDATAREF oid='BE89A1EEC51F45d9ABC288CEEC9DB473' didRef='_0000013EA857D1B0'> <NAME> <TUV xml:lang='en-US'>DID_XXX</TUV> </NAME> <QUAL>DID_XXX</QUAL> </DIDDATAREF> </SIMPLECOMPCONT> <SIMPLECOMPCONT oid='84CA6389876942f9A5EF1E0CDA5751CE' shproxyref='_0000013EA8571F30'> <SPECDATAOBJ oid='1F5BF584E63A437c8B3ACFE73884B71C'> <NAME> <TUV xml:lang='en-US'>Read</TUV> </NAME> <QUAL>Read</QUAL> <NEGRESCODEPROXIES> <NEGRESCODEPROXY idref='_0000013EA7924560'/> <NEGRESCODEPROXY idref='_0000013EA7923FC0'/> <NEGRESCODEPROXY idref='_0000013EA7924B00'/> <NEGRESCODEPROXY idref='_0000013EA7923EA0'/> </NEGRESCODEPROXIES> </SPECDATAOBJ> </SIMPLECOMPCONT> <SIMPLECOMPCONT oid='74125CE31F06456f8EE31CED8A648F77' shproxyref='_0000013EA8574350'> <SPECDATAOBJ oid='DA4B7C83B42F42a892D9EB446BBAABEF'> <NAME> <TUV xml:lang='en-US'>Write</TUV> </NAME> <QUAL>Write</QUAL> <NEGRESCODEPROXIES> <NEGRESCODEPROXY idref='_0000013EA7924560'/> <NEGRESCODEPROXY idref='_0000013EA7923FC0'/> <NEGRESCODEPROXY idref='_0000013EA7924B00'/> <NEGRESCODEPROXY idref='_0000013EA7923EA0'/> <NEGRESCODEPROXY idref='_0000013EA79243B0'/> <NEGRESCODEPROXY idref='_0000013EA7925010'/> </NEGRESCODEPROXIES> </SPECDATAOBJ> </SIMPLECOMPCONT> </DIAGINST> </DIAGCLASS>出问题的DID都是这6个地方写的内容不一致。CANdelaStudio配置和显示的是第一和第二个名字,canoe根据第三个名字来显示,所以结果不一样。
另外有个注意点,达芬奇工具会检查这6个地方名称的一致性,如果名称不一致,或者引用到的DID没有在前面进行定义,都会报错,不允许导入。