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_value1 和 Member_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");
}