CANoe系列教程

汽车安全 1年前 (2023) admin
613 0 0

作者 | 55号小白鸭

出品 | 车端

备注 | 转载请阅读文中版权声明

知圈 | 进“汽车电子与AutoSAR开发”群,请加微“cloud2sunshine”

CANoe常用操作(CANoe系列其一)

摘要

        CANoe是德国Vector公司为汽车总线的开发而设计的一款总线开发环境,全称叫CAN open environment。同Vspy一样,CANoe集合了「网络监控、数据获取/记录、节点仿真、诊断、自动测试等」功能;其丰富的功能和配置选项使其也是常见于汽车电子行业。接下来,我们以9.0版本为例,针对CANoe的「常用操作」进行介绍,具体分为以下几点:

        「1、CANoe工程的新建
        2、通过Trace工具查看交互的报文内容
        3、通过Logging保存日志文件
        4、创建IG发送报文
        5、通过Graphics界面抓取信号波形
        6、加载cdd文件
        7、过滤报文ID的接收
        8、其他」

CANoe系列教程

             

1、CANoe工程的新建

        打开CANoe软件,在工具栏的”File”中点击”New”,「双击选择创建的模板」 ,再保存创建的cfg工程文件。如下:
CANoe系列教程

2、通过Trace工具查看交互的报文内容

        (1)、运行工程:通过点击左上角的开始按键(闪电形状的按键)运行工程;此时会弹出选择CAN通道的界面;若不知道选择哪个通道,可「查看“Simulation Setup“界面的”Channels”」,如下图。当然这个通道是可以更换的,在”Channels”下进行操作即可。
CANoe系列教程
        (2)、使用Trace工具:在”「Analysis”下打开”Trace”」,若此时CAN上有报文在发送,即可在这个界面下查看到。界面如下图所示,这里对Trace界面下经常用到的几点进行下阐述:

  • Trace界面提供了多种过滤方式,但一般常用的是「通过信号ID进行过滤」。具体过滤操作可点击”ID”右上角的图标进行设置(将鼠标移到”ID”处时会显示出)。

  • 可以通过点击下图标志3处的这个图标「改变报文的显示模式」(将同一ID的报文逐条显示或者只显示最后一次的此ID的报文)

  • 下图标志1处的图标表示「清空」当前”Trace”界面的报文显示

  • 下图标志2处的图标表示「停止/更新」”Trace”界面的报文显示

CANoe系列教程

3、通过Logging保存日志文件

        前面我们介绍了查看正在交互的报文信号,那当我们需要保存整个报文交互过程,以便后续的分析操作时;我们则可以通过打开Logging功能,将整个报文交互的信息保存下来。具体操作如下:

        (1)、日志文件保存设置:打开”「Analysis”下的”Measurement Setup」”,此时界面下图所示。
CANoe系列教程
        右键上图红框中的”「Logging」”,点击”「Logging File Configuration”」。此时界面如下图,在这里进行日志文件的保存设置。
CANoe系列教程
        (2)、使能Logging功能:经过前面的操作我们完成了日志文件的保存设置;当我们需要保存日志文件时,则可以通过「双击下图红框的暂停箭头,打开Logging功能」

CANoe系列教程

        此时Logging图标状态如下图所示,截止关闭CANoe工程之前,所有的报文交互信号将被记录保存下来;当然在中间过程可以点击下图红框圈起来的暂停按键停止记录。

CANoe系列教程

4、创建IG发送报文

        在完成工程的创建后,此时的界面如下图所示。在”Simulation Setup”界面下,我们可对当前网络进行结点的添加、交互生成器IG的添加、dbc的添加等设置工作。这里我们介绍下如何通过创建IG发送报文信号。
CANoe系列教程
        (1)、右键”「Interactive Generators」”,选择”「Insert Interactive Generators Block CAN」”;此时界面如下图所示;

CANoe系列教程

          「双击上图中创建出来的CAN IG」,此时界面如下图所示。
