CAPL学习-SOME/IP交互层-服务器端API函数

Server-Side API

SomeIpAddEvent

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

函数

该函数用于向由 SomeIpCreateProvidedServiceInstance 创建的提供方服务实例(Provided Service Instance)添加事件(Event)。

可通过 SomeIpTriggerEvent 触发事件发送,随后会调用 CAPL 回调函数 <OnSomeIpPrepareEvent>,应用程序可借此机会修改或更新 SOME/IP 事件的值。

事件可通过 SomeIpRemoveEvent 函数移除。

语法
capl 复制代码
dword SomeIpAddEvent( dword psiHandle, dword eventId, char onPrepareEventCallback[] );  
参数
  • psiHandle:提供方服务实例的句柄。
  • eventId:事件标识符。
  • onPrepareEventCallback :CAPL 回调函数名称,详见 CAPL 回调 <OnSomeIpPrepareEvent>
返回值
  • 0 :发生错误,可通过 SomeIpGetLastError 函数获取错误信息。
  • >0:创建的事件句柄。
可用性
  • 版本:8.1 及以上
  • 限制:仅适用于仿真/测试环境
示例
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);  
  // 设置事件周期性发送(周期 1000ms)  
  SomeIpSetProperty(pev, "CycleTimeMs", 1000);  
}  

void OnPrepareEvent1(DWORD eventHandle, DWORD messageHandle)  
{  
  // 事件发送前调用此函数,可在此处设置参数  
}  

SomeIpAddEventToEventgroup

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

函数

该函数用于将由 SomeIpAddEvent 创建的事件分配给由 SomeIpAddProvidedEventGroup 创建的事件组(Event Group)。

事件可通过 SomeIpRemoveEventFromEventGroup 从事件组中移除。

语法
capl 复制代码
LONG SomeIpAddEventToEventgroup( dword pevgHandle, dword pevHandle );  
参数
  • pevgHandle :事件组句柄(详见 SomeIpAddProvidedEventGroup)。
  • pevHandle :事件句柄(详见 SomeIpAddEvent)。
返回值
  • 0:函数执行成功。
  • >0:错误代码。
可用性
  • 版本:8.1 及以上
  • 限制:仅适用于仿真/测试环境
示例
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);  
  // 设置事件周期性发送(周期 1000ms)  
  SomeIpSetProperty(pev, "CycleTimeMs", 1000);  
}  

void OnPrepareEvent1(DWORD eventHandle, DWORD messageHandle)  
{  
  // 事件发送前调用此函数,可在此处设置参数  
}  

SomeIpAddField

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

函数

该函数用于向由 SomeIpCreateProvidedServiceInstance 创建的提供方服务实例添加字段(Field)。

字段内容可通过访问函数(如 SomeIpSetValue...)设置,但需调用 SomeIpCommitField 才能应用更改。

字段可通过 SomeIpRemoveField 函数移除。

语法
capl 复制代码
dword SomeIpAddField( dword psiHandle, long notificationId, long getterId, long setterId );  
参数
  • psiHandle :提供方服务实例句柄(由 SomeIpCreateProvidedServiceInstance 创建)。
  • notificationId :字段通知标识符。若字段不支持通知,需设为 -1
  • getterId :字段读取方法(Getter)标识符。若消费者调用 Getter,默认返回字段内容;如需自定义行为,需通过 SomeIpAddMethod 创建对应方法。若不支持 Getter,设为 -1
  • setterId :字段写入方法(Setter)标识符。若消费者调用 Setter,默认覆盖字段内容并返回响应;如需自定义行为,需通过 SomeIpAddMethod 创建对应方法。若不支持 Setter,设为 -1
返回值
  • 0 :发生错误,可通过 SomeIpGetLastError 获取错误信息。
  • >0:创建的字段句柄。
可用性
  • 版本:8.1 SP2 及以上
  • 限制:仅适用于仿真/测试环境
示例

假设字段已在 CANoe 配置的 FIBEX 数据库中定义,通知 ID 为 30,Getter ID 为 31,Setter ID 为 32,数据类型为 UINT8:

capl 复制代码
variables  
{  
  DWORD gPfld_A;  // 提供方字段句柄  
}  

