CAPL学习-SOME/IP交互层-值处理类函数2

SomeIpIsOptional

函数
语法
dword SomeIpIsOptional( dword objectHandle, char memberPath[] );

功能

判断 objectHandle 指定对象的参数或成员是否为可选(Optional)或必选(Mandatory),通过符号访问路径访问。

参数

  • objectHandle:SOME/IP IL 对象句柄(需在 FIBEX 数据库中完整描述),支持消息、字段、方法调用。
  • memberPath:参数或成员的访问路径。

返回值

  • 0:参数或成员为必选
  • 1:参数或成员为可选

可用性

自版本 14 起支持,仅限 Ethernet 仿真/测试环境。

示例

capl 复制代码
void Initialize()  
{  
  dword aep; // 应用端点句柄  
  dword psi; // 提供的服务实例句柄  
  dword peg; // 提供的事件组句柄  
  dword pev; // 提供的事件句柄  

  // 打开应用端点  
  aep = SomeIpOpenLocalApplicationEndpoint(17, 50002);  
  // 创建服务实例  
  psi = SomeIpCreateProvidedServiceInstance(aep, 10, 1);  
  // 创建事件组  
  peg = SomeIpAddProvidedEventGroup(psi, 1);  
  // 创建事件并添加到事件组  
  pev = SomeIpAddEvent(psi, 1, "OnPrepareEvent1");  
  SomeIpAddEventToEventgroup(peg, pev);  
  // 设置事件周期发送  
  SomeIpSetProperty(pev, "CycleTimeMs", 1000);  
}  

void OnPrepareEvent1(dword eventHandle, dword messageHandle)  
{  
  WORD isOpt; // 参数/成员是否可选的返回值  

  // 仅在必选时设置结构体 "param1" 的参数 "value1"  
  isOpt = SomeIpIsOptional(messageHandle, "param1.value1");  
  if (isOpt == 0)  
  {  
    SomeIpSetValueDWord(messageHandle, "param1.value1", 7);  
  }  
}  

SomeIpRemoveValue

函数
语法
long SomeIpRemoveValue( dword objectHandle, char valuePath[] );

功能

通过符号访问路径从 objectHandle 指定的对象中移除值,支持动态数组元素或可选值的移除;数组元素移除后,后续元素将前移。

注意

访问路径需遵循数据库描述语法,支持通过预定义 SD 路径修改服务发现消息内容。

参数

  • objectHandle:SOME/IP IL 对象句柄(需在 FIBEX 数据库中完整描述),支持消息、字段、方法调用。
  • valuePath:待移除值的访问路径。

返回值

0:成功;>0:错误码。

可用性

自版本 10.0 SP3 起支持,仅限 Ethernet 仿真/测试环境。

示例 :无
版本 :14 SP2

© Vector Informatik GmbH

SomeIpSetRequestId

函数
语法
LONG SomeIpSetRequestId ( dword messageHandle, dword requestId);

功能

设置 SOME/IP 消息头中的请求 ID。

参数

  • messageHandle:SOME/IP 消息句柄(如 OnSomeIpMessage 中获取)。
  • requestId:新请求 ID。

返回值

0:成功;>0:错误码。

可用性

自版本 8.1 起支持,仅限 Ethernet 仿真/测试环境。

示例

capl 复制代码
on key 's'  
{  
  DWORD messageId = 0x12340004; // 服务 ID=0x1234,方法 ID=0x0004  
  DWORD requestId = 0; // 客户端 ID=0,会话 ID=0  
  DWORD protocolVersion = 1;  
  DWORD interfaceVersion = 1;  
  DWORD messageType = 0x2; // 通知消息  
  DWORD returnCode = 0; // 不可用  
  DWORD aep = 0; // 应用端点句柄  
  DWORD messageHandle = 0; // 创建的 SOME/IP 消息句柄  
  BYTE payload[5]; // 消息 payload  
  DWORD count = 0; // 计数器  

  // 初始化 payload  
  count = 0;  
  payload[count++] = 0x11;  
  payload[count++] = 0x22;  
  payload[count++] = 0x33;  
  payload[count++] = 0x44;  
  payload[count++] = 0x55;  

  // 打开应用端点  
  aep = SomeIpOpenLocalApplicationEndpoint(17, 50002);  
  // 创建消息并设置 payload  
  messageHandle = SomeIpCreateMessage(messageId, requestId, protocolVersion, interfaceVersion, messageType, returnCode);  
  SomeIpSetData(messageHandle, elcount(payload), payload);  

  // 发送 5 条不同请求 ID 的消息  
  for (count = 0; count < 5; count++)  
  {  
    SomeIpSetRequestId(messageHandle, count);  
    SomeIpOutputMessage(aep, 0xFFFFFFFF, 40001, messageHandle);  
  }  

  // 释放消息  
  SomeIpReleaseMessage(messageHandle);  
}  

