Add initial MassMeter implementation

This commit is contained in:
Marek Frniak 2026-02-19 17:58:26 +01:00
parent b43657a4db
commit ead350eef3
70 changed files with 8013 additions and 4604 deletions

View File

@ -293,6 +293,14 @@ namespace Common
SingleOrCompound, /// Only used when querying results
}
public enum PulsesTypeByQuantity : short
{
[Description("dm3")] Volume_dm3,
[Description("kg")] Mass_kg,
Count
}
public enum Medium
{
[Description("")] NotSpecified,

View File

@ -16,20 +16,26 @@ namespace Results.Entities
public virtual double PulsesMeter { get; set; } /// # of water meter or heat meter pulses
public virtual double PulsesMaster { get; set; } /// # of reference flowmeter pulses (gated by this water meter pulses)
public virtual double PulsesPerLiter { get; set; } /// [l ^ -1], in case of heat meters (CompoundMeterId==5) pulses per kWh in [kWh ^ -1]
public virtual double PulsesPerKilogram { get; set; } /// [kg ^ -1]
public virtual double VolumeStart { get; set; } /// Volume or energy (CompoundMeterId==5) on test start in [l] or [J]
public virtual double VolumeEnd { get; set; } /// Volume or energy (CompoundMeterId==5) on test end in [l] or [J]
public virtual double VolumeMeter { get; set; } /// Measured volume or energy (CompoundMeterId==5) in [l] or [J]
public virtual double MassMeter { get; set; } /// Measured mass or energy (CompoundMeterId==5) in [kg] or [J]
public virtual double VolumeRef { get; set; } /// Reference volume or energy (CompoundMeterId==5) in [l] or [J]
public virtual double MassRef { get; set; } /// Reference mass or energy (CompoundMeterId==5) in [kg] or [J]
public virtual double TimestampStart { get; set; } /// [s]
public virtual double TimestampEnd { get; set; } /// [s]
public virtual double TestTime { get; set; } /// [s]
/// Main result
public virtual double Error { get; set; } /// [%]
public virtual double Error { get; set; } /// [%] for volume register reader
public virtual double ErrorMass { get; set; } /// [%] for mass register reader
public virtual long ErrorIndicators { get; set; } /// Not mapped to DB !!!, bit24=E25, bit25=E26, bit26=E27, bit27=E28 (error flags)
public virtual long InfoIndicators { get; set; } /// Not mapped to DB !!!, bit24=E25, bit25=E26, bit26=E27, bit27=E28 (info flags)
public virtual bool TestDone { get; set; } /// true = test was completed
public virtual bool Passed { get; set; } /// true = test passed, water meter is OK
public virtual bool Passed { get; set; } /// true = test passed, water meter is OK for Volume RegisterReader
public virtual bool PassedMass { get; set; } /// true = test passed, water meter is OK for Mass RegisterReader
public virtual string QuantityUnits { get; set; } /// dm3, kg, etc. - this value defined the quantity of meter, its decisive for distinction of pulse types
#if IPERL
public virtual int CalibFactor { get; set; }
public virtual int CalibFactorLNA { get; set; }
@ -123,6 +129,33 @@ namespace Results.Entities
return Passed ? yesNo[0] : ((yesNo.Length >= 2) ? yesNo[1] : Results.Resources.Strings.No);
}
}
public virtual string PassedMassColorStr(string yesNoFormatOrEmpty)
{
if (string.IsNullOrEmpty(yesNoFormatOrEmpty))
{
return Utils.PassedColorStr(PassedMass, Evaluate());
}
else
{
string[] yesNo = yesNoFormatOrEmpty.Split(new char[] { '~' });
return PassedMass ? yesNo[0] : ((yesNo.Length >= 2) ? yesNo[1] : Results.Resources.Strings.No);
}
}
public virtual string GetQuantityFromUnits()
{
if (QuantityUnits == "kg")
{
return "Mass";
}
else if (QuantityUnits == "dm3")
{
return "Volume";
}
return "Volume";
}
public MeterTestRslt()
{

View File

@ -36,6 +36,8 @@ namespace Results.Entities
public virtual double ConstMasterCorr { get; set; } /// [l/pls] Liters per pulse of the master flow meter corrected by a correction table.
public virtual double ConstMaster { get; set; } /// [l/pls] Liters per pulse of the master flow meter calculated from a mass measurement.
/// When mass measurement is not available, corrected by a correction table.
public virtual double MassConstMaster { get; set; } /// [kg/pls] kilograms per pulse of the master flow meter calculated from a mass measurement.
/// When mass measurement is not available, corrected by a correction table.
public virtual double MassStartRaw { get; set; } /// [kg]
public virtual double MassStart { get; set; } /// [kg]
public virtual double MassEndRaw { get; set; } /// [kg]
@ -49,6 +51,10 @@ namespace Results.Entities
public virtual double VolumeCTV { get; set; } /// [l] Volume conventional true value
public virtual double VolumeMaster { get; set; } /// [l] Volume from the master flow meter
public virtual double ErrorMaster { get; set; } /// [%] Error of the master flow meter
public virtual double MassFlow { get; set; } /// [t/h] calculated from conventional true value
public virtual double MassCTV { get; set; } /// [kg] Volume conventional true value
public virtual double MassMaster { get; set; } /// [kg] Volume from the master flow meter
public virtual double MassErrorMaster { get; set; } /// [%] Error of the master flow meter
public virtual float DiverterStart { get; set; } /// [s] Diverter switch time or a start/stop valve open time when the test starts
public virtual float DivStart10 { get; set; } /// [s] Diverter switch time when test starts at level 10 (e.g. 10%) (not mapped to DB)

View File

@ -33,6 +33,7 @@ namespace Results.Entities
public virtual string ApprovalInfo { get; set; }
public virtual string Certificate { get; set; }
public virtual double PulsesPerLtr { get; set; }
public virtual double PulsesPerKilogram { get; set; }
/// Concerns compound water meters
public virtual string ProducerAux { get; set; }
@ -85,6 +86,7 @@ namespace Results.Entities
ApprovalInfo = oriWMData.ApprovalInfo;
Certificate = oriWMData.Certificate;
PulsesPerLtr = oriWMData.PulsesPerLtr;
PulsesPerKilogram = oriWMData.PulsesPerKilogram;
ProducerAux = oriWMData.ProducerAux;
Q3_Qn_Aux = oriWMData.Q3_Qn_Aux;
MetrologicalClassAux = oriWMData.MetrologicalClassAux;
@ -129,6 +131,7 @@ namespace Results.Entities
if (ApprovalInfo != wmd.ApprovalInfo) return false;
if (Certificate != wmd.Certificate) return false;
if (PulsesPerLtr != wmd.PulsesPerLtr) return false;
if (PulsesPerKilogram != wmd.PulsesPerKilogram) return false;
if (ProducerAux != wmd.ProducerAux) return false;
if (Q3_Qn_Aux != wmd.Q3_Qn_Aux) return false;
if (MetrologicalClassAux != wmd.MetrologicalClassAux) return false;
@ -188,6 +191,7 @@ namespace Results.Entities
writer.Write((ApprovalInfo != null) ? ApprovalInfo : string.Empty);
writer.Write((Certificate != null) ? Certificate : string.Empty);
writer.Write(PulsesPerLtr);
writer.Write(PulsesPerKilogram);
writer.Write((ProducerAux != null) ? ProducerAux : string.Empty);
writer.Write(Q3_Qn_Aux);
writer.Write((MetrologicalClassAux != null) ? MetrologicalClassAux : string.Empty);
@ -227,6 +231,7 @@ namespace Results.Entities
ApprovalInfo = reader.ReadString();
Certificate = reader.ReadString();
PulsesPerLtr = reader.ReadDouble();
PulsesPerKilogram = reader.ReadDouble();
ProducerAux = reader.ReadString();
Q3_Qn_Aux = reader.ReadDouble();
MetrologicalClassAux = reader.ReadString();

View File

@ -16,16 +16,22 @@ namespace Results.Mappings
Map(x => x.PulsesMeter);
Map(x => x.PulsesMaster);
Map(x => x.PulsesPerLiter);
Map(x => x.PulsesPerKilogram);
Map(x => x.VolumeStart);
Map(x => x.VolumeEnd);
Map(x => x.VolumeMeter);
Map(x => x.VolumeRef);
Map(x => x.MassMeter);
Map(x => x.MassRef);
Map(x => x.TimestampStart);
Map(x => x.TimestampEnd);
Map(x => x.TestTime);
Map(x => x.Error);
Map(x => x.ErrorMass);
Map(x => x.TestDone);
Map(x => x.Passed);
Map(x => x.PassedMass);
Map(x => x.QuantityUnits);
#if IPERL
Map(x => x.ExtraDataPath);
Map(x => x.X1);

View File

@ -45,6 +45,10 @@ namespace Results.Mappings
Map(x => x.VolumeCTV);
Map(x => x.VolumeMaster);
Map(x => x.ErrorMaster);
Map(x => x.MassFlow).Column("MassFlow");
Map(x => x.MassCTV);
Map(x => x.MassMaster);
Map(x => x.MassErrorMaster);
Map(x => x.DiverterStart);
Map(x => x.DiverterEnd);
Map(x => x.ErrorFlags);

View File

@ -1,5 +1,8 @@
is_global = true
build_property.RootNamespace = SharedComponents
build_property.ProjectDir = C:\Users\micha\git\tbf\SharedComponents\
build_property.ProjectDir = C:\Sensus projects\LocalBranch_start_at_19.2.2026\tbf-exchange260123\tbf\SharedComponents\
build_property.EnableComHosting =
build_property.EnableGeneratedComInterfaceComImportInterop =
build_property.CsWinRTUseWindowsUIXamlProjections = false
build_property.EffectiveAnalysisLevelStyle =
build_property.EnableCodeStyleSeverity =

View File

@ -5,11 +5,12 @@
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\micha\.nuget\packages\</NuGetPackageFolders>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\MFRNIAK\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">7.0.0</NuGetToolVersion>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.14.0</NuGetToolVersion>
</PropertyGroup>
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<SourceRoot Include="C:\Users\micha\.nuget\packages\" />
<SourceRoot Include="C:\Users\MFRNIAK\.nuget\packages\" />
<SourceRoot Include="C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages\" />
</ItemGroup>
</Project>

View File

@ -19,8 +19,8 @@
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
</requestedPrivileges>
<applicationRequestMinimum>
<PermissionSet class="System.Security.PermissionSet" version="1" Unrestricted="true" ID="Custom" SameSite="site" />
<defaultAssemblyRequest permissionSetReference="Custom" />
<PermissionSet class="System.Security.PermissionSet" version="1" ID="Custom" SameSite="site" Unrestricted="true" />
</applicationRequestMinimum>
</security>
</trustInfo>

View File

@ -1,6 +1,7 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@ -4415,6 +4416,15 @@ namespace TBF.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Pulses per kilogram.
/// </summary>
internal static string PulsesPerKilogram {
get {
return ResourceManager.GetString("PulsesPerKilogram", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Pulses per kWh.
/// </summary>
@ -4433,6 +4443,15 @@ namespace TBF.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Pulses per unit.
/// </summary>
internal static string PulsesPerUnit {
get {
return ResourceManager.GetString("PulsesPerUnit", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Pump.
/// </summary>
@ -6686,6 +6705,15 @@ namespace TBF.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Units.
/// </summary>
internal static string Units {
get {
return ResourceManager.GetString("Units", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Unlock.
/// </summary>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -126,4 +126,13 @@
<data name="ShowDialog" xml:space="preserve">
<value>Mostrar diálogo</value>
</data>
<data name="PulsesPerUnit" xml:space="preserve">
<value />
</data>
<data name="PulsesPerKilogram" xml:space="preserve">
<value />
</data>
<data name="Units" xml:space="preserve">
<value />
</data>
</root>

View File

@ -117,9 +117,6 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Activity" xml:space="preserve">
<value>Activité</value>
</data>
<data name="Confirmation" xml:space="preserve">
<value>Confirmation</value>
</data>
@ -399,9 +396,6 @@
<data name="Tol_red_pct_chdr" xml:space="preserve">
<value>Toler rouge. [%]</value>
</data>
<data name="Test_time_s_chdr" xml:space="preserve">
<value>Temps test [s]</value>
</data>
<data name="Error_while_creating_DB_Reason" xml:space="preserve">
<value>Erreur lors de la création de la base de données. Raison:</value>
</data>
@ -525,9 +519,6 @@
<data name="RelativeQto" xml:space="preserve">
<value>Q relatif à</value>
</data>
<data name="TargetQ" xml:space="preserve">
<value>Q cible [m3/h]</value>
</data>
<data name="Compound_meters" xml:space="preserve">
<value>Mètres composés</value>
</data>
@ -618,6 +609,9 @@
<data name="Switching_flow_detection" xml:space="preserve">
<value>Détection flux commutation</value>
</data>
<data name="Activity" xml:space="preserve">
<value>Activité</value>
</data>
<data name="Progress" xml:space="preserve">
<value>Progrès</value>
</data>
@ -888,7 +882,7 @@
<data name="Qrise" xml:space="preserve">
<value>Q hausse</value>
</data>
<data name="Serial_Number" xml:space="preserve">
<data name="Serial_number" xml:space="preserve">
<value>Numéro série</value>
</data>
<data name="State" xml:space="preserve">
@ -939,6 +933,9 @@
<data name="Purchase_order" xml:space="preserve">
<value>Commande</value>
</data>
<data name="Project_number" xml:space="preserve">
<value>Numéro de projet</value>
</data>
<data name="Ambient_humidity" xml:space="preserve">
<value>Humidité ambiante</value>
</data>
@ -1245,9 +1242,6 @@
<data name="Target_ref_pulses_" xml:space="preserve">
<value>Cible ref impulsions:</value>
</data>
<data name="Target_volume_l_" xml:space="preserve">
<value>Volume cible [l]:</value>
</data>
<data name="Save_column_widths" xml:space="preserve">
<value>Enregistrer largeurs colonne</value>
</data>
@ -1386,9 +1380,6 @@
<data name="Last_changed_by" xml:space="preserve">
<value>Dernier changement dby</value>
</data>
<data name="Meter_types_tested" xml:space="preserve">
<value>Types compteurs testés</value>
</data>
<data name="Notes" xml:space="preserve">
<value>Remarques</value>
</data>
@ -1671,6 +1662,9 @@
<data name="Protected_procedure" xml:space="preserve">
<value>Procédure protégée</value>
</data>
<data name="Empty" xml:space="preserve">
<value>Vidanger</value>
</data>
<data name="Session" xml:space="preserve">
<value>Session</value>
</data>
@ -1713,9 +1707,6 @@
<data name="RFID_communication_failed" xml:space="preserve">
<value>Échec communication RFID</value>
</data>
<data name="Opto_head_was_disabled_by_the_user" xml:space="preserve">
<value>tête désactivée par utilisateur</value>
</data>
<data name="failed_0_1_exclamation" xml:space="preserve">
<value>{0}' exclamation échoué ({1}) !!!</value>
</data>
@ -1803,9 +1794,6 @@
<data name="Refresh" xml:space="preserve">
<value>Rafraîchir</value>
</data>
<data name="current" xml:space="preserve">
<value>actuel</value>
</data>
<data name="Flow" xml:space="preserve">
<value>Couler</value>
</data>
@ -1905,7 +1893,7 @@
<data name="Import" xml:space="preserve">
<value>Importation</value>
</data>
<data name="repetition" xml:space="preserve">
<data name="Repetition" xml:space="preserve">
<value>répétition</value>
</data>
<data name="Result" xml:space="preserve">
@ -1989,6 +1977,9 @@
<data name="End_session" xml:space="preserve">
<value>Terminer le cycle</value>
</data>
<data name="Fill" xml:space="preserve">
<value>Inonder</value>
</data>
<data name="Pipeline" xml:space="preserve">
<value>Pipeline</value>
</data>
@ -2001,25 +1992,40 @@
<data name="Q_tg" xml:space="preserve">
<value>Q obj.</value>
</data>
<data name="Empty" xml:space="preserve">
<value>Vidanger</value>
</data>
<data name="Empty_the_tank" xml:space="preserve">
<value>Vidanger réservoir</value>
</data>
<data name="Fill" xml:space="preserve">
<value>Inonder</value>
</data>
<data name="Current" xml:space="preserve">
<value>Curren</value>
</data>
<data name="Voltage" xml:space="preserve">
<value>Tension</value>
</data>
<data name="Project_number" xml:space="preserve">
<value>Numéro de projet</value>
</data>
<data name="ShowDialog" xml:space="preserve">
<value>Afficher la boîte de dialogue</value>
</data>
<data name="Meter_types_tested" xml:space="preserve">
<value>Types compteurs testés</value>
</data>
<data name="TargetQ" xml:space="preserve">
<value>Q cible [m3/h]</value>
</data>
<data name="Target_volume_l_" xml:space="preserve">
<value>Volume cible [l]:</value>
</data>
<data name="Opto_head_was_disabled_by_the_user" xml:space="preserve">
<value>tête désactivée par utilisateur</value>
</data>
<data name="Test_time_s_chdr" xml:space="preserve">
<value>Temps test [s]</value>
</data>
<data name="PulsesPerUnit" xml:space="preserve">
<value />
</data>
<data name="PulsesPerKilogram" xml:space="preserve">
<value />
</data>
<data name="Units" xml:space="preserve">
<value />
</data>
</root>

View File

@ -117,9 +117,6 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Activity" xml:space="preserve">
<value>Attività</value>
</data>
<data name="Confirmation" xml:space="preserve">
<value>conferma</value>
</data>
@ -252,9 +249,6 @@
<data name="Nr" xml:space="preserve">
<value>numero</value>
</data>
<data name="Mass" xml:space="preserve">
<value>massa</value>
</data>
<data name="AddBtnText" xml:space="preserve">
<value>Aggiunta</value>
</data>
@ -276,12 +270,6 @@
<data name="OkBtnText" xml:space="preserve">
<value>Ok</value>
</data>
<data name="Flow" xml:space="preserve">
<value>flusso</value>
</data>
<data name="Pressure" xml:space="preserve">
<value>pressione</value>
</data>
<data name="Invalid_username_or_password" xml:space="preserve">
<value>Username o password non validi</value>
</data>
@ -399,12 +387,6 @@
<data name="Output_chdr" xml:space="preserve">
<value>Uscite</value>
</data>
<data name="Q_from_lph" xml:space="preserve">
<value>Qda [l/h]</value>
</data>
<data name="Q_to_lph" xml:space="preserve">
<value>Q a [l/h]</value>
</data>
<data name="Red_type_chdr" xml:space="preserve">
<value>tipo rosso</value>
</data>
@ -414,9 +396,6 @@
<data name="Tol_red_pct_chdr" xml:space="preserve">
<value>tolleranza rossa [%]</value>
</data>
<data name="Test_time_s_chdr" xml:space="preserve">
<value>test time [s]</value>
</data>
<data name="Error_while_creating_DB_Reason" xml:space="preserve">
<value>errore durante la creazione del data base. ragioni:</value>
</data>
@ -540,9 +519,6 @@
<data name="RelativeQto" xml:space="preserve">
<value>Q relativo a</value>
</data>
<data name="TargetQ" xml:space="preserve">
<value>target Q [m3/h]</value>
</data>
<data name="Compound_meters" xml:space="preserve">
<value>metri composti</value>
</data>
@ -633,6 +609,9 @@
<data name="Switching_flow_detection" xml:space="preserve">
<value>rilevamento del flusso di commutazione</value>
</data>
<data name="Activity" xml:space="preserve">
<value>Attività</value>
</data>
<data name="Progress" xml:space="preserve">
<value>progressi</value>
</data>
@ -903,7 +882,7 @@
<data name="Qrise" xml:space="preserve">
<value>Qalta</value>
</data>
<data name="Serial_Number" xml:space="preserve">
<data name="Serial_number" xml:space="preserve">
<value>Numero Seriale</value>
</data>
<data name="State" xml:space="preserve">
@ -954,6 +933,9 @@
<data name="Purchase_order" xml:space="preserve">
<value>ordine acquisto</value>
</data>
<data name="Project_number" xml:space="preserve">
<value>Numero del progetto</value>
</data>
<data name="Ambient_humidity" xml:space="preserve">
<value>Umidità dell'ambiente</value>
</data>
@ -981,9 +963,6 @@
<data name="Start" xml:space="preserve">
<value>Inizio</value>
</data>
<data name="AtTemperature_C" xml:space="preserve">
<value>@temperatura [°C]</value>
</data>
<data name="Density" xml:space="preserve">
<value>densità</value>
</data>
@ -1125,15 +1104,15 @@
<data name="ID" xml:space="preserve">
<value>ID </value>
</data>
<data name="Focus" xml:space="preserve">
<value>messa a fuoco</value>
</data>
<data name="Grab" xml:space="preserve">
<value>afferrare</value>
</data>
<data name="Live" xml:space="preserve">
<value>dal vivo</value>
</data>
<data name="Camera" xml:space="preserve">
<value>Fotocamera</value>
</data>
<data name="Closing_the_tank" xml:space="preserve">
<value>chiusura del serbatoio</value>
</data>
@ -1212,15 +1191,15 @@
<data name="Compound_meter_0" xml:space="preserve">
<value>misuratore composto {0}</value>
</data>
<data name="Error_" xml:space="preserve">
<value>Errore:</value>
</data>
<data name="Estimated_time_s_" xml:space="preserve">
<value>tempo stimato [s]:</value>
</data>
<data name="Mass_diff_kg_" xml:space="preserve">
<value>mass diff [kg]:</value>
</data>
<data name="Mass" xml:space="preserve">
<value>massa</value>
</data>
<data name="Meter" xml:space="preserve">
<value>metri</value>
</data>
@ -1260,9 +1239,6 @@
<data name="Target_ref_pulses_" xml:space="preserve">
<value>Target ref. count:</value>
</data>
<data name="Target_volume_l_" xml:space="preserve">
<value>target volume [l]:</value>
</data>
<data name="Save_column_widths" xml:space="preserve">
<value>salva larghezza colonne</value>
</data>
@ -1314,6 +1290,9 @@
<data name="Print_watermeter_results" xml:space="preserve">
<value>stampare i risultati dei contatori</value>
</data>
<data name="Save_again" xml:space="preserve">
<value>inviato</value>
</data>
<data name="Sent" xml:space="preserve">
<value>inviato</value>
</data>
@ -1398,9 +1377,6 @@
<data name="Last_changed_by" xml:space="preserve">
<value>ultimo cambiato da </value>
</data>
<data name="Meter_types_tested" xml:space="preserve">
<value>tipi di contatori testati</value>
</data>
<data name="Notes" xml:space="preserve">
<value>note</value>
</data>
@ -1572,9 +1548,6 @@
<data name="User_code" xml:space="preserve">
<value>codice utente</value>
</data>
<data name="Save_again" xml:space="preserve">
<value>inviato</value>
</data>
<data name="Failed_to_initialize_device_0_1_2" xml:space="preserve">
<value>Errore dispositivo '{0}':{1}{2}</value>
</data>
@ -1686,8 +1659,8 @@
<data name="Protected_procedure" xml:space="preserve">
<value>Procedura protetta</value>
</data>
<data name="Drain" xml:space="preserve">
<value>Drenare</value>
<data name="Empty" xml:space="preserve">
<value>Svuotare</value>
</data>
<data name="Session" xml:space="preserve">
<value>Sessione</value>
@ -1740,14 +1713,17 @@
<data name="Correction" xml:space="preserve">
<value>correzione</value>
</data>
<data name="Camera" xml:space="preserve">
<value>Fotocamera</value>
<data name="Start_the_test_bench" xml:space="preserve">
<value>Avvio del banco prova</value>
</data>
<data name="Finish_the_session_please" xml:space="preserve">
<value>Finire la misurazione perfavore</value>
</data>
<data name="Start_the_test_bench" xml:space="preserve">
<value>Avvio del banco prova</value>
<data name="Flow" xml:space="preserve">
<value>flusso</value>
</data>
<data name="Pressure" xml:space="preserve">
<value>pressione</value>
</data>
<data name="Flow_adjustment_failed" xml:space="preserve">
<value>Errore impostazione del flusso</value>
@ -1761,12 +1737,6 @@
<data name="Abort_session" xml:space="preserve">
<value>Interrompere</value>
</data>
<data name="Empty" xml:space="preserve">
<value>Svuotare</value>
</data>
<data name="Empty_the_tank" xml:space="preserve">
<value>Svuotare il serbatoio</value>
</data>
<data name="End_session" xml:space="preserve">
<value>Finire il ciclo</value>
</data>
@ -1779,16 +1749,55 @@
<data name="Start_cycle" xml:space="preserve">
<value>Avviare il ciclo</value>
</data>
<data name="Empty_the_tank" xml:space="preserve">
<value>Svuotare il serbatoio</value>
</data>
<data name="Current" xml:space="preserve">
<value>Corrente</value>
</data>
<data name="Voltage" xml:space="preserve">
<value>Voltaggio</value>
</data>
<data name="Project_number" xml:space="preserve">
<value>Numero del progetto</value>
</data>
<data name="ShowDialog" xml:space="preserve">
<value>Mostra dialogo</value>
</data>
<data name="Meter_types_tested" xml:space="preserve">
<value>tipi di contatori testati</value>
</data>
<data name="Q_from_lph" xml:space="preserve">
<value>Qda [l/h]</value>
</data>
<data name="Q_to_lph" xml:space="preserve">
<value>Q a [l/h]</value>
</data>
<data name="TargetQ" xml:space="preserve">
<value>target Q [m3/h]</value>
</data>
<data name="Target_volume_l_" xml:space="preserve">
<value>target volume [l]:</value>
</data>
<data name="Test_time_s_chdr" xml:space="preserve">
<value>test time [s]</value>
</data>
<data name="AtTemperature_C" xml:space="preserve">
<value>@temperatura [°C]</value>
</data>
<data name="Focus" xml:space="preserve">
<value>messa a fuoco</value>
</data>
<data name="Error_" xml:space="preserve">
<value>Errore:</value>
</data>
<data name="Drain" xml:space="preserve">
<value>Drenare</value>
</data>
<data name="PulsesPerUnit" xml:space="preserve">
<value />
</data>
<data name="PulsesPerKilogram" xml:space="preserve">
<value />
</data>
<data name="Units" xml:space="preserve">
<value />
</data>
</root>

File diff suppressed because it is too large Load Diff

View File

@ -2473,5 +2473,13 @@
<data name="SaveCommunication" xml:space="preserve">
<value>Save Communication</value>
</data>
<data name="PulsesPerUnit" xml:space="preserve">
<value>Pulses per unit</value>
</data>
<data name="PulsesPerKilogram" xml:space="preserve">
<value>Pulses per kilogram</value>
</data>
<data name="Units" xml:space="preserve">
<value>Units</value>
</data>
</root>

File diff suppressed because it is too large Load Diff

View File

@ -117,9 +117,6 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Activity" xml:space="preserve">
<value>Активность</value>
</data>
<data name="Confirmation" xml:space="preserve">
<value>Подтверждение</value>
</data>
@ -183,6 +180,12 @@
<data name="P_out" xml:space="preserve">
<value>P вниз</value>
</data>
<data name="Q_from" xml:space="preserve">
<value>Q от</value>
</data>
<data name="Q_to" xml:space="preserve">
<value>Q до</value>
</data>
<data name="Reference" xml:space="preserve">
<value>Ссылка</value>
</data>
@ -240,9 +243,6 @@
<data name="Nr" xml:space="preserve">
<value>№</value>
</data>
<data name="Mass" xml:space="preserve">
<value>Масса</value>
</data>
<data name="AddBtnText" xml:space="preserve">
<value>Добавить</value>
</data>
@ -264,12 +264,6 @@
<data name="OkBtnText" xml:space="preserve">
<value>OK</value>
</data>
<data name="Flow" xml:space="preserve">
<value>Расход</value>
</data>
<data name="Pressure" xml:space="preserve">
<value>Давление</value>
</data>
<data name="Username" xml:space="preserve">
<value>Имя пользователя</value>
</data>
@ -384,12 +378,6 @@
<data name="Output_chdr" xml:space="preserve">
<value>Выход</value>
</data>
<data name="Q_from_lph" xml:space="preserve">
<value>Q от [л/ч]</value>
</data>
<data name="Q_to_lph" xml:space="preserve">
<value>Q до [л/ч]</value>
</data>
<data name="Red_type_chdr" xml:space="preserve">
<value>Тип сокращ.</value>
</data>
@ -399,9 +387,6 @@
<data name="Tol_red_pct_chdr" xml:space="preserve">
<value>Toler. red. [%]</value>
</data>
<data name="Test_time_s_chdr" xml:space="preserve">
<value>Время теста [с]</value>
</data>
<data name="Error_while_creating_DB_Reason" xml:space="preserve">
<value>Ошибка при создании базы данных. Причина:</value>
</data>
@ -525,9 +510,6 @@
<data name="RelativeQto" xml:space="preserve">
<value>Относительный Q до</value>
</data>
<data name="TargetQ" xml:space="preserve">
<value>Заданный Q [м3/ч]</value>
</data>
<data name="Compound_meters" xml:space="preserve">
<value>Комбинированные счетчики</value>
</data>
@ -618,6 +600,9 @@
<data name="Switching_flow_detection" xml:space="preserve">
<value>Переключение потока</value>
</data>
<data name="Activity" xml:space="preserve">
<value>Активность</value>
</data>
<data name="Progress" xml:space="preserve">
<value>Прогресс</value>
</data>
@ -888,7 +873,7 @@
<data name="Qrise" xml:space="preserve">
<value>Qпониж</value>
</data>
<data name="Serial_Number" xml:space="preserve">
<data name="Serial_number" xml:space="preserve">
<value>Серийный номер</value>
</data>
<data name="State" xml:space="preserve">
@ -939,6 +924,9 @@
<data name="Purchase_order" xml:space="preserve">
<value>Заказ</value>
</data>
<data name="Project_number" xml:space="preserve">
<value>Номер проекта</value>
</data>
<data name="Ambient_humidity" xml:space="preserve">
<value>Относительная влажность окружающей среды</value>
</data>
@ -966,9 +954,6 @@
<data name="Start" xml:space="preserve">
<value>Старт</value>
</data>
<data name="AtTemperature_C" xml:space="preserve">
<value>температура [°C]</value>
</data>
<data name="Density" xml:space="preserve">
<value>Плотность</value>
</data>
@ -996,12 +981,6 @@
<data name="Qt" xml:space="preserve">
<value>Qt</value>
</data>
<data name="cold" xml:space="preserve">
<value>холодный</value>
</data>
<data name="hot" xml:space="preserve">
<value>горячий</value>
</data>
<data name="Water" xml:space="preserve">
<value>Вода</value>
</data>
@ -1110,9 +1089,6 @@
<data name="ID" xml:space="preserve">
<value>ID</value>
</data>
<data name="Focus" xml:space="preserve">
<value>Сфокусировать</value>
</data>
<data name="Grab" xml:space="preserve">
<value>Захватить</value>
</data>
@ -1203,6 +1179,9 @@
<data name="Mass_diff_kg_" xml:space="preserve">
<value>Mass diff. [kg]:</value>
</data>
<data name="Mass" xml:space="preserve">
<value>Масса</value>
</data>
<data name="Meter" xml:space="preserve">
<value>Счетчик</value>
</data>
@ -1242,9 +1221,6 @@
<data name="Target_ref_pulses_" xml:space="preserve">
<value>Target ref. count:</value>
</data>
<data name="Target_volume_l_" xml:space="preserve">
<value>Заданный объем [л]:</value>
</data>
<data name="Save_column_widths" xml:space="preserve">
<value>Сохранить ширину столбцов</value>
</data>
@ -1296,9 +1272,6 @@
<data name="Print_watermeter_results" xml:space="preserve">
<value>Печатать результатов водосчетчиков</value>
</data>
<data name="Again" xml:space="preserve">
<value>Снова</value>
</data>
<data name="Sent" xml:space="preserve">
<value>Отправлено</value>
</data>
@ -1383,9 +1356,6 @@
<data name="Last_changed_by" xml:space="preserve">
<value>Изменено</value>
</data>
<data name="Meter_types_tested" xml:space="preserve">
<value>Типы испытываемых счетчиков</value>
</data>
<data name="Notes" xml:space="preserve">
<value>Заметки</value>
</data>
@ -1557,6 +1527,57 @@
<data name="User_code" xml:space="preserve">
<value>Код пользователя</value>
</data>
<data name="Resetting_scales" xml:space="preserve">
<value>Сброс весов</value>
</data>
<data name="Correction" xml:space="preserve">
<value>Коррекция</value>
</data>
<data name="Flow" xml:space="preserve">
<value>Расход</value>
</data>
<data name="Pressure" xml:space="preserve">
<value>Давление</value>
</data>
<data name="Result" xml:space="preserve">
<value>Результат</value>
</data>
<data name="Evaporation" xml:space="preserve">
<value>испарение</value>
</data>
<data name="String1" xml:space="preserve">
<value>Строка 1</value>
</data>
<data name="Current" xml:space="preserve">
<value>Current</value>
</data>
<data name="Voltage" xml:space="preserve">
<value>Voltage</value>
</data>
<data name="cold" xml:space="preserve">
<value>холодный</value>
</data>
<data name="hot" xml:space="preserve">
<value>горячий</value>
</data>
<data name="Test_method2" xml:space="preserve">
<value>Метод испытаний 2</value>
</data>
<data name="Meter_types_tested" xml:space="preserve">
<value>Типы испытываемых счетчиков</value>
</data>
<data name="Short_dercription" xml:space="preserve">
<value>Краткое описание</value>
</data>
<data name="Q_from_lph" xml:space="preserve">
<value>Q от [л/ч]</value>
</data>
<data name="Q_to_lph" xml:space="preserve">
<value>Q до [л/ч]</value>
</data>
<data name="TargetQ" xml:space="preserve">
<value>Заданный Q [м3/ч]</value>
</data>
<data name="P_in_end" xml:space="preserve">
<value>P вверх конец</value>
</data>
@ -1569,43 +1590,31 @@
<data name="P_out_start" xml:space="preserve">
<value>P вниз начало</value>
</data>
<data name="Q_from" xml:space="preserve">
<value>Q от</value>
<data name="Target_volume_l_" xml:space="preserve">
<value>Заданный объем [л]:</value>
</data>
<data name="Q_to" xml:space="preserve">
<value>Q до</value>
<data name="Test_time_s_chdr" xml:space="preserve">
<value>Время теста [с]</value>
</data>
<data name="AtTemperature_C" xml:space="preserve">
<value>температура [°C]</value>
</data>
<data name="Focus" xml:space="preserve">
<value>Сфокусировать</value>
</data>
<data name="ROI_Detection_in_ProgressROI_Detection_in_Progress" xml:space="preserve">
<value>Продолжается распознавание</value>
</data>
<data name="String1" xml:space="preserve">
<value>Строка 1</value>
<data name="Again" xml:space="preserve">
<value>Снова</value>
</data>
<data name="Test_method2" xml:space="preserve">
<value>Метод испытаний 2</value>
<data name="PulsesPerUnit" xml:space="preserve">
<value />
</data>
<data name="Short_dercription" xml:space="preserve">
<value>Краткое описание</value>
<data name="PulsesPerKilogram" xml:space="preserve">
<value />
</data>
<data name="Correction" xml:space="preserve">
<value>Коррекция</value>
</data>
<data name="Resetting_scales" xml:space="preserve">
<value>Сброс весов</value>
</data>
<data name="Result" xml:space="preserve">
<value>Результат</value>
</data>
<data name="Evaporation" xml:space="preserve">
<value>испарение</value>
</data>
<data name="Current" xml:space="preserve">
<value>Current</value>
</data>
<data name="Voltage" xml:space="preserve">
<value>Voltage</value>
</data>
<data name="Project_number" xml:space="preserve">
<value>Номер проекта</value>
<data name="Units" xml:space="preserve">
<value />
</data>
</root>

View File

@ -117,33 +117,51 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Activity" xml:space="preserve">
<value>Činnosť</value>
<data name="Error" xml:space="preserve">
<value>Chyba</value>
</data>
<data name="Sensor" xml:space="preserve">
<value>Senzor</value>
</data>
<data name="CancelBtnText" xml:space="preserve">
<value>Zrušiť</value>
</data>
<data name="Compound" xml:space="preserve">
<value>Združený</value>
<data name="OkBtnText" xml:space="preserve">
<value>Áno</value>
</data>
<data name="Exit" xml:space="preserve">
<value>Ukončiť</value>
</data>
<data name="Compound_meters" xml:space="preserve">
<value>Združené vodomery</value>
</data>
<data name="Error" xml:space="preserve">
<value>Chyba</value>
<data name="Activity" xml:space="preserve">
<value>Činnosť</value>
</data>
<data name="Compound" xml:space="preserve">
<value>Združený</value>
</data>
<data name="Serial_number" xml:space="preserve">
<value>Sériové číslo</value>
</data>
<data name="Project_number" xml:space="preserve">
<value>Číslo projektu</value>
</data>
<data name="Language" xml:space="preserve">
<value>Jazyk</value>
</data>
<data name="OkBtnText" xml:space="preserve">
<value>Áno</value>
<data name="Paths" xml:space="preserve">
<value>Cesty</value>
</data>
<data name="Head_was_disabled_by_the_user" xml:space="preserve">
<value>Hlavica bola vypnutá používateľom</value>
<data name="Meter" xml:space="preserve">
<value>Merač</value>
</data>
<data name="RFID_communication_failed" xml:space="preserve">
<value>Zlyhala RFID komunikácia</value>
</data>
<data name="Head_was_disabled_by_the_user" xml:space="preserve">
<value>Hlavica bola vypnutá používateľom</value>
</data>
<data name="Level" xml:space="preserve">
<value>Hladina</value>
</data>
@ -156,15 +174,9 @@
<data name="Side" xml:space="preserve">
<value>Strana</value>
</data>
<data name="Meter" xml:space="preserve">
<value>Merač</value>
</data>
<data name="Result" xml:space="preserve">
<value>Výsledok</value>
</data>
<data name="Sensor" xml:space="preserve">
<value>Senzor</value>
</data>
<data name="Mute_alarm" xml:space="preserve">
<value>Stlmiť sirénu</value>
</data>
@ -217,9 +229,6 @@
<data name="Production_order_and_serial_numbers" xml:space="preserve">
<value>Výrobná zákazka a sériové čísla</value>
</data>
<data name="Serial_number" xml:space="preserve">
<value>Sériové číslo</value>
</data>
<data name="Serial_numbers" xml:space="preserve">
<value>Sériové čísla</value>
</data>
@ -235,19 +244,19 @@
<data name="Do_you_really_want_to_delete_all_codes_Q" xml:space="preserve">
<value>Naozaj chcete vymazať všetky kódy ?</value>
</data>
<data name="Exit" xml:space="preserve">
<value>Ukončiť</value>
</data>
<data name="Paths" xml:space="preserve">
<value>Cesty</value>
</data>
<data name="Project_number" xml:space="preserve">
<value>Číslo projektu</value>
</data>
<data name="ShowDialog" xml:space="preserve">
<value>Zobraz dialóg</value>
</data>
<data name="SaveCommunication" xml:space="preserve">
<value>Ulož komunikáciu</value>
</data>
<data name="PulsesPerUnit" xml:space="preserve">
<value />
</data>
<data name="PulsesPerKilogram" xml:space="preserve">
<value />
</data>
<data name="Units" xml:space="preserve">
<value />
</data>
</root>

File diff suppressed because it is too large Load Diff

View File

@ -1,16 +1,21 @@
///
using Common;
using Config.Entities;
using log4net;
///
/// Copyright (c) 2022 Sensus Slovensko a.s.
///
using System;
using System.IO;
using System.Xml.Serialization;
using Common;
using Config.Entities;
using TBF.Rig.Generic;
namespace TBF.Rig.DataEntry.StandardCamera
{
public class ProcParams : ProcedureParamsBase, IParamsProvider, IProcedureParams
{
private static readonly ILog log = LogManager.GetLogger(typeof(ProcParams));
public static XmlSerializer Serializer = XmlSerializer.FromTypes(new[] { typeof(ProcParams) })[0];
public override XmlSerializer GetSerializer() { return Serializer; }
@ -92,9 +97,9 @@ namespace TBF.Rig.DataEntry.StandardCamera
return pars;
}
public override void UpdateFromDbEntity(ComponentProcedure dbEntity)
public override bool UpdateFromDbEntity(ComponentProcedure dbEntity)
{
if (dbEntity == null) return;
if (dbEntity == null) return false;
try
{
ProcParams tmp = Serializer.Deserialize(new StringReader(dbEntity.Parameters)) as ProcParams;
@ -103,10 +108,24 @@ namespace TBF.Rig.DataEntry.StandardCamera
componentName = dbEntity.CmpntName;
procedure = dbEntity.Procedure;
if (tmp != null) tmp.CopyContentTo(this);
}
catch
if (tmp != null)
{
tmp.CopyContentTo(this);
return true;
}
else return false;
}
catch (Exception ex)
{
log.DebugFormat(
"Error during RRProcParams deserialization. CmpntName='{0}', Procedure='{1}', Parameters='{2}', Exception: {3}",
dbEntity?.CmpntName,
dbEntity?.Procedure,
dbEntity?.Parameters,
ex
);
return false;
}
}

View File

@ -1,16 +1,21 @@
///
using Common;
using Config.Entities;
using log4net;
using System;
///
/// Copyright (c) 2022 Sensus Slovensko a.s.
///
using System.IO;
using System.Xml.Serialization;
using Common;
using Config.Entities;
using TBF.Rig.Generic;
namespace TBF.Rig.DataEntry.StandartCameraPurchaseOrder
{
public class ProcParams : ProcedureParamsBase, IParamsProvider, IProcedureParams
{
private static readonly ILog log = LogManager.GetLogger(typeof(ProcParams));
public static XmlSerializer Serializer = XmlSerializer.FromTypes(new[] { typeof(ProcParams) })[0];
public override XmlSerializer GetSerializer() { return Serializer; }
@ -92,9 +97,9 @@ namespace TBF.Rig.DataEntry.StandartCameraPurchaseOrder
return pars;
}
public override void UpdateFromDbEntity(ComponentProcedure dbEntity)
public override bool UpdateFromDbEntity(ComponentProcedure dbEntity)
{
if (dbEntity == null) return;
if (dbEntity == null) return false;
try
{
ProcParams tmp = Serializer.Deserialize(new StringReader(dbEntity.Parameters)) as ProcParams;
@ -103,10 +108,24 @@ namespace TBF.Rig.DataEntry.StandartCameraPurchaseOrder
componentName = dbEntity.CmpntName;
procedure = dbEntity.Procedure;
if (tmp != null) tmp.CopyContentTo(this);
}
catch
if (tmp != null)
{
tmp.CopyContentTo(this);
return true;
}
else return false;
}
catch (Exception ex)
{
log.DebugFormat(
"Error during RRProcParams deserialization. CmpntName='{0}', Procedure='{1}', Parameters='{2}', Exception: {3}",
dbEntity?.CmpntName,
dbEntity?.Procedure,
dbEntity?.Parameters,
ex
);
return false;
}
}

View File

@ -1,16 +1,21 @@
///
using Common;
using Config.Entities;
using log4net;
using System;
///
/// Copyright (c) 2022-2023 Sensus Slovensko a.s.
///
using System.IO;
using System.Xml.Serialization;
using Common;
using Config.Entities;
using TBF.Rig.Generic;
namespace TBF.Rig.DataEntry.Uni
{
public class ProcParams : ProcedureParamsBase, IParamsProvider, IProcedureParams
{
private static readonly ILog log = LogManager.GetLogger(typeof(ProcParams));
public static XmlSerializer Serializer = XmlSerializer.FromTypes(new[] { typeof(ProcParams) })[0];
public override XmlSerializer GetSerializer() { return Serializer; }
@ -92,9 +97,9 @@ namespace TBF.Rig.DataEntry.Uni
return pars;
}
public override void UpdateFromDbEntity(ComponentProcedure dbEntity)
public override bool UpdateFromDbEntity(ComponentProcedure dbEntity)
{
if (dbEntity == null) return;
if (dbEntity == null) return false;
try
{
ProcParams tmp = Serializer.Deserialize(new StringReader(dbEntity.Parameters)) as ProcParams;
@ -103,10 +108,24 @@ namespace TBF.Rig.DataEntry.Uni
componentName = dbEntity.CmpntName;
procedure = dbEntity.Procedure;
if (tmp != null) tmp.CopyContentTo(this);
}
catch
if (tmp != null)
{
tmp.CopyContentTo(this);
return true;
}
else return false;
}
catch (Exception ex)
{
log.DebugFormat(
"Error during RRProcParams deserialization. CmpntName='{0}', Procedure='{1}', Parameters='{2}', Exception: {3}",
dbEntity?.CmpntName,
dbEntity?.Procedure,
dbEntity?.Parameters,
ex
);
return false;
}
}

View File

@ -7,7 +7,7 @@ namespace TBF.Rig.Generic
{
public interface IProcedureParams
{
void UpdateFromDbEntity(ComponentProcedure dbEntity);
bool UpdateFromDbEntity(ComponentProcedure dbEntity);
void FromDbEntity(string componentName, Procedure procedure);
ComponentProcedure ToDbEntity(string componentName, Procedure procedure);
}

View File

@ -9,12 +9,11 @@ namespace TBF.Rig.GenericDevices
Common.RegisterReaderType RegisterReaderType { get; }
int Position { get; }
double PulsesPerLtr { get; } /// [imp/l] ... water meter or volume measurement part of a heat meter
double PulsesPerLtr { get; set; } /// [imp/l] ... water meter or volume measurement part of a heat meter
double LtrsPerPulse { get; } /// [l/imp]
string QuantityUnits { get; set; } /// dm3, kg, etc
int WMPulses { get; } /// Counted pulses of the water meter
int WMRefPulses { get; } /// 'Gated' reference pulses of the water meters
double WMVolume { get; } /// Counted volume of the water meter
double BeginWMState { get; } /// Test begin state of the water meter
double EndWMState { get; } /// Test end state of the water meter

View File

@ -1,10 +1,13 @@
///
using Common;
using Config.Entities;
using log4net;
using System;
///
/// Copyright (c) 2017-2022 Sensus Slovensko a.s.
///
using System.IO;
using System.Xml.Serialization;
using Common;
using Config.Entities;
using TBF.Resources;
using TBF.Rig.Generic;
using TBF.Rig.Sequences;
@ -13,6 +16,8 @@ namespace TBF.Rig.Modbus.TempControl.Easytherm
{
public class ProcParams : ProcedureParamsBase, IParamsProvider, IProcedureParams
{
private static readonly ILog log = LogManager.GetLogger(typeof(ProcParams));
public static XmlSerializer Serializer = XmlSerializer.FromTypes(new[] { typeof(ProcParams) })[0];
public override XmlSerializer GetSerializer() { return Serializer; }
@ -127,9 +132,9 @@ namespace TBF.Rig.Modbus.TempControl.Easytherm
return pars;
}
public override void UpdateFromDbEntity(ComponentProcedure dbEntity)
public override bool UpdateFromDbEntity(ComponentProcedure dbEntity)
{
if (dbEntity == null) return;
if (dbEntity == null) return false;
try
{
ProcParams tmp = Serializer.Deserialize(new StringReader(dbEntity.Parameters)) as ProcParams;
@ -138,10 +143,24 @@ namespace TBF.Rig.Modbus.TempControl.Easytherm
componentName = dbEntity.CmpntName;
procedure = dbEntity.Procedure;
if (tmp != null) tmp.CopyContentTo(this);
}
catch
if (tmp != null)
{
tmp.CopyContentTo(this);
return true;
}
else return false;
}
catch (Exception ex)
{
log.DebugFormat(
"Error during Procedure parameters deserialization. CmpntName='{0}', Procedure='{1}', Parameters='{2}', Exception: {3}",
dbEntity?.CmpntName,
dbEntity?.Procedure,
dbEntity?.Parameters,
ex
);
return false;
}
}

View File

@ -1,10 +1,13 @@
///
using Common;
using Config.Entities;
using log4net;
using System;
///
/// Copyright (c) 2022 Sensus Slovensko a.s.
///
using System.IO;
using System.Xml.Serialization;
using Common;
using Config.Entities;
using TBF.Resources;
using TBF.Rig.Generic;
using TBF.Rig.Sequences;
@ -13,6 +16,8 @@ namespace TBF.Rig.Modbus.TempControl.Novus
{
public class ProcParams : ProcedureParamsBase, IParamsProvider, IProcedureParams
{
private static readonly ILog log = LogManager.GetLogger(typeof(ProcParams));
public static XmlSerializer Serializer = XmlSerializer.FromTypes(new[] { typeof(ProcParams) })[0];
public override XmlSerializer GetSerializer() { return Serializer; }
@ -127,9 +132,9 @@ namespace TBF.Rig.Modbus.TempControl.Novus
return pars;
}
public override void UpdateFromDbEntity(ComponentProcedure dbEntity)
public override bool UpdateFromDbEntity(ComponentProcedure dbEntity)
{
if (dbEntity == null) return;
if (dbEntity == null) return false;
try
{
ProcParams tmp = Serializer.Deserialize(new StringReader(dbEntity.Parameters)) as ProcParams;
@ -138,10 +143,24 @@ namespace TBF.Rig.Modbus.TempControl.Novus
componentName = dbEntity.CmpntName;
procedure = dbEntity.Procedure;
if (tmp != null) tmp.CopyContentTo(this);
}
catch
if (tmp != null)
{
tmp.CopyContentTo(this);
return true;
}
else return false;
}
catch (Exception ex)
{
log.DebugFormat(
"Error during RRProcParams deserialization. CmpntName='{0}', Procedure='{1}', Parameters='{2}', Exception: {3}",
dbEntity?.CmpntName,
dbEntity?.Procedure,
dbEntity?.Parameters,
ex
);
return false;
}
}

View File

@ -1,19 +1,22 @@
///
using Common;
using Config.Entities;
using log4net;
///
/// Copyright (c) 2017 Sensus Metering Systems
///
using System;
using System.IO;
using System.Text;
using System.Xml.Serialization;
using Common;
using Config.Entities;
using TBF.Rig.Generic;
using TBF.Resources;
using TBF.Rig.Generic;
namespace TBF.Rig.Network.Camera.Roi
{
public class ProcedureParams : ProcedureParamsBase, IParamsProvider, IProcedureParams
{
private static readonly ILog log = LogManager.GetLogger(typeof(ProcedureParams));
public static XmlSerializer Serializer = XmlSerializer.FromTypes(new[] { typeof(ProcedureParams) })[0];
public override XmlSerializer GetSerializer() { return Serializer; }
@ -114,9 +117,9 @@ namespace TBF.Rig.Network.Camera.Roi
return pars;
}
public override void UpdateFromDbEntity(ComponentProcedure dbEntity)
public override bool UpdateFromDbEntity(ComponentProcedure dbEntity)
{
if (dbEntity == null) return;
if (dbEntity == null) return false;
try
{
ProcedureParams tmp = Serializer.Deserialize(new StringReader(dbEntity.Parameters)) as ProcedureParams;
@ -125,10 +128,24 @@ namespace TBF.Rig.Network.Camera.Roi
componentName = dbEntity.CmpntName;
procedure = dbEntity.Procedure;
if (tmp != null) tmp.CopyContentTo(this);
}
catch
if (tmp != null)
{
tmp.CopyContentTo(this);
return true;
}
else return false;
}
catch (Exception ex)
{
log.DebugFormat(
"Error during Procedure parameters deserialization. CmpntName='{0}', Procedure='{1}', Parameters='{2}', Exception: {3}",
dbEntity?.CmpntName,
dbEntity?.Procedure,
dbEntity?.Parameters,
ex
);
return false;
}
}

View File

@ -39,8 +39,13 @@ namespace TBF.Rig.Network.Camera.Roi
}
}
public RegisterReaderType RegisterReaderType { get { return RegisterReaderType.Camera; } }
public double PulsesPerLtr { get { return RoiCfg.ProcParams.PulsesPerLtr; } }
public double PulsesPerLtr
{
get { return RoiCfg.ProcParams.PulsesPerLtr; }
set { RoiCfg.ProcParams.PulsesPerLtr = value; }
}
public double LtrsPerPulse { get { return (PulsesPerLtr <= float.Epsilon) ? 1.0 : (1 / PulsesPerLtr); } }
public string QuantityUnits { get; set; }
int cameraPulses;
int pulsesDelta; /// = (WMPulses - cameraPulses) ... WMPulses = cameraPulses + pulsesDelta, Clear() calculates pulsesDelta

View File

@ -1,17 +1,22 @@
///
using Common;
using Config.Entities;
using log4net;
using System;
///
/// Copyright (c) 2017 Sensus Metering Systems
///
using System.IO;
using System.Xml.Serialization;
using Common;
using Config.Entities;
using TBF.Rig.Generic;
using TBF.Resources;
using TBF.Rig.Generic;
namespace TBF.Rig.Network.Camera.RoiForFixedStart
{
public class ProcedureParams : ProcedureParamsBase, IParamsProvider, IProcedureParams
{
private static readonly ILog log = LogManager.GetLogger(typeof(ProcedureParams));
public static XmlSerializer Serializer = XmlSerializer.FromTypes(new[] { typeof(ProcedureParams) })[0];
public override XmlSerializer GetSerializer() { return Serializer; }
@ -80,9 +85,9 @@ namespace TBF.Rig.Network.Camera.RoiForFixedStart
return pars;
}
public override void UpdateFromDbEntity(ComponentProcedure dbEntity)
public override bool UpdateFromDbEntity(ComponentProcedure dbEntity)
{
if (dbEntity == null) return;
if (dbEntity == null) return false;
try
{
ProcedureParams tmp = Serializer.Deserialize(new StringReader(dbEntity.Parameters)) as ProcedureParams;
@ -91,10 +96,24 @@ namespace TBF.Rig.Network.Camera.RoiForFixedStart
componentName = dbEntity.CmpntName;
procedure = dbEntity.Procedure;
if (tmp != null) tmp.CopyContentTo(this);
}
catch
if (tmp != null)
{
tmp.CopyContentTo(this);
return true;
}
else return false;
}
catch (Exception ex)
{
log.DebugFormat(
"Error during RRProcParams deserialization. CmpntName='{0}', Procedure='{1}', Parameters='{2}', Exception: {3}",
dbEntity?.CmpntName,
dbEntity?.Procedure,
dbEntity?.Parameters,
ex
);
return false;
}
}

View File

@ -36,8 +36,13 @@ namespace TBF.Rig.Network.Camera.RoiForFixedStart
}
}
public RegisterReaderType RegisterReaderType { get { return RegisterReaderType.Manual; } }
public double PulsesPerLtr { get { return roiCfg.ProcParams.PulsesPerLtr; } }
public double PulsesPerLtr
{
get { return roiCfg.ProcParams.PulsesPerLtr; }
set { roiCfg.ProcParams.PulsesPerLtr = value; }
}
public double LtrsPerPulse { get { return (PulsesPerLtr <= float.Epsilon) ? 1.0 : (1 / PulsesPerLtr); } }
public string QuantityUnits { get; set; }
double beginWMState;

View File

@ -1,17 +1,22 @@
///
using Common;
using Config.Entities;
using log4net;
using System;
///
/// Copyright (c) 2017 Sensus Metering Systems
///
using System.IO;
using System.Xml.Serialization;
using Common;
using Config.Entities;
using TBF.Rig.Generic;
using TBF.Resources;
using TBF.Rig.Generic;
namespace TBF.Rig.Network.Camera.RoiForFixedStartCJMS11
{
public class ProcedureParams : ProcedureParamsBase, IParamsProvider, IProcedureParams
{
private static readonly ILog log = LogManager.GetLogger(typeof(ProcedureParams));
public static XmlSerializer Serializer = XmlSerializer.FromTypes(new[] { typeof(ProcedureParams) })[0];
public override XmlSerializer GetSerializer() { return Serializer; }
@ -80,9 +85,9 @@ namespace TBF.Rig.Network.Camera.RoiForFixedStartCJMS11
return pars;
}
public override void UpdateFromDbEntity(ComponentProcedure dbEntity)
public override bool UpdateFromDbEntity(ComponentProcedure dbEntity)
{
if (dbEntity == null) return;
if (dbEntity == null) return false;
try
{
ProcedureParams tmp = Serializer.Deserialize(new StringReader(dbEntity.Parameters)) as ProcedureParams;
@ -91,10 +96,24 @@ namespace TBF.Rig.Network.Camera.RoiForFixedStartCJMS11
componentName = dbEntity.CmpntName;
procedure = dbEntity.Procedure;
if (tmp != null) tmp.CopyContentTo(this);
}
catch
if (tmp != null)
{
tmp.CopyContentTo(this);
return true;
}
else return false;
}
catch (Exception ex)
{
log.DebugFormat(
"Error during Procedure parameters deserialization. CmpntName='{0}', Procedure='{1}', Parameters='{2}', Exception: {3}",
dbEntity?.CmpntName,
dbEntity?.Procedure,
dbEntity?.Parameters,
ex
);
return false;
}
}

View File

@ -36,9 +36,13 @@ namespace TBF.Rig.Network.Camera.RoiForFixedStartCJMS11
}
}
public RegisterReaderType RegisterReaderType { get { return RegisterReaderType.Manual; } }
public double PulsesPerLtr { get { return roiCfg.ProcParams.PulsesPerLtr; } }
public double PulsesPerLtr
{
get { return roiCfg.ProcParams.PulsesPerLtr; }
set { roiCfg.ProcParams.PulsesPerLtr = value; }
}
public double LtrsPerPulse { get { return (PulsesPerLtr <= float.Epsilon) ? 1.0 : (1 / PulsesPerLtr); } }
public string QuantityUnits { get; set; }
double beginWMState;
public double BeginWMState

View File

@ -1,17 +1,21 @@
///
using Common;
using Config.Entities;
using log4net;
using System;
///
/// Copyright (c) 2017 Sensus Metering Systems
///
using System.IO;
using System.Xml.Serialization;
using Common;
using Config.Entities;
using TBF.Rig.Generic;
using TBF.Resources;
using TBF.Rig.Generic;
namespace TBF.Rig.Network.Camera.RoiForFixedStartKeyence
{
public class ProcedureParams : ProcedureParamsBase, IParamsProvider, IProcedureParams
{
private static readonly ILog log = LogManager.GetLogger(typeof(ProcedureParams));
public static XmlSerializer Serializer = XmlSerializer.FromTypes(new[] { typeof(ProcedureParams) })[0];
public override XmlSerializer GetSerializer() { return Serializer; }
@ -80,9 +84,9 @@ namespace TBF.Rig.Network.Camera.RoiForFixedStartKeyence
return pars;
}
public override void UpdateFromDbEntity(ComponentProcedure dbEntity)
public override bool UpdateFromDbEntity(ComponentProcedure dbEntity)
{
if (dbEntity == null) return;
if (dbEntity == null) return false;
try
{
ProcedureParams tmp = Serializer.Deserialize(new StringReader(dbEntity.Parameters)) as ProcedureParams;
@ -91,10 +95,24 @@ namespace TBF.Rig.Network.Camera.RoiForFixedStartKeyence
componentName = dbEntity.CmpntName;
procedure = dbEntity.Procedure;
if (tmp != null) tmp.CopyContentTo(this);
}
catch
if (tmp != null)
{
tmp.CopyContentTo(this);
return true;
}
else return false;
}
catch (Exception ex)
{
log.DebugFormat(
"Error during RRProcParams deserialization. CmpntName='{0}', Procedure='{1}', Parameters='{2}', Exception: {3}",
dbEntity?.CmpntName,
dbEntity?.Procedure,
dbEntity?.Parameters,
ex
);
return false;
}
}

View File

@ -38,8 +38,13 @@ namespace TBF.Rig.Network.Camera.RoiForFixedStartKeyence
}
}
public RegisterReaderType RegisterReaderType { get { return RegisterReaderType.Manual; } }
public double PulsesPerLtr { get { return roiCfg.ProcParams.PulsesPerLtr; } }
public double PulsesPerLtr
{
get { return roiCfg.ProcParams.PulsesPerLtr; }
set { roiCfg.ProcParams.PulsesPerLtr = value; }
}
public double LtrsPerPulse { get { return (PulsesPerLtr <= float.Epsilon) ? 1.0 : (1 / PulsesPerLtr); } }
public string QuantityUnits { get; set; }
double beginWMState;

View File

@ -267,9 +267,9 @@ namespace TBF.Rig.Output.DB.SensusOracle
return pars;
}
public override void UpdateFromDbEntity(ComponentProcedure dbEntity)
public override bool UpdateFromDbEntity(ComponentProcedure dbEntity)
{
if (dbEntity == null) return;
if (dbEntity == null) return false;
try
{
ProcedureParams tmp = Serializer.Deserialize(new StringReader(dbEntity.Parameters)) as ProcedureParams;
@ -278,11 +278,24 @@ namespace TBF.Rig.Output.DB.SensusOracle
componentName = dbEntity.CmpntName;
procedure = dbEntity.Procedure;
if (tmp != null) tmp.CopyContentTo(this);
}
catch (Exception exc)
if (tmp != null)
{
log.ErrorFormat("Failed to UpdateFromDbEntity({0}): {1}", dbEntity, exc.Message);
tmp.CopyContentTo(this);
return true;
}
else return false;
}
catch (Exception ex)
{
log.DebugFormat(
"Error during Procedure parameters deserialization. CmpntName='{0}', Procedure='{1}', Parameters='{2}', Exception: {3}",
dbEntity?.CmpntName,
dbEntity?.Procedure,
dbEntity?.Parameters,
ex
);
return false;
}
}

View File

@ -43,8 +43,9 @@ namespace TBF.Rig
}
/// <summary> To be overridden </summary>
public virtual void UpdateFromDbEntity(ComponentProcedure dbEntity)
public virtual bool UpdateFromDbEntity(ComponentProcedure dbEntity)
{
return false;
}
public void FromDbEntity(string cmpntName, Procedure procedure)

