CAPL学习-SOME/IP交互层-服务发现类函数

Service Discovery

SomeIpSDSubscribeEventGroup

函数

通过 SomeIpSDDesubscribeEventGroup 函数在节点(消费者)上注销的事件组,可通过本函数重新注册。随后将发送相关的服务发现消息(订阅事件组)。

语法
long SomeIpSDSubscribeEventGroup( dword cevgHandle, LONG tillReboot );

参数

  • cevgHandle:已消费事件组的句柄(参见 SomeIpAddConsumedEventGroup)。
  • tillReboot
    • 1:注册时将 TTL 设置为无限值。事件组注册(订阅事件组)仅执行一次,并保持到通信伙伴(生产者或消费者)重启。
    • 0:TTL 设置为预设值(参见 SomeIpSetProperty)。事件组注册将多次发送。

返回值

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

可用性

  • 版本:8.1 及以上
  • 限制:仅以太网
  • 适用场景:------(测量设置)•(仿真/测试设置)

示例

capl 复制代码
variables
{
  DWORD aep; // 应用端点句柄
  DWORD csi; // 已消费服务实例句柄
  DWORD ceg; // 已消费事件组句柄
  DWORD cev; // 已消费事件句柄
}

on start()
{
  // 打开应用端点
  aep = SomeIpOpenLocalApplicationEndpoint(17, 50002);
  // 创建服务实例
  csi = SomeIpCreateConsumedServiceInstance(aep, 10, 1);
  // 创建事件组
  ceg = SomeIpAddConsumedEventGroup(csi, 1);
  // 创建事件消费者
  cev = SomeIpCreateEventConsumer(csi, 32770, "CallbackEvent1");
}

void CallbackEvent1(DWORD cevHandle, DWORD messageHandle)
{
  // 事件发送时调用此函数,可在此处评估参数
}

on key 'd'
{
  SomeIpSDDesubscribeEventGroup(ceg);
  write("事件组已取消订阅");
}

on key 's'
{
  SomeIpSDSubscribeEventgroup(ceg, 1);
  write("事件组将重新订阅");
}

SomeIpSDSetServiceStatus

函数

在节点(生产者)上设置提供的服务实例状态。

语法
long SomeIpSDSetServiceStatus( dword psiHandle, long up );

参数

  • psiHandle:所需提供的服务实例句柄(参见 SomeIpCreateProvidedServiceInstance)。
  • up
    • 1:状态改为"启用",开始发送 OfferServices 消息。
    • 0:状态改为"禁用",若服务先前处于启用状态,则发送 StopOfferService 消息。

返回值

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

可用性

  • 版本:8.1 及以上
  • 限制:仅以太网
  • 适用场景:------(测量设置)•(仿真/测试设置)

示例

capl 复制代码
dword appEndpointHandle;
dword serviceHandle;
appEndpointHandle = SomeIpOpenLocalApplicationEndpoint(kUDP, 30501);
serviceHandle = SomeIpCreateConsumedServiceInstance(appEndpointHandle, 1 /*serviceId*/, 1 /*instanceId*/);
SomeIpSDSetServiceStatus(serviceHandle, 0); // 不提供此服务

SomeIpSDRequireService

函数

通过 SomeIpSDReleaseService 函数在节点(消费者)上注销的服务,可通过本函数重新注册。必要时发送相关的服务发现消息(查找服务)。

语法
long SomeIpSDRequireService( dword csiHandle );

参数

  • csiHandle:所需已消费服务实例的句柄(参见 SomeIpCreateConsumedServiceInstance)。

返回值

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

可用性

  • 版本:8.1 及以上
  • 限制:仅以太网
  • 适用场景:------(测量设置)•(仿真/测试设置)

示例

capl 复制代码
variables
{
  DWORD aep; // 应用端点句柄
  DWORD csi; // 已消费服务实例句柄
  DWORD ceg; // 已消费事件组句柄
  DWORD cev; // 已消费事件句柄
}

on start()
{
  // 打开应用端点
  aep = SomeIpOpenLocalApplicationEndpoint(17, 50002);
  // 创建服务实例
  csi = SomeIpCreateConsumedServiceInstance(aep, 10, 1);
  // 创建事件组
  ceg = SomeIpAddConsumedEventGroup(csi, 1);
  // 创建事件消费者
  cev = SomeIpCreateEventConsumer(csi, 32770, "CallbackEvent1");
}

void CallbackEvent1(DWORD cevHandle, DWORD messageHandle)
{
  // 事件发送时调用此函数,可在此处评估参数
}

on key 'r'
{
  SomeIpSDRequireService(csi);
}

on key 'x'
{
  SomeIpSDReleaseService(csi);
}

SomeIpSDReleaseService

函数

