Value Access
SomeIpGetDestinationAddress
函数
获取SOME/IP消息的目的IP地址。
语法
dword SomeIpGetDestinationAddress(dword messageHandle); // 形式1(IPv4) long SomeIpGetDestinationAddress(dword messageHandle, byte ipv6Address[]); // 形式2(IPv6)参数
messageHandle:接收的SOME/IP消息句柄(仅在OnSomeIpMessage回调函数中调用)。ipv6Address:存储IPv6地址的字节数组(形式2专用)。
返回值
- 形式1:IPv4目的地址(网络字节序);错误时返回0,可通过
SomeIpGetLastError获取错误码。 - 形式2:0表示成功,>0表示错误码(IPv6地址写入
ipv6Address数组)。
说明
- 可使用
IpGetAddressAsString函数将数值型IP地址转换为字符串格式。
可用性
- 形式1:CANoe 8.1及以上,支持以太网仿真/测试环境。
- 形式2:CANoe 10.0 SP4及以上,支持以太网仿真/测试环境。
示例
void OnSomeIpMessage(DWORD messageHandle) { DWORD dstAddress = 0; LONG errorCode = 0; LONG errorOccured = 0; char buffer[100]; // 获取IPv4目的地址 if ((dstAddress = SomeIpGetDestinationAddress(messageHandle)) == 0) { if ((errorCode = SomeIpGetLastError()) != 0) { write("SOME/IP IL错误:错误码:%d", errorCode); errorOccured = 1; } } if (errorOccured == 0) { IpGetAddressAsString(dstAddress, buffer, elcount(buffer)); write("接收到SOME/IP消息,目的地址:%s", buffer); } }SomeIpGetDestinationPort
函数
获取SOME/IP消息的目的端口号(UDP/TCP)。
语法
dword SomeIpGetDestinationPort(dword messageHandle);参数
messageHandle:接收的SOME/IP消息句柄(仅在OnSomeIpMessage回调函数中调用)。
返回值
- 目的端口号;错误时返回0,可通过
SomeIpGetLastError获取错误码。
可用性
- CANoe 8.1及以上,支持以太网仿真/测试环境。
示例
void OnSomeIpMessage(DWORD messageHandle) { DWORD dstPort = 0; LONG errorCode = 0; LONG errorOccured = 0; if ((dstPort = SomeIpGetDestinationPort(messageHandle)) == 0) { if ((errorCode = SomeIpGetLastError()) != 0) { write("SOME/IP IL错误:错误码:%d", errorCode); errorOccured = 1; } } if (errorOccured == 0) { write("接收到SOME/IP消息,目的端口:%d", dstPort); } }SomeIpGetInterfaceVersion
函数
获取SOME/IP消息头中的接口版本号。
语法
dword SomeIpGetInterfaceVersion(dword messageHandle);参数
messageHandle:SOME/IP消息句柄。
返回值
- 接口版本号;错误时返回0,可通过
SomeIpGetLastError获取错误码。
可用性
- CANoe 8.1及以上,支持以太网仿真/测试环境。
示例
void OnSomeIpMessage(DWORD messageHandle) { DWORD interfaceVers = 0; LONG errorCode = 0; LONG errorOccured = 0; if ((interfaceVers = SomeIpGetInterfaceVersion(messageHandle)) == 0) { if ((errorCode = SomeIpGetLastError()) != 0) { write("SOME/IP IL错误:错误码:%d", errorCode); errorOccured = 1; } } if (errorOccured == 0) { write("接收到SOME/IP消息,接口版本:0x%02x(%d)", interfaceVers, interfaceVers); } }SomeIpGetLength
函数
获取SOME/IP消息头中的长度字段(字节数)。
语法
dword SomeIpGetLength(dword messageHandle);参数
messageHandle:SOME/IP消息句柄。
返回值
- 消息长度(不含消息ID和长度字段本身);错误时返回0,可通过
SomeIpGetLastError获取错误码。
可用性
- CANoe 8.1及以上,支持以太网仿真/测试环境。
SomeIpGetMessageId
函数
获取SOME/IP消息头中的消息ID。
语法
dword SomeIpGetMessageId(dword messageHandle);参数
messageHandle:SOME/IP消息句柄。
返回值
- SOME/IP消息ID;错误时返回0,可通过
SomeIpGetLastError获取错误码。
可用性
- CANoe 8.1及以上,支持以太网仿真/测试环境。
示例
void OnSomeIpMessage(DWORD messageHandle) { DWORD msgId = 0; LONG errorCode = 0; LONG errorOccured = 0; if ((msgId = SomeIpGetMessageId(messageHandle)) == 0) { if ((errorCode = SomeIpGetLastError()) != 0) { write("SOME/IP IL错误:错误码:%d", errorCode); errorOccured = 1; } } if (errorOccured == 0) { write("接收到SOME/IP消息,消息ID:0x%08x", msgId); } }SomeIpGetMessageType
函数
获取SOME/IP消息头中的消息类型。
语法
dword SomeIpGetMessageType(dword messageHandle);参数
messageHandle:SOME/IP消息句柄。
返回值
- 消息类型(十六进制):
- 0x00:REQUEST(请求)
- 0x01:REQUEST_NO_RETURN(无返回请求)
- 0x02:NOTIFICATION(通知)
- 0x40:REQUEST ACK(请求确认)
- 0x41:REQUEST_NO_RETURN ACK(无返回请求确认)
- 0x42:NOTIFICATION ACK(通知确认)
- 0x80:RESPONSE(响应)
- 0x81:ERROR(错误)
- 0xC0:RESPONSE ACK(响应确认)
- 0xC1:ERROR ACK(错误确认)
- 错误时返回0,可通过
SomeIpGetLastError获取错误码。
可用性
- CANoe 8.1及以上,支持以太网仿真/测试环境。
示例
void OnSomeIpMessage(DWORD messageHandle) { DWORD msgType = 0; LONG errorCode = 0; LONG errorOccured = 0; if ((msgType = SomeIpGetMessageType(messageHandle)) == 0) { if ((errorCode = SomeIpGetLastError()) != 0) { write("SOME/IP IL错误:错误码:%d", errorCode); errorOccured = 1; } } if (errorOccured == 0) { write("接收到SOME/IP消息,消息类型:0x%02x", msgType); } }SomeIpGetProtocol
函数
获取SOME/IP消息使用的传输协议(TCP/UDP)。
语法
dword SomeIpGetProtocol(dword messageHandle);参数
messageHandle:接收的SOME/IP消息句柄(仅在OnSomeIpMessage回调函数中调用)。
返回值
- 0:错误(通过
SomeIpGetLastError获取错误码) - 6:TCP协议
- 17:UDP协议
可用性
- CANoe 8.1及以上,支持以太网仿真/测试环境。
示例
void OnSomeIpMessage(DWORD messageHandle) { DWORD protocol = 0; LONG errorCode = 0; LONG errorOccured = 0; if ((protocol = SomeIpGetProtocol(messageHandle)) == 0) { if ((errorCode = SomeIpGetLastError()) != 0) { write("SOME/IP IL错误:错误码:%d", errorCode); errorOccured = 1; } } if (errorOccured == 0) { write("接收到SOME/IP消息,协议类型:0x%x(%d)", protocol, protocol); } }SomeIpGetProtocolVersion
函数
获取SOME/IP消息头中的协议版本号。
语法
dword SomeIpGetProtocolVersion(dword messageHandle);参数
messageHandle:SOME/IP消息句柄。
返回值
- 协议版本号;错误时返回0,可通过
SomeIpGetLastError获取错误码。
可用性
- CANoe 8.1及以上,支持以太网仿真/测试环境。
示例
void OnSomeIpMessage(DWORD messageHandle) { DWORD protVers = 0; LONG errorCode = 0; LONG errorOccured = 0; if ((protVers = SomeIpGetProtocolVersion(messageHandle)) == 0) { if ((errorCode = SomeIpGetLastError()) != 0) { write("SOME/IP IL错误:错误码:%d", errorCode); errorOccured = 1; } } if (errorOccured == 0) { write("接收到SOME/IP消息,协议版本:0x%02x(%d)", protVers, protVers); } }SomeIpGetRequestId
CAPL 函数 » 以太网 » SOME/IP IL » SomeIpGetRequestId
函数
语法dword SomeIpGetRequestId ( dword messageHandle );
功能
该函数返回 SOME/IP 消息头中的请求 ID(Request ID)。
参数
messageHandle:SOME/IP 消息的句柄(例如,参见OnSomeIpMessage)。
返回值
- 请求 ID。
- 若发生错误,函数返回值为 0。可通过
SomeIpGetLastError函数检查该值是否有效或是否发生错误。
可用性
| 版本 | 适用范围 | 测量设置 | 仿真/测试设置 |
|---|---|---|---|
| 8.1 | 以太网 | — | • |
示例
void OnSomeIpMessage( DWORD messageHandle ) { DWORD requestId = 0; LONG errorCode = 0; LONG errorOccured = 0; // 从 SOME/IP 消息中获取数据 if((requestId = SomeIpGetRequestId(messageHandle)) == 0) { // 检查上一个函数是否执行正确 if((errorCode = SomeIpGetLastError()) != 0) { write("SOME/IP IL 错误发生:错误代码:%d", errorCode); errorOccured = 1; } // if } // if if(errorOccured == 0) { write("接收到请求 ID 为 0x%08x 的 SOME/IP 消息", requestId); } // if }SomeIpGetReturnCode
CAPL 函数 » 以太网 » SOME/IP IL » SomeIpGetReturnCode
函数
语法dword SomeIpGetReturnCode ( dword messageHandle );
功能
该函数返回 SOME/IP 消息头中的返回码(Return Code)。
参数
messageHandle:SOME/IP 消息的句柄(例如,参见OnSomeIpMessage)。
返回值
- 返回码:
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(消息格式错误)0x09–0x1F:保留(RESERVED)。
- 若消息类型为请求(REQUEST)、无返回请求(REQUEST_NO_RETURN)或通知(NOTIFICATION),返回码为 N/A 并设为
0x00(E_OK)。 - 若发生错误,函数返回值为 0。可通过
SomeIpGetLastError函数检查该值是否有效或是否发生错误。
可用性
| 版本 | 适用范围 | 测量设置 | 仿真/测试设置 |
|---|---|---|---|
| 8.1 | 以太网 | — | • |
示例
void OnSomeIpMessage( DWORD messageHandle ) { DWORD retCode = 0; LONG errorCode = 0; LONG errorOccured = 0; // 从 SOME/IP 消息中获取数据 if((retCode = SomeIpGetReturnCode(messageHandle)) == 0) { // 检查上一个函数是否执行正确 if((errorCode = SomeIpGetLastError()) != 0) { write("SOME/IP IL 错误发生:错误代码:%d", errorCode); errorOccured = 1; } // if } // if if(errorOccured == 0) { write("接收到返回码为 0x%02x 的 SOME/IP 消息", retCode); } // if }SomeIpGetSourceAddress
CAPL 函数 » 以太网 » SOME/IP IL » SomeIpGetSourceAddress
函数
语法
- 形式 1:
dword SomeIpGetSourceAddress ( dword messageHandle ); - 形式 2:
long SomeIpGetSourceAddress ( dword messageHandle, byte ipv6Address[] );
功能
- 形式 1:返回 IPv4 发送方地址。
- 形式 2:将 IPv6 地址写入指定参数。
参数
messageHandle:SOME/IP 消息的句柄。注意:该函数只能在
OnSomeIpMessage回调函数中调用。ipv6Address:用于存储 IPv6 地址的参数。
返回值
- 形式 1:IPv4 发送方地址(网络字节序),以数值形式返回。
- 若发生错误,返回值为 0。可通过
SomeIpGetLastError函数检查有效性或错误。 - 注意:可使用
IpGetAddressAsString函数将数值返回值转换为简写形式的字符串。
- 若发生错误,返回值为 0。可通过
- 形式 2:
0:函数执行成功。>0:错误代码。
可用性
| 版本 | 适用范围 | 测量设置 | 仿真/测试设置 |
|---|---|---|---|
| 8.1 | 以太网(形式 1) | — | • |
| 10.0 SP4 | 以太网(形式 2) | — | • |
示例
void OnSomeIpMessage( DWORD messageHandle ) { DWORD srcAddress = 0; LONG errorCode = 0; LONG errorOccured = 0; char buffer[100]; // 从 SOME/IP 消息中获取数据 if((srcAddress = SomeIpGetSourceAddress(messageHandle)) == 0) { // 检查上一个函数是否执行正确 if((errorCode = SomeIpGetLastError()) != 0) { write("SOME/IP IL 错误发生:错误代码:%d", errorCode); errorOccured = 1; } // if } // if if(errorOccured == 0) { IpGetAddressAsString(srcAddress, buffer, elcount(buffer)); write("接收到来自源地址 %s 的 SOME/IP 消息", buffer); } // if }SomeIpGetSourcePort
CAPL 函数 » 以太网 » SOME/IP IL » SomeIpGetSourcePort
函数
语法dword SomeIpGetSourcePort ( dword messageHandle );
功能
该函数返回源端口(UDP/TCP)。
参数
messageHandle:接收到的 SOME/IP 消息的句柄。注意:该函数只能在
OnSomeIpMessage回调函数中调用。
返回值
- 源端口。
- 若发生错误,函数返回值为 0。可通过
SomeIpGetLastError函数检查该值是否有效或是否发生错误。
可用性
| 版本 | 适用范围 | 测量设置 | 仿真/测试设置 |
|---|---|---|---|
| 8.1 | 以太网 | — | • |
示例
void OnSomeIpMessage( DWORD messageHandle ) { DWORD srcPort = 0; LONG errorCode = 0; LONG errorOccured = 0; // 从 SOME/IP 消息中获取数据 if((srcPort = SomeIpGetSourcePort(messageHandle)) == 0) { // 检查上一个函数是否执行正确 if((errorCode = SomeIpGetLastError()) != 0) { write("SOME/IP IL 错误发生:错误代码:%d", errorCode); errorOccured = 1; } // if } // if if(errorOccured == 0) { write("接收到来自源端口 %d 的 SOME/IP 消息", srcPort); } // if }SomeIpGetValueDWord
CAPL 函数 » 以太网 » SOME/IP IL » SomeIpGetValueDWord
函数
语法dword SomeIpGetValueDWord( dword objectHandle, char valuePath[] );
功能
该函数用于从objectHandle参数指定的对象中读取原始值,通过符号访问路径访问该值。
注意:指定访问路径时必须遵循相应语法。访问路径由待读取值的数据库描述生成(另见《基于数据库的访问路径语法》)。
该函数也可读取服务发现(Service Discovery)消息的内容,此时通过预定义访问路径访问值(另见《预定义 SD 访问路径语法》)。
参数
objectHandle:SOME/IP IL 对象的句柄,该对象必须在 FIBEX 数据库中完整描述。支持以下对象:- 消息(Messages)
- 字段(Fields)
- 方法调用:通过
SomeIpCreateMethodCall创建的方法调用句柄。
valuePath:待读取值的访问路径。
返回值
- 原始值。
- 若发生错误,函数返回值为 0。可通过
SomeIpGetLastError函数检查有效性或错误。
可用性
| 版本 | 适用范围 | 测量设置 | 仿真/测试设置 |
|---|---|---|---|
| 8.1 | 以太网 | — | • |
示例
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; // 设置响应值 SomeIpSetValueDWord(messageResponseHandle, "Result", (val1 + val2)); }SomeIpGetValueFloat
CAPL 函数 » 以太网 » SOME/IP IL » SomeIpGetValueFloat
函数
语法float SomeIpGetValueFloat( dword objectHandle, char valuePath[] );
功能
该函数用于从objectHandle参数指定的对象中读取原始浮点值,通过符号访问路径访问该值。
注意:指定访问路径时必须遵循相应语法。访问路径由待读取值的数据库描述生成(另见《基于数据库的访问路径语法》)。
该函数也可读取服务发现消息的内容,此时通过预定义访问路径访问值(另见《预定义 SD 访问路径语法》)。
参数
objectHandle:SOME/IP IL 对象的句柄(需在 FIBEX 数据库中完整描述),支持消息、字段及通过SomeIpCreateMethodCall创建的方法调用。valuePath:待读取值的访问路径。
返回值
- 原始浮点值。
- 若发生错误,返回值为 0。可通过
SomeIpGetLastError函数检查有效性或错误。
可用性
| 版本 | 适用范围 | 测量设置 | 仿真/测试设置 |
|---|---|---|---|
| 8.1 | 以太网 | — | • |
示例
参见SomeIpGetValueDWord
SomeIpGetValueInt64
CAPL 函数 » 以太网 » SOME/IP IL » SomeIpGetValueInt64
函数
语法int64 SomeIpGetValueInt64( dword objectHandle, char valuePath[] );
功能
该函数用于从objectHandle参数指定的对象中读取原始 64 位整数值,通过符号访问路径访问该值。
注意:访问路径语法及支持对象同
SomeIpGetValueDWord。
参数
objectHandle:SOME/IP IL 对象句柄(需在 FIBEX 数据库中描述)。valuePath:待读取值的访问路径。
返回值
- 原始 64 位整数值。
- 若发生错误,返回值为 0。可通过
SomeIpGetLastError检查错误。
可用性
| 版本 | 适用范围 | 测量设置 | 仿真/测试设置 |
|---|---|---|---|
| 8.1 | 以太网 | — | • |
示例
参见SomeIpGetValueDWord
SomeIpGetValueLong
CAPL 函数 » 以太网 » SOME/IP IL » SomeIpGetValueLong
函数
语法long SomeIpGetValueLong( dword objectHandle, char valuePath[] );
功能
该函数用于从objectHandle参数指定的对象中读取原始长整数值,通过符号访问路径访问该值。
注意:访问路径语法及支持对象同
SomeIpGetValueDWord。
参数
objectHandle:SOME/IP IL 对象句柄(需在 FIBEX 数据库中描述)。valuePath:待读取值的访问路径。
返回值
- 原始长整数值。
- 若发生错误,返回值为 0。可通过
SomeIpGetLastError检查错误。
可用性
| 版本 | 适用范围 | 测量设置 | 仿真/测试设置 |
|---|---|---|---|
| 8.1 | 以太网 | — | • |
示例
参见SomeIpGetValueDWord
SomeIpGetValuePhys
函数
语法float SomeIpGetValuePhys( dword objectHandle, char valuePath[] );
功能
该函数用于从objectHandle参数指定的对象中读取物理值。数据类型和转换公式等必要信息必须存储在 FIBEX 数据库中。
注意
- 若数据库中未存储转换公式,将隐式应用恒等转换(系数为 1,偏移量为 0)。
- 对于大数值,实数转换为整数可能导致偏差。
参数
objectHandle:SOME/IP IL 对象句柄,支持消息、字段、方法调用(通过SomeIpCreateMethodCall创建)。valuePath:待读取值的路径,复杂路径需遵循数据库访问路径语法。
返回值
物理值;若出错则返回 0,可通过SomeIpGetLastError检查错误。
可用性
自版本 8.2 起支持,仅限 Ethernet 仿真/测试环境。
示例
假设 FIBEX 数据库中包含方法 ID 31 的方法,含两个输入参数Member_value1、Member_value2和返回参数Result,前两者在数据库中设置了系数和偏移量。
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)SomeIpGetValuePhys(messageHandle, "Member_value1"); val2 = (WORD)SomeIpGetValuePhys(messageHandle, "Member_value2"); // 计算结果 res = val1 + val2; // 设置响应值 SomeIpSetValueDWord(messageResponseHandle, "Result", res); }SomeIpGetValueQWord
函数
语法qword SomeIpGetValueQWord( dword objectHandle, char valuePath[] );
功能
通过符号访问路径从objectHandle指定的对象中读取原始值。
注意
- 访问路径需遵循数据库描述的语法(见数据库访问路径语法)。
- 支持读取服务发现(SD)消息内容,需使用预定义 SD 访问路径。
参数
objectHandle:SOME/IP IL 对象句柄(需在 FIBEX 数据库中完整描述),支持消息、字段、方法调用。valuePath:待读取值的访问路径。
返回值
原始值;若出错则返回 0,可通过SomeIpGetLastError检查错误。
可用性
自版本 8.1 起支持,仅限 Ethernet 仿真/测试环境。
示例:参见SomeIpGetValueDWord
版本:14 SP2
© Vector Informatik GmbH
SomeIpGetValueString
函数
语法dword SomeIpGetValueString( dword objectHandle, char valuePath[], dword bufferLength, char buffer[] );
功能
从objectHandle指定的对象中读取字符串;对于枚举类型,返回符号值。
注意
- 目前仅支持基本类型
A_ASCIISTRING。 - 访问路径需遵循数据库描述语法,支持通过预定义 SD 路径读取服务发现消息内容。
参数
objectHandle:SOME/IP IL 对象句柄(需在 FIBEX 数据库中完整描述),支持消息、字段、方法调用。valuePath:待读取值的路径。bufferLength:缓冲区字节长度;若缓冲区过小,仅复制能容纳的字符(含空终止符)。buffer:输出参数,存放空终止字符串。
返回值
复制的字节数;若出错则返回 0,可通过SomeIpGetLastError查询错误码。
可用性
自版本 8.1 起支持,仅限 Ethernet 仿真/测试环境。
示例
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) { CHAR Member_value1[256]; // 输入参数 1 的值 WORD val2; // 输入参数 2 的值 // 从请求中获取字符串值 SomeIpGetValueString(messageHandle, "Member_value1", elcount(Member_value1), Member_value1); val2 = (WORD)SomeIpGetValueDWord(messageHandle, "Member_value2"); // 业务逻辑处理 }