common/Ui/IrdaDemo/Program.cs
2026-04-23 17:50:07 +02:00

241 lines
9.0 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using Xylem.Common.CommonCore.Consts;
using Xylem.Common.Hardware.Interfaces.Ports.PortCore;
using Xylem.Common.Hardware.Interfaces.Ports.PortCore.EventArguments;
using Xylem.Common.Hardware.Interfaces.Ports.SerialPorts;
using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisConfig;
using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore;
using Xylem.Common.Hardware.WaterMeter.Genesis.Registers;
using Xylem.Common.Hardware.WaterMeter.WaterMeterCore;
namespace IrdaDemo
{
internal class Program
{
private static readonly String CurrentConfigDir =
Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
ProgramConfig.GenesisBaseFolder);
private const String CurrentConfigFile = ProgramConfig.NlogConfig;
private static void Main(string[] args)
{
//for (int i = 1; i <= 10; i++)
//{
// a.ReadRegister("");
//}
////MeterBatch mb = new MeterBatch();
////var meter = new GenesisMeter();
////meter.SetupFromConfigFile(1, false);
////mb.AddMeter(meter);
////meter.SyncStreamingBuffer(SyncMarkRecord.DecodeEveryPackage);
////Console.ReadLine();
////2018-12-12 16:13:08.5276 | Debug | Slot:0, Port:COM240, Protocol:Request, Type:IrDA - SentData(0F-01-04-03-00-42-46-45-41-43-33-43-39-44-42-32-33)
////2018 - 12 - 12 16:13:08.5366 | Debug | Slot:0, Port: COM240, Protocol: Request, Type: IrDA - DecodeRecord(10 - 00 - 00 - 03 - 00 - 42 - 46 - 45 - 41 - 43 - 33 - 43 - 39 - 44 - 42 - 32 - 33)
//Console.WriteLine("Enter Comport Number");
//var result = $"COM{Console.ReadLine()}";
//Console.WriteLine("Enter Password");
//var password = Console.ReadLine();
////Console.WriteLine("Press 1 for PcbID error");
////Console.WriteLine("Press 2 for freeze meter with write/read");
////Console.WriteLine("Press 3 for 00-00-00-1A write error");
//////var meter = new GenesisMeter(0,
////// new PortConfig()
////// {BaudRate = 115200, PortName = result, Type = typeof(IrdaSerialPort).ToString()}, null);
////switch (Console.ReadLine())
////{
//// case "1":
//// testPcb(result);
//// break;
//// case "2":
//// testWriteRead(result, password);
//// break;
//// case "3":
// testWriteError(result, password);
//// break;
//// default:
//// Console.WriteLine("unknown test number");
//// break;
////}
//var applicationDataPath = Path.Combine(CurrentConfigDir, CurrentConfigFile);
//var currentApplicationFolder =
// Path.Combine(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location),
// CurrentConfigFile);
//if (File.Exists(currentApplicationFolder))
//{
// Console.WriteLine(currentApplicationFolder);
//}
//if (File.Exists(applicationDataPath))
//{
// Console.WriteLine(applicationDataPath);
//}
Console.WriteLine("done");
Console.ReadLine();
}
private static void testWriteError(string comport, string password)
{
using (var meterBatch = new MeterBatch())
{
var meter = new GenesisMeter(0,
new PortConfig()
{ PortName = comport, Type = typeof(IrdaSerialPort).ToString() }, null);
meterBatch.AddMeter(meter);
if (!string.IsNullOrEmpty(password))
{
meter.Login(password);
}
else
{
meter.Login();
}
Console.WriteLine(meter.ReadRegister(Register.Genesisflow.LedMode).Length > 0
? "connected"
: "not connected");
var input = "Y";
meter.RequestPort.OnRawRecordReceived += delegate (Object sender, BasePortDataEventArgs args)
{
var data = args.GetData();
if (data.GetType() == typeof(List<Byte>))
{
Console.WriteLine($"Date{args.GetReceivedTime().ToString("HH:mm:ss:ffff")}; Meter>PC OnRawRecordReceived={BitConverter.ToString(((List<Byte>)data).ToArray())}");
}
};
meter.RequestPort.OnRawRecordSendOut += delegate (Object sender, BasePortDataEventArgs args)
{
var data = args.GetData();
if (data.GetType() == typeof(List<Byte>))
{
Console.WriteLine($"Date{args.GetReceivedTime().ToString("HH:mm:ss:ffff")}; PC>Meter OnRawRecordSendOut={BitConverter.ToString(((List<Byte>)data).ToArray())}");
}
};
while (input.ToUpper() == "Y")
{
Console.Clear();
var value = new Byte[] { 0x03, 0x00, 0x00, 0x00 };
WriteAndLog(meter, value);
value = new Byte[] { 0x06, 0x00, 0x00, 0x00 };
WriteAndLog(meter, value);
value = new Byte[] { 0x00, 0x00, 0x00, 0x00 };
WriteAndLog(meter, value);
Console.WriteLine($"retry? (Y/N)");
input = Console.ReadLine();
}
}
}
private static void WriteAndLog(GenesisMeter meter, Byte[] value)
{
Console.WriteLine($"####################{BitConverter.ToString(value)}##################################");
Console.WriteLine($"Date{DateTimeOffset.UtcNow.ToString("HH:mm:ss:ffff")}; Write={BitConverter.ToString(value)}");
var start = DateTimeOffset.UtcNow;
meter.WriteRegister(Register.Genesisflow.LedMode, value);
var resultRead = meter.ReadRegister(Register.Genesisflow.LedMode);
if (resultRead.Length == 0)
{
Console.WriteLine($"!!!!!!!!!!ReadError!!!!!!!!");
}
else if (resultRead[0] != value[0])
{
Console.WriteLine($"!!!!!!!!!!WriteError!!!!!!!!");
}
var end = DateTimeOffset.UtcNow;
Console.WriteLine($"Date{DateTimeOffset.UtcNow.ToString("HH:mm:ss:ffff")}; read ={BitConverter.ToString(resultRead)}");
Console.WriteLine($"Date{DateTimeOffset.UtcNow.ToString("HH:mm:ss:ffff")}; duration in ms {(end - start).TotalMilliseconds}");
Console.WriteLine($"########################################################");
}
private static void testPcb(string comport)
{
using (var meterBatch = new MeterBatch())
{
var meter = new GenesisMeter(0,
new PortConfig()
{ PortName = comport, Type = typeof(IrdaSerialPort).ToString() }, null);
meterBatch.AddMeter(meter);
Console.WriteLine($"read just pcb: {meter.GetPcbId()}");
Console.WriteLine($"read just pcb: {meter.GetPcbId()}");
Console.WriteLine($"read just pcb: {meter.GetPcbId()}");
Console.WriteLine($"read Register.Configexchange.Privilege");
meter.ReadRegister(Register.Configexchange.Privilege);
Console.WriteLine($"read just pcb: {meter.GetPcbId()}");
}
}
private static void testWriteRead(string comport, string password)
{
using (var meterBatch = new MeterBatch())
{
var meter = new GenesisMeter(0,
new PortConfig()
{ PortName = comport, Type = typeof(IrdaSerialPort).ToString() }, null);
meterBatch.AddMeter(meter);
if (!string.IsNullOrEmpty(password))
{
meter.Login(password);
}
else
{
meter.Login();
}
Console.WriteLine(meter.ReadRegister(Register.Genesisflow.LedMode).Length > 0
? "connected"
: "not connected");
var initValue = meter.ReadRegister(Register.Genesisflow.CalFactor1);
for (int i = 0; i < 500; i++)
{
meter.ReadRegister(Register.Genesisflow.CalFactor1);
var result = meter.WriteRegister(Register.Genesisflow.CalFactor1, initValue, checkRegister: true);
Console.WriteLine($"try nr{i} succeed {result}");
}
}
}
}
}