格式整理的不好,可参考知乎文章:https://zhuanlan.zhihu.com/p/706886220(知乎可以直接上传word,格式保留相对完整)
或者从这里下载完整版pdf:https://download.csdn.net/download/qq_25284701/89512748

目录

(1)新建工程及修改配置

1)使用工程模板快速创建CAN工程

2)通道映射

3)添加数据库文件

(2)分析窗口

1)Trace窗口

1>打开Trace窗口

2>Trace窗口显示格式

3>添加/删除列

4>分析功能

5>Buffer Concepty缓存空间

6>Trace窗口容量

7>Trace过滤器

8>Data Import and Export

2)Graphic窗口

1>添加信号

2>Select y-axis view Y轴显示

3>Fit signal

4>实时显示信息

5>光标

6>数据记录

7>双信号X-Y作图

3)State Tracker状态跟踪器

1>打开State Tracker窗口

2>添加观测信号

3>State Tracker窗口信息

4>缩放显示

5>Simple trigger触发条件设置

6>Configure Value Color颜色区分信号值

(3)过滤Filter Function Block

1)Program Node

2)Channel Filter通道过滤

3)Event Filter事件过滤

4)Variable Filter系统变量过滤

5)Trigger Block触发块

6)Break中断

(4)数据记录Logging Block

1)总线记录文件的格式

1>面向报文格式

2>面向信号格式

2)Logging Block模块配置

3)记录文件配置

4)触发条件配置

1>记录触发模式

2>触发配置

(5)离线分析Offline Mode

1)回放模式设置

2)回放开始设置

(6)导入/导出Import and Export

1)输出数据格式

1>面向报文格式

2>面向信号格式

2)Graphic导入/导出数据

1>导出

2>导入

3)Trace导入导出数据

1>导入

2>导出

4)记录文件格式转换工具

(7)发送模块CAN IG

1)添加CAN IG模块

2)发送数据设置

1>添加报文

2>报文触发方式

3>CAN FD报文

4>信号发生器

(8)可视化序列Visual Sequence

1)序列基础设置

2)报文发送配置

1>发送自定义报文

2>周期发送报文

3>发送数据库中的报文

4>修改发送数据库报文中的信号值

3)序列执行配置

1>设置Sequence执行时间

2>Sequence检查

3>Sequence执行

4>重复执行

5>编辑Sequence

6>Check指令

7>在线调试

8>多序列设置

(9)系统变量System Variable

1)普通系统变量

2)结构体系统变量

3)查看系统变量

(10)Symbol Panel和Node Panel工具

1)Symbol Panel

2)Node Panel

1>仿真节点配置

2>Node Panel

(11)面板设计器Panel Designer

1)工具界面

2)面板工具

1>面板设计流程

2>控件分类

3)面板设计

4)面板使用

5)更换控件图片

6)特殊控件

7)工程面板管理

(12)CAPL语言

1)简介

1>Simulation Setup窗口添加CAPL

2>Measurement Setup窗口添加CAPL

2)CAPL文件编辑界面

3)CAPL常用事件

1>CAPL语言的特点

2>事件触发

3>常见的CAPL事件

4>键盘事件示例

4)发送报文Send message

1>发送任意报文

2>发送数据库报文

5)信号和系统变量访问Access Signal

1>发送信号

2>获取信号值

3>给信号赋值

4>系统变量相关函数

5>系统变量的访问函数

------------------------------------------------------------------------------------------------------------------

本文是参考官方视频整理的笔记,请观看官方视频:【官方自制】CANoe/CANalyzer基础教程合集(已完结)共18P


CANoe/CANalyzer基础教程(二)

(1)~(6)请参考《CANoe+CANalyzer基础教程(一)》

-------------------------------------------------------------------------------------------------------------

(6)导入/导出Import and Export

本节将介绍如何通过CANoe/CANalyzer分析窗口实现数据的导入/导出,以及记录文件的格式转换。