SomeIpSetReturnCode

函数
语法
long SomeIpSetReturnCode ( dword messageHandle, dword returnCode );

功能

设置 SOME/IP 消息头中的返回码。

参数

  • messageHandle:SOME/IP 消息句柄。

  • returnCode:返回码,定义如下:

    • 0x00:E_OK
    • 0x01:E_NOT_OK
    • 0x02:E_UNKNOWN_SERVICE
    • 0x03:E_UNKNOWN_METHOD
    • 0x04:E_NOT_READY
    • 0x05:E_NOT_REACHABLE
    • 0x06:E_TIMEOUT
    • 0x07:E_WRONG_PROTOCOL_VERSION
    • 0x08:E_WRONG_INTERFACE_VERSION
    • 0x09:E_MALFORMED_MESSAGE
    • 0x0A--0x1F:保留

    若消息类型为 REQUEST、REQUEST_NO_RETURN 或 NOTIFICATION,返回码无效,默认设为 0x00(E_OK)。

返回值

0:成功;>0:错误码。

可用性

自版本 8.1 起支持,仅限 Ethernet 仿真/测试环境。

示例

capl 复制代码
on key 's'  
{  
  DWORD messageId = 0x12340004; // 服务 ID=0x1234,方法 ID=0x0004  
  DWORD requestId = 0; // 客户端 ID=0,会话 ID=0  
  DWORD protocolVersion = 1;  
  DWORD interfaceVersion = 1;  
  DWORD messageType = 0x2; // 通知消息  
  DWORD returnCode = 0; // 不可用  
  DWORD aep = 0; // 应用端点句柄  
  DWORD messageHandle = 0; // 创建的 SOME/IP 消息句柄  
  BYTE payload[5]; // 消息 payload  
  DWORD count = 0; // 计数器  

  // 初始化 payload  
  count = 0;  
  payload[count++] = 0x11;  
  payload[count++] = 0x22;  
  payload[count++] = 0x33;  
  payload[count++] = 0x44;  
  payload[count++] = 0x55;  

  // 打开应用端点  
  aep = SomeIpOpenLocalApplicationEndpoint(17, 50002);  
  // 创建消息并设置 payload  
  messageHandle = SomeIpCreateMessage(messageId, requestId, protocolVersion, interfaceVersion, messageType, returnCode);  
  SomeIpSetData(messageHandle, elcount(payload), payload);  

  // 发送 5 条不同返回码的消息  
  for (count = 0; count < 5; count++)  
  {  
    SomeIpSetReturnCode(messageHandle, count);  
    SomeIpOutputMessage(aep, 0xFFFFFFFF, 40001, messageHandle);  
  }  

  // 释放消息  
  SomeIpReleaseMessage(messageHandle);  
}  

SomeIpSetValueDWord

函数
语法
long SomeIpSetValueDWord( dword objectHandle, char valuePath[], dword value );

功能

通过符号访问路径在 objectHandle 指定的对象中设置原始值。

注意

访问路径需遵循数据库描述语法,支持通过预定义 SD 路径修改服务发现消息内容。

参数

  • objectHandle:SOME/IP IL 对象句柄(需在 FIBEX 数据库中完整描述),支持消息、字段、方法调用。
  • valuePath:待设置值的访问路径。
  • value:原始值。

返回值

0:成功;>0:错误码。

可用性

自版本 8.1 起支持,仅限 Ethernet 仿真/测试环境。

示例

