ImageVerifierCode 换一换
格式:DOC , 页数:44 ,大小:3.91MB ,
资源ID:2880762      下载积分:12 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/2880762.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(超经典CANoe综合项目工程案例.doc)为本站上传会员【丰****】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

超经典CANoe综合项目工程案例.doc

1、CANoe 入门 Step by step系列(一)基本应用 CANoe是Vector公司针对汽车电子行业总线分析工具,当前我用CANoe7.6版本进行简介,其她版本功能基本差不多。 硬件我使用是CAN case XL. 1,CANoe软件安装很简朴,先装驱动,再装软件。安装完毕,插上USB,连接硬件,这样在控制面板中,Vector Hardware 进行查看 通过查看信息可知,CANcaseXL中两个piggy,一种是251(高速CAN),一种是7269(LIN),此外惯用尚有1054(低速CAN,或称容错CAN),由于CANcaseXL中只能支持两路通讯,这样piggy可以自由

2、组合 2,硬件连接正常,打开CANoe软件 File->New Configuration 可以选取新建工程模版,咱们这里选取CAN_500kBaud.tcn,这样新建了波特率为500K CAN工程,可以File->Save Configuration,进行保存 3,接下来就要使用CAN db++ Editor工具对总线网络节点,消息,信号,进行定义了。 点击工具栏这个图标   ,或 开始菜单中找这个工具启动 启动后,File->Create Database,选取CANTemplate.dbc,选取目录及文献名,进行保存 右键 Network nodes->New ,进行网络

3、节点定义,这里只需要填写Name即可,例如:Node_A 然后添加Node_B,完毕后如下图,这样在Network nodes目录下面添加出来两个节点 节点添加完毕后,下一步添加CAN消息,右键Messages->New,这是需要定义名称,ID,DLC等信息,如下: 然后在Transmitters页面,点击Add按钮,添加Node_A为发送节点,意思就是说,此消息是从Node_A节点发送出来 其实尚有一种办法就是,此时暂时不定义发送节点,然后直接以拖曳方式拖曳到发送节点上,功能上是同样 有了消息,消息里携带东西自然是信号咯,那么咱们开始创立一种信号 右键Signals-

4、>New,填写如下信息 信号固然要放到消息中咯,切换到Messages页面,Add 咱们刚刚建立Message_A,固然和上面同样,采用拖曳方式从Signal到Message中建立关联也是可以。 上面信息中Intel模式和Motorola格式区别如下: 用0和1来表达开关信号状态似乎还不是很直观,咱们可以使用on和off来表达就好了,于是View->Value Tables,右键空白处->New,键入如下信息:      定义好了之后,还需要跟信号进行关联。右键需要关联信号->Edit Signal,Value Table 中关联刚才建立那个Value Talbe项

5、 这样一种信号就完毕了,此外还需要加一种类似信号,可以点击Signal根目录,在右边选取Signal复制,及粘贴,然后双击复制好Signal后,进行某些编辑,然后用上面办法关联Message即可迅速建立第二个信号了,是不是很以便 继续添加第三个信号,Indicator_A,跟上面同样,但是我这个信号想放在Message第二个字节位置,怎么办? 其实很简朴,有两种办法:第一种,右键已经关联好,即在Message目录下信号,Edit mapped signal,在弹出对话框中Startbit中填8,这样就这个信号就跑到该消息第二个字节中了。第二种办法,右键该消息->Edit Message,在

6、Layout页面中,拖动信号色块进行移动 以上Message_A消息及消息下所定义已经定义完毕 如法炮制此外一种消息Message_B,完毕后如下图。 下面创立环境变量,右键Environment variables     陆续把其她环境变量加好,IndicatorAccess属性为Write哦,加完如下: 数据库定义这款基本上就OK了。保存后关闭CANdb++ Editor,回到CANoe主程序中。 请在Configuration->Options->Configuration Settings->Channel Usage 设立使用通讯通道,由于这个

7、只需要1路CAN,其她都设立为0就可以。 点这个选项页面可浮现Simulate Setup 界面 右键Databases->Add,把刚刚创立好dbc给加载进来,之后再连线上右键->Insert Network Node 成果如下: 右键这个ECU模块->Configuration,在Network Node 选取Node_A,完毕,然后添加Node_B 完毕后如下图,这样dbc与CANoe关联就好了。 4,界面设计 网络及相应关系设立好之后,应当设计界面了,一种良好界面可以直观显示及控制各种信号。 界面设计工具备两种:一种是Panel Designer,新