void Initialize()  
{  
  CONST DWORD FieldNotificationID = 30;  
  CONST DWORD FieldGetterID = 31;  
  CONST DWORD FieldSetterID = 32;  
  DWORD aep;  // 应用端点句柄  
  DWORD psi;  // 提供方服务句柄  
  DWORD peg;  // 提供方事件组句柄  

  // 打开应用端点  
  aep = SomeIpOpenLocalApplicationEndpoint(17, 50002);  
  // 创建服务实例  
  psi = SomeIpCreateProvidedServiceInstance(aep, 12, 1);  
  // 创建事件组  
  peg = SomeIpAddProvidedEventGroup(psi, 300);  
  // 创建字段并添加到事件组  
  gPfld_A = SomeIpAddField(psi, FieldNotificationID, FieldGetterID, FieldSetterID);  
  SomeIpAddFieldToEventGroup(peg, gPfld_A);  
}  

on key 'n'  
{  
  // 设置字段值(标准数据类型无需路径)  
  SomeIpSetValueDWord(gPfld_A, "", 100);  
  // 提交字段内容,触发通知发送  
  SomeIpCommitField(gPfld_A);  
}  

SomeIpAddFieldToEventgroup

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

函数

该函数用于将由 SomeIpAddField 创建的字段分配给由 SomeIpAddProvidedEventGroup 创建的事件组。

字段可通过 SomeIpRemoveFieldFromEventGroup 从事件组中移除。

语法
capl 复制代码
long SomeIpAddFieldToEventgroup( dword pevgHandle, dword pfHandle );  
参数
  • pevgHandle :事件组句柄(详见 SomeIpAddProvidedEventGroup)。
  • pfHandle :字段句柄(详见 SomeIpAddField)。
返回值
  • 0:函数执行成功。
  • >0:错误代码。
可用性
  • 版本:8.1 SP2 及以上
  • 限制:仅适用于仿真/测试环境
示例

假设字段已在 CANoe 配置的 FIBEX 数据库中定义,通知 ID 为 30,Getter ID 为 31,Setter ID 为 32,数据类型为 UINT8:

capl 复制代码
variables  
{  
  DWORD gPfld_A;  // 提供方字段句柄  
}  

void Initialize()  
{  
  CONST DWORD FieldNotificationID = 30;  
  CONST DWORD FieldGetterID = 31;  
  CONST DWORD FieldSetterID = 32;  
  DWORD aep;  // 应用端点句柄  
  DWORD psi;  // 提供方服务句柄  
  DWORD peg;  // 提供方事件组句柄  

  // 打开应用端点  
  aep = SomeIpOpenLocalApplicationEndpoint(17, 50002);  
  // 创建服务实例  
  psi = SomeIpCreateProvidedServiceInstance(aep, 12, 1);  
  // 创建事件组  
  peg = SomeIpAddProvidedEventGroup(psi, 300);  
  // 创建字段并添加到事件组  
  gPfld_A = SomeIpAddField(psi, FieldNotificationID, FieldGetterID, FieldSetterID);  
  SomeIpAddFieldToEventgroup(peg, gPfld_A);  
}  

on key 'n'  
{  
  // 设置字段值(标准数据类型无需路径)  
  SomeIpSetValueDWord(gPfld_A, "", 100);  
  // 提交字段内容,触发通知发送  
  SomeIpCommitField(gPfld_A);  
}  

SomeIpAddMethod

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

函数

该函数用于向由 SomeIpCreateProvidedServiceInstance 创建的提供方服务实例添加方法(Method)。

当客户端通过 SOME/IP 请求调用该方法时,会触发指定的 CAPL 回调函数。每个方法仅可注册一个回调函数。

注意:若使用形式 1 语法,客户端调用为异步模式,调用后不会阻塞等待响应。SOME/IP IL 不支持同步方法调用。

方法可通过 SomeIpRemoveMethod 函数移除。

语法
capl 复制代码
// 形式 1  
dword SomeIpAddMethod( dword psiHandle, dword methodId, char onMethodRequestCallback[] );  

// 形式 2  
dword SomeIpAddMethod( dword psiHandle, dword methodId, char onMethodRequestCallback[], long fireAndForget );  
参数
  • psiHandle:提供方服务实例句柄。
  • methodId:方法标识符。
  • onMethodRequestCallback :CAPL 回调函数名称,详见 <OnSomeIpMethodRequest>
  • fireAndForget :指定是否发送响应(形式 2):
    • 1:不发送响应;
    • 0:发送响应(默认)。
