From ee89158ae342f3e2d09ec4b2f0ac88d5f33d5759 Mon Sep 17 00:00:00 2001 From: Milan Hanajik Date: Wed, 15 Dec 2021 14:34:18 +0100 Subject: [PATCH] Uni.FlowMeter nominal frequency is a parameter, ver. 3.1.1840 --- TBF/Properties/AssemblyInfo.cs | 4 +- TBF/Rig/Dummy/FlowMeter/FlowMeter.cs | 1 + TBF/Rig/GenericDevices/IFlowMeter.cs | 11 +- TBF/Rig/Uni/FlowMeter/FlowMeter.cs | 7 +- TBF/Rig/Uni/FlowMeter/FlowMeterCfg.cs | 251 +++++++++--------- TBF/Rig/Uni/FlowMetersInParallel/FlowMeter.cs | 9 +- 6 files changed, 151 insertions(+), 132 deletions(-) diff --git a/TBF/Properties/AssemblyInfo.cs b/TBF/Properties/AssemblyInfo.cs index 35c55adca..bed4002fa 100644 --- a/TBF/Properties/AssemblyInfo.cs +++ b/TBF/Properties/AssemblyInfo.cs @@ -29,5 +29,5 @@ using System.Runtime.InteropServices; // Build Number // Revision // -[assembly: AssemblyVersion("3.1.1839.0")] -[assembly: AssemblyFileVersion("3.1.1839.0")] +[assembly: AssemblyVersion("3.1.1840.0")] +[assembly: AssemblyFileVersion("3.1.1840.0")] diff --git a/TBF/Rig/Dummy/FlowMeter/FlowMeter.cs b/TBF/Rig/Dummy/FlowMeter/FlowMeter.cs index 41a15c50b..2c33c1a38 100644 --- a/TBF/Rig/Dummy/FlowMeter/FlowMeter.cs +++ b/TBF/Rig/Dummy/FlowMeter/FlowMeter.cs @@ -17,6 +17,7 @@ namespace TBF.Rig.Dummy.FlowMeter readonly FlowMeterCfg flowMeterCfg; public double NominalFlow { get { return flowMeterCfg.NominalFlow; } } + public double NominalFreq { get { return 2000; } } public double LtrPerPulse { get { return flowMeterCfg.NominalFlow / 7200.0f; } } public IDrawingItem DrawingItem { get { return flowMeterCfg as IDrawingItem; } } diff --git a/TBF/Rig/GenericDevices/IFlowMeter.cs b/TBF/Rig/GenericDevices/IFlowMeter.cs index 5b100f9e9..83a1be1f1 100644 --- a/TBF/Rig/GenericDevices/IFlowMeter.cs +++ b/TBF/Rig/GenericDevices/IFlowMeter.cs @@ -1,5 +1,5 @@ /// -/// Copyright (c) 2013-2018 Sensus Slovensko a.s. +/// Copyright (c) 2013-2021 Sensus Slovensko a.s. /// using System.Collections.Generic; using TBF.Rig.Generic; @@ -13,11 +13,16 @@ namespace TBF.Rig.GenericDevices public interface IFlowMeter : IComponent { /// - /// Nominal flow in m3/h at the maximum (2kHz) output frequency. - /// In case of a flowmeter couple, the sum of two nominal flows (reached at 4kHz of summed pulses). + /// Nominal flow in m3/h at the nominal output frequency (see below). + /// In case of a flowmeter couple, the sum of two nominal flows (reached at sum of nominal freq.). /// double NominalFlow { get; } + /// + /// Nominal frequency in Hz. + /// + double NominalFreq { get; } + /// /// Nominal (uncorrected) volume per flowmeter pulse in [l]. /// diff --git a/TBF/Rig/Uni/FlowMeter/FlowMeter.cs b/TBF/Rig/Uni/FlowMeter/FlowMeter.cs index 3624db045..fe2817f93 100644 --- a/TBF/Rig/Uni/FlowMeter/FlowMeter.cs +++ b/TBF/Rig/Uni/FlowMeter/FlowMeter.cs @@ -21,7 +21,8 @@ namespace TBF.Rig.Uni.FlowMeter readonly FlowMeterCfg flowMeterCfg; public int Idx1 { get { return (flowMeterCfg != null) ? flowMeterCfg.Idx1 : 0; } } public double NominalFlow { get { return (flowMeterCfg != null) ? flowMeterCfg.NominalFlow : 0; } } - public double LtrPerPulse { get { return (flowMeterCfg != null) ? flowMeterCfg.NominalFlow / 7200.0 : 0; } } /// Nominal frequency is 2000 Hz + public double NominalFreq { get { return (flowMeterCfg != null) ? flowMeterCfg.NominalFreq : 2000; } } + public double LtrPerPulse { get { return (flowMeterCfg != null) ? flowMeterCfg.NominalFlow / (3.6 * NominalFreq) : 0; } } public bool RangeEnabled(int ix) { return flowMeterCfg.RangeEnabled(ix); } public double GetTempLo(int ix) { return flowMeterCfg.GetTempLo(ix); } public double GetTempHi(int ix) { return flowMeterCfg.GetTempHi(ix); } @@ -55,10 +56,10 @@ namespace TBF.Rig.Uni.FlowMeter return false; } } - public double MeasuredVal { get { return NominalFlow * ReadFrequency() / 2000.0; } } + public double MeasuredVal { get { return NominalFlow * ReadFrequency() / NominalFreq; } } public string AltString { get { return string.Format("Calibration expires on {0:dd.MM.yyyy}", flowMeterCfg.CalibValidDate); } } /// - public double ReadFlow() { return NominalFlow * ReadFrequency() / 2000.0; } + public double ReadFlow() { return NominalFlow * ReadFrequency() / NominalFreq; } /// public double ReadFrequency() { diff --git a/TBF/Rig/Uni/FlowMeter/FlowMeterCfg.cs b/TBF/Rig/Uni/FlowMeter/FlowMeterCfg.cs index 368aa7ef4..f06c0e839 100644 --- a/TBF/Rig/Uni/FlowMeter/FlowMeterCfg.cs +++ b/TBF/Rig/Uni/FlowMeter/FlowMeterCfg.cs @@ -30,40 +30,41 @@ namespace TBF.Rig.Uni.FlowMeter /// public int Idx1; /// 0 /// 1..7, (DEWA300 : I1+I2=48, I1+I3=80, I2_I3=96, I1+I2+I3=112) public double NominalFlow; /// 1 /// Nominal flow in m3/h at nominal output frequency (typ. 2000 Hz) - public string MsrdFormat { get; set; } /// 2 - public Unit MsrdUnit { get; set; } /// 3 - public Unit TempUnit; /// 4 - public Unit PressureUnit; /// 5 + public double NominalFreq; /// 2 /// Nominal flow in m3/h at nominal output frequency (typ. 2000 Hz) + public string MsrdFormat { get; set; } /// 3 + public Unit MsrdUnit { get; set; } /// 4 + public Unit TempUnit; /// 5 + public Unit PressureUnit; /// 6 - public bool Range1Enabled; /// 6 - public double Temp1Lo; /// 7 - public double Temp1Hi; /// 8 - public double Press1Lo; /// 9 - public double Press1Hi; /// 10 + public bool Range1Enabled; /// 7 + public double Temp1Lo; /// 8 + public double Temp1Hi; /// 9 + public double Press1Lo; /// 10 + public double Press1Hi; /// 11 - public bool Range2Enabled; /// 11 - public double Temp2Lo; /// 12 - public double Temp2Hi; /// 13 - public double Press2Lo; /// 14 - public double Press2Hi; /// 15 + public bool Range2Enabled; /// 12 + public double Temp2Lo; /// 13 + public double Temp2Hi; /// 14 + public double Press2Lo; /// 15 + public double Press2Hi; /// 16 - public bool Range3Enabled; /// 16 - public double Temp3Lo; /// 17 - public double Temp3Hi; /// 18 - public double Press3Lo; /// 19 - public double Press3Hi; /// 20 + public bool Range3Enabled; /// 17 + public double Temp3Lo; /// 18 + public double Temp3Hi; /// 19 + public double Press3Lo; /// 20 + public double Press3Hi; /// 21 - public bool Range4Enabled; /// 21 - public double Temp4Lo; /// 22 - public double Temp4Hi; /// 23 - public double Press4Lo; /// 24 - public double Press4Hi; /// 25 + public bool Range4Enabled; /// 22 + public double Temp4Lo; /// 23 + public double Temp4Hi; /// 24 + public double Press4Lo; /// 25 + public double Press4Hi; /// 26 - public bool Range5Enabled; /// 26 - public double Temp5Lo; /// 27 - public double Temp5Hi; /// 28 - public double Press5Lo; /// 29 - public double Press5Hi; /// 30 + public bool Range5Enabled; /// 27 + public double Temp5Lo; /// 28 + public double Temp5Hi; /// 29 + public double Press5Lo; /// 30 + public double Press5Hi; /// 31 /// Calibration info serialized parameters displayed in Metrology tab page public string CalibCertificateNr; @@ -289,6 +290,7 @@ namespace TBF.Rig.Uni.FlowMeter { Idx1 = 1; NominalFlow = 1; + NominalFreq = 2000; MsrdFormat = "{0:F3} m2/h"; MsrdUnit = Unit.m3ph; @@ -331,20 +333,21 @@ namespace TBF.Rig.Uni.FlowMeter string[] paramNames = new string[] { "Identification number (1 .. 7)", /// 0 - "Nominal flow at 2000Hz [m3/h]", /// 1 + "Nominal flow [m3/h]", /// 1 + "Nominal frequency [Hz]", /// 2 - "Display format", /// 2 - "Unit of flow on a display", /// 3 - "Unit of temperature", /// 4 - "Unit of pressure", /// 5 + "Display format", /// 3 + "Unit of flow on a display", /// 4 + "Unit of temperature", /// 5 + "Unit of pressure", /// 6 - "Range 1 enabled", /// 6 - "Range 1 : Temperature Lo", /// 7 - "Range 1 : Temperature Hi", /// 8 - "Range 1 : Pressure Lo", /// 9 - "Range 1 : Pressure Hi", /// 10 + "Range 1 enabled", /// 7 + "Range 1 : Temperature Lo", /// 8 + "Range 1 : Temperature Hi", /// 9 + "Range 1 : Pressure Lo", /// 10 + "Range 1 : Pressure Hi", /// 11 - "Range 2 enabled", /// 11 + "Range 2 enabled", /// 12 "Range 2 : Temperature Lo", "Range 2 : Temperature Hi", "Range 2 : Pressure Lo", @@ -377,17 +380,17 @@ namespace TBF.Rig.Uni.FlowMeter { case 0: return new string[] { "1", "2", "3", "4", "5", "6", "7" }; - case 3: - return new string[] { "m3/h", "l/h" }; case 4: - return new string[] { "°C", "°F", "K" }; + return new string[] { "m3/h", "l/h" }; case 5: - return new string[] { "Pa", "hPa", "mbar", "kPa", "inHg", "psi", "bar", "MPa" }; + return new string[] { "°C", "°F", "K" }; case 6: - case 11: - case 16: - case 21: - case 26: + return new string[] { "Pa", "hPa", "mbar", "kPa", "inHg", "psi", "bar", "MPa" }; + case 7: + case 12: + case 17: + case 22: + case 27: return new string[] { Strings.yes, Strings.no }; default: return null; @@ -400,40 +403,41 @@ namespace TBF.Rig.Uni.FlowMeter { case 0: return Idx1.ToString(); case 1: return NominalFlow.ToString(); - case 2: return MsrdFormat; - case 3: return MsrdUnit.ToDescription(); - case 4: return TempUnit.ToDescription(); - case 5: return PressureUnit.ToDescription(); + case 2: return NominalFreq.ToString(); + case 3: return MsrdFormat; + case 4: return MsrdUnit.ToDescription(); + case 5: return TempUnit.ToDescription(); + case 6: return PressureUnit.ToDescription(); - case 6: return Range1Enabled ? Strings.yes : Strings.no; - case 7: return Temp1Lo.ToString(); - case 8: return Temp1Hi.ToString(); - case 9: return Press1Lo.ToString(); - case 10: return Press1Hi.ToString(); + case 7: return Range1Enabled ? Strings.yes : Strings.no; + case 8: return Temp1Lo.ToString(); + case 9: return Temp1Hi.ToString(); + case 10: return Press1Lo.ToString(); + case 11: return Press1Hi.ToString(); - case 11: return Range2Enabled ? Strings.yes : Strings.no; - case 12: return Temp2Lo.ToString(); - case 13: return Temp2Hi.ToString(); - case 14: return Press2Lo.ToString(); - case 15: return Press2Hi.ToString(); + case 12: return Range2Enabled ? Strings.yes : Strings.no; + case 13: return Temp2Lo.ToString(); + case 14: return Temp2Hi.ToString(); + case 15: return Press2Lo.ToString(); + case 16: return Press2Hi.ToString(); - case 16: return Range3Enabled ? Strings.yes : Strings.no; - case 17: return Temp3Lo.ToString(); - case 18: return Temp3Hi.ToString(); - case 19: return Press3Lo.ToString(); - case 20: return Press3Hi.ToString(); + case 17: return Range3Enabled ? Strings.yes : Strings.no; + case 18: return Temp3Lo.ToString(); + case 19: return Temp3Hi.ToString(); + case 20: return Press3Lo.ToString(); + case 21: return Press3Hi.ToString(); - case 21: return Range4Enabled ? Strings.yes : Strings.no; - case 22: return Temp4Lo.ToString(); - case 23: return Temp4Hi.ToString(); - case 24: return Press4Lo.ToString(); - case 25: return Press4Hi.ToString(); + case 22: return Range4Enabled ? Strings.yes : Strings.no; + case 23: return Temp4Lo.ToString(); + case 24: return Temp4Hi.ToString(); + case 25: return Press4Lo.ToString(); + case 26: return Press4Hi.ToString(); - case 26: return Range5Enabled ? Strings.yes : Strings.no; - case 27: return Temp5Lo.ToString(); - case 28: return Temp5Hi.ToString(); - case 29: return Press5Lo.ToString(); - case 30: return Press5Hi.ToString(); + case 27: return Range5Enabled ? Strings.yes : Strings.no; + case 28: return Temp5Lo.ToString(); + case 29: return Temp5Hi.ToString(); + case 30: return Press5Lo.ToString(); + case 31: return Press5Hi.ToString(); default: return string.Format("{0}({1}) {2}[{3},{4}] Idx1={5}, NominalFlow={6}", @@ -448,40 +452,41 @@ namespace TBF.Rig.Uni.FlowMeter { case 0: Idx1 = int.Parse(str); return CfgUpdateFlags.RestartRqrd; case 1: NominalFlow = TBF.Utils.ParseUDouble(str); return CfgUpdateFlags.RestartRqrd; - case 2: MsrdFormat = str; return CfgUpdateFlags.RestartRqrd; - case 3: MsrdUnit = (str == "l/h") ? Unit.lph : Unit.m3ph; return CfgUpdateFlags.RestartRqrd; - case 4: TempUnit.ToDescription(); return CfgUpdateFlags.RestartRqrd; - case 5: PressureUnit.ToDescription(); return CfgUpdateFlags.RestartRqrd; + case 2: NominalFreq = TBF.Utils.ParseUDouble(str); return CfgUpdateFlags.RestartRqrd; + case 3: MsrdFormat = str; return CfgUpdateFlags.RestartRqrd; + case 4: MsrdUnit = (str == "l/h") ? Unit.lph : Unit.m3ph; return CfgUpdateFlags.RestartRqrd; + case 5: TempUnit.ToDescription(); return CfgUpdateFlags.RestartRqrd; + case 6: PressureUnit.ToDescription(); return CfgUpdateFlags.RestartRqrd; - case 6: Range1Enabled = (str == Strings.yes); return CfgUpdateFlags.RestartRqrd; - case 7: Temp1Lo = TBF.Utils.ParseSDouble(str); return CfgUpdateFlags.RestartRqrd; - case 8: Temp1Hi = TBF.Utils.ParseSDouble(str); return CfgUpdateFlags.RestartRqrd; - case 9: Press1Lo = TBF.Utils.ParseUDouble(str); return CfgUpdateFlags.RestartRqrd; - case 10: Press1Hi = TBF.Utils.ParseUDouble(str); return CfgUpdateFlags.RestartRqrd; + case 7: Range1Enabled = (str == Strings.yes); return CfgUpdateFlags.RestartRqrd; + case 8: Temp1Lo = TBF.Utils.ParseSDouble(str); return CfgUpdateFlags.RestartRqrd; + case 9: Temp1Hi = TBF.Utils.ParseSDouble(str); return CfgUpdateFlags.RestartRqrd; + case 10: Press1Lo = TBF.Utils.ParseUDouble(str); return CfgUpdateFlags.RestartRqrd; + case 11: Press1Hi = TBF.Utils.ParseUDouble(str); return CfgUpdateFlags.RestartRqrd; - case 11: Range2Enabled = (str == Strings.yes); return CfgUpdateFlags.RestartRqrd; - case 12: Temp2Lo = TBF.Utils.ParseSDouble(str); return CfgUpdateFlags.RestartRqrd; - case 13: Temp2Hi = TBF.Utils.ParseSDouble(str); return CfgUpdateFlags.RestartRqrd; - case 14: Press2Lo = TBF.Utils.ParseUDouble(str); return CfgUpdateFlags.RestartRqrd; - case 15: Press2Hi = TBF.Utils.ParseUDouble(str); return CfgUpdateFlags.RestartRqrd; + case 12: Range2Enabled = (str == Strings.yes); return CfgUpdateFlags.RestartRqrd; + case 13: Temp2Lo = TBF.Utils.ParseSDouble(str); return CfgUpdateFlags.RestartRqrd; + case 14: Temp2Hi = TBF.Utils.ParseSDouble(str); return CfgUpdateFlags.RestartRqrd; + case 15: Press2Lo = TBF.Utils.ParseUDouble(str); return CfgUpdateFlags.RestartRqrd; + case 16: Press2Hi = TBF.Utils.ParseUDouble(str); return CfgUpdateFlags.RestartRqrd; - case 16: Range3Enabled = (str == Strings.yes); return CfgUpdateFlags.RestartRqrd; - case 17: Temp3Lo = TBF.Utils.ParseSDouble(str); return CfgUpdateFlags.RestartRqrd; - case 18: Temp3Hi = TBF.Utils.ParseSDouble(str); return CfgUpdateFlags.RestartRqrd; - case 19: Press3Lo = TBF.Utils.ParseUDouble(str); return CfgUpdateFlags.RestartRqrd; - case 20: Press3Hi = TBF.Utils.ParseUDouble(str); return CfgUpdateFlags.RestartRqrd; + case 17: Range3Enabled = (str == Strings.yes); return CfgUpdateFlags.RestartRqrd; + case 18: Temp3Lo = TBF.Utils.ParseSDouble(str); return CfgUpdateFlags.RestartRqrd; + case 19: Temp3Hi = TBF.Utils.ParseSDouble(str); return CfgUpdateFlags.RestartRqrd; + case 20: Press3Lo = TBF.Utils.ParseUDouble(str); return CfgUpdateFlags.RestartRqrd; + case 21: Press3Hi = TBF.Utils.ParseUDouble(str); return CfgUpdateFlags.RestartRqrd; - case 21: Range4Enabled = (str == Strings.yes); return CfgUpdateFlags.RestartRqrd; - case 22: Temp4Lo = TBF.Utils.ParseSDouble(str); return CfgUpdateFlags.RestartRqrd; - case 23: Temp4Hi = TBF.Utils.ParseSDouble(str); return CfgUpdateFlags.RestartRqrd; - case 24: Press4Lo = TBF.Utils.ParseUDouble(str); return CfgUpdateFlags.RestartRqrd; - case 25: Press4Hi = TBF.Utils.ParseUDouble(str); return CfgUpdateFlags.RestartRqrd; + case 22: Range4Enabled = (str == Strings.yes); return CfgUpdateFlags.RestartRqrd; + case 23: Temp4Lo = TBF.Utils.ParseSDouble(str); return CfgUpdateFlags.RestartRqrd; + case 24: Temp4Hi = TBF.Utils.ParseSDouble(str); return CfgUpdateFlags.RestartRqrd; + case 25: Press4Lo = TBF.Utils.ParseUDouble(str); return CfgUpdateFlags.RestartRqrd; + case 26: Press4Hi = TBF.Utils.ParseUDouble(str); return CfgUpdateFlags.RestartRqrd; - case 26: Range5Enabled = (str == Strings.yes); return CfgUpdateFlags.RestartRqrd; - case 27: Temp5Lo = TBF.Utils.ParseSDouble(str); return CfgUpdateFlags.RestartRqrd; - case 28: Temp5Hi = TBF.Utils.ParseSDouble(str); return CfgUpdateFlags.RestartRqrd; - case 29: Press5Lo = TBF.Utils.ParseUDouble(str); return CfgUpdateFlags.RestartRqrd; - case 30: Press5Hi = TBF.Utils.ParseUDouble(str); return CfgUpdateFlags.RestartRqrd; + case 27: Range5Enabled = (str == Strings.yes); return CfgUpdateFlags.RestartRqrd; + case 28: Temp5Lo = TBF.Utils.ParseSDouble(str); return CfgUpdateFlags.RestartRqrd; + case 29: Temp5Hi = TBF.Utils.ParseSDouble(str); return CfgUpdateFlags.RestartRqrd; + case 30: Press5Lo = TBF.Utils.ParseUDouble(str); return CfgUpdateFlags.RestartRqrd; + case 31: Press5Hi = TBF.Utils.ParseUDouble(str); return CfgUpdateFlags.RestartRqrd; default: return CfgUpdateFlags.None; } @@ -499,40 +504,41 @@ namespace TBF.Rig.Uni.FlowMeter if (int.TryParse(str, out idummy) && idummy >= 1 && idummy <= 7) return true; break; case 1: - case 9: + case 2: case 10: - case 14: + case 11: case 15: - case 19: + case 16: case 20: - case 24: + case 21: case 25: - case 29: + case 26: case 30: + case 31: if (TBF.Utils.TryParseUDouble(str, out dummy)) return true; break; - case 7: case 8: - case 12: + case 9: case 13: - case 17: + case 14: case 18: - case 22: + case 19: case 23: - case 27: + case 24: case 28: + case 29: if (TBF.Utils.TryParseSDouble(str, out dummy)) return true; break; - case 2: - return true; case 3: + return true; case 4: case 5: case 6: - case 11: - case 16: - case 21: - case 26: + case 7: + case 12: + case 17: + case 22: + case 27: if (ParamValues(i).Contains(str)) return true; break; default: @@ -550,6 +556,7 @@ namespace TBF.Rig.Uni.FlowMeter prms.Idx1 = Idx1; prms.NominalFlow = NominalFlow; + prms.NominalFreq = NominalFreq; prms.MsrdFormat = MsrdFormat; prms.MsrdUnit = MsrdUnit; prms.TempUnit = TempUnit; diff --git a/TBF/Rig/Uni/FlowMetersInParallel/FlowMeter.cs b/TBF/Rig/Uni/FlowMetersInParallel/FlowMeter.cs index 955ad2221..2691cdcdc 100644 --- a/TBF/Rig/Uni/FlowMetersInParallel/FlowMeter.cs +++ b/TBF/Rig/Uni/FlowMetersInParallel/FlowMeter.cs @@ -22,12 +22,14 @@ namespace TBF.Rig.Uni.FlowMetersInParallel readonly IFlowMeter flowMeter2; readonly IFlowMeter flowMeter3; double nominalFlow; + double nominalFreq; double ltrPerPulse; int flowMetersCount; int flowMetersBitfield; public int Idx1 { get { return flowMetersBitfield; } } public double NominalFlow { get { return nominalFlow; } } + public double NominalFreq { get { return nominalFreq; } } public double LtrPerPulse { get { return ltrPerPulse; } } public SchematicDrawing.IDrawingItem DrawingItem { get { return flowMeterCfg as SchematicDrawing.IDrawingItem; } } @@ -138,18 +140,21 @@ namespace TBF.Rig.Uni.FlowMetersInParallel if (flowMeter1 != null) { nominalFlow += flowMeter1.NominalFlow; + nominalFreq += flowMeter1.NominalFreq; flowMetersBitfield |= (4 << flowMeter1.Idx1); flowMetersCount++; } if (flowMeter2 != null) { nominalFlow += flowMeter2.NominalFlow; + nominalFreq += flowMeter2.NominalFreq; flowMetersBitfield |= (4 << flowMeter2.Idx1); flowMetersCount++; } if (flowMeter3 != null) { nominalFlow += flowMeter3.NominalFlow; + nominalFreq += flowMeter3.NominalFreq; flowMetersBitfield |= (4 << flowMeter3.Idx1); flowMetersCount++; } @@ -157,7 +162,7 @@ namespace TBF.Rig.Uni.FlowMetersInParallel MsrdValLimHi = nominalFlow; - ltrPerPulse = nominalFlow / (flowMetersCount * 7200.0); /// Nominal freq. is flowMetersCount * 2000 Hz (2000, 4000 or 6000 Hz) + ltrPerPulse = nominalFlow / (3.6 * nominalFreq); /// Nominal freq. is sum of particular nominal frquencies refFreq = new double[4]; refPulses = new int[4]; @@ -165,7 +170,7 @@ namespace TBF.Rig.Uni.FlowMetersInParallel public double ReadFlow() { - return nominalFlow * ReadFrequency() / (flowMetersCount * 7200.0); + return nominalFlow * ReadFrequency() / (3.6 * nominalFreq); } public double ReadFrequency()