Hello.
Yes, QuickOPC does not change values it reads or writes (leaving aside types conversions if necessary to resolve between UA and .NET, but this is not our case here).
Here is a test program I wrote that writes "ABC", "", and null to a string variable, and reads it back, with the sample OPC server by OPC Foundation:
using OpcLabs.EasyOpc.UA;
var client = new EasyUAClient();
client.WriteValue("opc.tcp://opcua.demo-this.com:51210/UA/SampleServer", "nsu=http://test.org/UA/Data/ ;ns=2;i=10227", "ABC");
Console.WriteLine(client.Read("opc.tcp://opcua.demo-this.com:51210/UA/SampleServer", "nsu=http://test.org/UA/Data/ ;ns=2;i=10227"));
client.WriteValue("opc.tcp://opcua.demo-this.com:51210/UA/SampleServer", "nsu=http://test.org/UA/Data/ ;ns=2;i=10227", "");
Console.WriteLine(client.Read("opc.tcp://opcua.demo-this.com:51210/UA/SampleServer", "nsu=http://test.org/UA/Data/ ;ns=2;i=10227"));
client.WriteValue("opc.tcp://opcua.demo-this.com:51210/UA/SampleServer", "nsu=http://test.org/UA/Data/ ;ns=2;i=10227", null);
Console.WriteLine(client.Read("opc.tcp://opcua.demo-this.com:51210/UA/SampleServer", "nsu=http://test.org/UA/Data/ ;ns=2;i=10227"));
and here is its output:
ABC {String} @2022-03-23T17:16:24.820 @@2022-03-23T17:16:24.867; Good
{String} @2022-03-23T17:16:24.960 @@2022-03-23T17:16:25.007; Good
null {} @2022-03-23T17:16:25.038 @@2022-03-23T17:16:25.070; Good
As you can see, the values we get back are the same as those we have passed in.
So I believe the KEPServerEX is doing this. In general there is nothing that forces the server to return back in Read) the same value that was written.
Best regards