CANoe系列教程
        (2)、右键”CAN IG”界面下上面窗格的空白部分,添加要发送的报文信号。有以下的三种选择:


  • 「从dbc文件中导入要发送的信号」(Add Frame From Database);

  • 「添加CAN FD信号」(Add CAN FD Frame) ;

  • 「添加CAN信号」(Add CAN Frame)

    Ps:关于CAN FD (CAN with Flexible Data rate)与CAN主要有以下的两点区别:
    1、可变速率:CAN FD采用了两种速率;从控制场中的BRS(速率转换开关位)位到ACK场之前(含CRC分界符)为可变速率;其余部分为原CAN总线用的速率。
    2、CAN FD对数据场的长度作了很大的扩充,DLC最大支持64个字节,在DLC小于等于8时与原CAN总线是一样的。


    • 1

    • 2

    • 3

        (3)、「创建自定义的报文发送」「点击”Add CAN Frame”」,此时会添加一条CAN信号;如下图所示,填入要发送的报文ID和信号内容;可选择点击发送或者周期循环发送。此时,可以通过”Trace”面板查看报文是否已经发送
CANoe系列教程
        (4)、「从dbc中导入要发送的报文」:我们也可以从已有的dbc中导入要发送的报文信号进行发送;但这样需要我们先在当前CAN网络导入dbc文件;具体操作如下:

  • 「导入dbc」:在”「Simulation Setup」”界面下,右键”「Database」”,选择”Add”,导入dbc文件(注意需在CANoe「工程Stop状态下」操作)。界面如下:

CANoe系列教程

  • 「导入dbc文件中的报文」:回到IG界面,右键点击” 「Add Frame From Database」”,如下图,在前面步骤导入的dbc文件下的“「Frames」“中,选择要导入的报文信号(可一次添加多条报文进来)
    CANoe系列教程

  • 「报文发送」:完成dbc报文导入后,我们就可以在IG界面对导入的报文进行发送操作了;界面如下:
    CANoe系列教程

5、通过Graphics界面抓取信号波形

        5.1、在”Analysis”下打开”Graphics” 功能界面;此时界面如下:

CANoe系列教程

        5.2、添加要查看的报文信号
        (1)、「添加用户自己定义的信号」:若当前工程没有导入dbc、或者dbc中没有要查看的报文信号,可通过自己定义信号变量进行查看。操作如下:
        在”Graphics”界面下「右键」,选择”「User Defined Signals」”,此时会弹出参数设置界面,此时界面如下:
CANoe系列教程
        对应「写入要查看的报文ID、信号起始位、信号长度」;点击OK,即可显示出总线上该信号的波形,此时界面如下图
CANoe系列教程
        (2)、「从dbc文件中导入信号」:在”Graphics”界面下右键,选择”「Add Signals」”,此时会弹出信号选择界面如下图(注意工程里是要已经有添加dbc文件的了);可以直接在”Signals”里选择信号;也可在”Frames”找到对应报文,再选择要查看的信号。
CANoe系列教程
        5.3、关于多个信号时的显示设置
        (1)、如下图,在信号比较少时,可以点击红框图标(「y坐标的显示模式设置」),选择”「Show Signals in Separate Diagrams」”,在独立的坐标里显示信号值。
CANoe系列教程
        各个信号的y坐标范围可以直接双击进行设置,界面如下:

CANoe系列教程

        (2)、当要查看的信号比较多时,则选择”「Show All Y-Axis」”,此时的显示界面如下:
CANoe系列教程
             


6、加载cdd文件

        6.1、关于cdd文件
        cdd是「诊断数据库文件」,描述了「诊断应用的范围和数据格式」,用于优化整个诊断开发过程。Cdd文件的编辑操作是通过”「CANdelaStudio」”这个诊断协议开发软件来完成。
        6.2、加载cdd文件步骤
        (1)、在CANoe工「程”Stop”的状态」下,点击工具栏”「Diagnostics”下的“Diagnostic ISO TP」”,此时界面如6.1所示;
