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

相关推荐
火山上的企鹅8 小时前
Codex实战:APP远程升级服务搭建(三)后台管理页面(APK 上传、版本管理、多应用页签)
服务器·网络·数据库·oracle·qgc
caimouse8 小时前
Reactos 第 9 章 设备驱动 — 9.5 一组PnP设备驱动模块的实例
网络·windows
阿狸猿8 小时前
论 NoSQL 数据库技术及其应用
数据库·nosql
FBI HackerHarry浩9 小时前
DataGrip2023.2.3默认保存的数据库和.sql文件在哪里?怎么修改默认路径?
数据库
袁小皮皮不皮9 小时前
3.HCIP OSPF补充知识(优化版)
服务器·网络·数据库·网络协议·智能路由器
运筹vivo@9 小时前
Python ContextVar 底层机制与内存模型拆解
前端·数据库·python
志栋智能9 小时前
超自动化巡检:知识沉淀与团队协作的新载体
大数据·运维·网络·数据库·人工智能·自动化
syt_biancheng10 小时前
Redis初识
数据库·redis·缓存
酣大智10 小时前
策略路由PBR--企业双出口实验
网络·智能路由器·策略路由·pbr
袁小皮皮不皮10 小时前
1.HCIP BFD 学习笔记(优化版)
服务器·网络·笔记·网络协议·学习·智能路由器·ip