From 5c2a9973f0146b20f5fa73b2334121edd03e14b4 Mon Sep 17 00:00:00 2001 From: nikzori Date: Thu, 27 Mar 2025 12:52:24 +0300 Subject: [PATCH] fixed and optimized port data processing --- Modbus.cs | 55 ++++++++++++++++++++++++++----------------------------- 1 file changed, 26 insertions(+), 29 deletions(-) diff --git a/Modbus.cs b/Modbus.cs index ebc8044..716b8ce 100644 --- a/Modbus.cs +++ b/Modbus.cs @@ -276,41 +276,38 @@ namespace Gidrolock_Modbus_Scanner static int count = 0; static void PortDataReceived(object sender, EventArgs e) { - + //reset values on every event call; + buffer = new byte[255]; + offset = 0; try { - stopwatch.Restart(); - while (stopwatch.ElapsedMilliseconds < 20) - { - if (port.BytesToRead > 0) - { - stopwatch.Restart(); - count = port.BytesToRead; - port.Read(buffer, offset, port.BytesToRead); - offset += count; - } - } - // assume that the message ended + //reset values on every event call; + buffer = new byte[255]; offset = 0; - List message = new List (); - int endOfMessage = buffer.Length - 1; - for (int i = buffer.Length-1; i >= 0; i--) + try { - if (buffer[i] != 0x00) + stopwatch.Restart(); + while (stopwatch.ElapsedMilliseconds < 20) { - endOfMessage = i; - break; + if (port.BytesToRead > 0) + { + stopwatch.Restart(); + count = port.BytesToRead; + port.Read(buffer, offset, port.BytesToRead); + offset += count; + } } - } - for (int i = 0; i < endOfMessage + 1; i++) - { - message.Add(buffer[i]); - } - - if (message.Count == 0) - return; - - Console.WriteLine("Incoming message: " + ByteArrayToString(message.ToArray(), false)); + // assume that the message ended + + List message = new List(); + for (int i = 0; i < offset; i++) + { + message.Add(buffer[i]); + } + if (message.Count == 0) + return; + + Console.WriteLine("Incoming message: " + ByteArrayToString(message.ToArray(), false)); /* if (!CheckResponse(message.ToArray())) {