返回值
  • 0 :发生错误,可通过 SomeIpGetLastError 获取错误信息。
  • >0:创建的方法句柄。
可用性
  • 版本:8.1 及以上
  • 限制:仅适用于仿真/测试环境
示例

假设方法已在 FIBEX 数据库中定义,方法 ID 为 31,含两个输入参数 Member_value1Member_value2 和返回参数 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;  
  // 设置响应值  
  SomeIpSetValueDWord(messageResponseHandle, "Result", res);  
}  

SomeIpAddProvidedEventGroup

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

函数

该函数用于向由 SomeIpCreateProvidedServiceInstance 创建的提供方服务实例添加事件组(Event Group)。

可向事件组添加以下对象:

  • 事件:通过 SomeIpAddEventToEventGroup
  • 字段:通过 SomeIpAddFieldToEventGroup

事件组可通过 SomeIpRemoveProvidedEventGroup 函数移除。

语法
capl 复制代码
dword SomeIpAddProvidedEventGroup( dword psiHandle, dword eventGroupId );  
参数
  • psiHandle:提供方服务实例句柄。
  • eventGroupId:事件组标识符。
返回值
  • 0 :发生错误,可通过 SomeIpGetLastError 获取错误信息。
  • >0:创建的事件组句柄。
可用性
  • 版本:8.1 及以上
  • 限制:仅适用于仿真/测试环境
示例
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);  
  // 设置事件周期性发送(周期 1000ms)  
  SomeIpSetProperty(pev, "CycleTimeMs", 1000);  
}  

void OnPrepareEvent1(DWORD eventHandle, DWORD messageHandle)  
{  
  // 事件发送前调用此函数,可在此处设置参数  
}  

SomeIpCommitField

功能

应用通过访问函数SomeIpSetValue...对字段执行的更改。

若字段值已变更,则发送该字段的通知消息。此操作需实际值发生变化,若设置的值与字段原有值相同,则不发送通知消息。

语法
long SomeIpCommitField( DWORD pfHandle );

参数

  • pfHandle:由SomeIpAddField创建的字段句柄。

返回值

  • 0:函数执行成功。
  • 0:错误代码。

可用性

  • 版本:8.1 SP2及以上
  • 限制:仅适用于仿真/测试环境

示例

假设所用字段包含在CANoe配置关联的FIBEX数据库中,其通知ID为30、Getter ID为31、Setter ID为32,数据类型为标准类型(如UINT8)。

capl 复制代码
variables
{
  DWORD gPfld_A; // 提供的字段句柄
}

void Initialize()
{
  CONST DWORD FieldNotificationID = 30;
  CONST DWORD FieldGetterID = 31;
  CONST DWORD FieldSetterID = 32;
  DWORD aep; // 应用端点句柄
  DWORD psi; // 提供的服务句柄
  DWORD peg; // 提供的事件组句柄

  // 打开应用端点
  aep = SomeIpOpenLocalApplicationEndpoint(17, 50002);
  // 创建服务实例
  psi = SomeIpCreateProvidedServiceInstance(aep, 12, 1);
  // 创建事件组
  peg = SomeIpAddProvidedEventGroup(psi, 300);
  // 创建字段并添加到事件组
  gPfld_A = SomeIpAddField(psi, FieldNotificationID, FieldGetterID, FieldSetterID);
  SomeIpAddFieldToEventGroup(peg, gPfld_A);
}

on key 'n'
{
  // 设置字段内容值(字段为通用数据类型,无需值路径)
  SomeIpSetValueDWord(gPfld_A, "", 100);
  // 提交字段内容......发送通知
  SomeIpCommitField(gPfld_A);
}

SomeIpCreateProvidedServiceInstance

功能

创建提供的服务实例并将其添加到由SomeIpOpenLocalApplicationEndpoint创建的应用端点。可通过以下函数为服务实例分配对象:

  • 事件组:SomeIpAddProvidedEventGroup
  • 事件:SomeIpAddEvent
  • 字段:SomeIpAddField
  • 方法:SomeIpAddMethod

服务实例可通过SomeIpReleaseProvidedServiceInstance删除。

语法

