From b440594749adf0bd1ca7c86c4c9246c0b78ab4c9 Mon Sep 17 00:00:00 2001 From: Malte Bitter Date: Thu, 2 Feb 2023 12:52:43 +0100 Subject: [PATCH] Add VestelEvc04 driver --- TestApp/Driver/VestelEvc04.cs | 84 +++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 TestApp/Driver/VestelEvc04.cs diff --git a/TestApp/Driver/VestelEvc04.cs b/TestApp/Driver/VestelEvc04.cs new file mode 100644 index 0000000..3af9d5e --- /dev/null +++ b/TestApp/Driver/VestelEvc04.cs @@ -0,0 +1,84 @@ +using NModbus; +using System.Net.Sockets; + +namespace TestApp.Driver +{ + internal class VestelEvc04 + { + private IModbusMaster? _Modbus; + private bool _Running; + private Thread _HeartbeatThread; + + public string HostAddress { get; set; } = "192.168.178.100"; + public int Port { get; set; } = 502; + + public VestelEvc04() + { + _Running = true; + _HeartbeatThread = new Thread(HeartbeatLoop); + _HeartbeatThread.IsBackground = true; + _HeartbeatThread.Start(); + } + + private void Connect() + { + var factory = new ModbusFactory(); + var tcpClient = new TcpClient(HostAddress, Port); + _Modbus = factory.CreateMaster(tcpClient); + } + + private void Disconnect() + { + if (_Modbus is null) { return; } + _Modbus.Dispose(); + _Modbus = null; + } + + private void HeartbeatLoop() + { + try + { + while (_Running) + { + if (_Modbus is null) + { + Connect(); + } + if (_Modbus is null) { continue; } + + var heardbeatValue = _Modbus.ReadHoldingRegisters(255, 6000, 1)[0]; + if (heardbeatValue == 0) { + _Modbus.WriteSingleRegister(255, 6000, 1); + } + + Thread.Sleep(100); + } + } + catch (Exception e) + { + System.Diagnostics.Debug.WriteLine(e.Message); + Disconnect(); + } + } + + public void SetLoadingCurrent(double value) + { + try + { + if (_Modbus is null) + { + Connect(); + } + if (_Modbus is null) { return; } + + ushort registerValue = (ushort)value; + _Modbus.WriteSingleRegister(255, 5004, registerValue); + } + catch (Exception e) + { + System.Diagnostics.Debug.WriteLine(e.Message); + Disconnect(); + } + } + } +}