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 { 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}"); var relays = saliMaxRelaysDevice.Read(); Console.WriteLine("***************************** Writing register 27 to true Amax *********************************************"); relays.K0 = true; relays.K1 = true; relays.R0 = true; relays.R1 = true; relays.R2 = true; relays.R3 = true; // relays.K0Input.WriteLine(" : K0input"); saliMaxRelaysDevice.Write(relays); Console.WriteLine("***************************** Reading Amax *********************************************"); // relays.K1GridBusIsConnectedToGrid.WriteLine(" : K1"); await Task.Delay(2000); Console.WriteLine("***************************** Writing register 27 to false Amax *********************************************"); relays.K0 = false; relays.K1 = false; relays.R0 = false; relays.R1 = false; relays.R2 = false; relays.R3 = false; // relays.K0Input.WriteLine(" : K0input"); saliMaxRelaysDevice.Write(relays); Console.WriteLine("***************************** Reading Amax *********************************************"); /* 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);*/ // 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); } }