CAPL学习-CAN相关函数-CANdb API类函数

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:待查找名称的消息 ID
  • context:已分配数据库的上下文
    • 低字:通道号
    • 高字:总线类型(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

相关推荐
hunter14502 小时前
2025.12.18 cisco NAT配置
网络·智能路由器
默 语2 小时前
RAG实战:用Java+向量数据库打造智能问答系统
java·开发语言·数据库
北极糊的狐2 小时前
若依报错org.springframework.dao.DataIntegrityViolationException
数据库·mysql
M__332 小时前
动规入门——斐波那契数列模型
数据结构·c++·学习·算法·leetcode·动态规划
dazhong20122 小时前
Mybatis 敏感数据加解密插件完整实现方案
java·数据库·mybatis
lusasky2 小时前
基于 LangChain 的海量 API 动态检索与调用架构
网络·架构·langchain
薛晓刚2 小时前
2025 年度个人回顾总结
数据库
TDengine (老段)2 小时前
TDengine 在智能制造领域的应用实践
java·大数据·数据库·制造·时序数据库·tdengine·涛思数据
刺客xs2 小时前
TCP网络通信
网络·网络协议·tcp/ip