Add auto-read serial number and auto-close gap support:
- Introduce `bAutoRead` and `iAutocloseGap` fields for serial number auto-read and delay-based form auto-close. - Update constructors and methods in `CycleBgEnForm`, `TestStartEndForm`, and related classes to handle new functionality. - Refactor serial number reading logic to improve maintainability. - Extend configuration (`EntryFormCfg`) for new auto-read and auto-close options. - Update `AssemblyVersion` and `AssemblyFileVersion` to `3.9.2218.1`.
This commit is contained in:
parent
2fc64e478d
commit
47eef34694
@ -29,5 +29,5 @@ using System.Runtime.InteropServices;
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
[assembly: AssemblyVersion("3.9.2215.1")]
|
||||
[assembly: AssemblyFileVersion("3.9.2015.1")]
|
||||
[assembly: AssemblyVersion("3.9.2218.1")]
|
||||
[assembly: AssemblyFileVersion("3.9.2018.1")]
|
||||
|
||||
@ -54,6 +54,16 @@ namespace TBF.Rig.DataEntry.Uni
|
||||
readonly CheckBox[] checkBoxes; /// Check boxes for water meter enable/disable
|
||||
///
|
||||
bool readSerialNoByRegisterReader = true;
|
||||
/// <summary>
|
||||
/// automaticly read serial number from register reader
|
||||
/// </summary>
|
||||
bool bAutoRead;
|
||||
///<summary>
|
||||
///autoclose disabled by default, if > 0 is enabled
|
||||
/// - in seconds
|
||||
/// </summary>
|
||||
int iAutocloseGap;
|
||||
|
||||
|
||||
readonly MultiPurposeBtnFunction multiPurposeButtonFn;
|
||||
bool multiPurposeButtonFlag;
|
||||
@ -92,7 +102,7 @@ namespace TBF.Rig.DataEntry.Uni
|
||||
/// <param name="colItems">Water meter items displayed in columns (in the matrix in the main part of the form)</param>
|
||||
/// <param name="isEnd">true = This form is displayed at the end of cycle</param>
|
||||
public CycleBgEnForm(IList<WaterMeter> waterMeters, int _lineSize, string title, FontSz sz, bool isLrOrder, bool isCameraPicture,
|
||||
string formCloseKeys, IList<DEItem> commonItems, IList<DEItem> colItems, bool isEnd = false)
|
||||
string formCloseKeys, IList<DEItem> commonItems, IList<DEItem> colItems, bool AutoRead, int AutoCloseGap, bool isEnd = false)
|
||||
: this()
|
||||
{
|
||||
/// Arguments
|
||||
@ -105,6 +115,9 @@ namespace TBF.Rig.DataEntry.Uni
|
||||
this.commonItems = commonItems;
|
||||
this.colItems = colItems;
|
||||
this.isEnd = isEnd;
|
||||
|
||||
this.bAutoRead = AutoRead;
|
||||
this.iAutocloseGap = AutoCloseGap; //autoclose disabled by default, if > 0 is enabled
|
||||
|
||||
/// Preserve column items for use in SummaryResults
|
||||
if (!isEnd)
|
||||
@ -426,11 +439,14 @@ namespace TBF.Rig.DataEntry.Uni
|
||||
}
|
||||
}
|
||||
|
||||
public CycleBgEnForm(IList<WaterMeter> waterMeters, IRegReader[] regReaders, int title, string myCfgBgTitle, FontSz myCfgBgSize, bool myCfgBgIsLrOrder, bool myCfgBgIsCameraPicture, string myCfgBgFormCloseKeys, IList<DEItem> getItems, IList<DEItem> getColumns, bool b, IRegReader[] iRegReaders)
|
||||
: this(waterMeters, title, myCfgBgTitle, myCfgBgSize, myCfgBgIsLrOrder, myCfgBgIsCameraPicture, myCfgBgFormCloseKeys, getItems, getColumns, b)
|
||||
public CycleBgEnForm(IList<WaterMeter> waterMeters, IRegReader[] regReaders, int title, string myCfgBgTitle, FontSz myCfgBgSize, bool myCfgBgIsLrOrder, bool myCfgBgIsCameraPicture, string myCfgBgFormCloseKeys, IList<DEItem> getItems, IList<DEItem> getColumns, bool b, IRegReader[] iRegReaders, bool AutoRead, int AutoCloseGap)
|
||||
: this(waterMeters, title, myCfgBgTitle, myCfgBgSize, myCfgBgIsLrOrder, myCfgBgIsCameraPicture, myCfgBgFormCloseKeys, getItems, getColumns,AutoRead,AutoCloseGap, b)
|
||||
{
|
||||
this.regReaders = regReaders;
|
||||
|
||||
if (bAutoRead)
|
||||
{
|
||||
ReadAndProcessSerialNumbersByRegReader();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -704,26 +720,11 @@ namespace TBF.Rig.DataEntry.Uni
|
||||
|
||||
char[] digits = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
|
||||
|
||||
if (readSerialNoByRegisterReader)
|
||||
{
|
||||
log.Debug("Reading serial numbers from register readers...");
|
||||
this.SerialNumberRead += (s, eArgs) =>
|
||||
{
|
||||
log.Debug("Serial updated: " + eArgs.SerialNumber);
|
||||
UpdateSomethingBySerial(eArgs.Reader, eArgs.SerialNumber);
|
||||
};
|
||||
|
||||
BeforeUpdate();
|
||||
this.DoneUpdateBySerial += (s, eArgs) =>
|
||||
{
|
||||
log.Debug("Serial updated DONE!");
|
||||
DoneUpdate();
|
||||
};
|
||||
|
||||
ReadSerialNumbersAsync(regReaders);
|
||||
|
||||
}
|
||||
else
|
||||
// if (readSerialNoByRegisterReader)
|
||||
// {
|
||||
// Task.Run(() => ReadAndProcessSerialNumbersByRegReader());
|
||||
// }
|
||||
// else
|
||||
{
|
||||
///
|
||||
/// Find a column with serial numbers
|
||||
@ -809,6 +810,25 @@ namespace TBF.Rig.DataEntry.Uni
|
||||
}
|
||||
}
|
||||
|
||||
private void ReadAndProcessSerialNumbersByRegReader()
|
||||
{
|
||||
log.Debug("Reading serial numbers from register readers...");
|
||||
this.SerialNumberRead += (s, eArgs) =>
|
||||
{
|
||||
log.Debug("Serial updated: " + eArgs.SerialNumber);
|
||||
UpdateSomethingBySerial(eArgs.Reader, eArgs.SerialNumber);
|
||||
};
|
||||
|
||||
BeforeUpdate();
|
||||
this.DoneUpdateBySerial += (s, eArgs) =>
|
||||
{
|
||||
log.Debug("Serial updated DONE!");
|
||||
DoneUpdate();
|
||||
};
|
||||
|
||||
ReadSerialNumbersAsync(regReaders);
|
||||
}
|
||||
|
||||
private void UpdateSomethingBySerial(IRegReader eReader, string eSerialNumber)
|
||||
{
|
||||
log.Debug($"RegReader name: {eReader.Name}, Serial No updated: " + eSerialNumber);
|
||||
@ -840,19 +860,57 @@ namespace TBF.Rig.DataEntry.Uni
|
||||
|
||||
_previousCursor = Cursor.Current;
|
||||
Cursor.Current = Cursors.WaitCursor;
|
||||
|
||||
|
||||
//Enable all checkboxes
|
||||
|
||||
for (int firstIx = 0; firstIx < wmsCount; firstIx++)
|
||||
{
|
||||
checkBoxes[firstIx].Checked = true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
private void DoneUpdate()
|
||||
{
|
||||
log.Debug("DoneUpdate");
|
||||
|
||||
//enbale only found checkboxes
|
||||
int comboRows = comboBoxes.GetLength(0);
|
||||
int comboCols = comboBoxes.GetLength(1);
|
||||
|
||||
for (int k = 0; k < colItems.Count && k < comboRows; k++)
|
||||
{
|
||||
for (int ix = 0; ix < wmsCount && ix < comboCols; ix++)
|
||||
{
|
||||
bool letEnable = false;
|
||||
var combo = comboBoxes[k, ix];
|
||||
if (combo != null)
|
||||
{
|
||||
letEnable = !string.IsNullOrEmpty(combo.Text);
|
||||
}
|
||||
|
||||
if (letEnable && checkBoxes.Length > ix)
|
||||
{
|
||||
|
||||
checkBoxes[ix].Enabled = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
this.okButton.Enabled = GetStoredOrDefault("okButton");
|
||||
this.clearButton.Enabled = GetStoredOrDefault("clearButton");
|
||||
this.multiPurposeButton.Enabled = GetStoredOrDefault("multiPurposeButton");
|
||||
Cursor.Current = _previousCursor;
|
||||
|
||||
//if (ShowDialogType == ShowDialogType.ContinueAutomatically)
|
||||
//{
|
||||
AutoClickOkAfterDelay();
|
||||
//}
|
||||
if (iAutocloseGap > 0)
|
||||
{
|
||||
AutoClickOkAfterDelay(iAutocloseGap * 1000);
|
||||
}
|
||||
}
|
||||
|
||||
private void PopulateComboBoxWithSerialNumbers( IRegReader eReader, string eSerialNumber)
|
||||
@ -1084,7 +1142,20 @@ namespace TBF.Rig.DataEntry.Uni
|
||||
|
||||
public async void ReadSerialNumbersAsync(IEnumerable<IRegReader> regReaders)
|
||||
{
|
||||
log.Debug("Reading serial numbers from register readers...");
|
||||
log.Debug($"Reading-> regReaders.length({(regReaders != null ? regReaders.Count() : 0)})");
|
||||
if (regReaders == null)
|
||||
{
|
||||
log.Debug("Reading-> regReaders is null");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
foreach (IRegReader reader in regReaders)
|
||||
{
|
||||
if (reader == null) continue;
|
||||
log.Debug($"Reading-> regReader: {reader.GetType().Name}");
|
||||
}
|
||||
|
||||
|
||||
try
|
||||
{
|
||||
@ -1092,6 +1163,9 @@ namespace TBF.Rig.DataEntry.Uni
|
||||
.OfType<IRegReaderSmart>()
|
||||
.GroupBy(r => r.Group)
|
||||
.OrderBy(g => g.Key);
|
||||
|
||||
if (groups != null)
|
||||
log.Debug($"Reading-> groups.length({groups.Count()})");
|
||||
|
||||
foreach (var group in groups)
|
||||
{
|
||||
|
||||
@ -41,8 +41,10 @@ namespace TBF.Rig.DataEntry.Uni
|
||||
public bool BgIsLrOrder; /// 5
|
||||
public bool BgIsCameraPicture; /// 6
|
||||
public string BgFormCloseKeys; /// 7
|
||||
public bool BgIsAutoReadingSerialNo;/// 8 - new
|
||||
public int BgAutoCloseGap; /// 9 - new
|
||||
|
||||
public bool EnShowForm; /// 8
|
||||
public bool EnShowForm; /// 8 + 2
|
||||
public string EnTitle; /// 9
|
||||
public FontSz EnSize; /// 10
|
||||
// int EnItemsCount; /// 11
|
||||
@ -60,7 +62,7 @@ namespace TBF.Rig.DataEntry.Uni
|
||||
public bool TestIsCameraPicture; /// 22
|
||||
public string TestStartPicName; /// 23
|
||||
public string TestEndPicName; /// 24
|
||||
public string TestFormCloseKeys; /// 25
|
||||
public string TestFormCloseKeys; /// 25 + 2
|
||||
|
||||
public Ct[] BgItemContent; /// 26 + 4 * ix
|
||||
public string[] BgItemCaption; /// 27 + 4 * ix
|
||||
@ -343,6 +345,8 @@ namespace TBF.Rig.DataEntry.Uni
|
||||
BgIsLrOrder = false;
|
||||
BgIsCameraPicture = false;
|
||||
BgFormCloseKeys = string.Empty;
|
||||
BgIsAutoReadingSerialNo = false;
|
||||
BgAutoCloseGap = 10;
|
||||
|
||||
EnShowForm = false;
|
||||
EnTitle = "Enter water meter data";
|
||||
@ -389,16 +393,18 @@ namespace TBF.Rig.DataEntry.Uni
|
||||
|
||||
string[] paramNames = new string[]
|
||||
{
|
||||
"Beginning: Show form",
|
||||
"Beginning: Form title",
|
||||
"Beginning: Font ize",
|
||||
"Beginning: Common items count",
|
||||
"Beginning: Show form", //0
|
||||
"Beginning: Form title", //1
|
||||
"Beginning: Font ize", //2
|
||||
"Beginning: Common items count",//3
|
||||
"Beginning: Columns count",
|
||||
"Beginning: Left-to-right order",
|
||||
"Beginning: Show camera picture",
|
||||
"Beginning: Keys to close the form",
|
||||
"Beginning: Read Automatic Serial No from watermeter", //8
|
||||
"Beginning: Continue automatic after Read Serial No", //9
|
||||
|
||||
"End: Show form",
|
||||
"End: Show form",//8+2
|
||||
"End: Form title",
|
||||
"End: Font size",
|
||||
"End: Common items count",
|
||||
@ -508,17 +514,18 @@ namespace TBF.Rig.DataEntry.Uni
|
||||
case 0:
|
||||
case 5:
|
||||
case 6:
|
||||
case 8:
|
||||
case 13:
|
||||
case 14:
|
||||
case 8: //new auto read SerialNo
|
||||
case 10: //8+2
|
||||
case 15:
|
||||
case 16:
|
||||
case 20:
|
||||
case 21:
|
||||
case 18:
|
||||
case 22:
|
||||
case 23:
|
||||
case 24:
|
||||
return new string[] { Strings.yes, Strings.no };
|
||||
case 2:
|
||||
case 10:
|
||||
case 18:
|
||||
case 12:
|
||||
case 20:
|
||||
for (FontSz sz = 0; sz < FontSz.Count; sz++) list.Add(sz.ToDescription());
|
||||
return list;
|
||||
default:
|
||||
@ -596,26 +603,28 @@ namespace TBF.Rig.DataEntry.Uni
|
||||
case 5: return BgIsLrOrder ? Strings.yes : Strings.no;
|
||||
case 6: return BgIsCameraPicture ? Strings.yes : Strings.no;
|
||||
case 7: return BgFormCloseKeys;
|
||||
case 8: return BgIsAutoReadingSerialNo ? Strings.yes : Strings.no;;
|
||||
case 9: return BgAutoCloseGap.ToString();
|
||||
|
||||
case 8: return EnShowForm ? Strings.yes : Strings.no;
|
||||
case 9: return EnTitle;
|
||||
case 10: return EnSize.ToDescription();
|
||||
case 11: return GetEnItemsCount().ToString();
|
||||
case 12: return GetEnColumnsCount().ToString();
|
||||
case 13: return EnIsLrOrder ? Strings.yes : Strings.no;
|
||||
case 14: return EnIsCameraPicture ? Strings.yes : Strings.no;
|
||||
case 15: return EnFormCloseKeys;
|
||||
case 10: return EnShowForm ? Strings.yes : Strings.no;
|
||||
case 11: return EnTitle;
|
||||
case 12: return EnSize.ToDescription();
|
||||
case 13: return GetEnItemsCount().ToString();
|
||||
case 14: return GetEnColumnsCount().ToString();
|
||||
case 15: return EnIsLrOrder ? Strings.yes : Strings.no;
|
||||
case 16: return EnIsCameraPicture ? Strings.yes : Strings.no;
|
||||
case 17: return EnFormCloseKeys;
|
||||
|
||||
case 16: return TestStartEndShowForm ? Strings.yes : Strings.no;
|
||||
case 17: return TestTitle;
|
||||
case 18: return TestSize.ToDescription();
|
||||
case 19: return GetTestColumnsCount().ToString();
|
||||
case 20: return TestStartBoxAlwaysEn ? Strings.yes : Strings.no;
|
||||
case 21: return TestIsLrOrder ? Strings.yes : Strings.no;
|
||||
case 22: return TestIsCameraPicture ? Strings.yes : Strings.no;
|
||||
case 23: return TestStartPicName;
|
||||
case 24: return TestEndPicName;
|
||||
case 25: return TestFormCloseKeys;
|
||||
case 18: return TestStartEndShowForm ? Strings.yes : Strings.no;
|
||||
case 19: return TestTitle;
|
||||
case 20: return TestSize.ToDescription();
|
||||
case 21: return GetTestColumnsCount().ToString();
|
||||
case 22: return TestStartBoxAlwaysEn ? Strings.yes : Strings.no;
|
||||
case 23: return TestIsLrOrder ? Strings.yes : Strings.no;
|
||||
case 24: return TestIsCameraPicture ? Strings.yes : Strings.no;
|
||||
case 25: return TestStartPicName;
|
||||
case 26: return TestEndPicName;
|
||||
case 27: return TestFormCloseKeys;
|
||||
|
||||
default: return string.Empty;
|
||||
}
|
||||
@ -714,10 +723,12 @@ namespace TBF.Rig.DataEntry.Uni
|
||||
case 5: BgIsLrOrder = (str == Strings.yes); return CfgUpdateFlags.RestartRqrd;
|
||||
case 6: BgIsCameraPicture = (str == Strings.yes); return CfgUpdateFlags.RestartRqrd;
|
||||
case 7: BgFormCloseKeys = str; return CfgUpdateFlags.RestartRqrd;
|
||||
|
||||
case 8: EnShowForm = (str == Strings.yes); return CfgUpdateFlags.RestartRqrd;
|
||||
case 9: EnTitle = str; return CfgUpdateFlags.RestartRqrd;
|
||||
case 10:
|
||||
case 8: BgIsAutoReadingSerialNo = (str == Strings.yes); return CfgUpdateFlags.RestartRqrd;
|
||||
case 9: BgAutoCloseGap = int.Parse(str); return CfgUpdateFlags.RestartRqrd;
|
||||
|
||||
case 10: EnShowForm = (str == Strings.yes); return CfgUpdateFlags.RestartRqrd;
|
||||
case 11: EnTitle = str; return CfgUpdateFlags.RestartRqrd;
|
||||
case 12:
|
||||
for (FontSz sz = 0; sz < FontSz.Count; sz++)
|
||||
{
|
||||
if (str == sz.ToDescription())
|
||||
@ -727,15 +738,15 @@ namespace TBF.Rig.DataEntry.Uni
|
||||
}
|
||||
}
|
||||
return CfgUpdateFlags.None;
|
||||
case 11: SetEnItemsCount(int.Parse(str)); return CfgUpdateFlags.RestartRqrd;
|
||||
case 12: SetEnColumnsCount(int.Parse(str)); return CfgUpdateFlags.RestartRqrd;
|
||||
case 13: EnIsLrOrder = (str == Strings.yes); return CfgUpdateFlags.RestartRqrd;
|
||||
case 14: EnIsCameraPicture = (str == Strings.yes); return CfgUpdateFlags.RestartRqrd;
|
||||
case 15: EnFormCloseKeys = str; return CfgUpdateFlags.RestartRqrd;
|
||||
case 13: SetEnItemsCount(int.Parse(str)); return CfgUpdateFlags.RestartRqrd;
|
||||
case 14: SetEnColumnsCount(int.Parse(str)); return CfgUpdateFlags.RestartRqrd;
|
||||
case 15: EnIsLrOrder = (str == Strings.yes); return CfgUpdateFlags.RestartRqrd;
|
||||
case 16: EnIsCameraPicture = (str == Strings.yes); return CfgUpdateFlags.RestartRqrd;
|
||||
case 17: EnFormCloseKeys = str; return CfgUpdateFlags.RestartRqrd;
|
||||
|
||||
case 16: TestStartEndShowForm = (str == Strings.yes); return CfgUpdateFlags.RestartRqrd;
|
||||
case 17: TestTitle = str; return CfgUpdateFlags.RestartRqrd;
|
||||
case 18:
|
||||
case 18: TestStartEndShowForm = (str == Strings.yes); return CfgUpdateFlags.RestartRqrd;
|
||||
case 19: TestTitle = str; return CfgUpdateFlags.RestartRqrd;
|
||||
case 20:
|
||||
for (FontSz sz = 0; sz < FontSz.Count; sz++)
|
||||
{
|
||||
if (str == sz.ToDescription())
|
||||
@ -745,13 +756,13 @@ namespace TBF.Rig.DataEntry.Uni
|
||||
}
|
||||
}
|
||||
return CfgUpdateFlags.None;
|
||||
case 19: SetTestColumnsCount(int.Parse(str)); return CfgUpdateFlags.RestartRqrd;
|
||||
case 20: TestStartBoxAlwaysEn = (str == Strings.yes); return CfgUpdateFlags.RestartRqrd;
|
||||
case 21: TestIsLrOrder = (str == Strings.yes); return CfgUpdateFlags.RestartRqrd;
|
||||
case 22: TestIsCameraPicture = (str == Strings.yes); return CfgUpdateFlags.RestartRqrd;
|
||||
case 23: TestStartPicName = str; return CfgUpdateFlags.RestartRqrd;
|
||||
case 24: TestEndPicName = str; return CfgUpdateFlags.RestartRqrd;
|
||||
case 25: TestFormCloseKeys = str; return CfgUpdateFlags.RestartRqrd;
|
||||
case 21: SetTestColumnsCount(int.Parse(str)); return CfgUpdateFlags.RestartRqrd;
|
||||
case 22: TestStartBoxAlwaysEn = (str == Strings.yes); return CfgUpdateFlags.RestartRqrd;
|
||||
case 23: TestIsLrOrder = (str == Strings.yes); return CfgUpdateFlags.RestartRqrd;
|
||||
case 24: TestIsCameraPicture = (str == Strings.yes); return CfgUpdateFlags.RestartRqrd;
|
||||
case 25: TestStartPicName = str; return CfgUpdateFlags.RestartRqrd;
|
||||
case 26: TestEndPicName = str; return CfgUpdateFlags.RestartRqrd;
|
||||
case 27: TestFormCloseKeys = str; return CfgUpdateFlags.RestartRqrd;
|
||||
|
||||
default:
|
||||
return CfgUpdateFlags.None;
|
||||
@ -872,34 +883,36 @@ namespace TBF.Rig.DataEntry.Uni
|
||||
case 2:
|
||||
case 5:
|
||||
case 6:
|
||||
case 8:
|
||||
case 10:
|
||||
case 13:
|
||||
case 14:
|
||||
case 8://Auto close - yes/No
|
||||
case 10://8+2
|
||||
case 12:
|
||||
case 15:
|
||||
case 16:
|
||||
case 18:
|
||||
case 20:
|
||||
case 21:
|
||||
case 22:
|
||||
case 23:
|
||||
case 24:
|
||||
message = string.Empty;
|
||||
if (ParamValues(i).Contains(str)) return true;
|
||||
break;
|
||||
case 3:
|
||||
case 4:
|
||||
case 11:
|
||||
case 12:
|
||||
case 19:
|
||||
case 9: //Gap AutoClose
|
||||
case 13:
|
||||
case 14:
|
||||
case 21:
|
||||
message = string.Empty;
|
||||
if (int.TryParse(str, out idummy)) return true;
|
||||
break;
|
||||
case 1:
|
||||
case 7:
|
||||
case 9:
|
||||
case 15:
|
||||
case 11:
|
||||
case 17:
|
||||
case 23:
|
||||
case 24:
|
||||
case 19:
|
||||
case 25:
|
||||
case 26:
|
||||
case 27:
|
||||
message = string.Empty;
|
||||
return true;
|
||||
default:
|
||||
@ -942,6 +955,8 @@ namespace TBF.Rig.DataEntry.Uni
|
||||
prms.BgIsLrOrder = BgIsLrOrder;
|
||||
prms.BgIsCameraPicture = BgIsCameraPicture;
|
||||
prms.BgFormCloseKeys = BgFormCloseKeys;
|
||||
prms.BgIsAutoReadingSerialNo = BgIsAutoReadingSerialNo;
|
||||
prms.BgAutoCloseGap = BgAutoCloseGap;
|
||||
|
||||
prms.EnShowForm = EnShowForm;
|
||||
prms.EnTitle = EnTitle;
|
||||
|
||||
@ -239,12 +239,12 @@ namespace TBF.Rig.DataEntry.Uni
|
||||
if (regReaders != null)
|
||||
{
|
||||
modelessDlg = new CycleBgEnForm(waterMeters, regReaders, TBF.Data.LineSize, myCfg.BgTitle, myCfg.BgSize, myCfg.BgIsLrOrder, myCfg.BgIsCameraPicture,
|
||||
myCfg.BgFormCloseKeys, DEItem.GetItems(), DEItem.GetColumns(), false, regReaders);
|
||||
myCfg.BgFormCloseKeys, DEItem.GetItems(), DEItem.GetColumns(), false, regReaders, myCfg.BgIsAutoReadingSerialNo, myCfg.BgAutoCloseGap);
|
||||
}
|
||||
else
|
||||
{
|
||||
modelessDlg = new CycleBgEnForm(waterMeters, TBF.Data.LineSize, myCfg.BgTitle, myCfg.BgSize, myCfg.BgIsLrOrder, myCfg.BgIsCameraPicture,
|
||||
myCfg.BgFormCloseKeys, DEItem.GetItems(), DEItem.GetColumns(), false);
|
||||
myCfg.BgFormCloseKeys, DEItem.GetItems(), DEItem.GetColumns(), myCfg.BgIsAutoReadingSerialNo, myCfg.BgAutoCloseGap, false);
|
||||
}
|
||||
modelessDlg.Show();
|
||||
}
|
||||
@ -273,7 +273,7 @@ namespace TBF.Rig.DataEntry.Uni
|
||||
}
|
||||
|
||||
modelessDlg = new CycleBgEnForm(waterMeters, TBF.Data.LineSize, myCfg.EnTitle, myCfg.EnSize, myCfg.EnIsLrOrder, myCfg.EnIsCameraPicture,
|
||||
myCfg.EnFormCloseKeys, DEItem.GetItems(), DEItem.GetColumns(), true);
|
||||
myCfg.EnFormCloseKeys, DEItem.GetItems(), DEItem.GetColumns(), myCfg.BgIsAutoReadingSerialNo, myCfg.BgAutoCloseGap, true);
|
||||
modelessDlg.Show();
|
||||
}
|
||||
///
|
||||
@ -295,7 +295,8 @@ namespace TBF.Rig.DataEntry.Uni
|
||||
modelessDlg = new TestStartEndForm(waterMeters, myRef.regReaders, TBF.Data.LineSize, myCfg.TestTitle, myCfg.TestSize,
|
||||
myCfg.TestStartBoxAlwaysEn, myCfg.TestIsLrOrder, myCfg.TestFormCloseKeys,
|
||||
DEItem.GetColumns(), isCompound, volumeUnit, myCfg.TestIsCameraPicture,
|
||||
startImages, endImages, ocr, ocrMessage, myRef.OcrStream);
|
||||
startImages,endImages, ocr, ocrMessage, myRef.OcrStream,
|
||||
myCfg.BgIsAutoReadingSerialNo, myCfg.BgAutoCloseGap);
|
||||
modelessDlg.Show();
|
||||
}
|
||||
///
|
||||
@ -317,7 +318,7 @@ namespace TBF.Rig.DataEntry.Uni
|
||||
modelessDlg = new TestStartEndForm(waterMeters, myRef.regReaders, TBF.Data.LineSize, myCfg.TestTitle, myCfg.TestSize,
|
||||
myCfg.TestStartBoxAlwaysEn, myCfg.TestIsLrOrder, myCfg.TestFormCloseKeys, DEItem.GetColumns(),
|
||||
isCompound, volumeUnit, myCfg.TestIsCameraPicture, startImages, endImages,
|
||||
ocr, ocrMessage, myRef.OcrStream, wmStartStateStr, refVolume, errLimLo, errLimHi);
|
||||
ocr, ocrMessage, myRef.OcrStream, myCfg.BgIsAutoReadingSerialNo, myCfg.BgAutoCloseGap, wmStartStateStr, refVolume, errLimLo, errLimHi);
|
||||
modelessDlg.Show();
|
||||
}
|
||||
///
|
||||
@ -339,7 +340,7 @@ namespace TBF.Rig.DataEntry.Uni
|
||||
modelessDlg = new TestStartEndForm(waterMeters, myRef.regReaders, TBF.Data.LineSize, myCfg.TestTitle, myCfg.TestSize,
|
||||
myCfg.TestStartBoxAlwaysEn, myCfg.TestIsLrOrder, myCfg.TestFormCloseKeys, DEItem.GetColumns(),
|
||||
isCompound, volumeUnit, myCfg.TestIsCameraPicture, startImages, endImages,
|
||||
ocr, ocrMessage, myRef.OcrStream, wmStartStateStr, refVolume, errLimLo, errLimHi);
|
||||
ocr, ocrMessage, myRef.OcrStream, myCfg.BgIsAutoReadingSerialNo,myCfg.BgAutoCloseGap, wmStartStateStr, refVolume, errLimLo, errLimHi);
|
||||
modelessDlg.Show();
|
||||
}
|
||||
///
|
||||
|
||||
@ -62,6 +62,17 @@ namespace TBF.Rig.DataEntry.Uni
|
||||
readonly double refVolume;
|
||||
readonly double warningLimLo; /// limit to display exclamation mark, typically 2x errLimLo
|
||||
readonly double warningLimHi; /// limit to display exclamation mark, typically 2x errLimHi
|
||||
|
||||
private bool _readDataFromRegReaders = true;
|
||||
/// <summary>
|
||||
/// automaticly read serial number from register reader
|
||||
/// </summary>
|
||||
bool bAutoRead;
|
||||
///<summary>
|
||||
///autoclose disabled by default, if > 0 is enabled
|
||||
/// - in seconds
|
||||
/// </summary>
|
||||
int iAutocloseGap;
|
||||
|
||||
/// Derived from arguments in the constructor
|
||||
readonly bool isEnd;
|
||||
@ -156,7 +167,7 @@ namespace TBF.Rig.DataEntry.Uni
|
||||
public TestStartEndForm(IList<WaterMeter> waterMeters, IRegReader[] regReaders, int _lineSize, string title, FontSz sz,
|
||||
bool isStartBoxAlwaysEn, bool isLrOrder, string formCloseKeys, IList<DEItem> colItems, bool isCompound,
|
||||
Unit initialVolumeUnit, bool isCameraPicture, string[] startImages, string[] endImages,
|
||||
OcrVidi ocrVidi, string ocrMessage, string streamName, string[] wmStartStateStr = null,
|
||||
OcrVidi ocrVidi, string ocrMessage, string streamName, bool bAutoRead, int iAutocloseGap, string[] wmStartStateStr = null,
|
||||
double refVolume = 0, double errLimLo = 0, double errLimHi = 0)
|
||||
: this()
|
||||
{
|
||||
@ -181,6 +192,8 @@ namespace TBF.Rig.DataEntry.Uni
|
||||
this.refVolume = refVolume;
|
||||
this.warningLimLo = 2 * errLimLo;
|
||||
this.warningLimHi = 2 * errLimHi;
|
||||
this.bAutoRead = bAutoRead;
|
||||
this.iAutocloseGap = iAutocloseGap;
|
||||
|
||||
if (waterMeters == null || regReaders == null ||
|
||||
(wmStartStateStr != null && wmStartStateStr.Length != (isCompound ? 2 : 1) * waterMeters.Count))
|
||||
@ -570,7 +583,7 @@ namespace TBF.Rig.DataEntry.Uni
|
||||
|
||||
}
|
||||
|
||||
if (_readDataFromRegReaders)
|
||||
if (bAutoRead)
|
||||
{
|
||||
log.Debug($"Reading serial numbers from register readers... IsEnd: {isEnd}");
|
||||
this.VolumeStartReadbyRegReader += (s, eArgs) =>
|
||||
@ -630,10 +643,10 @@ namespace TBF.Rig.DataEntry.Uni
|
||||
this.unitComboBox.Enabled = GetStoredOrDefault("unitComboBox");
|
||||
Cursor.Current = _previousCursor;
|
||||
|
||||
//if (ShowDialogType == ShowDialogType.ContinueAutomatically)
|
||||
//{
|
||||
if (iAutocloseGap > 0)
|
||||
{
|
||||
AutoClickOkAfterDelay();
|
||||
//}
|
||||
}
|
||||
}
|
||||
|
||||
public void UpdateVolume(IRegReader eArgsReader, double eArgsVolume)
|
||||
@ -667,40 +680,30 @@ namespace TBF.Rig.DataEntry.Uni
|
||||
: new List<Ct> { Ct.StartState, Ct.StartStateAux };
|
||||
|
||||
double VolumeRaw = eArgsVolume;
|
||||
double v = eArgsVolume;
|
||||
// Test and compensate roll over
|
||||
if (isEnd)
|
||||
{
|
||||
if (eArgsReader != null && (!Double.IsNaN(eArgsReader.BeginWMState)))
|
||||
{
|
||||
double lastMod = eArgsReader.BeginWMState % VOL_RANGE_LITERS;
|
||||
if (lastMod < 0) lastMod += VOL_RANGE_LITERS;
|
||||
|
||||
double delta = v - lastMod;
|
||||
|
||||
// choose the shortest jump across the modulo boundary
|
||||
if (delta < -VOL_RANGE_LITERS / 2.0) delta += VOL_RANGE_LITERS;
|
||||
else if (delta > VOL_RANGE_LITERS / 2.0) delta -= VOL_RANGE_LITERS;
|
||||
|
||||
VolumeRaw = eArgsReader.BeginWMState + delta;
|
||||
log.Debug($"Roll over detected: {eArgsReader.Name} - {eArgsReader.BeginWMState} -> {VolumeRaw}");
|
||||
if (eArgsReader.BeginWMState > VolumeRaw) //Do RollOver
|
||||
{
|
||||
VolumeRaw = eArgsVolume + VOL_RANGE_LITERS;
|
||||
log.Debug(
|
||||
$"Roll over detected: {eArgsReader.Name} - {eArgsReader.BeginWMState} -> {VolumeRaw}");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//volume from form
|
||||
Double beginVolume = findBeginStateFromForm();
|
||||
|
||||
double lastMod = beginVolume % VOL_RANGE_LITERS;
|
||||
if (lastMod < 0) lastMod += VOL_RANGE_LITERS;
|
||||
|
||||
double delta = v - lastMod;
|
||||
|
||||
// choose the shortest jump across the modulo boundary
|
||||
if (delta < -VOL_RANGE_LITERS / 2.0) delta += VOL_RANGE_LITERS;
|
||||
else if (delta > VOL_RANGE_LITERS / 2.0) delta -= VOL_RANGE_LITERS;
|
||||
|
||||
VolumeRaw = beginVolume + delta;
|
||||
log.Debug($"Roll over detected: {eArgsReader.Name} - {eArgsReader.BeginWMState} -> {VolumeRaw}");
|
||||
|
||||
if (beginVolume > VolumeRaw) //Do RollOver
|
||||
{
|
||||
VolumeRaw = eArgsVolume + VOL_RANGE_LITERS;
|
||||
log.Debug(
|
||||
$"Begin from Form! Roll over detected: {eArgsReader.Name} - {beginVolume} -> {VolumeRaw}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1392,7 +1395,7 @@ namespace TBF.Rig.DataEntry.Uni
|
||||
Font largeFont = new Font("arial", 24.0F, FontStyle.Bold); /// normal image
|
||||
Font smallFont = new Font("arial", 12.0F, FontStyle.Bold);
|
||||
|
||||
private bool _readDataFromRegReaders = true;
|
||||
|
||||
|
||||
/// zoomed image
|
||||
|
||||
|
||||
@ -78,6 +78,8 @@ namespace TBFTests.Rig.DataEntry.Uni
|
||||
ocrVidi: null,
|
||||
ocrMessage: "",
|
||||
streamName: "",
|
||||
bAutoRead: false,
|
||||
iAutocloseGap: 0,
|
||||
wmStartStateStr: wmStartStateStr,
|
||||
refVolume: 0,
|
||||
errLimLo: 0,
|
||||
|
||||
Loading…
Reference in New Issue
Block a user