S640Communication : Results.entities.WaterMeter.RadioAddress string -> long, optional scanning of serial numbers

This commit is contained in:
Milan Hanajik 2021-10-15 14:48:52 +02:00
parent 5797e97e0f
commit 9aa41338ed
10 changed files with 3782 additions and 2979 deletions

View File

@ -44,7 +44,7 @@ namespace Results.Entities
public virtual int Id { get; protected set; }
public virtual string SerialNr { get; set; } /// S/N _or_ S/N of the main meter of a compound meter _or_ PCB Number of an iPerl water meter
public virtual string SerialNrAux { get; set; } /// S/N of the aux. meter of a compound meter _or_ a complete assigned S/N of an iPerl water meter
public virtual string RadioAddress { get; set; }
public virtual long RadioAddress { get; set; }
public virtual string PurchaseOrder { get; set; }
public virtual int YearOfProduction { get; set; }
public virtual int WMPosition { get; set; } /// 1-based water meter position

View File

@ -368,7 +368,7 @@ namespace Results
/// Water meters results
AllItems.Add(new WMeterRsltItemSpec(ItemID.Serial_Nr, Strings.sn, Strings.Tooltip_sn, Quantity.String, ItemCategory.MeterResult, (w, t, u, f, p) => FormatStr(f, w.SerialNr)));
AllItems.Add(new WMeterRsltItemSpec(ItemID.RadioAddress, Strings.Radio_address, Strings.Tooltip_RA, Quantity.String, ItemCategory.MeterResult, (w, t, u, f, p) => FormatStr(f, w.RadioAddress)));
AllItems.Add(new WMeterRsltItemSpec(ItemID.RadioAddress, Strings.Radio_address, Strings.Tooltip_RA, Quantity.String, ItemCategory.MeterResult, (w, t, u, f, p) => FormatStr(f, w.RadioAddress.ToString())));
AllItems.Add(new WMeterRsltItemSpec(ItemID.Purchase_order, Strings.PO, Quantity.String, ItemCategory.Other, (w, t, u, f, p) => FormatStr(f, w.PurchaseOrder)));
AllItems.Add(new WMeterRsltItemSpec(ItemID.Year_of_production, Strings.Year, Quantity.Number, ItemCategory.Other, (w, t, u, f, p) => FormatInt(f, w.YearOfProduction)));
AllItems.Add(new WMeterRsltItemSpec(ItemID.WM_Position, Strings.Pos, Quantity.Number, ItemCategory.Other, (w, t, u, f, p) => FormatInt(f, w.WMPosition)));

View File