View File

@ -1,12 +1,13 @@
///
using Common;
using Config.Entities;
using log4net;
///
/// Copyright (c) 2022 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;
using System.IO;
using System.Xml.Serialization;
using Common;
using Config.Entities;
using TBF.Resources;
using TBF.Rig.Generic;
using TBF.Rig.Sequences;
@ -22,6 +23,8 @@ namespace TBF.Rig.RegisterReaders.DataStream.Reader
public class ProcParams : ProcedureParamsBase, IParamsProvider, IProcedureParams
{
private static readonly ILog log = LogManager.GetLogger(typeof(ProcParams));
public static XmlSerializer Serializer = XmlSerializer.FromTypes(new[] { typeof(ProcParams) })[0];
public override XmlSerializer GetSerializer() { return Serializer; }
@ -183,9 +186,9 @@ namespace TBF.Rig.RegisterReaders.DataStream.Reader
return pars;
}
public override void UpdateFromDbEntity(ComponentProcedure dbEntity)
public override bool UpdateFromDbEntity(ComponentProcedure dbEntity)
{
if (dbEntity == null) return;
if (dbEntity == null) return false;
try
{
ProcParams tmp = Serializer.Deserialize(new StringReader(dbEntity.Parameters)) as ProcParams;
@ -194,10 +197,24 @@ namespace TBF.Rig.RegisterReaders.DataStream.Reader
componentName = dbEntity.CmpntName;
procedure = dbEntity.Procedure;
if (tmp != null) tmp.CopyContentTo(this);
}
catch
if (tmp != null)
{
tmp.CopyContentTo(this);
return true;
}
else return false;
}
catch (Exception ex)
{
log.DebugFormat(
"Error during Procedure parameters deserialization. CmpntName='{0}', Procedure='{1}', Parameters='{2}', Exception: {3}",
dbEntity?.CmpntName,
dbEntity?.Procedure,
dbEntity?.Parameters,
ex
);
return false;
}
}