数据格式包括面向报文的格式和面向数据的格式。

  1. 输出数据格式
  2. 面向报文格式
    .asc可读文本文件,可由记事本打开
    .blf 支持多种总线协议,占用空间小
    .mf4 可用于和其他工具共享数据时使用
  1. 面向信号格式
    .csv、.mat、.mdf
    仅保存信号层级信息,所有报文属性的信息,比如报文ID、DLC等,都会丢失


Graphic导入/导出数据
Graphic窗口可以导入/导出面向信号格式的数据文件。

  1. 导出
    部分或全部信号,右击Graphic空白区→Export。


支持导出多种类型。


但只能导出当前右击的那个Graphic图窗中参与作图的信号(比如前面Graphic窗口中有6个信号,但参与作图显示只有前2个信号)。勾选需要导出哪些信号。


导入
与导出类似,右击Graphic空白区→Import。CANoe仅支持mdf格式,CANoe/CANalyzer支持多种数据类型,如下图时选择要导入数据文件的窗口。


选择数据文件后,会自动开始加载解析。解析完成后将展示数据文件中de 所有信号。然后根据需选择要导入的信号。


注意:导入的数据将按自己的时间戳显示。有时导入数据后可能Graphic窗口没有变化,可能就需要自适应调整X轴才能看到。
Trace导入导出数据
Trace窗口可以导入/导出面向报文格式的数据文件。
在加载数据库的情况下,Trace窗口也可以导出面向信号格式的文件。比如,Trace窗口的CAN报文可以在添加DBC文件解析出信号后保存下来。

  1. 导入
    右击Trace空白区→Import。可以选择要导入的数据类型。


还可以选择导入类型、时间段等。


比如下图导入时间段中数据。首先在选择数据文件后,右侧蓝框中显示了该数据文件中的时间戳信息。在左侧红框中设置时间段即可。


注意:此时导入的数据仅呈现在Trace窗口,不会像回放数据那样也同时显示在Graphic窗口中。

  1. 导出

右击Trace空白区→Export。支持导出多种类型(同Graphic导出的类型)。

当选择导出的数据类型为报文类型时,Extract按钮呈灰色不可选状态。

改为csv、mat、mf4等面向信号的文件,再点击Extract就可以识别出信号,然后选择个别信号导出。

注意:导出数据(信号)需要提前加载数据库文件,否则点击Extract按钮后下面将没有信号显示出来。

记录文件格式转换工具

在【Tools】菜单→Logging file conversion处打开该转换工具。

该插件仅支持面向报文格式的源文件,比如*.asc、*.blf和*.mf4等等,这些文件格式之间可以相互转换。

在有对应数据库文件的情况下,可以将面向报文格式的源文件转换导出为面向信号格式的目标文件。比如*.csv、*.mat和*.mdf。

当选择目标文件为面向报文格式的文件时,因为无需提取信号,所以同前导入/导出数据时一样,Extract按钮是灰色的。

将目标文件改为面向信号格式的文件时,Extract按钮是可用的。同前,提取信号后还可以勾选目标信号。

注意:转换的目标文件为面向信号的文件时,需要提前加载数据库文件,否则点击Extract按钮后下面将没有信号显示出来。

(7)发送模块CAN IG

IG是Interactive Generator的缩写,用于发送自定义报文,或数据库中的报文到CAN总线上。

  1. 添加CAN IG模块

首先需要在Configuration窗口选择Online模式,然后右击SEND节点上面的蓝色方块→Insert CAN Interactive Generator,即可添加CAN IG模块。

发送数据设置

双击前面添加的IG模块,可以打开CAN IG配置界面。该界面自上往下包括三部分:菜单栏、报文发送列表、信号/报文数据场。

  1. 添加报文

有如下3种方式添加要发送的报文。

从数据库添加的报文,通常通过Signals直接设置信号值。

Add CAN Frame添加的报文没有信号,所以只能在Raw Data页面设置各字节的原始数据。

报文触发方式

CAN IG模块支持多种发送方式,比如手动发送、按键发送、周期发送,以及基于其他报文或变量的发送方式等。

模式手动发送。点击CANoe/CANalyzer左上角的

按钮工程开始运行后,点击CAN IG窗口的

发送按钮,即可在Trace窗口观察到对应信号(图中报错是因为VN1640没有接到CAN网络)

