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:
@@ -224,9 +224,9 @@ public sealed class FocasDriver : IDriver, IReadable, IWritable, ITagDiscovery,
|
||||
_driverInstanceId, entry.RawPath);
|
||||
continue;
|
||||
}
|
||||
// TODO(v3 WaveC): the live device host must come from the tag's Device row's DeviceConfig
|
||||
// (keyed by the RawPath's device segment). Until Wave C threads DeviceConfig through, recover
|
||||
// the host by matching the entry's DeviceName against the configured Devices list.
|
||||
// options.Devices already IS the per-device DeviceConfig (DriverDeviceConfigMerger rebuilds it at
|
||||
// deploy time, one object per Device row with DeviceName = the RawPath device segment), so the
|
||||
// host is recovered by DeviceName against that list.
|
||||
var deviceHost = ResolveDeviceHost(entry.DeviceName);
|
||||
if (deviceHost is null)
|
||||
throw new InvalidOperationException(
|
||||
@@ -382,11 +382,10 @@ public sealed class FocasDriver : IDriver, IReadable, IWritable, ITagDiscovery,
|
||||
internal bool IsParsedAddressCached(string reference) =>
|
||||
_parsedAddressesByTagName.ContainsKey(reference);
|
||||
|
||||
// TODO(v3 WaveC): the live device host must come from the tag's Device row's DeviceConfig (keyed by
|
||||
// the RawPath's device segment). Until Wave C threads DeviceConfig through, recover the host by matching
|
||||
// the RawTagEntry's DeviceName against the configured Devices list (by DeviceName, falling back to
|
||||
// HostAddress; and, for a single-device driver, an empty DeviceName routes to the sole device). Returns
|
||||
// null when no device matches — the caller fails the tag fast (Driver.FOCAS-003).
|
||||
// Recovers the host by matching the RawTagEntry's DeviceName against the configured Devices list (which
|
||||
// DriverDeviceConfigMerger fills from each Device row's DeviceConfig). By DeviceName, falling back to
|
||||
// HostAddress (the Client CLI passes the host as the DeviceName); for a single-device driver an empty
|
||||
// DeviceName routes to the sole device. Returns null when no device matches — the caller fails the tag fast (Driver.FOCAS-003).
|
||||
private string? ResolveDeviceHost(string deviceName)
|
||||
{
|
||||
foreach (var d in _options.Devices)
|
||||
|
||||
Reference in New Issue
Block a user