CANoe系列教程
        (2)、「右击”CAN”」,选择第一个”「Add Diagnostic Description」”,选择要导入的cdd文件,导入cdd文件后的界面如图6.2所示。
CANoe系列教程
        6.3、通过诊断控制台「调用cdd文件中的报文进行发送」

        点击工具栏”「Diagnostics”下的”Diagnostic Console」”,此时界面如下图所示;便可直接通过诊断控制台调用cdd文件中配置好的诊断报文信息进行发送;不用再去自己在IG中创建报文。

CANoe系列教程

7、过滤报文ID的接收

        7.1、「通过”Network Hardware Configuration”进行报文过滤」

        在前面的第2小节里,我们描述了如何通过”Trace”查看交互的报文内容;并简要介绍了相应的过滤操作,其中主要用到的是「通过ID进行报文过滤。但”Trace”下的过滤只是将其他显示报文屏蔽不显示而已」。打开Logging工具查看保存的文件,其他过滤的报文还是有接收记录着的。若我们「想要直接过滤掉某些报文ID的接收」,则可以通过在”Network Hardware Configuration”下进行设置。具体步骤如下:
        (1)、在CANoe「工程“Stop”的状态下,点击工具栏”Hardware”下的”Network hardware」”;此时界面如下图所示
CANoe系列教程
        (2)、根据当前工程选用的CAN通道「进行过滤设置」,若不清楚当前工程选用通道,可在“Simulation Setup“界面的”Channels”进行查看。
        (3)、设置完成后,此时在”Trace”界面下,以及保存下来的日志文件中,都已经将其他报文过滤掉了(注意若是「通过IG创建的发送报文,是不会被过滤掉的」

        7.2、「通过在”Measurement Setup”界面下插入过滤器进行报文过滤」

        (1)、如下图,在工程”Stop”的状态下,点击要进行过滤操作的界面窗口前右击 红框内的图标,选择”「Insert Event Filter」”,其前面会出现 “「CFB」“的标志(兰框内的图标);(这里是以在”Trace”窗口进行过滤操作为例)
CANoe系列教程
        (2)、「双击上图中的”CFB”图标」,进入CAN过滤的设置界面,「按照需求进行过滤设置」,此时界面如下图所示:
CANoe系列教程
        (3)、此时运行工程,打开”Trace”界面,则可以看到除了指定的这几条报文,其他报文都已被屏蔽掉了。但注意,由于我们「前面的例子中加入的CAN过滤器是在”Trace”窗口前面加的,所以其效果也只在”Trace”窗口下有效」「只对当前插入过滤器的模块有效」);此时Logging模块下还是有对其他报文进行记录的。所以,若我们想要生成的工作日志也过滤掉其他报文,则要在”Logging”文件前也加上CAN过滤器,如下:
CANoe系列教程

Ps:除了前面提到的插入CAN过滤器,在”Measurement Setup”界面下的任意窗口,右击前面的 正方形图标,还可以选择其他一些功能模块,如CAN CAN通道的过滤器、CAPL程序等。如下:
  • 1


CANoe系列教程

8、其他

        8.1、利用工具栏”「Analysis”下的”Statistics”可以对各类消息帧的发送频率、总线负载、控制器状态等信息进行统计」(在工程”Stop”状态下,在”Statistics”下可以新建总线统计窗口,报文直方图( 「Frame Histogram」 )等),窗口如下图所示。由于平时用的不多,这里不做详细阐述了。
CANoe系列教程
        8.2、利用工具栏”「Analysis”下的”Data”可以对信号值、变量值的大小进行查看监控」,并保存信号的日志文件(mdf格式)。窗口如下图所示:
CANoe系列教程
        8.3、”「measurement setup”窗口和”simulation setup”窗口(如下图)是CANoe的主要窗口,进行数据流规划」。需重点掌握这两个窗口的学习。

CANoe系列教程

