241 lines
9.0 KiB
C#
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}");
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|