getFirstCANdbFilename
CAPL 函数 >> CAN >> getFirstCANdbFilename
函数语法
dword getFirstCANdbFilename( char buffer[], dword size);
描述
获取第一个已分配数据库的文件名。
参数
buffer:用于存储数据库文件名的缓冲区size:缓冲区大小(字节)
返回值
成功时返回非 0,失败时返回 0。
示例
c
on start
{
char buffer[256];
dword pos;
pos = GetFirstCANdbFilename(buffer, elcount(buffer));
// 获取第一个数据库的文件名。若找到,pos=1;否则 pos=0。
while (0 != pos)
{
write("CANdb: %s", buffer);
pos = GetNextCANdbFilename(pos, buffer, elcount(buffer));
// 获取其他数据库的文件名。若找到,pos=2、3...;否则 pos=0 并退出循环。
}
}
// 获取第三个数据库的示例
on key '3'
{
char buffer[256];
dword pos;
dword DbcNumber = 2; // 第二个数据库的位置编号
pos = GetNextCANdbFilename(DbcNumber, buffer, elcount(buffer));
// 返回第三个数据库的文件名。若找到,pos=3;否则 pos=0。
write("Database position number : %d Database file name : %s", pos, buffer);
}
可用性
- 版本:10.0 SP3 及以上
- 限制:仅 CAN
- 测量设置:✔️
- 仿真/测试设置:❌
- 32 位:✔️
- 64 位:✔️
相关函数:getFirstCANdbName | getNextCANdbFilename
getFirstCANdbName
CAPL 函数 >> CAN >> getFirstCANdbName
函数语法
dword getFirstCANdbName( char buffer[], dword size)
描述
获取第一个已分配数据库的名称。
参数
buffer:用于存储数据库名称的缓冲区size:缓冲区大小(字节)
返回值
成功时返回非 0,失败时返回 0。
示例
c
on start
{
char buffer[256];
dword pos;
pos = GetFirstCANdbName(buffer, elcount(buffer));
// 获取第一个数据库的名称。若找到,pos=1;否则 pos=0。
while (0 != pos)
{
write("CANdb: %s", buffer);
pos = GetNextCANdbName(pos, buffer, elcount(buffer));
// 获取其他数据库的名称。若找到,pos=2、3...;否则 pos=0 并退出循环。
}
}
// 获取第三个数据库的示例
on key '3'
{
char buffer[256];
dword pos;
dword DbcNumber = 2; // 第二个数据库的位置编号
pos = GetNextCANdbName(DbcNumber, buffer, elcount(buffer));
// 返回第三个数据库的名称。若找到,pos=3;否则 pos=0。
write("Database position number : %d Database name : %s", pos, buffer);
}
可用性
- 版本:4.0 及以上
- 限制:仅 CAN
- 测量设置:✔️
- 仿真/测试设置:❌
- 32 位:✔️
- 64 位:✔️
相关函数:GetMessageName | getNextCANdbName | getFirstCANdbFilename
getMessageAttrInt
CAPL 函数 >> CAN >> getMessageAttrInt
注意
每次调用此函数都会重新从数据库中查找消息属性的值。如果在编写 CAPL 程序时已知道消息,建议通过选择器语法直接访问属性(例如 <消息变量>.<属性名>,如 absData.msgCycleTime)。
函数语法
long GetMessageAttrInt(message canMessage, char attributeName[]);
long GetMessageAttrInt(pg parameterGroup, char attributeName[]);
描述
从数据库中获取消息属性的值。数据库中必须定义名称与参数中指定的名称一致、且类型为 Integer 的用户自定义属性。若未定义该属性,函数返回 0;若消息未分配属性值,则返回属性定义的默认值。
参数
canMessage:消息变量attributeName:属性名称
返回值
数据库中的属性值(或默认值)。
示例
c
on message *
{
long cycleTimeValue1;
long cycleTimeValue2;
cycleTimeValue1 = getMessageAttrInt(this, "GenMsgCycleTime");
write("CycleTime of message id %x = %d", this.id, cycleTimeValue1);
message EngineData gMsgEngineData;
cycleTimeValue2 = getMessageAttrInt(gMsgEngineData, "GenMsgCycleTime");
write("CycleTime of message id %x = %d", this.id, cycleTimeValue2);
}
示例说明:接收消息时在 Write 窗口输出消息属性
GenMsgCycleTime的值。属性名称必须与数据库中定义一致,可在数据库的属性窗口中查看。
可用性
- 版本:3.1 及以上
- 限制:仅 CAN
- 测量设置:✔️
- 仿真/测试设置:✔️
- 32 位:✔️
- 64 位:✔️
getMessageID
CAPL 函数 >> CAN >> getMessageID
函数语法
dword getMessageID(char messageName[]); // 形式1
dword getMessageID(char messageName[], char dbName[]); // 形式2
描述
获取消息 ID。
参数
messageName:消息名称dbName:数据库名称(当消息名称在多个数据库中使用时需要)
返回值
消息 ID;若未找到消息,则返回 (dword)-1。
示例
c
dword id;
id = GetMessageID("LightState");
可用性
- 版本:7.1 及以上
- 限制:仅 CAN
- 测量设置:✔️
- 仿真/测试设置:✔️
- 32 位:✔️
- 64 位:✔️
相关函数:getMessageName
getMessageName
CAPL 函数 >> CAN >> getMessageName
函数语法
dword getMessageName( dword id, dword context, char buffer[], dword size)
描述
获取消息名称。
参数
id:待查找名称的消息 IDcontext:已分配数据库的上下文- 低字:通道号
- 高字:总线类型(CAN=1,LIN=5,MOST=6,FlexRay=7,J1708=9)
buffer:用于存储消息名称的缓冲区size:缓冲区大小(字节)
返回值
成功时返回非 0,失败时返回 0。
示例
c
variables
{
dword contextCAN = 0x00010000; // CAN 总线上下文
dword contextLIN = 0x00050000; // LIN 总线上下文
dword contextMOST = 0x00060000; // MOST 总线上下文
dword contextFLEXRAY = 0x00070000;// FlexRay 总线上下文
dword contextBEAN = 0x00080000; // BEAN 总线上下文
dword contextJ1708 = 0x00090000; // J1708 总线上下文
}
on message *
{
char buffer[64];
if (getMessageName(this.ID, contextCAN | this.CAN, buffer, elcount(buffer)))
{
write("Message: %s", buffer);
}
}
可用性
- 版本:4.0 / 7.1(不同形式)
- 限制:仅 CAN
- 测量设置:✔️
- 仿真/测试设置:✔️
- 32 位:✔️
- 64 位:✔️
相关函数:getFirstCANdbName | getNextCANdbName
getNextCANdbFilename
CAPL 函数 >> CAN >> getNextCANdbFilename
函数语法
dword getNextCANdbFilename( dword pos, char buffer[], dword size);
描述
通过位置编号 pos 获取其他已分配数据库的文件名。
参数
pos:待查找数据库的位置编号buffer:用于存储数据库文件名的缓冲区size:缓冲区大小(字节)
返回值
成功时返回非 0,失败时返回 0。
示例
c
on start
{
char buffer[256];
dword pos;
pos = getFirstCANdbFilename(buffer, elcount(buffer));
// 获取第一个数据库的文件名。若找到,pos=1;否则 pos=0。
while (0 != pos)
{
write("CANdb: %s", buffer);
pos = getNextCANdbFilename(pos, buffer, elcount(buffer));
// 获取其他数据库的文件名。若找到,pos=2、3...;否则 pos=0 并退出循环。
}
}
// 获取第三个数据库的示例
on key '3'
{
char buffer[256];
dword pos;
dword DbcNumber = 2; // 第二个数据库的位置编号
pos = getNextCANdbFilename(DbcNumber, buffer, elcount(buffer));
// 返回第三个数据库的文件名。若找到,pos=3;否则 pos=0。
write("Database position number : %d Database file name : %s", pos, buffer);
}
可用性
- 版本:10.0 SP3 及以上
- 限制:仅 CAN
- 测量设置:✔️
- 仿真/测试设置:❌
- 32 位:✔️
- 64 位:✔️
相关函数:getFirstCANdbFilename | getNextCANdbName
getNextCANdbName
CAPL 函数 >> CAN >> getNextCANdbName
函数语法
的缓冲区
size:缓冲区大小(字节)
返回值
成功时返回非 0,失败时返回 0。
示例
c
on start
{
char buffer[256];
dword pos;
pos = getFirstCANdbName(buffer, elcount(buffer));
// 获取第一个数据库的名称。若找到,pos=1;否则 pos=0。
while (0 != pos)
{
write("CANdb: %s", buffer);
pos = getNextCANdbName(pos, buffer, elcount(buffer));
// 获取其他数据库的名称。若找到,pos=2、3...;否则 pos=0 并退出循环。
}
}
// 获取第三个数据库的示例
on key '3'
{
char buffer[256];
dword pos;
dword DbcNumber = 2; // 第二个数据库的位置编号
pos = getNextCANdbName(DbcNumber, buffer, elcount(buffer));
// 返回第三个数据库的名称。若找到,pos=3;否则 pos=0。
write("Database position number : %d Database name : %s", pos, buffer);
}
可用性
- 版本:4.0 及以上
- 限制:仅 CAN
- 测量设置:✔️
- 仿真/测试设置:❌
- 32 位:✔️
- 64 位:✔️
相关函数:getFirstCANdbName | getMessageName | getNextCANdbFilename
getSignalName
CAPL 函数 >> CAN >> getSignalName
函数语法
char[] getSignalName(caplCanMessage* msg, dword startBit); // 形式1
char[] getSignalName(caplAutosarPDU* pdu, dword startBit); // 形式2
描述
- 形式1:获取 CAN 消息内指定起始位的信号名称(起始位在 DBC 编辑器中定义)
- 形式2:获取 PDU 内指定起始位的信号名称(起始位在 AUTOSAR Explorer 中定义)
参数
msg:CAN 消息(形式1)pdu:PDU(形式2)startBit:起始位(形式1-2)
返回值
信号名称。
示例
无
可用性
- 版本:14 及以上
- 限制:仅 CAN
- 测量设置:✔️
- 仿真/测试设置:❌
- 32 位:✔️
- 64 位:✔️
setSignalStartValues
CAPL 函数 >> CAN >> setSignalStartValues
函数语法
c
setSignalStartValues(message msg); // 形式1
setSignalStartValues(multiplexed_message msg); // 形式2
setSignalStartValues(frFrame frame); // 形式3
setSignalStartValues(frFrame frame, byte uninitializedData); // 形式4
setSignalStartValues(frPDU pdu); // 形式5
setSignalStartValues(frPDU pdu, byte uninitializedData); // 形式6
setSignalStartValues(pg paramGroup); // 形式7
setSignalStartValues(j1587Param param); // 形式8
setSignalStartValues(linFrame msg); // 形式9
描述
将参数中的信号值设置为数据库中定义的起始值。
参数
msg, frame, pdu, paramGroup, parameter:需设置信号的对象uninitializedData(形式4、6):未被信号使用的帧/PDU 字节应设置的值
返回值
- 0:函数成功
- 1:消息/帧/PDU/参数组在数据库中未找到
- 2:至少一个信号起始值与消息中的信号不匹配
示例
c
message LightState msg;
setSignalStartValues(msg); // 将 msg 中的信号设置为数据库起始值
可用性
- 版本:7.1 及以上
- 限制:仅 CAN
- 测量设置:✔️
- 仿真/测试设置:✔️
- 32 位:✔️
- 64 位:✔️
相关函数:StartLogging