View File

@ -33,8 +33,13 @@ namespace TBF.Rig.RegisterReaders.DataStream.Reader
readonly ReaderCfg myCfg;
public RegisterReaderType RegisterReaderType { get { return RegisterReaderType.DataStream; } }
public int Position { get { return (myCfg != null) ? myCfg.Position : 1; } }
public double PulsesPerLtr { get { return 1.0; } }
public double PulsesPerLtr
{
get { return 1.0; }
set { }
}
public double LtrsPerPulse { get { return 1.0; } }
public string QuantityUnits { get; set; }
public UnitsSource UnitsSource { get { return (myCfg != null && myCfg.ProcParams != null) ? myCfg.ProcParams.UnitsSource : UnitsSource.AsDefined; } }
public Common.Unit AsDefTimeUnit { get { return (myCfg != null && myCfg.ProcParams != null) ? myCfg.ProcParams.TimeUnit : Common.Unit.s; } }

View File

@ -17,8 +17,15 @@ namespace TBF.Rig.RegisterReaders.FrequencyMeterFromUniCB
public int Position { get{ return rrCfg.Position; } }
public Common.RegisterReaderType RegisterReaderType { get { return Common.RegisterReaderType.Pulses; } }
public double PulsesPerLtr { get { return rrCfg.ProcParams.PulsesPerLtr; } }
public double LtrsPerPulse { get { return (PulsesPerLtr <= float.Epsilon) ? 1.0 : (1 / PulsesPerLtr); ; } }
public double PulsesPerLtr
{
get { return rrCfg.ProcParams.PulsesPerLtr; }
set { rrCfg.ProcParams.PulsesPerLtr = value; }
}
public double LtrsPerPulse { get { return (PulsesPerLtr <= float.Epsilon) ? 1.0 : (1 / PulsesPerLtr); } }
public string QuantityUnits { get; set; }
public int Filter { get { return rrCfg.ProcParams.Filter; } }
public int WMPulses { get { return cb.PulsesWM(Position); } }