capl 复制代码
dword SomeIpCreateProvidedServiceInstance( dword aepHandle, dword serviceId, dword instanceId ); // 形式1
dword SomeIpCreateProvidedServiceInstance( dword aepHandle, dword serviceId, dword instanceId, dword majorVersion, dword minorVersion ); // 形式2

参数

  • aepHandle:应用端点句柄(见SomeIpOpenLocalApplicationEndpoint)
  • serviceId:服务标识符
  • instanceId:实例标识符
  • majorVersion:服务接口主版本(形式2)
  • minorVersion:服务接口次版本(形式2)

返回值

  • 0:发生错误(可通过SomeIpGetLastError获取错误详情)
  • 0:生成的提供的服务实例句柄

可用性

  • 版本:8.1及以上(形式1),8.5 SP4及以上(形式2)
  • 限制:仅适用于仿真/测试环境

示例

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)
{
  // 事件发送前调用此函数,可在此指定参数
}

SomeIpReleaseProvidedServiceInstance

功能

删除由SomeIpCreateProvidedServiceInstance创建的提供的服务实例。关闭服务实例时,所有关联对象(事件组、事件、字段、方法)也将被关闭。若重新创建服务实例,需重新创建所有对象。

语法
long SomeIpReleaseProvidedServiceInstance( dword psiHandle );

参数

  • psiHandle:待删除的提供的服务实例句柄(见SomeIpCreateProvidedServiceInstance)。

返回值

  • 0:函数执行成功。
  • 0:错误代码。

可用性

  • 版本:8.1及以上
  • 限制:仅适用于仿真/测试环境

示例

capl 复制代码
on key 't'
{
  DWORD aep; // 应用端点句柄
  DWORD psi; // 提供的服务句柄

  // 打开应用端点
  aep = SomeIpOpenLocalApplicationEndpoint(17, 50002);
  // 创建服务
  psi = SomeIpCreateProvidedServiceInstance(aep, 10, 1);
  // ... 执行操作 ...
  // 关闭提供的服务实例
  SomeIpReleaseProvidedServiceInstance(psi);
  // ... 应用端点仍可继续使用 ...
}

SomeIpRemoveEvent

功能

从提供的服务实例中移除由SomeIpAddEvent添加的事件。移除后,SomeIpAddEvent注册的回调不再被调用,SOME/IP IL不再发送该事件。

语法
long SomeIpRemoveEvent( dword pevHandle );

参数

  • pevHandle:待移除事件的句柄(由SomeIpAddEvent创建)。

返回值

  • 0:函数执行成功。
  • 0:错误代码。

可用性

  • 版本:8.1及以上
  • 限制:仅适用于仿真/测试环境

示例

capl 复制代码
on key 't'
{
  DWORD aep; // 应用端点句柄
  DWORD psi; // 提供的服务句柄
  DWORD peg1; // 提供的事件组句柄1
  DWORD peg2; // 提供的事件组句柄2
  DWORD pev; // 提供的事件句柄

  // 打开应用端点
  aep = SomeIpOpenLocalApplicationEndpoint(17, 50002);
  // 创建服务
  psi = SomeIpCreateProvidedServiceInstance(aep, 10, 1);
  // 创建事件组
  peg1 = SomeIpAddProvidedEventGroup(psi, 1);
  peg2 = SomeIpAddProvidedEventGroup(psi, 1);
  // 创建事件并添加到两个事件组
  pev = SomeIpAddEvent(psi, 1, "OnPrepareEvent1");
  SomeIpAddEventToEventgroup(peg1, pev);
  SomeIpAddEventToEventgroup(peg2, pev);
  // 设置事件周期性发送
  SomeIpSetProperty(pev, "CycleTimeMs", 1000);
  // ... 执行操作 ...
  // 移除事件
  SomeIpRemoveEvent(pev);
  // ... 事件从两个事件组中移除,不再发送 ...
  // ... 应用端点、服务实例和事件组仍可使用 ...
}

SomeIpRemoveEventFromEventgroup

功能

从由SomeIpAddProvidedEventGroup创建的事件组中移除由SomeIpAddEvent创建的事件,事件本身不被删除。

语法
long SomeIpRemoveEventFromEventgroup( dword pevgHandle, dword pevHandle );

