Selectors

说实话,我到现在还是很难理解这个selector应该翻译成什么

我把它理解成是类里面的属性,类的实例化对象可以通过:对象.属性,来获取或设置属性

Message

CAN/CAN FD消息的属性

这里先复习下如何创建CAN/CAN FD消息对象

一种是可以通过message关键字定义can或can fd消息

用法如下:

message 0xA m1;
message 100 m2;
message EngineData m3;  

可以用message id来定义一条can/can fd消息,id可以是16进制,也可以是10进制,也可以用导入的DBC里的消息名称定义can消息

如果你想为指定CAN通道定义can/can fd消息,还可以这样定义

message CAN1.0xA m1;
message CAN2.100 m2;  

还有一种是通过on message来获取消息,然后用this表示获取到的消息,再用this.属性来获取或设置这个属性

  • CAN

word,2个字节,获取已接收的can/can fd消息的传输通道,或设置要发送的can/can fd消息的传输通道

  • MsgChannel

word,2个字节,获取已接收的can消息的传输通道,或设置要发送的can消息的传输通道

虽然CAN和MsgChannel在使用上没有差别,但是我觉得CAN最好用在设置can消息的通道上,而MsgChannel用在获取can消息的通道上

  • ID

dword,4个字节,获取或设置can消息的message id

  • DIR

byte,1个字节,获取或设置can消息的传输方向

0表示Rx,1表示Tx

当然也可以用关键字Rx、Tx、TXREQUEST来表示

on message 0x100 {
  if (this.DIR == Rx) {
    write("message 0x100 received");
  }
  if (this.DIR == Tx) {
    write("message 0x100 sent");
  }
}
  • RTR

byte,1个字节,获取或设置can消息是否是远程传输请求

0 = no RTR
1 = RTR

  • DLC

byte,1个字节,Data Length Code,数据长度,CAN消息的数据字节数为0-8,CAN FD为0-64

  • DataLength

byte,1个字节,数据字节数

  • TIME_NS

int64,只读,消息的时间点,单位为纳秒

  • Byte(x)

byte,1个字节,获取或设置以x为下标开始的1个字节

  • Word(x)

word,2个字节,获取或设置以x为下标开始的2个字节组成的一个word

  • DWord(x)

dword,4个字节,获取或设置以x为下标开始的4个字节组成的一个dword

  • QWord(x)

qword,8个字节,获取或设置以x为下标开始的8个字节组成的一个qword

  • char(x)

char,字符,获取或设置以x为下标开始的1个字节表示的字符

其他的还有int(x)、long(x)、int64(x)、float(x)、double(x),不再详细说明

CAPL学习之路-CAN有关的CAPL函数_can

  • MsgFlags

dword,4个字节,只读,如果设置了多个标志,则它们的值将进行逻辑或运算

CAPL学习之路-CAN有关的CAPL函数_capl_02

  • SIMULATED

byte,1个字节,获取或设置消息是否由模拟CAPL节点发送,0(否)、1(是)

  • FDF

CAN FD格式指示符,0表示CAN消息,1表示CAN FD消息

  • BRS

Bit Rate Switch,仅适用于CAN FD消息

0:数据段使用仲裁比特率
1:数据段使用数据比特率

所以,在定义CAN FD消息时,FDF和BRS这两个属性都要设置

  • FrameCRC

dword,4个字节,只读,获取消息的checksum

其他can/can fd message属性请自行查询helper文档,查询时要注意以下几点

CAPL学习之路-CAN有关的CAPL函数_capl_03

  • Type是属性的数据类型
  • Access Limitation是属性访问权限,包括可读和可写
  • CAPL-on-Board表示是否可以通过CAPL读和写

比如name这个属性,就无法通过CAPL读写,无法通过CAPL读写的属性,没有在此篇文章中介绍,感兴趣的自行翻阅helper文档

ErrorFrame

错误帧的属性

错误帧并不需要用message id去定义,所以你也无法用id来获取它的message id,用关键字errorFrame来表示错误帧

错误帧的发送,我们可以通过output这个函数来实现

CAPL学习之路-CAN有关的CAPL函数_capl_04

