Compare commits
13
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6cb4b2bba8 | ||
|
|
56c2aeb647 | ||
|
|
a4d7dccde9 | ||
|
|
74655e976f | ||
|
|
7486b2a490 | ||
|
|
6e62be6e6c | ||
|
|
6c7dbfa5a0 | ||
|
|
c77fd822a6 | ||
|
|
60f30d65fd | ||
|
|
704232d231 | ||
|
|
79c5c022ea | ||
|
|
5bea046c01 | ||
|
|
6226a2812b |
+22
@@ -54,6 +54,28 @@ Users/bin/
|
|||||||
Users/obj/
|
Users/obj/
|
||||||
UserManagement/bin/
|
UserManagement/bin/
|
||||||
UserManagement/obj/
|
UserManagement/obj/
|
||||||
|
DataMatrix4Net/bin/
|
||||||
|
DataMatrix4Net/obj/
|
||||||
|
GenericTest/bin/
|
||||||
|
GenericTest/obj/
|
||||||
|
LabelPrinting/bin/
|
||||||
|
LabelPrinting/obj/
|
||||||
|
OrderManagement/bin/
|
||||||
|
OrderManagement/obj/
|
||||||
|
ProductionTracing/bin/
|
||||||
|
ProductionTracing/obj/
|
||||||
|
RecordProcessing/bin/
|
||||||
|
RecordProcessing/obj/
|
||||||
|
S640TestApp/bin/
|
||||||
|
S640TestApp/obj/
|
||||||
|
SchematicDrawing/bin/
|
||||||
|
SchematicDrawing/obj/
|
||||||
|
SharedDatabase/bin/
|
||||||
|
SharedDatabase/obj/
|
||||||
|
WorkflowConfigurator/bin/
|
||||||
|
WorkflowConfigurator/obj/
|
||||||
|
Workplace/bin/
|
||||||
|
Workplace/obj/
|
||||||
.vs/
|
.vs/
|
||||||
*.suo
|
*.suo
|
||||||
*.bak
|
*.bak
|
||||||
|
|||||||
@@ -96,6 +96,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ResultsParser", "ResultsPar
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sensus.iPerl.RfidCom", "..\iPerlHead\Sensus.iPerl.RfidCom\Sensus.iPerl.RfidCom.csproj", "{A3E14180-7F00-42E5-94A9-8DB62EAD6EE8}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sensus.iPerl.RfidCom", "..\iPerlHead\Sensus.iPerl.RfidCom\Sensus.iPerl.RfidCom.csproj", "{A3E14180-7F00-42E5-94A9-8DB62EAD6EE8}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NfcS5_DLL", "..\NfcS5_DLL\NfcS5_DLL.csproj", "{34F6AA20-3BEC-44B4-9D18-DC66BAB79A83}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
@@ -402,6 +404,18 @@ Global
|
|||||||
{A3E14180-7F00-42E5-94A9-8DB62EAD6EE8}.Release|Mixed Platforms.Build.0 = Release|Any CPU
|
{A3E14180-7F00-42E5-94A9-8DB62EAD6EE8}.Release|Mixed Platforms.Build.0 = Release|Any CPU
|
||||||
{A3E14180-7F00-42E5-94A9-8DB62EAD6EE8}.Release|x86.ActiveCfg = Release|Any CPU
|
{A3E14180-7F00-42E5-94A9-8DB62EAD6EE8}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
{A3E14180-7F00-42E5-94A9-8DB62EAD6EE8}.Release|x86.Build.0 = Release|Any CPU
|
{A3E14180-7F00-42E5-94A9-8DB62EAD6EE8}.Release|x86.Build.0 = Release|Any CPU
|
||||||
|
{34F6AA20-3BEC-44B4-9D18-DC66BAB79A83}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{34F6AA20-3BEC-44B4-9D18-DC66BAB79A83}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{34F6AA20-3BEC-44B4-9D18-DC66BAB79A83}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
|
||||||
|
{34F6AA20-3BEC-44B4-9D18-DC66BAB79A83}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
|
||||||
|
{34F6AA20-3BEC-44B4-9D18-DC66BAB79A83}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{34F6AA20-3BEC-44B4-9D18-DC66BAB79A83}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
|
{34F6AA20-3BEC-44B4-9D18-DC66BAB79A83}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{34F6AA20-3BEC-44B4-9D18-DC66BAB79A83}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{34F6AA20-3BEC-44B4-9D18-DC66BAB79A83}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
|
||||||
|
{34F6AA20-3BEC-44B4-9D18-DC66BAB79A83}.Release|Mixed Platforms.Build.0 = Release|Any CPU
|
||||||
|
{34F6AA20-3BEC-44B4-9D18-DC66BAB79A83}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{34F6AA20-3BEC-44B4-9D18-DC66BAB79A83}.Release|x86.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|||||||
+10
-2
@@ -14,6 +14,7 @@ using Users;
|
|||||||
using TBF.Resources;
|
using TBF.Resources;
|
||||||
using TBF.Rig.Sequences;
|
using TBF.Rig.Sequences;
|
||||||
using TBF.UI.Shared;
|
using TBF.UI.Shared;
|
||||||
|
using System.Threading;
|
||||||
|
|
||||||
namespace TBF
|
namespace TBF
|
||||||
{
|
{
|
||||||
@@ -69,7 +70,9 @@ namespace TBF
|
|||||||
[STAThread]
|
[STAThread]
|
||||||
static void Main()
|
static void Main()
|
||||||
{
|
{
|
||||||
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(MyHandler);
|
Application.ThreadException += new ThreadExceptionEventHandler(Form1_UIThreadException);
|
||||||
|
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
|
||||||
|
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(MyHandler);
|
||||||
|
|
||||||
/// Program version string
|
/// Program version string
|
||||||
System.Reflection.Assembly thisAssembly = System.Reflection.Assembly.GetExecutingAssembly();
|
System.Reflection.Assembly thisAssembly = System.Reflection.Assembly.GetExecutingAssembly();
|
||||||
@@ -536,7 +539,12 @@ namespace TBF
|
|||||||
log.Info("Exiting application.");
|
log.Info("Exiting application.");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void MyHandler(object sender, UnhandledExceptionEventArgs args)
|
private static void Form1_UIThreadException(object sender, ThreadExceptionEventArgs e)
|
||||||
|
{
|
||||||
|
LogException(log, "Unhandled thread exception", (Exception)e.Exception);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void MyHandler(object sender, UnhandledExceptionEventArgs args)
|
||||||
{
|
{
|
||||||
LogException(log, "Unhandled exception", (Exception)args.ExceptionObject);
|
LogException(log, "Unhandled exception", (Exception)args.ExceptionObject);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,5 +29,5 @@ using System.Runtime.InteropServices;
|
|||||||
// Build Number
|
// Build Number
|
||||||
// Revision
|
// Revision
|
||||||
//
|
//
|
||||||
[assembly: AssemblyVersion("2.33.2138.0")]
|
[assembly: AssemblyVersion("2.33.2140.0")]
|
||||||
[assembly: AssemblyFileVersion("2.33.2138.0")]
|
[assembly: AssemblyFileVersion("2.33.2140.0")]
|
||||||
|
|||||||
Generated
+9
@@ -1941,6 +1941,15 @@ namespace TBF.Resources {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Error when saving and printing results.
|
||||||
|
/// </summary>
|
||||||
|
internal static string Error_when_saving_and_printing_results {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Error_when_saving_and_printing_results", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Error while creating the database. Reason: .
|
/// Looks up a localized string similar to Error while creating the database. Reason: .
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -1701,4 +1701,7 @@
|
|||||||
<data name="PDF_files" xml:space="preserve">
|
<data name="PDF_files" xml:space="preserve">
|
||||||
<value>PDF soubory</value>
|
<value>PDF soubory</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="Error_when_saving_and_printing_results" xml:space="preserve">
|
||||||
|
<value>Chyba při ukládání a tisknutí výsledků</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
@@ -2335,4 +2335,7 @@
|
|||||||
<data name="PDF_files" xml:space="preserve">
|
<data name="PDF_files" xml:space="preserve">
|
||||||
<value>PDF files</value>
|
<value>PDF files</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="Error_when_saving_and_printing_results" xml:space="preserve">
|
||||||
|
<value>Error when saving and printing results</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
@@ -77,6 +77,7 @@ namespace TBF.Rig
|
|||||||
Starting, /// During initial phase of some process, sending a command to a device, etc.
|
Starting, /// During initial phase of some process, sending a command to a device, etc.
|
||||||
Busy, /// Useful when waiting in state until at least one is busy (all are done)
|
Busy, /// Useful when waiting in state until at least one is busy (all are done)
|
||||||
Done, /// Useful when waiting in state until the first is done, the rest miht still be busy
|
Done, /// Useful when waiting in state until the first is done, the rest miht still be busy
|
||||||
|
Crashed, /// Run() function of an operation crashed
|
||||||
MakeSecondPass, /// Test completed OK but 2nd pass (evaluation) is required
|
MakeSecondPass, /// Test completed OK but 2nd pass (evaluation) is required
|
||||||
EndSession, /// Test completed OK (similarly to Event.Done), 'End session' button click is automatically invoked
|
EndSession, /// Test completed OK (similarly to Event.Done), 'End session' button click is automatically invoked
|
||||||
///
|
///
|
||||||
|
|||||||
@@ -5,11 +5,7 @@ using System;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using log4net;
|
using log4net;
|
||||||
#if MANAGED
|
|
||||||
using Oracle.ManagedDataAccess.Client;
|
using Oracle.ManagedDataAccess.Client;
|
||||||
#else
|
|
||||||
using Oracle.DataAccess.Client;
|
|
||||||
#endif
|
|
||||||
using Common;
|
using Common;
|
||||||
using Config;
|
using Config;
|
||||||
using Config.Entities;
|
using Config.Entities;
|
||||||
@@ -113,9 +109,10 @@ namespace TBF.Rig.Output.DB.SensusOracle
|
|||||||
string procedureSignature;
|
string procedureSignature;
|
||||||
IList<SensusTestInfo> oracleTestInfo; /// Raw incomplete test info from Oracle DB (or null)
|
IList<SensusTestInfo> oracleTestInfo; /// Raw incomplete test info from Oracle DB (or null)
|
||||||
LUTestData[] completeTestInfo; /// Complete test info obtained from the procedure
|
LUTestData[] completeTestInfo; /// Complete test info obtained from the procedure
|
||||||
|
LUTestData[] distinctTestInfo; /// Distinct test info obtained from the procedure - if Q3 is splitted to 2 parts, test info is only for one Q3
|
||||||
|
|
||||||
|
|
||||||
public Database() {}
|
public Database() {}
|
||||||
|
|
||||||
public Database(Generic.IComponentCfg cfg)
|
public Database(Generic.IComponentCfg cfg)
|
||||||
: base(cfg)
|
: base(cfg)
|
||||||
@@ -396,14 +393,15 @@ namespace TBF.Rig.Output.DB.SensusOracle
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if ORACLE_DB
|
#if ORACLE_DB
|
||||||
void GetTestInofFromProcedure(string logCaption)
|
void GetTestInfoFromProcedure(string logCaption, Results.Entities.Batch bat = null)
|
||||||
{
|
{
|
||||||
///
|
///
|
||||||
/// Select or create appropriate test infos
|
/// Select or create appropriate test infos
|
||||||
///
|
///
|
||||||
IList<LUTestData> testsToSave = new List<LUTestData>();
|
IList<LUTestData> testsToSave = new List<LUTestData>();
|
||||||
int maxPruefungsNr = 0;
|
int maxPruefungsNr = 0;
|
||||||
foreach (var td in Sequences.ProcessData.BatchRslts.Batch.Tests)
|
Results.Entities.Batch batch = Sequences.ProcessData.BatchRslts == null? bat : Sequences.ProcessData.BatchRslts.Batch;
|
||||||
|
foreach (var td in batch.Tests)
|
||||||
{
|
{
|
||||||
for (int repNr = 1; repNr <= td.Repeats; repNr++)
|
for (int repNr = 1; repNr <= td.Repeats; repNr++)
|
||||||
{
|
{
|
||||||
@@ -419,8 +417,11 @@ namespace TBF.Rig.Output.DB.SensusOracle
|
|||||||
Array.Sort(testsToSaveArr, new LUTestDataComparer());
|
Array.Sort(testsToSaveArr, new LUTestDataComparer());
|
||||||
completeTestInfo = testsToSaveArr;
|
completeTestInfo = testsToSaveArr;
|
||||||
|
|
||||||
|
distinctTestInfo = testsToSave.GroupBy(x => x.TData.OraId).Select(group => group.First()).ToArray();
|
||||||
|
Array.Sort(distinctTestInfo, new LUTestDataComparer());
|
||||||
|
|
||||||
log.WarnFormat("{0} selected test infos:", logCaption);
|
log.WarnFormat("{0} selected test infos:", logCaption);
|
||||||
foreach (var cti in completeTestInfo)
|
foreach (var cti in distinctTestInfo)
|
||||||
{
|
{
|
||||||
log.WarnFormat(" ID={0} Rev={1} Test={2} PrfNrDB={3} QBzDB={4}",
|
log.WarnFormat(" ID={0} Rev={1} Test={2} PrfNrDB={3} QBzDB={4}",
|
||||||
wmTypeId, wmTypeRevision, cti.TestName, cti.Id, cti.Designation);
|
wmTypeId, wmTypeRevision, cti.TestName, cti.Id, cti.Designation);
|
||||||
@@ -429,7 +430,7 @@ namespace TBF.Rig.Output.DB.SensusOracle
|
|||||||
|
|
||||||
public Retv ReadStartInfoFromDB(OracleConnection conn)
|
public Retv ReadStartInfoFromDB(OracleConnection conn)
|
||||||
{
|
{
|
||||||
GetTestInofFromProcedure("ReadStartInfoFromDB"); /// Create appropriate test infos
|
GetTestInfoFromProcedure("ReadStartInfoFromDB"); /// Create appropriate test infos
|
||||||
|
|
||||||
bool anyError = false;
|
bool anyError = false;
|
||||||
try
|
try
|
||||||
@@ -823,7 +824,7 @@ namespace TBF.Rig.Output.DB.SensusOracle
|
|||||||
throw new Exception(string.Format("Cannot save batch {0} to Oracle, missing entry in VT_WZTYP_SD", bat.BatchNr));
|
throw new Exception(string.Format("Cannot save batch {0} to Oracle, missing entry in VT_WZTYP_SD", bat.BatchNr));
|
||||||
}
|
}
|
||||||
|
|
||||||
GetTestInofFromProcedure("SaveBatchData"); /// Create appropriate test infos
|
GetTestInfoFromProcedure("SaveBatchData", bat); /// Create appropriate test infos
|
||||||
|
|
||||||
if (dbCfg.DebugLevel == DebugMode.Normal)
|
if (dbCfg.DebugLevel == DebugMode.Normal)
|
||||||
{
|
{
|
||||||
@@ -859,7 +860,7 @@ namespace TBF.Rig.Output.DB.SensusOracle
|
|||||||
log.WarnFormat("SIM: VT_PRUEFREIHE_PD inserted, BatchNr={0}, TypeId={1}, TypeRev={2}, Start={3}", bat.BatchNr, bat.WaterMeters[0].WaterMeterData.WMTypeId, wmTypeRevision, bat.StartTime);
|
log.WarnFormat("SIM: VT_PRUEFREIHE_PD inserted, BatchNr={0}, TypeId={1}, TypeRev={2}, Start={3}", bat.BatchNr, bat.WaterMeters[0].WaterMeterData.WMTypeId, wmTypeRevision, bat.StartTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (var testInfo in completeTestInfo)
|
foreach (var testInfo in distinctTestInfo)
|
||||||
{
|
{
|
||||||
if ((testInfo.Id != 0) && (-20 <= testInfo.Id) && (testInfo.Id <= 20)) /// LU PruefungsNr-s are between -20 and 20
|
if ((testInfo.Id != 0) && (-20 <= testInfo.Id) && (testInfo.Id <= 20)) /// LU PruefungsNr-s are between -20 and 20
|
||||||
{
|
{
|
||||||
@@ -1066,7 +1067,7 @@ namespace TBF.Rig.Output.DB.SensusOracle
|
|||||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = dbCfg.TestBenchGroupId + wm.Batch.TestBenchId });
|
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = dbCfg.TestBenchGroupId + wm.Batch.TestBenchId });
|
||||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = wm.Batch.BatchNr });
|
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = wm.Batch.BatchNr });
|
||||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = hydr_Pruefung });
|
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = hydr_Pruefung });
|
||||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = wm.OrigCalibFactor });
|
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = wm.CalibFactor }); // korrimprate - should be new calib.factor, not wm.OrigCalibFactor
|
||||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = 0 }); /// TODO: pressure test
|
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = 0 }); /// TODO: pressure test
|
||||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = wm.WMPosition });
|
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = wm.WMPosition });
|
||||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = wm.Passed ? 1 : 0 });
|
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = wm.Passed ? 1 : 0 });
|
||||||
@@ -1082,7 +1083,7 @@ namespace TBF.Rig.Output.DB.SensusOracle
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
foreach (var testInfo in completeTestInfo)
|
foreach (var testInfo in distinctTestInfo)
|
||||||
{
|
{
|
||||||
if ((testInfo.Id != 0) && (-20 <= testInfo.Id) && (testInfo.Id <= 20)) /// LU PruefungsNr-s are nonzero and between -20 and 20
|
if ((testInfo.Id != 0) && (-20 <= testInfo.Id) && (testInfo.Id <= 20)) /// LU PruefungsNr-s are nonzero and between -20 and 20
|
||||||
{
|
{
|
||||||
@@ -1299,7 +1300,7 @@ namespace TBF.Rig.Output.DB.SensusOracle
|
|||||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = dbCfg.TestBenchGroupId + wm.Batch.TestBenchId });
|
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = dbCfg.TestBenchGroupId + wm.Batch.TestBenchId });
|
||||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = wm.Batch.BatchNr });
|
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = wm.Batch.BatchNr });
|
||||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = hydr_Pruefung });
|
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = hydr_Pruefung });
|
||||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = wm.OrigCalibFactor });
|
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = wm.CalibFactor });
|
||||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = 0 }); /// TODO
|
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = 0 }); /// TODO
|
||||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = wm.WMPosition });
|
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = wm.WMPosition });
|
||||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = wm.Passed ? 1 : 0 });
|
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = wm.Passed ? 1 : 0 });
|
||||||
|
|||||||
@@ -434,7 +434,7 @@ namespace TBF.Rig.Sequences
|
|||||||
wm.Disabled = true;
|
wm.Disabled = true;
|
||||||
}
|
}
|
||||||
else if (!wm.Disabled && (Users.CurrentUser.UserName() == "milan" ||
|
else if (!wm.Disabled && (Users.CurrentUser.UserName() == "milan" ||
|
||||||
Users.CurrentUser.UserName() == "augustin" ||
|
Users.CurrentUser.UserName() == "jau" ||
|
||||||
Users.CurrentUser.UserName() == "michal" ||
|
Users.CurrentUser.UserName() == "michal" ||
|
||||||
Users.CurrentUser.UserName() == "michal2"))
|
Users.CurrentUser.UserName() == "michal2"))
|
||||||
{
|
{
|
||||||
@@ -1343,21 +1343,17 @@ namespace TBF.Rig.Sequences
|
|||||||
printers.CopyTo(rsltProcessors, writers.Length);
|
printers.CopyTo(rsltProcessors, writers.Length);
|
||||||
eventTriggers.CopyTo(rsltProcessors, writers.Length + printers.Length);
|
eventTriggers.CopyTo(rsltProcessors, writers.Length + printers.Length);
|
||||||
///
|
///
|
||||||
int rpix = 0; /// Component index in AddOperation() loop, afterwards rsltProcessors.Length
|
State st = State.Create("MainSeq : Saving and printing results");
|
||||||
|
int rpix = 0; /// Component index in AddOperation() loop
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
State st = State.Create("MainSeq : Saving and printing results");
|
|
||||||
for (rpix = 0; rpix < rsltProcessors.Length; rpix++ )
|
for (rpix = 0; rpix < rsltProcessors.Length; rpix++ )
|
||||||
{
|
{
|
||||||
var rp = TbfComponents.FindComponent(rsltProcessors[rpix]) as IResultsProcessor;
|
var rp = TbfComponents.FindComponent(rsltProcessors[rpix]) as IResultsProcessor;
|
||||||
if (rp != null) st.AddOperation(rp.ProcessResultsOp(ProcessData.BatchRslts.Batch));
|
if (rp != null) st.AddOperation(rp.ProcessResultsOp(ProcessData.BatchRslts.Batch));
|
||||||
}
|
}
|
||||||
st.EnterState();
|
|
||||||
do {
|
st.EnterState(); /// Executes operation.Start() functions of result processors, should be inside try-catch
|
||||||
e = StateMachine.WaitRunDevsRunOps();
|
|
||||||
if (e.Contains(Event.Error)) break;
|
|
||||||
}
|
|
||||||
while (e.Contains(Event.Busy));
|
|
||||||
}
|
}
|
||||||
catch (Exception exc)
|
catch (Exception exc)
|
||||||
{
|
{
|
||||||
@@ -1366,6 +1362,20 @@ namespace TBF.Rig.Sequences
|
|||||||
log.FatalFormat("FileWriter {0} crashed: {1}", rpName, exc.Message);
|
log.FatalFormat("FileWriter {0} crashed: {1}", rpName, exc.Message);
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
/// Next line executes operation.Run() of result processors, already try-catch protected (generates Event.Crashed)
|
||||||
|
e = StateMachine.WaitRunDevsRunOps();
|
||||||
|
if (e.Contains(Event.Error)) break;
|
||||||
|
}
|
||||||
|
while (e.Contains(Event.Busy));
|
||||||
|
|
||||||
|
if (e.Contains(Event.Crashed))
|
||||||
|
{
|
||||||
|
Bridge.OnError(this, Strings.Error_when_saving_and_printing_results);
|
||||||
|
}
|
||||||
|
|
||||||
if (e.Contains(Event.Error)) goto error;
|
if (e.Contains(Event.Error)) goto error;
|
||||||
///
|
///
|
||||||
if (!e.Contains(Event.ErrorProcessingResults))
|
if (!e.Contains(Event.ErrorProcessingResults))
|
||||||
|
|||||||
@@ -2049,7 +2049,7 @@ namespace TBF.Rig.Sequences
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
protected bool TestAndLogUiCmdStop(Test test, IList<Event> e)
|
protected bool TestAndLogUiCmdStop(Test test, IList<Event> e)
|
||||||
{
|
{
|
||||||
if (!e.Contains(Event.UiCmdStop)) return false;
|
if (e == null || !e.Contains(Event.UiCmdStop)) return false;
|
||||||
|
|
||||||
log.FatalFormat("STOP pressed: Procedure={0}, Test={1}, State={2}",
|
log.FatalFormat("STOP pressed: Procedure={0}, Test={1}, State={2}",
|
||||||
(StateMachine.Procedure == null) ? "?" : StateMachine.Procedure.Name,
|
(StateMachine.Procedure == null) ? "?" : StateMachine.Procedure.Name,
|
||||||
@@ -2064,14 +2064,24 @@ namespace TBF.Rig.Sequences
|
|||||||
log.FatalFormat(" Feeding path: {0}", (inPath != null) ? inPath.ToString() : "none");
|
log.FatalFormat(" Feeding path: {0}", (inPath != null) ? inPath.ToString() : "none");
|
||||||
log.FatalFormat(" Bench path: {0}", (benchPath != null) ? benchPath.ToString() : "none");
|
log.FatalFormat(" Bench path: {0}", (benchPath != null) ? benchPath.ToString() : "none");
|
||||||
log.FatalFormat(" Output path: {0}", (outPath != null) ? outPath.ToString() : "none");
|
log.FatalFormat(" Output path: {0}", (outPath != null) ? outPath.ToString() : "none");
|
||||||
if (inPath.Pump is IPump) log.FatalFormat(" Pump power: {0}%", (inPath.Pump as IPump).Power);
|
|
||||||
else if (inPath.Pump is IValve) log.FatalFormat(" Feeding valve: {0}", (inPath.Pump as IValve).State ? "open" : "close");
|
|
||||||
if (outPath.RegulValve is IRegValve) log.FatalFormat(" Regulation valve position: {0}%", outPath.RegulValve.Position);
|
|
||||||
log.FatalFormat(" Flow: {0}", RefFlow);
|
log.FatalFormat(" Flow: {0}", RefFlow);
|
||||||
log.FatalFormat(" Mass: {0}", Mass);
|
log.FatalFormat(" Mass: {0}", Mass);
|
||||||
log.FatalFormat(" Start mass: {0}", StartMass);
|
log.FatalFormat(" Start mass: {0}", StartMass);
|
||||||
log.FatalFormat(" Liter/ref.pulse: {0}", LtrPerRefPulse);
|
log.FatalFormat(" Liter/ref.pulse: {0}", LtrPerRefPulse);
|
||||||
log.FatalFormat(" Reference pulses: {0}", RefPulses);
|
log.FatalFormat(" Reference pulses: {0}", RefPulses);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (inPath != null)
|
||||||
|
{
|
||||||
|
if (inPath.Pump is IPump) log.FatalFormat(" Pump power: {0}%", (inPath.Pump as IPump).Power);
|
||||||
|
else if (inPath.Pump is IValve) log.FatalFormat(" Feeding valve: {0}", (inPath.Pump as IValve).State ? "open" : "close");
|
||||||
|
}
|
||||||
|
if (outPath != null && outPath.RegulValve is IRegValve) log.FatalFormat(" Regulation valve position: {0}%", outPath.RegulValve.Position);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
log.FatalFormat($" SequenceBase.TestAndLogUiCmdStop error: {ex.Message}");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
+20
-8
@@ -185,19 +185,31 @@ namespace TBF.Rig
|
|||||||
/// <returns>List of Event-s returned from the state operations</returns>
|
/// <returns>List of Event-s returned from the state operations</returns>
|
||||||
public static IList<Event> RunOperations()
|
public static IList<Event> RunOperations()
|
||||||
{
|
{
|
||||||
IList<Event> events = new List<Event>();
|
IList<Event> events = new List<Event>(); /// List of events from all operation.Run() - initially empty
|
||||||
|
|
||||||
foreach (IOperation operation in currentState.Operations)
|
foreach (IOperation operation in currentState.Operations)
|
||||||
{
|
{
|
||||||
Event evnt = operation.Run();
|
Event evnt;
|
||||||
if (evnt != Event.None)
|
try
|
||||||
{
|
{
|
||||||
log.InfoFormat("Operation {0}.Run() returned {1}", operation, evnt);
|
evnt = operation.Run();
|
||||||
events.Add(evnt);
|
}
|
||||||
}
|
catch (Exception ex)
|
||||||
else
|
|
||||||
{
|
{
|
||||||
log.DebugFormat("Operation {0}.Run() returned {1}", operation, evnt);
|
log.FatalFormat("Operation {0}.Run() crashed: {1}", operation, ex);
|
||||||
|
evnt = Event.Crashed;
|
||||||
|
events.Add(Event.Crashed);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (evnt == Event.None)
|
||||||
|
{
|
||||||
|
/// Do not add Event.None to the list of events
|
||||||
|
log.DebugFormat("Operation {0}.Run() returned {1}", operation, evnt);
|
||||||
|
}
|
||||||
|
else if (evnt != Event.Crashed)
|
||||||
|
{
|
||||||
|
events.Add(evnt);
|
||||||
|
log.InfoFormat("Operation {0}.Run() returned {1}", operation, evnt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,9 @@ using Sensus.iPerl.RfidCom.Services;
|
|||||||
using Sensus.iPerl.RfidCom.Structures;
|
using Sensus.iPerl.RfidCom.Structures;
|
||||||
using System;
|
using System;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
|
using TBF.Rig.Hart.Common;
|
||||||
using TBF.Rig.TestMethods.iPerlCommunication.iPerlHead;
|
using TBF.Rig.TestMethods.iPerlCommunication.iPerlHead;
|
||||||
|
using static Sensus.iPerl.NfcHandler.MCI_Protocol;
|
||||||
|
|
||||||
namespace TBF.Rig.TestMethods.iPerlCommunication
|
namespace TBF.Rig.TestMethods.iPerlCommunication
|
||||||
{
|
{
|
||||||
@@ -23,7 +25,7 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
byte[] pcb = null;
|
byte[] pcb = null;
|
||||||
int readRetVal = iPerlCommunicationForm.ReadRequestPort(iHead, MessageID.Configuration, 16, 5, out pcb);
|
int readRetVal = iPerlCommunicationForm.ReadRequestPort(iHead, MessageID.Configuration, Sensus.iPerl.NfcHandler.MCI_Protocol.StructName.Configuration, 16, 5, out pcb);
|
||||||
if (readRetVal == 0)
|
if (readRetVal == 0)
|
||||||
{
|
{
|
||||||
return RfidHelper.HexLiteral2Unsigned(RfidHelper.SwapHexcode(BitConverter.ToString(pcb).Replace("-", string.Empty))).ToString();
|
return RfidHelper.HexLiteral2Unsigned(RfidHelper.SwapHexcode(BitConverter.ToString(pcb).Replace("-", string.Empty))).ToString();
|
||||||
@@ -39,12 +41,28 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
|
|||||||
|
|
||||||
internal static string SetActiveMode(IperlHead iHead)
|
internal static string SetActiveMode(IperlHead iHead)
|
||||||
{
|
{
|
||||||
return RfidCommands.SetActiveMode($"COM{iHead.RfidComPortNr}") ? "OK" : "Error Set Active Mode";
|
byte[] cmd = new byte[1] { (byte)Command.SetActiveMode };
|
||||||
|
if (0 == iPerlCommunicationForm.WriteRequestPort(iHead, MessageID.Command, StructName.Command, 0, 1, cmd))
|
||||||
|
{
|
||||||
|
return "OK";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return "Error Set Active Mode";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static string SetTestMode(IperlHead iHead)
|
internal static string SetTestMode(IperlHead iHead)
|
||||||
{
|
{
|
||||||
return RfidCommands.SetTestMode($"COM{iHead.RfidComPortNr}") ? "OK" : "Error Set Test Mode";
|
byte[] cmd = new byte[1] { (byte)Command.SetTestMode };
|
||||||
|
if (0 == iPerlCommunicationForm.WriteRequestPort(iHead, MessageID.Command, StructName.Command, 0, 1, cmd))
|
||||||
|
{
|
||||||
|
return "OK";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return "Error Set Test Mode";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if IPERL
|
#if IPERL
|
||||||
@@ -52,10 +70,8 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
string payload = "03";
|
int retValue = iPerlCommunicationForm.WriteRequestPort(iHead, MessageID.RadioPassthrough, StructName.RadioParams, 0x1898, 1, new byte[] { (byte)3 }); // WakeUpInterval
|
||||||
RfidCommunicationService rfidCommunicationService = new RfidCommunicationService { ComPort = $"COM{iHead.RfidComPortNr}", WaitTimeAfterFailure = 2200, PassThroughWaitTime = 1500, MaxRetries = 3, TimeOut = 5000 };
|
return 0 == retValue ? "OK" : "Error";
|
||||||
rfidCommunicationService.RfidWrite(Params.u8_WakeUpInterval, payload);
|
|
||||||
return rfidCommunicationService.RfidRead<string>(Params.u8_WakeUpInterval).ToString() == payload ? "OK" : "Error";
|
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@@ -67,11 +83,8 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
string payload = "01"; // 1 set the µC to the production mode, radio should not start
|
int retValue = iPerlCommunicationForm.WriteRequestPort(iHead, MessageID.RadioPassthrough, StructName.RadioInfo, 0x1804, 1, new byte[] { (byte)1 }); // System Status
|
||||||
RfidCommunicationService rfidCommunicationService = new RfidCommunicationService { ComPort = $"COM{iHead.RfidComPortNr}", WaitTimeAfterFailure = 2200, PassThroughWaitTime = 1500, MaxRetries = 3, TimeOut = 5000 };
|
return 0 == retValue ? "OK" : "Error";
|
||||||
rfidCommunicationService.RfidWrite(SystemInfo.u8_system_state, payload);
|
|
||||||
Thread.Sleep(1000); // must be for pass thru params
|
|
||||||
return rfidCommunicationService.RfidRead<string>(SystemInfo.u8_system_state).ToString() == payload ? "OK" : "Error";
|
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@@ -85,7 +98,7 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
byte[] cmd = RfidHelper.HexStringToByteArray(custText);
|
byte[] cmd = RfidHelper.HexStringToByteArray(custText);
|
||||||
if (0 == iPerlCommunicationForm.WriteRequestPort(iHead, MessageID.RadioPassthrough, 0x1899, 9, cmd))
|
if (0 == iPerlCommunicationForm.WriteRequestPort(iHead, MessageID.RadioPassthrough, Sensus.iPerl.NfcHandler.MCI_Protocol.StructName.RadioParams, 0x1899, 9, cmd))
|
||||||
{
|
{
|
||||||
RfidCommunicationService rfidCommunicationService = new RfidCommunicationService { ComPort = $"COM{iHead.RfidComPortNr}", WaitTimeAfterFailure = 2200, PassThroughWaitTime = 1500, MaxRetries = 3, TimeOut = 5000 };
|
RfidCommunicationService rfidCommunicationService = new RfidCommunicationService { ComPort = $"COM{iHead.RfidComPortNr}", WaitTimeAfterFailure = 2200, PassThroughWaitTime = 1500, MaxRetries = 3, TimeOut = 5000 };
|
||||||
//rfidCommunicationService.RfidWrite(Params.u8_Customer_Text, custText);
|
//rfidCommunicationService.RfidWrite(Params.u8_Customer_Text, custText);
|
||||||
|
|||||||
@@ -2,6 +2,8 @@
|
|||||||
/// Copyright (c) 2015-2021 Sensus Slovensko a.s.
|
/// Copyright (c) 2015-2021 Sensus Slovensko a.s.
|
||||||
///
|
///
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.IO.Ports;
|
||||||
|
using System.Threading;
|
||||||
using System.Xml.Serialization;
|
using System.Xml.Serialization;
|
||||||
using Common;
|
using Common;
|
||||||
using Config.Entities;
|
using Config.Entities;
|
||||||
@@ -27,6 +29,15 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
|
|||||||
public int NrThreads; /// Numbwr of parallel threads (1, 2 or 4)
|
public int NrThreads; /// Numbwr of parallel threads (1, 2 or 4)
|
||||||
public int IperlCheckErrorsToStop;
|
public int IperlCheckErrorsToStop;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// NFC S4.5 Combihead params
|
||||||
|
///
|
||||||
|
public int MciTimeoutMs;
|
||||||
|
public int BaudRate;
|
||||||
|
public int DataBits;
|
||||||
|
public Parity ParityBit;
|
||||||
|
public StopBits StopBits;
|
||||||
|
|
||||||
public int DfltQ2c_15_rl;
|
public int DfltQ2c_15_rl;
|
||||||
public int DfltQ2c_15_lr;
|
public int DfltQ2c_15_lr;
|
||||||
public int DfltQ2c_20_rl;
|
public int DfltQ2c_20_rl;
|
||||||
@@ -65,8 +76,13 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
|
|||||||
PassThroughWaitTime = 1500;
|
PassThroughWaitTime = 1500;
|
||||||
NrThreads = 2; /// 1, 2 or 4 threads
|
NrThreads = 2; /// 1, 2 or 4 threads
|
||||||
IperlCheckErrorsToStop = 10;
|
IperlCheckErrorsToStop = 10;
|
||||||
|
MciTimeoutMs = 4000; // ms, NFC interface
|
||||||
|
BaudRate = 57600; // NFC Interface
|
||||||
|
DataBits = 8; // NFC Interface
|
||||||
|
ParityBit = Parity.None; // NFC Interface
|
||||||
|
StopBits = StopBits.Two; // NFC Interface
|
||||||
|
|
||||||
TestParams = CreateTestParamsProvider() as iPerlCommunicationParams;
|
TestParams = CreateTestParamsProvider() as iPerlCommunicationParams;
|
||||||
}
|
}
|
||||||
|
|
||||||
public TestMethodCfg(IComponentFactory factory)
|
public TestMethodCfg(IComponentFactory factory)
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ using System.Collections.Generic;
|
|||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text.RegularExpressions;
|
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using log4net;
|
using log4net;
|
||||||
@@ -18,14 +17,8 @@ using Config.Entities;
|
|||||||
using TBF.Resources;
|
using TBF.Resources;
|
||||||
using TBF.Rig.Sequences;
|
using TBF.Rig.Sequences;
|
||||||
using TBF.Rig.TestMethods.iPerlCommunication.iPerlHead;
|
using TBF.Rig.TestMethods.iPerlCommunication.iPerlHead;
|
||||||
using Sensus.iPerl.RfidCom;
|
|
||||||
using Sensus.iPerl.RfidCom.Exceptions;
|
|
||||||
using Sensus.iPerl.RfidCom.Helper;
|
|
||||||
using Sensus.iPerl.RfidCom.Model.Enums;
|
|
||||||
using Sensus.iPerl.RfidCom.Services;
|
|
||||||
using Sensus.iPerl.RfidCom.Structures;
|
|
||||||
using Results.Entities;
|
using Results.Entities;
|
||||||
using Results;
|
using static Sensus.iPerl.NfcHandler.MCI_Protocol;
|
||||||
|
|
||||||
namespace TBF.Rig.TestMethods.iPerlCommunication
|
namespace TBF.Rig.TestMethods.iPerlCommunication
|
||||||
{
|
{
|
||||||
@@ -110,115 +103,29 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
|
|||||||
public static Color DirNokColor = Color.Red;
|
public static Color DirNokColor = Color.Red;
|
||||||
|
|
||||||
|
|
||||||
#region iPerl_Head_RFID_Interface: ReadRequestPort, WriteRequestPort
|
#region Simulation / RFID / NFC Interface: ReadRequestPort, WriteRequestPort
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Wrapper function with safe interface and unsafe body
|
/// Wrapper function with safe interface and unsafe body
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="iperlHead">Water meter (iPerlHead) object</param>
|
/// <param name="iperlHead">Water meter (iPerlHead) object</param>
|
||||||
/// <returns>Value returned by readRequestPort(...)</returns>
|
/// <returns>Value returned by readRequestPort(...)</returns>
|
||||||
public static int ReadRequestPort(IperlHead iperlHead, MessageID messageID, int offset, int length, out byte[] buffer)
|
public static int ReadRequestPort(IperlHead iperlHead, MessageID messageID, StructName structName, int offset, int length, out byte[] buffer)
|
||||||
{
|
{
|
||||||
Thread.Sleep(Math.Max(250, cfg.DelayBetweenRetries));
|
Thread.Sleep(Math.Max(250, cfg.DelayBetweenRetries));
|
||||||
|
|
||||||
if (iperlHead.DebugLevel != DebugMode.Normal)
|
if (iperlHead.DebugLevel != DebugMode.Normal) // Simulation
|
||||||
{
|
{
|
||||||
///
|
return SimulationServices.ReadRequest(cfg, iperlHead, messageID, offset, length, out buffer);
|
||||||
/// Simulation
|
|
||||||
///
|
|
||||||
if ((messageID == MessageID.Configuration) && (offset == 0) && (length == ConfigStruct.Length))
|
|
||||||
{
|
|
||||||
buffer = new byte[ConfigStruct.Length] { 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
|
|
||||||
}
|
|
||||||
else if ((messageID == MessageID.Calibration) && (offset == 0) && (length == CalibrationStruct.Length))
|
|
||||||
{
|
|
||||||
buffer = new byte[CalibrationStruct.Length] { 3, 0, 150, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 0, 0 };
|
|
||||||
}
|
|
||||||
else if ((messageID == MessageID.Calibration) && (offset == 0) && (length == CalibrationStructV4.Length))
|
|
||||||
{
|
|
||||||
buffer = new byte[CalibrationStructV4.Length] { 3, 0, 150, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 0, 0, 150, 10 };
|
|
||||||
}
|
|
||||||
else if ((messageID == MessageID.Calibration) && (offset == 2) && (length == 2))
|
|
||||||
{
|
|
||||||
buffer = new byte[2] { 150, 10 };
|
|
||||||
}
|
|
||||||
else if ((messageID == MessageID.Calibration) && (offset == 34) && (length == 2))
|
|
||||||
{
|
|
||||||
buffer = new byte[2] { 150, 10 };
|
|
||||||
}
|
|
||||||
else if ((messageID == MessageID.MetrologyMemory) && (offset == Q2CorrFactorsAddr) && (length == 2))
|
|
||||||
{
|
|
||||||
buffer = new byte[2] { 0, 0 };
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
buffer = new byte[length];
|
|
||||||
}
|
|
||||||
|
|
||||||
return iperlHead.Name.Equals("iPerl13") ? 2 : 0; /// Simulates an error on position 13
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < cfg.MaxCommRetries; i++)
|
if (iperlHead.CommInterface == CommunicationInterface.NFC) // NFC Interface
|
||||||
{
|
{
|
||||||
using (RfidLogic writer = new RfidLogic($"COM{iperlHead.RfidComPortNr}"))
|
return NfcServices.ReadRequest(cfg, iperlHead, structName, offset, length, out buffer);
|
||||||
{
|
}
|
||||||
try
|
else // RFID Interface
|
||||||
{
|
{
|
||||||
byte[] response = writer.ReadRequest((byte)messageID, offset, length, cfg.CommTimeout);
|
return RfidServices.ReadRequest(cfg, iperlHead, messageID, offset, length, out buffer);
|
||||||
string hexString = RfidHelper.ConvertByteArrayToHexString(response);
|
|
||||||
string swapHexString = RfidHelper.SwapHexcode(hexString);
|
|
||||||
string decString = RfidHelper.HexLiteral2Unsigned(RfidHelper.SwapHexcode(hexString)).ToString();
|
|
||||||
|
|
||||||
if (length > 10)
|
|
||||||
{
|
|
||||||
//if the result only contains "00"s we are working on the wrong COM port
|
|
||||||
// or the module just isn't connected
|
|
||||||
if (Regex.IsMatch(hexString, @"^(00)\1+$"))
|
|
||||||
{
|
|
||||||
rfidDataLogger.Error($"COM{iperlHead.RfidComPortNr}: ReadRequestPort ({messageID},...) <- Error: No RFID signal.");
|
|
||||||
throw new RfidValidationException("Error_Rfid_NoSignal");
|
|
||||||
}
|
|
||||||
|
|
||||||
//if the result only contains "03"s the meter did not answer.
|
|
||||||
// Might be due to the module being positioned incorrectly.
|
|
||||||
if (Regex.IsMatch(hexString, @"^(03)\1+$"))
|
|
||||||
{
|
|
||||||
rfidDataLogger.Error($"COM{iperlHead.RfidComPortNr}: ReadRequestPort ({messageID},...) <- Error: No meter signal.");
|
|
||||||
throw new RfidValidationException("Error_Rfid_NoAnswerFromMeter");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
writer.ClosePort();
|
|
||||||
buffer = response;
|
|
||||||
rfidDataLogger.Info($"{iperlHead.Name} ({iperlHead.SerialNr}): ReadRequestPort(COM{iperlHead.RfidComPortNr},...) returned HEX: {hexString}; SwapHexCodeToDecimal: {decString}");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
catch (RfidDataNotAvailableException)
|
|
||||||
{
|
|
||||||
if (/*RfidHelper.IsPassThrough(messageID)*/ messageID == MessageID.ASICRegisterReadTest || messageID == MessageID.RadioPassthrough)
|
|
||||||
{
|
|
||||||
rfidDataLogger.Info($"COM{iperlHead.RfidComPortNr}: ReadRequestPort ({messageID},...) {(i > 0 ? "<- Error: Invalid Pass-Through data." : "<- Info: Wait for Pass-Through data.")}");
|
|
||||||
Thread.Sleep(cfg.PassThroughWaitTime);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Thread.Sleep(cfg.WaitTimeAfterFailure);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (RfidValidationException)
|
|
||||||
{
|
|
||||||
Thread.Sleep(cfg.WaitTimeAfterFailure);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
rfidDataLogger.Error($"COM{iperlHead.RfidComPortNr}: ReadRequestPort ({messageID},...) {ex.Message}");
|
|
||||||
Thread.Sleep(cfg.WaitTimeAfterFailure);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
rfidDataLogger.Error($"RFID reading failed after {cfg.MaxCommRetries} retries: COM{iperlHead.RfidComPortNr}: ReadRequestPort ({messageID},...)");
|
|
||||||
log.Error($"RFID reading failed after {cfg.MaxCommRetries} retries: COM{iperlHead.RfidComPortNr}: ReadRequestPort ({messageID},...)");
|
|
||||||
buffer = new byte[length];
|
|
||||||
return 3;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -226,49 +133,23 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="iperlHead">Water meter (iPerlHead) object</param>
|
/// <param name="iperlHead">Water meter (iPerlHead) object</param>
|
||||||
/// <returns>Value returned by writeRequestPort(...)</returns>
|
/// <returns>Value returned by writeRequestPort(...)</returns>
|
||||||
public static int WriteRequestPort(IperlHead iperlHead, MessageID messageID, int offset, int length, byte[] buffer)
|
public static int WriteRequestPort(IperlHead iperlHead, MessageID messageID, StructName structName, int offset, int length, byte[] buffer)
|
||||||
{
|
{
|
||||||
Thread.Sleep(Math.Max(250, cfg.DelayBetweenRetries));
|
Thread.Sleep(Math.Max(250, cfg.DelayBetweenRetries));
|
||||||
|
|
||||||
if (iperlHead.DebugLevel != DebugMode.Normal) return 0;
|
if (iperlHead.DebugLevel != DebugMode.Normal) // Simulation
|
||||||
|
|
||||||
RfidLogic writer = new RfidLogic($"COM{iperlHead.RfidComPortNr}");
|
|
||||||
string payload = RfidHelper.ConvertByteArrayToHexString(buffer);
|
|
||||||
//byte messageId = (byte)((int)valueDefinition.MessageType);
|
|
||||||
//byte[] payloadBytes = RfidHelper.HexStringToByteArray(payload);
|
|
||||||
|
|
||||||
for (var i = 0; i < cfg.MaxCommRetries; i++)
|
|
||||||
{
|
{
|
||||||
try
|
return SimulationServices.WriteRequest(cfg, iperlHead, messageID, offset, length, buffer);
|
||||||
{
|
}
|
||||||
if (writer.ClosePort()) writer.OpenPort();
|
|
||||||
writer.WriteRequest((byte)messageID, offset, length, buffer, cfg.CommTimeout, false);
|
if (iperlHead.CommInterface == CommunicationInterface.NFC) // NFC Interface
|
||||||
writer.ClosePort();
|
{
|
||||||
rfidDataLogger.InfoFormat($"{iperlHead.Name}({iperlHead.SerialNr},COM{iperlHead.RfidComPortNr}): WriteRequestPort({messageID}, {offset}, {length}, {payload})");
|
return NfcServices.WriteRequest(cfg, iperlHead, structName, offset, length, buffer);
|
||||||
return 0;
|
}
|
||||||
}
|
else // RFID Interface
|
||||||
catch (Exception ex)
|
{
|
||||||
{
|
return RfidServices.WriteRequest(cfg, iperlHead, messageID, offset, length, buffer);
|
||||||
if (messageID == MessageID.RadioPassthrough || messageID == MessageID.ASICRegisterReadTest)
|
|
||||||
{
|
|
||||||
Thread.Sleep(1500);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
rfidDataLogger.Error($"COM{iperlHead.RfidComPortNr}: Error: {ex.Message}");
|
|
||||||
Thread.Sleep(cfg.WaitTimeAfterFailure);
|
|
||||||
if (i > 1)
|
|
||||||
{
|
|
||||||
rfidDataLogger.Error($"COM{iperlHead.RfidComPortNr}: Reopen the com port.");
|
|
||||||
writer.ClosePort();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
writer.ClosePort();
|
|
||||||
rfidDataLogger.Error($"RFID writing failed after {cfg.MaxCommRetries} retries: COM{iperlHead.RfidComPortNr}: WriteRequestPort ({messageID},...) {System.Text.Encoding.UTF8.GetString(buffer)}");
|
|
||||||
log.Error($"RFID writing failed after {cfg.MaxCommRetries} retries: COM{iperlHead.RfidComPortNr}: WriteRequestPort ({messageID},...) {System.Text.Encoding.UTF8.GetString(buffer)}");
|
|
||||||
return 2;
|
|
||||||
}
|
}
|
||||||
#endregion iPerl_Head_RFID_Interface: ReadRequestPort, WriteRequestPort
|
#endregion iPerl_Head_RFID_Interface: ReadRequestPort, WriteRequestPort
|
||||||
|
|
||||||
@@ -308,7 +189,7 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
|
|||||||
/// RFID multiplexer PCB / RFID serial port and worker thread related variables
|
/// RFID multiplexer PCB / RFID serial port and worker thread related variables
|
||||||
///
|
///
|
||||||
static TestMethod testMethod;
|
static TestMethod testMethod;
|
||||||
static TestMethodCfg cfg;
|
public static TestMethodCfg cfg;
|
||||||
static IList<Config.Entities.Test> tests;
|
static IList<Config.Entities.Test> tests;
|
||||||
static IList<iPerlCommunicationParams> multiTestParams;
|
static IList<iPerlCommunicationParams> multiTestParams;
|
||||||
|
|
||||||
@@ -979,7 +860,7 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
|
|||||||
|
|
||||||
/// Read configuration
|
/// Read configuration
|
||||||
byte[] config = null;
|
byte[] config = null;
|
||||||
readRetVal = ReadRequestPort(ihead, MessageID.Configuration, 0, ConfigStruct.Length, out config);
|
readRetVal = ReadRequestPort(ihead, MessageID.Configuration, StructName.Configuration, 0, ConfigStruct.Length, out config);
|
||||||
if (readRetVal == 0)
|
if (readRetVal == 0)
|
||||||
{
|
{
|
||||||
error = CommErr.None;
|
error = CommErr.None;
|
||||||
@@ -1032,7 +913,7 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
|
|||||||
/// Switch to Active mode in order to change TestModeConfig
|
/// Switch to Active mode in order to change TestModeConfig
|
||||||
error = CommErr.CmdActive;
|
error = CommErr.CmdActive;
|
||||||
byte[] cmd = new byte[1] { (byte)Command.SetActiveMode };
|
byte[] cmd = new byte[1] { (byte)Command.SetActiveMode };
|
||||||
if (0 == WriteRequestPort(ihead, MessageID.Command, 0, 1, cmd))
|
if (0 == WriteRequestPort(ihead, MessageID.Command, StructName.Command, 0, 1, cmd))
|
||||||
{
|
{
|
||||||
error = CommErr.None;
|
error = CommErr.None;
|
||||||
}
|
}
|
||||||
@@ -1046,7 +927,7 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
|
|||||||
/// Change the TestModeConfig if necessary
|
/// Change the TestModeConfig if necessary
|
||||||
error = CommErr.Write;
|
error = CommErr.Write;
|
||||||
byte[] tstMdCfg = new byte[1] { testModeConfig };
|
byte[] tstMdCfg = new byte[1] { testModeConfig };
|
||||||
if (0 == WriteRequestPort(ihead, MessageID.Configuration, 21, 1, tstMdCfg))
|
if (0 == WriteRequestPort(ihead, MessageID.Configuration, StructName.Configuration, 21, 1, tstMdCfg))
|
||||||
{
|
{
|
||||||
ihead.ConfigStruct.Update(21, tstMdCfg);
|
ihead.ConfigStruct.Update(21, tstMdCfg);
|
||||||
error = CommErr.None;
|
error = CommErr.None;
|
||||||
@@ -1061,7 +942,7 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
|
|||||||
/// Switch to test mode
|
/// Switch to test mode
|
||||||
error = CommErr.CmdTest;
|
error = CommErr.CmdTest;
|
||||||
byte[] cmd = new byte[1] { (byte)Command.SetTestMode };
|
byte[] cmd = new byte[1] { (byte)Command.SetTestMode };
|
||||||
if (0 == WriteRequestPort(ihead, MessageID.Command, 0, 1, cmd))
|
if (0 == WriteRequestPort(ihead, MessageID.Command, StructName.Command, 0, 1, cmd))
|
||||||
{
|
{
|
||||||
error = CommErr.None;
|
error = CommErr.None;
|
||||||
}
|
}
|
||||||
@@ -1074,9 +955,11 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
|
|||||||
if (error == CommErr.None)
|
if (error == CommErr.None)
|
||||||
{
|
{
|
||||||
/// Verify the configuration
|
/// Verify the configuration
|
||||||
|
Thread.Sleep(2000); // RFID: 1000 ms is enough, NFC needs min 2000 ms
|
||||||
error = CommErr.Verify;
|
error = CommErr.Verify;
|
||||||
byte[] config = null;
|
byte[] config = null;
|
||||||
if (0 == ReadRequestPort(ihead, MessageID.Configuration, 0, ConfigStruct.Length, out config))
|
int retVal = ReadRequestPort(ihead, MessageID.Configuration, StructName.Configuration, 0, ConfigStruct.Length, out config);
|
||||||
|
if (0 == retVal)
|
||||||
{
|
{
|
||||||
ihead.ConfigStruct = ConfigStruct.FromByteArray(config);
|
ihead.ConfigStruct = ConfigStruct.FromByteArray(config);
|
||||||
if ((ihead.ConfigStruct.MeterState == MeterState.Test) && (ihead.ConfigStruct.TestModeConfig == testModeConfig))
|
if ((ihead.ConfigStruct.MeterState == MeterState.Test) && (ihead.ConfigStruct.TestModeConfig == testModeConfig))
|
||||||
@@ -1104,7 +987,7 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
|
|||||||
|
|
||||||
/// Switch to active mode
|
/// Switch to active mode
|
||||||
byte[] cmd = new byte[1] { (byte)Command.SetActiveMode };
|
byte[] cmd = new byte[1] { (byte)Command.SetActiveMode };
|
||||||
if (0 == WriteRequestPort(ihead, MessageID.Command, 0, 1, cmd))
|
if (0 == WriteRequestPort(ihead, MessageID.Command, StructName.Command, 0, 1, cmd))
|
||||||
{
|
{
|
||||||
error = CommErr.None;
|
error = CommErr.None;
|
||||||
}
|
}
|
||||||
@@ -1158,7 +1041,7 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
|
|||||||
|
|
||||||
/// Read calibration
|
/// Read calibration
|
||||||
byte[] calib = null;
|
byte[] calib = null;
|
||||||
readRetVal = ReadRequestPort(ihead, MessageID.Calibration, 0, CalibrationStruct.Length, out calib);
|
readRetVal = ReadRequestPort(ihead, MessageID.Calibration, StructName.Calibration, 0, CalibrationStruct.Length, out calib);
|
||||||
if (readRetVal == 0)
|
if (readRetVal == 0)
|
||||||
{
|
{
|
||||||
ihead.CalibrationStruct = CalibrationStruct.FromByteArray(calib);
|
ihead.CalibrationStruct = CalibrationStruct.FromByteArray(calib);
|
||||||
@@ -1192,7 +1075,7 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
|
|||||||
|
|
||||||
/// Read calibration
|
/// Read calibration
|
||||||
byte[] calib = null;
|
byte[] calib = null;
|
||||||
readRetVal = ReadRequestPort(ihead, MessageID.Calibration, 0, CalibrationStructV4.Length, out calib);
|
readRetVal = ReadRequestPort(ihead, MessageID.Calibration, StructName.Calibration, 0, CalibrationStructV4.Length, out calib);
|
||||||
if (readRetVal == 0)
|
if (readRetVal == 0)
|
||||||
{
|
{
|
||||||
ihead.CalibrationStructV4 = CalibrationStructV4.FromByteArray(calib);
|
ihead.CalibrationStructV4 = CalibrationStructV4.FromByteArray(calib);
|
||||||
@@ -1321,14 +1204,14 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
|
|||||||
/// Write the new calibration factor (up to cfg.MaxCommRetries tims)
|
/// Write the new calibration factor (up to cfg.MaxCommRetries tims)
|
||||||
///
|
///
|
||||||
error = CommErr.Write;
|
error = CommErr.Write;
|
||||||
if (0 == WriteRequestPort(ihead, MessageID.Calibration, 2, 2, data))
|
if (0 == WriteRequestPort(ihead, MessageID.Calibration, StructName.Calibration, 2, 2, data))
|
||||||
{
|
{
|
||||||
///
|
///
|
||||||
/// Read and verify the calibration factor
|
/// Read and verify the calibration factor
|
||||||
///
|
///
|
||||||
error = CommErr.ReadAfterWrite;
|
error = CommErr.ReadAfterWrite;
|
||||||
byte[] calib_2_3 = null;
|
byte[] calib_2_3 = null;
|
||||||
if (0 == ReadRequestPort(ihead, MessageID.Calibration, 2, 2, out calib_2_3))
|
if (0 == ReadRequestPort(ihead, MessageID.Calibration, StructName.Calibration, 2, 2, out calib_2_3))
|
||||||
{
|
{
|
||||||
error = CommErr.Verify;
|
error = CommErr.Verify;
|
||||||
if (calib_2_3 != null && calib_2_3.Length == 2 && data[0] == calib_2_3[0] && data[1] == calib_2_3[1])
|
if (calib_2_3 != null && calib_2_3.Length == 2 && data[0] == calib_2_3[0] && data[1] == calib_2_3[1])
|
||||||
@@ -1478,8 +1361,8 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
|
|||||||
/// Write the new calibration factor (up to cfg.MaxCommRetries tims)
|
/// Write the new calibration factor (up to cfg.MaxCommRetries tims)
|
||||||
///
|
///
|
||||||
error = CommErr.Write;
|
error = CommErr.Write;
|
||||||
if (0 == WriteRequestPort(ihead, MessageID.Calibration, 2, 2, data) &&
|
if (0 == WriteRequestPort(ihead, MessageID.Calibration, StructName.Calibration, 2, 2, data) &&
|
||||||
0 == WriteRequestPort(ihead, MessageID.Calibration, 34, 2, dataLNA))
|
0 == WriteRequestPort(ihead, MessageID.Calibration, StructName.Calibration, 34, 2, dataLNA))
|
||||||
{
|
{
|
||||||
///
|
///
|
||||||
/// Read and verify the calibration factor
|
/// Read and verify the calibration factor
|
||||||
@@ -1487,8 +1370,8 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
|
|||||||
error = CommErr.ReadAfterWrite;
|
error = CommErr.ReadAfterWrite;
|
||||||
byte[] calib_2_3 = null;
|
byte[] calib_2_3 = null;
|
||||||
byte[] calib_34_35 = null;
|
byte[] calib_34_35 = null;
|
||||||
if (0 == ReadRequestPort(ihead, MessageID.Calibration, 2, 2, out calib_2_3) &&
|
if (0 == ReadRequestPort(ihead, MessageID.Calibration, StructName.Calibration, 2, 2, out calib_2_3) &&
|
||||||
0 == ReadRequestPort(ihead, MessageID.Calibration, 34, 2, out calib_34_35))
|
0 == ReadRequestPort(ihead, MessageID.Calibration, StructName.Calibration, 34, 2, out calib_34_35))
|
||||||
{
|
{
|
||||||
error = CommErr.Verify;
|
error = CommErr.Verify;
|
||||||
if (calib_2_3 != null && calib_2_3.Length == 2 && data[0] == calib_2_3[0] && data[1] == calib_2_3[1] &&
|
if (calib_2_3 != null && calib_2_3.Length == 2 && data[0] == calib_2_3[0] && data[1] == calib_2_3[1] &&
|
||||||
@@ -1555,7 +1438,7 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
|
|||||||
|
|
||||||
if (ihead.FactorLimitLo <= ihead.CalibFactor && ihead.CalibFactor <= ihead.FactorLimitHi)
|
if (ihead.FactorLimitLo <= ihead.CalibFactor && ihead.CalibFactor <= ihead.FactorLimitHi)
|
||||||
{
|
{
|
||||||
resultStr = "Calibratin factor is OK";
|
resultStr = "Calibration factor is OK";
|
||||||
return CommErr.None; /// No need to update the calibration factor
|
return CommErr.None; /// No need to update the calibration factor
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1588,7 +1471,7 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
|
|||||||
}
|
}
|
||||||
|
|
||||||
byte[] data = new byte[2] { (byte)(defaultCalibFactor & 0x00FF), (byte)((defaultCalibFactor >> 8) & 0x00FF) };
|
byte[] data = new byte[2] { (byte)(defaultCalibFactor & 0x00FF), (byte)((defaultCalibFactor >> 8) & 0x00FF) };
|
||||||
if (0 == WriteRequestPort(ihead, MessageID.Calibration, 2, 2, data))
|
if (0 == WriteRequestPort(ihead, MessageID.Calibration, StructName.Calibration, 2, 2, data))
|
||||||
{
|
{
|
||||||
error = CommErr.None;
|
error = CommErr.None;
|
||||||
ihead.CalibrationStruct.Update(data, 2);
|
ihead.CalibrationStruct.Update(data, 2);
|
||||||
@@ -1600,7 +1483,7 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
|
|||||||
|
|
||||||
/// Read calibration
|
/// Read calibration
|
||||||
byte[] calib_2_3 = null;
|
byte[] calib_2_3 = null;
|
||||||
if (0 == ReadRequestPort(ihead, MessageID.Calibration, 2, 2, out calib_2_3))
|
if (0 == ReadRequestPort(ihead, MessageID.Calibration, StructName.Calibration, 2, 2, out calib_2_3))
|
||||||
{
|
{
|
||||||
error = CommErr.None;
|
error = CommErr.None;
|
||||||
ihead.CalibrationStruct.Update(calib_2_3, 2);
|
ihead.CalibrationStruct.Update(calib_2_3, 2);
|
||||||
@@ -1657,7 +1540,7 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
|
|||||||
}
|
}
|
||||||
|
|
||||||
byte[] data = new byte[2] { (byte)(defaultCalibFactor & 0x00FF), (byte)((defaultCalibFactor >> 8) & 0x00FF) };
|
byte[] data = new byte[2] { (byte)(defaultCalibFactor & 0x00FF), (byte)((defaultCalibFactor >> 8) & 0x00FF) };
|
||||||
if (0 == WriteRequestPort(ihead, MessageID.Calibration, 2, 2, data))
|
if (0 == WriteRequestPort(ihead, MessageID.Calibration, StructName.Calibration, 2, 2, data))
|
||||||
{
|
{
|
||||||
error = CommErr.None;
|
error = CommErr.None;
|
||||||
ihead.CalibrationStructV4.Update(data, 2);
|
ihead.CalibrationStructV4.Update(data, 2);
|
||||||
@@ -1669,7 +1552,7 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
|
|||||||
|
|
||||||
/// Read calibration
|
/// Read calibration
|
||||||
byte[] calib_2_3 = null;
|
byte[] calib_2_3 = null;
|
||||||
if (0 == ReadRequestPort(ihead, MessageID.Calibration, 2, 2, out calib_2_3))
|
if (0 == ReadRequestPort(ihead, MessageID.Calibration, StructName.Calibration, 2, 2, out calib_2_3))
|
||||||
{
|
{
|
||||||
error = CommErr.None;
|
error = CommErr.None;
|
||||||
ihead.CalibrationStructV4.Update(calib_2_3, 2);
|
ihead.CalibrationStructV4.Update(calib_2_3, 2);
|
||||||
@@ -1697,7 +1580,7 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
|
|||||||
/// Write zero Q2 correction
|
/// Write zero Q2 correction
|
||||||
byte[] rdData = null;
|
byte[] rdData = null;
|
||||||
///
|
///
|
||||||
if (0 == ReadRequestPort(ihead, MessageID.MetrologyMemory, Q2CorrFactorsAddr, 2, out rdData))
|
if (0 == ReadRequestPort(ihead, MessageID.MetrologyMemory, StructName.ProductionInfo, Q2CorrFactorsAddr, 2, out rdData))
|
||||||
{
|
{
|
||||||
error = CommErr.None;
|
error = CommErr.None;
|
||||||
}
|
}
|
||||||
@@ -1796,7 +1679,7 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
|
|||||||
/// Write zero Q2 correction
|
/// Write zero Q2 correction
|
||||||
byte[] wrData = new byte[2] { (byte)factorLR, (byte)factorRL };
|
byte[] wrData = new byte[2] { (byte)factorLR, (byte)factorRL };
|
||||||
///
|
///
|
||||||
if (0 == WriteRequestPort(ihead, MessageID.MetrologyMemory, Q2CorrFactorsAddr, wrData.Length, wrData))
|
if (0 == WriteRequestPort(ihead, MessageID.MetrologyMemory, StructName.ProductionInfo, Q2CorrFactorsAddr, wrData.Length, wrData))
|
||||||
{
|
{
|
||||||
wm.Q2CorrRL = ihead.Q2CorrRL = factorRL;
|
wm.Q2CorrRL = ihead.Q2CorrRL = factorRL;
|
||||||
wm.Q2CorrLR = ihead.Q2CorrLR = factorLR;
|
wm.Q2CorrLR = ihead.Q2CorrLR = factorLR;
|
||||||
@@ -1905,7 +1788,7 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
|
|||||||
/// Write zero Q2 correction
|
/// Write zero Q2 correction
|
||||||
byte[] wrData = new byte[1] { 0 };
|
byte[] wrData = new byte[1] { 0 };
|
||||||
///
|
///
|
||||||
if (0 == WriteRequestPort(ihead, MessageID.MetrologyMemory, Hz2CorrFactorsAddr, wrData.Length, wrData))
|
if (0 == WriteRequestPort(ihead, MessageID.MetrologyMemory, StructName.ProductionInfo, Hz2CorrFactorsAddr, wrData.Length, wrData))
|
||||||
{
|
{
|
||||||
error = CommErr.None;
|
error = CommErr.None;
|
||||||
}
|
}
|
||||||
@@ -2186,7 +2069,7 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
|
|||||||
/// Write R-L Q2 correction factor only
|
/// Write R-L Q2 correction factor only
|
||||||
///
|
///
|
||||||
byte[] wrData = new byte[1] { (byte)q2CorrRL };
|
byte[] wrData = new byte[1] { (byte)q2CorrRL };
|
||||||
if (0 == WriteRequestPort(ihead, MessageID.MetrologyMemory, Q2CorrFactorsAddrRL, wrData.Length, wrData))
|
if (0 == WriteRequestPort(ihead, MessageID.MetrologyMemory, StructName.ProductionInfo, Q2CorrFactorsAddrRL, wrData.Length, wrData))
|
||||||
{
|
{
|
||||||
wm.Q2CorrRL = ihead.Q2CorrRL = q2CorrRL;
|
wm.Q2CorrRL = ihead.Q2CorrRL = q2CorrRL;
|
||||||
resultStr = string.Format("Q2 correction: RL={0}", q2CorrRL);
|
resultStr = string.Format("Q2 correction: RL={0}", q2CorrRL);
|
||||||
@@ -2204,7 +2087,7 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
|
|||||||
/// Write L-R Q2 correction factor only
|
/// Write L-R Q2 correction factor only
|
||||||
///
|
///
|
||||||
byte[] wrData = new byte[1] { (byte)q2CorrLR };
|
byte[] wrData = new byte[1] { (byte)q2CorrLR };
|
||||||
if (0 == WriteRequestPort(ihead, MessageID.MetrologyMemory, Q2CorrFactorsAddrLR, wrData.Length, wrData))
|
if (0 == WriteRequestPort(ihead, MessageID.MetrologyMemory, StructName.ProductionInfo, Q2CorrFactorsAddrLR, wrData.Length, wrData))
|
||||||
{
|
{
|
||||||
wm.Q2CorrLR = ihead.Q2CorrLR = q2CorrLR;
|
wm.Q2CorrLR = ihead.Q2CorrLR = q2CorrLR;
|
||||||
resultStr = string.Format("Q2 correction: LR={0}", q2CorrLR);
|
resultStr = string.Format("Q2 correction: LR={0}", q2CorrLR);
|
||||||
@@ -2217,7 +2100,7 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
|
|||||||
/// Write both Q2 correction factors
|
/// Write both Q2 correction factors
|
||||||
///
|
///
|
||||||
byte[] wrData = new byte[2] { (byte)q2CorrLR, (byte)q2CorrRL };
|
byte[] wrData = new byte[2] { (byte)q2CorrLR, (byte)q2CorrRL };
|
||||||
if (0 == WriteRequestPort(ihead, MessageID.MetrologyMemory, Q2CorrFactorsAddr, wrData.Length, wrData))
|
if (0 == WriteRequestPort(ihead, MessageID.MetrologyMemory, StructName.ProductionInfo, Q2CorrFactorsAddr, wrData.Length, wrData))
|
||||||
{
|
{
|
||||||
wm.Q2CorrRL = ihead.Q2CorrRL = q2CorrRL;
|
wm.Q2CorrRL = ihead.Q2CorrRL = q2CorrRL;
|
||||||
wm.Q2CorrLR = ihead.Q2CorrLR = q2CorrLR;
|
wm.Q2CorrLR = ihead.Q2CorrLR = q2CorrLR;
|
||||||
@@ -2325,7 +2208,7 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
|
|||||||
Byte hz2CorrectionByte = (byte)(hz2CorrectionFactor & 0x000000FF);
|
Byte hz2CorrectionByte = (byte)(hz2CorrectionFactor & 0x000000FF);
|
||||||
byte[] wrData = new byte[1] { hz2CorrectionByte };
|
byte[] wrData = new byte[1] { hz2CorrectionByte };
|
||||||
///
|
///
|
||||||
if (0 == WriteRequestPort(ihead, MessageID.MetrologyMemory, Hz2CorrFactorsAddr, wrData.Length, wrData))
|
if (0 == WriteRequestPort(ihead, MessageID.MetrologyMemory, StructName.ProductionInfo, Hz2CorrFactorsAddr, wrData.Length, wrData))
|
||||||
{
|
{
|
||||||
error = CommErr.None;
|
error = CommErr.None;
|
||||||
wm.Hz2Correction = ihead.Hz2Correction = hz2CorrectionFactor;
|
wm.Hz2Correction = ihead.Hz2Correction = hz2CorrectionFactor;
|
||||||
@@ -2383,42 +2266,42 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
|
|||||||
|
|
||||||
List<iPerlDataWrite> dataToBeWritten = new List<iPerlDataWrite>
|
List<iPerlDataWrite> dataToBeWritten = new List<iPerlDataWrite>
|
||||||
{
|
{
|
||||||
new iPerlDataWrite(MessageID.MetrologyMemory, 0x19A1, new byte[] { (byte)0xA5 }, "Open Sealing"),
|
new iPerlDataWrite(MessageID.MetrologyMemory, StructName.Calibration, ihead.CommInterface == CommunicationInterface.NFC? 33:0x19A1, new byte[] { (byte)0xA5 }, "Open Sealing"), // ?????
|
||||||
new iPerlDataWrite(MessageID.MetrologyMemory, 0x1985, new byte[] { arrow }, "Arrow"),
|
new iPerlDataWrite(MessageID.MetrologyMemory, StructName.Calibration, ihead.CommInterface == CommunicationInterface.NFC? 5:0x1985, new byte[] { arrow }, "Arrow"),
|
||||||
new iPerlDataWrite(MessageID.MetrologyMemory, 0x199C, new byte[5], "Clear S/N"),
|
new iPerlDataWrite(MessageID.MetrologyMemory, StructName.Calibration, ihead.CommInterface == CommunicationInterface.NFC? 28:0x199C, new byte[5], "Clear S/N"),
|
||||||
new iPerlDataWrite(MessageID.Configuration, 0x0015, new byte[] { (byte)0xA0 }, "Test mode config = A0"),
|
new iPerlDataWrite(MessageID.Configuration, StructName.Configuration, 0x0015, new byte[] { (byte)0xA0 }, "Test mode config = A0"),
|
||||||
new iPerlDataWrite(MessageID.MetrologyMemory, 0x198E, new byte[] { (byte)(2510 & 0xFF), (byte)((2510 >> 8) & 0xFF) }, "Receipt mean current")
|
new iPerlDataWrite(MessageID.MetrologyMemory, StructName.Calibration, ihead.CommInterface == CommunicationInterface.NFC? 14:0x198E, new byte[] { (byte)(2510 & 0xFF), (byte)((2510 >> 8) & 0xFF) }, "Receipt mean current")
|
||||||
};
|
};
|
||||||
|
|
||||||
// check meter status: 1-Idle, 2-Active, 3-Test, 4-End Of Life
|
// check meter status: 1-Idle, 2-Active, 3-Test, 4-End Of Life
|
||||||
if (0 == ReadRequestPort(ihead, MessageID.Configuration, 1, 1, out byte[] rdData))
|
if (0 == ReadRequestPort(ihead, MessageID.Configuration, StructName.Configuration, 1, 1, out byte[] rdData))
|
||||||
{
|
{
|
||||||
int eMeterState = (int)((SByte)rdData[0]);
|
int eMeterState = (int)((SByte)rdData[0]);
|
||||||
switch (eMeterState)
|
switch (eMeterState)
|
||||||
{
|
{
|
||||||
case 1: // Idle -> Test -> Active
|
case 1: // Idle -> Test -> Active
|
||||||
dataToBeWritten.Add(new iPerlDataWrite(MessageID.Command, 0x0000, new byte[] { (byte)Command.SetTestMode }, "Set test mode"));
|
dataToBeWritten.Add(new iPerlDataWrite(MessageID.Command, StructName.Command, 0x0000, new byte[] { (byte)Command.SetTestMode }, "Set test mode"));
|
||||||
dataToBeWritten.Add(new iPerlDataWrite(MessageID.Command, 0x0000, new byte[] { (byte)Command.SetActiveMode }, "Set active mode"));
|
dataToBeWritten.Add(new iPerlDataWrite(MessageID.Command, StructName.Command, 0x0000, new byte[] { (byte)Command.SetActiveMode }, "Set active mode"));
|
||||||
break;
|
break;
|
||||||
case 3: // Test Mode -> Active
|
case 3: // Test Mode -> Active
|
||||||
dataToBeWritten.Add(new iPerlDataWrite(MessageID.Command, 0x0000, new byte[] { (byte)Command.SetActiveMode }, "Set active mode"));
|
dataToBeWritten.Add(new iPerlDataWrite(MessageID.Command, StructName.Command, 0x0000, new byte[] { (byte)Command.SetActiveMode }, "Set active mode"));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dataToBeWritten.Add(new iPerlDataWrite(MessageID.RadioPassthrough, 0x1804, new byte[] { (byte)1 }, "System Status"));
|
dataToBeWritten.Add(new iPerlDataWrite(MessageID.RadioPassthrough, StructName.RadioInfo, 0x1804, new byte[] { (byte)1 }, "System Status"));
|
||||||
dataToBeWritten.Add(new iPerlDataWrite(MessageID.RadioPassthrough, 0x1898, new byte[] { (byte)3 }, "WakeUpInterval"));
|
dataToBeWritten.Add(new iPerlDataWrite(MessageID.RadioPassthrough, StructName.RadioParams, 0x1898, new byte[] { (byte)3 }, "WakeUpInterval"));
|
||||||
dataToBeWritten.Add(new iPerlDataWrite(MessageID.RadioPassthrough, 0x18A2, new byte[] { (byte)0x4A, (byte)0x53, (byte)0x3B, (byte)0x8F,
|
dataToBeWritten.Add(new iPerlDataWrite(MessageID.RadioPassthrough, StructName.RadioParams, 0x18A2, new byte[] { (byte)0x4A, (byte)0x53, (byte)0x3B, (byte)0x8F,
|
||||||
(byte)0x70, (byte)0x31, (byte)0xC2, (byte)0x5D,
|
(byte)0x70, (byte)0x31, (byte)0xC2, (byte)0x5D,
|
||||||
(byte)0x6F, (byte)0x2D, (byte)0xE8, (byte)0x07,
|
(byte)0x6F, (byte)0x2D, (byte)0xE8, (byte)0x07,
|
||||||
(byte)0x6E, (byte)0x0F, (byte)0x97, (byte)0xC3, }, "AES Key Crypted"));
|
(byte)0x6E, (byte)0x0F, (byte)0x97, (byte)0xC3, }, "AES Key Crypted"));
|
||||||
|
|
||||||
int successfyllyWrittenFlags = 0; /// Ones in this word represent communication failures, LSB represents the first step
|
int successfyllyWrittenFlags = 0; /// Ones in this word represent communication failures, LSB represents the first step
|
||||||
int mask = 1;
|
int mask = 1;
|
||||||
foreach (var wData in dataToBeWritten)
|
foreach (var wData in dataToBeWritten)
|
||||||
{
|
{
|
||||||
bool isSuccessfullyWritten = false;
|
bool isSuccessfullyWritten = false;
|
||||||
if (0 == WriteRequestPort(ihead, wData.MessageID, wData.Offset, wData.Data.Length, wData.Data))
|
if (0 == WriteRequestPort(ihead, wData.MessageID, wData.StructName, wData.Offset, wData.Data.Length, wData.Data))
|
||||||
{
|
{
|
||||||
isSuccessfullyWritten = true;
|
isSuccessfullyWritten = true;
|
||||||
}
|
}
|
||||||
@@ -2475,10 +2358,10 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
|
|||||||
|
|
||||||
iPerlDataWrite[] dataToBeWritten = new iPerlDataWrite[]
|
iPerlDataWrite[] dataToBeWritten = new iPerlDataWrite[]
|
||||||
{
|
{
|
||||||
new iPerlDataWrite(MessageID.MetrologyMemory, 0x19A1, new byte[] { (byte)0xA5 }, "Open Sealing"), /// 0x5A=sealed, 0xA5=unsealed
|
new iPerlDataWrite(MessageID.MetrologyMemory, StructName.Calibration, ihead.CommInterface == CommunicationInterface.NFC? 33:0x19A1, new byte[] { (byte)0xA5 }, "Open Sealing"), /// 0x5A=sealed, 0xA5=unsealed ??????
|
||||||
new iPerlDataWrite(MessageID.RadioPassthrough, 0x1804, new byte[] { (byte)1 }, "System Status"),
|
new iPerlDataWrite(MessageID.RadioPassthrough, StructName.RadioInfo, 0x1804, new byte[] { (byte)1 }, "System Status"),
|
||||||
new iPerlDataWrite(MessageID.Command, 0x0000, new byte[] { (byte)Command.SetActiveMode }, "Set active mode"),
|
new iPerlDataWrite(MessageID.Command, StructName.Command, 0x0000, new byte[] { (byte)Command.SetActiveMode }, "Set active mode"),
|
||||||
new iPerlDataWrite(MessageID.Configuration, 0x0015, new byte[] { testModeConfig }, string.Format("Test mode config = {0:X2}", testModeConfig)),
|
new iPerlDataWrite(MessageID.Configuration, StructName.Configuration, 0x0015, new byte[] { testModeConfig }, string.Format("Test mode config = {0:X2}", testModeConfig)),
|
||||||
};
|
};
|
||||||
|
|
||||||
if (ihead.ConfigStruct != null) ihead.OrigTestModeConfig = ihead.ConfigStruct.TestModeConfig;
|
if (ihead.ConfigStruct != null) ihead.OrigTestModeConfig = ihead.ConfigStruct.TestModeConfig;
|
||||||
@@ -2488,7 +2371,7 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
|
|||||||
foreach (var wData in dataToBeWritten)
|
foreach (var wData in dataToBeWritten)
|
||||||
{
|
{
|
||||||
bool isSuccessfullyWritten = false;
|
bool isSuccessfullyWritten = false;
|
||||||
if (0 == WriteRequestPort(ihead, wData.MessageID, wData.Offset, wData.Data.Length, wData.Data))
|
if (0 == WriteRequestPort(ihead, wData.MessageID, wData.StructName, wData.Offset, wData.Data.Length, wData.Data))
|
||||||
{
|
{
|
||||||
isSuccessfullyWritten = true;
|
isSuccessfullyWritten = true;
|
||||||
}
|
}
|
||||||
@@ -2535,10 +2418,10 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
|
|||||||
|
|
||||||
iPerlDataWrite[] dataToBeWritten = new iPerlDataWrite[]
|
iPerlDataWrite[] dataToBeWritten = new iPerlDataWrite[]
|
||||||
{
|
{
|
||||||
new iPerlDataWrite(MessageID.Command, 0x0000, new byte[] { (byte)Command.SetActiveMode }, "Set active mode"),
|
new iPerlDataWrite(MessageID.Command, StructName.Command, 0x0000, new byte[] { (byte)Command.SetActiveMode }, "Set active mode"),
|
||||||
new iPerlDataWrite(MessageID.Configuration, 0x0015, new byte[] { testModeConfig }, string.Format("Test mode config = {0:X2}", testModeConfig)),
|
new iPerlDataWrite(MessageID.Configuration, StructName.Configuration, 0x0015, new byte[] { testModeConfig }, string.Format("Test mode config = {0:X2}", testModeConfig)),
|
||||||
new iPerlDataWrite(MessageID.RadioPassthrough, 0x1804, new byte[] { (byte)0 }, "System Status"),
|
new iPerlDataWrite(MessageID.RadioPassthrough, StructName.RadioInfo, 0x1804, new byte[] { (byte)0 }, "System Status"),
|
||||||
new iPerlDataWrite(MessageID.MetrologyMemory, 0x19A1, new byte[] { (byte)0x5A }, "Close Sealing"),
|
new iPerlDataWrite(MessageID.MetrologyMemory, StructName.Calibration, ihead.CommInterface == CommunicationInterface.NFC? 33:0x19A1, new byte[] { (byte)0x5A }, "Close Sealing") /// 0x5A=sealed, 0xA5=unsealed ??????
|
||||||
};
|
};
|
||||||
|
|
||||||
int successfyllyWrittenFlags = 0; /// Ones in this word represent communication failures, LSB represents the first step
|
int successfyllyWrittenFlags = 0; /// Ones in this word represent communication failures, LSB represents the first step
|
||||||
@@ -2546,7 +2429,7 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
|
|||||||
foreach (var wData in dataToBeWritten)
|
foreach (var wData in dataToBeWritten)
|
||||||
{
|
{
|
||||||
bool isSuccessfullyWritten = false;
|
bool isSuccessfullyWritten = false;
|
||||||
if (0 == WriteRequestPort(ihead, wData.MessageID, wData.Offset, wData.Data.Length, wData.Data))
|
if (0 == WriteRequestPort(ihead, wData.MessageID, wData.StructName, wData.Offset, wData.Data.Length, wData.Data))
|
||||||
{
|
{
|
||||||
isSuccessfullyWritten = true;
|
isSuccessfullyWritten = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,19 +2,22 @@
|
|||||||
/// Copyright (c) 2021 Sensus Slovensko a.s.
|
/// Copyright (c) 2021 Sensus Slovensko a.s.
|
||||||
///
|
///
|
||||||
using TBF.Rig.TestMethods.iPerlCommunication.iPerlHead;
|
using TBF.Rig.TestMethods.iPerlCommunication.iPerlHead;
|
||||||
|
using static Sensus.iPerl.NfcHandler.MCI_Protocol;
|
||||||
|
|
||||||
namespace TBF.Rig.TestMethods.iPerlCommunication
|
namespace TBF.Rig.TestMethods.iPerlCommunication
|
||||||
{
|
{
|
||||||
public class iPerlDataWrite
|
public class iPerlDataWrite
|
||||||
{
|
{
|
||||||
public MessageID MessageID;
|
public MessageID MessageID;
|
||||||
|
public StructName StructName;
|
||||||
public int Offset;
|
public int Offset;
|
||||||
public byte[] Data;
|
public byte[] Data;
|
||||||
public string Description;
|
public string Description;
|
||||||
|
|
||||||
public iPerlDataWrite(MessageID mesageID, int offset, byte[] data, string description)
|
public iPerlDataWrite(MessageID mesageID, StructName structName, int offset, byte[] data, string description)
|
||||||
{
|
{
|
||||||
MessageID = mesageID;
|
MessageID = mesageID;
|
||||||
|
StructName = structName;
|
||||||
Offset = offset;
|
Offset = offset;
|
||||||
Data = data;
|
Data = data;
|
||||||
Description = description;
|
Description = description;
|
||||||
|
|||||||
@@ -104,4 +104,10 @@ namespace TBF.Rig.TestMethods.iPerlCommunication.iPerlHead
|
|||||||
Flush = 0,
|
Flush = 0,
|
||||||
ProcessAndSave,
|
ProcessAndSave,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public enum CommunicationInterface
|
||||||
|
{
|
||||||
|
RFID,
|
||||||
|
NFC
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ namespace TBF.Rig.TestMethods.iPerlCommunication.iPerlHead
|
|||||||
public int MuxBoardNrOrGroup14 { get { return iperlHeadCfg.MuxBoardNr; } }
|
public int MuxBoardNrOrGroup14 { get { return iperlHeadCfg.MuxBoardNr; } }
|
||||||
public int Group { get { return iperlHeadCfg.Group; } }
|
public int Group { get { return iperlHeadCfg.Group; } }
|
||||||
public iPerlHead.MeterType MeterType { get { return iperlHeadCfg.MeterType; } }
|
public iPerlHead.MeterType MeterType { get { return iperlHeadCfg.MeterType; } }
|
||||||
|
public CommunicationInterface CommInterface { get { return iperlHeadCfg.CommunicationInterface; } }
|
||||||
|
|
||||||
public int Position
|
public int Position
|
||||||
{
|
{
|
||||||
@@ -1008,6 +1009,22 @@ namespace TBF.Rig.TestMethods.iPerlCommunication.iPerlHead
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public string ReadOptoData()
|
||||||
|
{
|
||||||
|
string received = ".";
|
||||||
|
lock (this)
|
||||||
|
{
|
||||||
|
int nrBytes = optoSerialPort.BytesToRead;
|
||||||
|
if (nrBytes > 0)
|
||||||
|
{
|
||||||
|
char[] buffer = new char[nrBytes];
|
||||||
|
optoSerialPort.Read(buffer, 0, nrBytes);
|
||||||
|
received = new string(buffer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return received;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void OptoTelegramReceived(int currentIx, bool async, Int64 volumeRawExt, Int64 timestampRawExt)
|
void OptoTelegramReceived(int currentIx, bool async, Int64 volumeRawExt, Int64 timestampRawExt)
|
||||||
{
|
{
|
||||||
@@ -1039,6 +1056,7 @@ namespace TBF.Rig.TestMethods.iPerlCommunication.iPerlHead
|
|||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
///
|
||||||
/// Called from the state machine when a test is selected and UI needs to be updated.
|
/// Called from the state machine when a test is selected and UI needs to be updated.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void OnOptoReceived(object sender, OptoReceivedEventArgs args)
|
public void OnOptoReceived(object sender, OptoReceivedEventArgs args)
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ namespace TBF.Rig.TestMethods.iPerlCommunication.iPerlHead
|
|||||||
public int RfidComPortNr; /// 0 = use MuxBoardNr
|
public int RfidComPortNr; /// 0 = use MuxBoardNr
|
||||||
public int MuxBoardNr; /// 0 = use RfidComPort(Nr), otherwise mux. board nr. 1 .. 4
|
public int MuxBoardNr; /// 0 = use RfidComPort(Nr), otherwise mux. board nr. 1 .. 4
|
||||||
public int Group; /// Number written to QuidoRS to connct the watermeter to RfidComPort, 1 .. 10
|
public int Group; /// Number written to QuidoRS to connct the watermeter to RfidComPort, 1 .. 10
|
||||||
|
public CommunicationInterface CommunicationInterface; /// Communication Interface: RFID or NFC
|
||||||
|
|
||||||
/// <summary> Procedure parameters </summary>
|
/// <summary> Procedure parameters </summary>
|
||||||
[XmlIgnore]
|
[XmlIgnore]
|
||||||
@@ -45,6 +46,7 @@ namespace TBF.Rig.TestMethods.iPerlCommunication.iPerlHead
|
|||||||
RfidComPortNr = 0; /// = use mux. board
|
RfidComPortNr = 0; /// = use mux. board
|
||||||
MuxBoardNr = 1;
|
MuxBoardNr = 1;
|
||||||
ProcParams = CreateProcParamsProvider() as ProcParams;
|
ProcParams = CreateProcParamsProvider() as ProcParams;
|
||||||
|
CommunicationInterface = CommunicationInterface.RFID;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IperlHeadCfg(IComponentFactory factory)
|
public IperlHeadCfg(IComponentFactory factory)
|
||||||
@@ -55,12 +57,13 @@ namespace TBF.Rig.TestMethods.iPerlCommunication.iPerlHead
|
|||||||
|
|
||||||
public string ToString(int i)
|
public string ToString(int i)
|
||||||
{
|
{
|
||||||
return string.Format("{0} Group1 (mux#)={1}, Group2={2}, Opto=Com{3}, RFID=Com{4}",
|
return string.Format("{0} Group1 (mux#)={1}, Group2={2}, Opto=Com{3}, RFID=Com{4}, Interface={5}",
|
||||||
Name,
|
Name,
|
||||||
MuxBoardNr,
|
MuxBoardNr,
|
||||||
Group,
|
Group,
|
||||||
OptoComPortNr,
|
OptoComPortNr,
|
||||||
RfidComPortNr);
|
RfidComPortNr,
|
||||||
|
CommunicationInterface);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,16 +3,14 @@
|
|||||||
///
|
///
|
||||||
using System;
|
using System;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Net.Sockets;
|
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using Common;
|
using Common;
|
||||||
using Config.Entities;
|
|
||||||
using TBF.Rig.Generic;
|
using TBF.Rig.Generic;
|
||||||
using TBF.Resources;
|
using TBF.Resources;
|
||||||
|
|
||||||
namespace TBF.Rig.TestMethods.iPerlCommunication.iPerlHead
|
namespace TBF.Rig.TestMethods.iPerlCommunication.iPerlHead
|
||||||
{
|
{
|
||||||
public partial class IperlHeadCfgCtrl : UserControl, IComponentCfgCtrl
|
public partial class IperlHeadCfgCtrl : UserControl, IComponentCfgCtrl
|
||||||
{
|
{
|
||||||
public bool ShowMore { get { return false; } }
|
public bool ShowMore { get { return false; } }
|
||||||
|
|
||||||
@@ -55,7 +53,9 @@ namespace TBF.Rig.TestMethods.iPerlCommunication.iPerlHead
|
|||||||
rfidPortNrTextBox.Text = config.RfidComPortNr.ToString();
|
rfidPortNrTextBox.Text = config.RfidComPortNr.ToString();
|
||||||
muxBoardNrTextBox.Text = config.MuxBoardNr.ToString();
|
muxBoardNrTextBox.Text = config.MuxBoardNr.ToString();
|
||||||
groupTextBox.Text = config.Group.ToString();
|
groupTextBox.Text = config.Group.ToString();
|
||||||
}
|
comboBoxCommunicationInterface.SelectedItem = config.CommunicationInterface.ToString();
|
||||||
|
tabPage2.Controls.Add(new IperlHeadTestCtrl(config));
|
||||||
|
}
|
||||||
|
|
||||||
public void Unlock()
|
public void Unlock()
|
||||||
{
|
{
|
||||||
@@ -68,6 +68,7 @@ namespace TBF.Rig.TestMethods.iPerlCommunication.iPerlHead
|
|||||||
rfidPortNrTextBox.Enabled = true;
|
rfidPortNrTextBox.Enabled = true;
|
||||||
muxBoardNrTextBox.Enabled = true;
|
muxBoardNrTextBox.Enabled = true;
|
||||||
groupTextBox.Enabled = true;
|
groupTextBox.Enabled = true;
|
||||||
|
comboBoxCommunicationInterface.Enabled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public CfgUpdateFlags VerifyCfg(ref string message)
|
public CfgUpdateFlags VerifyCfg(ref string message)
|
||||||
@@ -144,8 +145,9 @@ namespace TBF.Rig.TestMethods.iPerlCommunication.iPerlHead
|
|||||||
config.RfidComPortNr = int.Parse(rfidPortNrTextBox.Text);
|
config.RfidComPortNr = int.Parse(rfidPortNrTextBox.Text);
|
||||||
config.MuxBoardNr = int.Parse(muxBoardNrTextBox.Text);
|
config.MuxBoardNr = int.Parse(muxBoardNrTextBox.Text);
|
||||||
config.Group = int.Parse(groupTextBox.Text);
|
config.Group = int.Parse(groupTextBox.Text);
|
||||||
|
config.CommunicationInterface = (CommunicationInterface)comboBoxCommunicationInterface.SelectedIndex;
|
||||||
|
|
||||||
return flags;
|
return flags;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+267
-174
@@ -31,149 +31,145 @@ namespace TBF.Rig.TestMethods.iPerlCommunication.iPerlHead
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private void InitializeComponent()
|
private void InitializeComponent()
|
||||||
{
|
{
|
||||||
this.nameTextBox = new System.Windows.Forms.TextBox();
|
this.tabControl1 = new System.Windows.Forms.TabControl();
|
||||||
this.nameLabel = new System.Windows.Forms.Label();
|
this.tabPage1 = new System.Windows.Forms.TabPage();
|
||||||
this.classNameLabel = new System.Windows.Forms.Label();
|
this.label4 = new System.Windows.Forms.Label();
|
||||||
this.optoSerialPortTextBox = new System.Windows.Forms.TextBox();
|
this.label3 = new System.Windows.Forms.Label();
|
||||||
this.optoSerialPortLabel = new System.Windows.Forms.Label();
|
this.groupBox1 = new System.Windows.Forms.GroupBox();
|
||||||
this.muxBoardNrTextBox = new System.Windows.Forms.TextBox();
|
this.comboBoxCommunicationInterface = new System.Windows.Forms.ComboBox();
|
||||||
this.muxBoardNrLabel = new System.Windows.Forms.Label();
|
this.label1 = new System.Windows.Forms.Label();
|
||||||
this.groupTextBox = new System.Windows.Forms.TextBox();
|
|
||||||
this.groupLabel = new System.Windows.Forms.Label();
|
|
||||||
this.rfidPortNrTextBox = new System.Windows.Forms.TextBox();
|
this.rfidPortNrTextBox = new System.Windows.Forms.TextBox();
|
||||||
this.rfidSerialPortNrLabel = new System.Windows.Forms.Label();
|
this.rfidSerialPortNrLabel = new System.Windows.Forms.Label();
|
||||||
this.radioButton1 = new System.Windows.Forms.RadioButton();
|
|
||||||
this.radioButton2 = new System.Windows.Forms.RadioButton();
|
|
||||||
this.optoDataGroupBox = new System.Windows.Forms.GroupBox();
|
this.optoDataGroupBox = new System.Windows.Forms.GroupBox();
|
||||||
this.tcpipPortLabel = new System.Windows.Forms.Label();
|
this.tcpipPortLabel = new System.Windows.Forms.Label();
|
||||||
this.tcpipPortTextBox = new System.Windows.Forms.TextBox();
|
this.tcpipPortTextBox = new System.Windows.Forms.TextBox();
|
||||||
this.ipAddressLabel = new System.Windows.Forms.Label();
|
this.ipAddressLabel = new System.Windows.Forms.Label();
|
||||||
this.ipAddressTextBox = new System.Windows.Forms.TextBox();
|
this.ipAddressTextBox = new System.Windows.Forms.TextBox();
|
||||||
this.groupBox1 = new System.Windows.Forms.GroupBox();
|
this.radioButton1 = new System.Windows.Forms.RadioButton();
|
||||||
this.label3 = new System.Windows.Forms.Label();
|
this.radioButton2 = new System.Windows.Forms.RadioButton();
|
||||||
this.label4 = new System.Windows.Forms.Label();
|
this.optoSerialPortLabel = new System.Windows.Forms.Label();
|
||||||
this.optoDataGroupBox.SuspendLayout();
|
this.optoSerialPortTextBox = new System.Windows.Forms.TextBox();
|
||||||
|
this.groupTextBox = new System.Windows.Forms.TextBox();
|
||||||
|
this.groupLabel = new System.Windows.Forms.Label();
|
||||||
|
this.muxBoardNrTextBox = new System.Windows.Forms.TextBox();
|
||||||
|
this.muxBoardNrLabel = new System.Windows.Forms.Label();
|
||||||
|
this.nameTextBox = new System.Windows.Forms.TextBox();
|
||||||
|
this.nameLabel = new System.Windows.Forms.Label();
|
||||||
|
this.classNameLabel = new System.Windows.Forms.Label();
|
||||||
|
this.tabPage2 = new System.Windows.Forms.TabPage();
|
||||||
|
this.tabControl1.SuspendLayout();
|
||||||
|
this.tabPage1.SuspendLayout();
|
||||||
this.groupBox1.SuspendLayout();
|
this.groupBox1.SuspendLayout();
|
||||||
|
this.optoDataGroupBox.SuspendLayout();
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
//
|
//
|
||||||
// nameTextBox
|
// tabControl1
|
||||||
//
|
//
|
||||||
this.nameTextBox.Enabled = false;
|
this.tabControl1.Controls.Add(this.tabPage1);
|
||||||
this.nameTextBox.Location = new System.Drawing.Point(135, 40);
|
this.tabControl1.Controls.Add(this.tabPage2);
|
||||||
this.nameTextBox.Name = "nameTextBox";
|
this.tabControl1.Location = new System.Drawing.Point(3, 3);
|
||||||
this.nameTextBox.Size = new System.Drawing.Size(121, 20);
|
this.tabControl1.Name = "tabControl1";
|
||||||
this.nameTextBox.TabIndex = 2;
|
this.tabControl1.SelectedIndex = 0;
|
||||||
|
this.tabControl1.Size = new System.Drawing.Size(611, 432);
|
||||||
|
this.tabControl1.TabIndex = 0;
|
||||||
//
|
//
|
||||||
// nameLabel
|
// tabPage1
|
||||||
//
|
//
|
||||||
this.nameLabel.AutoSize = true;
|
this.tabPage1.Controls.Add(this.label4);
|
||||||
this.nameLabel.Location = new System.Drawing.Point(25, 43);
|
this.tabPage1.Controls.Add(this.label3);
|
||||||
this.nameLabel.Name = "nameLabel";
|
this.tabPage1.Controls.Add(this.groupBox1);
|
||||||
this.nameLabel.Size = new System.Drawing.Size(35, 13);
|
this.tabPage1.Controls.Add(this.optoDataGroupBox);
|
||||||
this.nameLabel.TabIndex = 1;
|
this.tabPage1.Controls.Add(this.groupTextBox);
|
||||||
this.nameLabel.Text = "Name";
|
this.tabPage1.Controls.Add(this.groupLabel);
|
||||||
|
this.tabPage1.Controls.Add(this.muxBoardNrTextBox);
|
||||||
|
this.tabPage1.Controls.Add(this.muxBoardNrLabel);
|
||||||
|
this.tabPage1.Controls.Add(this.nameTextBox);
|
||||||
|
this.tabPage1.Controls.Add(this.nameLabel);
|
||||||
|
this.tabPage1.Controls.Add(this.classNameLabel);
|
||||||
|
this.tabPage1.Location = new System.Drawing.Point(4, 25);
|
||||||
|
this.tabPage1.Name = "tabPage1";
|
||||||
|
this.tabPage1.Padding = new System.Windows.Forms.Padding(3);
|
||||||
|
this.tabPage1.Size = new System.Drawing.Size(603, 403);
|
||||||
|
this.tabPage1.TabIndex = 0;
|
||||||
|
this.tabPage1.Text = "Config";
|
||||||
|
this.tabPage1.UseVisualStyleBackColor = true;
|
||||||
//
|
//
|
||||||
// classNameLabel
|
// label4
|
||||||
//
|
//
|
||||||
this.classNameLabel.AutoSize = true;
|
this.label4.AutoSize = true;
|
||||||
this.classNameLabel.Location = new System.Drawing.Point(132, 16);
|
this.label4.Location = new System.Drawing.Point(208, 101);
|
||||||
this.classNameLabel.Name = "classNameLabel";
|
this.label4.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||||
this.classNameLabel.Size = new System.Drawing.Size(60, 13);
|
this.label4.Name = "label4";
|
||||||
this.classNameLabel.TabIndex = 0;
|
this.label4.Size = new System.Drawing.Size(40, 16);
|
||||||
this.classNameLabel.Text = "ClassName";
|
this.label4.TabIndex = 25;
|
||||||
|
this.label4.Text = "1 .. 10";
|
||||||
//
|
//
|
||||||
// optoSerialPortTextBox
|
// label3
|
||||||
//
|
//
|
||||||
this.optoSerialPortTextBox.Enabled = false;
|
this.label3.AutoSize = true;
|
||||||
this.optoSerialPortTextBox.Location = new System.Drawing.Point(329, 42);
|
this.label3.Location = new System.Drawing.Point(208, 72);
|
||||||
this.optoSerialPortTextBox.Name = "optoSerialPortTextBox";
|
this.label3.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||||
this.optoSerialPortTextBox.Size = new System.Drawing.Size(34, 20);
|
this.label3.Name = "label3";
|
||||||
this.optoSerialPortTextBox.TabIndex = 7;
|
this.label3.Size = new System.Drawing.Size(33, 16);
|
||||||
|
this.label3.TabIndex = 24;
|
||||||
|
this.label3.Text = "1 .. 4";
|
||||||
//
|
//
|
||||||
// optoSerialPortLabel
|
// groupBox1
|
||||||
//
|
//
|
||||||
this.optoSerialPortLabel.AutoSize = true;
|
this.groupBox1.Controls.Add(this.comboBoxCommunicationInterface);
|
||||||
this.optoSerialPortLabel.Location = new System.Drawing.Point(241, 45);
|
this.groupBox1.Controls.Add(this.label1);
|
||||||
this.optoSerialPortLabel.Name = "optoSerialPortLabel";
|
this.groupBox1.Controls.Add(this.rfidPortNrTextBox);
|
||||||
this.optoSerialPortLabel.Size = new System.Drawing.Size(72, 13);
|
this.groupBox1.Controls.Add(this.rfidSerialPortNrLabel);
|
||||||
this.optoSerialPortLabel.TabIndex = 6;
|
this.groupBox1.Location = new System.Drawing.Point(10, 259);
|
||||||
this.optoSerialPortLabel.Text = "Serial port nr.:";
|
this.groupBox1.Margin = new System.Windows.Forms.Padding(4);
|
||||||
|
this.groupBox1.Name = "groupBox1";
|
||||||
|
this.groupBox1.Padding = new System.Windows.Forms.Padding(4);
|
||||||
|
this.groupBox1.Size = new System.Drawing.Size(552, 68);
|
||||||
|
this.groupBox1.TabIndex = 23;
|
||||||
|
this.groupBox1.TabStop = false;
|
||||||
|
this.groupBox1.Text = "RFID / NFC communication (in case mux. board is not used)";
|
||||||
//
|
//
|
||||||
// muxBoardNrTextBox
|
// comboBoxCommunicationInterface
|
||||||
//
|
//
|
||||||
this.muxBoardNrTextBox.Enabled = false;
|
this.comboBoxCommunicationInterface.Enabled = false;
|
||||||
this.muxBoardNrTextBox.Location = new System.Drawing.Point(135, 63);
|
this.comboBoxCommunicationInterface.FormattingEnabled = true;
|
||||||
this.muxBoardNrTextBox.Name = "muxBoardNrTextBox";
|
this.comboBoxCommunicationInterface.Items.AddRange(new object[] {
|
||||||
this.muxBoardNrTextBox.Size = new System.Drawing.Size(34, 20);
|
"RFID",
|
||||||
this.muxBoardNrTextBox.TabIndex = 9;
|
"NFC"});
|
||||||
|
this.comboBoxCommunicationInterface.Location = new System.Drawing.Point(201, 27);
|
||||||
|
this.comboBoxCommunicationInterface.Name = "comboBoxCommunicationInterface";
|
||||||
|
this.comboBoxCommunicationInterface.Size = new System.Drawing.Size(71, 24);
|
||||||
|
this.comboBoxCommunicationInterface.TabIndex = 9;
|
||||||
//
|
//
|
||||||
// muxBoardNrLabel
|
// label1
|
||||||
//
|
//
|
||||||
this.muxBoardNrLabel.AutoSize = true;
|
this.label1.AutoSize = true;
|
||||||
this.muxBoardNrLabel.Location = new System.Drawing.Point(25, 66);
|
this.label1.Location = new System.Drawing.Point(41, 30);
|
||||||
this.muxBoardNrLabel.Name = "muxBoardNrLabel";
|
this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||||
this.muxBoardNrLabel.Size = new System.Drawing.Size(106, 13);
|
this.label1.Name = "label1";
|
||||||
this.muxBoardNrLabel.TabIndex = 8;
|
this.label1.Size = new System.Drawing.Size(153, 16);
|
||||||
this.muxBoardNrLabel.Text = "Group 1 (mux. board)";
|
this.label1.TabIndex = 8;
|
||||||
//
|
this.label1.Text = "Communication Interface";
|
||||||
// groupTextBox
|
|
||||||
//
|
|
||||||
this.groupTextBox.Enabled = false;
|
|
||||||
this.groupTextBox.Location = new System.Drawing.Point(135, 86);
|
|
||||||
this.groupTextBox.Name = "groupTextBox";
|
|
||||||
this.groupTextBox.Size = new System.Drawing.Size(34, 20);
|
|
||||||
this.groupTextBox.TabIndex = 11;
|
|
||||||
//
|
|
||||||
// groupLabel
|
|
||||||
//
|
|
||||||
this.groupLabel.AutoSize = true;
|
|
||||||
this.groupLabel.Location = new System.Drawing.Point(25, 89);
|
|
||||||
this.groupLabel.Name = "groupLabel";
|
|
||||||
this.groupLabel.Size = new System.Drawing.Size(45, 13);
|
|
||||||
this.groupLabel.TabIndex = 10;
|
|
||||||
this.groupLabel.Text = "Group 2";
|
|
||||||
//
|
//
|
||||||
// rfidPortNrTextBox
|
// rfidPortNrTextBox
|
||||||
//
|
//
|
||||||
this.rfidPortNrTextBox.Enabled = false;
|
this.rfidPortNrTextBox.Enabled = false;
|
||||||
this.rfidPortNrTextBox.Location = new System.Drawing.Point(329, 21);
|
this.rfidPortNrTextBox.Location = new System.Drawing.Point(439, 26);
|
||||||
|
this.rfidPortNrTextBox.Margin = new System.Windows.Forms.Padding(4);
|
||||||
this.rfidPortNrTextBox.Name = "rfidPortNrTextBox";
|
this.rfidPortNrTextBox.Name = "rfidPortNrTextBox";
|
||||||
this.rfidPortNrTextBox.Size = new System.Drawing.Size(34, 20);
|
this.rfidPortNrTextBox.Size = new System.Drawing.Size(44, 22);
|
||||||
this.rfidPortNrTextBox.TabIndex = 7;
|
this.rfidPortNrTextBox.TabIndex = 7;
|
||||||
//
|
//
|
||||||
// rfidSerialPortNrLabel
|
// rfidSerialPortNrLabel
|
||||||
//
|
//
|
||||||
this.rfidSerialPortNrLabel.AutoSize = true;
|
this.rfidSerialPortNrLabel.AutoSize = true;
|
||||||
this.rfidSerialPortNrLabel.Location = new System.Drawing.Point(241, 24);
|
this.rfidSerialPortNrLabel.Location = new System.Drawing.Point(321, 30);
|
||||||
|
this.rfidSerialPortNrLabel.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||||
this.rfidSerialPortNrLabel.Name = "rfidSerialPortNrLabel";
|
this.rfidSerialPortNrLabel.Name = "rfidSerialPortNrLabel";
|
||||||
this.rfidSerialPortNrLabel.Size = new System.Drawing.Size(72, 13);
|
this.rfidSerialPortNrLabel.Size = new System.Drawing.Size(88, 16);
|
||||||
this.rfidSerialPortNrLabel.TabIndex = 6;
|
this.rfidSerialPortNrLabel.TabIndex = 6;
|
||||||
this.rfidSerialPortNrLabel.Text = "Serial port nr.:";
|
this.rfidSerialPortNrLabel.Text = "Serial port nr.:";
|
||||||
//
|
//
|
||||||
// radioButton1
|
|
||||||
//
|
|
||||||
this.radioButton1.AutoSize = true;
|
|
||||||
this.radioButton1.Enabled = false;
|
|
||||||
this.radioButton1.Location = new System.Drawing.Point(22, 19);
|
|
||||||
this.radioButton1.Name = "radioButton1";
|
|
||||||
this.radioButton1.Size = new System.Drawing.Size(83, 17);
|
|
||||||
this.radioButton1.TabIndex = 0;
|
|
||||||
this.radioButton1.TabStop = true;
|
|
||||||
this.radioButton1.Text = "Use TCP/IP";
|
|
||||||
this.radioButton1.UseVisualStyleBackColor = true;
|
|
||||||
//
|
|
||||||
// radioButton2
|
|
||||||
//
|
|
||||||
this.radioButton2.AutoSize = true;
|
|
||||||
this.radioButton2.Enabled = false;
|
|
||||||
this.radioButton2.Location = new System.Drawing.Point(234, 19);
|
|
||||||
this.radioButton2.Name = "radioButton2";
|
|
||||||
this.radioButton2.Size = new System.Drawing.Size(92, 17);
|
|
||||||
this.radioButton2.TabIndex = 1;
|
|
||||||
this.radioButton2.TabStop = true;
|
|
||||||
this.radioButton2.Text = "Use serial port";
|
|
||||||
this.radioButton2.UseVisualStyleBackColor = true;
|
|
||||||
//
|
|
||||||
// optoDataGroupBox
|
// optoDataGroupBox
|
||||||
//
|
//
|
||||||
this.optoDataGroupBox.Controls.Add(this.tcpipPortLabel);
|
this.optoDataGroupBox.Controls.Add(this.tcpipPortLabel);
|
||||||
@@ -184,125 +180,222 @@ namespace TBF.Rig.TestMethods.iPerlCommunication.iPerlHead
|
|||||||
this.optoDataGroupBox.Controls.Add(this.radioButton2);
|
this.optoDataGroupBox.Controls.Add(this.radioButton2);
|
||||||
this.optoDataGroupBox.Controls.Add(this.optoSerialPortLabel);
|
this.optoDataGroupBox.Controls.Add(this.optoSerialPortLabel);
|
||||||
this.optoDataGroupBox.Controls.Add(this.optoSerialPortTextBox);
|
this.optoDataGroupBox.Controls.Add(this.optoSerialPortTextBox);
|
||||||
this.optoDataGroupBox.Location = new System.Drawing.Point(28, 114);
|
this.optoDataGroupBox.Location = new System.Drawing.Point(10, 131);
|
||||||
|
this.optoDataGroupBox.Margin = new System.Windows.Forms.Padding(4);
|
||||||
this.optoDataGroupBox.Name = "optoDataGroupBox";
|
this.optoDataGroupBox.Name = "optoDataGroupBox";
|
||||||
this.optoDataGroupBox.Size = new System.Drawing.Size(414, 97);
|
this.optoDataGroupBox.Padding = new System.Windows.Forms.Padding(4);
|
||||||
this.optoDataGroupBox.TabIndex = 5;
|
this.optoDataGroupBox.Size = new System.Drawing.Size(552, 119);
|
||||||
|
this.optoDataGroupBox.TabIndex = 18;
|
||||||
this.optoDataGroupBox.TabStop = false;
|
this.optoDataGroupBox.TabStop = false;
|
||||||
this.optoDataGroupBox.Text = "Opto-data";
|
this.optoDataGroupBox.Text = "Opto-data";
|
||||||
//
|
//
|
||||||
// tcpipPortLabel
|
// tcpipPortLabel
|
||||||
//
|
//
|
||||||
this.tcpipPortLabel.AutoSize = true;
|
this.tcpipPortLabel.AutoSize = true;
|
||||||
this.tcpipPortLabel.Location = new System.Drawing.Point(31, 71);
|
this.tcpipPortLabel.Location = new System.Drawing.Point(41, 87);
|
||||||
|
this.tcpipPortLabel.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||||
this.tcpipPortLabel.Name = "tcpipPortLabel";
|
this.tcpipPortLabel.Name = "tcpipPortLabel";
|
||||||
this.tcpipPortLabel.Size = new System.Drawing.Size(47, 13);
|
this.tcpipPortLabel.Size = new System.Drawing.Size(54, 16);
|
||||||
this.tcpipPortLabel.TabIndex = 4;
|
this.tcpipPortLabel.TabIndex = 4;
|
||||||
this.tcpipPortLabel.Text = "Port nr..:";
|
this.tcpipPortLabel.Text = "Port nr..:";
|
||||||
//
|
//
|
||||||
// tcpipPortTextBox
|
// tcpipPortTextBox
|
||||||
//
|
//
|
||||||
this.tcpipPortTextBox.Enabled = false;
|
this.tcpipPortTextBox.Enabled = false;
|
||||||
this.tcpipPortTextBox.Location = new System.Drawing.Point(107, 68);
|
this.tcpipPortTextBox.Location = new System.Drawing.Point(143, 84);
|
||||||
|
this.tcpipPortTextBox.Margin = new System.Windows.Forms.Padding(4);
|
||||||
this.tcpipPortTextBox.Name = "tcpipPortTextBox";
|
this.tcpipPortTextBox.Name = "tcpipPortTextBox";
|
||||||
this.tcpipPortTextBox.Size = new System.Drawing.Size(39, 20);
|
this.tcpipPortTextBox.Size = new System.Drawing.Size(51, 22);
|
||||||
this.tcpipPortTextBox.TabIndex = 5;
|
this.tcpipPortTextBox.TabIndex = 5;
|
||||||
//
|
//
|
||||||
// ipAddressLabel
|
// ipAddressLabel
|
||||||
//
|
//
|
||||||
this.ipAddressLabel.AutoSize = true;
|
this.ipAddressLabel.AutoSize = true;
|
||||||
this.ipAddressLabel.Location = new System.Drawing.Point(31, 48);
|
this.ipAddressLabel.Location = new System.Drawing.Point(41, 59);
|
||||||
|
this.ipAddressLabel.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||||
this.ipAddressLabel.Name = "ipAddressLabel";
|
this.ipAddressLabel.Name = "ipAddressLabel";
|
||||||
this.ipAddressLabel.Size = new System.Drawing.Size(63, 13);
|
this.ipAddressLabel.Size = new System.Drawing.Size(78, 16);
|
||||||
this.ipAddressLabel.TabIndex = 2;
|
this.ipAddressLabel.TabIndex = 2;
|
||||||
this.ipAddressLabel.Text = "IP address.:";
|
this.ipAddressLabel.Text = "IP address.:";
|
||||||
//
|
//
|
||||||
// ipAddressTextBox
|
// ipAddressTextBox
|
||||||
//
|
//
|
||||||
this.ipAddressTextBox.Enabled = false;
|
this.ipAddressTextBox.Enabled = false;
|
||||||
this.ipAddressTextBox.Location = new System.Drawing.Point(107, 45);
|
this.ipAddressTextBox.Location = new System.Drawing.Point(143, 55);
|
||||||
|
this.ipAddressTextBox.Margin = new System.Windows.Forms.Padding(4);
|
||||||
this.ipAddressTextBox.Name = "ipAddressTextBox";
|
this.ipAddressTextBox.Name = "ipAddressTextBox";
|
||||||
this.ipAddressTextBox.Size = new System.Drawing.Size(98, 20);
|
this.ipAddressTextBox.Size = new System.Drawing.Size(129, 22);
|
||||||
this.ipAddressTextBox.TabIndex = 3;
|
this.ipAddressTextBox.TabIndex = 3;
|
||||||
//
|
//
|
||||||
// groupBox1
|
// radioButton1
|
||||||
//
|
//
|
||||||
this.groupBox1.Controls.Add(this.rfidPortNrTextBox);
|
this.radioButton1.AutoSize = true;
|
||||||
this.groupBox1.Controls.Add(this.rfidSerialPortNrLabel);
|
this.radioButton1.Checked = true;
|
||||||
this.groupBox1.Location = new System.Drawing.Point(28, 218);
|
this.radioButton1.Enabled = false;
|
||||||
this.groupBox1.Name = "groupBox1";
|
this.radioButton1.Location = new System.Drawing.Point(29, 23);
|
||||||
this.groupBox1.Size = new System.Drawing.Size(414, 55);
|
this.radioButton1.Margin = new System.Windows.Forms.Padding(4);
|
||||||
this.groupBox1.TabIndex = 12;
|
this.radioButton1.Name = "radioButton1";
|
||||||
this.groupBox1.TabStop = false;
|
this.radioButton1.Size = new System.Drawing.Size(99, 20);
|
||||||
this.groupBox1.Text = "RFID communication (in case mux. board is not used)";
|
this.radioButton1.TabIndex = 0;
|
||||||
|
this.radioButton1.TabStop = true;
|
||||||
|
this.radioButton1.Text = "Use TCP/IP";
|
||||||
|
this.radioButton1.UseVisualStyleBackColor = true;
|
||||||
//
|
//
|
||||||
// label3
|
// radioButton2
|
||||||
//
|
//
|
||||||
this.label3.AutoSize = true;
|
this.radioButton2.AutoSize = true;
|
||||||
this.label3.Location = new System.Drawing.Point(176, 66);
|
this.radioButton2.Enabled = false;
|
||||||
this.label3.Name = "label3";
|
this.radioButton2.Location = new System.Drawing.Point(312, 23);
|
||||||
this.label3.Size = new System.Drawing.Size(31, 13);
|
this.radioButton2.Margin = new System.Windows.Forms.Padding(4);
|
||||||
this.label3.TabIndex = 13;
|
this.radioButton2.Name = "radioButton2";
|
||||||
this.label3.Text = "1 .. 4";
|
this.radioButton2.Size = new System.Drawing.Size(115, 20);
|
||||||
|
this.radioButton2.TabIndex = 1;
|
||||||
|
this.radioButton2.Text = "Use serial port";
|
||||||
|
this.radioButton2.UseVisualStyleBackColor = true;
|
||||||
//
|
//
|
||||||
// label4
|
// optoSerialPortLabel
|
||||||
//
|
//
|
||||||
this.label4.AutoSize = true;
|
this.optoSerialPortLabel.AutoSize = true;
|
||||||
this.label4.Location = new System.Drawing.Point(176, 89);
|
this.optoSerialPortLabel.Location = new System.Drawing.Point(321, 55);
|
||||||
this.label4.Name = "label4";
|
this.optoSerialPortLabel.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||||
this.label4.Size = new System.Drawing.Size(37, 13);
|
this.optoSerialPortLabel.Name = "optoSerialPortLabel";
|
||||||
this.label4.TabIndex = 14;
|
this.optoSerialPortLabel.Size = new System.Drawing.Size(88, 16);
|
||||||
this.label4.Text = "1 .. 10";
|
this.optoSerialPortLabel.TabIndex = 6;
|
||||||
|
this.optoSerialPortLabel.Text = "Serial port nr.:";
|
||||||
//
|
//
|
||||||
// WaterMeterCfgCtrl
|
// optoSerialPortTextBox
|
||||||
//
|
//
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
this.optoSerialPortTextBox.Enabled = false;
|
||||||
|
this.optoSerialPortTextBox.Location = new System.Drawing.Point(439, 52);
|
||||||
|
this.optoSerialPortTextBox.Margin = new System.Windows.Forms.Padding(4);
|
||||||
|
this.optoSerialPortTextBox.Name = "optoSerialPortTextBox";
|
||||||
|
this.optoSerialPortTextBox.Size = new System.Drawing.Size(44, 22);
|
||||||
|
this.optoSerialPortTextBox.TabIndex = 7;
|
||||||
|
//
|
||||||
|
// groupTextBox
|
||||||
|
//
|
||||||
|
this.groupTextBox.Enabled = false;
|
||||||
|
this.groupTextBox.Location = new System.Drawing.Point(153, 97);
|
||||||
|
this.groupTextBox.Margin = new System.Windows.Forms.Padding(4);
|
||||||
|
this.groupTextBox.Name = "groupTextBox";
|
||||||
|
this.groupTextBox.Size = new System.Drawing.Size(44, 22);
|
||||||
|
this.groupTextBox.TabIndex = 22;
|
||||||
|
//
|
||||||
|
// groupLabel
|
||||||
|
//
|
||||||
|
this.groupLabel.AutoSize = true;
|
||||||
|
this.groupLabel.Location = new System.Drawing.Point(6, 101);
|
||||||
|
this.groupLabel.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||||
|
this.groupLabel.Name = "groupLabel";
|
||||||
|
this.groupLabel.Size = new System.Drawing.Size(54, 16);
|
||||||
|
this.groupLabel.TabIndex = 21;
|
||||||
|
this.groupLabel.Text = "Group 2";
|
||||||
|
//
|
||||||
|
// muxBoardNrTextBox
|
||||||
|
//
|
||||||
|
this.muxBoardNrTextBox.Enabled = false;
|
||||||
|
this.muxBoardNrTextBox.Location = new System.Drawing.Point(153, 69);
|
||||||
|
this.muxBoardNrTextBox.Margin = new System.Windows.Forms.Padding(4);
|
||||||
|
this.muxBoardNrTextBox.Name = "muxBoardNrTextBox";
|
||||||
|
this.muxBoardNrTextBox.Size = new System.Drawing.Size(44, 22);
|
||||||
|
this.muxBoardNrTextBox.TabIndex = 20;
|
||||||
|
//
|
||||||
|
// muxBoardNrLabel
|
||||||
|
//
|
||||||
|
this.muxBoardNrLabel.AutoSize = true;
|
||||||
|
this.muxBoardNrLabel.Location = new System.Drawing.Point(6, 72);
|
||||||
|
this.muxBoardNrLabel.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||||
|
this.muxBoardNrLabel.Name = "muxBoardNrLabel";
|
||||||
|
this.muxBoardNrLabel.Size = new System.Drawing.Size(131, 16);
|
||||||
|
this.muxBoardNrLabel.TabIndex = 19;
|
||||||
|
this.muxBoardNrLabel.Text = "Group 1 (mux. board)";
|
||||||
|
//
|
||||||
|
// nameTextBox
|
||||||
|
//
|
||||||
|
this.nameTextBox.Enabled = false;
|
||||||
|
this.nameTextBox.Location = new System.Drawing.Point(153, 40);
|
||||||
|
this.nameTextBox.Margin = new System.Windows.Forms.Padding(4);
|
||||||
|
this.nameTextBox.Name = "nameTextBox";
|
||||||
|
this.nameTextBox.Size = new System.Drawing.Size(160, 22);
|
||||||
|
this.nameTextBox.TabIndex = 17;
|
||||||
|
//
|
||||||
|
// nameLabel
|
||||||
|
//
|
||||||
|
this.nameLabel.AutoSize = true;
|
||||||
|
this.nameLabel.Location = new System.Drawing.Point(6, 44);
|
||||||
|
this.nameLabel.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||||
|
this.nameLabel.Name = "nameLabel";
|
||||||
|
this.nameLabel.Size = new System.Drawing.Size(44, 16);
|
||||||
|
this.nameLabel.TabIndex = 16;
|
||||||
|
this.nameLabel.Text = "Name";
|
||||||
|
//
|
||||||
|
// classNameLabel
|
||||||
|
//
|
||||||
|
this.classNameLabel.AutoSize = true;
|
||||||
|
this.classNameLabel.Location = new System.Drawing.Point(149, 11);
|
||||||
|
this.classNameLabel.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||||
|
this.classNameLabel.Name = "classNameLabel";
|
||||||
|
this.classNameLabel.Size = new System.Drawing.Size(78, 16);
|
||||||
|
this.classNameLabel.TabIndex = 15;
|
||||||
|
this.classNameLabel.Text = "ClassName";
|
||||||
|
//
|
||||||
|
// tabPage2
|
||||||
|
//
|
||||||
|
this.tabPage2.Location = new System.Drawing.Point(4, 25);
|
||||||
|
this.tabPage2.Name = "tabPage2";
|
||||||
|
this.tabPage2.Padding = new System.Windows.Forms.Padding(3);
|
||||||
|
this.tabPage2.Size = new System.Drawing.Size(603, 403);
|
||||||
|
this.tabPage2.TabIndex = 1;
|
||||||
|
this.tabPage2.Text = "Test";
|
||||||
|
this.tabPage2.UseVisualStyleBackColor = true;
|
||||||
|
//
|
||||||
|
// IperlHeadCfgCtrl
|
||||||
|
//
|
||||||
|
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
this.Controls.Add(this.label4);
|
this.Controls.Add(this.tabControl1);
|
||||||
this.Controls.Add(this.label3);
|
this.Margin = new System.Windows.Forms.Padding(4);
|
||||||
this.Controls.Add(this.groupBox1);
|
this.Name = "IperlHeadCfgCtrl";
|
||||||
this.Controls.Add(this.optoDataGroupBox);
|
this.Size = new System.Drawing.Size(617, 438);
|
||||||
this.Controls.Add(this.groupTextBox);
|
|
||||||
this.Controls.Add(this.groupLabel);
|
|
||||||
this.Controls.Add(this.muxBoardNrTextBox);
|
|
||||||
this.Controls.Add(this.muxBoardNrLabel);
|
|
||||||
this.Controls.Add(this.nameTextBox);
|
|
||||||
this.Controls.Add(this.nameLabel);
|
|
||||||
this.Controls.Add(this.classNameLabel);
|
|
||||||
this.Name = "WaterMeterCfgCtrl";
|
|
||||||
this.Size = new System.Drawing.Size(500, 300);
|
|
||||||
this.Load += new System.EventHandler(this.WaterMeterCfgCtrl_Load);
|
this.Load += new System.EventHandler(this.WaterMeterCfgCtrl_Load);
|
||||||
this.optoDataGroupBox.ResumeLayout(false);
|
this.tabControl1.ResumeLayout(false);
|
||||||
this.optoDataGroupBox.PerformLayout();
|
this.tabPage1.ResumeLayout(false);
|
||||||
|
this.tabPage1.PerformLayout();
|
||||||
this.groupBox1.ResumeLayout(false);
|
this.groupBox1.ResumeLayout(false);
|
||||||
this.groupBox1.PerformLayout();
|
this.groupBox1.PerformLayout();
|
||||||
|
this.optoDataGroupBox.ResumeLayout(false);
|
||||||
|
this.optoDataGroupBox.PerformLayout();
|
||||||
this.ResumeLayout(false);
|
this.ResumeLayout(false);
|
||||||
this.PerformLayout();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
private System.Windows.Forms.TextBox nameTextBox;
|
private System.Windows.Forms.TabControl tabControl1;
|
||||||
private System.Windows.Forms.Label nameLabel;
|
private System.Windows.Forms.TabPage tabPage1;
|
||||||
private System.Windows.Forms.Label classNameLabel;
|
private System.Windows.Forms.Label label4;
|
||||||
private System.Windows.Forms.TextBox optoSerialPortTextBox;
|
private System.Windows.Forms.Label label3;
|
||||||
private System.Windows.Forms.Label optoSerialPortLabel;
|
private System.Windows.Forms.GroupBox groupBox1;
|
||||||
private System.Windows.Forms.TextBox muxBoardNrTextBox;
|
private System.Windows.Forms.ComboBox comboBoxCommunicationInterface;
|
||||||
private System.Windows.Forms.Label muxBoardNrLabel;
|
private System.Windows.Forms.Label label1;
|
||||||
private System.Windows.Forms.TextBox groupTextBox;
|
|
||||||
private System.Windows.Forms.Label groupLabel;
|
|
||||||
private System.Windows.Forms.TextBox rfidPortNrTextBox;
|
private System.Windows.Forms.TextBox rfidPortNrTextBox;
|
||||||
private System.Windows.Forms.Label rfidSerialPortNrLabel;
|
private System.Windows.Forms.Label rfidSerialPortNrLabel;
|
||||||
private System.Windows.Forms.RadioButton radioButton1;
|
|
||||||
private System.Windows.Forms.RadioButton radioButton2;
|
|
||||||
private System.Windows.Forms.GroupBox optoDataGroupBox;
|
private System.Windows.Forms.GroupBox optoDataGroupBox;
|
||||||
private System.Windows.Forms.Label tcpipPortLabel;
|
private System.Windows.Forms.Label tcpipPortLabel;
|
||||||
private System.Windows.Forms.TextBox tcpipPortTextBox;
|
private System.Windows.Forms.TextBox tcpipPortTextBox;
|
||||||
private System.Windows.Forms.Label ipAddressLabel;
|
private System.Windows.Forms.Label ipAddressLabel;
|
||||||
private System.Windows.Forms.TextBox ipAddressTextBox;
|
private System.Windows.Forms.TextBox ipAddressTextBox;
|
||||||
private System.Windows.Forms.GroupBox groupBox1;
|
private System.Windows.Forms.RadioButton radioButton1;
|
||||||
private System.Windows.Forms.Label label3;
|
private System.Windows.Forms.RadioButton radioButton2;
|
||||||
private System.Windows.Forms.Label label4;
|
private System.Windows.Forms.Label optoSerialPortLabel;
|
||||||
}
|
private System.Windows.Forms.TextBox optoSerialPortTextBox;
|
||||||
|
private System.Windows.Forms.TextBox groupTextBox;
|
||||||
|
private System.Windows.Forms.Label groupLabel;
|
||||||
|
private System.Windows.Forms.TextBox muxBoardNrTextBox;
|
||||||
|
private System.Windows.Forms.Label muxBoardNrLabel;
|
||||||
|
private System.Windows.Forms.TextBox nameTextBox;
|
||||||
|
private System.Windows.Forms.Label nameLabel;
|
||||||
|
private System.Windows.Forms.Label classNameLabel;
|
||||||
|
private System.Windows.Forms.TabPage tabPage2;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+137
@@ -0,0 +1,137 @@
|
|||||||
|
namespace TBF.Rig.TestMethods.iPerlCommunication.iPerlHead
|
||||||
|
{
|
||||||
|
partial class IperlHeadTestCtrl
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Required designer variable.
|
||||||
|
/// </summary>
|
||||||
|
private System.ComponentModel.IContainer components = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clean up any resources being used.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||||
|
protected override void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (disposing && (components != null))
|
||||||
|
{
|
||||||
|
components.Dispose();
|
||||||
|
}
|
||||||
|
base.Dispose(disposing);
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Component Designer generated code
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Required method for Designer support - do not modify
|
||||||
|
/// the contents of this method with the code editor.
|
||||||
|
/// </summary>
|
||||||
|
private void InitializeComponent()
|
||||||
|
{
|
||||||
|
this.optoTestGroupBox = new System.Windows.Forms.GroupBox();
|
||||||
|
this.optoListBox = new System.Windows.Forms.ListBox();
|
||||||
|
this.rfidOutputListBox = new System.Windows.Forms.ListBox();
|
||||||
|
this.RfidTestGroupBox = new System.Windows.Forms.GroupBox();
|
||||||
|
this.label2 = new System.Windows.Forms.Label();
|
||||||
|
this.rfidCommandComboBox = new System.Windows.Forms.ComboBox();
|
||||||
|
this.commandTestButton = new System.Windows.Forms.Button();
|
||||||
|
this.optoTestGroupBox.SuspendLayout();
|
||||||
|
this.RfidTestGroupBox.SuspendLayout();
|
||||||
|
this.SuspendLayout();
|
||||||
|
//
|
||||||
|
// optoTestGroupBox
|
||||||
|
//
|
||||||
|
this.optoTestGroupBox.Controls.Add(this.optoListBox);
|
||||||
|
this.optoTestGroupBox.Location = new System.Drawing.Point(5, 4);
|
||||||
|
this.optoTestGroupBox.Name = "optoTestGroupBox";
|
||||||
|
this.optoTestGroupBox.Size = new System.Drawing.Size(591, 161);
|
||||||
|
this.optoTestGroupBox.TabIndex = 2;
|
||||||
|
this.optoTestGroupBox.TabStop = false;
|
||||||
|
this.optoTestGroupBox.Text = "Opto-data";
|
||||||
|
//
|
||||||
|
// optoListBox
|
||||||
|
//
|
||||||
|
this.optoListBox.FormattingEnabled = true;
|
||||||
|
this.optoListBox.ItemHeight = 16;
|
||||||
|
this.optoListBox.Location = new System.Drawing.Point(7, 22);
|
||||||
|
this.optoListBox.Name = "optoListBox";
|
||||||
|
this.optoListBox.Size = new System.Drawing.Size(573, 132);
|
||||||
|
this.optoListBox.TabIndex = 0;
|
||||||
|
//
|
||||||
|
// rfidOutputListBox
|
||||||
|
//
|
||||||
|
this.rfidOutputListBox.FormattingEnabled = true;
|
||||||
|
this.rfidOutputListBox.ItemHeight = 16;
|
||||||
|
this.rfidOutputListBox.Location = new System.Drawing.Point(5, 54);
|
||||||
|
this.rfidOutputListBox.Name = "rfidOutputListBox";
|
||||||
|
this.rfidOutputListBox.SelectionMode = System.Windows.Forms.SelectionMode.None;
|
||||||
|
this.rfidOutputListBox.Size = new System.Drawing.Size(575, 164);
|
||||||
|
this.rfidOutputListBox.TabIndex = 3;
|
||||||
|
//
|
||||||
|
// RfidTestGroupBox
|
||||||
|
//
|
||||||
|
this.RfidTestGroupBox.Controls.Add(this.rfidOutputListBox);
|
||||||
|
this.RfidTestGroupBox.Controls.Add(this.label2);
|
||||||
|
this.RfidTestGroupBox.Controls.Add(this.rfidCommandComboBox);
|
||||||
|
this.RfidTestGroupBox.Controls.Add(this.commandTestButton);
|
||||||
|
this.RfidTestGroupBox.Location = new System.Drawing.Point(5, 171);
|
||||||
|
this.RfidTestGroupBox.Name = "RfidTestGroupBox";
|
||||||
|
this.RfidTestGroupBox.Size = new System.Drawing.Size(591, 224);
|
||||||
|
this.RfidTestGroupBox.TabIndex = 3;
|
||||||
|
this.RfidTestGroupBox.TabStop = false;
|
||||||
|
this.RfidTestGroupBox.Text = "RFID / NFC data";
|
||||||
|
//
|
||||||
|
// label2
|
||||||
|
//
|
||||||
|
this.label2.AutoSize = true;
|
||||||
|
this.label2.Location = new System.Drawing.Point(2, 25);
|
||||||
|
this.label2.Name = "label2";
|
||||||
|
this.label2.Size = new System.Drawing.Size(69, 16);
|
||||||
|
this.label2.TabIndex = 2;
|
||||||
|
this.label2.Text = "Command";
|
||||||
|
//
|
||||||
|
// rfidCommandComboBox
|
||||||
|
//
|
||||||
|
this.rfidCommandComboBox.FormattingEnabled = true;
|
||||||
|
this.rfidCommandComboBox.Location = new System.Drawing.Point(86, 19);
|
||||||
|
this.rfidCommandComboBox.Name = "rfidCommandComboBox";
|
||||||
|
this.rfidCommandComboBox.Size = new System.Drawing.Size(341, 24);
|
||||||
|
this.rfidCommandComboBox.TabIndex = 1;
|
||||||
|
//
|
||||||
|
// commandTestButton
|
||||||
|
//
|
||||||
|
this.commandTestButton.Location = new System.Drawing.Point(449, 19);
|
||||||
|
this.commandTestButton.Name = "commandTestButton";
|
||||||
|
this.commandTestButton.Size = new System.Drawing.Size(126, 24);
|
||||||
|
this.commandTestButton.TabIndex = 0;
|
||||||
|
this.commandTestButton.Text = "Send command";
|
||||||
|
this.commandTestButton.UseVisualStyleBackColor = true;
|
||||||
|
this.commandTestButton.MouseClick += new System.Windows.Forms.MouseEventHandler(this.CommandTestButtonClick);
|
||||||
|
//
|
||||||
|
// IperlHeadTestCtrl
|
||||||
|
//
|
||||||
|
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
|
||||||
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
|
this.Controls.Add(this.optoTestGroupBox);
|
||||||
|
this.Controls.Add(this.RfidTestGroupBox);
|
||||||
|
this.Name = "IperlHeadTestCtrl";
|
||||||
|
this.Size = new System.Drawing.Size(611, 432);
|
||||||
|
this.Load += new System.EventHandler(this.UserControl_Load);
|
||||||
|
this.optoTestGroupBox.ResumeLayout(false);
|
||||||
|
this.RfidTestGroupBox.ResumeLayout(false);
|
||||||
|
this.RfidTestGroupBox.PerformLayout();
|
||||||
|
this.ResumeLayout(false);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private System.Windows.Forms.GroupBox optoTestGroupBox;
|
||||||
|
private System.Windows.Forms.ListBox rfidOutputListBox;
|
||||||
|
private System.Windows.Forms.GroupBox RfidTestGroupBox;
|
||||||
|
private System.Windows.Forms.Label label2;
|
||||||
|
private System.Windows.Forms.ComboBox rfidCommandComboBox;
|
||||||
|
private System.Windows.Forms.Button commandTestButton;
|
||||||
|
private System.Windows.Forms.ListBox optoListBox;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,155 @@
|
|||||||
|
using Common;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.Data;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.IO.Ports;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Web.UI.WebControls;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
using TBF.Rig.DataEntry.S620.CheckItems;
|
||||||
|
using TBF.Rig.Generic;
|
||||||
|
using TBF.Rig.Sequences;
|
||||||
|
|
||||||
|
namespace TBF.Rig.TestMethods.iPerlCommunication.iPerlHead
|
||||||
|
{
|
||||||
|
public partial class IperlHeadTestCtrl : UserControl
|
||||||
|
{
|
||||||
|
IperlHeadCfg config;
|
||||||
|
IperlHead iPerlHead;
|
||||||
|
Thread optoThread;
|
||||||
|
|
||||||
|
private bool stopWorkerThread;
|
||||||
|
public event EventHandler<OptoReceivedEventArgs> OptoReceivedHandler;
|
||||||
|
|
||||||
|
public IperlHeadTestCtrl(IperlHeadCfg config)
|
||||||
|
{
|
||||||
|
this.config = config;
|
||||||
|
InitializeComponent();
|
||||||
|
if (config == null) return;
|
||||||
|
|
||||||
|
iPerlCommunicationForm.cfg = new TestMethodCfg(null); // default values for iPerlCommunication
|
||||||
|
|
||||||
|
foreach(var head in ProcessData.IperlHeads)
|
||||||
|
{
|
||||||
|
if (head != null && head.Name == config.Name) { iPerlHead = head; }
|
||||||
|
}
|
||||||
|
|
||||||
|
rfidCommandComboBox.DisplayMember = "Name";
|
||||||
|
rfidCommandComboBox.ValueMember = "Value";
|
||||||
|
var items = new[]
|
||||||
|
{
|
||||||
|
new {Name = "Read PCB", Value = "ReadPCB" },
|
||||||
|
new {Name = "Set Test Mode", Value = "SetTestMode" },
|
||||||
|
new {Name = "Set Active Mode", Value = "SetActiveMode" }
|
||||||
|
};
|
||||||
|
/*
|
||||||
|
// CTRL+ALT+double click - hidden poweruser menu
|
||||||
|
if (((Keyboard.ModifierKeys & Keys.Control) == Keys.Control) && ((Keyboard.ModifierKeys & Keys.Alt) == Keys.Alt) && Users.CurrentUser.AuthorizedAs == AuthorizedAs.PowerUser)
|
||||||
|
{
|
||||||
|
Array.Resize(ref items, items.Length + 1);
|
||||||
|
items[items.Length - 1] = new { Name = "Kluc", Value = "Kluc" };
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
rfidCommandComboBox.DataSource = items;
|
||||||
|
|
||||||
|
stopWorkerThread = false;
|
||||||
|
|
||||||
|
OptoReceivedHandler += (EventHandler<OptoReceivedEventArgs>)((sndr, args) =>
|
||||||
|
{
|
||||||
|
if (this.InvokeRequired)
|
||||||
|
this.Invoke((Delegate)new EventHandler<OptoReceivedEventArgs>(this.OnOptoReceived2), sndr, (object)args);
|
||||||
|
else
|
||||||
|
this.OnOptoReceived2(sndr, args);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnOptoReceived2(object sender, OptoReceivedEventArgs args)
|
||||||
|
{
|
||||||
|
optoListBox.Items.Insert(0,args.Data);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CommandTestButtonClick(object sender, MouseEventArgs e)
|
||||||
|
{
|
||||||
|
rfidOutputListBox.Items.Clear();
|
||||||
|
|
||||||
|
using (Tools.LogChecker logChecker = new Tools.LogChecker("RfidData", log4net.Core.Level.Debug))
|
||||||
|
{
|
||||||
|
ListItem rfidListItem = new ListItem();
|
||||||
|
rfidListItem.Attributes.Add("style", "font-weight:bold");
|
||||||
|
switch (rfidCommandComboBox.SelectedValue)
|
||||||
|
{
|
||||||
|
case "ReadPCB":
|
||||||
|
rfidListItem.Text = $"PCB: {OpticalHeadTest.ReadRequest_PCB(iPerlHead)}";
|
||||||
|
break;
|
||||||
|
case "SetTestMode":
|
||||||
|
rfidListItem.Text = OpticalHeadTest.SetTestMode(iPerlHead);
|
||||||
|
optoListBox.Items.Clear();
|
||||||
|
stopWorkerThread = false;
|
||||||
|
optoThread = new Thread(OptoWorker);
|
||||||
|
if (!optoThread.IsAlive)
|
||||||
|
{
|
||||||
|
optoThread.Start();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "SetActiveMode":
|
||||||
|
rfidListItem.Text = OpticalHeadTest.SetActiveMode(iPerlHead);
|
||||||
|
stopWorkerThread = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
rfidOutputListBox.Items.Add(rfidListItem);
|
||||||
|
rfidOutputListBox.Items.AddRange(logChecker.Messages.ToArray());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OptoWorker()
|
||||||
|
{
|
||||||
|
while (!this.stopWorkerThread)
|
||||||
|
{
|
||||||
|
Thread.Sleep(250);
|
||||||
|
if (this.stopWorkerThread)
|
||||||
|
break;
|
||||||
|
|
||||||
|
string buffer = iPerlHead.ReadOptoData();
|
||||||
|
if (string.IsNullOrEmpty(buffer))
|
||||||
|
{
|
||||||
|
this.OnOptoReceived((object)this, new OptoReceivedEventArgs("."));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
OnOptoReceived((object)this, new OptoReceivedEventArgs(buffer));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnOptoReceived(object sender, OptoReceivedEventArgs args)
|
||||||
|
{
|
||||||
|
if (this.OptoReceivedHandler == null)
|
||||||
|
return;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
this.OptoReceivedHandler(sender, args);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void UserControl_Load(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
this.ParentForm.FormClosing += new FormClosingEventHandler(ParentForm_FormClosing);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ParentForm_FormClosing(object sender, FormClosingEventArgs e)
|
||||||
|
{
|
||||||
|
//OnHandleDestroyed(new EventArgs());
|
||||||
|
stopWorkerThread = true;
|
||||||
|
if (optoThread != null)
|
||||||
|
{
|
||||||
|
optoThread.Abort();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,120 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
</root>
|
||||||
@@ -0,0 +1,293 @@
|
|||||||
|
using log4net;
|
||||||
|
using Sensus.iPerl.NfcHandler;
|
||||||
|
using System;
|
||||||
|
using System.Globalization;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading;
|
||||||
|
using static Sensus.iPerl.NfcHandler.MCI_Protocol;
|
||||||
|
|
||||||
|
namespace TBF.Rig.TestMethods.iPerlCommunication.iPerlHead
|
||||||
|
{
|
||||||
|
internal class NfcServices
|
||||||
|
{
|
||||||
|
protected static readonly ILog rfidDataLogger = LogManager.GetLogger("RfidData");
|
||||||
|
internal static int ReadRequest(TestMethodCfg cfg, IperlHead iperlHead, MCI_Protocol.StructName structName, int offset, int length, out byte[] buffer)
|
||||||
|
{
|
||||||
|
NfcDataHandler _nfcDataHandler = new NfcDataHandler();
|
||||||
|
MessageEventHandlers(_nfcDataHandler);
|
||||||
|
CR95HF_MessageEventHandlers(_nfcDataHandler._CR95HF_Reader);
|
||||||
|
ST25DV_MessageEventHandlers(_nfcDataHandler._ST25DV_Device);
|
||||||
|
MCI_MessageEventHandlers(_nfcDataHandler._MCI_Protocol);
|
||||||
|
NFCHeadConfig_MessageEventHandlers(_nfcDataHandler._NFCHead_Config);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
rfidDataLogger.Info($"NFC COM{iperlHead.RfidComPortNr} ReadRequest : {structName}, {offset}, {length}");
|
||||||
|
OpenConnection(_nfcDataHandler, cfg, iperlHead);
|
||||||
|
|
||||||
|
buffer = MciRead(_nfcDataHandler, cfg, structName, (ushort)offset, length);
|
||||||
|
|
||||||
|
CloseComPort(_nfcDataHandler);
|
||||||
|
|
||||||
|
rfidDataLogger.Info($"NFC COM{iperlHead.RfidComPortNr} ReadRequest : {structName}, {offset}, {length} ; Response= {ByteArrayToHexString(buffer)} ; Error: {_nfcDataHandler.LastErrorMessage}");
|
||||||
|
|
||||||
|
return Convert.ToInt32(_nfcDataHandler.LastErrorCode); //return 0;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
rfidDataLogger.Error($"NFC COM{iperlHead.RfidComPortNr} ReadRequest Error: {ex.Message}");
|
||||||
|
buffer = new byte[length];
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal static int WriteRequest(TestMethodCfg cfg, IperlHead iperlHead, MCI_Protocol.StructName structName, int offset, int length, byte[] buffer)
|
||||||
|
{
|
||||||
|
NfcDataHandler _nfcDataHandler = new NfcDataHandler();
|
||||||
|
MessageEventHandlers(_nfcDataHandler);
|
||||||
|
CR95HF_MessageEventHandlers(_nfcDataHandler._CR95HF_Reader);
|
||||||
|
ST25DV_MessageEventHandlers(_nfcDataHandler._ST25DV_Device);
|
||||||
|
MCI_MessageEventHandlers(_nfcDataHandler._MCI_Protocol);
|
||||||
|
NFCHeadConfig_MessageEventHandlers(_nfcDataHandler._NFCHead_Config);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
rfidDataLogger.Info($"NFC COM{iperlHead.RfidComPortNr} WriteRequest : {structName}, {offset}, {length}, {ByteArrayToHexString(buffer)}");
|
||||||
|
OpenConnection(_nfcDataHandler, cfg, iperlHead);
|
||||||
|
|
||||||
|
MciWrite(_nfcDataHandler, cfg, structName, (ushort)offset, length, buffer);
|
||||||
|
|
||||||
|
CloseComPort(_nfcDataHandler);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
rfidDataLogger.Error($"NFC COM{iperlHead.RfidComPortNr} WriteRequest Error: {ex.Message}");
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void OpenConnection(NfcDataHandler nfcDataHandler, TestMethodCfg cfg, IperlHead iperlHead)
|
||||||
|
{
|
||||||
|
string comPort = $"COM{iperlHead.RfidComPortNr}";
|
||||||
|
int retryCount = 0 ;
|
||||||
|
Open:
|
||||||
|
nfcDataHandler.Close();
|
||||||
|
Thread.Sleep(100);
|
||||||
|
if (nfcDataHandler.OpenConnection(comPort, cfg.BaudRate, cfg.DataBits, cfg.ParityBit, cfg.StopBits))
|
||||||
|
{
|
||||||
|
rfidDataLogger.Info($"NFC COM{iperlHead.RfidComPortNr} Port Open");
|
||||||
|
|
||||||
|
if (nfcDataHandler.ConnectReader())
|
||||||
|
{
|
||||||
|
rfidDataLogger.Info($"NFC COM{iperlHead.RfidComPortNr} Reader connected");
|
||||||
|
if (!nfcDataHandler.ConnectDevice())
|
||||||
|
{
|
||||||
|
rfidDataLogger.Error($"NFC COM{iperlHead.RfidComPortNr} Error connect device.");
|
||||||
|
for (int i = 0; i < cfg.MaxCommRetries; i++)
|
||||||
|
{
|
||||||
|
if (nfcDataHandler.Echo()) break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
retryCount++;
|
||||||
|
rfidDataLogger.Error($"NFC COM{iperlHead.RfidComPortNr} Error connect reader. Reconnect comport {retryCount}");
|
||||||
|
if (retryCount < cfg.MaxCommRetries)
|
||||||
|
goto Open;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
rfidDataLogger.Error($"Open NFC COM{iperlHead.RfidComPortNr} Port Failed");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void CloseComPort(NfcDataHandler nfcDataHandler)
|
||||||
|
{
|
||||||
|
nfcDataHandler.Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static byte[] MciRead(NfcDataHandler nfcDataHandler, TestMethodCfg cfg, StructName structName, ushort offset, int length)
|
||||||
|
{
|
||||||
|
bool isReadValues = false;
|
||||||
|
int retryCount = 0;
|
||||||
|
Read:
|
||||||
|
try
|
||||||
|
{
|
||||||
|
isReadValues = false;
|
||||||
|
long num1 = (long)length;
|
||||||
|
int timeoutMs = 4000;
|
||||||
|
byte payloadlength = Convert.ToByte(num1.ToString("X2"), 16);
|
||||||
|
if (nfcDataHandler.MCI_Read(structName, offset, payloadlength, timeoutMs))
|
||||||
|
{
|
||||||
|
byte[] lastData = nfcDataHandler.LastData;
|
||||||
|
if ((long)lastData.Length >= num1)
|
||||||
|
{
|
||||||
|
rfidDataLogger.Info($"COM: MciRead ({structName},{offset},{length}) = {ByteArrayToHexString(lastData)}");
|
||||||
|
return lastData;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
rfidDataLogger.Info($"COM: MciRead ({structName},{offset},{length}) = {ByteArrayToHexString(lastData)}");
|
||||||
|
}
|
||||||
|
else if (nfcDataHandler.LastErrorCode == (byte)0)
|
||||||
|
{
|
||||||
|
rfidDataLogger.Info($"MCI Error: Unidentified");
|
||||||
|
retryCount++;
|
||||||
|
if (retryCount < cfg.MaxCommRetries)
|
||||||
|
goto Read;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rfidDataLogger.Info("Last error message: " + nfcDataHandler.LastErrorMessage);
|
||||||
|
retryCount++;
|
||||||
|
if (retryCount < cfg.MaxCommRetries)
|
||||||
|
goto Read;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
rfidDataLogger.Error("MciRead Last error message: " + ex.Message);
|
||||||
|
retryCount++;
|
||||||
|
if (retryCount < cfg.MaxCommRetries)
|
||||||
|
goto Read;
|
||||||
|
}
|
||||||
|
return new byte[length];
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void MciWrite(NfcDataHandler nfcDataHandler, TestMethodCfg cfg, MCI_Protocol.StructName structName, ushort offset, int length, byte[] payload)
|
||||||
|
{
|
||||||
|
int retryCount = 0;
|
||||||
|
Write:
|
||||||
|
try
|
||||||
|
{
|
||||||
|
long num1 = (long)length;
|
||||||
|
int timeoutMs = 4000;
|
||||||
|
byte payloadlength = Convert.ToByte(num1);
|
||||||
|
if ((int)payloadlength != payload.Length)
|
||||||
|
rfidDataLogger.Error("Insufficient Payload -- Payload lenth : " + (object)payload.Length);
|
||||||
|
else if (nfcDataHandler.MCI_Write(structName, offset, payloadlength, payload, timeoutMs))
|
||||||
|
{
|
||||||
|
// OK
|
||||||
|
}
|
||||||
|
else if (nfcDataHandler.LastErrorCode > (byte)0)
|
||||||
|
{
|
||||||
|
rfidDataLogger.Error("Last error message: " + nfcDataHandler.LastErrorMessage);
|
||||||
|
//int num2 = (int)MessageBox.Show(this._nfcDataHandler.LastErrorMessage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
rfidDataLogger.Error("MciWrite error message: " + ex.Message);
|
||||||
|
retryCount++;
|
||||||
|
if (retryCount < cfg.MaxCommRetries)
|
||||||
|
goto Write;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void MciWriteCommand(NfcDataHandler nfcDataHandler, byte commandcode)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ushort offset = 0;
|
||||||
|
int timeoutMs = 4000;
|
||||||
|
byte payloadlength = 1;
|
||||||
|
byte[] payload = new byte[1] { commandcode };
|
||||||
|
if (nfcDataHandler.MCI_Write(MCI_Protocol.StructName.Command, offset, payloadlength, payload, timeoutMs) || nfcDataHandler.LastErrorCode <= (byte)0)
|
||||||
|
return;
|
||||||
|
rfidDataLogger.Error("MciWriteCommand Last error message: " + nfcDataHandler.LastErrorMessage);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
rfidDataLogger.Error("MciWriteCommand Last error message: " + ex.Message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string ByteArrayToHexString(byte[] data)
|
||||||
|
{
|
||||||
|
StringBuilder stringBuilder = new StringBuilder();
|
||||||
|
foreach (byte num in data)
|
||||||
|
stringBuilder.Append(num.ToString("X2"));
|
||||||
|
return stringBuilder.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static byte[] BuildPayLoad(string strPayLoad, int length)
|
||||||
|
{
|
||||||
|
byte[] collection;
|
||||||
|
|
||||||
|
if (strPayLoad.Split(':').Length > 1)
|
||||||
|
{
|
||||||
|
uint timestamp = ConvertDateTimeToTimestamp(Convert.ToDateTime(DateTime.ParseExact(strPayLoad, "HH:mm:ss dd/MM/yyyy", (IFormatProvider)CultureInfo.InvariantCulture)));
|
||||||
|
byte[] bytes = BitConverter.GetBytes(timestamp);
|
||||||
|
return bytes;
|
||||||
|
}
|
||||||
|
else if (strPayLoad.Split(',').Length > 1)
|
||||||
|
{
|
||||||
|
string[] strArray = strPayLoad.Split(',');
|
||||||
|
collection = new byte[strArray.Length];
|
||||||
|
for (int index3 = 0; index3 < strArray.Length; ++index3)
|
||||||
|
collection[index3] = Convert.ToByte(strArray[index3], 16);
|
||||||
|
return collection;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//int num = strPayLoad.Split(',').Length;
|
||||||
|
collection = HexStringToByteArray(strPayLoad.Substring(strPayLoad.Length - length * 2).ToUpper());
|
||||||
|
Array.Reverse((Array)collection);
|
||||||
|
return collection;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static byte[] HexStringToByteArray(string hexString)
|
||||||
|
{
|
||||||
|
int length = hexString.Length;
|
||||||
|
byte[] byteArray = new byte[length / 2];
|
||||||
|
for (int startIndex = 0; startIndex < length; startIndex += 2)
|
||||||
|
byteArray[startIndex / 2] = Convert.ToByte(hexString.Substring(startIndex, 2), 16);
|
||||||
|
return byteArray;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static uint ConvertDateTimeToTimestamp(DateTime datetime)
|
||||||
|
{
|
||||||
|
TimeSpan utcOffset = TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now);
|
||||||
|
return (uint)((datetime - new DateTime(2000, 1, 1, 0, 0, 0).ToLocalTime()).TotalSeconds + utcOffset.TotalSeconds);
|
||||||
|
}
|
||||||
|
|
||||||
|
#region EventHandlers
|
||||||
|
public static void MCI_MessageEventHandlers(MCI_Protocol e)
|
||||||
|
{
|
||||||
|
DelNfc_MCI_MessageHandler mciMessageHandler = new DelNfc_MCI_MessageHandler(OnHandler);
|
||||||
|
e.MessageEvent += mciMessageHandler;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void ST25DV_MessageEventHandlers(ST25DV_Device e)
|
||||||
|
{
|
||||||
|
DelNfc_ST25DV_MessageHandler dvMessageHandler = new DelNfc_ST25DV_MessageHandler(OnHandler);
|
||||||
|
e.MessageEvent += dvMessageHandler;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void CR95HF_MessageEventHandlers(CR95HF_Reader e)
|
||||||
|
{
|
||||||
|
DelNfc_CR95HF_MessageHandler hfMessageHandler = new DelNfc_CR95HF_MessageHandler(OnHandler);
|
||||||
|
e.MessageEvent += hfMessageHandler;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void NFCHeadConfig_MessageEventHandlers(NFCHeadConfig e)
|
||||||
|
{
|
||||||
|
DelNfc_NFCHeadConfig_MessageHandler configMessageHandler = new DelNfc_NFCHeadConfig_MessageHandler(OnHandler);
|
||||||
|
e.MessageEvent += configMessageHandler;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void MessageEventHandlers(NfcDataHandler e)
|
||||||
|
{
|
||||||
|
DelNfcMessageHandler nfcMessageHandler = new DelNfcMessageHandler(OnHandler);
|
||||||
|
e.MessageEvent += nfcMessageHandler;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void OnHandler(object sender, NfcMessageEventArgs e)
|
||||||
|
{
|
||||||
|
if (e.Message == null)
|
||||||
|
return;
|
||||||
|
string message = e.Message.Replace("\n", " ").Replace("\r", "");
|
||||||
|
rfidDataLogger.Debug(message);
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,123 @@
|
|||||||
|
using Sensus.iPerl.RfidCom.Exceptions;
|
||||||
|
using Sensus.iPerl.RfidCom.Helper;
|
||||||
|
using Sensus.iPerl.RfidCom;
|
||||||
|
using System;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
using System.Threading;
|
||||||
|
using log4net;
|
||||||
|
|
||||||
|
namespace TBF.Rig.TestMethods.iPerlCommunication.iPerlHead
|
||||||
|
{
|
||||||
|
internal class RfidServices
|
||||||
|
{
|
||||||
|
protected static readonly ILog rfidDataLogger = LogManager.GetLogger("RfidData");
|
||||||
|
private static readonly ILog log = LogManager.GetLogger(typeof(iPerlCommunicationForm));
|
||||||
|
|
||||||
|
internal static int ReadRequest(TestMethodCfg cfg, IperlHead iperlHead, MessageID messageID, int offset, int length, out byte[] buffer)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < cfg.MaxCommRetries; i++)
|
||||||
|
{
|
||||||
|
rfidDataLogger.Error($"{iperlHead.CommInterface} Start {i} reading: COM{iperlHead.RfidComPortNr}: ReadRequestPort ({messageID},{offset}, {length}... timeout {cfg.CommTimeout})");
|
||||||
|
using (RfidLogic writer = new RfidLogic($"COM{iperlHead.RfidComPortNr}"))
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
byte[] response = writer.ReadRequest((byte)messageID, offset, length, cfg.CommTimeout);
|
||||||
|
string hexString = RfidHelper.ConvertByteArrayToHexString(response);
|
||||||
|
string swapHexString = RfidHelper.SwapHexcode(hexString);
|
||||||
|
string decString = RfidHelper.HexLiteral2Unsigned(RfidHelper.SwapHexcode(hexString)).ToString();
|
||||||
|
|
||||||
|
if (length > 10)
|
||||||
|
{
|
||||||
|
//if the result only contains "00"s we are working on the wrong COM port
|
||||||
|
// or the module just isn't connected
|
||||||
|
if (Regex.IsMatch(hexString, @"^(00)\1+$"))
|
||||||
|
{
|
||||||
|
rfidDataLogger.Error($"COM{iperlHead.RfidComPortNr}: ReadRequestPort ({messageID},...) <- Error: No RFID signal.");
|
||||||
|
throw new RfidValidationException("Error_Rfid_NoSignal");
|
||||||
|
}
|
||||||
|
|
||||||
|
//if the result only contains "03"s the meter did not answer.
|
||||||
|
// Might be due to the module being positioned incorrectly.
|
||||||
|
if (Regex.IsMatch(hexString, @"^(03)\1+$"))
|
||||||
|
{
|
||||||
|
rfidDataLogger.Error($"COM{iperlHead.RfidComPortNr}: ReadRequestPort ({messageID},...) <- Error: No meter signal.");
|
||||||
|
throw new RfidValidationException("Error_Rfid_NoAnswerFromMeter");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
writer.ClosePort();
|
||||||
|
buffer = response;
|
||||||
|
rfidDataLogger.Info($"{iperlHead.Name} ({iperlHead.SerialNr}): ReadRequestPort(COM{iperlHead.RfidComPortNr},...) returned HEX: {hexString}; SwapHexCodeToDecimal: {decString}");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
catch (RfidDataNotAvailableException)
|
||||||
|
{
|
||||||
|
if (/*RfidHelper.IsPassThrough(messageID)*/ messageID == MessageID.ASICRegisterReadTest || messageID == MessageID.RadioPassthrough)
|
||||||
|
{
|
||||||
|
rfidDataLogger.Info($"COM{iperlHead.RfidComPortNr}: ReadRequestPort ({messageID},...) {(i > 0 ? "<- Error: Invalid Pass-Through data." : "<- Info: Wait for Pass-Through data.")}");
|
||||||
|
Thread.Sleep(cfg.PassThroughWaitTime);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Thread.Sleep(cfg.WaitTimeAfterFailure);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (RfidValidationException)
|
||||||
|
{
|
||||||
|
Thread.Sleep(cfg.WaitTimeAfterFailure);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
rfidDataLogger.Error($"COM{iperlHead.RfidComPortNr}: ReadRequestPort ({messageID},...) {ex.Message}");
|
||||||
|
Thread.Sleep(cfg.WaitTimeAfterFailure);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
rfidDataLogger.Error($"{iperlHead.CommInterface} reading failed after {cfg.MaxCommRetries} retries: COM{iperlHead.RfidComPortNr}: ReadRequestPort ({messageID},...)");
|
||||||
|
log.Error($"{iperlHead.CommInterface} reading failed after {cfg.MaxCommRetries} retries: COM{iperlHead.RfidComPortNr}: ReadRequestPort ({messageID},...)");
|
||||||
|
buffer = new byte[length];
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
internal static int WriteRequest(TestMethodCfg cfg, IperlHead iperlHead, MessageID messageID, int offset, int length, byte[] buffer)
|
||||||
|
{
|
||||||
|
RfidLogic writer = new RfidLogic($"COM{iperlHead.RfidComPortNr}");
|
||||||
|
string payload = RfidHelper.ConvertByteArrayToHexString(buffer);
|
||||||
|
|
||||||
|
for (var i = 0; i < cfg.MaxCommRetries; i++)
|
||||||
|
{
|
||||||
|
rfidDataLogger.Error($"{iperlHead.CommInterface} Start {i} writting: COM{iperlHead.RfidComPortNr}: WriteRequest ({messageID},{offset}, {length}, {payload}... timeout {cfg.CommTimeout})");
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (writer.ClosePort()) writer.OpenPort();
|
||||||
|
writer.WriteRequest((byte)messageID, offset, length, buffer, cfg.CommTimeout, false);
|
||||||
|
writer.ClosePort();
|
||||||
|
rfidDataLogger.InfoFormat($"{iperlHead.Name}({iperlHead.SerialNr},COM{iperlHead.RfidComPortNr}): WriteRequestPort({messageID}, {offset}, {length}, {payload})");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
if (messageID == MessageID.RadioPassthrough || messageID == MessageID.ASICRegisterReadTest)
|
||||||
|
{
|
||||||
|
Thread.Sleep(1500);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rfidDataLogger.Error($"COM{iperlHead.RfidComPortNr}: Error: {ex.Message}");
|
||||||
|
Thread.Sleep(cfg.WaitTimeAfterFailure);
|
||||||
|
if (i > 1)
|
||||||
|
{
|
||||||
|
rfidDataLogger.Error($"COM{iperlHead.RfidComPortNr}: Reopen the com port.");
|
||||||
|
writer.ClosePort();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
writer.ClosePort();
|
||||||
|
rfidDataLogger.Error($"RFID writing failed after {cfg.MaxCommRetries} retries: COM{iperlHead.RfidComPortNr}: WriteRequestPort ({messageID},...) {System.Text.Encoding.UTF8.GetString(buffer)}");
|
||||||
|
log.Error($"RFID writing failed after {cfg.MaxCommRetries} retries: COM{iperlHead.RfidComPortNr}: WriteRequestPort ({messageID},...) {System.Text.Encoding.UTF8.GetString(buffer)}");
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,61 @@
|
|||||||
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace TBF.Rig.TestMethods.iPerlCommunication.iPerlHead
|
||||||
|
{
|
||||||
|
internal class SimulationServices
|
||||||
|
{
|
||||||
|
const int Q2CorrFactorsAddr = 0x1878;
|
||||||
|
|
||||||
|
internal static int ReadRequest(TestMethodCfg cfg, IperlHead iperlHead, MessageID messageID, int offset, int length, out byte[] buffer)
|
||||||
|
{
|
||||||
|
byte[] configurationBuffer = new byte[ConfigStruct.Length] { 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
|
||||||
|
byte[] calibrationBuffer = new byte[CalibrationStructV4.Length] { 3, 0, 150, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 0, 0, 150, 10 };
|
||||||
|
buffer = new byte[length];
|
||||||
|
|
||||||
|
if (messageID == MessageID.Configuration)
|
||||||
|
{
|
||||||
|
Array.Copy(GetPCB(iperlHead), 0, configurationBuffer, 16, 5); // set PCB Number according to iPerlHead configuration
|
||||||
|
Array.Copy(configurationBuffer,offset,buffer,0,length);
|
||||||
|
}
|
||||||
|
else if (messageID == MessageID.Calibration)
|
||||||
|
{
|
||||||
|
Array.Copy(calibrationBuffer, offset, buffer, 0, length);
|
||||||
|
}
|
||||||
|
else if ((messageID == MessageID.MetrologyMemory) && (offset == Q2CorrFactorsAddr) && (length == 2))
|
||||||
|
{
|
||||||
|
buffer = new byte[2] { 0, 0 };
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
buffer = new byte[length];
|
||||||
|
}
|
||||||
|
|
||||||
|
return iperlHead.Name.Equals("iPerl13") ? 2 : 0; /// Simulates an error on position 13
|
||||||
|
}
|
||||||
|
|
||||||
|
internal static int WriteRequest(TestMethodCfg cfg, IperlHead iperlHead, MessageID messageID, int offset, int length, byte[] buffer)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Array GetPCB(IperlHead iperlHead)
|
||||||
|
{
|
||||||
|
string pcbStr = iperlHead.RfidComPortNr.ToString().PadRight(10,'0') + iperlHead.Position.ToString("D2");
|
||||||
|
long decVal = Convert.ToInt64(pcbStr);
|
||||||
|
string nHexStr = decVal.ToString("X4");
|
||||||
|
|
||||||
|
string hexStr = "";
|
||||||
|
for (int a = nHexStr.Length; a >= 1; a = a - 2)
|
||||||
|
{
|
||||||
|
hexStr = hexStr + nHexStr.Substring(a - 2, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Enumerable.Range(0, hexStr.Length)
|
||||||
|
.Where(x => x % 2 == 0)
|
||||||
|
.Select(x => Convert.ToByte(hexStr.Substring(x, 2), 16))
|
||||||
|
.ToArray();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1635,8 +1635,17 @@
|
|||||||
<DependentUpon>IperlHeadCfgCtrl.cs</DependentUpon>
|
<DependentUpon>IperlHeadCfgCtrl.cs</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="Rig\TestMethods\iPerlCommunication\iPerlHead\FlowDirectionDetection.cs" />
|
<Compile Include="Rig\TestMethods\iPerlCommunication\iPerlHead\FlowDirectionDetection.cs" />
|
||||||
|
<Compile Include="Rig\TestMethods\iPerlCommunication\iPerlHead\IperlHeadTestCtrl.cs">
|
||||||
|
<SubType>UserControl</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Rig\TestMethods\iPerlCommunication\iPerlHead\IperlHeadTestCtrl.Designer.cs">
|
||||||
|
<DependentUpon>IperlHeadTestCtrl.cs</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Rig\TestMethods\iPerlCommunication\iPerlHead\NfcServices.cs" />
|
||||||
<Compile Include="Rig\TestMethods\iPerlCommunication\iPerlHead\OptoReceivedEventArgs.cs" />
|
<Compile Include="Rig\TestMethods\iPerlCommunication\iPerlHead\OptoReceivedEventArgs.cs" />
|
||||||
<Compile Include="Rig\TestMethods\iPerlCommunication\iPerlHead\ProcParams.cs" />
|
<Compile Include="Rig\TestMethods\iPerlCommunication\iPerlHead\ProcParams.cs" />
|
||||||
|
<Compile Include="Rig\TestMethods\iPerlCommunication\iPerlHead\RfidServices.cs" />
|
||||||
|
<Compile Include="Rig\TestMethods\iPerlCommunication\iPerlHead\SimulationServices.cs" />
|
||||||
<Compile Include="Rig\TestMethods\iPerlCommunication\iPerlHead\StatusStruct.cs" />
|
<Compile Include="Rig\TestMethods\iPerlCommunication\iPerlHead\StatusStruct.cs" />
|
||||||
<Compile Include="Rig\TestMethods\iPerlCommunication\OpticalHeadTest.cs" />
|
<Compile Include="Rig\TestMethods\iPerlCommunication\OpticalHeadTest.cs" />
|
||||||
<Compile Include="Rig\TestMethods\iPerlCommunication\SequenceConditionOp.cs" />
|
<Compile Include="Rig\TestMethods\iPerlCommunication\SequenceConditionOp.cs" />
|
||||||
@@ -2184,6 +2193,7 @@
|
|||||||
<Compile Include="Strings.Designer.cs" />
|
<Compile Include="Strings.Designer.cs" />
|
||||||
<Compile Include="Tools\ByteFormatter.cs" />
|
<Compile Include="Tools\ByteFormatter.cs" />
|
||||||
<Compile Include="Tools\IniUtil.cs" />
|
<Compile Include="Tools\IniUtil.cs" />
|
||||||
|
<Compile Include="Tools\LogChecker.cs" />
|
||||||
<Compile Include="Tools\XmlTools.cs" />
|
<Compile Include="Tools\XmlTools.cs" />
|
||||||
<Compile Include="UiBridge\ActivityEventArgs.cs" />
|
<Compile Include="UiBridge\ActivityEventArgs.cs" />
|
||||||
<Compile Include="UiBridge\AdjustmentInProgressEventArgs.cs" />
|
<Compile Include="UiBridge\AdjustmentInProgressEventArgs.cs" />
|
||||||
@@ -3305,6 +3315,9 @@
|
|||||||
<EmbeddedResource Include="Rig\TestMethods\iPerlCommunication\iPerlHead\IperlHeadCfgCtrl.resx">
|
<EmbeddedResource Include="Rig\TestMethods\iPerlCommunication\iPerlHead\IperlHeadCfgCtrl.resx">
|
||||||
<DependentUpon>IperlHeadCfgCtrl.cs</DependentUpon>
|
<DependentUpon>IperlHeadCfgCtrl.cs</DependentUpon>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="Rig\TestMethods\iPerlCommunication\iPerlHead\IperlHeadTestCtrl.resx">
|
||||||
|
<DependentUpon>IperlHeadTestCtrl.cs</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
<EmbeddedResource Include="Rig\TestMethods\LiveStream\CfgCtrl.resx">
|
<EmbeddedResource Include="Rig\TestMethods\LiveStream\CfgCtrl.resx">
|
||||||
<DependentUpon>CfgCtrl.cs</DependentUpon>
|
<DependentUpon>CfgCtrl.cs</DependentUpon>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
@@ -3825,6 +3838,10 @@
|
|||||||
<Project>{a3e14180-7f00-42e5-94a9-8db62ead6ee8}</Project>
|
<Project>{a3e14180-7f00-42e5-94a9-8db62ead6ee8}</Project>
|
||||||
<Name>Sensus.iPerl.RfidCom</Name>
|
<Name>Sensus.iPerl.RfidCom</Name>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\..\NfcS5_DLL\NfcS5_DLL.csproj">
|
||||||
|
<Project>{34F6AA20-3BEC-44B4-9D18-DC66BAB79A83}</Project>
|
||||||
|
<Name>NfcS5_DLL</Name>
|
||||||
|
</ProjectReference>
|
||||||
<ProjectReference Include="..\Common\Common.csproj">
|
<ProjectReference Include="..\Common\Common.csproj">
|
||||||
<Project>{c8939821-ba5c-4988-a3d0-bf53b74865c7}</Project>
|
<Project>{c8939821-ba5c-4988-a3d0-bf53b74865c7}</Project>
|
||||||
<Name>Common</Name>
|
<Name>Common</Name>
|
||||||
|
|||||||
@@ -0,0 +1,50 @@
|
|||||||
|
using log4net.Appender;
|
||||||
|
using log4net.Core;
|
||||||
|
using log4net.Repository.Hierarchy;
|
||||||
|
using log4net;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace TBF.Tools
|
||||||
|
{
|
||||||
|
public class LogChecker : IDisposable
|
||||||
|
{
|
||||||
|
readonly Logger _logger;
|
||||||
|
readonly Level _previousLevel;
|
||||||
|
readonly MemoryAppender _appender = new MemoryAppender();
|
||||||
|
|
||||||
|
public LogChecker(string logName, Level levelToCheck)
|
||||||
|
{
|
||||||
|
_logger = (Logger)LogManager.GetLogger(logName).Logger;
|
||||||
|
_logger.AddAppender(_appender);
|
||||||
|
_previousLevel = _logger.Level;
|
||||||
|
_logger.Level = levelToCheck;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<string> Messages
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return new List<log4net.Core.LoggingEvent>(_appender.GetEvents())
|
||||||
|
.ConvertAll(x => x.RenderedMessage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
_logger.Level = _previousLevel;
|
||||||
|
_logger.RemoveAppender(_appender);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Example of use
|
||||||
|
//
|
||||||
|
// using (Tools.LogChecker logChecker = new Tools.LogChecker("RfidData", log4net.Core.Level.Debug))
|
||||||
|
// {
|
||||||
|
// Execute query using NHibernate
|
||||||
|
// ....
|
||||||
|
//
|
||||||
|
// MessageBox.Show(String.Join(Environment.NewLine,logChecker.Messages));
|
||||||
|
// }
|
||||||
|
//
|
||||||
@@ -513,8 +513,10 @@ namespace Users.Entities
|
|||||||
(userName.Equals("Michal") && password.Equals("Plok789456123")) ||
|
(userName.Equals("Michal") && password.Equals("Plok789456123")) ||
|
||||||
(userName.Equals("martin") && password.Equals("vaclavek84")) ||
|
(userName.Equals("martin") && password.Equals("vaclavek84")) ||
|
||||||
(userName.Equals("pakan") && password.Equals("kuriatko")) ||
|
(userName.Equals("pakan") && password.Equals("kuriatko")) ||
|
||||||
(userName.Equals("jan") && password.Equals("jaugust")) ||
|
(userName.Equals("jau") && password.Equals("jaugust")) ||
|
||||||
(userName.Equals("JCermak") && password.Equals("Zt6911")) ||
|
(userName.Equals("JCermak") && password.Equals("Zt6911")) ||
|
||||||
|
(userName.Equals("mic") && password.Equals("Michal")) ||
|
||||||
|
(userName.Equals("pav") && password.Equals("Peter")) ||
|
||||||
(userName.Equals("gilles") && password.Equals("alibaba")) ||
|
(userName.Equals("gilles") && password.Equals("alibaba")) ||
|
||||||
(userName.Equals(passwordOfDay) && password.Equals(passwordOfDay));
|
(userName.Equals(passwordOfDay) && password.Equals(passwordOfDay));
|
||||||
}
|
}
|
||||||
|
|||||||
Binary file not shown.
Reference in New Issue
Block a user