CANoe+CANalyzer基础教程合集(二)

格式整理的不好,可参考知乎文章: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分析窗口实现数据的导入/导出,以及记录文件的格式转换。
数据格式包括面向报文的格式和面向数据的格式。
- 输出数据格式
- 面向报文格式
.asc可读文本文件,可由记事本打开
.blf 支持多种总线协议,占用空间小
.mf4 可用于和其他工具共享数据时使用


- 面向信号格式
.csv、.mat、.mdf
仅保存信号层级信息,所有报文属性的信息,比如报文ID、DLC等,都会丢失


Graphic导入/导出数据
Graphic窗口可以导入/导出面向信号格式的数据文件。
- 导出
部分或全部信号,右击Graphic空白区→Export。


支持导出多种类型。


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


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


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


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


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


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


注意:此时导入的数据仅呈现在Trace窗口,不会像回放数据那样也同时显示在Graphic窗口中。
- 导出
右击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总线上。
- 添加CAN IG模块
首先需要在Configuration窗口选择Online模式,然后右击SEND节点上面的蓝色方块→Insert CAN Interactive Generator,即可添加CAN IG模块。


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


- 添加报文
有如下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工具可以指定简单的报文传输序列,执行一些总线相关的基本检查等等。
- 序列基础设置
点击【Analysis & Simulation】菜单→Automation按钮,即可打开Automation Sequence配置窗口。


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


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


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




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


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


如果只设置这一行,则该条报文将只发送一次。
- 周期发送报文
在下一行Command列选择send CAN cyclic raw frame;在Object列点击···设置和上一行相同的CAN 通道与ID。此时Operator列可选设置该报文的周期或者停止发送该报文。Operand列此时需要设置周期。


- 发送数据库中的报文
若要发送数据库中的报文,则在下一行Command列选择send CAN cyclic frame;在Object列上此时将显示当前工程数据库中的CAN frame。


此时Operator列和前面设置报文周期发送时相同,可选设置该报文的周期或者停止发送该报文。Operand列此时需要设置周期。
- 修改发送数据库报文中的信号值
可以通过输入关键字的方式在Command列设置指令。要修改信号的值,需要使用set指令。


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


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




- 序列执行配置
- 设置Sequence执行时间
以上设置的每行Sequence执行完成后相关报文便会停止发送。若要设置持续发送一定时间,需要在Command列设置wait指令实现。
在Command列输入wait后,Operator列会自动变成时间单位ms,且不可修改。在Object列设置Sequence执行时间即可。


- Sequence检查
Sequence设置完成后,点击Check按钮检查有效后,便可运行。


- Sequence执行
可以手动执行,或在工程开启后自动执行。 -
- 手动执行
CANoe/CANalyzer启动后Visual Sequence左侧的工具按钮会点亮。
- 手动执行


点击一次


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


和Pause按钮会点亮。


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


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


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


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


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


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


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


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


如果右击某行后选择Insert new line,将在上方添加一个空行。
- Check指令
可以添加一个check指令,检查某个信号的值是否满足要求。
在Sequence序列执行期间,Check就会被执行,结果将显示在Write窗口中。
如果Sequence序列是重复执行,如下图因为wait 1000ms所以大概每10s就会检查一次,直到测量结束。


- 在线调试
通过debug mode按钮,可以单步运行或设置断点控制Sequence序列的执行。


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


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


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




- 多序列设置
在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进行仿真、测试时使用的一种重要的数据。
- 普通系统变量
点击新建按钮可以新建系统变量,可以定义变量的命名空间、名称、数据类型等多个属性。


命名空间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工具直接修改总线信号或变量的数值。
- 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前,需要首先配置和数据库关联的仿真节点。
- 仿真节点配置
在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
- 工具界面
在CANoe/CANalyzer运行过程中,可以通过面板Panel显示、控制信号和系统变量。在【Tools】菜单→Panel Designer下打开面板设计器。


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


面板工具
- 面板设计流程
典型的面板设计包括以下几步:
- ① 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语言
- 简介
CAPL是CANoe软件自有的、类C的编程语言,封装有丰富的函数库,能够帮助使用者实现CANoe的仿真、测试功能。
CAPL中的脚本需要和软件中的节点关联起来,当CANoe启动时,CAPL中的程序才能伴随工程的运行使能工作。
使用CANoe的仿真和测量功能时,可以在2个地方添加与CAPL脚本关联的节点。
① 在Simulation Setup窗口中,我们可以添加一个仿真的网络节点,或者是选择网络中已有的节点,与CAPL脚本关联。
② 在Measurement Setup窗口中,在功能模块上添加CAPL编程节点。通常将实现数据过滤、分析等功能的节点添加到这里。
- 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常用事件
- CAPL语言的特点
CAPL(Communication Access Programming Language)是CANoe自带的用于通信访问的编程语言,主要有以下几个特点:
- CAPL是一种类似于C语言的过程性语言,语法相比C语言更简单,易上手
- CAPL脚本的编辑开发是在CAPL Browser中进行,是CANoe自带的开发环境,可以从工程直接进入访问
- 作为CANoe自带的编程语言,相比其他第三方编程语言,可以更容易的访问CANoe工程中的数据,包括数据库中的报文、信号,以及系统变量等。
- CAPL支持大量的预定义函数
- CAPL程序的执行由事件控制:CANoe工程运行过程中,CAPL中的程序由事件触发执行
- 事件触发
CAPL中的程序由事件触发而开始执行,这与其他语言中常见的按顺序执行的方式有所不同,在顺序执行流中,子历程或过程函数会按照代码编写安排的先后顺序、依次执行。而CAPL完全由事件驱动,只有在工程运行时发生指定的事件,才会调用和执行事件过程中的程序。
比如下图中,CANoe运行过程中收到CAN报文,或收到错误帧才会触发对应的程序EventProc.1。


所以,工程运行过程中我们并不清楚哪一段程序会最先执行,但事件多次触发时,比如接收到周期性的CAN报文,会重复性的执行相关的事件程序。
- 常见的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+按键。


- 键盘事件示例
首先双击节点上的铅笔图标,打开CAPL编辑界面,并在空白区输入以下代码,然后点击【Home】菜单→Compile编译,并在下方Output窗口查看编译结果。


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


发送报文Send message
CAPL发送一条报文分为3步:
① 定义一条message类型的报文变量
② 对报文变量进行赋值操作
③ 使用发送函数将报文发送出去
- 发送任意报文
下面打开的是与仿真节点关联的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
- 发送信号
前文提到仿真节点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);
}




更多推荐
所有评论(0)