diff --git a/src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.Modbus/ModbusDriver.cs b/src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.Modbus/ModbusDriver.cs
index c045297d..c9163936 100644
--- a/src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.Modbus/ModbusDriver.cs
+++ b/src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.Modbus/ModbusDriver.cs
@@ -1491,30 +1491,13 @@ public sealed class ModbusDriver
/// Map a Modbus logical type to the driver-agnostic used
/// by the address-space builder.
///
- ///
- ///
- /// Driver.Modbus-007 — Int64 / UInt64 surfacing limitation:
- /// does not yet include an Int64 enum member, so 64-bit
- /// Modbus tags currently surface as on the OPC UA
- /// address space. The wire codec (DecodeRegister / EncodeRegister) is
- /// correct — values round-trip as 64-bit long / ulong through
- /// ReadAsync / WriteAsync. Only the variable node's DataType
- /// attribute is misreported. Clients that consume the type advertisement will see a
- /// type/value mismatch for values outside the 32-bit signed range. Operators
- /// configuring I_64 / UI_64 tags should be aware of this until the
- /// tracked DriverDataType.Int64 follow-up ships.
- ///
- ///
- private static DriverDataType MapDataType(ModbusDataType t) => t switch
+ internal static DriverDataType MapDataType(ModbusDataType t) => t switch
{
ModbusDataType.Bool or ModbusDataType.BitInRegister => DriverDataType.Boolean,
ModbusDataType.Int16 or ModbusDataType.Int32 => DriverDataType.Int32,
ModbusDataType.UInt16 or ModbusDataType.UInt32 => DriverDataType.Int32,
- // Driver.Modbus-007: Int64 / UInt64 currently surface as Int32 because DriverDataType
- // has no Int64 member yet. The wire codec preserves the 64-bit value; only the OPC UA
- // node's declared DataType is widened. Tracked for a follow-up that adds the enum
- // member + node-type advertisement.
- ModbusDataType.Int64 or ModbusDataType.UInt64 => DriverDataType.Int32,
+ ModbusDataType.Int64 => DriverDataType.Int64,
+ ModbusDataType.UInt64 => DriverDataType.UInt64,
ModbusDataType.Float32 => DriverDataType.Float32,
ModbusDataType.Float64 => DriverDataType.Float64,
ModbusDataType.String => DriverDataType.String,
diff --git a/tests/Drivers/ZB.MOM.WW.OtOpcUa.Driver.Modbus.Tests/ModbusDataTypeTests.cs b/tests/Drivers/ZB.MOM.WW.OtOpcUa.Driver.Modbus.Tests/ModbusDataTypeTests.cs
index e9b2a201..eea381c4 100644
--- a/tests/Drivers/ZB.MOM.WW.OtOpcUa.Driver.Modbus.Tests/ModbusDataTypeTests.cs
+++ b/tests/Drivers/ZB.MOM.WW.OtOpcUa.Driver.Modbus.Tests/ModbusDataTypeTests.cs
@@ -1,6 +1,7 @@
using System.Buffers.Binary;
using Shouldly;
using Xunit;
+using ZB.MOM.WW.OtOpcUa.Core.Abstractions;
using ZB.MOM.WW.OtOpcUa.Driver.Modbus;
namespace ZB.MOM.WW.OtOpcUa.Driver.Modbus.Tests;
@@ -278,6 +279,17 @@ public sealed class ModbusDataTypeTests
ModbusDriver.DecodeRegister(wire, lo).ShouldBe("eH");
}
+ // --- MapDataType node DataType advertisement ---
+
+ ///
+ /// Verifies that 64-bit Modbus types surface the correct DriverDataType (not the stale Int32 fallback).
+ ///
+ [Theory]
+ [InlineData(ModbusDataType.Int64, DriverDataType.Int64)]
+ [InlineData(ModbusDataType.UInt64, DriverDataType.UInt64)]
+ public void MapDataType_64bit_surfaces_correct_DriverDataType(ModbusDataType wire, DriverDataType expected)
+ => ModbusDriver.MapDataType(wire).ShouldBe(expected);
+
// --- BCD (binary-coded decimal, DL205/DL260 default numeric encoding) ---
///