View File

@ -1,3 +1,6 @@
using Common;
using Config.Entities;
using log4net;
///
/// Copyright (c) 2021 Sensus Slovensko a.s.
///
@ -5,15 +8,15 @@ using System;
using System.IO;
using System.Text;
using System.Xml.Serialization;
using Common;
using Config.Entities;
using TBF.Rig.Generic;
using TBF.Resources;
using TBF.Rig.Generic;
namespace TBF.Rig.RegisterReaders.FrequencyMeterFromUniCB
{
public class RRProcParams : ProcedureParamsBase, IParamsProvider, IProcedureParams
{
private static readonly ILog log = LogManager.GetLogger(typeof(RRProcParams));
public static XmlSerializer Serializer = XmlSerializer.FromTypes(new[] { typeof(RRProcParams) })[0];
public override XmlSerializer GetSerializer() { return Serializer; }
@ -94,9 +97,9 @@ namespace TBF.Rig.RegisterReaders.FrequencyMeterFromUniCB
return pars;
}
public override void UpdateFromDbEntity(ComponentProcedure dbEntity)
public override bool UpdateFromDbEntity(ComponentProcedure dbEntity)
{
if (dbEntity == null) return;
if (dbEntity == null) return false;
try
{
RRProcParams tmp = Serializer.Deserialize(new StringReader(dbEntity.Parameters)) as RRProcParams;
@ -105,10 +108,24 @@ namespace TBF.Rig.RegisterReaders.FrequencyMeterFromUniCB
componentName = dbEntity.CmpntName;
procedure = dbEntity.Procedure;
if (tmp != null) tmp.CopyContentTo(this);
}
catch
if (tmp != null)
{
tmp.CopyContentTo(this);
return true;
}
else return false;
}
catch (Exception ex)
{
log.DebugFormat(
"Error during RRProcParams deserialization. CmpntName='{0}', Procedure='{1}', Parameters='{2}', Exception: {3}",
dbEntity?.CmpntName,
dbEntity?.Procedure,
dbEntity?.Parameters,
ex
);
return false;
}
}