capl 复制代码
void Initialize()  
{  
  DWORD aep; // 应用端点句柄  
  DWORD psi; // 提供的服务实例句柄  
  DWORD peg; // 提供的事件组句柄  
  DWORD pev; // 提供的事件句柄  

  // 打开应用端点  
  aep = SomeIpOpenLocalApplicationEndpoint(17, 50002);  
  // 创建服务实例  
  psi = SomeIpCreateProvidedServiceInstance(aep, 10, 1);  
  // 创建事件组  
  peg = SomeIpAddProvidedEventGroup(psi, 1);  
  // 创建事件并添加到事件组  
  pev = SomeIpAddEvent(psi, 1, "OnPrepareEvent1");  
  SomeIpAddEventToEventgroup(peg, pev);  
  // 设置事件周期发送  
  SomeIpSetProperty(pev, "CycleTimeMs", 1000);  
}  

void OnPrepareEvent1(DWORD eventHandle, DWORD messageHandle)  
{  
  // 事件发送前调用,设置结构体 "param1" 的参数 "value1"  
  SomeIpSetValueDWord(messageHandle, "param1.value1", 7);  
}  

SomeIpSetValueFloat

CAPL 函数 >> 以太网 >> SOME/IP IL >> SomeIpSetValueFloat

函数

语法
long SomeIpSetValueFloat( dword objectHandle, char valuePath[], float value );

功能

该函数用于在 objectHandle 参数指定的对象中设置原始值。此时通过符号访问路径访问该值。

注意事项
  • 指定访问路径时必须遵循相应语法。访问路径由待读取值的数据库描述生成(另请参见基于数据库的访问路径语法)。
  • 此函数也可用于读取服务发现(Service Discovery)消息的内容,此时通过预定义访问路径访问值(另请参见预定义 SD 访问路径语法)。
参数
  • objectHandle :SOME/IP IL 对象句柄,必须在 FIBEX 数据库中完整描述。支持的对象包括:消息、字段、方法调用(通过 SomeIpCreateMethodCall 创建的句柄)。
  • valuePath:待设置值的访问路径。
  • value:原始值。
返回值
  • 0:函数执行成功。
  • >0:错误代码。
可用性
  • 起始版本:8.1
  • 限制:仅适用于仿真/测试环境(Simulation/Test Setup)
示例

参见 SomeIpSetValueDWord

SomeIpSetValueInt64

CAPL 函数 >> 以太网 >> SOME/IP IL >> SomeIpSetValueInt64

函数

语法
long SomeIpSetValueInt64( dword objectHandle, char valuePath[], int64 value );

功能

该函数用于在 objectHandle 参数指定的对象中设置原始值。此时通过符号访问路径访问该值。

注意事项
  • 指定访问路径时必须遵循相应语法。访问路径由待读取值的数据库描述生成(另请参见基于数据库的访问路径语法)。
  • 此函数也可用于读取服务发现消息的内容,此时通过预定义访问路径访问值(另请参见预定义 SD 访问路径语法)。
参数
  • objectHandle :SOME/IP IL 对象句柄,必须在 FIBEX 数据库中完整描述。支持的对象包括:消息、字段、方法调用(通过 SomeIpCreateMethodCall 创建的句柄)。
  • valuePath:待设置值的访问路径。
  • value:原始值。
返回值
  • 0:函数执行成功。
  • >0:错误代码。
可用性
  • 起始版本:8.1
  • 限制:仅适用于仿真/测试环境
示例

参见 SomeIpSetValueDWord

SomeIpSetValueLong

CAPL 函数 >> 以太网 >> SOME/IP IL >> SomeIpSetValueLong

函数

语法
long SomeIpSetValueLong( dword objectHandle, char valuePath[], long value );

功能

该函数用于在 objectHandle 参数指定的对象中设置原始值。此时通过符号访问路径访问该值。

注意事项
  • 指定访问路径时必须遵循相应语法。访问路径由待读取值的数据库描述生成(另请参见基于数据库的访问路径语法)。
  • 此函数也可用于读取服务发现消息的内容,此时通过预定义访问路径访问值(另请参见预定义 SD 访问路径语法)。
参数
  • objectHandle :SOME/IP IL 对象句柄,必须在 FIBEX 数据库中完整描述。支持的对象包括:消息、字段、方法调用(通过 SomeIpCreateMethodCall 创建的句柄)。
  • valuePath:待设置值的访问路径。
  • value:原始值。