@ -1225,64 +1225,67 @@ namespace TBF.BenchControl.Output.DB.SensusOracle
void SaveOrUpdateMechanicalMeter(OracleConnection conn, Results.Entities.WaterMeter wm, int max_Pruefindex, int hydr_Pruefung)
{
int idBenutzer = 6; // = wm.Batch.UserNumber;
string vt_identnummer = wm.SerialNr.Length > 8 ? wm.SerialNr.Substring(0, 8) : wm.SerialNr;
if (dbCfg.DebugLevel == DebugMode.Normal)
{
OracleCommand cmd = new OracleCommand("UPDATE vt_zaehler_pd " +
"SET auftragsnummer=:1, vt_identnummer=:2, max_pruefindex=:3, mbus_adr=:4, liegenschafts_nr=:5," +
" sekundaere_adr=:6, hydr_pruefung=:7, mark_date=:8, baujahr=:9, eich_jahr=:10, umkarton_nr=:11," +
" palette_nr=:12, zaehlernummer=:13, prefix=:14, suffix=:15, z_nr_komplett=:16, id_benutzer=:17 " +
"WHERE vt_fernum = :18 AND anbid = :19", conn);
"SET max_pruefindex=:1, vt_identnummer=:2, auftragsnummer=:3, vt_baugruppen_nr=:4, mbus_adr=:5, liegenschafts_nr=:6," +
" sekundaere_adr=:7, hydr_pruefung=:8, mark_date=:9, baujahr=:10, eich_jahr=:11, umkarton_nr=:12," +
" palette_nr=:13, zaehlernummer=:14, prefix=:15, suffix=:16, z_nr_komplett=:17, id_benutzer=:18 " +
"WHERE vt_fernum = :19 AND anbid = :20", conn);
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = wm.PurchaseOrder }); /// :1
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = "88888888" }); /// :2
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = max_Pruefindex }); /// :3
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = 0 }); /// :4 MBUS_ADR
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = 0 }); /// :5 LIEGENSCHAFTS_NR
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = 0 }); /// :6 Sekundaere_Adr
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = hydr_Pruefung }); /// :7
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.TimeStamp, Value = wm.Batch.EndTime }); /// :8
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = YearOfManufacture }); /// :9
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = YearOfManufacture }); /// :10
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = 0 }); /// :11 UMKARTON_NR
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = 0 }); /// :12 PALETTE_NR
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = wm.AssignedSerialNr }); /// :13
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = wm.Prefix }); /// :14
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = wm.Suffix }); /// :15
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = wm.CompleteSerialNr }); /// :16
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = idBenutzer }); /// :17
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = wm.SerialNr }); /// :18
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = Anbid_Producer }); /// :19
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = max_Pruefindex }); /// 1 max_pruefindex
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = vt_identnummer }); /// 2 vt_identnummer
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = wm.PurchaseOrder }); /// 3 auftragsnummer
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = wm.SerialNrAux }); /// 4 vt_baugruppen_nr
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = 0 }); /// 5 mbus_adr
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = 0 }); /// 6 liegenschafts_nr
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = Convert.ToInt32(wm.RadioAddress) }); /// 7 sekundaere_adr
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = hydr_Pruefung }); /// 8
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.TimeStamp, Value = wm.Batch.EndTime }); /// 9
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = YearOfManufacture }); /// 10
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = YearOfManufacture }); /// 11
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = 0 }); /// 12 umkarton_nr
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = 0 }); /// 13 palette_nr
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = wm.AssignedSerialNr }); /// 14
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = wm.Prefix }); /// 15
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = wm.Suffix }); /// 16
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = wm.CompleteSerialNr }); /// 17
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = idBenutzer }); /// 18
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = wm.SerialNr }); /// 19
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = Anbid_Producer }); /// 20
int updatedRows = cmd.ExecuteNonQuery();
int insertedRows = 0;
if (updatedRows == 0)
{
cmd = new OracleCommand("INSERT INTO vt_zaehler_pd(auftragsnummer, vt_identnummer, vt_fernum, max_pruefindex," +
cmd = new OracleCommand("INSERT INTO vt_zaehler_pd(vt_fernum, max_pruefindex, vt_identnummer, auftragsnummer, vt_baugruppen_nr," +
" mbus_adr, liegenschafts_nr, sekundaere_adr, hydr_pruefung, mark_date, baujahr, eich_jahr," +
" umkarton_nr, palette_nr, zaehlernummer, prefix, suffix, z_nr_komplett, anbid, id_benutzer) " +
"VALUES (:1, :2, :3, :4, :5, :6, :7, :8, :9, :10, :11, :12, :13, :14, :15, :16, :17, :18, :19)", conn);
"VALUES (:1, :2, :3, :4, :5, :6, :7, :8, :9, :10, :11, :12, :13, :14, :15, :16, :17, :18, :19, :20)", conn);
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = wm.PurchaseOrder }); /// :1
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = "88888888" }); /// :2
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = wm.SerialNr }); /// :3
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = max_Pruefindex }); /// :4
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = 0 }); /// :5 MBUS_ADR
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = 0 }); /// :6 LIEGENSCHAFTS_NR
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = 0 }); /// :7 Sekundaere_Adr
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = hydr_Pruefung }); /// :8
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.TimeStamp, Value = wm.Batch.EndTime }); /// :9
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = YearOfManufacture }); /// :10
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = YearOfManufacture }); /// :11
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = 0 }); /// :12 UMKARTON_NR
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = 0 }); /// :13 PALETTE_NR
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = wm.AssignedSerialNr }); /// :14
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = wm.Prefix }); /// :15
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = wm.Suffix }); /// :16
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = wm.CompleteSerialNr }); /// :17
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = Anbid_Producer }); /// :18
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = idBenutzer }); /// :19
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = wm.SerialNr }); /// 1 vt_fernum
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = max_Pruefindex }); /// 2 max_pruefindex
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = vt_identnummer }); /// 3 vt_identnummer
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = wm.PurchaseOrder }); /// 4 auftragsnummer
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = wm.SerialNrAux }); /// 5 vt_baugruppen_nr
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = 0 }); /// 6 mbus_adr
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = 0 }); /// 7 liegenschafts_nr
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = Convert.ToInt32(wm.RadioAddress) }); /// 8 sekundaere_adr
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = hydr_Pruefung }); /// 9
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.TimeStamp, Value = wm.Batch.EndTime }); /// 10
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = YearOfManufacture }); /// 11
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = YearOfManufacture }); /// 12
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = 0 }); /// 13 umkarton_nr
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = 0 }); /// 14 palette_nr
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = wm.AssignedSerialNr }); /// 15
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = wm.Prefix }); /// 16
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = wm.Suffix }); /// 17
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = wm.CompleteSerialNr }); /// 18
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = Anbid_Producer }); /// 19
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = idBenutzer }); /// 20
insertedRows = cmd.ExecuteNonQuery();
@ -1447,6 +1450,7 @@ namespace TBF.BenchControl.Output.DB.SensusOracle
"prefix, suffix, zaehlwerk, erfasst_am, sollende, zusatztext " +
"FROM vt_auftrag_pd " +
"WHERE produktion_anbid=:1 AND status='NEU' AND produktion_usestate=0", connection);
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = Anbid_Producer });
OracleDataReader dr = cmd.ExecuteReader();
@ -1493,6 +1497,7 @@ namespace TBF.BenchControl.Output.DB.SensusOracle
"prefix, suffix, zaehlwerk, erfasst_am, sollende, zusatztext " +
"FROM vt_auftrag_pd " +
"WHERE produktion_anbid=:1 AND status='AKTIV' AND produktion_usestate=0", connection);
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = Anbid_Producer });
dr = cmd.ExecuteReader();

View File