View File

@ -484,6 +484,7 @@ namespace TBF.Rig.RegisterReaders.IPerlReader.implementations
public double PulsesPerLtr
{
get { return 1000.0; }
set { PulsesPerLtr = value; }
}
public double LtrsPerPulse
@ -491,6 +492,8 @@ namespace TBF.Rig.RegisterReaders.IPerlReader.implementations
get { return 1 / PulsesPerLtr; }
}
public string QuantityUnits { get; set; }
public int WMPulses
{
get { return wmPulses; }

View File

@ -1,19 +1,22 @@
///
using Common;
using Config.Entities;
using log4net;
///
/// Copyright (c) 2018 Sensus Slovensko a.s.
///
using System;
using System.IO;
using System.Text;
using System.Xml.Serialization;
using Common;
using Config.Entities;
using TBF.Rig.Generic;
using TBF.Resources;
using TBF.Rig.Generic;
namespace TBF.Rig.RegisterReaders.KPackE.RegisterReader
{
public class ProcedureParams : ProcedureParamsBase, IParamsProvider, IProcedureParams
{
private static readonly ILog log = LogManager.GetLogger(typeof(ProcedureParams));
public static XmlSerializer Serializer = XmlSerializer.FromTypes(new[] { typeof(ProcedureParams) })[0];
public override XmlSerializer GetSerializer() { return Serializer; }
@ -82,9 +85,9 @@ namespace TBF.Rig.RegisterReaders.KPackE.RegisterReader
return pars;
}
public override void UpdateFromDbEntity(ComponentProcedure dbEntity)
public override bool UpdateFromDbEntity(ComponentProcedure dbEntity)
{
if (dbEntity == null) return;
if (dbEntity == null) return false;
try
{
ProcedureParams tmp = Serializer.Deserialize(new StringReader(dbEntity.Parameters)) as ProcedureParams;
@ -93,10 +96,24 @@ namespace TBF.Rig.RegisterReaders.KPackE.RegisterReader
componentName = dbEntity.CmpntName;
procedure = dbEntity.Procedure;
if (tmp != null) tmp.CopyContentTo(this);
}
catch
if (tmp != null)
{
tmp.CopyContentTo(this);
return true;
}
else return false;
}
catch (Exception ex)
{
log.DebugFormat(
"Error during Procedure parameters deserialization. CmpntName='{0}', Procedure='{1}', Parameters='{2}', Exception: {3}",
dbEntity?.CmpntName,
dbEntity?.Procedure,
dbEntity?.Parameters,
ex
);
return false;
}
}

View File

@ -29,8 +29,12 @@ namespace TBF.Rig.RegisterReaders.KPackE.RegisterReader
}
}
public RegisterReaderType RegisterReaderType { get { return RegisterReaderType.Manual; } }
public double PulsesPerLtr { get { return rrCfg.ProcParams.PulsesPerLtr; } }
public double PulsesPerLtr {
get { return rrCfg.ProcParams.PulsesPerLtr; }
set { rrCfg.ProcParams.PulsesPerLtr = value; }
}
public double LtrsPerPulse { get { return (PulsesPerLtr <= float.Epsilon) ? 1.0 : (1 / PulsesPerLtr); } }
public string QuantityUnits { get; set; }
/// <summary>
/// Writen to by DataEntryForRadio component

View File

@ -1,15 +1,20 @@
using System.IO;
using System.Xml.Serialization;
using Common;
using Config.Entities;
using log4net;
using System;
using System.IO;
using System.Xml.Serialization;
using TBF.Resources;
using TBF.Rig.Generic;
using TBF.Rig.RegisterReaders.SerialStream;
namespace TBF.Rig.RegisterReaders.PoseidonCmdStartStop
{
public class PoseidonProcParams : ProcedureParamsBase, IParamsProvider, IProcedureParams
{
private static readonly ILog log = LogManager.GetLogger(typeof(PoseidonProcParams));
public static XmlSerializer Serializer = XmlSerializer.FromTypes(new[] { typeof(PoseidonProcParams) })[0];
public override XmlSerializer GetSerializer() { return Serializer; }
@ -250,9 +255,9 @@ namespace TBF.Rig.RegisterReaders.PoseidonCmdStartStop
return pars;
}
public override void UpdateFromDbEntity(ComponentProcedure dbEntity)
public override bool UpdateFromDbEntity(ComponentProcedure dbEntity)
{
if (dbEntity == null) return;
if (dbEntity == null) return false;
try
{
PoseidonProcParams tmp = Serializer.Deserialize(new StringReader(dbEntity.Parameters)) as PoseidonProcParams;
@ -261,10 +266,24 @@ namespace TBF.Rig.RegisterReaders.PoseidonCmdStartStop
componentName = dbEntity.CmpntName;
procedure = dbEntity.Procedure;
if (tmp != null) tmp.CopyContentTo(this);
}
catch
if (tmp != null)
{
tmp.CopyContentTo(this);
return true;
}
else return false;
}
catch (Exception ex)
{
log.DebugFormat(
"Error during RRProcParams deserialization. CmpntName='{0}', Procedure='{1}', Parameters='{2}', Exception: {3}",
dbEntity?.CmpntName,
dbEntity?.Procedure,
dbEntity?.Parameters,
ex
);
return false;
}
}

View File

