Bugfixes in: (1) use of iPerl Board# param, (2) Evaluate and Publish flying strt test params, (3) Q2 correction, (4) opto-log-file-name cleanup, etc.

This commit is contained in:
Milan Hanajik 2015-08-22 13:34:10 +02:00
parent f3dabcbcc1
commit 2b8f5ebec3
8 changed files with 49 additions and 23 deletions

View File

@ -296,6 +296,13 @@ namespace TBF.BenchControl.Sequences
{
StateMachine.LoadTestParams(test);
if (BenchInfo != null && sensPath.RegisterReaders != null)
{
foreach (var rr in sensPath.RegisterReaders)
if (rr is WaterMeters.iPerl.WaterMeter)
(rr as WaterMeters.iPerl.WaterMeter).BenchName = BenchInfo.TestBenchId;
}
e = testMethodSequence.Execute(test);
if (e.Contains(Event.ConfigurationError)) goto select_cycle_or_test;
@ -345,7 +352,14 @@ namespace TBF.BenchControl.Sequences
if (testMethodSequence != null && testMethodSequence.CanTest(StateMachine.Procedure.MetersKind))
{
StateMachine.LoadTestParams(test);
if (BenchInfo != null && sensPath.RegisterReaders != null)
{
foreach (var rr in sensPath.RegisterReaders)
if (rr is WaterMeters.iPerl.WaterMeter)
(rr as WaterMeters.iPerl.WaterMeter).BenchName = BenchInfo.TestBenchId;
}
e = testMethodSequence.Execute(test);
if (e.Contains(Event.Error)) goto error;

View File

@ -255,14 +255,10 @@ namespace TBF.BenchControl.TestMethods.FlyingStartCollectionMethod
while (!e.Contains(Event.MeasurementStarted));
/// Reset iPerl volume measurement
//foreach (var rr in sensPath.RegisterReaders)
//{
// if (rr is WaterMeters.iPerl.WaterMeter)
// {
// (rr as WaterMeters.iPerl.WaterMeter).Reset();
// }
//}
foreach (var rr in sensPath.RegisterReaders)
{
if (rr is WaterMeters.iPerl.WaterMeter) (rr as WaterMeters.iPerl.WaterMeter).TestName = test.Name;
}
/// Measurement loop - preparation

View File

@ -30,6 +30,7 @@ namespace TBF.BenchControl.TestMethods.FlyingStartCollectionMethod
{
Name = "FlyingStartCollection";
ParentName = string.Empty;
TestParams = new TestParams();
}
public TestMethodCfg(IComponentFactory factory)

View File

@ -82,7 +82,8 @@ namespace TBF.BenchControl.TestMethods.FlyingStartCollectionMethod
test = dbEntity.Test;
Evaluate = tmp.Evaluate;
}
Publish = tmp.Publish;
}
catch
{
}

View File

@ -54,7 +54,8 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
public string ToString(int i)
{
return string.Format("Name={0}", Name);
return string.Format("Name={0}, Board#1=COM{1}, Board#2=COM{2}, Board#3=COM{3}, Board#4=COM{4}",
Name, RfidPortNrBoard1, RfidPortNrBoard2, RfidPortNrBoard3, RfidPortNrBoard4);
}
}
}

View File

