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
|
// Build Number
|
||||||
// Revision
|
// Revision
|
||||||
//
|
//
|
||||||
[assembly: AssemblyVersion("3.9.2215.1")]
|
[assembly: AssemblyVersion("3.9.2218.1")]
|
||||||
[assembly: AssemblyFileVersion("3.9.2015.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
|
readonly CheckBox[] checkBoxes; /// Check boxes for water meter enable/disable
|
||||||
///
|
///
|
||||||
bool readSerialNoByRegisterReader = true;
|
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;
|
readonly MultiPurposeBtnFunction multiPurposeButtonFn;
|
||||||
bool multiPurposeButtonFlag;
|
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="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>
|
/// <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,
|
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()
|
: this()
|
||||||
{
|
{
|
||||||
/// Arguments
|
/// Arguments
|
||||||
@ -106,6 +116,9 @@ namespace TBF.Rig.DataEntry.Uni
|
|||||||
this.colItems = colItems;
|
this.colItems = colItems;
|
||||||
this.isEnd = isEnd;
|
this.isEnd = isEnd;
|
||||||
|
|
||||||
|
this.bAutoRead = AutoRead;
|
||||||
|
this.iAutocloseGap = AutoCloseGap; //autoclose disabled by default, if > 0 is enabled
|
||||||
|
|
||||||
/// Preserve column items for use in SummaryResults
|
/// Preserve column items for use in SummaryResults
|
||||||
if (!isEnd)
|
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)
|
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, b)
|
: this(waterMeters, title, myCfgBgTitle, myCfgBgSize, myCfgBgIsLrOrder, myCfgBgIsCameraPicture, myCfgBgFormCloseKeys, getItems, getColumns,AutoRead,AutoCloseGap, b)
|
||||||
{
|
{
|
||||||
this.regReaders = regReaders;
|
this.regReaders = regReaders;
|
||||||
|
if (bAutoRead)
|
||||||
|
{
|
||||||
|
ReadAndProcessSerialNumbersByRegReader();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -704,26 +720,11 @@ namespace TBF.Rig.DataEntry.Uni
|
|||||||
|
|
||||||
char[] digits = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
|
char[] digits = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
|
||||||
|
|
||||||
if (readSerialNoByRegisterReader)
|
// if (readSerialNoByRegisterReader)
|
||||||
{
|
// {
|
||||||
log.Debug("Reading serial numbers from register readers...");
|
// Task.Run(() => ReadAndProcessSerialNumbersByRegReader());
|
||||||
this.SerialNumberRead += (s, eArgs) =>
|
// }
|
||||||
{
|
// else
|
||||||
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
|
|
||||||
{
|
{
|
||||||
///
|
///
|
||||||
/// Find a column with serial numbers
|
/// 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)
|
private void UpdateSomethingBySerial(IRegReader eReader, string eSerialNumber)
|
||||||
{
|
{
|
||||||
log.Debug($"RegReader name: {eReader.Name}, Serial No updated: " + eSerialNumber);
|
log.Debug($"RegReader name: {eReader.Name}, Serial No updated: " + eSerialNumber);
|
||||||
@ -840,19 +860,57 @@ namespace TBF.Rig.DataEntry.Uni
|
|||||||
|
|
||||||
_previousCursor = Cursor.Current;
|
_previousCursor = Cursor.Current;
|
||||||
Cursor.Current = Cursors.WaitCursor;
|
Cursor.Current = Cursors.WaitCursor;
|
||||||
|
|
||||||
|
|
||||||
|
//Enable all checkboxes
|
||||||
|
|
||||||
|
for (int firstIx = 0; firstIx < wmsCount; firstIx++)
|
||||||
|
{
|
||||||
|
checkBoxes[firstIx].Checked = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
private void DoneUpdate()
|
private void DoneUpdate()
|
||||||
{
|
{
|
||||||
log.Debug("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.okButton.Enabled = GetStoredOrDefault("okButton");
|
||||||
this.clearButton.Enabled = GetStoredOrDefault("clearButton");
|
this.clearButton.Enabled = GetStoredOrDefault("clearButton");
|
||||||
this.multiPurposeButton.Enabled = GetStoredOrDefault("multiPurposeButton");
|
this.multiPurposeButton.Enabled = GetStoredOrDefault("multiPurposeButton");
|
||||||
Cursor.Current = _previousCursor;
|
Cursor.Current = _previousCursor;
|
||||||
|
|
||||||
//if (ShowDialogType == ShowDialogType.ContinueAutomatically)
|
if (iAutocloseGap > 0)
|
||||||
//{
|
{
|
||||||
AutoClickOkAfterDelay();
|
AutoClickOkAfterDelay(iAutocloseGap * 1000);
|
||||||
//}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void PopulateComboBoxWithSerialNumbers( IRegReader eReader, string eSerialNumber)
|
private void PopulateComboBoxWithSerialNumbers( IRegReader eReader, string eSerialNumber)
|
||||||
@ -1084,7 +1142,20 @@ namespace TBF.Rig.DataEntry.Uni
|
|||||||
|
|
||||||
public async void ReadSerialNumbersAsync(IEnumerable<IRegReader> regReaders)
|
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
|
try
|
||||||
{
|
{
|
||||||
@ -1093,6 +1164,9 @@ namespace TBF.Rig.DataEntry.Uni
|
|||||||
.GroupBy(r => r.Group)
|
.GroupBy(r => r.Group)
|
||||||
.OrderBy(g => g.Key);
|
.OrderBy(g => g.Key);
|
||||||
|
|
||||||
|
if (groups != null)
|
||||||
|
log.Debug($"Reading-> groups.length({groups.Count()})");
|
||||||
|
|
||||||
foreach (var group in groups)
|
foreach (var group in groups)
|
||||||
{
|
{
|
||||||
var subGroups = group
|
var subGroups = group
|
||||||
|
|||||||
@ -41,8 +41,10 @@ namespace TBF.Rig.DataEntry.Uni
|
|||||||
public bool BgIsLrOrder; /// 5
|
public bool BgIsLrOrder; /// 5
|
||||||
public bool BgIsCameraPicture; /// 6
|
public bool BgIsCameraPicture; /// 6
|
||||||
public string BgFormCloseKeys; /// 7
|
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 string EnTitle; /// 9
|
||||||
public FontSz EnSize; /// 10
|
public FontSz EnSize; /// 10
|
||||||
// int EnItemsCount; /// 11
|
// int EnItemsCount; /// 11
|
||||||
@ -60,7 +62,7 @@ namespace TBF.Rig.DataEntry.Uni
|
|||||||
public bool TestIsCameraPicture; /// 22
|
public bool TestIsCameraPicture; /// 22
|
||||||
public string TestStartPicName; /// 23
|
public string TestStartPicName; /// 23
|
||||||
public string TestEndPicName; /// 24
|
public string TestEndPicName; /// 24
|
||||||
public string TestFormCloseKeys; /// 25
|
public string TestFormCloseKeys; /// 25 + 2
|
||||||
|
|
||||||
public Ct[] BgItemContent; /// 26 + 4 * ix
|
public Ct[] BgItemContent; /// 26 + 4 * ix
|
||||||
public string[] BgItemCaption; /// 27 + 4 * ix
|
public string[] BgItemCaption; /// 27 + 4 * ix
|
||||||
@ -343,6 +345,8 @@ namespace TBF.Rig.DataEntry.Uni
|
|||||||
BgIsLrOrder = false;
|
BgIsLrOrder = false;
|
||||||
BgIsCameraPicture = false;
|
BgIsCameraPicture = false;
|
||||||
BgFormCloseKeys = string.Empty;
|
BgFormCloseKeys = string.Empty;
|
||||||
|
BgIsAutoReadingSerialNo = false;
|
||||||
|
BgAutoCloseGap = 10;
|
||||||
|
|
||||||
EnShowForm = false;
|
EnShowForm = false;
|
||||||
EnTitle = "Enter water meter data";
|
EnTitle = "Enter water meter data";
|
||||||
@ -389,16 +393,18 @@ namespace TBF.Rig.DataEntry.Uni
|
|||||||
|
|
||||||
string[] paramNames = new string[]
|
string[] paramNames = new string[]
|
||||||
{
|
{
|
||||||
"Beginning: Show form",
|
"Beginning: Show form", //0
|
||||||
"Beginning: Form title",
|
"Beginning: Form title", //1
|
||||||
"Beginning: Font ize",
|
"Beginning: Font ize", //2
|
||||||
"Beginning: Common items count",
|
"Beginning: Common items count",//3
|
||||||
"Beginning: Columns count",
|
"Beginning: Columns count",
|
||||||
"Beginning: Left-to-right order",
|
"Beginning: Left-to-right order",
|
||||||
"Beginning: Show camera picture",
|
"Beginning: Show camera picture",
|
||||||
"Beginning: Keys to close the form",
|
"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: Form title",
|
||||||
"End: Font size",
|
"End: Font size",
|
||||||
"End: Common items count",
|
"End: Common items count",
|
||||||
@ -508,17 +514,18 @@ namespace TBF.Rig.DataEntry.Uni
|
|||||||
case 0:
|
case 0:
|
||||||
case 5:
|
case 5:
|
||||||
case 6:
|
case 6:
|
||||||
case 8:
|
case 8: //new auto read SerialNo
|
||||||
case 13:
|
case 10: //8+2
|
||||||
case 14:
|
case 15:
|
||||||
case 16:
|
case 16:
|
||||||
case 20:
|
case 18:
|
||||||
case 21:
|
|
||||||
case 22:
|
case 22:
|
||||||
|
case 23:
|
||||||
|
case 24:
|
||||||
return new string[] { Strings.yes, Strings.no };
|
return new string[] { Strings.yes, Strings.no };
|
||||||
case 2:
|
case 2:
|
||||||
case 10:
|
case 12:
|
||||||
case 18:
|
case 20:
|
||||||
for (FontSz sz = 0; sz < FontSz.Count; sz++) list.Add(sz.ToDescription());
|
for (FontSz sz = 0; sz < FontSz.Count; sz++) list.Add(sz.ToDescription());
|
||||||
return list;
|
return list;
|
||||||
default:
|
default:
|
||||||
@ -596,26 +603,28 @@ namespace TBF.Rig.DataEntry.Uni
|
|||||||
case 5: return BgIsLrOrder ? Strings.yes : Strings.no;
|
case 5: return BgIsLrOrder ? Strings.yes : Strings.no;
|
||||||
case 6: return BgIsCameraPicture ? Strings.yes : Strings.no;
|
case 6: return BgIsCameraPicture ? Strings.yes : Strings.no;
|
||||||
case 7: return BgFormCloseKeys;
|
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 10: return EnShowForm ? Strings.yes : Strings.no;
|
||||||
case 9: return EnTitle;
|
case 11: return EnTitle;
|
||||||
case 10: return EnSize.ToDescription();
|
case 12: return EnSize.ToDescription();
|
||||||
case 11: return GetEnItemsCount().ToString();
|
case 13: return GetEnItemsCount().ToString();
|
||||||
case 12: return GetEnColumnsCount().ToString();
|
case 14: return GetEnColumnsCount().ToString();
|
||||||
case 13: return EnIsLrOrder ? Strings.yes : Strings.no;
|
case 15: return EnIsLrOrder ? Strings.yes : Strings.no;
|
||||||
case 14: return EnIsCameraPicture ? Strings.yes : Strings.no;
|
case 16: return EnIsCameraPicture ? Strings.yes : Strings.no;
|
||||||
case 15: return EnFormCloseKeys;
|
case 17: return EnFormCloseKeys;
|
||||||
|
|
||||||
case 16: return TestStartEndShowForm ? Strings.yes : Strings.no;
|
case 18: return TestStartEndShowForm ? Strings.yes : Strings.no;
|
||||||
case 17: return TestTitle;
|
case 19: return TestTitle;
|
||||||
case 18: return TestSize.ToDescription();
|
case 20: return TestSize.ToDescription();
|
||||||
case 19: return GetTestColumnsCount().ToString();
|
case 21: return GetTestColumnsCount().ToString();
|
||||||
case 20: return TestStartBoxAlwaysEn ? Strings.yes : Strings.no;
|
case 22: return TestStartBoxAlwaysEn ? Strings.yes : Strings.no;
|
||||||
case 21: return TestIsLrOrder ? Strings.yes : Strings.no;
|
case 23: return TestIsLrOrder ? Strings.yes : Strings.no;
|
||||||
case 22: return TestIsCameraPicture ? Strings.yes : Strings.no;
|
case 24: return TestIsCameraPicture ? Strings.yes : Strings.no;
|
||||||
case 23: return TestStartPicName;
|
case 25: return TestStartPicName;
|
||||||
case 24: return TestEndPicName;
|
case 26: return TestEndPicName;
|
||||||
case 25: return TestFormCloseKeys;
|
case 27: return TestFormCloseKeys;
|
||||||
|
|
||||||
default: return string.Empty;
|
default: return string.Empty;
|
||||||
}
|
}
|
||||||
@ -714,10 +723,12 @@ namespace TBF.Rig.DataEntry.Uni
|
|||||||
case 5: BgIsLrOrder = (str == Strings.yes); return CfgUpdateFlags.RestartRqrd;
|
case 5: BgIsLrOrder = (str == Strings.yes); return CfgUpdateFlags.RestartRqrd;
|
||||||
case 6: BgIsCameraPicture = (str == Strings.yes); return CfgUpdateFlags.RestartRqrd;
|
case 6: BgIsCameraPicture = (str == Strings.yes); return CfgUpdateFlags.RestartRqrd;
|
||||||
case 7: BgFormCloseKeys = str; return CfgUpdateFlags.RestartRqrd;
|
case 7: BgFormCloseKeys = str; return CfgUpdateFlags.RestartRqrd;
|
||||||
|
case 8: BgIsAutoReadingSerialNo = (str == Strings.yes); return CfgUpdateFlags.RestartRqrd;
|
||||||
|
case 9: BgAutoCloseGap = int.Parse(str); return CfgUpdateFlags.RestartRqrd;
|
||||||
|
|
||||||
case 8: EnShowForm = (str == Strings.yes); return CfgUpdateFlags.RestartRqrd;
|
case 10: EnShowForm = (str == Strings.yes); return CfgUpdateFlags.RestartRqrd;
|
||||||
case 9: EnTitle = str; return CfgUpdateFlags.RestartRqrd;
|
case 11: EnTitle = str; return CfgUpdateFlags.RestartRqrd;
|
||||||
case 10:
|
case 12:
|
||||||
for (FontSz sz = 0; sz < FontSz.Count; sz++)
|
for (FontSz sz = 0; sz < FontSz.Count; sz++)
|
||||||
{
|
{
|
||||||
if (str == sz.ToDescription())
|
if (str == sz.ToDescription())
|
||||||
@ -727,15 +738,15 @@ namespace TBF.Rig.DataEntry.Uni
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
return CfgUpdateFlags.None;
|
return CfgUpdateFlags.None;
|
||||||
case 11: SetEnItemsCount(int.Parse(str)); return CfgUpdateFlags.RestartRqrd;
|
case 13: SetEnItemsCount(int.Parse(str)); return CfgUpdateFlags.RestartRqrd;
|
||||||
case 12: SetEnColumnsCount(int.Parse(str)); return CfgUpdateFlags.RestartRqrd;
|
case 14: SetEnColumnsCount(int.Parse(str)); return CfgUpdateFlags.RestartRqrd;
|
||||||
case 13: EnIsLrOrder = (str == Strings.yes); return CfgUpdateFlags.RestartRqrd;
|
case 15: EnIsLrOrder = (str == Strings.yes); return CfgUpdateFlags.RestartRqrd;
|
||||||
case 14: EnIsCameraPicture = (str == Strings.yes); return CfgUpdateFlags.RestartRqrd;
|
case 16: EnIsCameraPicture = (str == Strings.yes); return CfgUpdateFlags.RestartRqrd;
|
||||||
case 15: EnFormCloseKeys = str; return CfgUpdateFlags.RestartRqrd;
|
case 17: EnFormCloseKeys = str; return CfgUpdateFlags.RestartRqrd;
|
||||||
|
|
||||||
case 16: TestStartEndShowForm = (str == Strings.yes); return CfgUpdateFlags.RestartRqrd;
|
case 18: TestStartEndShowForm = (str == Strings.yes); return CfgUpdateFlags.RestartRqrd;
|
||||||
case 17: TestTitle = str; return CfgUpdateFlags.RestartRqrd;
|
case 19: TestTitle = str; return CfgUpdateFlags.RestartRqrd;
|
||||||
case 18:
|
case 20:
|
||||||
for (FontSz sz = 0; sz < FontSz.Count; sz++)
|
for (FontSz sz = 0; sz < FontSz.Count; sz++)
|
||||||
{
|
{
|
||||||
if (str == sz.ToDescription())
|
if (str == sz.ToDescription())
|
||||||
@ -745,13 +756,13 @@ namespace TBF.Rig.DataEntry.Uni
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
return CfgUpdateFlags.None;
|
return CfgUpdateFlags.None;
|
||||||
case 19: SetTestColumnsCount(int.Parse(str)); return CfgUpdateFlags.RestartRqrd;
|
case 21: SetTestColumnsCount(int.Parse(str)); return CfgUpdateFlags.RestartRqrd;
|
||||||
case 20: TestStartBoxAlwaysEn = (str == Strings.yes); return CfgUpdateFlags.RestartRqrd;
|
case 22: TestStartBoxAlwaysEn = (str == Strings.yes); return CfgUpdateFlags.RestartRqrd;
|
||||||
case 21: TestIsLrOrder = (str == Strings.yes); return CfgUpdateFlags.RestartRqrd;
|
case 23: TestIsLrOrder = (str == Strings.yes); return CfgUpdateFlags.RestartRqrd;
|
||||||
case 22: TestIsCameraPicture = (str == Strings.yes); return CfgUpdateFlags.RestartRqrd;
|
case 24: TestIsCameraPicture = (str == Strings.yes); return CfgUpdateFlags.RestartRqrd;
|
||||||
case 23: TestStartPicName = str; return CfgUpdateFlags.RestartRqrd;
|
case 25: TestStartPicName = str; return CfgUpdateFlags.RestartRqrd;
|
||||||
case 24: TestEndPicName = str; return CfgUpdateFlags.RestartRqrd;
|
case 26: TestEndPicName = str; return CfgUpdateFlags.RestartRqrd;
|
||||||
case 25: TestFormCloseKeys = str; return CfgUpdateFlags.RestartRqrd;
|
case 27: TestFormCloseKeys = str; return CfgUpdateFlags.RestartRqrd;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return CfgUpdateFlags.None;
|
return CfgUpdateFlags.None;
|
||||||
@ -872,34 +883,36 @@ namespace TBF.Rig.DataEntry.Uni
|
|||||||
case 2:
|
case 2:
|
||||||
case 5:
|
case 5:
|
||||||
case 6:
|
case 6:
|
||||||
case 8:
|
case 8://Auto close - yes/No
|
||||||
case 10:
|
case 10://8+2
|
||||||
case 13:
|
case 12:
|
||||||
case 14:
|
case 15:
|
||||||
case 16:
|
case 16:
|
||||||
case 18:
|
case 18:
|
||||||
case 20:
|
case 20:
|
||||||
case 21:
|
|
||||||
case 22:
|
case 22:
|
||||||
|
case 23:
|
||||||
|
case 24:
|
||||||
message = string.Empty;
|
message = string.Empty;
|
||||||
if (ParamValues(i).Contains(str)) return true;
|
if (ParamValues(i).Contains(str)) return true;
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
case 4:
|
case 4:
|
||||||
case 11:
|
case 9: //Gap AutoClose
|
||||||
case 12:
|
case 13:
|
||||||
case 19:
|
case 14:
|
||||||
|
case 21:
|
||||||
message = string.Empty;
|
message = string.Empty;
|
||||||
if (int.TryParse(str, out idummy)) return true;
|
if (int.TryParse(str, out idummy)) return true;
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
case 7:
|
case 7:
|
||||||
case 9:
|
case 11:
|
||||||
case 15:
|
|
||||||
case 17:
|
case 17:
|
||||||
case 23:
|
case 19:
|
||||||
case 24:
|
|
||||||
case 25:
|
case 25:
|
||||||
|
case 26:
|
||||||
|
case 27:
|
||||||
message = string.Empty;
|
message = string.Empty;
|
||||||
return true;
|
return true;
|
||||||
default:
|
default:
|
||||||
@ -942,6 +955,8 @@ namespace TBF.Rig.DataEntry.Uni
|
|||||||
prms.BgIsLrOrder = BgIsLrOrder;
|
prms.BgIsLrOrder = BgIsLrOrder;
|
||||||
prms.BgIsCameraPicture = BgIsCameraPicture;
|
prms.BgIsCameraPicture = BgIsCameraPicture;
|
||||||
prms.BgFormCloseKeys = BgFormCloseKeys;
|
prms.BgFormCloseKeys = BgFormCloseKeys;
|
||||||
|
prms.BgIsAutoReadingSerialNo = BgIsAutoReadingSerialNo;
|
||||||
|
prms.BgAutoCloseGap = BgAutoCloseGap;
|
||||||
|
|
||||||
prms.EnShowForm = EnShowForm;
|
prms.EnShowForm = EnShowForm;
|
||||||
prms.EnTitle = EnTitle;
|
prms.EnTitle = EnTitle;
|
||||||
|
|||||||
@ -239,12 +239,12 @@ namespace TBF.Rig.DataEntry.Uni
|
|||||||
if (regReaders != null)
|
if (regReaders != null)
|
||||||
{
|
{
|
||||||
modelessDlg = new CycleBgEnForm(waterMeters, regReaders, TBF.Data.LineSize, myCfg.BgTitle, myCfg.BgSize, myCfg.BgIsLrOrder, myCfg.BgIsCameraPicture,
|
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
|
else
|
||||||
{
|
{
|
||||||
modelessDlg = new CycleBgEnForm(waterMeters, TBF.Data.LineSize, myCfg.BgTitle, myCfg.BgSize, myCfg.BgIsLrOrder, myCfg.BgIsCameraPicture,
|
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();
|
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,
|
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();
|
modelessDlg.Show();
|
||||||
}
|
}
|
||||||
///
|
///
|
||||||
@ -295,7 +295,8 @@ namespace TBF.Rig.DataEntry.Uni
|
|||||||
modelessDlg = new TestStartEndForm(waterMeters, myRef.regReaders, TBF.Data.LineSize, myCfg.TestTitle, myCfg.TestSize,
|
modelessDlg = new TestStartEndForm(waterMeters, myRef.regReaders, TBF.Data.LineSize, myCfg.TestTitle, myCfg.TestSize,
|
||||||
myCfg.TestStartBoxAlwaysEn, myCfg.TestIsLrOrder, myCfg.TestFormCloseKeys,
|
myCfg.TestStartBoxAlwaysEn, myCfg.TestIsLrOrder, myCfg.TestFormCloseKeys,
|
||||||
DEItem.GetColumns(), isCompound, volumeUnit, myCfg.TestIsCameraPicture,
|
DEItem.GetColumns(), isCompound, volumeUnit, myCfg.TestIsCameraPicture,
|
||||||
startImages, endImages, ocr, ocrMessage, myRef.OcrStream);
|
startImages,endImages, ocr, ocrMessage, myRef.OcrStream,
|
||||||
|
myCfg.BgIsAutoReadingSerialNo, myCfg.BgAutoCloseGap);
|
||||||
modelessDlg.Show();
|
modelessDlg.Show();
|
||||||
}
|
}
|
||||||
///
|
///
|
||||||
@ -317,7 +318,7 @@ namespace TBF.Rig.DataEntry.Uni
|
|||||||
modelessDlg = new TestStartEndForm(waterMeters, myRef.regReaders, TBF.Data.LineSize, myCfg.TestTitle, myCfg.TestSize,
|
modelessDlg = new TestStartEndForm(waterMeters, myRef.regReaders, TBF.Data.LineSize, myCfg.TestTitle, myCfg.TestSize,
|
||||||
myCfg.TestStartBoxAlwaysEn, myCfg.TestIsLrOrder, myCfg.TestFormCloseKeys, DEItem.GetColumns(),
|
myCfg.TestStartBoxAlwaysEn, myCfg.TestIsLrOrder, myCfg.TestFormCloseKeys, DEItem.GetColumns(),
|
||||||
isCompound, volumeUnit, myCfg.TestIsCameraPicture, startImages, endImages,
|
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();
|
modelessDlg.Show();
|
||||||
}
|
}
|
||||||
///
|
///
|
||||||
@ -339,7 +340,7 @@ namespace TBF.Rig.DataEntry.Uni
|
|||||||
modelessDlg = new TestStartEndForm(waterMeters, myRef.regReaders, TBF.Data.LineSize, myCfg.TestTitle, myCfg.TestSize,
|
modelessDlg = new TestStartEndForm(waterMeters, myRef.regReaders, TBF.Data.LineSize, myCfg.TestTitle, myCfg.TestSize,
|
||||||
myCfg.TestStartBoxAlwaysEn, myCfg.TestIsLrOrder, myCfg.TestFormCloseKeys, DEItem.GetColumns(),
|
myCfg.TestStartBoxAlwaysEn, myCfg.TestIsLrOrder, myCfg.TestFormCloseKeys, DEItem.GetColumns(),
|
||||||
isCompound, volumeUnit, myCfg.TestIsCameraPicture, startImages, endImages,
|
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();
|
modelessDlg.Show();
|
||||||
}
|
}
|
||||||
///
|
///
|
||||||
|
|||||||
@ -63,6 +63,17 @@ namespace TBF.Rig.DataEntry.Uni
|
|||||||
readonly double warningLimLo; /// limit to display exclamation mark, typically 2x errLimLo
|
readonly double warningLimLo; /// limit to display exclamation mark, typically 2x errLimLo
|
||||||
readonly double warningLimHi; /// limit to display exclamation mark, typically 2x errLimHi
|
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
|
/// Derived from arguments in the constructor
|
||||||
readonly bool isEnd;
|
readonly bool isEnd;
|
||||||
readonly Tst mode; /// Start, End or Deferred
|
readonly Tst mode; /// Start, End or Deferred
|
||||||
@ -156,7 +167,7 @@ namespace TBF.Rig.DataEntry.Uni
|
|||||||
public TestStartEndForm(IList<WaterMeter> waterMeters, IRegReader[] regReaders, int _lineSize, string title, FontSz sz,
|
public TestStartEndForm(IList<WaterMeter> waterMeters, IRegReader[] regReaders, int _lineSize, string title, FontSz sz,
|
||||||
bool isStartBoxAlwaysEn, bool isLrOrder, string formCloseKeys, IList<DEItem> colItems, bool isCompound,
|
bool isStartBoxAlwaysEn, bool isLrOrder, string formCloseKeys, IList<DEItem> colItems, bool isCompound,
|
||||||
Unit initialVolumeUnit, bool isCameraPicture, string[] startImages, string[] endImages,
|
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)
|
double refVolume = 0, double errLimLo = 0, double errLimHi = 0)
|
||||||
: this()
|
: this()
|
||||||
{
|
{
|
||||||
@ -181,6 +192,8 @@ namespace TBF.Rig.DataEntry.Uni
|
|||||||
this.refVolume = refVolume;
|
this.refVolume = refVolume;
|
||||||
this.warningLimLo = 2 * errLimLo;
|
this.warningLimLo = 2 * errLimLo;
|
||||||
this.warningLimHi = 2 * errLimHi;
|
this.warningLimHi = 2 * errLimHi;
|
||||||
|
this.bAutoRead = bAutoRead;
|
||||||
|
this.iAutocloseGap = iAutocloseGap;
|
||||||
|
|
||||||
if (waterMeters == null || regReaders == null ||
|
if (waterMeters == null || regReaders == null ||
|
||||||
(wmStartStateStr != null && wmStartStateStr.Length != (isCompound ? 2 : 1) * waterMeters.Count))
|
(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}");
|
log.Debug($"Reading serial numbers from register readers... IsEnd: {isEnd}");
|
||||||
this.VolumeStartReadbyRegReader += (s, eArgs) =>
|
this.VolumeStartReadbyRegReader += (s, eArgs) =>
|
||||||
@ -630,10 +643,10 @@ namespace TBF.Rig.DataEntry.Uni
|
|||||||
this.unitComboBox.Enabled = GetStoredOrDefault("unitComboBox");
|
this.unitComboBox.Enabled = GetStoredOrDefault("unitComboBox");
|
||||||
Cursor.Current = _previousCursor;
|
Cursor.Current = _previousCursor;
|
||||||
|
|
||||||
//if (ShowDialogType == ShowDialogType.ContinueAutomatically)
|
if (iAutocloseGap > 0)
|
||||||
//{
|
{
|
||||||
AutoClickOkAfterDelay();
|
AutoClickOkAfterDelay();
|
||||||
//}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UpdateVolume(IRegReader eArgsReader, double eArgsVolume)
|
public void UpdateVolume(IRegReader eArgsReader, double eArgsVolume)
|
||||||
@ -667,40 +680,30 @@ namespace TBF.Rig.DataEntry.Uni
|
|||||||
: new List<Ct> { Ct.StartState, Ct.StartStateAux };
|
: new List<Ct> { Ct.StartState, Ct.StartStateAux };
|
||||||
|
|
||||||
double VolumeRaw = eArgsVolume;
|
double VolumeRaw = eArgsVolume;
|
||||||
double v = eArgsVolume;
|
|
||||||
// Test and compensate roll over
|
// Test and compensate roll over
|
||||||
if (isEnd)
|
if (isEnd)
|
||||||
{
|
{
|
||||||
if (eArgsReader != null && (!Double.IsNaN(eArgsReader.BeginWMState)))
|
if (eArgsReader != null && (!Double.IsNaN(eArgsReader.BeginWMState)))
|
||||||
{
|
{
|
||||||
double lastMod = eArgsReader.BeginWMState % VOL_RANGE_LITERS;
|
if (eArgsReader.BeginWMState > VolumeRaw) //Do RollOver
|
||||||
if (lastMod < 0) lastMod += VOL_RANGE_LITERS;
|
{
|
||||||
|
VolumeRaw = eArgsVolume + VOL_RANGE_LITERS;
|
||||||
double delta = v - lastMod;
|
log.Debug(
|
||||||
|
$"Roll over detected: {eArgsReader.Name} - {eArgsReader.BeginWMState} -> {VolumeRaw}");
|
||||||
// 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}");
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//volume from form
|
//volume from form
|
||||||
Double beginVolume = findBeginStateFromForm();
|
Double beginVolume = findBeginStateFromForm();
|
||||||
|
|
||||||
double lastMod = beginVolume % VOL_RANGE_LITERS;
|
|
||||||
if (lastMod < 0) lastMod += VOL_RANGE_LITERS;
|
|
||||||
|
|
||||||
double delta = v - lastMod;
|
if (beginVolume > VolumeRaw) //Do RollOver
|
||||||
|
{
|
||||||
// choose the shortest jump across the modulo boundary
|
VolumeRaw = eArgsVolume + VOL_RANGE_LITERS;
|
||||||
if (delta < -VOL_RANGE_LITERS / 2.0) delta += VOL_RANGE_LITERS;
|
log.Debug(
|
||||||
else if (delta > VOL_RANGE_LITERS / 2.0) delta -= VOL_RANGE_LITERS;
|
$"Begin from Form! Roll over detected: {eArgsReader.Name} - {beginVolume} -> {VolumeRaw}");
|
||||||
|
}
|
||||||
VolumeRaw = beginVolume + delta;
|
|
||||||
log.Debug($"Roll over detected: {eArgsReader.Name} - {eArgsReader.BeginWMState} -> {VolumeRaw}");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1392,7 +1395,7 @@ namespace TBF.Rig.DataEntry.Uni
|
|||||||
Font largeFont = new Font("arial", 24.0F, FontStyle.Bold); /// normal image
|
Font largeFont = new Font("arial", 24.0F, FontStyle.Bold); /// normal image
|
||||||
Font smallFont = new Font("arial", 12.0F, FontStyle.Bold);
|
Font smallFont = new Font("arial", 12.0F, FontStyle.Bold);
|
||||||
|
|
||||||
private bool _readDataFromRegReaders = true;
|
|
||||||
|
|
||||||
/// zoomed image
|
/// zoomed image
|
||||||
|
|
||||||
|
|||||||
@ -78,6 +78,8 @@ namespace TBFTests.Rig.DataEntry.Uni
|
|||||||
ocrVidi: null,
|
ocrVidi: null,
|
||||||
ocrMessage: "",
|
ocrMessage: "",
|
||||||
streamName: "",
|
streamName: "",
|
||||||
|
bAutoRead: false,
|
||||||
|
iAutocloseGap: 0,
|
||||||
wmStartStateStr: wmStartStateStr,
|
wmStartStateStr: wmStartStateStr,
|
||||||
refVolume: 0,
|
refVolume: 0,
|
||||||
errLimLo: 0,
|
errLimLo: 0,
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user