From e787aa572bd61020e7297c3324e3523eab5a291c Mon Sep 17 00:00:00 2001 From: Joseph Doherty Date: Fri, 24 Jul 2026 13:28:30 -0400 Subject: [PATCH] feat(modbus-rtu): add ModbusTransportMode enum (Tcp | RtuOverTcp) Claude-Session: https://claude.ai/code/session_01GASWkNEi68FSCtvr6rLoEW --- .../ModbusTransportMode.cs | 17 +++++++++++++++++ .../ModbusTransportModeTests.cs | 15 +++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.Modbus.Contracts/ModbusTransportMode.cs create mode 100644 tests/Drivers/ZB.MOM.WW.OtOpcUa.Driver.Modbus.Tests/ModbusTransportModeTests.cs 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"]); +}