@ -490,9 +490,12 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
{
int threadId = (threadData as Boxes.IntBox).Val;
rfidDataLogger.InfoFormat(""); /// Makes the log more readable when there is a lot of data
rfidDataLogger.WarnFormat("Activity = {0}", activity);
rfidDataLogger.InfoFormat(""); /// Makes the log more readable when there is a lot of data
if (threadId == 0)
{
rfidDataLogger.InfoFormat(""); /// Makes the log more readable when there is a lot of data
rfidDataLogger.WarnFormat("Activity = {0}", activity);
rfidDataLogger.InfoFormat(""); /// Makes the log more readable when there is a lot of data
}
for (int group = 1; group <= lastGroup; group++)
{
@ -560,8 +563,6 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
/// <returns>true on success</returns>
static CommErr ReadConfiguration(WaterMeters.iPerl.WaterMeter wm, ref string resultStr)
{
int boardNr = wm.MuxBoardNr - 51;
///
/// The activity is "Read configuration" (this enables the watermeter, resets error flag)
/// or "Read configuration if enabled" (this keeps th error flag).
@ -581,7 +582,7 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
byte[] config = null;
for (int j = 0; j < MaxCommRetries; j++)
{
if (0 == ReadRequestPort(boardNr, MessageID.Configuration, 0, ConfigStruct.Length, out config, CommTimeout))
if (0 == ReadRequestPort(wm.MuxBoardNr, MessageID.Configuration, 0, ConfigStruct.Length, out config, CommTimeout))
{
error = CommErr.None;
wm.ConfigStruct = ConfigStruct.FromByteArray(config);
@ -590,7 +591,7 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
}
}
ClosePort(boardNr); /// Close RFID port
ClosePort(wm.MuxBoardNr); /// Close RFID port
return error;
}
@ -932,8 +933,9 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
(rdData != null) && (rdData.Length == 2) && (rdData[0] == q2CorrRFlow) && (rdData[1] == q2CorrRFlow))
{
error = CommErr.None;
resultStr = string.Format("Q2 correction factors set: RightFlow = {0}, LeftFlow = {1}",
q2CorrRFlow, q2CorrRFlow);
resultStr = string.Format("Group={0}, Board={1}, Q2 correction factors set: RightFlow = {2}, LeftFlow = {3}",
wm.Group, wm.MuxBoardNr, q2CorrRFlow, q2CorrRFlow);
rfidDataLogger.Warn(resultStr);
break;
}
}

View File

@ -130,6 +130,8 @@ namespace TBF.BenchControl.WaterMeters.iPerl
/// <returns>Q2 correction factor</returns>
public double Q2CorrectionFactor()
{
if (Math.Abs(LastTestResult.VolumeErrorPct) <= 0.5f) return 0; /// No Q2 correction if error < +/-0.5 %
double A = 16.0 / ScalingFactor(); /// Raw units per ml: DN15=16, DN20=8, DN25=4, DN32=2, DN40=1
const double B = 8.0; /// Raw units per minute, 8
const double C = B * 60.0; /// Raw units per hour, 480
@ -140,6 +142,11 @@ namespace TBF.BenchControl.WaterMeters.iPerl
return (-1) * (LastTestResult.VolumeErrorPct / G) * (LastTestResult.VolumeRef / LastTestResult.VolumeMeter);
}
/// <summary> Name set by the test, to be used as a part og the opto-data log file name </summary>
public string TestName;
/// <summary> Name set by the test, to be used as a part og the opto-data log file name </summary>
public string BenchName;
///
/// Volume of water from the opto telegram
@ -331,8 +338,12 @@ namespace TBF.BenchControl.WaterMeters.iPerl
{
/// Reset opto data
optoDataCount = 0;
optoDataLogFileName = (ConfigStruct != null) ? ConfigStruct.PCBNumber2String() : "Unknown PCBNumber";
optoDataLogFileName += "_" + Name + "_" + Utils.ToMyString(DateTime.Now);
optoDataLogFileName = string.Format("{0}_{1}_{2}_{3}_{4}",
(ConfigStruct != null) ? ConfigStruct.PCBNumber2String() : "UnknownPcbNr",
Utils.ToMyString(DateTime.Now),
BenchName,
Name,
(TestName != null ? TestName : string.Empty));
sampleNr = 0;

View File

@ -52,7 +52,7 @@ namespace TBF.BenchControl.WaterMeters.iPerl
public string ToString(int i)
{
return string.Format("Name={0}, Type={1}, Opto=COM{2}, RFID=COM{3}, Group={4}",
return string.Format("Name={0}, Type={1}, Opto=COM{2}, MuxBoard#={3}, Group={4}",
Name,
MeterType,
OptoComPortNr,