8、界面设计工具,此外一种是Panel Editor是老界面设计工具,无论采用何种工具设计界面,都可以和CANoe较好兼容,没有问题。下面咱们先用第一种界面设计工具来完毕界面设计 点击工具栏这个图标或File->Open Panel Designer,打开界面编辑器,界面如下: 保存一下该界面,起名为Panel_A,一种空界面上可以放置右上边若干组件。放置好之后,选中界面上组件时候,右下侧回显示当前选中组件属性,可以更改相应大小位置等,但最重要是Symbol属性,这里要说一下,每个界面组件也都需要与CANoe关联,否则单纯界面是没有任何意义,关联重要是信号和环境变量,在Symbol属性Sy

9、mbol Filter属性中可以进行选取,咱们这里关联是环境变量,因此选取Environment Variable,然后再点击上面Symbol属性,然后在弹出页面中选取相应关联变量 完毕后可以按同样办法设计Panel_B,也可以Save As 办法迅速建立同样Panel但是与环境变量关联和界面文字需要进行微调。这样两个Panel都已完毕。也已经建立了与CANoe之间关联。 5,CAPL编程 所有前期准备工作和组装工作都已完毕,当前需要编写程序使整个系统有机运营起来。回到CANoeSimulation Setup界面,然后点击Node_A模块,像铅笔同样图标,填写程序名称,这里Node

10、A,然后打开编程界面,完毕如下程序。然后完毕Node_B程序。小技巧:如果背不出详细消息名称,信号名称或环境变量,可以右键程序空白处,你会得到意外惊喜,试试看。 OK大功告成 6,运营 当前点击工具栏,运营程序。注意:这里表达实际网络,所有消息是发送到物理网络上,如果只是验证程序,设立成这样就可以了。完整运营成果如下: 就是这样,一步一步,咱们完毕了第一种完整CANoe应用工程,虽然这只是入门第一步,但整个CANoe开发流程基本涵盖,如果能跑出上面运营成果,依然可以给咱们诸多惊喜。咱们需要这样惊喜,由于这是咱们继续前行动力。

11、 CANoe 入门 Step by step系列(二)CAPL编程 CAPL就是Communication Application Programming Laguage缩写,CAPL类似于C语言语法,因而所有语法请参照C语言教程,这里不在这里进行详述,关于C语言,毫无疑问,一方面推荐人们看谭浩强教师书,典型中典型,看完这本C语言应当没问题了。CAPL在CANoe中起到重要作用,她将所有某些联系起来(请看下图)当前咱们予以上一节基本上,来着重简介CAPL编程。 CAPL语法是C语言,又有某些C++特性,this指针,事件等,对于事件理解可以学习任意一种面对

12、对象语言,首推C#.NET,可以参照我博客学习,固然这个似乎比CAPL自身更加难,事件也更加多,但这并不妨碍对事件理解,其中事件类型如下图: 下面来几种小例子协助理解 来个CANoe版本hello world!来兴奋一小下吧。开整~ 在打开CANoe,新建个工程,在Simulation Setup中加个Network node ,点铅笔,忘了吗,上一节刚讲过,右键Start->New,键入如下代码 编译后,关闭CAPL Brower。运营CANoe工程,成果如下,哇塞成功咯,好有成就感啊。 这个例子似乎跟CAN通讯没啥太大关系啊,好,咱们接下来再做一种例子 运营成果

13、如下,按键盘b键,将发送一种CAN消息,连dlc是啥都不懂得同窗,推荐先学习一下CAN基本知识,推荐瑞萨公司《CAN入门书》,讲非常好。 运营刚刚那个例子你会发现,按一下b,只发送一条消息,但在实际应用中CAN消息都是循环持续发送,咱们要对刚刚程序进行某些修改。完毕这样功能。程序如下: variables {     message 0x400 msgA = {dlc=1};     mstimer timerA;     int conditionA = 0; } on key 'a' {     conditionA = !conditionA;     if(c

14、onditionA ==1)     {         setTimer(timerA,200);     } } on timer timerA {     if(conditionA==1)     {         setTimer(timerA,200);     }     msgA.byte(0) = msgA.byte(0)-1;     output(msgA); } 运营成果如下:按A键,Timer启动,发送消息 接下来咱们一起来看总结一下CAPL编程要点: CAP

