using ZB.MOM.WW.OtOpcUa.Core.Abstractions; namespace ZB.MOM.WW.OtOpcUa.Driver.AbLegacy; /// /// PCCC data types that map onto SLC / MicroLogix / PLC-5 files. Narrower than Logix — no /// symbolic UDTs; every type is file-typed and fixed-width. /// public enum AbLegacyDataType { /// B-file single bit (B3:0/0) or bit-within-N-file (N7:0/3). Bit, /// N-file integer (signed 16-bit). Int, /// L-file long integer — SLC 5/05+ only (signed 32-bit). Long, /// F-file float (32-bit IEEE-754). Float, /// A-file analog integer — some older hardware (signed 16-bit, semantically like N). AnalogInt, /// ST-file string (82-byte fixed-length + length word header). String, /// Timer sub-element — caller addresses .ACC, .PRE, .EN, .DN, .TT. TimerElement, /// Counter sub-element — caller addresses .ACC, .PRE, .CU, .CD, .DN. CounterElement, /// Control sub-element — caller addresses .LEN, .POS, .EN, .DN, .ER. ControlElement, } /// Map a PCCC data type to the driver-surface . public static class AbLegacyDataTypeExtensions { public static DriverDataType ToDriverDataType(this AbLegacyDataType t) => t switch { AbLegacyDataType.Bit => DriverDataType.Boolean, AbLegacyDataType.Int or AbLegacyDataType.AnalogInt => DriverDataType.Int32, AbLegacyDataType.Long => DriverDataType.Int32, // matches Modbus/AbCip 64→32 gap AbLegacyDataType.Float => DriverDataType.Float32, AbLegacyDataType.String => DriverDataType.String, AbLegacyDataType.TimerElement or AbLegacyDataType.CounterElement or AbLegacyDataType.ControlElement => DriverDataType.Int32, _ => DriverDataType.Int32, }; }