返回值
  • 0:函数执行成功。
  • >0:错误代码。
可用性
  • 起始版本:8.1
  • 限制:仅适用于仿真/测试环境
示例

参见 SomeIpSetValueDWord

SomeIpSetValuePhys

CAPL 函数 >> 以太网 >> SOME/IP IL >> SomeIpSetValuePhys

函数

语法
long SomeIpSetValuePhys( dword objectHandle, char valuePath[], float value);

功能

该函数用于在 objectHandle 参数指定的对象中设置物理值。数据类型和转换公式等必要信息必须存储在 FIBEX 数据库中。

注意事项
  • 若 FIBEX 数据库中未指定转换公式,或指定了"恒等"类型的转换公式(系数为 1,无偏移),函数将返回错误代码。此时必须以原始格式指定值(例如参见 SomeIpSetValueDWord)。
  • 对于大数值,实数到整数的转换可能导致偏差。
参数
  • objectHandle :SOME/IP IL 对象句柄。支持的对象包括:消息、字段、方法调用(通过 SomeIpCreateMethodCall 创建的句柄)。
  • valuePath:待设置值的路径。复杂路径需遵循相应语法(另请参见基于数据库的访问路径语法)。
  • value:新物理值。
返回值
  • 0:函数执行成功。
  • >0:错误代码。
可用性
  • 起始版本:8.2
  • 限制:仅适用于仿真/测试环境
示例

假设 CANoe 配置关联的 FIBEX 数据库中包含一个方法,其方法 ID 为 31,包含两个输入参数 Member_value1Member_value2,以及一个返回参数 Result。数据库中为 Result 设置了系数和偏移。

capl 复制代码
variables
{
  DWORD gPm; // 提供的方法句柄
}

void Initialize()
{
  DWORD aep; // 应用端点句柄
  DWORD psi; // 提供的服务实例句柄
  
  // 打开应用端点
  aep = SomeIpOpenLocalApplicationEndpoint(17, 50002);
  
  // 创建服务实例
  psi = SomeIpCreateProvidedServiceInstance(aep, 11, 1);
  
  // 创建方法
  gPm = SomeIpAddMethod(psi, 31, "OnMethodRequest");
}

void OnMethodRequest(dword methodHandle, dword messageHandle, dword messageResponseHandle)
{
  WORD val1; // 输入参数 1 的值
  WORD val2; // 输入参数 2 的值
  DWORD res; // 返回参数的值
  
  // 从请求中获取值
  val1 = (WORD)SomeIpGetValueDword(messageHandle, "Member_value1");
  val2 = (WORD)SomeIpGetValueDword(messageHandle, "Member_value2");
  
  // 计算结果
  res = val1 + val2;
  
  // 设置响应值
  SomeIpSetValuePhys(messageResponseHandle, "Result", (val1 + val2));
}

SomeIpSetValueQWord

CAPL 函数 >> 以太网 >> SOME/IP IL >> SomeIpSetValueQWord

函数

语法
long SomeIpSetValueQWord( dword objectHandle, char valuePath[], qword value );

功能

该函数用于在 objectHandle 参数指定的对象中设置原始值。此时通过符号访问路径访问该值。

注意事项
  • 指定访问路径时必须遵循相应语法。访问路径由待读取值的数据库描述生成(另请参见基于数据库的访问路径语法)。
  • 此函数也可用于读取服务发现消息的内容,此时通过预定义访问路径访问值(另请参见预定义 SD 访问路径语法)。
参数
  • objectHandle :SOME/IP IL 对象句柄,必须在 FIBEX 数据库中完整描述。支持的对象包括:消息、字段、方法调用(通过 SomeIpCreateMethodCall 创建的句柄)。
  • valuePath:待设置值的访问路径。
  • value:原始值。
返回值
  • 0:函数执行成功。
  • >0:错误代码。
可用性
  • 起始版本:8.1
  • 限制:仅适用于仿真/测试环境
示例

参见 SomeIpSetValueDWord

SomeIpSetValueString

CAPL 函数 >> 以太网 >> SOME/IP IL >> SomeIpSetValueString

