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),不再详细说明
-
MsgFlags
“
dword,4个字节,只读,如果设置了多个标志,则它们的值将进行逻辑或运算
”
-
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文档,查询时要注意以下几点
“
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
-
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总线输出错误帧,显性位的数量和随后的隐性位的数量作为参数给出
”
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学习之路-CAN有关的CAPL函数