Add VestelEvc04 driver
This commit is contained in:
84
TestApp/Driver/VestelEvc04.cs
Normal file
84
TestApp/Driver/VestelEvc04.cs
Normal file
@@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user