函数

语法

capl 复制代码
long SomeIpSetValueString( dword objectHandle, char valuePath[], char value[] ); // 形式 1
long SomeIpSetValueString( dword objectHandle, char valuePath[], char value[], long valueLength); // 形式 2

功能

该函数用于在 objectHandle 参数指定的对象中设置字符串。枚举数据类型可通过此函数设置其符号值之一。

注意事项
  • 目前仅支持基本数据类型 A_ASCIISTRING
  • 指定访问路径时必须遵循相应语法。访问路径由待读取值的数据库描述生成(另请参见基于数据库的访问路径语法)。
  • 此函数也可用于读取服务发现消息的内容,此时通过预定义访问路径访问值(另请参见预定义 SD 访问路径语法)。
参数
  • objectHandle :SOME/IP IL 对象句柄,必须在 FIBEX 数据库中完整描述。支持的对象包括:消息、字段、方法调用(通过 SomeIpCreateMethodCall 创建的句柄)。
  • valuePath:待设置值的路径。复杂路径需遵循相应语法。
  • value:新值(必须指定为以 null 结尾的字符串)。另请参见 SOME/IP UTF8 和 UTF16 字符串中的 BOM。
  • valueLength:输入字符串的字符长度(形式 2)。
返回值
  • 0:函数执行成功。
  • >0:错误代码。
可用性
  • 起始版本:8.1
  • 限制:仅适用于仿真/测试环境
示例

假设 CANoe 配置关联的 FIBEX 数据库中包含一个服务(ID 10,实例 ID 1),该服务提供一个事件,通过结构化参数 param1 传输 Error_Message

capl 复制代码
void Initialize()
{
  DWORD aep; // 应用端点句柄
  DWORD psi; // 提供的服务句柄
  DWORD peg; // 提供的事件组句柄
  DWORD pev; // 提供的事件句柄
  
  // 打开应用端点
  aep = SomeIpOpenLocalApplicationEndpoint(17, 50002);
  
  // 创建服务实例
  psi = SomeIpCreateProvidedServiceInstance(aep, 10, 1);
  
  // 创建事件组
  peg = SomeIpAddProvidedEventGroup(psi, 1);
  
  // 创建事件并添加到事件组
  pev = SomeIpAddEvent(psi, 1, "OnPrepareEvent1");
  SomeIpAddEventToEventgroup(peg, pev);
  
  // 确保事件周期性发送
  SomeIpSetProperty(pev, "CycleTimeMs", 1000);
}

void OnPrepareEvent1(DWORD eventHandle, DWORD messageHandle)
{
  // 事件发送前调用此函数,可在此处指定参数
  // 设置结构体 "param1" 的参数 "Error_Message"
  SomeIpSetValueString(messageHandle, "param1.Error_Message", "Error Text");
}
相关推荐
车载测试工程师7 小时前
CAPL学习-SOME/IP交互层-值处理类函数1
学习·tcp/ip·交互·以太网·capl·canoe
云和数据.ChenGuang7 小时前
F5 Big-IP by SNMP.硬件负载均衡
网络协议·tcp/ip·负载均衡·数据库运维工程师·运维教程
Json____8 小时前
springboot框架对接物联网,配置TCP协议依赖,与设备通信,让TCP变的如此简单
java·spring boot·后端·tcp/ip
专业开发者8 小时前
学习模块:Wi-Fi 测试与认证
学习
Mr.Jessy13 小时前
JavaScript高级:构造函数与原型
开发语言·前端·javascript·学习·ecmascript
玄斎17 小时前
MySQL 单表操作通关指南:建库 / 建表 / 插入 / 增删改查
运维·服务器·数据库·学习·程序人生·mysql·oracle
im_AMBER19 小时前
Leetcode 78 识别数组中的最大异常值 | 镜像对之间最小绝对距离
笔记·学习·算法·leetcode
其美杰布-富贵-李19 小时前
HDF5文件学习笔记
数据结构·笔记·学习
老蒋新思维19 小时前
创客匠人视角:智能体重构创始人 IP,知识变现从 “内容售卖” 到 “能力复制” 的革命
大数据·网络·人工智能·tcp/ip·创始人ip·创客匠人·知识变现