@ -93,8 +93,12 @@ namespace TBF.Rig.RegisterReaders.PoseidonCmdStartStop
}
}
public RegisterReaderType RegisterReaderType { get { return RegisterReaderType.DataStream; } }
public double PulsesPerLtr { get { return 1000.0; } }
public double PulsesPerLtr {
get { return 1000.0;}
set { PulsesPerLtr = value; }
}
public double LtrsPerPulse { get { return 1 / PulsesPerLtr; } }
public string QuantityUnits { get; set; }
///
/// Wrappers for procedure parameters

View File

@ -1,8 +1,10 @@
using Common;
using Config.Entities;
using log4net;
using System;
using System.Collections.Generic;
using System.IO;
using System.Xml.Serialization;
using Common;
using Config.Entities;
using TBF.Rig.Generic;
using TBF.Rig.RegisterReaders.CommonRR;
@ -10,6 +12,7 @@ namespace TBF.Rig.RegisterReaders.PoseidonReader
{
public class ProcParams : ProcedureParamsBase, IParamsProvider, IProcedureParams
{
private static readonly ILog log = LogManager.GetLogger(typeof(ProcParams));
public static XmlSerializer Serializer = XmlSerializer.FromTypes(new[] { typeof(ProcParams) })[0];
public override XmlSerializer GetSerializer() { return Serializer; }
@ -146,9 +149,9 @@ namespace TBF.Rig.RegisterReaders.PoseidonReader
return pars;
}
public override void UpdateFromDbEntity(ComponentProcedure dbEntity)
public override bool UpdateFromDbEntity(ComponentProcedure dbEntity)
{
if (dbEntity == null) return;
if (dbEntity == null) return false;
try
{
ProcParams tmp = Serializer.Deserialize(new StringReader(dbEntity.Parameters)) as ProcParams;
@ -157,10 +160,24 @@ namespace TBF.Rig.RegisterReaders.PoseidonReader
componentName = dbEntity.CmpntName;
procedure = dbEntity.Procedure;
if (tmp != null) tmp.CopyContentTo(this);
}
catch
if (tmp != null)
{
tmp.CopyContentTo(this);
return true;
}
else return false;
}
catch (Exception ex)
{
log.DebugFormat(
"Error during Procedure parameters deserialization. CmpntName='{0}', Procedure='{1}', Parameters='{2}', Exception: {3}",
dbEntity?.CmpntName,
dbEntity?.Procedure,
dbEntity?.Parameters,
ex
);
return false;
}
}

View File

@ -400,8 +400,12 @@ namespace TBF.Rig.RegisterReaders.PoseidonReader
double wmVolume;
double wmTestTime;
public double PulsesPerLtr { get { return 1000.0; } }
public double PulsesPerLtr {
get { return 1000.0; }
set { PulsesPerLtr = value; }
}
public double LtrsPerPulse { get { return 1 / PulsesPerLtr; } }
public string QuantityUnits { get; set; }
public int WMPulses { get { return wmPulses; } }
public int WMRefPulses { get { return wmRefPulses; }}
public double WMVolume { get { return wmVolume; } }

View File

@ -121,8 +121,12 @@ namespace TBF.Rig.RegisterReaders.PoseidonReader.implementations
private double _endWmState ;
public double PulsesPerLtr { get => _pulsesPerLtr; }
public double PulsesPerLtr {
get => _pulsesPerLtr;
set => _pulsesPerLtr = value;
}
public double LtrsPerPulse { get => _ltrsPerPulse; }
public string QuantityUnits { get; set; }
public int WMPulses { get => _wmPulses; }
public int WMRefPulses { get =>_wmRefPulses; }
public double WMVolume { get =>_wmVolume; }

View File

@ -101,7 +101,7 @@ namespace TBF.Rig.RegisterReaders.PulsesFromUniCB
this.parentNameComboBox.Size = new System.Drawing.Size(130, 21);
this.parentNameComboBox.TabIndex = 4;
//
// RegisterReaderCfgCtrl
// RRCfgCtrl
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
@ -112,7 +112,7 @@ namespace TBF.Rig.RegisterReaders.PulsesFromUniCB
this.Controls.Add(this.nameTextBox);
this.Controls.Add(this.nameLabel);
this.Controls.Add(this.componentNameLabel);
this.Name = "RegisterReaderCfgCtrl";
this.Name = "RRCfgCtrl";
this.Size = new System.Drawing.Size(300, 200);
this.Load += new System.EventHandler(this.RegisterReaderCfgCtrl_Load);
this.ResumeLayout(false);

View File

@ -1,45 +1,86 @@
///
using Common;
using Config.Entities;
using log4net;
using SharedComponents;
///
/// Copyright (c) 2021 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Text;
using System.Xml.Serialization;
using Common;
using Config.Entities;
using TBF.Rig.Generic;
using TBF.Resources;
using TBF.Rig.Generic;
namespace TBF.Rig.RegisterReaders.PulsesFromUniCB
{
public class RRProcParams : ProcedureParamsBase, IParamsProvider, IProcedureParams
{
private static readonly ILog log = LogManager.GetLogger(typeof(RRProcParams));
public static XmlSerializer Serializer = XmlSerializer.FromTypes(new[] { typeof(RRProcParams) })[0];
public override XmlSerializer GetSerializer() { return Serializer; }
public double PulsesPerLtr; /// [l^-1]
public string Units; /// [kg^-1]...MF
public int Filter;
public override void InitializeAll()
{
PulsesPerLtr = 1.0;
Units = "---"; //...MF
Filter = 0;
}
string[] paramNames = new string[]
{
Strings.PulsesPerLtr,
//Strings.PulsesPerLtr,
Strings.PulsesPerUnit,
Strings.Units,
Strings.Filter,
};
public override string ParamName(int i) { return paramNames[i]; }
//...MF
private void RefreshParamNames(int i) {
if (i == 0)
{
if (Units == "kg") paramNames[0] = Strings.PulsesPerKilogram;
else if (Units == "dm3") paramNames[0] = Strings.PulsesPerLtr;
else paramNames[0] = Strings.PulsesPerLtr;
}
}
public override string ParamName(int i)
{
//if(i==0) RefreshParamNames(0);//...MF
return paramNames[i];
}
public override int ParamsCount() { return paramNames.Length; }
public ICollection<string> ParamValues(int ix)
{
var values = new List<string>();
switch (ix)
{
case 1:
for (PulsesTypeByQuantity m = 0; m < PulsesTypeByQuantity.Count; m++) values.Add(m.ToDescription());
return values;
default:
return null;
}
}
public override string ToString(int i)
{
switch (i)
{
case 0: return PulsesPerLtr.ToString();
case 1: return Filter.ToString();
case 1: return Units;
case 2: return Filter.ToString();
default: return string.Empty;
}
}
@ -50,7 +91,8 @@ namespace TBF.Rig.RegisterReaders.PulsesFromUniCB
switch (i)
{
case 0: PulsesPerLtr = Utils.ParseUDouble(strValue); return CfgUpdateFlags.None;
case 1: Filter = int.Parse(strValue); return CfgUpdateFlags.None;
case 1: Units = strValue; return CfgUpdateFlags.None;
case 2: Filter = int.Parse(strValue); return CfgUpdateFlags.None;
default: return CfgUpdateFlags.None;
}
}
@ -67,8 +109,9 @@ namespace TBF.Rig.RegisterReaders.PulsesFromUniCB
case 0:
if (Utils.TryParseUDouble(strValue, out dummy)) return true;
break;
case 1:
return true;
case 2:
if (int.TryParse(strValue, out idummy) && (idummy >= 0)) return true;
break;
@ -84,6 +127,7 @@ namespace TBF.Rig.RegisterReaders.PulsesFromUniCB
void CopyContentTo(RRProcParams prms)
{
prms.PulsesPerLtr = this.PulsesPerLtr;
prms.Units = this.Units; //...MF
prms.Filter = this.Filter;
}
@ -94,9 +138,9 @@ namespace TBF.Rig.RegisterReaders.PulsesFromUniCB
return pars;
}
public override void UpdateFromDbEntity(ComponentProcedure dbEntity)
public override bool UpdateFromDbEntity(ComponentProcedure dbEntity)
{
if (dbEntity == null) return;
if (dbEntity == null) return false;
try
{
RRProcParams tmp = Serializer.Deserialize(new StringReader(dbEntity.Parameters)) as RRProcParams;
@ -105,13 +149,34 @@ namespace TBF.Rig.RegisterReaders.PulsesFromUniCB
componentName = dbEntity.CmpntName;
procedure = dbEntity.Procedure;
if (tmp != null) tmp.CopyContentTo(this);
}
catch
if (tmp != null)
{
tmp.CopyContentTo(this);
return true;
}
else return false;
}
catch (Exception ex)
{
log.DebugFormat(
"Error during RRProcParams deserialization. CmpntName='{0}', Procedure='{1}', Parameters='{2}', Exception: {3}",
dbEntity?.CmpntName,
dbEntity?.Procedure,
dbEntity?.Parameters,
ex
);
LiveLogDiag.Log1(
"Error during RRProcParams deserialization. CmpntName='{0}', Procedure='{1}', Parameters='{2}', Exception: {3}",
dbEntity?.CmpntName,
dbEntity?.Procedure,
dbEntity?.Parameters,
ex
);
return false;
}
}
public RRProcParams()
{
@ -129,4 +194,17 @@ namespace TBF.Rig.RegisterReaders.PulsesFromUniCB
this.procedure = procedure;
}
}
/// <summary>
/// Diagnostic logging MF
/// Activated by compilation condition: DIAG_ENDURANCE_xyz
/// </summary>
static class LiveLogDiag
{
[Conditional("DIAG_LOG_MASS1")]
public static void Log1(string format, params object[] args)
{
LiveLogCache.Instance.AddLog(string.Format(format, args));
}
}
}

View File

@ -18,8 +18,13 @@ namespace TBF.Rig.RegisterReaders.PulsesFromUniCB
public int Position { get { return rrCfg.Position; } } /// 1 .. ProcessData.WMsCount
public Common.RegisterReaderType RegisterReaderType { get { return Common.RegisterReaderType.Pulses; } }
public double PulsesPerLtr { get { return rrCfg.ProcParams.PulsesPerLtr; } }
public double PulsesPerLtr
{
get => rrCfg.ProcParams.PulsesPerLtr;
set => rrCfg.ProcParams.PulsesPerLtr = value;
}
public double LtrsPerPulse { get { return (PulsesPerLtr <= float.Epsilon) ? 1.0 : (1 / PulsesPerLtr); ; } }
public string QuantityUnits { get { return rrCfg.ProcParams.Units; } set { rrCfg.ProcParams.Units = value; } }
public int Filter { get { return rrCfg.ProcParams.Filter; } }
public int WMPulses { get { return cb.PulsesWM(Position); } }

View File

@ -25,8 +25,12 @@ namespace TBF.Rig.RegisterReaders.S640Stream
public int Position { get { return myCfg.Position; } }
public RegisterReaderType RegisterReaderType { get { return RegisterReaderType.DataStream; } }
public double PulsesPerLtr { get { return 1000.0; } }
public double PulsesPerLtr {
get { return 1000.0; }
set { PulsesPerLtr = value; }
}
public double LtrsPerPulse { get { return 1 / PulsesPerLtr; } }
public string QuantityUnits { get; set; }
public Unit VolumeUnits { get { return Unit.ml; } }
public double VolumeScaleFactor { get { return 1; } }
public Unit TimeUnits { get { return Unit.ms; } }

View File

@ -1,17 +1,20 @@
///
using Common;
using Config.Entities;
using log4net;
///
/// Copyright (c) 2018 Sensus Slovensko a.s.
///
using System;
using System.IO;
using System.Xml.Serialization;
using Common;
using Config.Entities;
using TBF.Rig.Generic;
namespace TBF.Rig.RegisterReaders.SerialStream
{
public class ProcParams : ProcedureParamsBase, IParamsProvider, IProcedureParams
{
private static readonly ILog log = LogManager.GetLogger(typeof(ProcParams));
public static XmlSerializer Serializer = XmlSerializer.FromTypes(new[] { typeof(ProcParams) })[0];
public override XmlSerializer GetSerializer() { return Serializer; }
@ -252,9 +255,9 @@ namespace TBF.Rig.RegisterReaders.SerialStream
return pars;
}
public override void UpdateFromDbEntity(ComponentProcedure dbEntity)
public override bool UpdateFromDbEntity(ComponentProcedure dbEntity)
{
if (dbEntity == null) return;
if (dbEntity == null) return false;
try
{
ProcParams tmp = Serializer.Deserialize(new StringReader(dbEntity.Parameters)) as ProcParams;
@ -263,10 +266,24 @@ namespace TBF.Rig.RegisterReaders.SerialStream
componentName = dbEntity.CmpntName;
procedure = dbEntity.Procedure;
if (tmp != null) tmp.CopyContentTo(this);
}
catch
if (tmp != null)
{
tmp.CopyContentTo(this);
return true;
}
else return false;
}
catch (Exception ex)
{
log.DebugFormat(
"Error during Procedure parameters deserialization. CmpntName='{0}', Procedure='{1}', Parameters='{2}', Exception: {3}",
dbEntity?.CmpntName,
dbEntity?.Procedure,
dbEntity?.Parameters,
ex
);
return false;
}
}

View File

@ -34,9 +34,12 @@ namespace TBF.Rig.RegisterReaders.SerialStream
}
}
public RegisterReaderType RegisterReaderType { get { return RegisterReaderType.DataStream; } }
public double PulsesPerLtr { get { return 1000.0; } }
public double PulsesPerLtr {
get { return 1000.0; }
set { PulsesPerLtr = value; }
}
public double LtrsPerPulse { get { return 1 / PulsesPerLtr; } }
public string QuantityUnits { get; set; }
///
/// Wrappers for procedure parameters

View File

