其他分享
首页 > 其他分享> > CAPL学习之路-CAN有关的CAPL函数

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

作者:互联网

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.属性来获取或设置这个属性

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

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

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

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

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");
  }
}

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

0 = no RTR
1 = RTR

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

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

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

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

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

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

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

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

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

Data Access

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

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

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

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

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

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

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

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

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

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

ErrorFrame

错误帧的属性

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

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

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

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

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

也就是说

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

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

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

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

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

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

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总线输出错误帧,显性位的数量和随后的隐性位的数量作为参数给出

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

用法如下:

CANdb API

CAN dbc数据库相关接口函数

getFirstCANdbFilename

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

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

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

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

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

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

getFirstCANdbName

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

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

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通道的卡类型

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

getChipType

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

resetCan

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

ResetCanEx

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

ScanBaudrateActive

确定给定通道的波特率

ScanBaudratePassive

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

setBtr

设置另一个波特率

setCanCabsMode

设置各种CANcab模式

setOcr

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

Statistics API

统计各种数据的接口函数

canResetStatistics

重置CAN Statistics界面

BusLoad

获取CAN通道的busload负载

ChipState

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

ErrorFrameCount

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

ErrorFrameRate

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

ExtendedFrameCount

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

ExtendedFrameRate

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

ExtendedRemoteFrameCount

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

ExtendedRemoteFrameRate

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

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

OverloadFrameCount

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

OverloadFrameRate

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

PeakLoad

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

RxChipErrorCount

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

StandardFrameCount

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

StandardFrameRate

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

StandardRemoteFrameCount

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

StandardRemoteFrameRate

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

TxChipErrorCount

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


标签:函数,字节,之路,CAPL,获取,消息,message,id,通道
来源: https://blog.csdn.net/wjz110201/article/details/122093111