Auto: abcip-4.1 — per-tag scan rate / scan group bucketing

Closes #238
This commit is contained in:
Joseph Doherty
2026-04-26 02:15:50 -04:00
parent e5c38a5a0e
commit b45713622f
8 changed files with 761 additions and 7 deletions

View File

@@ -84,7 +84,9 @@ public static class AbCipDriverFactoryExtensions
Writable: m.Writable ?? true,
WriteIdempotent: m.WriteIdempotent ?? false))]
: null,
SafetyTag: t.SafetyTag ?? false);
SafetyTag: t.SafetyTag ?? false,
// PR abcip-4.1 — per-tag scan rate override; null means "use subscription default".
ScanRateMs: t.ScanRateMs);
private static T ParseEnum<T>(string? raw, string? tagName, string driverInstanceId, string field,
T? fallback = null) where T : struct, Enum
@@ -169,6 +171,15 @@ public static class AbCipDriverFactoryExtensions
public bool? WriteIdempotent { get; init; }
public List<AbCipMemberDto>? Members { get; init; }
public bool? SafetyTag { get; init; }
/// <summary>
/// PR abcip-4.1 — optional per-tag publish-rate override (in milliseconds). When
/// present, the driver places this tag in its own <see cref="Core.Abstractions.PollGroupEngine"/>
/// bucket so it ticks at <c>ScanRateMs</c> regardless of the subscription's default
/// publishing interval. <c>null</c> uses the default — back-compat with deployments
/// that don't set the knob. Mirrors Kepware's "scan classes" model.
/// </summary>
public int? ScanRateMs { get; init; }
}
internal sealed class AbCipMemberDto