可以将发送触发方式修改为:①基于键盘上的某个按键触发、②周期性触发,③选择总线上某一帧报文,当总线上出现该报文时触发发送动作。

CAN FD报文

CAN IG模块可以发送CAN FD报文,报文长度可以选择最长DLC=15(即64字节)。

注意:数据长度DLC=1~8的时候,这帧报文的长度就是1~8字节。DLC=9的时候长度就是8+4=12字节,而不是9字节。类似的DLC=15 的时候是64字节。即DLC≤8时与原CAN总线是一样的,DLC>8时是非线性增长的。

信号发生器

在信号数值列表中集成了信号发生器,支持设置信号的变化曲线。如下图所示,需要在CAN IG窗口的第三部分“信号/报文数据场”中Signal页面设置,在Generator Type列可以选择随即波、正弦等等。

点击General Control列的

图标,可以进行信号值的详细参数设置,比如正弦信号的幅值、周期等。

(8)可视化序列Visual Sequence

通过Visual Sequence工具可以指定简单的报文传输序列,执行一些总线相关的基本检查等等。

  1. 序列基础设置
    点击【Analysis & Simulation】菜单→Automation按钮,即可打开Automation Sequence配置窗口。


窗口左侧即为Visual Sequence的配置区域。点击New Sequence新建图标创建新的序列。


完成创建后打开Visual Sequence编辑窗口。编辑窗口主要分为两部分:①上方是功能或控制工具选项,包括序列的执行和停止、序列的检测和调试等等;②下方则是Sequence编辑区域。


在Visual Sequence中可以通过鼠标点击的方式,简单的配置一些自动化的测试序列。命令都是以表格的形式呈现的。
Command列是一些封装好的常用命令,包括check检测命令、if-else选择控制命令、send报文发送指令、wait等待指令、输出指令等。

  1. 报文发送配置
  2. 发送自定义报文
    首先在Command列选择send CAN raw frame;在Object列点击···设置CAN通道和ID。Operator列填充=。


Operand列设置数据场。Wait列设置本行指令开始执行后等待多长时间再执行下一行。


如果只设置这一行,则该条报文将只发送一次。

  1. 周期发送报文
    在下一行Command列选择send CAN cyclic raw frame;在Object列点击···设置和上一行相同的CAN 通道与ID。此时Operator列可选设置该报文的周期或者停止发送该报文。Operand列此时需要设置周期。
  1. 发送数据库中的报文
    若要发送数据库中的报文,则在下一行Command列选择send CAN cyclic frame;在Object列上此时将显示当前工程数据库中的CAN frame。


此时Operator列和前面设置报文周期发送时相同,可选设置该报文的周期或者停止发送该报文。Operand列此时需要设置周期。

  1. 修改发送数据库报文中的信号值

可以通过输入关键字的方式在Command列设置指令。要修改信号的值,需要使用set指令。

此时在Object列上此时将显示前面已设置的CAN frame中的信号。

Operator列和前面设置send CAN raw frame行类似,可选择=。Operand列此时会根据数据库解析出信号可以设置的值范围,或直接输入数值。

  1. 序列执行配置
  2. 设置Sequence执行时间
    以上设置的每行Sequence执行完成后相关报文便会停止发送。若要设置持续发送一定时间,需要在Command列设置wait指令实现。
    在Command列输入wait后,Operator列会自动变成时间单位ms,且不可修改。在Object列设置Sequence执行时间即可。
  1. Sequence检查
    Sequence设置完成后,点击Check按钮检查有效后,便可运行。
  1. Sequence执行
    可以手动执行,或在工程开启后自动执行。
    1. 手动执行
      CANoe/CANalyzer启动后Visual Sequence左侧的工具按钮会点亮。


点击一次

Start按钮Sequence中的所有序列执行一次。并且执行期间,后面的Stop

和Pause按钮会点亮。

    1. 自动执行
      当可以通过Sequence执行完成,报文不再发送时,Trace窗口相关报文会显示为灰色状态,如下图橙色框所示。
      若要在工程启动时自动开始执行Sequence序列,可以在启动工程前点击下图所示的

