fixed port buffer offset and count not being set to 0

This commit is contained in:
nikzori
2025-03-19 15:27:37 +03:00
parent 580e2246bb
commit 36304e1fd0
2 changed files with 16 additions and 4 deletions

View File

@@ -207,6 +207,7 @@ namespace Gidrolock_Modbus_Scanner
} }
} }
Console.WriteLine("Polling for radio status");
res = await PollEntry(device.radioStatus); res = await PollEntry(device.radioStatus);
if (res) if (res)
{ {
@@ -242,6 +243,7 @@ namespace Gidrolock_Modbus_Scanner
catch (Exception err) { MessageBox.Show(err.Message); } catch (Exception err) { MessageBox.Show(err.Message); }
} }
//Опрос всех записей
async Task<bool> PollEntry(Entry entry) async Task<bool> PollEntry(Entry entry)
{ {
bool res = false; bool res = false;
@@ -266,6 +268,7 @@ namespace Gidrolock_Modbus_Scanner
return res; return res;
} }
// Задать новый Slave ID для устройства
private async void buttonSetID_Click(object sender, EventArgs e) private async void buttonSetID_Click(object sender, EventArgs e)
{ {
byte newID = (byte)nudModbusID.Value; // should prevent assigning wrong ID if UpDown is fiddled with in the middle of request byte newID = (byte)nudModbusID.Value; // should prevent assigning wrong ID if UpDown is fiddled with in the middle of request
@@ -286,6 +289,7 @@ namespace Gidrolock_Modbus_Scanner
modbusID = newID; modbusID = newID;
} }
// Кран
private async void buttonValve_Click(object sender, EventArgs e) private async void buttonValve_Click(object sender, EventArgs e)
{ {
ushort value = isValveClosed ? (ushort)0 : (ushort)0xFF00; ushort value = isValveClosed ? (ushort)0 : (ushort)0xFF00;
@@ -310,6 +314,7 @@ namespace Gidrolock_Modbus_Scanner
} }
} }
// Авария
private async void buttonAlarm_Click(object sender, EventArgs e) private async void buttonAlarm_Click(object sender, EventArgs e)
{ {
ushort value = alarmStatus ? (ushort)0 : (ushort)0xFF00; ushort value = alarmStatus ? (ushort)0 : (ushort)0xFF00;
@@ -334,6 +339,7 @@ namespace Gidrolock_Modbus_Scanner
} }
} }
// Режим уборки
private async void buttonCleaning_Click(object sender, EventArgs e) private async void buttonCleaning_Click(object sender, EventArgs e)
{ {
ushort value = cleaningStatus ? (ushort)0 : (ushort)0xFF00; ushort value = cleaningStatus ? (ushort)0 : (ushort)0xFF00;
@@ -358,6 +364,7 @@ namespace Gidrolock_Modbus_Scanner
} }
} }
// Задать скорость передачи данных для устройства
private async void buttonSetSpeed_Click(object sender, EventArgs e) private async void buttonSetSpeed_Click(object sender, EventArgs e)
{ {
try try
@@ -392,6 +399,7 @@ namespace Gidrolock_Modbus_Scanner
catch (Exception ex) { MessageBox.Show(ex.Message); } catch (Exception ex) { MessageBox.Show(ex.Message); }
} }
// Выбор файла прошивки
private void BrowseFirmware_Click(object sender, EventArgs e) private void BrowseFirmware_Click(object sender, EventArgs e)
{ {
try try
@@ -407,6 +415,7 @@ namespace Gidrolock_Modbus_Scanner
firmwarePathLabel.Invoke(new MethodInvoker(delegate { firmwarePathLabel.Text = firmwarePath; })); firmwarePathLabel.Invoke(new MethodInvoker(delegate { firmwarePathLabel.Text = firmwarePath; }));
} }
// Запись прошивки
private async void WriteFirmware_Click(object sender, EventArgs e) private async void WriteFirmware_Click(object sender, EventArgs e)
{ {
if (firmwarePath is null || firmwarePath.Length == 0) if (firmwarePath is null || firmwarePath.Length == 0)

View File

@@ -270,25 +270,28 @@ namespace Gidrolock_Modbus_Scanner
*/ */
static Stopwatch stopwatch = new Stopwatch(); static Stopwatch stopwatch = new Stopwatch();
static byte[] buffer = new byte[255]; static byte[] buffer = new byte[255];
static int offset = 0; static int offset = 0;
static int count = 0; static int count = 0;
static void PortDataReceived(object sender, EventArgs e) static void PortDataReceived(object sender, EventArgs e)
{ {
try try
{ {
stopwatch.Restart(); stopwatch.Restart();
while (stopwatch.ElapsedMilliseconds < 10) while (stopwatch.ElapsedMilliseconds < 20)
{ {
if (port.BytesToRead > 0) if (port.BytesToRead > 0)
{ {
stopwatch.Restart(); stopwatch.Restart();
count = offset; count = port.BytesToRead;
port.Read(buffer, offset, port.BytesToRead); port.Read(buffer, offset, port.BytesToRead);
offset += count; offset += count;
} }
} }
// assume that the message ended // assume that the message ended
offset = 0;
List <byte> message = new List <byte>(); List <byte> message = new List <byte>();
int endOfMessage = buffer.Length - 1; int endOfMessage = buffer.Length - 1;
for (int i = buffer.Length-1; i >= 0; i--) for (int i = buffer.Length-1; i >= 0; i--)
@@ -337,8 +340,8 @@ namespace Gidrolock_Modbus_Scanner
{ {
MessageBox.Show(err.Message, "Modbus message reception error"); MessageBox.Show(err.Message, "Modbus message reception error");
} }
port.DiscardInBuffer();
port.DiscardInBuffer();
} }
} }