15、L编程学习,需要通过不断在实践中积累,此外别无她法。以上真真儿只是入门,如果你真心看过,不如你真心写过。 CANoe 入门 Step by step系列(三)简朴例子剖析 最佳学习方式是什么?模仿。有人会问,那不是山寨么?但是我以为,那是模仿初级阶段,当把别人最佳设计已经融化到自己血液里,变成自己东西,而灵活运用时候,才是真正高档阶段。正所谓画虎画皮难画骨。但初级阶段依然是必要经历过程,她会使你在达到高档阶段过程中少走诸多弯路,下面咱们来迈出这一步。先研究一下别人简朴例子。     最佳例子莫过于Vect

16、or自身Demo了,这个在安装完CANoe之后就会被自动安装。先看最简朴一种,名字叫Easy,但并不简朴哦,比咱们之前简介所有东西都整合再一起了,很简朴,但很全面。但是如果你说,这个我自己也可以完全自己写出来(并不是仅仅是看懂哦),那么我可以必定说,在工作中,你完全可以胜任普通任务规定哦~,剩余只是工作量问题了。但我相信到当前为止,你们诸多人,都无法写出这样程序,因此我建议你们把这个程序好好研究明白,这点很重要。废话不多说,上图,下面是打开运营后界面。 通过面板可以控制,及显示诸多动画效果,做非常美丽。在别的窗体也将重要数据以图表等体现方式呈现出来。 咱们先看一下DBC内容吧 Sig

17、nals: EngineSpeed  车速信息 FlashLight      双跳灯 HeadLight      大灯 OnOff            引擎状态   Messages: EngineState  引擎状态:包括信号有OnOff,EngineSpeed LightState    灯光状态:包括信号有FlashLight,HeadLight   Network nodes: Display        显示节点,接受所有消息 Engine        引擎节点,发送EngineState 消息 Light          灯光节点,发送Lig

18、htState 消息   Environment variables:   环境变量,普通与界面组件有关联,这样就实现了图形化界面控制与显示,下面就是关联界面组件 EnvEngineSpeedDspMeter   EnvEngineSpeedDspText    EnvEngineSpeedEntry        EnvEngineStateDsp           EnvEngineStateSwitch        EnvHazardLightsSwitch      EnvHeadLightSwitch          EnvLightDsp         

19、            注意一下信号信息: Definition页面,Init.Val输入框使能了,之前是灰色状态,为什么呢?点击一下蓝色带下划线连接,弹出窗台如下: 意思是说这个值设立,必要要定义属性才干有效,之前始终没有提到信号属性,这次还是第一次遇到哦。个人理解信号属性是表白信号特点一系列参数,固然消息和节点也均有相应属性。为了更加详细理解这个属性,咱们求助于协助。 哦,明白了,本来是用来初始化数据哦。其实在Definition表达是物理值,都要转换成Raw值保存到GenSigStartValue属性中。在属性创立咱们之前也没有提到过,这里讲一下,请在CANdb++

20、Editor菜单中,View->Attribute Definitions 右键,New,填写好信息即可。属性背后跟行为是密切有关,甚至跟底层dll,其她某些属性请参照Help文档,固然重要属性咱们也会跟人们在背面提到。 dbc尚有某些细节,就是接受消息定义,之间也没简介过,例如Display节点只接受消息,那么你就应当在节点属性上进行配备,办法是右击节点然后点Edit Node,在Mapped Rx Sig.中就可以定义接受信号了,Add… 其实不定义接受消息也是可以,但会在File->Consistency check 检查中中显示出无接受节点等报警。例如前面第一讲例子dbc

21、检查如下: 再看一下CAPL程序。 engine.can 程序如下: variables  { } on envvar EnvEngineStateSwitch         //当拨动开关时候,会更改发动机发出信号 {   $EngineState::OnOff = @this;           //注意信号和环境变量直接赋值时符号,信号用$,环境变量用@   if(@this)     $EngineState::EngineSpeed = @EnvEngineSpeedEntry;   else     $EngineState::EngineSpe

22、ed = 0; } on envvar EnvEngineSpeedEntry         //当移动车速滑条时,会更改发动机发出信号 {   if(@EnvEngineStateSwitch)    {     $EngineState::EngineSpeed = @this;   } } on start                                         //程序开始运营时候,将调用所有环境变量事件 {   CallAllOnEnvVar();    // call all envvar procedures of this mod