工具图标,按下后该按键将多出一个蓝框,表示处于开启状态。
开启自动执行后,将在下次工程开始后执行Sequence序列。


  1. 重复执行
    若要Sequence中的序列重复执行,则需要点击

工具图标。此时Sequence将执行到工程结束。
若点击

工具图标,Sequence中的序列也将一直执行到工程结束。


注意:开启上述2个图标后,可以在工程开启后通过

Start按钮开始重复执行到点击

Stop。

  1. 编辑Sequence
    可以通过右击某行,在非运行状态下注释或激活Sequence序列中的某一行命令。


如果右击某行后选择Insert new line,将在上方添加一个空行。

  1. Check指令
    可以添加一个check指令,检查某个信号的值是否满足要求。
    在Sequence序列执行期间,Check就会被执行,结果将显示在Write窗口中。
    如果Sequence序列是重复执行,如下图因为wait 1000ms所以大概每10s就会检查一次,直到测量结束。
  1. 在线调试
    通过debug mode按钮,可以单步运行或设置断点控制Sequence序列的执行。


此时开启工程,则点亮了step按钮

,点击一次执行Sequence序列中的一行,且下一次将要执行的行会处于黄色状态。


点击Configure配置按钮,可以打开Sequence option对话窗,可以设置将结果输出到write窗口或者csv文件中。


  1. 多序列设置

在Visual Sequence中可以同时添加多个Sequence序列。比IG模块更加灵活,比CAPL实现更加灵活方便,可以用于重复的网络模拟、检查、write窗口输出等。

编辑好的Sequence序列直接点击右上角叉号关闭Visual Sequence对话窗即可回到最初的Automation Sequence配置窗口,这里显示了所有Sequence序列。

点击

按钮可以编辑所选中的Sequence序列。带感叹号的序列是无效的。

工程开始后序列中间也会有start按钮

,点击开始后还会出现Stop和Pause按钮。

注意:Write窗口在【Home】菜单→More下打开。

(9)系统变量System Variable

系统变量一般用于表示没有在数据库中定义的,一些非总线的数据信号,如I/O信号等等。或者作为工程的全局变量,用于构建内部参数,比如连接面板和CAPL脚本之间的数据传递,是使用CANoe进行仿真、测试时使用的一种重要的数据。

  1. 普通系统变量
    点击新建按钮可以新建系统变量,可以定义变量的命名空间、名称、数据类型等多个属性。


命名空间NameSpace:类似文件夹的功能,可以将系统变量进行分类,便于查找使用。通过右侧的倒三角可以选择已经定义的Group。


保存位置Location:默认和系统工程保存在一起Configuration,这样在打开工程后即可访问该工程中的所有系统变量。也可将系统变量保存在独立的文件中,以导入到其他工程,方便工程间的数据共享。
点击Location栏最右侧的···Browse即可弹出系统变量保存位置设置对话窗。可以在“文件名”后输入一个新的名字,点击“打开”,再点击上图中的“Ok”在创建变量的同时,也会将当前变量保存到这个新创建的456_NewFile.vsysvar文件中。
也可以选择要已有的系统变量文件,即可将其加载进来。


属性Properties:可以设置变量的初始值、最小/最大值、单位信息。下面是系统变量的访问权限,通常采用默认设置。


结构体系统变量
还可以创建结构体类型的系统变量。其命名空间、变量名、保存位置的设置同前。
不同与普通系统变量,结构体变量具有成员变量Struct members定义区域,在其中可以定义一个或多个成员。各成员的属性设置同前面的单个系统变量设置。
且每设置完一个成员变量后,下方就会自动出现一个空行备用。
可以设置为固定长度和可变长度。
也可以通过每个成员变量右侧的↑↓箭头设置变量间的相对顺序。


普通系统变量在窗口左侧,结构体系统变量在右侧。点击

按钮,可以分别从文件导入变量,或导出变量到文件。


若要编辑已经创建好的变量,可以点击该变量后,再点击工具栏中带铅笔的图标



查看系统变量
在Symble explorer符号浏览器下点击Variables变量视图,即可查看当前工程中的系统变量。可见,变量已按Group进行了分组管理。