在节点(消费者)上注销服务。节点将不再发送相关的服务发现消息(查找服务)。服务实例注销时,其关联的事件组、事件、字段和方法不会被删除。

语法
long SomeIpSDReleaseService( dword csiHandle );

参数

  • csiHandle:待释放的已消费服务实例句柄(参见 SomeIpCreateConsumedServiceInstance)。

返回值

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

可用性

  • 版本:8.1 及以上
  • 限制:仅以太网
  • 适用场景:------(测量设置)•(仿真/测试设置)

示例

capl 复制代码
variables
{
  DWORD aep; // 应用端点句柄
  DWORD csi; // 已消费服务实例句柄
  DWORD ceg; // 已消费事件组句柄
  DWORD cev; // 已消费事件句柄
}

on start()
{
  // 打开应用端点
  aep = SomeIpOpenLocalApplicationEndpoint(17, 50002);
  // 创建服务实例
  csi = SomeIpCreateConsumedServiceInstance(aep, 10, 1);
  // 创建事件组
  ceg = SomeIpAddConsumedEventGroup(csi, 1);
  // 创建事件消费者
  cev = SomeIpCreateEventConsumer(csi, 32770, "CallbackEvent1");
}

void CallbackEvent1(DWORD cevHandle, DWORD messageHandle)
{
  // 事件发送时调用此函数,可在此处评估参数
}

on key 'r'
{
  SomeIpSDRequireService(csi);
}

on key 'x'
{
  SomeIpSDReleaseService(csi);
}

SomeIpSDDesubscribeEventGroup

函数

在节点(消费者)上注销事件组。终止现有订阅(发送停止订阅事件组消息),节点将不再发送相关的服务发现消息(订阅事件组)。事件组注销时,其关联的事件、字段和方法不会被删除。

语法
long SomeIpSDDesubscribeEventGroup( dword cevgHandle );

参数

  • cevgHandle:已消费事件组的句柄(参见 SomeIpAddConsumedEventGroup)。

返回值

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

可用性

  • 版本:8.1 及以上
  • 限制:仅以太网
  • 适用场景:------(测量设置)•(仿真/测试设置)

示例

capl 复制代码
variables
{
  DWORD aep; // 应用端点句柄
  DWORD csi; // 已消费服务实例句柄
  DWORD ceg; // 已消费事件组句柄
  DWORD cev; // 已消费事件句柄
}

on start()
{
  // 打开应用端点
  aep = SomeIpOpenLocalApplicationEndpoint(17, 50002);
  // 创建服务实例
  csi = SomeIpCreateConsumedServiceInstance(aep, 10, 1);
  // 创建事件组
  ceg = SomeIpAddConsumedEventGroup(csi, 1);
  // 创建事件消费者
  cev = SomeIpCreateEventConsumer(csi, 32770, "CallbackEvent1");
}

void CallbackEvent1(DWORD cevHandle, DWORD messageHandle)
{
  // 事件发送时调用此函数,可在此处评估参数
}

on key 'd'
{
  SomeIpSDDesubscribeEventGroup(ceg);
  write("事件组已取消订阅");
}

on key 's'
{
  SomeIpSDSubscribeEventgroup(ceg, 1);
  write("事件组将重新订阅");
}
相关推荐
CHENKONG_CK2 天前
破解制鞋打磨痛点:RFID赋能去毛刺工序自动化升级
网络·单片机·嵌入式硬件·网络协议·tcp/ip
开开心心就好2 天前
安卓手写文字生成工具,多种纸张一直免费
网络·网络协议·tcp/ip·leetcode·智能手机·电脑·模拟退火算法
渡我白衣2 天前
HttpRequest与HttpResponse的实现
服务器·数据结构·c++·人工智能·tcp/ip·机器学习·caffe
IpdataCloud3 天前
如何判断游戏注册IP是住宅宽带还是机房代理?IP风险识别看ASN、IDC标签与风险分
tcp/ip·ip
嵌入式科普4 天前
嵌入式科普(57) 各类MCU/MPU的以太网功能详细对比
以太网·ethercat·profinet·gmac
酣大智4 天前
华为 VRRP的抢占延迟时间
网络·tcp/ip·vrrp
酣大智4 天前
网络协议计时器 & 发包间隔汇总
运维·网络·tcp/ip
IpdataCloud4 天前
AI智能体调用工具怎么核验来源IP?归属地、网络类型与代理风险识别(含Python代码)
数据库·python·tcp/ip
ITxiaobing20235 天前
IP 地理定位数据库的技术选型:数据源、格式与精度对比
tcp/ip
盛世宏博智慧档案5 天前
动环监控设备怎么选?Modbus TCP以太网温湿度变送器方案解析
以太网·温湿度·变送器