diff --git a/src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.Modbus.Contracts/ModbusTransportMode.cs b/src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.Modbus.Contracts/ModbusTransportMode.cs new file mode 100644 index 00000000..6d7cfe0d --- /dev/null +++ b/src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.Modbus.Contracts/ModbusTransportMode.cs @@ -0,0 +1,17 @@ +namespace ZB.MOM.WW.OtOpcUa.Driver.Modbus; + +/// +/// Wire transport for a Modbus driver instance. = Modbus/TCP (MBAP + TxId); +/// = RTU framing (address + CRC-16, no MBAP) tunnelled over a socket to +/// a serial→Ethernet gateway. Default — existing configs omit the field. +/// A direct-serial Rtu member is intentionally NOT reserved here (descoped 2026-07-15); +/// do not number-squat it. +/// +public enum ModbusTransportMode +{ + /// Modbus/TCP — 7-byte MBAP header + transaction id (the historical default). + Tcp, + + /// RTU framing ([addr][PDU][CRC-16]) tunnelled over a socket to a serial→Ethernet gateway. + RtuOverTcp, +} diff --git a/tests/Drivers/ZB.MOM.WW.OtOpcUa.Driver.Modbus.Tests/ModbusTransportModeTests.cs b/tests/Drivers/ZB.MOM.WW.OtOpcUa.Driver.Modbus.Tests/ModbusTransportModeTests.cs new file mode 100644 index 00000000..dc3b2d0e --- /dev/null +++ b/tests/Drivers/ZB.MOM.WW.OtOpcUa.Driver.Modbus.Tests/ModbusTransportModeTests.cs @@ -0,0 +1,15 @@ +using Shouldly; +using Xunit; + +namespace ZB.MOM.WW.OtOpcUa.Driver.Modbus.Tests; + +public sealed class ModbusTransportModeTests +{ + [Fact] + public void Tcp_is_the_default_zero_member() + => ((ModbusTransportMode)0).ShouldBe(ModbusTransportMode.Tcp); + + [Fact] + public void Exactly_two_members_ship_in_v1() + => Enum.GetNames().ShouldBe(["Tcp", "RtuOverTcp"]); +}