output函数可以实现发送一条消息或一条错误帧

output(errorFrame);//在CAN1通道上发送错误帧  
output(CAN2.errorFrame);//在CAN2通道上发送错误帧

除了第一个通道之外,所有其他通道的关键字errorFrame都必须用CAN通道的编号来限定

也就是说

CAN1通道的错误帧可以用errorFrame来表示,其他通道的错误帧,必须用CANx.errorFrame(x为通道几)来限定

当然,函数canOutputErrorFrame也可以发送错误帧,具体用法见下面介绍这个函数时的用法

错误帧的接收,可以用事件处理函数on errorFrame接收,关键字this表示接收到的错误帧

当然,收到过载帧也会调用on errorFrame

  • CAN

word,2个字节,获取或设置error帧的can通道

  • MsgChannel

word,2个字节,获取或设置error帧的can通道

  • Time_ns

Int64,错误帧的时间戳,单位为纳秒

Event Procedures

CAN/CAN FD消息的事件程序,也就是收到CAN/CAN FD相关事件时会触发此类回调函数

on errorFrame

当接收到错误帧或过载帧时,触发此事件

on message

当接收到CAN/CAN FD消息时,触发此事件

on signal

当信号值改变时,触发此事件

on signal_change

当信号值改变时,触发此事件

on signal_update

当信号值更新时,触发此事件

Events of CAN controller

CAN控制器的事件处理程序

on busOff

CAN控制器进入bus off状态时,触发此事件

on errorActive

CAN控制器进入ErrorActive状态时,触发此事件

on errorPassive

CAN控制器进入ErrorPassive状态时,触发此事件

on warningLimit

CAN控制器到达warning limit时,触发此事件

General Functions

canGetDataLength

返回can/can fd消息的有效payload数据的长度

canOutputErrorFrame

向CAN总线输出错误帧,显性位的数量和随后的隐性位的数量作为参数给出

CAPL学习之路-CAN有关的CAPL函数_canoe_05

isStdId

检查是否是标准帧

可以传入message id,也可以传入message作为参数

返回的结果,1是标准帧,0不是

标准帧的id为11个bit,扩展帧的id为29个bit,且扩展帧的id在capl中后面要加x表示

isExtId

检查是否是扩展帧,用法和上面一样

mkExtId

返回扩展帧id

传入的参数是message id,返回的结果也是message id,所以这个函数的用途是什么

把标准帧转换成扩展帧,我觉得应该是这个目的

output

发送can/can fd消息或错误帧

variables 
{
  message can2.125 msg = {dlc = 1, byte(0) = 1};
}
on key F1 
{
  output (msg); // output Message
}  
on key F10 
{
  output(errorFrame);//output Error Frame on CAN channel 1
}
on CAN2.errorFrame 
{
  output (CAN3.errorFrame);// output Error Frame on CAN channel 3
}

valOfId

返回与其类型无关的message id的值

参数可以是message,也可以是message id

canConfigureBusOff

设置总线状态为BusOff

用法如下:

CAPL学习之路-CAN有关的CAPL函数_capl_06

CANdb API

CAN dbc数据库相关接口函数

getFirstCANdbFilename

找到第一个配置的dbc数据库的文件名

传入字符串类型的行参,数据库的文件名将会保存在行参内

这个函数不能用在Simulation/Test setup中,这点千万要注意

以前在查阅helper文档的接口函数时,下面红框内从来没仔细看过

CAPL学习之路-CAN有关的CAPL函数_canoe_07

Availability:表示此函数的可用性
Since Version:表示从哪个版本的CANoe APP以后可用
Restricted To:表示此函数限制在哪个功能内使用
Measurement Setup:表示measurement setup下是否可用(黑点代表可用)
Simulation/Test Setup:表示Simulation/Test Setup下是否可用(横线代表不可用)

以前一直没关注这个可用性,千万千万要留意

getFirstCANdbName

找到第一个配置的dbc数据库的名称

这里不是dbc文件名,而是配置时在Simulation Setup界面的名称

CAPL学习之路-CAN有关的CAPL函数_capl_08