(10)Symbol Panel和Node Panel工具
在CANoe/CANalyzer中,可以通过Symbol Panel和Node Panel工具直接修改总线信号或变量的数值。

  1. Symbol Panel

在【Environment】菜单→Symble explorer下右击要修改值的信号→Change Value即可打开Symbol Panel,以修改变量值。

与CANape标定窗口类似,可以通过直接输入数值、滑块、设置步长和比例因子的多种方式修改变量的值。当勾选上图蓝框中的Explicit commit后,修改变量值并回车时不会立即发送新值,只有在点击右侧commit按钮会才会开始发送。上图绿框中显示的是信号的属性,包括最值、初始值、周期等,是在数据库中定义的。

修改系统变量与之类似,只是要在Symble explorer中切换到Variables变量视图。

在CANoe中导入的A2L文件的参数、VT板卡的相关参数、以及外部I/O的信号等等都是以系统变量的形式存在的,可以通过Symbol Panel进行变量的读写操作。

在一些分析窗口中,也可以打开并配置Symbol Panel。右击Data窗口中目标信号或变量→Change Value也可以打开Symbol Panel。

注意;通过以上方式修改的信号值,都是其物理值,总线二进制原始数值会通过数据库自动转换。

Node Panel

Node Panel可以在CANoe工程运行期间配置CAN、LIN、Flexray总线信号。使用Node Panel前,需要首先配置和数据库关联的仿真节点。

  1. 仿真节点配置

在Simulation setup窗口右击总线→Insert Network Node添加新的节点。

然后右击新增的节点→Configuration,打开节点配置窗口。

然后选择数据库中的节点,与仿真节点关联。

Node Panel

然后右击节点→Open Node Panel即可打开该节点的Node Panel。

可以看到数据库中与该节点关联的信号。Node Panel有多个视图:

① Signals视图:可以显示该节点所有发送的信号,可以设置信号的物理值、原始值、符号值。一旦输入完成,信号的值就会立即更新到总线。

② Message视图:分组显示该节点发送的报文。修改数值后,只有点击右上角的Update按钮才会开始发送更新值。

单击报文所在行,还可以设置禁止和使能该报文的发送。

③ RX Nodes视图:按照信号的接收节点分类显示。

此外,在Simulation setup窗口右击Network节点→Open Network Panel。将显示整个网络中通信的所有信号。配置方式和Node Panel类似。

(11)面板设计器Panel Designer

  1. 工具界面

在CANoe/CANalyzer运行过程中,可以通过面板Panel显示、控制信号和系统变量。在【Tools】菜单→Panel Designer下打开面板设计器。

Panel Designer的窗口界面主要分为以下几个部分:

  • 中间是编辑器区Working area区域;
  • 左侧是Symbol explore可以访问工程中加载的数据库和系统变量;
  • 右侧是Tool box工具箱,包括所有可用的控件,可以通过拖拽或双击的方式将空间添加到编辑区;
  • Properties属性编辑窗口,列出了当前所选控件的所有属性;
  • 上方是菜单栏,方便快速设计面板;
  • 下方是Output window窗口,可以显示当前面板的一些错误提示信息,比如控件没有和具体的变量关联等。

面板工具

  1. 面板设计流程

典型的面板设计包括以下几步:

  • ① Assigning controls:在Tool box中选择需要的控件
  • ② Assigning symbols:在Symbol explore选择目标信号的变量与控件关联
  • ③ Editing Properties:编辑控件相关属性

控件分类

控件按功能可以分为以下几种类型:

① Display Elements:显示类的控件

② Control Elements:控制类控件

③ Combined Control and Display Elements:兼具显示和控制功能的控件

④ Special Controls:其他特殊控件

面板设计

从Tool box将所需控件拖拽到编辑区,再从Symbol explore将目标变量拖拽到控件上,即可实现控件和变量的关联。如下图,关联后窗口底部将显示控件名,和所关联的信号。

选择某个控件后,可以再菜单栏编辑属性,比如显示信号的最大值/最小值、显示方向等等。可以通过鼠标拖动对控件进行大小缩放,如下图黄色双向箭头所示。

