using CliFx.Attributes; using ZB.MOM.WW.OtOpcUa.Driver.AbLegacy.PlcFamilies; using ZB.MOM.WW.OtOpcUa.Driver.Cli.Common; namespace ZB.MOM.WW.OtOpcUa.Driver.AbLegacy.Cli; /// /// Base for every AB Legacy CLI command. Carries the PCCC-specific endpoint options /// (--gateway + --plc-type) on top of 's /// shared verbose + timeout + logging helpers. /// public abstract class AbLegacyCommandBase : DriverCommandBase { [CommandOption("gateway", 'g', Description = "Canonical AB Legacy gateway: ab://host[:port]/cip-path. Port defaults to 44818. " + "cip-path depends on the family: SLC 5/05 + PLC-5 typically '1,0'; MicroLogix " + "1100/1400 takes an empty path (direct EIP, no backplane).", IsRequired = true)] public string Gateway { get; init; } = default!; [CommandOption("plc-type", 'P', Description = "Slc500 / MicroLogix / Plc5 / LogixPccc (default Slc500).")] public AbLegacyPlcFamily PlcType { get; init; } = AbLegacyPlcFamily.Slc500; [CommandOption("timeout-ms", Description = "Per-operation timeout in ms (default 5000).")] public int TimeoutMs { get; init; } = 5000; /// public override TimeSpan Timeout { get => TimeSpan.FromMilliseconds(TimeoutMs); init { /* driven by TimeoutMs */ } } /// /// Build an with the device + tag list a subclass /// supplies. Probe disabled for CLI one-shot runs. /// protected AbLegacyDriverOptions BuildOptions(IReadOnlyList tags) => new() { Devices = [new AbLegacyDeviceOptions( HostAddress: Gateway, PlcFamily: PlcType, DeviceName: $"cli-{PlcType}")], Tags = tags, Timeout = Timeout, Probe = new AbLegacyProbeOptions { Enabled = false }, }; protected string DriverInstanceId => $"ablegacy-cli-{Gateway}"; }