getMessageAttrInt

从数据库中获取消息属性的值

GetMessageID

根据消息名称获取消息id

GetMessageName

根据消息id获取消息名称

getNextCANdbFilename

找到其他配置的dbc数据库的文件名

getNextCANdbName

找到其他配置的dbc数据库的名称

setSignalStartValues

将消息中的信号值设置为数据库中定义的起始值

Hardware API

硬件的接口函数,主要指CAN控制器

canActivateTxSelfAck

激活/停用CANoe中定义通道的传输自确认功能

什么是TX Self-ACK

Vector硬件接口可以在传输CAN消息时自动生成确认。这允许在不连接其他有源CAN控制单元的情况下模拟网络。在这种情况下,所使用的CAN通道仍必须由电负载电阻器终止。如果不支持 Self-ACK,则在测量开始时Write窗口中将出现错误消息

canFdGetConfiguration

获取用于仲裁和数据阶段的CAN控制器参数

canFdSetConfiguration

为仲裁和数据阶段设置CAN控制器参数

canFlushTxQueue

刷新通道的Tx队列

canGetConfiguration

读取CAN控制器参数

canSetChannelAcc

通过接受过滤器将接收到的消息发送到CANoe

canSetChannelMode

激活/停用CAN控制器的TXRQ

canSetChannelOutput

定义CAN控制器对总线流量的响应并设置ACK位

canSetConfiguration

设置CAN控制器参数

getCardTypeEx

确定CAN通道的卡类型

CAPL学习之路-CAN有关的CAPL函数_canoe_09

可以看出,这个函数可以获取到CANoe硬件的型号

getChipType

确定使用的CAN控制器的类型

resetCan

重置CAN控制器。可用于在BUSOFF后重置CAN控制器或激活配置更改。由于该功能的执行需要一些时间并且CAN控制器与总线短暂断开,因此执行此操作时可能会丢失消息

ResetCanEx

重置一个指定CAN通道的CAN控制器

ScanBaudrateActive

确定给定通道的波特率

ScanBaudratePassive

开始扫描并检测给定通道上的波特率

setBtr

设置另一个波特率

setCanCabsMode

设置各种CANcab模式

setOcr

设置输出控制寄存器。直到下一次调用函数resetCan()时,这些值才会变为活动状态

Statistics API

统计各种数据的接口函数

canResetStatistics

重置CAN Statistics界面

CAPL学习之路-CAN有关的CAPL函数_capl_10

BusLoad

获取CAN通道的busload负载

ChipState

获取CAN控制器的当前芯片状态

ErrorFrameCount

获取自测量开始以来通道上的错误帧数

ErrorFrameRate

获取当前通道的CAN错误帧比率

ExtendedFrameCount

获取自测量开始以来通道上CAN扩展帧的数量

ExtendedFrameRate

获取通道上CAN扩展帧的当前速率,单位为每秒消息数

ExtendedRemoteFrameCount

获取通道上CAN远程扩展帧的数量

ExtendedRemoteFrameRate

获取通道上CAN远程扩展帧的当前速率,单位为每秒帧数

helper文档里上面这两个函数的介绍挺搞笑,搞反了

CAPL学习之路-CAN有关的CAPL函数_capl_11

OverloadFrameCount

获取自测量开始以来通道上的CAN过载帧数

OverloadFrameRate

获取通道上CAN过载帧的当前速率,单位为每秒消息数

PeakLoad

获取通道的峰值负载,也就是负载的最大值

RxChipErrorCount

获取通道接收器中的当前Rx错误计数,看起来应该是CAN通道CANoe接收到的错误帧的数量

StandardFrameCount

获取自测量开始以来通道上CAN标准帧的数量

StandardFrameRate

获取通道上CAN标准帧的当前速率,单位为每秒消息数

StandardRemoteFrameCount

获取自测量开始以来通道x上CAN标准远程帧的数量

StandardRemoteFrameRate

获取通道上CAN标准远程帧的当前速率

TxChipErrorCount

获取通道的CAN接收器中的当前Tx错误数,看起来应该是CAN通道CANoe发送的错误帧的数量