保存面板时,低版本的CANoe/CANalyzer在save as对话窗默认勾选了Add Panel to configuration,将面板加载到当前工程中。

而高版本(下图是CANalyzer 18)则在设置好保存文件名点击保存后弹出下图的Add to project对话窗。

面板使用

在【Home】菜单→Panel工具下的“View”处,可以看到当前工程中加载的各个面板。鼠标放在面板所在行的右侧将出现···,点击后可以选择Edit,即打开该面板的设计界面。还可以在“New”处点击Add Panel,即加载面板文件到当前工程中。

更换控件图片

有些控件支持更换图片,进行个性化设置。如下图选中Switch按钮,→Properties属性菜单→Image file更换图片。

保存面板文件后,回到CANoe/CANalyzer界面面板就已经自动更新。

背景图不能是矢量图,只能是jpg、png、bmp等位图格式。另外,对于上面示例的Switch控件,表示的是状态切换,当设定状态数目并导入图片后,软件会将图片长度(或宽度)按照状态数目+1等分。第一等分是默认状态,其余等分对应Switch value中设置的状态数值,

特殊控件

有些控件不需要关联到具体的信号或者系统变量。

① Group box:用于将其他空间分组,方便显示盒管理

与PPT类似,后来插入的控件会在前面已插入控件的上一层。而Group box控件通常要放置在最底层。选中控件后→【Home】菜单→send to back即可将其调低一个层级。

② Panel control button:可以关联其他面板,使当前面板作为主面板,点击该按钮后即可打开其他面板。

如下是给一个Panel control空间关联一个Reference panel,点击它即可打开参考面板。

③ Clock Control:系统时钟,可以显示电脑的系统时间。

④ Start/Stop:启动/停止按钮,用于启动或停止工程的运行。

工程面板管理

在【Home】菜单→Panel→Panel Configuration下,可以打开面板配置对话窗。

在该对话窗中可以对工程中的所有面板进行统一管理。

(12)CAPL语言

  1. 简介

CAPL是CANoe软件自有的、类C的编程语言,封装有丰富的函数库,能够帮助使用者实现CANoe的仿真、测试功能。

CAPL中的脚本需要和软件中的节点关联起来,当CANoe启动时,CAPL中的程序才能伴随工程的运行使能工作。

使用CANoe的仿真和测量功能时,可以在2个地方添加与CAPL脚本关联的节点。

① 在Simulation Setup窗口中,我们可以添加一个仿真的网络节点,或者是选择网络中已有的节点,与CAPL脚本关联。

② 在Measurement Setup窗口中,在功能模块上添加CAPL编程节点。通常将实现数据过滤、分析等功能的节点添加到这里。

  1. Simulation Setup窗口添加CAPL
    右击网络拓扑图新建节点。


再右击节点选择配置选项。


这将打开节点配置Node configuration窗口,其下方就是配置所关联的CAPL文件的区域。


点击上图的file,即弹出Open对话窗,选择一个现有的CAPL文件(*.can),或者输入一个新的文件名,点击Open后将创建一个CAPL文件。


如此,就创建好了与该节点管理的CAPL文件。
在使用CANoe的测试功能的时候,也可以添加CAPL的测试节点,如下是添加测试节点,然后即可右击该节点添加对应的CAPL文件。


Measurement Setup窗口添加CAPL
在Measurement Setup分析窗口的左侧右击蓝色方块→Insert Program Node,


然后右击该编程节点→Configuration。


将弹出编程节点配置对话窗。同前,可以在点击select后输入新的CAPL文件名,或者选择一个已有的CAPL文件。


CAPL文件编辑界面
双击节点上的铅笔工具即可打开CAPL编辑界面。


上方是Main Menu编辑功能菜单区,包括CAPL代码注释、程序编译、CANoe环境导入等功能按钮
左侧是CAPL程序架构浏览树Browser Tree,显示CAPL文件中所有已定义的函数、以及对应的事件
右侧是CAPL函数库访问区以及符号访问区Symbol and Functions。
CAPL自带丰富的通信相关函数。作为CANoe自带的编程语言,CAPL可以更方便地访问CANoe中加载的环境,包括数据库中的报文、信号,以及系统变量等。
中间是CAPL的编辑区Text Editor,可进行CAPL脚本的编辑、开发工作
下方是Output窗口,会显示CAPL脚本的编译结果,提示相关错误


