fix(drivers): ILoggerFactory on FOCAS+TwinCAT factories; replace stale TODO(v3 WaveC); AbCip browsePageDelayMs form field; document Device1 + Modbus health (#608 #602 #596)
Claude-Session: https://claude.ai/code/session_01Ef2ozxS7QPanGT8uoATbTe
This commit is contained in:
+11
-1
@@ -46,6 +46,11 @@
|
||||
</InputSelect>
|
||||
<div class="form-text">Which protocol stack talks to the controller. Default omits the setting so the node-level <code>Drivers:AbCip:DefaultTransport</code> picks (Native unless an operator pinned it); takes effect on the next deploy.</div>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<label class="form-label" for="abcipBrowsePageDelay">Browse page delay (ms)</label>
|
||||
<InputNumber @bind-Value="_form.BrowsePageDelayMs" @bind-Value:after="EmitAsync" class="form-control form-control-sm" id="abcipBrowsePageDelay" />
|
||||
<div class="form-text">Pause between controller symbol-browse pages (<code>browsePageDelayMs</code>). Default 5 ms; 0 disables the pause.</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -147,7 +152,7 @@
|
||||
/// <summary>The factory binds integer-millisecond keys, not the TimeSpan strings the typed options serialise (#576).</summary>
|
||||
internal static readonly (string TimeSpanPath, string MsPath)[] TimeSpanToMs =
|
||||
[
|
||||
("timeout", "timeoutMs"), ("alarmPollInterval", "alarmPollIntervalMs"),
|
||||
("timeout", "timeoutMs"), ("alarmPollInterval", "alarmPollIntervalMs"), ("browsePageDelay", "browsePageDelayMs"),
|
||||
("probe.interval", "probe.intervalMs"), ("probe.timeout", "probe.timeoutMs"),
|
||||
];
|
||||
|
||||
@@ -215,6 +220,8 @@
|
||||
public int MaxConcurrentReads { get; set; } = 8;
|
||||
public bool EnableControllerBrowse { get; set; } = false;
|
||||
public bool EnableDeclarationOnlyUdtGrouping { get; set; } = false;
|
||||
// Milliseconds between controller symbol-browse pages (factory key browsePageDelayMs; default 5).
|
||||
public int BrowsePageDelayMs { get; set; } = 5;
|
||||
|
||||
// Alarm projection
|
||||
public bool EnableAlarmProjection { get; set; } = false;
|
||||
@@ -241,6 +248,7 @@
|
||||
f._loadedAlarmPoll = Ms(json, "alarmPollIntervalMs") ?? f._loadedAlarmPoll;
|
||||
f._loadedProbeInterval = Ms(json, "probe.intervalMs") ?? f._loadedProbeInterval;
|
||||
f._loadedProbeTimeout = Ms(json, "probe.timeoutMs") ?? f._loadedProbeTimeout;
|
||||
f.BrowsePageDelayMs = DriverConfigMs.Read(json, "browsePageDelayMs") ?? f.BrowsePageDelayMs;
|
||||
f.TimeoutSeconds = DriverConfigMs.ToSeconds(f._loadedTimeout ?? o.Timeout);
|
||||
f.AlarmPollIntervalSeconds = DriverConfigMs.ToSeconds(f._loadedAlarmPoll ?? o.AlarmPollInterval);
|
||||
f.ProbeIntervalSeconds = DriverConfigMs.ToSeconds(f._loadedProbeInterval ?? o.Probe.Interval);
|
||||
@@ -259,6 +267,7 @@
|
||||
MaxConcurrentReads = o.MaxConcurrentReads,
|
||||
EnableControllerBrowse = o.EnableControllerBrowse,
|
||||
EnableDeclarationOnlyUdtGrouping = o.EnableDeclarationOnlyUdtGrouping,
|
||||
BrowsePageDelayMs = (int)o.BrowsePageDelay.TotalMilliseconds,
|
||||
EnableAlarmProjection = o.EnableAlarmProjection,
|
||||
AlarmPollIntervalSeconds = (int)o.AlarmPollInterval.TotalSeconds,
|
||||
ProbeEnabled = o.Probe.Enabled,
|
||||
@@ -286,6 +295,7 @@
|
||||
EnableAlarmProjection = EnableAlarmProjection,
|
||||
AlarmPollInterval = DriverConfigMs.Save(AlarmPollIntervalSeconds, _loadedAlarmPoll),
|
||||
EnableDeclarationOnlyUdtGrouping = EnableDeclarationOnlyUdtGrouping,
|
||||
BrowsePageDelay = TimeSpan.FromMilliseconds(Math.Max(0, BrowsePageDelayMs)),
|
||||
ProbeTimeoutSeconds = AdminProbeTimeoutSeconds,
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user