CANoe之Panel Designer的使用(CANoe系列其二)

摘要

        与Vspy的”Graphical Panels”一样,在CANoe的使用中,同样也为我们提供了制作交互面板的功能——”「Panel Designer」”。通过该工具我们可以创建面板,「对放置的控件关联上信号变量」;当我们「对控件进行操作时,则相应改变了关联上该控件的变量值;再通过CAPL编程获取该变量的值」,我们便可以进行下一步的程序动作了。即面板控件为交互,关联上的信号变量为桥梁,以此完成交互工作。

1、Panel的新建及概述

        如下图,点击工具栏”「Home」”下的”「Panel」”,可以选择”Add Panel”「导入之前保存的Panel文件(.xvp文件)」;也可以选择”New Panel”「进行面板的新建」

CANoe系列教程

        ”「Panel Designer”的操作界面如下」,在右侧调出控件列表并进行参数设置,中间是控件的形态显示,左侧则是工程中定义的报文信号、环境变量、系统变量等信息的预览窗口。

CANoe系列教程

        如上图,我们放置了一个计量器控件;但此时我们还没有将其用起来,即还没有将该控件与CANoe进行关联。「关联操作如下」
        (1)、在「Symbol Filter」属性中选择该信号要进行「关联的类型」;常用到的有信号、环境变量、系统变量等;
        Ps:注意「环境变量」是在工程关联的「dbc中创建」的;而「系统变量」是在CANoe工程工具栏的”「Environment”下的”System Variables”中创建」的。

        (2)、在前面步骤选好要关联的类型后,再「在”Symbol”中选择该类型中具体的变量进行关联」
        (3)、通过关联的信号或者环境变量等,我们就将控件的状态与CANoe联系起来了。当我们对控件进行操作时,改变其关联的变量值,通过CAPL编程获取该变量的值,我们便可以进行下一步的程序动作了(「如将该值输入到某个报文信号进行发送,或者开始调用某个功能函数等操作」)。

        接下来,我们对CANoe中的控件进行简单介绍。
        

2、控件介绍

2.1、Analog Guage控件

        用于「将数据的数值以仪表的形式显示」(一般用于车速、转速等信号数值的显示);如下图,需设置的主要参数有:进「行关联的变量、变量范围及扇形角度、单位」等。

CANoe系列教程
        

2.2、Button控件

        「作为开关按钮,通过该按键改变关联的变量值」,在CAPL程序中,对关联的变量值进行判断,再对应执行相应的功能代码。如下图,需设置的主要参数有:「按下与松开的按键值、关联的变量、按键名」

CANoe系列教程

        

2.3、Check Box控件

        「勾选框」,其作用与前面的Button按钮相似;只不过「Check Box会锁住当前状态;而Button控件的状态只在按住的时候才改变,无法将状态锁住」。如下图,需设置的主要参数有:「勾选与没有勾选时的值、关联的变量、控件指示名。」

CANoe系列教程

        

2.4、Clock Control控件

        「用于时间显示,可以指示工程的运行时间」(需在CAPL中编程去实现,「在”source”中选择”CAPL」”)、或「对当前时间进行显示(在”source”中选择PCSystem Time」”)。如下图,需设置的主要参数有:「控件名、时间的输入源」;该控件不关联变量也可以使用;因为其只是用于指示时间。

CANoe系列教程

        对于”Source”选择”CAPL”时,在CAPL编程中,「对该控件时间进行设置的函数是」

	
setClockControlTime(“当前Panel名字”, “上图中的控件名”, 要设置的数值);

        所以,若要指示当前工程的工作时间,则需要「定义一个1s的定时器和一个用于指示时间的变量;每1s将变量自加」;并通过上面提到的函数进行时间更新显示。如:


Variables     /*全局变量定义*/
{
  int gTimeDownloadSec = 0;
  timer CountTime;
}

on start         /*系统事件,工程开始时执行*/
{
   setTimer(CountTime, 1);  
}

