Innovenergy_trunk/csharp/App/DeligreenBatteryCommunication/Program.cs

102 lines
6.2 KiB
C#

using System.Net;
using InnovEnergy.Lib.Devices.BatteryDeligreen;
using InnovEnergy.Lib.Protocols.Modbus.Channels;
using InnovEnergy.Lib.Utils;
using InnovEnergy.Lib.Utils.Net;
namespace InnovEnergy.App.DeligreenBatteryCommunication;
internal static class Program
{
private static readonly TimeSpan UpdateInterval = TimeSpan.FromSeconds(2);
private static Channel _relaysChannel;
private const String Port = "/dev/ttyUSB0";
static Program()
{
Console.WriteLine("Hello, Deligreen World!");
// BatteriesChannel = new SerialPortChannel(Port, BaudRate, Parity, DataBits, StopBits);
}
public static async Task Main(String[] args)
{
/*var device1 = new SalimaxDevice { Host = "10.0.1.3" , Port = 502, DeviceState = DeviceState.Measured };
_relaysChannel = CreateChannel(device1);
var saliMaxRelaysDevice = new RelaysDeviceAmax(_relaysChannel);*/
var listOfBatteries = new List<BatteryDeligreenDevice>
{
new BatteryDeligreenDevice(Port, 0),
new BatteryDeligreenDevice(Port, 1)
};
var batteryDevices = new BatteryDeligreenDevices(listOfBatteries);
Console.WriteLine("Starting Battery Communication");
while (true)
{
try
{
var startTime = DateTime.Now;
Console.WriteLine("***************************** Reading Battery Data *********************************************");
Console.WriteLine($"Start Reading all Batteries: {startTime}");
var batteriesRecord = batteryDevices.Read();
var stopTime = DateTime.Now;
Console.WriteLine($"Finish Reading all Batteries: {stopTime}");
Console.WriteLine("Time used for reading all batteries:" + (stopTime - startTime));
Console.WriteLine("Average SOC " + batteriesRecord?.Soc);
/* Console.WriteLine("Cell Alarm 1 : " + batteriesRecord?.Devices[0].BatteryDeligreenAlarmRecord.CellAlarmList[0]);
Console.WriteLine("Cell Alarm 2 : " + batteriesRecord?.Devices[0].BatteryDeligreenAlarmRecord.CellAlarmList[1]);
Console.WriteLine("Cell Temperature Alarm 1 : " + batteriesRecord?.Devices[0].BatteryDeligreenAlarmRecord.CellTemperatureAlarm[0]);
Console.WriteLine("Cell Temperature Alarm 2 : " + batteriesRecord?.Devices[0].BatteryDeligreenAlarmRecord.CellTemperatureAlarm[1]);
Console.WriteLine("Battery 1 EnviTemp Alarm: " + batteriesRecord?.Devices[0].BatteryDeligreenAlarmRecord.EnviTempAlarm);
Console.WriteLine("Battery 1 Current Alarm : " + batteriesRecord?.Devices[0].BatteryDeligreenAlarmRecord.CurrentAlarm);
Console.WriteLine("Battery 2 EnviTemp Alarm: " + batteriesRecord?.Devices[1].BatteryDeligreenAlarmRecord.EnviTempAlarm);
Console.WriteLine("Battery 2 Current Alarm : " + batteriesRecord?.Devices[1].BatteryDeligreenAlarmRecord.CurrentAlarm);
Console.WriteLine("TotalVoltage Alarm : " + batteriesRecord?.Devices[0].BatteryDeligreenAlarmRecord.TotalVoltageAlarm);
Console.WriteLine("PowerTemp Alarm : " + batteriesRecord?.Devices[0].BatteryDeligreenAlarmRecord.PowerTempAlarm);*/
Console.WriteLine("CellVoltageDropoutFault : " + batteriesRecord?.Devices[0].BatteryDeligreenAlarmRecord.AlarmEvent1.CellVoltageDropoutFault);
Console.WriteLine("HighVoltageAlarmForTotalVoltage : " + batteriesRecord?.Devices[0].BatteryDeligreenAlarmRecord.AlarmEvent2.HighVoltageAlarmForTotalVoltage);
Console.WriteLine("ChargeHighTemperatureAlarm : " + batteriesRecord?.Devices[0].BatteryDeligreenAlarmRecord.AlarmEvent3.ChargeHighTemperatureAlarm);
Console.WriteLine("CellLowTemperatureHeating : " + batteriesRecord?.Devices[0].BatteryDeligreenAlarmRecord.AlarmEvent4.CellLowTemperatureHeating);
Console.WriteLine("ChargeOverCurrentAlarm : " + batteriesRecord?.Devices[0].BatteryDeligreenAlarmRecord.AlarmEvent5.ChargeOverCurrentAlarm);
Console.WriteLine("ResidualCapacityAlarm : " + batteriesRecord?.Devices[0].BatteryDeligreenAlarmRecord.AlarmEvent6.ResidualCapacityAlarm);
Console.WriteLine("ManualChargingWaiting : " + batteriesRecord?.Devices[0].BatteryDeligreenAlarmRecord.AlarmEvent7.ManualChargingWaiting);
Console.WriteLine("CurrentCalibrationNotPerformed : " + batteriesRecord?.Devices[0].BatteryDeligreenAlarmRecord.AlarmEvent8.CurrentCalibrationNotPerformed);
Console.WriteLine("ChargeHighTemperatureAlarm : " + batteriesRecord?.Devices[0].BatteryDeligreenAlarmRecord.DisconnectionState1.Cell01Disconnection);
Console.WriteLine("CellLowTemperatureHeating : " + batteriesRecord?.Devices[0].BatteryDeligreenAlarmRecord.DisconnectionState2.Cell10Disconnection);
Console.WriteLine("ChargeOverCurrentAlarm : " + batteriesRecord?.Devices[0].BatteryDeligreenAlarmRecord.EquilibriumState1.Cell01Equilibrium);
Console.WriteLine("ResidualCapacityAlarm : " + batteriesRecord?.Devices[0].BatteryDeligreenAlarmRecord.EquilibriumState2.Cell09Equilibrium);
Console.WriteLine("ManualChargingWaiting : " + batteriesRecord?.Devices[0].BatteryDeligreenAlarmRecord.OnOffState.ChargeSwitchState);
Console.WriteLine("CurrentCalibrationNotPerformed : " + batteriesRecord?.Devices[0].BatteryDeligreenAlarmRecord.SystemState.Charge);
// Wait for 2 seconds before the next reading
await Task.Delay(2000); // Delay in milliseconds (2000ms = 2 seconds)
}
catch (Exception e)
{
// Handle exception and print the error
Console.WriteLine(e + " This the first try loop ");
await Task.Delay(2000); // Delay in milliseconds (2000ms = 2 seconds)
}
}
Channel CreateChannel(SalimaxDevice device) => new TcpChannel(device);
}
}