@ -1,4 +1,7 @@
using System;
///
/// Copyright (c) 2021 Sensus Slovensko a.s.
///
using System;
namespace TBF.BenchControl.TestMethods.S640Communication
{

View File

@ -1,6 +1,7 @@
///
/// Copyright (c) 2021 Sensus Slovensko a.s.
///
using System;
namespace TBF.BenchControl.TestMethods.S640Communication
{
@ -9,5 +10,6 @@ namespace TBF.BenchControl.TestMethods.S640Communication
int OptoDataTimeout { get; }
string FileExchangePath { get; }
int FileExchangeTimeout { get; }
bool EnterSerialNumbers { get; }
}
}

View File

@ -45,9 +45,11 @@ namespace TBF.BenchControl.TestMethods.S640Communication
/// Start
WatchOptoHeads,
SaveStartPro,
EnterSNsAndAwaitResponseToStartPro,
AwaitResponseToStartPro,
/// End
EnterSNs,
SaveEndePro,
AwaitResponseToEndePro,
ConfirmError,
@ -71,9 +73,11 @@ namespace TBF.BenchControl.TestMethods.S640Communication
int textBoxesCount;
///
bool[] enabledInConfiguration;
Label[] labels;
PictureBox[] pictures;
TextBox[] messages;
TextBox[] serialNumbers;
CheckBoxImage[] checkBoxes;
int[] ckbIndex; /// Initialized by ShuffleTextBoxes() ... to be used in the future in case of test benches with two lines
@ -89,6 +93,7 @@ namespace TBF.BenchControl.TestMethods.S640Communication
int optoDataTimeout;
string fileExchangePath;
int fileExchangeTimeout;
bool enterSerialNumbers;
ProcParams pPars;
///
IList<S640Activity> activities;
@ -117,32 +122,41 @@ namespace TBF.BenchControl.TestMethods.S640Communication
labels = new Label[UIBoxesCount]
{
wmLabel1, wmLabel2, wmLabel3, wmLabel4, wmLabel5, wmLabel6, wmLabel7,
wmLabel8, wmLabel9, wmLabel10, wmLabel11, wmLabel12, wmLabel13, wmLabel14,
wmLabel15, wmLabel16, wmLabel17, wmLabel18, wmLabel19, wmLabel20, wmLabel21,
wmLabel22, wmLabel23, wmLabel24, wmLabel25, wmLabel26, wmLabel27, wmLabel28,
wmLabel29, wmLabel30, wmLabel31, wmLabel32, wmLabel33, wmLabel34, wmLabel35,
wmLabel36, wmLabel37, wmLabel38, wmLabel39, wmLabel40,
wmLabel1, wmLabel2, wmLabel3, wmLabel4, wmLabel5, wmLabel6, wmLabel7, wmLabel8,
wmLabel9, wmLabel10, wmLabel11, wmLabel12, wmLabel13, wmLabel14, wmLabel15, wmLabel16,
wmLabel17, wmLabel18, wmLabel19, wmLabel20, wmLabel21, wmLabel22, wmLabel23, wmLabel24,
wmLabel25, wmLabel26, wmLabel27, wmLabel28, wmLabel29, wmLabel30, wmLabel31, wmLabel32,
wmLabel33, wmLabel34, wmLabel35, wmLabel36, wmLabel37, wmLabel38, wmLabel39, wmLabel40,
};
pictures = new PictureBox[UIBoxesCount]
{
pictureBox1, pictureBox2, pictureBox3, pictureBox4, pictureBox5, pictureBox6,
pictureBox7, pictureBox8, pictureBox9, pictureBox10, pictureBox11, pictureBox12,
pictureBox13, pictureBox14, pictureBox15, pictureBox16, pictureBox17, pictureBox18,
pictureBox19, pictureBox20, pictureBox21, pictureBox22, pictureBox23, pictureBox24,
pictureBox25, pictureBox26, pictureBox27, pictureBox28, pictureBox29, pictureBox30,
pictureBox31, pictureBox32, pictureBox33, pictureBox34, pictureBox35, pictureBox36,
pictureBox37, pictureBox38, pictureBox39, pictureBox40,
pictureBox1, pictureBox2, pictureBox3, pictureBox4, pictureBox5,
pictureBox6, pictureBox7, pictureBox8, pictureBox9, pictureBox10,
pictureBox11, pictureBox12, pictureBox13, pictureBox14, pictureBox15,
pictureBox16, pictureBox17, pictureBox18, pictureBox19, pictureBox20,
pictureBox21, pictureBox22, pictureBox23, pictureBox24, pictureBox25,
pictureBox26, pictureBox27, pictureBox28, pictureBox29, pictureBox30,
pictureBox31, pictureBox32, pictureBox33, pictureBox34, pictureBox35,
pictureBox36, pictureBox37, pictureBox38, pictureBox39, pictureBox40,
};
messages = new TextBox[UIBoxesCount]
{
wmTextBox1, wmTextBox2, wmTextBox3, wmTextBox4, wmTextBox5, wmTextBox6,
wmTextBox7, wmTextBox8, wmTextBox9, wmTextBox10, wmTextBox11, wmTextBox12,
wmTextBox13, wmTextBox14, wmTextBox15, wmTextBox16, wmTextBox17, wmTextBox18,
wmTextBox19, wmTextBox20, wmTextBox21, wmTextBox22, wmTextBox23, wmTextBox24,
wmTextBox25, wmTextBox26, wmTextBox27, wmTextBox28, wmTextBox29, wmTextBox30,
wmTextBox31, wmTextBox32, wmTextBox33, wmTextBox34, wmTextBox35, wmTextBox36,
wmTextBox37, wmTextBox38, wmTextBox39, wmTextBox40,
fromOptoTextBox1, fromOptoTextBox2, fromOptoTextBox3, fromOptoTextBox4, fromOptoTextBox5,
fromOptoTextBox6, fromOptoTextBox7, fromOptoTextBox8, fromOptoTextBox9, fromOptoTextBox10,
fromOptoTextBox11, fromOptoTextBox12, fromOptoTextBox13, fromOptoTextBox14, fromOptoTextBox15,
fromOptoTextBox16, fromOptoTextBox17, fromOptoTextBox18, fromOptoTextBox19, fromOptoTextBox20,
fromOptoTextBox21, fromOptoTextBox22, fromOptoTextBox23, fromOptoTextBox24, fromOptoTextBox25,
fromOptoTextBox26, fromOptoTextBox27, fromOptoTextBox28, fromOptoTextBox29, fromOptoTextBox30,
fromOptoTextBox31, fromOptoTextBox32, fromOptoTextBox33, fromOptoTextBox34, fromOptoTextBox35,
fromOptoTextBox36, fromOptoTextBox37, fromOptoTextBox38, fromOptoTextBox39, fromOptoTextBox40,
};
serialNumbers = new TextBox[UIBoxesCount]
{
textBox1, textBox2, textBox3, textBox4, textBox5, textBox6, textBox7, textBox8,
textBox9, textBox10, textBox11, textBox12, textBox13, textBox14, textBox15, textBox16,
textBox17, textBox18, textBox19, textBox20, textBox21, textBox22, textBox23, textBox24,
textBox25, textBox26, textBox27, textBox28, textBox29, textBox30, textBox31, textBox32,
textBox33, textBox34, textBox35, textBox36, textBox37, textBox38, textBox39, textBox40,
};
checkBoxes = new CheckBoxImage[UIBoxesCount]
{
@ -180,6 +194,7 @@ namespace TBF.BenchControl.TestMethods.S640Communication
optoDataTimeout = config.OptoDataTimeout;
fileExchangePath = string.IsNullOrEmpty(config.FileExchangePath) ? string.Empty : config.FileExchangePath;
fileExchangeTimeout = config.FileExchangeTimeout;
enterSerialNumbers = config.EnterSerialNumbers;
this.tests = tests;
this.pPars = procParams as ProcParams;
@ -208,6 +223,12 @@ namespace TBF.BenchControl.TestMethods.S640Communication
WaterMetersCount = ProcessData.RegisterReaders.Length;
ShuffleTextBoxes(WaterMetersCount, ProcessData.LineSize);
enabledInConfiguration = new bool[textBoxesCount];
for (int i = 0; i < textBoxesCount; i++)
{
enabledInConfiguration[i] = (optoHeads[i] != null) && ((Program.LocalSettings.OptoHeadsEnabled & (1L << i)) != 0L);
}
formCompleted = false;
StartForceCloseHandler();
}
@ -236,6 +257,7 @@ namespace TBF.BenchControl.TestMethods.S640Communication
labels[dest] = labels[l * lineSize + l * gap + i];
pictures[dest] = pictures[l * lineSize + l * gap + i];
messages[dest] = messages[l * lineSize + l * gap + i];
serialNumbers[dest] = serialNumbers[l * lineSize + l * gap + i];
checkBoxes[dest] = checkBoxes[l * lineSize + l * gap + i];
ckbIndex[l * lineSize + l * gap + i] = dest;
dest++;
@ -255,15 +277,15 @@ namespace TBF.BenchControl.TestMethods.S640Communication
///
/// Resize this form to fit enabled controls
///
int xMax = 0;
int yMax = 0;
for (int i = 0; i < textBoxesCount; i++)
{
if (messages[i].Left + messages[i].Width > xMax) xMax = messages[i].Left + messages[i].Width;
if (messages[i].Top + messages[i].Height > yMax) yMax = messages[i].Top + messages[i].Height;
}
///Width = xMax + 30;
Height = yMax + 50;
//int xMax = 0;
//int yMax = 0;
//for (int i = 0; i < textBoxesCount; i++)
//{
// if (messages[i].Left + messages[i].Width > xMax) xMax = messages[i].Left + messages[i].Width;
// if (messages[i].Top + messages[i].Height > yMax) yMax = messages[i].Top + messages[i].Height;
//}
/////Width = xMax + 30;
//Height = yMax + 50;
}
@ -278,14 +300,12 @@ namespace TBF.BenchControl.TestMethods.S640Communication
Left = (ls.S640CommFormLeft != 0) ? ls.S640CommFormLeft : 150;
Top = (ls.S640CommFormTop != 0) ? ls.S640CommFormTop : 150;
///
/// Set checkbox states accroding to optoHeads[i].Disabled states
///
long optoHeadsConfig = Program.LocalSettings.OptoHeadsEnabled;
for (int i = 0; i < textBoxesCount; i++)
{
if ((optoHeadsConfig & (1L << i)) == 0 || optoHeads[i] == null)
if (!enabledInConfiguration[i])
{
/// Opto head is disabled in configuration
checkBoxes[i].Checked = false;
@ -313,6 +333,14 @@ namespace TBF.BenchControl.TestMethods.S640Communication
/// Reset opto-data indication
pictures[i].BackColor = OptoNokColor;
messages[i].Enabled = true;
if (enterSerialNumbers)
{
serialNumbers[i].Visible = enabledInConfiguration[i];
serialNumbers[i].Enabled = (activities[currentActivityIx] == S640Activity.End);
}
}
startTimeSec = StateMachine.Time;
@ -328,8 +356,8 @@ namespace TBF.BenchControl.TestMethods.S640Communication
void Localize()
{
/// Close/Continue button is localized in other code
Text = Strings.Water_Meter_States;
closeButton.Text = Strings.CloseBtnText;
retryButton.Text = Strings.RetryBtnText;
sampleLabel1.Text = Strings.Optical_head_is_placed_correctly;
sampleLabel2.Text = Strings.Missing_opto_pulses;
@ -338,12 +366,12 @@ namespace TBF.BenchControl.TestMethods.S640Communication
}
void StartActivity(int activityIx)
void StartActivity(int acIx)
{
startTime = DateTime.Now;
activityLabel.Text = activities[activityIx].ToString();
currentActivityIx = activityIx;
step = (activities[activityIx] == S640Activity.Start) ? Step.WatchOptoHeads : Step.SaveEndePro;
activityLabel.Text = activities[acIx].ToString();
currentActivityIx = acIx;
step = (activities[acIx] == S640Activity.Start) ? Step.WatchOptoHeads : enterSerialNumbers ? Step.EnterSNs : Step.SaveEndePro;
closeButton.Visible = false;
retryButton.Visible = false;
@ -365,10 +393,10 @@ namespace TBF.BenchControl.TestMethods.S640Communication
}
TBF.UiBridge.TestProgressEventArgs.SetEstimatedTimes(new int[] { 0, 0, 10, 0, 140, 0, 0, 0 });
TBF.UiBridge.Bridge.OnTestProgress(null, new TBF.UiBridge.TestProgressEventArgs(tests[activityIx], Progress.JustStarted));
TBF.UiBridge.Bridge.OnTestProgress(null, new TBF.UiBridge.TestProgressEventArgs(tests[acIx], Progress.JustStarted));
sirtDataLogger.InfoFormat(""); /// Makes the log more readable when there is a lot of data
sirtDataLogger.WarnFormat("Activity = {0}", activities[activityIx]);
sirtDataLogger.WarnFormat("Activity = {0}", activities[acIx]);
sirtDataLogger.InfoFormat(""); /// Makes the log more readable when there is a lot of data
}
@ -441,8 +469,8 @@ namespace TBF.BenchControl.TestMethods.S640Communication
if ((optoHeadsConfig & (1L << i)) != 0 && checkBoxes[i].Checked && optoHeads[i] != null)
{
/// Save PCB Number of the water meter
ProcessData.BatchRslts.Batch.WaterMeters[i].SerialNr = optoHeads[i].PcbNumber.ToString(); /// PCB number (640) or body number (620)
ProcessData.BatchRslts.Batch.WaterMeters[i].RadioAddress = optoHeads[i].RadioAddress.ToString(); /// Radio address (640)
ProcessData.BatchRslts.Batch.WaterMeters[i].SerialNrAux = optoHeads[i].PcbNumber.ToString(); /// PCB number (640)
ProcessData.BatchRslts.Batch.WaterMeters[i].RadioAddress = optoHeads[i].RadioAddress; /// Radio address (640)
}
else
{
@ -492,7 +520,26 @@ namespace TBF.BenchControl.TestMethods.S640Communication
progressBar1.Maximum = Math.Max(fileExchangeTimeout, 1);
progressBar1.Value = 0;
step = Step.AwaitResponseToStartPro;
for (int i = 0; i < textBoxesCount; i++) { messages[i].Enabled = false; }
if (enterSerialNumbers)
{
for (int i = 0; i < textBoxesCount; i++) { serialNumbers[i].Enabled = true; }
serialNumbers[0].Focus();
closeButton.Visible = true;
closeButton.Enabled = true;
closeButton.Text = Strings.Continue;
step = Step.EnterSNsAndAwaitResponseToStartPro;
}
else
{
step = Step.AwaitResponseToStartPro;
}
}
///--------------------------------------------------------------------------
else if (step == Step.EnterSNsAndAwaitResponseToStartPro)
{
/// Don't do anything, move to the next step in closeButton_Click(...)
}
///--------------------------------------------------------------------------
else if (step == Step.AwaitResponseToStartPro)
@ -534,6 +581,11 @@ namespace TBF.BenchControl.TestMethods.S640Communication
}
}
///--------------------------------------------------------------------------
else if (step == Step.EnterSNs)
{
/// Don't do anything, move to the next step in closeButton_Click(...)
}
///--------------------------------------------------------------------------
else if (step == Step.SaveEndePro)
{
activityLabel.Text = string.Format("End: SIRT Communication");
@ -597,8 +649,10 @@ namespace TBF.BenchControl.TestMethods.S640Communication
else if (step == Step.ConfirmError)
{
progressBar1.Visible = false;
closeButton.Visible = true;
retryButton.Visible = true;
closeButton.Visible = true;
closeButton.Enabled = true;
closeButton.Text = Strings.CloseBtnText;
}
///--------------------------------------------------------------------------
else if (step == Step.Idle)
@ -767,13 +821,45 @@ namespace TBF.BenchControl.TestMethods.S640Communication
}
}
private void closeButton_Click(object sender, EventArgs e)
{
log.Error("User is closing this form, communication failed");
UpdateFirstTestResult(tests, true);
UiBridge.Bridge.OnTestProgress(null, new TBF.UiBridge.TestProgressEventArgs(tests[currentActivityIx], Progress.Aborted));
NormalClose();
if (step == Step.EnterSNsAndAwaitResponseToStartPro)
{
UpdateSerialNumbers();
step = Step.AwaitResponseToEndePro;
closeButton.Visible = false;
}
else if (step == Step.EnterSNs)
{
UpdateSerialNumbers();
step = Step.SaveEndePro;
closeButton.Visible = false;
}
else
{
log.Error("User is closing this form, communication failed");
UpdateFirstTestResult(tests, true);
UiBridge.Bridge.OnTestProgress(null, new TBF.UiBridge.TestProgressEventArgs(tests[currentActivityIx], Progress.Aborted));
NormalClose();
}
}
private void UpdateSerialNumbers()
{
/// Update water meter properties
for (int i = 0; i < textBoxesCount; i++)
{
serialNumbers[i].Enabled = false;
if (i < ProcessData.BatchRslts.Batch.WaterMeters.Count &&
ProcessData.BatchRslts.Batch.WaterMeters[i] != null &&
!ProcessData.BatchRslts.Batch.WaterMeters[i].Disabled &&
enabledInConfiguration[i])
{
/// Save brass water meter body serial number
ProcessData.BatchRslts.Batch.WaterMeters[i].SerialNr = serialNumbers[i].Text;
}
}
}
private void NormalClose()
@ -828,5 +914,78 @@ namespace TBF.BenchControl.TestMethods.S640Communication
StartActivity(0);
}
}
private void textBox1_KeyPress(object sndr, KeyPressEventArgs e) { ProcKeyPress(sndr, e, textBox1); }
private void textBox2_KeyPress(object sndr, KeyPressEventArgs e) { ProcKeyPress(sndr, e, textBox2); }
private void textBox3_KeyPress(object sndr, KeyPressEventArgs e) { ProcKeyPress(sndr, e, textBox3); }
private void textBox4_KeyPress(object sndr, KeyPressEventArgs e) { ProcKeyPress(sndr, e, textBox4); }
private void textBox5_KeyPress(object sndr, KeyPressEventArgs e) { ProcKeyPress(sndr, e, textBox5); }
private void textBox6_KeyPress(object sndr, KeyPressEventArgs e) { ProcKeyPress(sndr, e, textBox6); }
private void textBox7_KeyPress(object sndr, KeyPressEventArgs e) { ProcKeyPress(sndr, e, textBox7); }
private void textBox8_KeyPress(object sndr, KeyPressEventArgs e) { ProcKeyPress(sndr, e, textBox8); }
private void textBox9_KeyPress(object sndr, KeyPressEventArgs e) { ProcKeyPress(sndr, e, textBox9); }
private void textBox10_KeyPress(object sndr, KeyPressEventArgs e) { ProcKeyPress(sndr, e, textBox10); }
private void textBox11_KeyPress(object sndr, KeyPressEventArgs e) { ProcKeyPress(sndr, e, textBox11); }
private void textBox12_KeyPress(object sndr, KeyPressEventArgs e) { ProcKeyPress(sndr, e, textBox12); }
private void textBox13_KeyPress(object sndr, KeyPressEventArgs e) { ProcKeyPress(sndr, e, textBox13); }
private void textBox14_KeyPress(object sndr, KeyPressEventArgs e) { ProcKeyPress(sndr, e, textBox14); }
private void textBox15_KeyPress(object sndr, KeyPressEventArgs e) { ProcKeyPress(sndr, e, textBox15); }
private void textBox16_KeyPress(object sndr, KeyPressEventArgs e) { ProcKeyPress(sndr, e, textBox16); }
private void textBox17_KeyPress(object sndr, KeyPressEventArgs e) { ProcKeyPress(sndr, e, textBox17); }
private void textBox18_KeyPress(object sndr, KeyPressEventArgs e) { ProcKeyPress(sndr, e, textBox18); }
private void textBox19_KeyPress(object sndr, KeyPressEventArgs e) { ProcKeyPress(sndr, e, textBox19); }
private void textBox20_KeyPress(object sndr, KeyPressEventArgs e) { ProcKeyPress(sndr, e, textBox20); }
private void textBox21_KeyPress(object sndr, KeyPressEventArgs e) { ProcKeyPress(sndr, e, textBox21); }
private void textBox22_KeyPress(object sndr, KeyPressEventArgs e) { ProcKeyPress(sndr, e, textBox22); }
private void textBox23_KeyPress(object sndr, KeyPressEventArgs e) { ProcKeyPress(sndr, e, textBox23); }
private void textBox24_KeyPress(object sndr, KeyPressEventArgs e) { ProcKeyPress(sndr, e, textBox24); }
private void textBox25_KeyPress(object sndr, KeyPressEventArgs e) { ProcKeyPress(sndr, e, textBox25); }
private void textBox26_KeyPress(object sndr, KeyPressEventArgs e) { ProcKeyPress(sndr, e, textBox26); }
private void textBox27_KeyPress(object sndr, KeyPressEventArgs e) { ProcKeyPress(sndr, e, textBox27); }
private void textBox28_KeyPress(object sndr, KeyPressEventArgs e) { ProcKeyPress(sndr, e, textBox28); }
private void textBox29_KeyPress(object sndr, KeyPressEventArgs e) { ProcKeyPress(sndr, e, textBox29); }
private void textBox30_KeyPress(object sndr, KeyPressEventArgs e) { ProcKeyPress(sndr, e, textBox30); }
private void textBox31_KeyPress(object sndr, KeyPressEventArgs e) { ProcKeyPress(sndr, e, textBox31); }
private void textBox32_KeyPress(object sndr, KeyPressEventArgs e) { ProcKeyPress(sndr, e, textBox32); }
private void textBox33_KeyPress(object sndr, KeyPressEventArgs e) { ProcKeyPress(sndr, e, textBox33); }
private void textBox34_KeyPress(object sndr, KeyPressEventArgs e) { ProcKeyPress(sndr, e, textBox34); }
private void textBox35_KeyPress(object sndr, KeyPressEventArgs e) { ProcKeyPress(sndr, e, textBox35); }
private void textBox36_KeyPress(object sndr, KeyPressEventArgs e) { ProcKeyPress(sndr, e, textBox36); }
private void textBox37_KeyPress(object sndr, KeyPressEventArgs e) { ProcKeyPress(sndr, e, textBox37); }
private void textBox38_KeyPress(object sndr, KeyPressEventArgs e) { ProcKeyPress(sndr, e, textBox38); }
private void textBox39_KeyPress(object sndr, KeyPressEventArgs e) { ProcKeyPress(sndr, e, textBox39); }
private void textBox40_KeyPress(object sndr, KeyPressEventArgs e) { ProcKeyPress(sndr, e, textBox40); }
/// <summary>
/// Process a key press within any enabled text boxe
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
/// <param name="currentFocusOwner">TextBox control which received the event</param>
private void ProcKeyPress(object sender, KeyPressEventArgs e, TextBox currentFocusOwner)
{
if (e.KeyChar == '\r')
{
/// Process <enter> key ..... Next text field
if (textBoxesCount < 2) return; /// There is just one enabled textBox
for (int i = 0; i < textBoxesCount; i++)
{
if (serialNumbers[i] == currentFocusOwner)
{
int nextIx = i;
do
{
nextIx = (++nextIx) % textBoxesCount;
}
while (!enabledInConfiguration[nextIx]);
/// Change focus to the next enabled text box
serialNumbers[nextIx].Focus();
return;
}
}
}
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -27,6 +27,7 @@ namespace TBF.BenchControl.TestMethods.S640Communication
public int OptoDataTimeout { get; set; }
public string FileExchangePath { get; set; }
public int FileExchangeTimeout { get; set; }
public bool EnterSerialNumbers { get; set; }
public bool SimultWithEvacuation { get; set; }
/// <summary> Procedure parameters </summary>
@ -57,6 +58,7 @@ namespace TBF.BenchControl.TestMethods.S640Communication
OptoDataTimeout = 180;
FileExchangePath = "1";
FileExchangeTimeout = 60;
EnterSerialNumbers = false;
SimultWithEvacuation = true;
}
@ -65,6 +67,7 @@ namespace TBF.BenchControl.TestMethods.S640Communication
"Awaiting optical data timeout [s] (0 = off)",
"File exchange path",
"File exchange timeout [s] (0 = off)",
"Enter serial numbers",
"Simultaneous with evacuation",
};
public string ParamName(int i) { return paramNames[i]; }
@ -75,6 +78,7 @@ namespace TBF.BenchControl.TestMethods.S640Communication
switch (i)
{
case 3:
case 4:
return new List<string> { Strings.yes, Strings.no };
default:
return null;
@ -88,7 +92,8 @@ namespace TBF.BenchControl.TestMethods.S640Communication
case 0: return OptoDataTimeout.ToString();
case 1: return FileExchangePath;
case 2: return FileExchangeTimeout.ToString();
case 3: return SimultWithEvacuation ? Strings.yes : Strings.no;
case 3: return EnterSerialNumbers ? Strings.yes : Strings.no;
case 4: return SimultWithEvacuation ? Strings.yes : Strings.no;
default:
return string.Format("{0}: FileExchangePath = '{1}' FileExchangeTimeout = {2}s", Name, FileExchangePath, FileExchangeTimeout);
}
@ -101,7 +106,8 @@ namespace TBF.BenchControl.TestMethods.S640Communication
case 0: OptoDataTimeout = int.Parse(strValue); return CfgUpdateFlags.RestartRqrd;
case 1: FileExchangePath = strValue; return CfgUpdateFlags.RestartRqrd;
case 2: FileExchangeTimeout = int.Parse(strValue); return CfgUpdateFlags.RestartRqrd;
case 3: SimultWithEvacuation = (strValue == Strings.yes); return CfgUpdateFlags.RestartRqrd;
case 3: EnterSerialNumbers = (strValue == Strings.yes); return CfgUpdateFlags.RestartRqrd;
case 4: SimultWithEvacuation = (strValue == Strings.yes); return CfgUpdateFlags.RestartRqrd;
default:
return CfgUpdateFlags.None;
}
@ -121,6 +127,7 @@ namespace TBF.BenchControl.TestMethods.S640Communication
case 1:
return true;
case 3:
case 4:
if (ParamValues(i).Contains(strValue)) return true;
break;
default:
@ -137,6 +144,7 @@ namespace TBF.BenchControl.TestMethods.S640Communication
prms.OptoDataTimeout = this.OptoDataTimeout;
prms.FileExchangePath = this.FileExchangePath;
prms.FileExchangeTimeout = this.FileExchangeTimeout;
prms.EnterSerialNumbers = this.EnterSerialNumbers;
prms.SimultWithEvacuation = this.SimultWithEvacuation;
}