@ -1,41 +1,78 @@
///
using Common;
using Config.Entities;
using log4net;
using SharedComponents;
///
/// Copyright (c) 2013-2015 Sensus Metering Systems
///
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Text;
using System.Xml.Serialization;
using Common;
using Config.Entities;
using TBF.Rig.Generic;
using TBF.Resources;
using TBF.Rig.Generic;
namespace TBF.Rig.RegisterReaders.StandingStartStop
{
public class RRProcParams : ProcedureParamsBase, IParamsProvider, IProcedureParams
{
private static readonly ILog log = LogManager.GetLogger(typeof(RRProcParams));
public static XmlSerializer Serializer = XmlSerializer.FromTypes(new[] { typeof(RRProcParams) })[0];
public override XmlSerializer GetSerializer() { return Serializer; }
public double PulsesPerLtr; /// Target low limit of the flow increase or decrease
public string Units; /// [kg^-1]...MF
public override void InitializeAll()
{
PulsesPerLtr = 1.0;
Units = "---"; //...MF
}
string[] paramNames = new string[]
{
Strings.PulsesPerLtr,
//Strings.PulsesPerLtr,
Strings.PulsesPerUnit,//...MF
Strings.Units,//...MF
};
//...MF
private void RefreshParamNames(int i)
{
if (i == 0)
{
if (Units == "kg") paramNames[0] = Strings.PulsesPerKilogram;
else if (Units == "dm3") paramNames[0] = Strings.PulsesPerLtr;
else paramNames[0] = Strings.PulsesPerLtr;
}
}
public override string ParamName(int i) { return paramNames[i]; }
public override int ParamsCount() { return paramNames.Length; }
public ICollection<string> ParamValues(int ix)
{
var values = new List<string>();
switch (ix)
{
case 1:
for (PulsesTypeByQuantity m = 0; m < PulsesTypeByQuantity.Count; m++) values.Add(m.ToDescription());
return values;
default:
return null;
}
}
public override string ToString(int i)
{
switch (i)
{
case 0: return PulsesPerLtr.ToString();
case 1: return Units;//...MF
default: return string.Empty;
}
}
@ -46,6 +83,7 @@ namespace TBF.Rig.RegisterReaders.StandingStartStop
switch (i)
{
case 0: PulsesPerLtr = Utils.ParseUDouble(strValue); return CfgUpdateFlags.None;
case 1: Units = strValue; return CfgUpdateFlags.None;
default: return CfgUpdateFlags.None;
}
}
@ -61,6 +99,8 @@ namespace TBF.Rig.RegisterReaders.StandingStartStop
case 0:
if (Utils.TryParseUDouble(strValue, out dummy)) return true;
break;
case 1:
return true;
default:
message = "Invalid index";
return false;
@ -73,6 +113,7 @@ namespace TBF.Rig.RegisterReaders.StandingStartStop
void CopyContentTo(RRProcParams prms)
{
prms.PulsesPerLtr = this.PulsesPerLtr;
prms.Units = this.Units; //...MF
}
public IParamsProvider Clone()
@ -82,9 +123,9 @@ namespace TBF.Rig.RegisterReaders.StandingStartStop
return pars;
}
public override void UpdateFromDbEntity(ComponentProcedure dbEntity)
public override bool UpdateFromDbEntity(ComponentProcedure dbEntity)
{
if (dbEntity == null) return;
if (dbEntity == null) return false;
try
{
RRProcParams tmp = Serializer.Deserialize(new StringReader(dbEntity.Parameters)) as RRProcParams;
@ -93,10 +134,24 @@ namespace TBF.Rig.RegisterReaders.StandingStartStop
componentName = dbEntity.CmpntName;
procedure = dbEntity.Procedure;
if (tmp != null) tmp.CopyContentTo(this);
}
catch
if (tmp != null)
{
tmp.CopyContentTo(this);
return true;
}
else return false;
}
catch (Exception ex)
{
log.DebugFormat(
"Error during Procedure parameters deserialization. CmpntName='{0}', Procedure='{1}', Parameters='{2}', Exception: {3}",
dbEntity?.CmpntName,
dbEntity?.Procedure,
dbEntity?.Parameters,
ex
);
return false;
}
}
@ -116,4 +171,17 @@ namespace TBF.Rig.RegisterReaders.StandingStartStop
this.componentName = componentName;
}
}
/// <summary>
/// Diagnostic logging MF
/// Activated by compilation condition: DIAG_ENDURANCE_xyz
/// </summary>
static class LiveLogDiag
{
[Conditional("DIAG_LOG_MASS1")]
public static void Log1(string format, params object[] args)
{
LiveLogCache.Instance.AddLog(string.Format(format, args));
}
}
}

View File

@ -28,8 +28,13 @@ namespace TBF.Rig.RegisterReaders.StandingStartStop
}
}
public RegisterReaderType RegisterReaderType { get { return RegisterReaderType.Manual; } }
public double PulsesPerLtr { get { return registerReaderCfg.ProcParams.PulsesPerLtr; } }
public double PulsesPerLtr
{
get { return registerReaderCfg.ProcParams.PulsesPerLtr; }
set { }
}
public double LtrsPerPulse { get { return (PulsesPerLtr <= float.Epsilon) ? 1.0 : (1 / PulsesPerLtr); } }
public string QuantityUnits { get; set; }
double beginWMState;

View File