CAPL常用事件

  1. CAPL语言的特点

CAPL(Communication Access Programming Language)是CANoe自带的用于通信访问的编程语言,主要有以下几个特点:

  • CAPL是一种类似于C语言的过程性语言,语法相比C语言更简单,易上手
  • CAPL脚本的编辑开发是在CAPL Browser中进行,是CANoe自带的开发环境,可以从工程直接进入访问
  • 作为CANoe自带的编程语言,相比其他第三方编程语言,可以更容易的访问CANoe工程中的数据,包括数据库中的报文、信号,以及系统变量等。
  • CAPL支持大量的预定义函数
  • CAPL程序的执行由事件控制:CANoe工程运行过程中,CAPL中的程序由事件触发执行
  1. 事件触发
    CAPL中的程序由事件触发而开始执行,这与其他语言中常见的按顺序执行的方式有所不同,在顺序执行流中,子历程或过程函数会按照代码编写安排的先后顺序、依次执行。而CAPL完全由事件驱动,只有在工程运行时发生指定的事件,才会调用和执行事件过程中的程序。
    比如下图中,CANoe运行过程中收到CAN报文,或收到错误帧才会触发对应的程序EventProc.1。


所以,工程运行过程中我们并不清楚哪一段程序会最先执行,但事件多次触发时,比如接收到周期性的CAN报文,会重复性的执行相关的事件程序。

  1. 常见的CAPL事件
    了解CAPL运行的机制后,来看下CAPL中几种常见的事件。
    CAPL能对不同的事件作出反应,对于每种类型的事件,都存在特定的事件过程。CAPL中常见的事件类型如下。
    ① CANoe工程运行开始:句柄on start
    ② CANoe工程停止,句柄on stopmeasurement
    ③ 总线报文接收,句柄on message + ID或报文名
    ④ 时间触发,句柄是on timer+计时器名称
    CAPL可以定义计时器Timer,并设置时间开始计时,当时间到达时触发时间Timer事件,句柄是on timer+计时器名称。一般用于使用CAPL周期性发送报文,或延时处理
    CANoe工程也能感知外设输入,比如按键触发,句柄on key+按键。
  1. 键盘事件示例
    首先双击节点上的铅笔图标,打开CAPL编辑界面,并在空白区输入以下代码,然后点击【Home】菜单→Compile编译,并在下方Output窗口查看编译结果。


代码无问题后,最小化CAPL界面,回到CANoe界面运行工程,按下A键,可以看到Write窗中CAPL脚本打印的信息。


发送报文Send message
CAPL发送一条报文分为3步:
① 定义一条message类型的报文变量
② 对报文变量进行赋值操作
③ 使用发送函数将报文发送出去

  1. 发送任意报文
    下面打开的是与仿真节点关联的CAPL文件。仿真节点CAPL的运行是事件触发的,先定义按键事件,然后在事件的程序体中定义报文内容,并发送出去。
    ① 定义报文变量
    如下代码将定义一条ID=0x1A,报文名msg1的报文:
    Message 0x1A msg1;
    ② 报文变量进行赋值
    可以把Message理解为CAPL中的结构体变量,报文的一些属性,如DLC值、数据场内容等,都可以通过结构体的属性进行设置。
    在CAPL中,Message的属性称为selector,发送一条报文,通常可以访问如下selector,


③ 发送报文
在CAPL中使用output函数发送报文。
以上示例的CAPL代码如下,其中未定义的字节将填充00。


on key ‘a’
{
message 0x1A msg1;
msg1.dlc = 4;
msg1.byte(0) = 0x55
msg1.byte(1) = 0xff;
output(msg1);
}
发送数据库报文
设置触发条件为按键B。
① 定义报文变量
此时可以不使用ID定义报文,而是数据库中的报文名。可以从右侧符号浏览器拖拽一帧报文到代码的message关键字后。