参数

  • pevgHandle:待移除事件的事件组句柄(见SomeIpAddProvidedEventGroup)。
  • pevHandle:待移除的事件句柄(见SomeIpAddEvent)。

返回值

  • 0:函数执行成功。
  • 0:错误代码。

可用性

  • 版本:8.1及以上
  • 限制:仅适用于仿真/测试环境

示例

capl 复制代码
on key 't'
{
  DWORD aep; // 应用端点句柄
  DWORD psi; // 提供的服务句柄
  DWORD peg1; // 提供的事件组句柄1
  DWORD peg2; // 提供的事件组句柄2
  DWORD pev; // 提供的事件句柄

  // 打开应用端点
  aep = SomeIpOpenLocalApplicationEndpoint(17, 50002);
  // 创建服务
  psi = SomeIpCreateProvidedServiceInstance(aep, 10, 1);
  // 创建事件组
  peg1 = SomeIpAddProvidedEventGroup(psi, 1);
  peg2 = SomeIpAddProvidedEventGroup(psi, 1);
  // 创建事件并添加到两个事件组
  pev = SomeIpAddEvent(psi, 1, "OnPrepareEvent1");
  SomeIpAddEventToEventgroup(peg1, pev);
  SomeIpAddEventToEventgroup(peg2, pev);
  // 设置事件周期性发送
  SomeIpSetProperty(pev, "CycleTimeMs", 1000);
  // ... 执行操作 ...
  // 从事件组1中移除事件
  SomeIpRemoveEventFromEventgroup(peg1, pev);
  // ... 事件仍分配给事件组2 ...
  // ... 应用端点、服务实例和事件组仍可使用 ...
}

SomeIpRemoveField

功能

从提供的服务实例中移除字段。移除后,SomeIpAddField注册的通知回调不再被调用,SOME/IP IL不再发送字段通知,也不再响应字段Setter和Getter方法。

语法
long SomeIpRemoveField( DWORD pfHandle );

参数

  • pfHandle:待移除字段的句柄(由SomeIpAddField创建)。

返回值

  • 0:函数执行成功。
  • 0:错误代码。

可用性

  • 版本:8.1 SP2及以上
  • 限制:仅适用于仿真/测试环境

示例

capl 复制代码
variables
{
  DWORD gPfld_A; // 提供的字段句柄
}

on start()
{
  CONST DWORD FieldNotificationID = 30;
  CONST DWORD FieldGetterID = 31;
  CONST DWORD FieldSetterID = 32;
  DWORD aep; // 应用端点句柄
  DWORD psi; // 提供的服务句柄
  DWORD peg; // 提供的事件组句柄

  // 打开应用端点
  aep = SomeIpOpenLocalApplicationEndpoint(17, 50002);
  // 创建服务实例
  psi = SomeIpCreateProvidedServiceInstance(aep, 12, 1);
  // 创建事件组
  peg = SomeIpAddProvidedEventGroup(psi, 300);
  // 创建字段并添加到事件组
  gPfld_A = SomeIpAddField(psi, FieldNotificationID, FieldGetterID, FieldSetterID);
  SomeIpAddFieldToEventGroup(peg, gPfld_A);
}

on key 'r'
{
  SomeIpRemoveField(gPfld_A);
}

SomeIpRemoveFieldFromEventgroup

功能

从由SomeIpAddProvidedEventGroup创建的事件组中移除由SomeIpAddField创建的字段,字段本身不被删除。

语法
long SomeIpRemoveFieldFromEventgroup( dword pevgHandle, dword pfHandle );

参数

  • pevgHandle:待移除字段的事件组句柄(见SomeIpAddProvidedEventGroup)。
  • pfHandle:待移除的字段句柄(见SomeIpAddField)。

返回值

  • 0:函数执行成功。
  • 0:错误代码。

可用性

  • 版本:8.1 SP2及以上
  • 限制:仅适用于仿真/测试环境

示例

capl 复制代码
variables
{
  DWORD aep; // 应用端点句柄
  DWORD psi; // 提供的服务句柄
  DWORD peg; // 提供的事件组句柄
  DWORD pev; // 提供的事件句柄
}

on start()
{
  // 打开应用端点
  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)
{
  // 事件发送前调用此函数,可在此指定参数
}

on key 'r'
{
  SomeIpRemoveFieldFromEventGroup(peg, pev);
}