on timer CountTime   /*CountTime为每秒运行一次的时间事件*/
{
  gTimeDownloadSec++;
  setClockControlTime("temp""Clock Control", gTimeDownloadSec);
  setTimer(CountTime, 1); 
}


2.5、Combo Box控件

        「作为下拉列表,用于对变量值的设定」。如下图,需设置的主要参数有:「选择进行关联的信号、选择显示方式、设置控件描述」

CANoe系列教程

        

2.6、File Button控件

        用于「链接上一个文件,当点击按键时则会打开链接上的文件」。如下图,需设置的主要参数有:「选择要链接的文件;按键的显示(通过加载的图片来修饰」

CANoe系列教程

        

2.7、Group Box控件

        「用于控件的分组」;可以将同一性质的控件放到一个Group Box控件之中。如下图,需设置的有「对于这组控件的描述」

CANoe系列教程

        

2.8、Input/Output Box控件

        用于「对关联变量值的输入与输出显示(当关联上String型变量时,则是做为文本输入输出框」)。既可以显示关联变量的当前值;也可以输入值改变关联的变量值。如下图,需设置的参数主要有:「选择要进行关联的变量;对控件的描述」等。
CANoe系列教程

        

2.9、LCD Control控件

        「以LCD的形式显示关联的变量值」「没有输入改变变量值的功能」)。如下图,需设置的内容主要有:选择要「关联的变量」、根据变量取值范围设置好「LCD的整数及小数的位数」

CANoe系列教程

        

2.10、LED Control控件

        常用于关联上某个变量值,「以LED亮灭的形式指示当前工程的运行状态」。如下图,需设置的内容主要有:选择要「关联的变量、亮灭时灯的颜色、LED灯的大小、亮灭对应的触发值」(如下图即当关联的变量值置为1时LED灯才会点亮)。

CANoe系列教程
        

2.11、Media Player控件

        用于「对音视频等媒体文件的播放控制」;如下图,需设置的内容主要有:选择「要操作的媒体文件、选择关联的变量、及设定对应播放、停止、暂停操作的变量值」

CANoe系列教程
        

2.12、Numeric Up/Down控件

        用于「以数值增减箭头的方式对关联变量的值进行改变控制」;如下图,需设置的内容主要有:选择「要关联的变量、设定每按一次的增减量、取值范围」

CANoe系列教程
        

2.13、Panel Control Button控件

        当按下控件时「进行关联面板的跳转」;如下图,需设置的内容主要有:「选择要关联的面板、控件显示名」

CANoe系列教程

        

2.14、Path Dialog控件

        常用于「对指定类型文件的选择,并通过关联的string类型变量存储选择的文件路径」,便于在CAPL编程中进行下一步(如打开文件进行读取等)的工作;如下图,需设置的内容主要有:「选择要关联的string类型变量、文件过滤类型」

CANoe系列教程
        

2.15、Picture Box控件

        「调取图片显示」;用于面板的美化。如下图,需只需关联上要显示的图片即可。

CANoe系列教程

        

2.16、Progress Bar控件

        「以进度条的形式对关联变量的值进行显示(没有输入改变的功能」);如下图,需设置的内容主要有:选择要「关联的变量、取值范围、进度条的显示方向(水平/垂直)、信号数值的显示位置、显示的小数位数等」
CANoe系列教程
        

2.17、Radio Button控件

        「以单选按钮的形式对关联变量的状态进行显示(选中或者没选中」);如下图,需设置的内容主要有:选择要「关联的变量、对应显示选中时的变量值,是否可点击选择、显示文本信息等」
CANoe系列教程
        

2.18、Static Text控件

        用于「界面上文本信息的显示」。如下图,需设置的内容主要有:显示的内容、显示字体、大小的设置。

CANoe系列教程

        

2.19、Track Bar控件

        「以刻度滑杠的形式对关联变量的状态进行显示及控制」;如下图,需设置的内容主要有:选择「要关联的变量、设置范围、是否可拖动改变变量值、选择控件方向」等。