② 报文变量进行赋值
前面发送任意帧报文时,需要对报文数据场的每个字节进行定义,而发送数据库报文时可以直接对解析后的信号进行赋值。输入代码对信号赋值时有相关提示,如下图。


③ 发送报文
同前使用output函数发送报文。
on key 'b'
{
message Enginestate msg2;
msg2.Enginespeed =100;
msg2.onOff =1;
output (msg2);
}
信号和系统变量访问Access Signal

  1. 发送信号

前文提到仿真节点CAPL的运行是事件触发的,信号的发送和信号值的改变都可以作为CAPL中触发程序执行的事件:

on signal_update + 信号:对应的事件是信号的发送,只要信号发送到总线上事件就回触发执行

On signal + 信号:对应的事件是信号值改变,当信号发送到总线上且信号值改变时事件触发执行

如下是上述2种情况的示例代码。

//on signal +<signal name>:当信号值改变时触发执行

on signal signalA

{

write("1,signal value is change");

}

//on signal update +<signal name>:当信号发送到总线上时触发

on signal update signalA

{

write("2,signal is send to the bus");

}

当使用下图的Panel点击Trigger发送信号时,触发第二条事件(红框);当该修改信号值回车后该信号新值发送到总线上,将触发以上2个事件(蓝框)。

获取信号值

有2种方式获取信号的值:

使用函数getsignal(),函数返回值是获取的信号值。

使用“$+数据库中的信号名”获取信号值,也可以用于给信号赋值。

在前面的脚本基础上增加以上2种获取信号值的代码如下。

// on signal +<signal name>:当信号值改变时触发执行

on signal signalA

{

write("1,signal value is change");

sigValue = getsignal(signalA); // 获取信号值,方法1

write("sig value is sf",sigValue); // 输出到write查看

write("sig value is sf",$signalA); // 获取信号值,方法2

}

给信号赋值

有2种给信号赋值:

使用函数setsignal(),

使用“$+数据库中的信号名”给信号赋值,也可以用于获取信号值。

使用如下代码分别在按下ab按键时给信号赋值5或10。注意其中的信号名可以从symbol explorer中拖拽。

on key 'a' // 通过set signali函数将信号值更改为5

{

setsignal(signalA,5);

}

on key 'b' // 通过$+signal name 将信号值更改为10

{

$signalA =10;

}

系统变量相关函数

与本节前面“发送信号”中类似,系统变量的激活和系统变量值的改变都可以作为CAPL中触发程序执行的事件:

on sysvar_update + 系统变量:对应的事件是信号的发送,只要信号发送到总线上事件就回触发执行

On sysvar + 系统变量:对应的事件是信号值改变,当信号发送到总线上且信号值改变时事件触发执行

如下是上述2种情况的示例代码。

// on sysvar +<variable name>:当系统变量的值改变时触发

on sysvar SysDemo::sysVar 1

{

write("1,variable value change");

}

// on sysvar update +<variable name>: 当系统变量激活时触发

on sysvar update SysDemo::sysVar1

{

write("2,variable is trigger");

}

系统变量的访问函数

系统变量的访问函数与系统变量的类型有关,如对int型系统变量赋值需要使用sysSetVariableInt函数。

on key

{

sysSetVariableInt(sysvar::SysDemo::sysVar 1,3);

sysGetVariableInt(sysvar::SysDemo::sysVar 1,varValue);

write("var value is d"varValue);

}

对于简单类型的系统变量,还有一个更加简单的方式获取或设置系统变量的值。

on key 'd'

{

@SysDemo::sysvar 1=5;

write("sysvar value is d",@SysDemo::sysVar 1);

}

[1] 【官方自制】CANoe/CANalyzer基础教程合集(已完结)共18P

GitHub 加速计划 / ca / canal
43
10
下载
alibaba/canal: Canal 是由阿里巴巴开源的分布式数据库同步系统,主要用于实现MySQL数据库的日志解析和实时增量数据订阅与消费,广泛应用于数据库变更消息的捕获、数据迁移、缓存更新等场景。
最近提交(Master分支:21 天前 )
af937544 - 1 个月前
9f2fc740 - 1 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