From 8c9751bf10414407f61796cff2a175b4f2aac77c Mon Sep 17 00:00:00 2001 From: Ebner Gerald Date: Mon, 15 Jun 2020 12:49:37 +0200 Subject: [PATCH] FIX VIF ASCII --- .../PacketSerializationTests.cs | 36 +++++++++++++++++++ .../EN13757_2/Value.cs | 2 +- .../EN13757_2/VariableDataLongFrame.cs | 16 +++++++-- 3 files changed, 51 insertions(+), 3 deletions(-) diff --git a/Valley.Net.Protocols.MeterBus.Test/PacketSerializationTests.cs b/Valley.Net.Protocols.MeterBus.Test/PacketSerializationTests.cs index 66c482e..edd2759 100644 --- a/Valley.Net.Protocols.MeterBus.Test/PacketSerializationTests.cs +++ b/Valley.Net.Protocols.MeterBus.Test/PacketSerializationTests.cs @@ -1248,5 +1248,41 @@ public void Test_ZRM_Minol_Minocal_C2() Assert.IsNotNull(packet); } + + [TestMethod] + public void Test_VIF_ASCII_Meter() + { + var data = "68 56 56 68 08 5F 72 91 91 01 19 77 04 14 16 A0 00 00 00 0C 78 91 91 01 19 0D 7C 08 44 49 20 2E 74 73 75 63 0A 20 20 20 20 20 20 20 20 20 20 04 6D 00 0C 8A 26 02 7C 09 65 6D 69 74 20 2E 74 61 62 4A 14 04 14 0D 7A 05 00 04 94 7F 00 00 00 00 44 14 57 B0 04 00 0F 00 01 1F 22 16" + .HexToBytes(); + var frame = new MeterbusFrameSerializer() + .Deserialize(data, 0, data.Length); + + Assert.IsNotNull(frame); + + var packet = frame.ToPacket() as VariableDataPacket; + + foreach (var r in packet.Records) + { + var Dimension = r.Units[0].Unit; + var Description = r.Units[0].Units; + double Value; + try + { + if (r.Units[0].Units == Valley.Net.Protocols.MeterBus.EN13757_2.VariableDataQuantityUnit.TimePoint) + Value = System.Convert.ToDouble(r.Value); + else + Value = System.Convert.ToDouble(r.NormalizedValue.Item2); + } + catch (Exception ex) + { + //Value = System.Convert.ToDouble(r.NormalizedValue.Item2); + } + var Type = r.Function; + var StoreageNumber = (long)r.StorageNumber; + var Tariff = (int)r.Tariff; + } + + Assert.IsNotNull(packet); + } } } diff --git a/Valley.Net.Protocols.MeterBus/EN13757_2/Value.cs b/Valley.Net.Protocols.MeterBus/EN13757_2/Value.cs index daccd5f..6006c55 100644 --- a/Valley.Net.Protocols.MeterBus/EN13757_2/Value.cs +++ b/Valley.Net.Protocols.MeterBus/EN13757_2/Value.cs @@ -7,7 +7,7 @@ namespace Valley.Net.Protocols.MeterBus.EN13757_2 public sealed class Value : Part { public byte[] Data { get; private set; } - + public object LVARvalue { get; set; } public Value(byte[] data) { Data = data; diff --git a/Valley.Net.Protocols.MeterBus/EN13757_2/VariableDataLongFrame.cs b/Valley.Net.Protocols.MeterBus/EN13757_2/VariableDataLongFrame.cs index ea605e5..3e45f26 100644 --- a/Valley.Net.Protocols.MeterBus/EN13757_2/VariableDataLongFrame.cs +++ b/Valley.Net.Protocols.MeterBus/EN13757_2/VariableDataLongFrame.cs @@ -114,9 +114,21 @@ public VariableDataLongFrame(byte control, byte controlInformation, byte address } } - var valueLength = dif.DataType == DataTypes._variable_length ? -1 : LenghtsInBitsTable[dif.DataType] / 8; - var value = new Value(valueLength > 0 ? reader.ReadBytes(valueLength) : null); + if (vif.Type == VIF.VifType.PlainTextVIF) + vif.Unit = BinaryReaderExtensions.ReadValue(reader).ToString(); + + EN13757_2.Value value; + if (dif.DataType == DataTypes._variable_length) + { + value = new Value(new byte[0]); + value.LVARvalue = BinaryReaderExtensions.ReadValue(reader); + } + else + { + var valueLength = dif.DataType == DataTypes._variable_length ? -1 : LenghtsInBitsTable[dif.DataType] / 8; + value = new Value(valueLength > 0 ? reader.ReadBytes(valueLength) : null); + } Parts.Add(value); }