CANoe系列教程
        

小结

        以上,我们介绍了CANoe工程中面板控件的作用及相关的参数设置;这里再对上述的十几种控件进行归类梳理,以便需要时查找对应满足功能的控件。如下:
1、「指示类控件」:这一类控件「以其控件形态展示其关联信号的当前值,没有对信号进行输入改动的能力」,仅仅用于值的输出展示,如:

  • 2.4、 Clock Control控件:以LCD的形式对当前时间或者工程的运行时间进行显示;

  • 2.9、 LCD Control控件:以LCD的形式显示关联的变量值;

  • 2.10、 LED Control控件:以LED亮灭的形式显示关联的信号值状态(只能有亮或灭对应的状态);

  • 2.16、Progress Bar控件:以进度条的形式对关联变量的值进行显示;

2、「功能类控件」:这一类控件用于「调用其他功能块」,如:

  • 2.6、 File Button控件:通过该控件打开链接的文件;

  • 2.11、 Media Player控件:用于播放关联上的音视频媒体文件;

  • 2.13、Panel Control Button控件:通过该控件调出关联上的Panel面板;

  • 2.14、Path Dialog控件:通过该控件可对指定文件类型进行过滤选择;

  • 2.15、Picture Box控件:显示关联上的图片,一般用于面板的美化;

3、「信号值交互类控件」:这一类控件用于「对信号值的输入改变、输出显示」,除信号值大小的显示外,还具备对信号值进行输入改动的能力,如:

  • 2.1、 Analog Guage控件:用于以仪表盘的形式显示/控制关联上的信号值(如用于车速转速的控制);

  • 2.2、 Button控件:通过关联上某个变量作为开关按钮(仅有按下、松开两种状态);

  • 2.3、 Check Box控件:以勾选框形式去表示状态(仅有勾选、未选两种状态);

  • 2.5、 Combo Box控件:以下拉列表的形式显示/控制关联上的信号值;

  • 2.8、Input/Output Box控件:输入输出框,用于对关联变量的输入控制及输出显示(数字或文本形式);

  • 2.12、Numeric Up/Down控件:以数值增减箭头的形式对关联变量的值进行控制和显示;

  • 2.17、Radio Button控件:以单选按钮的形式对关联变量的状态进行显示(选中或者没选中);

  • 2.19、Track Bar控件:以刻度滑杠的形式对关联变量的状态进行显示及控制;

4、「其他类控件」,如:

  • 2.7、Group Box控件:用于对其他控件的分组(将同一特性的控件都置于一个Group Box
    控件框内);

  • 2.18、Static Text控件:用于界面上指示用的静态文本信息的显示;

        综上,就是关于CANoe工程面板制作时相关的控件介绍了,大家可以针对要实现的Panel功能来选择合适的控件进行交互界面的制作。

CANoe之CAPL编程(CANoe系列其三)