SomeIpRemoveMethod

功能

从提供的服务实例中移除方法。移除后,SomeIpAddMethod注册的回调不再被调用。

语法
long SomeIpRemoveMethod( dword methodHandle );

参数

  • methodHandle:待移除方法的句柄(见SomeIpAddMethod)。

返回值

  • 0:函数执行成功。
  • 0:错误代码。

可用性

  • 版本:8.1及以上
  • 限制:仅适用于仿真/测试环境

示例

假设创建的方法包含在CANoe配置关联的FIBEX数据库中,方法ID为31,包含两个输入参数(Member_value1、Member_value2)和一个返回参数(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");
}

on key 'r'
{
  // 移除方法
  SomeIpRemoveMethod(gPm);
}

SomeIpRemoveProvidedEventGroup

功能

从提供的服务实例中移除由SomeIpAddProvidedEventGroup添加的事件组。关闭事件组时,分配给该组的事件和字段不会被删除。

语法
long SomeIpRemoveProvidedEventGroup( dword pevgHandle );

参数

  • pevgHandle:待移除的事件组句柄(见SomeIpAddProvidedEventGroup)。

返回值

  • 0:函数执行成功。
  • 0:错误代码。

可用性

  • 版本:8.1及以上
  • 限制:仅适用于仿真/测试环境

示例

capl 复制代码
on key 't'
{
  DWORD aep; // 应用端点句柄
  DWORD psi; // 提供的服务句柄
  DWORD peg; // 提供的事件组句柄

  // 打开应用端点
  aep = SomeIpOpenLocalApplicationEndpoint(17, 50002);
  // 创建服务
  psi = SomeIpCreateProvidedServiceInstance(aep, 10, 1);
  // 创建事件组
  peg = SomeIpAddProvidedEventGroup(psi, 1);
  // ... 执行操作 ...
  // 移除事件组
  SomeIpRemoveProvidedEventGroup(peg);
  // ... 应用端点和服务实例仍可使用 ...
}

SomeIpTriggerEvent

功能

触发事件发送。之后,CAPL回调函数将被调用,应用可在事件发送给订阅者(通过多播)前修改或更新SOME/IP事件的值。

语法
long SomeIpTriggerEvent( dword pevHandle );

参数

  • pevHandle:待发送事件的句柄(需事先通过SomeIpAddEvent创建)。

返回值

  • 0:函数执行成功。
  • 0:错误代码。

可用性

  • 版本:8.1及以上
  • 限制:仅适用于仿真/测试环境

示例

capl 复制代码
variables
{
  DWORD aep; // 应用端点句柄
  DWORD psi; // 提供的服务句柄
  DWORD peg; // 提供的事件组句柄
  DWORD pev; // 提供的事件句柄
}

on start()
{
  // 打开应用端点
  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)
{
  // 事件发送前调用此函数,可在此指定参数
}

on key 't'
{
  SomeIpTriggerEvent(pev);
}
相关推荐
北京耐用通信1 天前
告别调试噩梦:耐达讯自动化实现EtherNet/IP转DeviceNet网关即插即用
人工智能·物联网·网络协议·自动化·信息与通信
Arva .1 天前
为什么需要四次挥手
网络·tcp/ip
llilian_161 天前
微型低功耗原子钟筑牢多行业时频基准 低功耗原子钟
人工智能·单片机·嵌入式硬件·网络协议·其他·51单片机
老蒋新思维1 天前
创客匠人万人峰会解码:AI+IP 能力裂变,知识变现告别 “单点依赖” 时代
大数据·网络·人工智能·tcp/ip·创始人ip·创客匠人·知识变现
就叫飞六吧1 天前
HTTP Basic认证完全指南
网络·网络协议·http
石牌桥网管1 天前
Linux ip 命令教程
linux·运维·tcp/ip
Tandy12356_1 天前
手写TCP/IP协议——IP层输出处理
c语言·网络·c++·tcp/ip·计算机网络
luoganttcc1 天前
tcp 三次 握手
网络·网络协议·tcp/ip
老蒋新思维1 天前
创客匠人峰会洞察:私域 AI 化重塑知识变现 —— 创始人 IP 的私域增长新引擎
大数据·网络·人工智能·网络协议·tcp/ip·创始人ip·创客匠人