@ -484,6 +484,7 @@ namespace TBF.Rig.RegisterReaders.iPerlASICReader.implementations
public double PulsesPerLtr
{
get { return 1000.0; }
set { PulsesPerLtr = value; }
}
public double LtrsPerPulse
@ -491,6 +492,8 @@ namespace TBF.Rig.RegisterReaders.iPerlASICReader.implementations
get { return 1 / PulsesPerLtr; }
}
public string QuantityUnits { get; set; }
public int WMPulses
{
get { return wmPulses; }

View File

@ -1,8 +1,10 @@
using Common;
using Config.Entities;
using log4net;
using System;
using System.Collections.Generic;
using System.IO;
using System.Xml.Serialization;
using Common;
using Config.Entities;
using TBF.Rig.Generic;
using TBF.Rig.RegisterReaders.CommonRR;
@ -10,6 +12,7 @@ namespace TBF.Rig.RegisterReaders.iPerlReaderUNI
{
public class ProcParams : ProcedureParamsBase, IParamsProvider, IProcedureParams
{
private static readonly ILog log = LogManager.GetLogger(typeof(ProcParams));
public static XmlSerializer Serializer = XmlSerializer.FromTypes(new[] { typeof(ProcParams) })[0];
public override XmlSerializer GetSerializer() { return Serializer; }
@ -146,9 +149,9 @@ namespace TBF.Rig.RegisterReaders.iPerlReaderUNI
return pars;
}
public override void UpdateFromDbEntity(ComponentProcedure dbEntity)
public override bool UpdateFromDbEntity(ComponentProcedure dbEntity)
{
if (dbEntity == null) return;
if (dbEntity == null) return false;
try
{
ProcParams tmp = Serializer.Deserialize(new StringReader(dbEntity.Parameters)) as ProcParams;
@ -157,10 +160,24 @@ namespace TBF.Rig.RegisterReaders.iPerlReaderUNI
componentName = dbEntity.CmpntName;
procedure = dbEntity.Procedure;
if (tmp != null) tmp.CopyContentTo(this);
}
catch
if (tmp != null)
{
tmp.CopyContentTo(this);
return true;
}
else return false;
}
catch (Exception ex)
{
log.DebugFormat(
"Error during Procedure parameters deserialization. CmpntName='{0}', Procedure='{1}', Parameters='{2}', Exception: {3}",
dbEntity?.CmpntName,
dbEntity?.Procedure,
dbEntity?.Parameters,
ex
);
return false;
}
}

View File

@ -1,20 +1,23 @@
///
using Common;
using Config.Entities;
using log4net;
///
/// Copyright (c) 2013-2021 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using log4net;
using Common;
using Config.Entities;
using TBF.Rig;
using System.Xml.Serialization;
using TBF.Boxes;
using TBF.Resources;
using TBF.UiBridge;
using TBF.Rig;
using TBF.Rig.GenericDevices;
using TBF.Rig.RegisterReaders.PoseidonReader;
using TBF.Rig.RegisterReaders.PoseidonReader.implementations;
using TBF.Rig.Uni.SharedDialogs.SmartMetersCommunication.common;
using TBF.UiBridge;
using TBF.Rig.RegisterReaders.PulsesFromUniCB;
namespace TBF.Rig.TestMethods.FlyingStartMassCollection
{
@ -709,6 +712,20 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection
tstRslt.ErrorMaster = Formulas.ErrorFromVolumes(tstRslt.VolumeMaster, tstRslt.VolumeCTV);
tstRslt.ConstMaster = (tstRslt.PulsesMaster != 0) ? (tstRslt.VolumeCTV / tstRslt.PulsesMaster) : tstRslt.ConstMasterCorr;
/// Master pulses per liter from the measured mass
/// Main result calculation for mass
tstRslt.MassCTV = tstRslt.Batch.Buoyancy * mass;
if ((outPath.Diverter != null) && (tstRslt.TestTime > float.Epsilon))
{
tstRslt.TestTimeCorrection = outPath.Diverter.TestTimeCorrection(flowMID);
tstRslt.MassCTV *= tstRslt.TestTime + tstRslt.TestTimeCorrection;
tstRslt.MassCTV /= tstRslt.TestTime;
}
tstRslt.MassFlow = 3.6 * tstRslt.MassCTV / tstRslt.TestTime; /// Flow from MassCTV and time
tstRslt.MassErrorMaster = Formulas.ErrorFromVolumes(tstRslt.VolumeMaster, tstRslt.MassCTV);
tstRslt.MassConstMaster = (tstRslt.PulsesMaster != 0) ? (tstRslt.MassCTV / tstRslt.PulsesMaster) : tstRslt.ConstMasterCorr;
/// Flow statistics correction
tstRslt.FlowMean = Convert.ToSingle(tstRslt.ConstMaster * RefFlowStat.Average / tstRslt.ConstMasterRaw);
tstRslt.FlowStart = Convert.ToSingle(tstRslt.ConstMaster * RefFlowStat.First / tstRslt.ConstMasterRaw);
@ -915,7 +932,35 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection
if (meterRslt != null && regReader != null)
{
meterRslt.RegReaderType = (int)regReader.RegisterReaderType;
meterRslt.PulsesPerLiter = regReader.PulsesPerLtr;
ComponentProcedure procParamsEntity = test.Procedure.GetProcedureParamsEntity(regReader.Name);
try
{
if (regReader.RegisterReaderType == RegisterReaderType.Pulses)
{
XmlSerializer Serializer = XmlSerializer.FromTypes(new[] { typeof(RRProcParams) })[0];
RRProcParams tmp = Serializer.Deserialize(new StringReader(procParamsEntity.Parameters.ToString())) as RRProcParams;
regReader.PulsesPerLtr = tmp.PulsesPerLtr;
regReader.QuantityUnits = tmp.Units;
}
else
{
//MessageBox.Show("Cannot create or initialize a printer", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
}
catch (Exception ex)
{
/*log.DebugFormat(
"Error during Procedure parameters deserialization. CmpntName='{0}', Procedure='{1}', Parameters='{2}', Exception: {3}",
dbEntity?.CmpntName,
dbEntity?.Procedure,
dbEntity?.Parameters,
ex
);*/
}
meterRslt.PulsesPerLiter = regReader.PulsesPerLtr;//...MF 11.12.2025 toto chybalo, v .csv bol stlpec naplneny nulami
meterRslt.QuantityUnits = regReader.QuantityUnits;
meterRslt.PulsesMeter = Convert.ToDouble(regReader.WMPulses);
if (dstrReader != null)
@ -1050,26 +1095,50 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection
/// Normal measurement
meterRslt.TestTime = cBrd.TestTimeWM(regReader.Position);
meterRslt.VolumeRef = meterRslt.PulsesMaster * tstRslt.ConstMaster; /// [l]
meterRslt.MassRef = meterRslt.PulsesMaster * tstRslt.MassConstMaster; /// [kg]
}
else
{
/// None or one pulse from the water meter
meterRslt.TestTime = tstRslt.TestTime;
meterRslt.VolumeRef = tstRslt.VolumeCTV; /// [l]
meterRslt.MassRef = tstRslt.MassCTV;
}
log.DebugFormat("Pulses: Pref4meter={0} Vmeter={1} Vref4meter={2} Ttime4meter={3} Ttime={4}",
log.DebugFormat("Pulses: Pref4meter={0} Vmeter={1} Vref4meter={2} Mmeter={3} Mref4meter={4} Ttime4meter={5} Ttime={6}",
meterRslt.PulsesMaster,
meterRslt.VolumeMeter,
meterRslt.VolumeRef,
meterRslt.MassMeter,
meterRslt.MassRef,
meterRslt.TestTime,
tstRslt.TestTime);
}
meterRslt.Error = Formulas.ErrorFromVolumes(meterRslt.VolumeMeter, meterRslt.VolumeRef);
meterRslt.Passed = (meterRslt.Error >= test.GetErrLimLo(tstRslt.VolumeCTV, tstRslt.TestTime) + test.Uncertainty)
&& (meterRslt.Error <= test.GetErrLimHi(tstRslt.VolumeCTV, tstRslt.TestTime) - test.Uncertainty)
&& (tstRslt.ErrorFlags == 0);
double Error = 0;
if (meterRslt.GetQuantityFromUnits() == "Mass")
Error = Formulas.ErrorFromVolumes(meterRslt.MassMeter, meterRslt.MassRef);
else
Error = Formulas.ErrorFromVolumes(meterRslt.VolumeMeter, meterRslt.VolumeRef);
meterRslt.Error = Error;
var ErrLimLo_Volume = test.GetErrLimLo(tstRslt.VolumeCTV, tstRslt.TestTime);
var ErrLimHi_Volume = test.GetErrLimHi(tstRslt.VolumeCTV, tstRslt.TestTime);
var ErrLimLo_Mass = test.GetErrLimLo(tstRslt.MassCTV, tstRslt.TestTime);
var ErrLimHi_Mass = test.GetErrLimHi(tstRslt.MassCTV, tstRslt.TestTime);
bool Passed;
if (meterRslt.GetQuantityFromUnits() == "Mass")
Passed = (meterRslt.Error >= ErrLimLo_Volume + test.Uncertainty) &&
(meterRslt.Error <= ErrLimHi_Volume - test.Uncertainty) &&
(tstRslt.ErrorFlags == 0);
else
Passed = (meterRslt.Error >= ErrLimLo_Mass + test.Uncertainty) &&
(meterRslt.Error <= ErrLimHi_Mass - test.Uncertainty) &&
(tstRslt.ErrorFlags == 0);
meterRslt.Passed = Passed;
meterRslt.TestDone = true;
tstRslt.TestDone = true;
#if ORACLE_DB

View File

@ -1,4 +1,7 @@
///
using Common;
using Config.Entities;
using log4net;
///
/// Copyright (c) 2021 Sensus Slovensko a.s.
///
using System;
@ -6,15 +9,15 @@ using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Xml.Serialization;
using Common;
using Config.Entities;
using TBF.Rig.Generic;
using TBF.Resources;
using TBF.Rig.Generic;
namespace TBF.Rig.TestMethods.S640Communication
{
public class ProcParams : ProcedureParamsBase, IParamsProvider, IProcedureParams
{
private static readonly ILog log = LogManager.GetLogger(typeof(ProcParams));
public static XmlSerializer Serializer = XmlSerializer.FromTypes(new[] { typeof(ProcParams) })[0];
public override XmlSerializer GetSerializer() { return Serializer; }
@ -324,9 +327,9 @@ namespace TBF.Rig.TestMethods.S640Communication
return pars;
}
public override void UpdateFromDbEntity(ComponentProcedure dbEntity)
public override bool UpdateFromDbEntity(ComponentProcedure dbEntity)
{
if (dbEntity == null) return;
if (dbEntity == null) return false;
try
{
ProcParams tmp = Serializer.Deserialize(new StringReader(dbEntity.Parameters)) as ProcParams;
@ -335,10 +338,24 @@ namespace TBF.Rig.TestMethods.S640Communication
componentName = dbEntity.CmpntName;
procedure = dbEntity.Procedure;
if (tmp != null) tmp.CopyContentTo(this);
}
catch
if (tmp != null)
{
tmp.CopyContentTo(this);
return true;
}
else return false;
}
catch (Exception ex)
{
log.DebugFormat(
"Error during Procedure parameters deserialization. CmpntName='{0}', Procedure='{1}', Parameters='{2}', Exception: {3}",
dbEntity?.CmpntName,
dbEntity?.Procedure,
dbEntity?.Parameters,
ex
);
return false;
}
}

View File

@ -13,6 +13,8 @@ using TBF.Resources;
using TBF.Rig.GenericDevices;
using TBF.Rig.Uni.SharedDialogs.SmartMetersCommunication.common;
using TBF.UiBridge;
using System.Xml.Serialization;
using TBF.Rig.RegisterReaders.PulsesFromUniCB;
namespace TBF.Rig.TestMethods.StandingStartMassCollection
{
@ -844,6 +846,7 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollection
double buoyancy = Formulas.Buoyancy();
double massOfEvaporatedWater = (double)(tMass2 - tMass1) * outPath.Scale.EvaporationRate(TempDivStat.Average);
double volumeCTV = 1000.0 * buoyancy * (massEnd - massStart + massOfEvaporatedWater) / densityOut;
double massCTV = buoyancy * (massEnd - massStart + massOfEvaporatedWater);
if (debugLevel == Common.DebugMode.Simulate) volumeCTV = test.Volume;
double refEnergy = Energy.Sum * volumeCTV / VolumeForEnergy.Sum; /// [J]=[J]*[l]/[l]
@ -1077,6 +1080,8 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollection
/// Main results
tstRslt.VolumeCTV = volumeCTV; /// [l] 1000.0f is because density is in [kg/m3]
tstRslt.Flow = 3.6 * volumeCTV / tstRslt.TestTime; /// [m3/h]
tstRslt.MassCTV = massCTV; /// [kg] 1000.0f is because density is in [kg/m3]
tstRslt.MassFlow = 3.6 * massCTV / tstRslt.TestTime; /// [kg/h]
if (cBrd is ControlBoard.Uni.UniCB)
{
@ -1085,6 +1090,7 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollection
tstRslt.ConstMasterCorr = outPath.FlowMeter.LtrPerPulseCorrected(tstRslt.Flow, tstRslt.TempDownMean);
tstRslt.VolumeMaster = tstRslt.ConstMasterRaw * tstRslt.PulsesMaster; /// [l] volume from the master flow meter
tstRslt.ConstMaster = (tstRslt.VolumeMaster != 0) ? (tstRslt.ConstMasterRaw * tstRslt.VolumeCTV / tstRslt.VolumeMaster) : tstRslt.ConstMasterCorr;
tstRslt.MassConstMaster = (tstRslt.PulsesMaster != 0) ? (tstRslt.MassCTV / tstRslt.PulsesMaster) : tstRslt.ConstMasterCorr;
}
else
{
@ -1095,6 +1101,7 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollection
tstRslt.ConstMaster = 1;
}
tstRslt.ErrorMaster = Formulas.ErrorFromVolumes(tstRslt.VolumeMaster, tstRslt.VolumeCTV);
tstRslt.MassErrorMaster = Formulas.ErrorFromVolumes(tstRslt.VolumeMaster, tstRslt.MassCTV);
tstRslt.FlowMean = (float)RefFlowStat.Average;
tstRslt.FlowStart = (float)RefFlowStat.First;
@ -1244,18 +1251,72 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollection
if (meterRslt != null && regReader != null)
{
meterRslt.RegReaderType = (int)regReader.RegisterReaderType;
meterRslt.PulsesPerLiter = regReader.PulsesPerLtr;
ComponentProcedure procParamsEntity = test.Procedure.GetProcedureParamsEntity(regReader.Name);
try
{
if (regReader.RegisterReaderType == RegisterReaderType.Pulses || regReader.RegisterReaderType == RegisterReaderType.Manual)
{
XmlSerializer Serializer = XmlSerializer.FromTypes(new[] { typeof(RRProcParams) })[0];
RRProcParams tmp = Serializer.Deserialize(new StringReader(procParamsEntity.Parameters.ToString())) as RRProcParams;
regReader.PulsesPerLtr = tmp.PulsesPerLtr;
regReader.QuantityUnits = tmp.Units;
}
else
{
//MessageBox.Show("Cannot create or initialize a printer", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
}
catch (Exception ex)
{
/*log.DebugFormat(
"Error during Procedure parameters deserialization. CmpntName='{0}', Procedure='{1}', Parameters='{2}', Exception: {3}",
dbEntity?.CmpntName,
dbEntity?.Procedure,
dbEntity?.Parameters,
ex
);*/
}
meterRslt.PulsesPerLiter = regReader.PulsesPerLtr;//...MF 11.12.2025 toto chybalo, v .csv bol stlpec naplneny nulami
meterRslt.QuantityUnits = regReader.QuantityUnits;
meterRslt.VolumeStart = regReader.BeginWMState;
meterRslt.VolumeEnd = regReader.EndWMState;
meterRslt.VolumeMeter = Math.Abs(meterRslt.VolumeEnd - meterRslt.VolumeStart);
meterRslt.MassMeter = Math.Abs(meterRslt.VolumeEnd - meterRslt.VolumeStart);
meterRslt.VolumeRef = tstRslt.VolumeCTV; /// liter
meterRslt.MassRef = tstRslt.MassCTV; /// kg
meterRslt.PulsesMeter = meterRslt.VolumeMeter;
meterRslt.PulsesMaster = tstRslt.PulsesMaster;
meterRslt.TestTime = tstRslt.TestTime;
meterRslt.Error = Formulas.ErrorFromVolumes(meterRslt.VolumeMeter, meterRslt.VolumeRef);
meterRslt.Passed = (meterRslt.Error >= test.GetErrLimLo(tstRslt.VolumeCTV, tstRslt.TestTime) + test.Uncertainty)
//meterRslt.Error = Formulas.ErrorFromVolumes(meterRslt.VolumeMeter, meterRslt.VolumeRef);
double Error = 0;
if (meterRslt.GetQuantityFromUnits() == "Mass")
Error = Formulas.ErrorFromVolumes(meterRslt.MassMeter, meterRslt.MassRef);
else
Error = Formulas.ErrorFromVolumes(meterRslt.VolumeMeter, meterRslt.VolumeRef);
meterRslt.Error = Error;
/*meterRslt.Passed = (meterRslt.Error >= test.GetErrLimLo(tstRslt.VolumeCTV, tstRslt.TestTime) + test.Uncertainty)
&& (meterRslt.Error <= test.GetErrLimHi(tstRslt.VolumeCTV, tstRslt.TestTime) - test.Uncertainty)
&& (tstRslt.ErrorFlags == 0);
&& (tstRslt.ErrorFlags == 0);*/
var ErrLimLo_Volume = test.GetErrLimLo(tstRslt.VolumeCTV, tstRslt.TestTime);
var ErrLimHi_Volume = test.GetErrLimHi(tstRslt.VolumeCTV, tstRslt.TestTime);
var ErrLimLo_Mass = test.GetErrLimLo(tstRslt.MassCTV, tstRslt.TestTime);
var ErrLimHi_Mass = test.GetErrLimHi(tstRslt.MassCTV, tstRslt.TestTime);
bool Passed;
if (meterRslt.GetQuantityFromUnits() == "Mass")
Passed = (meterRslt.Error >= ErrLimLo_Volume + test.Uncertainty) &&
(meterRslt.Error <= ErrLimHi_Volume - test.Uncertainty) &&
(tstRslt.ErrorFlags == 0);
else
Passed = (meterRslt.Error >= ErrLimLo_Mass + test.Uncertainty) &&
(meterRslt.Error <= ErrLimHi_Mass - test.Uncertainty) &&
(tstRslt.ErrorFlags == 0);
meterRslt.Passed = Passed;
meterRslt.TestDone = true;
tstRslt.TestDone = true;
if (regReader is ICommonRegReader regReaderCommon)

View File

@ -89,9 +89,12 @@ namespace TBF.Rig.TestMethods.iPerlCommunication.iPerlHead
}
}
public RegisterReaderType RegisterReaderType { get { return RegisterReaderType.DataStream; } }
public double PulsesPerLtr { get { return 1000.0; } }
public double PulsesPerLtr {
get { return 1000.0; }
set {PulsesPerLtr = value; }
}
public double LtrsPerPulse { get { return 1 / PulsesPerLtr; } }
public string QuantityUnits { get; set; }
public double CalibTarget { get { return iperlHeadCfg.ProcParams.CalibTarget; } }
public ushort FactorLimitLo { get { return (ushort)iperlHeadCfg.ProcParams.FactorLimitLo; } }
public ushort FactorLimitHi { get { return (ushort)iperlHeadCfg.ProcParams.FactorLimitHi; } }

View File

@ -1,18 +1,21 @@
///
using Common;
using Config.Entities;
using log4net;
///
/// Copyright (c) 2015-2023 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;
using System.IO;
using System.Xml.Serialization;
using Common;
using Config.Entities;
using TBF.Rig.Generic;
using System.Collections.Generic;
namespace TBF.Rig.TestMethods.iPerlCommunication.iPerlHead
{
public class ProcParams : ProcedureParamsBase, IParamsProvider, IProcedureParams
{
private static readonly ILog log = LogManager.GetLogger(typeof(ProcParams));
public static XmlSerializer Serializer = XmlSerializer.FromTypes(new[] { typeof(ProcParams) })[0];
public override XmlSerializer GetSerializer() { return Serializer; }
@ -146,9 +149,9 @@ namespace TBF.Rig.TestMethods.iPerlCommunication.iPerlHead
return pars;
}
public override void UpdateFromDbEntity(ComponentProcedure dbEntity)
public override bool UpdateFromDbEntity(ComponentProcedure dbEntity)
{
if (dbEntity == null) return;
if (dbEntity == null) return false;
try
{
ProcParams tmp = Serializer.Deserialize(new StringReader(dbEntity.Parameters)) as ProcParams;
@ -157,13 +160,26 @@ namespace TBF.Rig.TestMethods.iPerlCommunication.iPerlHead
componentName = dbEntity.CmpntName;
procedure = dbEntity.Procedure;
if (tmp != null) tmp.CopyContentTo(this);
}
catch
if (tmp != null)
{
tmp.CopyContentTo(this);
return true;
}
else return false;
}
catch (Exception ex)
{
log.DebugFormat(
"Error during Procedure parameters deserialization. CmpntName='{0}', Procedure='{1}', Parameters='{2}', Exception: {3}",
dbEntity?.CmpntName,
dbEntity?.Procedure,
dbEntity?.Parameters,
ex
);
return false;
}
}
public ProcParams()
{

View File

@ -1,4 +1,7 @@
///
using Common;
using Config.Entities;
using log4net;
///
/// Copyright (c) 2013-2023 Sensus Slovensko a.s.
///
using System;
@ -6,15 +9,15 @@ using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Xml.Serialization;
using Common;
using Config.Entities;
using TBF.Rig.Generic;
using TBF.Resources;
using TBF.Rig.Generic;
namespace TBF.Rig.WaterMeters.WaterMeter
{
public class ProcParams : ProcedureParamsBase, IParamsProvider, IProcedureParams
{
private static readonly ILog log = LogManager.GetLogger(typeof(ProcParams));
public static XmlSerializer Serializer = XmlSerializer.FromTypes(new[] { typeof(ProcParams) })[0];
public override XmlSerializer GetSerializer() { return Serializer; }
@ -372,9 +375,9 @@ namespace TBF.Rig.WaterMeters.WaterMeter
return pars;
}
public override void UpdateFromDbEntity(ComponentProcedure dbEntity)
public override bool UpdateFromDbEntity(ComponentProcedure dbEntity)
{
if (dbEntity == null) return;
if (dbEntity == null) return false;
try
{
ProcParams tmp = Serializer.Deserialize(new StringReader(dbEntity.Parameters)) as ProcParams;
@ -383,10 +386,24 @@ namespace TBF.Rig.WaterMeters.WaterMeter
componentName = dbEntity.CmpntName;
procedure = dbEntity.Procedure;
if (tmp != null) tmp.CopyContentTo(this);
}
catch
if (tmp != null)
{
tmp.CopyContentTo(this);
return true;
}
else return false;
}
catch (Exception ex)
{
log.DebugFormat(
"Error during RRProcParams deserialization. CmpntName='{0}', Procedure='{1}', Parameters='{2}', Exception: {3}",
dbEntity?.CmpntName,
dbEntity?.Procedure,
dbEntity?.Parameters,
ex
);
return false;
}
}

View File

@ -17,6 +17,7 @@
<UpgradeBackupLocation />
<TargetFrameworkProfile />
<IsWebBootstrapper>false</IsWebBootstrapper>
<LangVersion>8</LangVersion>
<PublishUrl>D:\_Sensus\Temp\Bin\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
@ -33,7 +34,6 @@
<CreateDesktopShortcut>true</CreateDesktopShortcut>
<PublishWizardCompleted>true</PublishWizardCompleted>
<BootstrapperEnabled>true</BootstrapperEnabled>
<LangVersion>8</LangVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
@ -101,6 +101,9 @@
<PropertyGroup>
<SignManifests>false</SignManifests>
</PropertyGroup>
<PropertyGroup>
<SignAssembly>false</SignAssembly>
</PropertyGroup>
<ItemGroup>
<Reference Include="Castle.Core, Version=5.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL">
<HintPath>..\packages\Castle.Core.5.1.1\lib\net462\Castle.Core.dll</HintPath>
@ -1456,7 +1459,9 @@
<Compile Include="Rig\Scales\MettlerToledo\Factory.cs" />
<Compile Include="Rig\Scales\MettlerToledo\GetSerNumOp.cs" />
<Compile Include="Rig\Scales\MettlerToledo\ReadStableMassOp.cs" />
<Compile Include="Rig\Scales\MettlerToledo\SerialPortDevice.cs" />
<Compile Include="Rig\Scales\MettlerToledo\SerialPortDevice.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="Rig\Scales\MettlerToledo\SerialPortDeviceFake.cs" />
<Compile Include="Rig\Scales\MettlerToledo\SetUnitsOp.cs" />
<Compile Include="Rig\Scales\MettlerToledo\TaringOp.cs" />

2520
end Normal file

File diff suppressed because it is too large Load Diff