1、CAPL概述

        与Vspy的”C Code Interface”一样;在CANoe的使用中,一样提供了我们进行「二次编程开发」的工具——”「CAPL Browser」”。通过CAPL的编程,我们可以在节点上完成更为复杂的功能需求。操作如下:在CANoe工程的”「Simulation Setup」”界面下的左侧的「网络节点」中,点击「铅笔形状的图标」,进入CAPL编辑界面(若当前节点还没有创建对应的CAPL程序,则此时会先提示输入CAPL程序名,并「保存为.can后缀的文件」

CANoe系列教程

1.1、CAPL语言特性

  • CAPL(Communication Access Programming Laguage)语言是「类C语言」,语法其实与C语言很相似,但同时又包含了一些C++的特性,如「this指针、事件」等;

  • 应用于Vector CAN工具节点的编程,是基于事件建模的语言;

  • 可以使用「write()函数」进行调试,用于将调试信息输出到CANoe的write窗口上;

  • 通过「output()函数进行指定报文的发送」

  • 通常是通过环境变量事件与CANoe面板进行关联,实现交互;

  • 「提供调用dll文件的方法」(操作见”关于CAPL中对dll的调用操作”一文);这样保证了对由其他语言封装好的程序模块的调用;
            

1.2、CAPL的程序结构

        如下,一个完整的CAPL程序的结构包含了「头文件、全局变量、事件函数、自定义函数」;当然不是每个因素都要有,视具体程序功能确定。

CANoe系列教程
        

1.3、CAPL的数据类型

CANoe系列教程
        

1.4、CAPL事件类型概述

        CAPL是基于事件建模的语言,从1.2小节对CAPL的程序结构的介绍也可以看出,关于CAPL的运用主要就是在于熟悉其事件的使用;其常用的事件如下:
CANoe系列教程
        接下来,我们对CAPL的几种事件类型进行进一步的介绍
        

2、CAPL事件类型

        

2.1、系统事件

        在CAPL的系统事件中,有「preStart、start、preStop、stopMeasurement」这4种。我们可以根据需要在相应的系统事件函数接口中定义想要进行的操作;当「工程运行时,下述系统事件的发生顺序依次是」

preStart-->start-->preStop-->stopMeasurement


        关于系统事件的「定义格式如下」

on preStart         /*系统事件,初始化时执行*/
{
  resetCan();         /*CAPL接口函数,用于复位CAN控制器*/
}

on start           /*系统事件,工程开始时执行*/
{
  write(“Just A Try”);     /*write()函数将字符串信息在”write”窗口输出*/
}


on preStop        /*系统事件,工程预备停止时执行;发生在stopMeasurement事件前面*/
{
   write("The Project Will Stop!”);
}

on stopMeasurement    /*系统事件,工程停止时执行*/
{
   write("
The End!n");
}


        

2.2、CAN控制器事件

   

 on busOff       /*CAN控制器事件:硬件检测到BusOff时执行*/
 {
    write("BusOff Error!");
 }


        

2.3、CAN消息事件

        通过”「on message」”定义消息事件,该事件会「在指定的报文消息被接收时被调用」。关于消息事件的「定义格式示例如下」

on message 123           /*接收到123(10进制)这个ID的报文时执行*/
on message 0x441         /*接收到0x441(16进制)这个ID的报文时执行*/
on message BCM           /*接收到BCM(工程dbc文件中的报文名)这个报文时执行*/
on message*          /*接收到任意报文时都执行(注意*与message之间没有空格)*/
on message 0x300-0x444   /*接收到这个范围内的ID报文时执行*/
{
   write(“Received %x”,this.id);  /*打印接收到的报文id*/
   write(“Received Message %d in total!”,count);
}


        以上是关于消息事件的定义格式,关于「消息的索引及发送操作」我们通过下例介绍:
        假设VoiceStatus是我们工程dbc文件中定义的一个报文,该报文包括了VoiceType和VoiceOperation这两个信号;其中,VoiceType这个变量占据第1个字节;VoiceOperation占据第2、3个字节;则「关于消息的索引,通过报文的信号(msg.VoiceType这样)去操作如下」

 voidTxMsg_VoiceStatus(void)
{
    message VoiceStatus msg;/*将工程中dbc中定义的VoiceStatus这条报文取名为msg*/
    msg.VoiceType = @VoiceType;/*对应赋值给到报文的信号,通过报文别名"msg."调出*/
    msg.VoiceOperation = @VoiceOperation;
    output(msg);/*通过output指令发送该报文*/
}

        也可以直接「通过后接数据类型(msg.byte(0)这样)去操作,此时操作如下」

voidTxMsg_VoiceStatus(void)
{
    message VoiceStatus msg;/*将工程中dbc中定义的VoiceStatus这条报文取名为msg*/
    msg.byte(0)= @VoiceType;/*报文第1个数据字节*/
    msg.word(1)= @VoiceOperation;;/*报文从第1个字节开始的一个字(2个字节)*/
    output(msg);/*通过output指令发送该报文*/
}

2.4、键盘事件

        通过”「on key」”定义键盘事件,该事件会在我们「按下指定按键时执行」;关于键盘事件的「定义格式示例如下」

on key ‘a’       /*在小写输入法下,按下键盘的’A’键时执行*/
on key ‘A’       /*在大写输入法下,按下键盘的’A’键时执行*/
on key ‘ ’       /*按下键盘的空格键时执行,注意单引号中间是有空格的*/
on key 0x20/*按下键盘的空格键时执行*/
on key F2           /*按下键盘的’F2’键时执行*/
on key CtrlF3       /*同时按下键盘的’Ctrl’键和’F3’键时执行*/
on key*/*按下键盘的任意键时都会执行(注意*与key之间没有空格) */
{
   write(“The Key Is Press”);
}
  

2.5、时间事件

        通过”「on timer」”定义时间事件;该事件会「在设定的时间到达时执行」。关于时间事件的「定义格式及使用示例如下」

variables
{
  msTimer Timer1;/*在variables中声明一个以ms为单位的定时器变量Timer1*/
}

2.6、错误帧事件

        通过”「on errorFrame」 ”定义错误帧事件;该事件会「在硬件检测到错误帧时执行」。关于错误帧事件的「定义格式示例如下」

on errorFrame       /*错误帧事件:硬件检测到错误帧时执行*/
{
write("The error has occur");
}        

2.7、环境变量事件

        通过”「on envVar」”定义环境变量事件;该事件会「在指定的环境变量值有新的输入时执行」(环境变量常常用于关联上一个面板控件,当我们「对控件进行操作时,对应改变关联上的环境变量值;而此时我们在CAPL中关于该环境变量的事件就会被调用」;以此完成交互操作)。关于环境变量事件的「定义格式示例如下」

on envVar BCM_HightBeamAlarm    /*环境变量事件:指定的环境变量值有输入时执行*/
{
   byte num=0;
   num =getValue(this);/*可以使用getValue(环境变量名/this关键字)获取指定的环境变量的值*/
   if(num ==1)
   {
     write("The envVar is %d",@BCM_HightBeamAlarm);
   }
   else
   {
     putValue(this,1);/*使用putValue(环境变量名/this关键字,设定的值)改变指定的环境变量的值;直接赋值的话,格式是@BCM_HightBeamAlarm = 1; */
     write("Change envVar to %d",@BCM_HightBeamAlarm);
   }
}

        关于在CAPL中对环境变量的操作中,「getValue()与putValue()是常用的接口函数」。其函数格式如下,具体介绍及示例也可以通过神键”F1″召唤帮助文档,在”CAPL”相关章节中进行学习。

CANoe系列教程

CANoe系列教程

        
        Ps:关于「环境变量的定义是在dbc文件中完成的;CANoe工程导入该dbc文件即可使用其定义的环境变量了」。环境变量的创建如下:
CANoe系列教程

        

2.8、系统变量事件

        通过”「on sysvar」”定义系统变量事件;该事件会「在指定的系统变量值有新的输入时执行」,其格式及使用方法与前一小节的环境变量基本一致;差别只在于环境变量是在dbc文件中定义的;而「系统变量的定义如下」
        点击工具栏的”「Environment”下的”System Variables」”;此时界面如下,右键空白处,选择”「New」”进行新建;在弹出的窗口对新建的系统变量进行参数设置。
CANoe系列教程
        关于系统变量事件的定义格式示例如下:

	
on sysvar SysVar1  /*系统变量事件:指定的系统变量值有新的输入时执行*/
 {
    write("The SysVar1 is %d",@SysVar1);
 }

出品 | 软件赋能汽车

智能汽车圈 | 加微“cloud2sunshine”


   

原文始发于微信公众号(车端):CANoe系列教程

版权声明:admin 发表于 2023年1月29日 下午12:48。
转载请注明:CANoe系列教程 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...