23、el and                         // thus consider the START VALUES of all environment                         // variables for:                           //  - initialization of all message variables                         //  - starting of any timers                         //  - sending messag

24、es (output) with start values } light.can 程序如下: variables  {   msTimer tFlashLightFrequency;                 //定义闪灯定期器   const int gFlashLightFrequency = 500;      //定义闪灯频率,初始化为500ms   int gHazardLightsStatus = 0;                   //定义危险灯信号   int gDebugCounterTX = 0;                      //

25、用于调试,记录TX报文个数   int gDebugCounterTXRQ = 0;                  //用于调试,记录TXRQ报文个数   int gDebugCounterRX = 0;                      //用于调试,记录RX报文个数 } on envvar EnvHeadLightSwitch                   //大灯开关状态更改时,更新灯光消息信号 {   // assign EV value to the message signal   $LightState::HeadLight = @this; }

26、 on start {   CallAllOnEnvVar();    // call all envvar procedures of this model and                         // thus consider the START VALUES of all environment                         // variables for:                           //  - initialization of all message variables                   

27、      //  - starting of any timers                         //  - sending messages (output) with start values   setWriteDbgLevel(0);// set DbgLevel = 1 to get more information in Write-Window } on message LightState    //调试用,打印有关信息 {   if (this.dir == TX)   {     gDebugCounterTX++;     if(gD

28、ebugCounterTX == 10)     {       writeDbgLevel(1,"LightState TX received by node %NODE_NAME%");       gDebugCounterTX = 0;     }        }   if(this.dir == TXREQUEST)   {     gDebugCounterTXRQ++;     if(gDebugCounterTXRQ == 10)     {       writeDbgLevel(1,"LightState TXREQUEST received by

29、node %NODE_NAME%");       gDebugCounterTXRQ = 0;     }    }   if (this.dir == RX)   {     gDebugCounterRX++;     if(gDebugCounterRX == 10)     {       writeDbgLevel(1,"Error:LightState RX received by node %NODE_NAME%");       gDebugCounterRX = 0;     }   } } on envVar EnvHazardLightsSw

30、itch      //危险警示灯开关变化时,更新灯光消息闪灯信号 {   if (@this)   {     gHazardLightsStatus = 1;     setTimer(tFlashLightFrequency,gFlashLightFrequency);   }   else   {     cancelTimer(tFlashLightFrequency);     gHazardLightsStatus = 0;   }   $LightState::FlashLight = gHazardLightsStatus; } on timer

31、tFlashLightFrequency             //危险报警灯间隔闪烁控制 {   gHazardLightsStatus = (gHazardLightsStatus == 1 ?0 :1);   $LightState::FlashLight = gHazardLightsStatus;   setTimer(this,gFlashLightFrequency); } on key '0'                                      //按键事件,定义打印调试信息级别 {   setwriteDbgLevel(0); }

32、on key '1'                                      //按键事件,定义打印调试信息级别 {   setwriteDbgLevel(1);                     } 以上程序,有C语言基本同窗应当都可以看得懂,这里不用详细简介了。 看完程序人们也许有个疑问,没有调用任何发送CAN消息函数(只是更改其中信号),但报文却真发出去了,这是为什么呢? 这是由于周期发送消息工作,已经在消息属性中定义了,这样消息会自动周期发送。如下: 这个在消息属性查看中界面,固然也可以在上面咱们简介View->Attribute Defini

33、tions,进行修改和查看,但区别是,这个只是针对个别消息,View->Attribute Definitions,是针对所有状况。尚有消息属性中,对此进行归类,以上归类到Interaction Layer这个是CAN通讯交互层。上面各个属性详细含义,请参照协助文档,均有详细阐明。 下面说一下界面。 选中一种界面组件,在状态栏中可显示她类型,关联对象等信息。右边为属性窗口,定义选中组件属性 这个组件类型为:Switch/Indicator 属性栏中: Image 表达该组件使用图片,由于要表达几种状态,因此做成这样,尺寸105x34 pix State Count 表达状态个数 其她属性不一一简介了,自己试一下基本可以懂得,实在不行求助协助文档,这里不一 一简介了。 到当前整个工程剖析基本上结束了,但说过这些局限性以覆盖所有细节,但基本脉络已经很清晰了,剩余可以自己研究,都不难理解。个人建议,在实际工作中创立自己工程,当遇到问题是,参照例子中实现方式,这样更加协助理解。进步也最快。

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服