跳到主要内容

SetMonitoringMode (C)

每个 MonitoredItem 有 3 种 monitoring mode:

Mode 枚举服务端采样服务端推送用途
DARRA_UA_MI_MODE_DISABLED (0)××完全停 (不采也不推)
DARRA_UA_MI_MODE_SAMPLING (1)×采样但不推 (记历史 / 死区计算)
DARRA_UA_MI_MODE_REPORTING (2, 默认)正常运作
前置阅读
  • 想停整条订阅 (而不是逐 MI) 看下面 SetPublishingMode.
  • 修改采样参数请看 Modify.

API

DARRA_OPCUA_API DarraUa_Status DARRA_OPCUA_CALL DarraUa_Subscription_SetMonitoringMode(
DarraUa_SubscriptionHandle h,
DarraUa_MonitoringMode mode,
const uint32_t* mi_handles,
uint32_t count,
DarraUa_Status* out_results);

mi_handles + count 描述目标 MI 集合, out_results 长度 ≥ count, 由调用方分配. 顶层返回值反映传输级状态; 单项状态在 out_results[i] 里.

/* 临时停止全部采集 (例如设备维护期间) */
uint32_t all_mis[100] = { /* ... */ };
DarraUa_Status results[100] = { 0 };
DarraUa_Subscription_SetMonitoringMode(
sub, DARRA_UA_MI_MODE_DISABLED, all_mis, 100, results);

for (int i = 0; i < 100; ++i)
if (!DARRA_UA_STATUS_IS_GOOD(results[i]))
printf("mi=%u failed: %s\n", all_mis[i], DarraUa_StatusName(results[i]));

/* 维护完恢复 */
DarraUa_Subscription_SetMonitoringMode(
sub, DARRA_UA_MI_MODE_REPORTING, all_mis, 100, results);

单 MI 切

C SDK 没有"单 MI 简化版", 数组长度传 1 即可:

uint32_t one[1] = { mi };
DarraUa_Status r[1] = { 0 };
DarraUa_Subscription_SetMonitoringMode(
sub, DARRA_UA_MI_MODE_DISABLED, one, 1, r);

整条订阅启停 (PublishingEnabled)

如果想停整条订阅 (而不是逐 MI), 用 _SetPublishingMode:

DARRA_OPCUA_API DarraUa_Status DARRA_OPCUA_CALL DarraUa_Subscription_SetPublishingMode(
DarraUa_SubscriptionHandle sub,
int32_t enabled);
DarraUa_Subscription_SetPublishingMode(sub, 0);   /* 停 */
DarraUa_Subscription_SetPublishingMode(sub, 1); /* 恢复 */

enabled = 0 后, 服务端仍然采样, 但不推送; = 1 恢复推送.


三种粒度对比

粒度API适用
整条订阅_Subscription_SetPublishingMode临时全停 (维护)
一批 MI_Subscription_SetMonitoringMode(mode, handles, n)部分模块停
单 MI同上, n = 1精细控制
完全删除_MonitoredItem_Delete(sub, mi) / _Subscription_Delete(sub)永久不要了

下一步