View File

@ -19,7 +19,10 @@ namespace TBF.BenchControl.TestMethods.S640Communication
public static XmlSerializer Serializer = XmlSerializer.FromTypes(new[] { typeof(S640StartCfg) })[0];
public override XmlSerializer GetSerializer() { return Serializer; }
public IComponentCfgCtrl GetControl(IList<Config.Entities.Component> cmpntEntities) { return new Configs.ParamsProvider.ComponentCfgCtrl(this, null); }
public IComponentCfgCtrl GetControl(IList<Config.Entities.Component> cmpntEntities)
{
return new Configs.ParamsProvider.ComponentCfgCtrl(this, null);
}
///
/// Serialized parameters
@ -27,6 +30,7 @@ namespace TBF.BenchControl.TestMethods.S640Communication
public int OptoDataTimeout { get; set; }
public string FileExchangePath { get; set; }
public int FileExchangeTimeout { get; set; }
public bool EnterSerialNumbers { get; set; }
public bool SimultWithPurging { get; set; }
/// <summary> Procedure parameters </summary>
@ -57,6 +61,7 @@ namespace TBF.BenchControl.TestMethods.S640Communication
OptoDataTimeout = 180;
FileExchangePath = "1";
FileExchangeTimeout = 60;
EnterSerialNumbers = true;
SimultWithPurging = true;
}
@ -65,6 +70,7 @@ namespace TBF.BenchControl.TestMethods.S640Communication
"Awaiting optical data timeout [s] (0 = off)",
"File exchange path",
"File exchange timeout [s] (0 = off)",
"Enter serial numbers",
"Simultaneous with purging",
};
public string ParamName(int i) { return paramNames[i]; }
@ -75,6 +81,7 @@ namespace TBF.BenchControl.TestMethods.S640Communication
switch (i)
{
case 3:
case 4:
return new List<string> { Strings.yes, Strings.no };
default:
return null;
@ -88,7 +95,8 @@ namespace TBF.BenchControl.TestMethods.S640Communication
case 0: return OptoDataTimeout.ToString();
case 1: return FileExchangePath;
case 2: return FileExchangeTimeout.ToString();
case 3: return SimultWithPurging ? Strings.yes : Strings.no;
case 3: return EnterSerialNumbers ? Strings.yes : Strings.no;
case 4: return SimultWithPurging ? Strings.yes : Strings.no;
default:
return string.Format("{0}: FileExchangePath = '{1}' FileExchangeTimeout = {2}s", Name, FileExchangePath, FileExchangeTimeout);
}
@ -101,7 +109,8 @@ namespace TBF.BenchControl.TestMethods.S640Communication
case 0: OptoDataTimeout = int.Parse(strValue); return CfgUpdateFlags.RestartRqrd;
case 1: FileExchangePath = strValue; return CfgUpdateFlags.RestartRqrd;
case 2: FileExchangeTimeout = int.Parse(strValue); return CfgUpdateFlags.RestartRqrd;
case 3: SimultWithPurging = (strValue == Strings.yes); return CfgUpdateFlags.RestartRqrd;
case 3: EnterSerialNumbers = (strValue == Strings.yes); return CfgUpdateFlags.RestartRqrd;
case 4: SimultWithPurging = (strValue == Strings.yes); return CfgUpdateFlags.RestartRqrd;
default:
return CfgUpdateFlags.None;
}
@ -121,6 +130,7 @@ namespace TBF.BenchControl.TestMethods.S640Communication
case 1:
return true;
case 3:
case 4:
if (ParamValues(i).Contains(strValue)) return true;
break;
default:
@ -137,6 +147,7 @@ namespace TBF.BenchControl.TestMethods.S640Communication
prms.OptoDataTimeout = this.OptoDataTimeout;
prms.FileExchangePath = this.FileExchangePath;
prms.FileExchangeTimeout = this.FileExchangeTimeout;
prms.EnterSerialNumbers = this.EnterSerialNumbers;
prms.SimultWithPurging = this.SimultWithPurging;
}