Modify
前置阅读
- 创建订阅请看 创建 Subscription.
- 整条订阅启停 / 单 MI 启停请看 SetMonitoringMode.
sub.Modify(...)
修改 Subscription 的发布参数 (ModifySubscription 服务):
public ModifySubscriptionResult Modify(
double publishingIntervalMs,
uint lifetimeCount = 1200,
uint maxKeepAliveCount = 50,
uint maxNotificationsPerPublish = 0,
byte priority = 0);
| 参数 | 含义 |
|---|---|
publishingIntervalMs | 新发布间隔 |
lifetimeCount | 多少个 publish 周期没收到 PublishRequest 就清理订阅 |
maxKeepAliveCount | 没新数据时多久发一次空 KeepAlive |
maxNotificationsPerPublish | 单次 Publish 最多发多少条通知, 0 = 不限 |
priority | 优先级 |
返回 ModifySubscriptionResult, 字段 RevisedPublishingIntervalMs / RevisedLifetimeCount / RevisedMaxKeepAliveCount 是服务端实际生效值.
var rev = sub.Modify(publishingIntervalMs: 1000, lifetimeCount: 600, maxKeepAliveCount: 30);
Console.WriteLine($"Revised publishing interval = {rev.RevisedPublishingIntervalMs}ms");
sub.ModifyMonitoredItems(requests)
批量修改 MI 采样参数 (ModifyMonitoredItems 服务):
public IReadOnlyList<ModifyMonitoredItemResult> ModifyMonitoredItems(
IReadOnlyList<MonitoredItemModifyRequest> requests);
MonitoredItemModifyRequest 字段:
| 字段 | 默认 | 说明 |
|---|---|---|
MonitoredItemHandle | — | 本地 MI 句柄 |
SamplingIntervalMs | -1 | -1 = 跟订阅, 0 = 尽快 |
QueueSize | 1 | 服务端缓冲队列长度 |
DiscardOldest | true | true = 丢最旧, false = 丢最新 |
返回 ModifyMonitoredItemResult:
| 字段 | 说明 |
|---|---|
Status | 修改结果 |
RevisedSamplingIntervalMs | 服务端实际采样间隔 |
RevisedQueueSize | 服务端实际队列大小 |
var requests = miHandles.Select(h => new MonitoredItemModifyRequest
{
MonitoredItemHandle = h,
SamplingIntervalMs = 50,
QueueSize = 10,
DiscardOldest = true
}).ToList();
var results = sub.ModifyMonitoredItems(requests);
sub.ModifyItem(...) 单 MI 简化版
public ModifyMonitoredItemResult ModifyItem(
uint monitoredItemHandle,
double samplingIntervalMs,
uint queueSize = 1,
bool discardOldest = true);
var r = sub.ModifyItem(handle, samplingIntervalMs: 50);
Console.WriteLine($"Revised sampling = {r.RevisedSamplingIntervalMs}ms");
QueueSize 与 DiscardOldest
服务端为每个 MI 维护一个先进先出队列. 当客户端 Publish 来不及取时, 队列满了:
DiscardOldest = true(默认) → 丢最旧, 保留最新DiscardOldest = false→ 丢最新, 保留最旧
QueueSize = 1 (默认) 只保留最新值, 适合"实时显示"; QueueSize = N (N > 1) 适合"采样不能漏"的高频数据.