Uni.FlowMeter nominal frequency is a parameter, ver. 3.1.1840

This commit is contained in:
Milan Hanajik
2021-12-15 14:34:45 +01:00
parent 15e9c25dcf
commit ee89158ae3
6 changed files with 151 additions and 132 deletions
+4 -3
View File
@@ -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()
{
+129 -122
View File
@@ -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;
@@ -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()