From edf447db75d3f7d59e5173ac52e10fde5b7dcb3b Mon Sep 17 00:00:00 2001 From: nikzori Date: Mon, 9 Dec 2024 17:58:37 +0300 Subject: [PATCH] update --- Datasheet.cs | 4 ++-- Json.cs | 2 +- Main.cs | 6 ++++-- Modbus.cs | 2 +- README.md | 12 +++++++++++- 5 files changed, 19 insertions(+), 7 deletions(-) diff --git a/Datasheet.cs b/Datasheet.cs index e829cd5..36ad5ea 100644 --- a/Datasheet.cs +++ b/Datasheet.cs @@ -87,7 +87,7 @@ namespace Gidrolock_Modbus_Scanner public async Task PollForEntry(Entry entry) { - byte[] message = new byte[7]; + byte[] message = new byte[9]; Console.WriteLine("Sending message: " + Modbus.ByteArrayToString(Modbus.BuildMessage(slaveID, (byte)entry.registerType, entry.address, entry.length, ref message))); var send = await Modbus.ReadRegAsync(port, slaveID, (FunctionCode)entry.registerType, entry.address, entry.length); isAwaitingResponse = true; @@ -125,7 +125,7 @@ namespace Gidrolock_Modbus_Scanner port.Read(message, i + 3, 1); } byte[] data = new byte[length]; - for (int i = 0; i < length - 2; i++) + for (int i = 0; i < length; i++) { data[i] = message[i+3]; } diff --git a/Json.cs b/Json.cs index 1b7f7ea..4a6277e 100644 --- a/Json.cs +++ b/Json.cs @@ -40,5 +40,5 @@ namespace Gidrolock_Modbus_Scanner this.readOnce = readOnce; } } - public enum RegisterType { Coil, Discrete, Holding, Input } + public enum RegisterType { Coil = 1, Discrete = 2, Holding = 3, Input = 4} } diff --git a/Main.cs b/Main.cs index 3f5b55a..2c79a23 100644 --- a/Main.cs +++ b/Main.cs @@ -280,6 +280,8 @@ namespace Gidrolock_Modbus_Scanner void PortDataReceived(object sender, EventArgs e) { + if (datasheet is null) + return; if (datasheet.Enabled) return; @@ -329,7 +331,7 @@ namespace Gidrolock_Modbus_Scanner private async void Button_SendCommand_Click(object sender, EventArgs e) { - FunctionCode functionCode = (FunctionCode)CBox_Function.SelectedIndex; + FunctionCode functionCode = (FunctionCode)CBox_Function.SelectedIndex + 1; ushort address = (ushort)UpDown_RegAddress.Value; ushort length = (ushort)UpDown_RegLength.Value; @@ -427,4 +429,4 @@ namespace Gidrolock_Modbus_Scanner } } -public enum FunctionCode { ReadCoil, ReadDiscrete, ReadHolding, ReadInput, WriteCoil, WriteRegister, WriteMultCoils, WriteMultRegisters }; +public enum FunctionCode { ReadCoil = 1, ReadDiscrete = 2, ReadHolding = 3, ReadInput = 4, WriteCoil = 5, WriteRegister = 6, WriteMultCoils = 15, WriteMultRegisters = 16}; diff --git a/Modbus.cs b/Modbus.cs index ade23de..d56a944 100644 --- a/Modbus.cs +++ b/Modbus.cs @@ -48,7 +48,7 @@ namespace Gidrolock_Modbus_Scanner byte[] message = new byte[8]; //Build outgoing modbus message: - BuildMessage(slaveID, (byte)(1 + (int)functionCode), address, length, ref message); + BuildMessage(slaveID, (byte)functionCode, address, length, ref message); //Send modbus message to Serial Port: try diff --git a/README.md b/README.md index b444e5b..da2e851 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,17 @@ ### To-Do -1. Обработка `.json` шаблонов для любых устройств +1. Определение модели устройства по `.json` шаблону + Добавить парсинг регистра, по которому можно идентифицировать модель устройства. +```js + "checkEntry": { + "registerType": "input" + "address": 200, + "length": 6, + "dataType": "string" + "expectedValue": "SWT485" + } +``` 2. Настраиваемый цикличный опрос регистров 3. Поддержка Modbus TCP