1065 lines
51 KiB
QBasic
1065 lines
51 KiB
QBasic
Attribute VB_Name = "modUS2000_Algorithmen"
|
|
Option Explicit
|
|
|
|
'---Freigabe für Produktion: 04.12.01 - Version 9.1 - Uwe Groß
|
|
'---Freigabe für Produktion: 14.12.01 - Version 9.3 - Uwe Groß
|
|
|
|
'********************************************************************************************
|
|
' History: Version 4.0: Startup für Meßreferenzsystem
|
|
' Version 4.3: Subroutine Justage und Functions Geberkonstante bzw. Offset
|
|
' hinzugefügt
|
|
' Version 4.7: Function PLZausTemperatur hinzugefügt
|
|
' Version 4.8: PLZausTemperatur und Q_H2OausDT entfällt.
|
|
' Version 4.9: Änderung Geberkonstante_m3 auf Geberkonstante_m
|
|
' Version 4.10: Änderung Geberkonstante_m und Offset_s
|
|
' Version 6.0: Function MSP430FloatToDez und DezToFloatMSP430 aus Algorithmus zur Vollständigkeit aufgenommen.
|
|
' Version 7.0: wie 6.0
|
|
' Version 8.0: Q_US_lph zur Bestimmung des Durchfluß erweitert auf
|
|
' temperaturabängigen Offset und Unlinearitätsausgleich
|
|
' Neuer Abgleich mit Geberkonstante_m und Offset_s
|
|
' Version 8.5: temperaturabhängige Steilheit für DiffTof_ns hinzugefügt in Function Q_US_lph.
|
|
' Subroutine Justage_Execute
|
|
' Version 8.11: FloatMSP430 = "00000000" führt zu 0,00 in Function FloatMSP430_To_DEZ(FloatMSP430)
|
|
' Version 8.16: Function DEZ_To_FloatMSP430(Dezimal)geändert
|
|
' Version 8.17: Function Diff_Tof hinzugefügt incl. Änderung
|
|
' Function GibtEinenWertAus(Zeile, Spalte, Blatt_Nr) eingefügt
|
|
' Version 8.19: Function Diff_Tof geändert. Sub Justage_Execute geändert.
|
|
' Version 9.1: Function Justage_Execute geändert.
|
|
' Version 9.7: Neue Function Q_US_Bereich_lph, Function Justage_Execute geändert.
|
|
|
|
|
|
' Version 9.8: Function Diff_Tof geändert.
|
|
' Version 9.10: Neue Function Volume_2_DiffTof (...)
|
|
' Version 9.13: 22.03.2002 neue Function Checksumme_Master
|
|
' neue Function CheckHEX und Aufruf aus FloatMSP430_To_DEZ
|
|
' neue Function CheckConfig
|
|
' 25.03.2002 Änderung Function Checksumme_Master
|
|
' 12.06.2002: Function DEZ_To_FloatMSP430, Q_US_Bereich_lph und Diff_Tof geändert
|
|
' 26.06.2002: neue Function ZeroFlowOffset
|
|
' 31.07.2002: neue Function ZeroFlowOffset_ErmitteltAusEinerTemperatur
|
|
' Version 9.14: Änderung in Function Diff_Tof und Q_US_Bereich_lph
|
|
' Version 9.16: Änderung in Function ZeroFlowOffset_ErmitteltAusEinerTemperatur
|
|
' Neue Function DiffToffASIC_ZeroFlowOffset
|
|
' Version 9.17: Änderung in Function DiffToffASIC_ZeroFlowOffset
|
|
'********************************************************************************************
|
|
|
|
'********************************************************************************************
|
|
'
|
|
'
|
|
' Author: Dirk Pulwer
|
|
' Date: 07.01.02
|
|
' Description: Modul-Anpassung / Integration (Option Explicit gesetzt - > Variablendeklaration erzwungen !)
|
|
'
|
|
' Diese Version wurde in die Prüfstationssoftware eingebunden
|
|
' Dazu mussten einige Elemtente, die direkt auf Excel-Zellen zugreifen entfernt werden
|
|
' Zusätzlich wurden alle Variablen deklariert und wenn nötig auf "Private" gesetzt
|
|
' So sind nach außen nur spezielle Funktionen 'sichtbar'
|
|
' Gar nicht verwendete Funktionen wurden der übersichtlichkeit herausgenommen.
|
|
'
|
|
' Benötig werden nur der JustageParameter_Type, die Prozedur Justage_Execute mit dazugehörigen
|
|
' internen Funktionen, FloatMSP430_To_DEZ und DEZ_To_FloatMSP430.
|
|
'
|
|
' Statt einem String "Error: ..." wird bei Fehlern ein Err.Raise ausgeführt
|
|
'
|
|
|
|
|
|
|
|
|
|
|
|
'********************************************************************************************
|
|
' Author: Uwe Groß
|
|
' Date: 06.08.01
|
|
' Description: Ablauf Justage.
|
|
' Die Bereichsumschaltung ist nur wirksam, wenn Unlinearität<>0% gesetzt.
|
|
' Bei Nutzung der Bereichsumschaltung muß .Sollfluss1_m3ph bzw. .Istfluss1_m3ph
|
|
' die kleinerern Durchflüsse sein. Außerdem ist der Input dieser beiden Werte nach
|
|
' Aufruf mit Nutzung der Bereichsjustage zerstört.
|
|
'
|
|
Public Type JustageParameter_Type
|
|
' Input:
|
|
|
|
Sollfluss1_m3ph As Double '---Solldurchfluß unterer Bereich (m³/h)
|
|
Sollfluss2_m3ph As Double '---Solldurchfluß oberer Bereich (m³/h)
|
|
Istfluss1_m3ph As Double '---Istdurchfluß unterer Bereich (m³/h)
|
|
Istfluss2_m3ph As Double '---Istdurchfluß oberer Bereich (m³/h)
|
|
Temperatur1_°C As Double '---Wassertemperatur am Prüfpunkt 1 (°C)
|
|
Temperatur2_°C As Double '---Wassertemperatur am Prüfpunkt 2 (°C)
|
|
Bereich_ns As Double '---Trennpunkt für Bereich oben/unten [ns]
|
|
SteilheitGeber_nsp°C As Double '---Steilheit Zeroflow [ns/°C]
|
|
OffsetGeber_ns As Double '---Offset Zeroflow [ns] wie im µC
|
|
Unlinearitaet As Double '---weiterer additiver Unlinearitätsfehler am Trennpunkt [%]
|
|
' 0% bedeutet damit alte Einstellung (z.B. 3%) bleibt unverändert
|
|
Geberkonstante1_IST_m As Double '---Geberkonstante im unteren Bereich[m]
|
|
Offset1_IST_m3ph As Double '---Offset im unteren Bereich [m³/h]
|
|
Geberkonstante2_IST_m As Double '---Geberkonstante im oberen Bereich[m]
|
|
Offset2_IST_m3ph As Double '---Offset im oberen Bereich [m³/h]
|
|
|
|
Offset_Qmin As Double '---Offset Qmin in %
|
|
Offset_QBereich As Double '---Offset QBereich in %
|
|
Offset_Qp As Double '---Offset Qp in %
|
|
SollFehlerDifferenz_Qmin As Double '---Soll-Fehler-Differenz bei Qmin (Spreizung der Heiss- und Kalt Kurven)
|
|
IstFehler_qmin_50°C As Double ' wird benötigt in Qmin_Temperaturjustage
|
|
' Output:
|
|
Geberkonstante_Neu1_m As Double '---Neue Geberkonstante im unteren Bereich[m]
|
|
Offset_Neu1_m3ph As Double '---Neuer Offset im unteren Bereich [m³/h]
|
|
Geberkonstante_Neu2_m As Double '---Neue Geberkonstante im oberen Bereich[m]
|
|
Offset_Neu2_m3ph As Double '---Neuer Offset im oberen Bereich [m³/h]
|
|
' Zusatzinfo:
|
|
JustageArt As String '---Normal, Bereichsjustage, Nachjustage, Temperaturspreizungsjustage
|
|
|
|
DT1 As Double ' neu RH 5.3.2008
|
|
DT2 As Double ' zum analysieren
|
|
|
|
' neu 2012
|
|
OGeber_Roh_Neu_ns As Double 'für das Logfile den neu berechneten O-Geber ohne Offset speichern
|
|
OGeber As Double
|
|
Fehler1 As Double
|
|
Fehler2 As Double
|
|
DiffTof1_ns As Double
|
|
DiffTof2_ns As Double
|
|
OffsetGeber_Neu_ns As Double
|
|
End Type
|
|
|
|
|
|
' History: 26.11.01 - Version 8.19 - Uwe Groß: Korrektur bei der Justage mit Bereichsumschaltung
|
|
' 04.12.01 - Version 9.1 - Uwe Groß: Korrektur bei der Berechnung BUist; FP_OGeber wird *-1 übergeben
|
|
' 02.01.02 - Version 9.7 - Uwe Groß: Korrektur bei der Berechnung BUist; FP_Bereich wird ZeroFlow befreit, wie µC
|
|
'*******************************************************************************************
|
|
|
|
Public gudtUSParameter As JustageParameter_Type
|
|
|
|
|
|
'********************************************************************************************
|
|
' Author: Uwe Dehne
|
|
' Date: 29.04.03
|
|
' Description: berechnet den neuen SteilheitGeber mit Hilfe des alten Wertes und
|
|
' einer Vorprüfung bei 50°C
|
|
'
|
|
' Input: der Fehler bei einer Vormessung bei qmin und 50°C
|
|
' der Fehler bei qmin = Definitionsgemäß Sollfluss1
|
|
' die aktuellen Justagewerte aus der Datenbank
|
|
'
|
|
' Output: SteilheitGeber_nsp°C, der neue SteilheitGeber Wert
|
|
' Istfluss1_m3ph, der neue Durchfluß wegen des neuen SteilheitGeber Wertes
|
|
'
|
|
Public Sub Qmin_Temperaturjustage()
|
|
|
|
' Zwischengrößen für interne Zwecke
|
|
Dim dblStg As Double
|
|
Dim dblFst As Double
|
|
|
|
' Zuerst einmal muessen wir den tatsächlichen Versatz der Fehlerkurven bei
|
|
' qmin errechnen und um den Wunschversatz korrigieren
|
|
' dazu: erst einmal aus den 20°C Durchfluessen einen Fehler berechnen
|
|
|
|
dblStg = (gudtUSParameter.Istfluss1_m3ph - gudtUSParameter.Sollfluss1_m3ph) / gudtUSParameter.Sollfluss1_m3ph
|
|
' und nach %
|
|
dblStg = dblStg * 100#
|
|
DebugMsg "Fehler bei 20°C bei Qmin: " & dblStg & " %"
|
|
|
|
' nun die Differenz berechnen und korrigieren
|
|
dblStg = dblStg - gudtUSParameter.IstFehler_qmin_50°C + gudtUSParameter.SollFehlerDifferenz_Qmin
|
|
|
|
DebugMsg "Fehlerdifferenz (FehlerQmin20°C - FehlerQmin50°C + SollSpreizung aus DB) = " & dblStg & " %"
|
|
|
|
' nun aus der %-Angabe einen echten Durchlfuß berechnen
|
|
' Bem.: Der ...fluß1 ist per Definition qmin
|
|
|
|
dblStg = (dblStg / 100) * gudtUSParameter.Sollfluss1_m3ph
|
|
|
|
DebugMsg "entspricht Durchfluss = " & dblStg & " m³/h"
|
|
|
|
' diesen nun in den Zwischenwert Flächenstrom m²/h
|
|
dblStg = dblStg / gudtUSParameter.Geberkonstante1_IST_m
|
|
|
|
DebugMsg "Flächenstrom = " & dblStg & " m²/h"
|
|
|
|
' und daraus nun Sekunden berechnen
|
|
'
|
|
' Bem.: Die Durchflußermittelung geht so:
|
|
' Q_US_lph = (DiffTof_ns + OGeber_ns + Temperatur_°C * STGeber_ns) * 0.000001 _
|
|
' * US_Laufzeit(Temperatur_°C) ^ 2 * KGeber_m * 3600
|
|
|
|
' also ergibt sich dann daraus zurück gerechnet:
|
|
' dblFst = 0.000001 * 3600 * (US_Laufzeit(50) ^ 2 - US_Laufzeit(US.Temperatur1_°C) ^ 2)
|
|
' ACHTUNG: Die Formel oben ergibt ltr/h und wir brauchen m3/h
|
|
|
|
dblFst = 0.000001 * 3600# * 55# * US_Laufzeit(55) ^ 2
|
|
dblFst = dblFst - (0.000001 * 3600# * gudtUSParameter.Temperatur1_°C * US_Laufzeit(gudtUSParameter.Temperatur1_°C) ^ 2)
|
|
|
|
' nun aus dieser Zwischengröße ltr/h über m3/h dann Delta ST_Geber in nSec
|
|
dblStg = dblStg * 1000# / dblFst
|
|
|
|
DebugMsg " Delta ST_Geber = " & dblStg & " nSec"
|
|
|
|
' und damit jetzt den alten aktuell eingestellten Wert korrigieren
|
|
gudtUSParameter.SteilheitGeber_nsp°C = gudtUSParameter.SteilheitGeber_nsp°C + dblStg
|
|
|
|
DebugMsg " neuer ST_Geber = " & gudtUSParameter.SteilheitGeber_nsp°C & " nSec"
|
|
|
|
' und jetzt noch den gemessenen qmin-Wert korrigieren wegen des neuen SteiheitGeber
|
|
' dazu: das resultierende Delta berechnen
|
|
dblFst = dblStg * gudtUSParameter.Temperatur1_°C * 0.000001 * US_Laufzeit(gudtUSParameter.Temperatur1_°C) ^ 2 _
|
|
* gudtUSParameter.Geberkonstante1_IST_m * 3600#
|
|
' ACHTUNG: Das sind jetzt ltr/h, daraus also m3/h machen:
|
|
dblFst = dblFst / 1000
|
|
|
|
' ich hoffe es ist ab jetzt wieder alles in m3/h
|
|
' in dieser Version nicht notwendig
|
|
' dblFst = dblFst / gudtUSParameter.Sollfluss1_m3ph
|
|
' dblFst = dblFst / 1000 ' nach ltr/h
|
|
' dblFst = dblFst * 100 ' nach %
|
|
|
|
DebugMsg "Korrekturwert Qmin (kalt) = " & dblFst & " m³/h"
|
|
|
|
' und damit jetzt noch den Istdurchfluss korrigieren
|
|
gudtUSParameter.Istfluss1_m3ph = gudtUSParameter.Istfluss1_m3ph + dblFst
|
|
|
|
DebugMsg "neuer Qmin (kalt) = " & gudtUSParameter.Istfluss1_m3ph & " m³/h"
|
|
|
|
End Sub
|
|
'********************************************************************************************
|
|
|
|
Public Sub Justage_Execute()
|
|
|
|
If gudtUSParameter.Unlinearitaet = 0 Then '---keine Bereichsumschaltung
|
|
|
|
'---normale Justage berechnen
|
|
gudtUSParameter.Geberkonstante_Neu1_m = Geberkonstante_m(gudtUSParameter.Geberkonstante1_IST_m)
|
|
gudtUSParameter.Offset_Neu1_m3ph = Offset_m3ph(gudtUSParameter.Offset1_IST_m3ph)
|
|
gudtUSParameter.Geberkonstante_Neu2_m = Geberkonstante_m(gudtUSParameter.Geberkonstante2_IST_m)
|
|
gudtUSParameter.Offset_Neu2_m3ph = Offset_m3ph(gudtUSParameter.Offset2_IST_m3ph)
|
|
|
|
Else '---Berechnung der Bereichsumschaltung in m³/h
|
|
|
|
Dim DiffTof As Double
|
|
Dim BUist As Double
|
|
Dim BUsoll As Double
|
|
Dim TempSoll As Double
|
|
Dim TempIst As Double
|
|
|
|
'---Berechnung DiffTof für Bereichsumschaltung
|
|
DiffTof = gudtUSParameter.Bereich_ns + gudtUSParameter.OffsetGeber_ns - gudtUSParameter.SteilheitGeber_nsp°C * gudtUSParameter.Temperatur1_°C
|
|
'---BUsoll/ist mit Justageparameter unten und Temperatur unten
|
|
BUist = Q_US_lph(DiffTof, -gudtUSParameter.OffsetGeber_ns, gudtUSParameter.Temperatur1_°C, gudtUSParameter.Geberkonstante1_IST_m, gudtUSParameter.SteilheitGeber_nsp°C, gudtUSParameter.Offset1_IST_m3ph * 1000) / 1000
|
|
BUsoll = BUist + gudtUSParameter.Unlinearitaet * BUist
|
|
|
|
'Zwischenspeicherung
|
|
TempSoll = gudtUSParameter.Sollfluss2_m3ph
|
|
TempIst = gudtUSParameter.Istfluss2_m3ph
|
|
|
|
'Justage vom Bereichsumschaltpunkt bis Prüfpkt. unten
|
|
gudtUSParameter.Sollfluss2_m3ph = BUsoll '---oberer Prüfpkt. ist jetzt die Bereichsumschaltung
|
|
gudtUSParameter.Istfluss2_m3ph = BUist
|
|
gudtUSParameter.Geberkonstante_Neu1_m = Geberkonstante_m(gudtUSParameter.Geberkonstante1_IST_m)
|
|
gudtUSParameter.Offset_Neu1_m3ph = Offset_m3ph(gudtUSParameter.Offset1_IST_m3ph)
|
|
|
|
'---Zwischenspeicherung rückgängig
|
|
gudtUSParameter.Sollfluss2_m3ph = TempSoll
|
|
gudtUSParameter.Istfluss2_m3ph = TempIst
|
|
|
|
'Justage vom Trennpunkt bis Prüfpkt. oben
|
|
'---Berechnung DiffTof für Bereichsumschaltung
|
|
DiffTof = gudtUSParameter.Bereich_ns + gudtUSParameter.OffsetGeber_ns - gudtUSParameter.SteilheitGeber_nsp°C * gudtUSParameter.Temperatur2_°C
|
|
'---BUsoll mit Justageparameter oben und Temperatur oben
|
|
BUist = Q_US_lph(DiffTof, -gudtUSParameter.OffsetGeber_ns, gudtUSParameter.Temperatur2_°C, gudtUSParameter.Geberkonstante2_IST_m, gudtUSParameter.SteilheitGeber_nsp°C, gudtUSParameter.Offset2_IST_m3ph * 1000) / 1000
|
|
BUsoll = BUist + gudtUSParameter.Unlinearitaet * BUist
|
|
|
|
'---Zwischenspeicherung und Justage vom Trennpunkt bis Prüfpkt. oben
|
|
TempSoll = gudtUSParameter.Sollfluss1_m3ph
|
|
TempIst = gudtUSParameter.Istfluss1_m3ph
|
|
gudtUSParameter.Sollfluss1_m3ph = BUsoll '---unterer Prüfpkt. ist jetzt die Bereichsumschaltung
|
|
gudtUSParameter.Istfluss1_m3ph = BUist
|
|
gudtUSParameter.Geberkonstante_Neu2_m = Geberkonstante_m(gudtUSParameter.Geberkonstante2_IST_m)
|
|
gudtUSParameter.Offset_Neu2_m3ph = Offset_m3ph(gudtUSParameter.Offset2_IST_m3ph)
|
|
|
|
'---Zwischenspeicherung rückgängig
|
|
gudtUSParameter.Sollfluss1_m3ph = TempSoll
|
|
gudtUSParameter.Istfluss1_m3ph = TempIst
|
|
|
|
End If
|
|
|
|
End Sub
|
|
|
|
|
|
|
|
'*******************************************************************************************
|
|
' Author: Uwe Groß (Invensys Metering Systems)
|
|
' Date: 31.07.2002
|
|
' Description: Algorithmus zur ZeroFlow Justage.
|
|
' ZU ÜBERPRÜFEN: Wie wirkt sich FP_St_Geber ungleich 0 aus!!!!!!!!
|
|
' --------------
|
|
'
|
|
' Input: Definition der Justage Parameter und Prüfpunkte im Global US:
|
|
' -------------------------------------------------------------
|
|
' .Sollfluss1_m3ph As Single '---Solldurchfluß unterer Bereich (m³/h)
|
|
' .Sollfluss2_m3ph As Single '---Solldurchfluß oberer Bereich (m³/h)
|
|
' .Istfluss1_m3ph As Single '---Istdurchfluß unterer Bereich (m³/h)
|
|
' .Istfluss2_m3ph As Single '---Istdurchfluß oberer Bereich (m³/h)
|
|
' .Temperatur1_°C As Single '---Wassertemperatur am Prüfpunkt 1 (°C)
|
|
' .Temperatur2_°C As Single '---Wassertemperatur am Prüfpunkt 2 (°C)
|
|
' .Geberkonstante1_IST_m As Double '---Geberkonstante im unteren Bereich[m]
|
|
' .Offset1_IST_m3ph As Double '---Offset im unteren Bereich [m³/h]
|
|
' .Geberkonstante2_IST_m As Double '---Geberkonstante im oberen Bereich[m]
|
|
' .Offset2_IST_m3ph As Double '---Offset im oberen Bereich [m³/h]
|
|
' .Bereich_ns As Double '---Trennpunkt für Bereich oben/unten [ns] nach ZeroFlowJustage
|
|
' .SteilheitGeber_nsp°C As Double '---Steilheit Zeroflow [ns/°C]
|
|
' .OffsetGeber_ns As Double '---Offset Zeroflow [ns] wie im µC
|
|
' .Unlinearitaet As Single '---weiterer additiver Unlinearitätsfehler am Trennpunkt [%]
|
|
' 0% bedeutet damit alte Einstellung (z.B. 3%) bleibt unverändert
|
|
' Output:
|
|
' .Geberkonstante_Neu1_m As Double '---Neue Geberkonstante im unteren Bereich[m]
|
|
' .Offset_Neu1_m3ph As Double '---Neuer Offset im unteren Bereich [m³/h]
|
|
' .Geberkonstante_Neu2_m As Double '---Neue Geberkonstante im oberen Bereich[m]
|
|
' .Offset_Neu2_m3ph As Double '---Neuer Offset im oberen Bereich [m³/h]
|
|
' .SteilheitGeber_nsp°C '---Input ZeroFlowSteilheit auf 0 [ns/°C]
|
|
' .OffsetGeber_ns '---Input ZeroFlowOffset neu berechnet [ns]
|
|
'
|
|
' History: 08.08.02: Fehler bei der Toleranzabfrage für FP_O_Geber korregiert.
|
|
' 13.08.02: Input für ZeroFlowOffset_ErmitteltAusEinerTemperatur um US.SteilheitGeber_nsp°C und mittlere Temperatur erweitert
|
|
'*****************************************************************************************
|
|
Public Sub Justage_mit_ZeroFlow()
|
|
|
|
Dim DT1 As Double
|
|
Dim DT2 As Double
|
|
|
|
With gudtUSParameter
|
|
|
|
'---DiffToff aus den alten Justageparametern für die Prüfpunkte bestimmen
|
|
DT1 = Diff_Tof(.Istfluss1_m3ph * 1000, .Temperatur1_°C, .Geberkonstante2_IST_m, .Offset2_IST_m3ph * 1000, .Geberkonstante1_IST_m, .Offset1_IST_m3ph * 1000, -.OffsetGeber_ns, .SteilheitGeber_nsp°C, .Bereich_ns)
|
|
DT2 = Diff_Tof(.Istfluss2_m3ph * 1000, .Temperatur2_°C, .Geberkonstante2_IST_m, .Offset2_IST_m3ph * 1000, .Geberkonstante1_IST_m, .Offset1_IST_m3ph * 1000, -.OffsetGeber_ns, .SteilheitGeber_nsp°C, .Bereich_ns)
|
|
|
|
.DT1 = DT1
|
|
.DT2 = DT2
|
|
'---Berechnung des ZeroFlowOffset aus den beiden Justagepunkten für eine Temperatur
|
|
|
|
.OffsetGeber_ns = ZeroFlowOffset_ErmitteltAusEinerTemperatur(DT1, DT2, .Sollfluss1_m3ph, .Sollfluss2_m3ph, .SteilheitGeber_nsp°C, (.Temperatur1_°C + .Temperatur2_°C) / 2)
|
|
|
|
'---Berechnung des Istdurchfluss1&2 bei Verwendung des neuen ZeroFlowOffset
|
|
.Istfluss1_m3ph = Q_US_Bereich_lph(DT1, -.OffsetGeber_ns, .Temperatur1_°C, .Geberkonstante1_IST_m, .Geberkonstante2_IST_m, .SteilheitGeber_nsp°C, .Offset1_IST_m3ph * 1000, .Offset2_IST_m3ph * 1000, .Bereich_ns) / 1000
|
|
.Istfluss2_m3ph = Q_US_Bereich_lph(DT2, -.OffsetGeber_ns, .Temperatur2_°C, .Geberkonstante1_IST_m, .Geberkonstante2_IST_m, .SteilheitGeber_nsp°C, .Offset1_IST_m3ph * 1000, .Offset2_IST_m3ph * 1000, .Bereich_ns) / 1000
|
|
|
|
End With
|
|
|
|
'---hydraulische Justage, damit mit dem neuen ZeroFlowOffset
|
|
'---die Prüfpunkte1&2 zu 0% Fehler führen.
|
|
|
|
End Sub
|
|
|
|
|
|
'********************************************************************************************
|
|
' Author: Uwe Groß
|
|
' Date: 22.03.2001
|
|
' Description: Bestimmt Offset und Geberkonstante aus 2 Fehlermessungen
|
|
'
|
|
' Input: Sollfluss1_m3ph : Solldurchfluß 1 (m³/h)
|
|
' Sollfluss2_m3ph : Solldurchfluß 2 (m³/h)
|
|
' Istfluss1_m3ph : Istdurchfluß 1 (m³/h)
|
|
' Istfluss2_m3ph : Istdurchfluß 2 (m³/h)
|
|
' Geberkonstante_IST_m : Geberkonstante [m]
|
|
' Offset_IST_m3ph : Offset DiffToff bei Zeroflow [m³/h]
|
|
' Output: Geberkonstante_m : neuer Geberkonstante [m]
|
|
' Offset_m3ph : neuer Offset DiffToff bei Zeroflow [m³/h]
|
|
'
|
|
' History: 10.05.01 - Version 4.9 - Uwe Groß: Anpassung auf Temperaturkompensation der US-Laufzeit
|
|
' 14.05.01 - Version 4.10 -Uwe Groß: Berechnungsfehler beseitigt
|
|
' 14.05.01 - Version 8.0 -Uwe Groß: Neue Justage mit Offset_m3ph, dadurch sind die Temperaturen
|
|
' als Input nicht mehr nötig
|
|
' 06.08.01 - Version 8.5 - Uwe Groß: Die meisten Inputs durch Globals ersetzt
|
|
'*******************************************************************************************
|
|
Function Geberkonstante_m(Geberkonstante_IST_m As Double) As Double
|
|
' OK wie bei Deplhi, kontrolliert von RH am 5.3.2008
|
|
Geberkonstante_m = Geberkonstante_IST_m * (gudtUSParameter.Sollfluss1_m3ph - gudtUSParameter.Sollfluss2_m3ph) / (gudtUSParameter.Istfluss1_m3ph - gudtUSParameter.Istfluss2_m3ph)
|
|
End Function
|
|
|
|
Function Offset_m3ph(Offset_IST_m3ph As Double) As Double
|
|
' OK wie bei Deplhi, kontrolliert von RH am 5.3.2008
|
|
Offset_m3ph = (gudtUSParameter.Sollfluss2_m3ph * (gudtUSParameter.Istfluss1_m3ph - Offset_IST_m3ph) - gudtUSParameter.Sollfluss1_m3ph * (gudtUSParameter.Istfluss2_m3ph - Offset_IST_m3ph)) / (gudtUSParameter.Istfluss1_m3ph - gudtUSParameter.Istfluss2_m3ph)
|
|
|
|
End Function
|
|
|
|
|
|
|
|
|
|
'********************************************************************************************
|
|
' Author: Uwe Groß
|
|
' Date: 22.02.2001
|
|
' Description: Bestimmt den die Laufzeit US in Wasser in Abhängigkeit der Temperatur
|
|
'
|
|
' Input: Temperatur: Temperatur des Wassers in °C
|
|
' Output: Schalllaufzeit in m/s
|
|
'
|
|
'*******************************************************************************************
|
|
|
|
Function US_Laufzeit(Temperatur)
|
|
' OK wie bei Deplhi, kontrolliert von RH am 5.3.2008
|
|
Const k0 = 1402.38754
|
|
Const k1 = 5.03711129
|
|
Const k2 = -0.0580852166
|
|
Const k3 = 0.000334198834
|
|
Const k4 = -0.00000147800417
|
|
Const k5 = 3.14643091E-09
|
|
|
|
US_Laufzeit = k0 + k1 * Temperatur + k2 * Temperatur ^ 2 + k3 * Temperatur ^ 3 + k4 * Temperatur ^ 4 + k5 * Temperatur ^ 5
|
|
|
|
End Function
|
|
|
|
|
|
|
|
'********************************************************************************************
|
|
' Author: Uwe Groß
|
|
' Date: 31.01.2001
|
|
' Description: Bestimmt den Durchfluß für US2000
|
|
'
|
|
' Input: DiffTof_ns : Laufzeitdifferenz in ns
|
|
' OGeber_ns : Offset Geber in ns (Achtung im µC ist dieser Wert * -1)
|
|
' Temperatur_°C: Wassertemperatur in °C
|
|
' KGeber_m : Geberkonsante in m aus Querschnitt/2/Wandlerabstand
|
|
' STGeber_ns : temperaturabhängige Steilheit für DiffTof_ns
|
|
' OFlow_lph : temperaturunabhänige Offsetkorrektur in l/h
|
|
'
|
|
' Output: Ergebnis in l/h
|
|
'
|
|
' History: 15.05.01 neue Berechnungsformel mit US-Laufzeit aus Temperatur ermittelt
|
|
' 19.06.01 temperaturunabhängiger Offset und Unlinearitätsausgleich hinzugefügt
|
|
' 06.08.01 temperaturabhängige Steilheit für DiffTof_ns hinzugefügt
|
|
' UnLinAbgl entfernt
|
|
'*******************************************************************************************
|
|
|
|
Function Q_US_lph(DiffTof_ns As Double, OGeber_ns As Double, Temperatur_°C As Double, KGeber_m As Double, STGeber_ns As Double, OFlow_lph As Double) As Double
|
|
|
|
'--Durchflußermittelung nach konventioneller Art
|
|
Q_US_lph = (DiffTof_ns + OGeber_ns + Temperatur_°C * STGeber_ns) * 0.000001 _
|
|
* US_Laufzeit(Temperatur_°C) ^ 2 * KGeber_m * 3600
|
|
|
|
'--temperaturunabhängiger Offset
|
|
Q_US_lph = OFlow_lph + Q_US_lph
|
|
|
|
End Function
|
|
|
|
|
|
'********************************************************************************************
|
|
' Author: Uwe Groß
|
|
' Date: 02.01.2002
|
|
' Description: Bestimmt den Durchfluß für US2000 mit Bereichsumschaltung
|
|
'
|
|
' Input: DiffTof_ns : Laufzeitdifferenz in ns
|
|
' OGeber_ns : Offset Geber in ns (Achtung im µC ist dieser Wert * -1)
|
|
' Temperatur_°C: Wassertemperatur in °C
|
|
' KGeberUNTEN_m : Geberkonstante in m für unteren Bereich
|
|
' KGeberOBEN_m : Geberkonstante in m für oberen Bereich
|
|
' STGeber_ns : temperaturabhängige Steilheit für DiffTof_ns
|
|
' OFlowUNTEN_lph : temperaturunabhänige Offsetkorrektur in l/h für unteren Bereich
|
|
' OFlowOBEN_lph : temperaturunabhänige Offsetkorrektur in l/h für oberen Bereich
|
|
' Bereich_ns : Bereichsumschaltung in ns
|
|
' k0 bis k5 Koeffizienten 5. Ordnung für US-Laufzeitkompensation
|
|
'
|
|
' Output: Ergebnis in l/h
|
|
'
|
|
' History: 12.06.02 US-LZ Koeffizienten als Input entfernt
|
|
' 09.08.02 Definition des Inputs als Single bzw. Double sonst Absturz bei undefiniertem Input
|
|
'*******************************************************************************************
|
|
|
|
Function Q_US_Bereich_lph(DiffTof_ns As Double, OGeber_ns As Double, Temperatur_°C As Double, KGeberUNTEN_m As Double, KGeberOBEN_m As Double, STGeber_ns As Double, OFlowUNTEN_lph As Double, OFlowOBEN_lph As Double, Bereich_ns As Double) As Double
|
|
|
|
Dim DT As Double
|
|
|
|
'---DiffTof in ns nach ZeroFlow Korrektur
|
|
DT = (DiffTof_ns + OGeber_ns + Temperatur_°C * STGeber_ns)
|
|
|
|
'--Durchflußermittelung
|
|
If DT < Bereich_ns Then
|
|
Q_US_Bereich_lph = DT * 0.000001 * US_Laufzeit(Temperatur_°C) ^ 2 * KGeberUNTEN_m * 3600 + OFlowUNTEN_lph
|
|
Else
|
|
Q_US_Bereich_lph = DT * 0.000001 * US_Laufzeit(Temperatur_°C) ^ 2 * KGeberOBEN_m * 3600 + OFlowOBEN_lph
|
|
End If
|
|
|
|
End Function
|
|
|
|
|
|
'********************************************************************************************
|
|
' Author: Uwe Groß
|
|
' Date: 25.09.2001
|
|
' Description: Bestimmt aus dem Durchfluß ein mittleres Diff_Tof
|
|
'
|
|
' Input: Durchfluß_lph: Laufzeitdifferenz in ns
|
|
' Temperatur_°C: Wassertemperatur in °C
|
|
' KGeber_m : Geberkonsante in m aus Querschnitt/2/Wandlerabstand
|
|
' OFlow_lph : temperaturunabhänige Offsetkorrektur in l/h
|
|
' O_Geber_ns : temperaturabhängige Offsetkorrektur in ns (Achtung im µC ist dieser Wert * -1)
|
|
' ST_Geber_nsPerGradC: temperaturabhängige Steilheitskorrektur in ns/°C
|
|
' Output: Ergebnis in ns
|
|
'
|
|
' History: 16.11.01 O_Geber_ns und ST_Geber_nsPerGradC als zusätzlicher Input
|
|
' 22.11.01 Bereichumschaltung eingefügt und Input entsprechend erweitert
|
|
' 11.01.02 US-LZ Koeffizienten als Input aufgenommen
|
|
' 12.06.02 US-LZ Koeffizienten als Input wieder entfernt
|
|
' 09.08.02 Definition des Inputs als Single bzw. Double sonst Absturz bei undefiniertem Input
|
|
'*******************************************************************************************
|
|
|
|
Private Function Diff_Tof(Durchfluß_lph As Double, _
|
|
Temperatur_°C As Double, _
|
|
KGeberOBEN_m As Double, _
|
|
OFlowOBEN_lph As Double, _
|
|
KGeberUNTEN_m As Double, _
|
|
OFlowUNTEN_lph As Double, _
|
|
O_Geber_ns As Double, _
|
|
ST_Geber_nsPerGradC As Double, _
|
|
Bereich_ns As Double) As Double
|
|
|
|
Dim Diff_TofOben As Double
|
|
Dim Diff_TofUnten As Double
|
|
|
|
Diff_TofOben = ((Durchfluß_lph - OFlowOBEN_lph) / 3600000 / KGeberOBEN_m / US_Laufzeit(Temperatur_°C) ^ 2 * 1000000000#)
|
|
Diff_TofUnten = ((Durchfluß_lph - OFlowUNTEN_lph) / 3600000 / KGeberUNTEN_m / US_Laufzeit(Temperatur_°C) ^ 2 * 1000000000#)
|
|
|
|
If Diff_TofUnten < Bereich_ns Then
|
|
Diff_Tof = Diff_TofUnten - O_Geber_ns - ST_Geber_nsPerGradC * Temperatur_°C
|
|
Else
|
|
Diff_Tof = Diff_TofOben - O_Geber_ns - ST_Geber_nsPerGradC * Temperatur_°C
|
|
End If
|
|
|
|
End Function
|
|
|
|
|
|
|
|
|
|
|
|
|
|
'********************************************************************************************
|
|
' Author: Uwe Groß
|
|
' Date: 31.07.2002
|
|
' Description: Bestimmt den ZeroFlow Offset aus dem Input bei gleicher Temperatur.
|
|
' Die Temperatur für Sollfluss1_m3ph und Sollfluss2_m3ph muß ungefähr
|
|
' (ca. +-5°C) gleich sein.
|
|
' Input: DiffTof1_ns : DiffTof bei Sollfluss1_m3ph [ns]
|
|
' DiffTof2_ns : DiffTof bei Sollfluss2_m3ph [ns]
|
|
' Sollfluss1_m3ph : Solldurchfluß unterer Bereich (m³/h)
|
|
' Sollfluss2_m3ph : Solldurchfluß oberer Bereich (m³/h)
|
|
' SteilheitGeber_nsp°C: ZeroFlow Steilheit [ns/°C]
|
|
' Temperatur_°C : mittlere Temperatur der Prüfpkt. Sollfluss1_m3ph und Sollfluss2_m3ph
|
|
' Output:
|
|
' History: 13.08.2002 Version 9.16: Fehler im Quotienten Sollfluss2 mit Sollfluss1 vertauscht.
|
|
' Input um SteilheitGeber_nsp°C und Temperatur_°C erweitert und
|
|
' im Algorithmus berücksichtigt.
|
|
'*******************************************************************************************
|
|
|
|
Private Function ZeroFlowOffset_ErmitteltAusEinerTemperatur(DiffTof1_ns As Double, _
|
|
DiffTof2_ns As Double, _
|
|
Sollfluss1_m3ph As Double, _
|
|
Sollfluss2_m3ph As Double, _
|
|
SteilheitGeber_nsp°C As Double, _
|
|
Temperatur_°C As Double)
|
|
|
|
ZeroFlowOffset_ErmitteltAusEinerTemperatur = (Sollfluss2_m3ph * DiffTof1_ns - Sollfluss1_m3ph * DiffTof2_ns) / _
|
|
(Sollfluss2_m3ph - Sollfluss1_m3ph) + Temperatur_°C * SteilheitGeber_nsp°C
|
|
|
|
End Function
|
|
|
|
|
|
|
|
|
|
|
|
'********************************************************************************************
|
|
' Author: Uwe Groß
|
|
' Date: 19.02.2001
|
|
' Description: Wandelt eine positive Dezimalzahl in eine Hexdezimale Zahl
|
|
'
|
|
' Input: Dezimalzahl >0
|
|
' Stellen_Anzahl > 1 der Hexadezimalen Zahl
|
|
' Output: Hexadezimale Zahl
|
|
'
|
|
' History:
|
|
|
|
'*******************************************************************************************
|
|
|
|
Public Function Positive_HexWandelung(Dezimalzahl As Long, Stellen_Anzahl As Long) As String
|
|
|
|
'Checken des Input-Bereiches
|
|
If Dezimalzahl >= 16 ^ Stellen_Anzahl Then
|
|
'Positive_HexWandelung = "OVERFLOW"
|
|
Err.Raise 0, "Positive_HexWandelung", "OVERFLOW"
|
|
Exit Function
|
|
End If
|
|
Stellen_Anzahl = Int(Stellen_Anzahl) - 1
|
|
If (Dezimalzahl < 0 Or Stellen_Anzahl < 0) Then
|
|
'Positive_HexWandelung = "ERROR"
|
|
Err.Raise 0, "Positive_HexWandelung", "ERROR"
|
|
Exit Function
|
|
End If
|
|
|
|
Dim i As Integer
|
|
Dim A As Long
|
|
|
|
If Positive_HexWandelung = "" Then '---Weiter wenn kein Input Fehler vorliegt
|
|
For i = Stellen_Anzahl To 0 Step -1
|
|
A = 0
|
|
Do While Dezimalzahl - 16 ^ i >= 0
|
|
Dezimalzahl = Dezimalzahl - 16 ^ i
|
|
A = A + 1
|
|
Loop
|
|
Positive_HexWandelung = Positive_HexWandelung + Hex(A)
|
|
Next i
|
|
End If
|
|
|
|
End Function
|
|
|
|
|
|
'********************************************************************************************
|
|
' Author: Uwe Groß
|
|
' Date: 21.02.2001
|
|
' Description: Wandelt eine Hexdezimale Zahl in eine Dezimalzahl mit Beachtung des Vorzeichens
|
|
' Ist das MSB=1 wird die HexZahl als negative Zahl im 2er Komplement betrachtet
|
|
' Input: Hexzahl
|
|
' Output: Dezimalzahl vorzeichenbehaftet
|
|
'
|
|
' History:
|
|
|
|
'*******************************************************************************************
|
|
|
|
Private Function Vorzeichen_DezWandelung(strHexZahl As String) As Long
|
|
|
|
Dim lngReturn As Long
|
|
|
|
'8. Bit von rechts auf 1 - bzw. hier 4. Bit von rechts in einem Nibbel
|
|
lngReturn = CLng("&H" & strHexZahl)
|
|
If (CLng("&h" + Left$(strHexZahl, 1)) And 8) = 8 Then
|
|
'Hexzahl ist negativ - entsprechend der Länge der HexZahl FFFFF+1 abziehen
|
|
lngReturn = lngReturn - (CLng("&H" & (String$(Len(strHexZahl), "F"))) + 1)
|
|
End If
|
|
Vorzeichen_DezWandelung = lngReturn
|
|
|
|
End Function
|
|
|
|
|
|
|
|
|
|
|
|
'********************************************************************************************
|
|
' Author: Uwe Groß
|
|
' Date: 18.04.2001
|
|
' Description: Wandelt eine Float-Zahl MSP430 Format in eine
|
|
' gebrochene Dezimalzahl
|
|
' Input: FloatMSP430: Hexadezimale Zahl im Format "XXXXXXXX" als String mit:
|
|
' e ,sn, m
|
|
' 31...24,23,22....0
|
|
' Output: FloatMSP430_To_DEZ=-1^sn*(1+M/2^23)*2^(e-128)
|
|
' mit sn=-1^s entspricht -1 und sn=0 entspricht +1
|
|
' History: 18.09.01 - Uwe Groß - FloatMSP430 = "00000000" führt zu 0,00
|
|
'*******************************************************************************************
|
|
Public Function FloatMSP430_To_DEZ(FloatMSP430 As String) As Double
|
|
|
|
Dim sn As Integer
|
|
Dim m As Double
|
|
Dim e As Double
|
|
|
|
If Len(FloatMSP430) <> 8 Then
|
|
'FloatMSP430_To_DEZ = "Error: Length<>8"
|
|
Err.Raise "0", "FloatMSP430_To_DEZ", "Length<>8"
|
|
Else
|
|
If FloatMSP430 = "00000000" Then
|
|
FloatMSP430_To_DEZ = 0
|
|
Else
|
|
'--Bestimmung des Vorzeichens
|
|
sn = Int("&h" + Mid$(FloatMSP430, 3, 1)) And 8
|
|
If sn = 0 Then
|
|
sn = 1
|
|
Else
|
|
sn = -1
|
|
End If
|
|
'--Berechnung des Exponenten von 2
|
|
e = (Int("&h" + Mid$(FloatMSP430, 1, 2))) - 128
|
|
'--Berechnung der Mantisse
|
|
m = (Int("&h" + Mid$(FloatMSP430, 3, 6)) And &H7FFFFF) / (2 ^ 23) + 1
|
|
'--Berechnung der gebrochenen Dezimalzahl
|
|
FloatMSP430_To_DEZ = sn * m * (2 ^ e)
|
|
End If
|
|
End If
|
|
|
|
End Function
|
|
|
|
|
|
|
|
|
|
'********************************************************************************************
|
|
' Author: Uwe Groß
|
|
' Date: 18.04.2001
|
|
' Description: Wandelt eine gebrochene Dezimalzahl in eine
|
|
' Float-Zahl MSP430 Format
|
|
' Input: Dezimal: gebrochene Dezimalzahl
|
|
' Output: DEZ_To_FloatMSP430 im Format "XXXXX" als String mit:
|
|
' e ,sn, m
|
|
' 40...24,23,22....0
|
|
' mit sn=1 entspricht -1 und sn=0 entspricht +1
|
|
' History: 12.06.01 (Uwe Groß) Abfrage auf m >=; zusätzlich kommentiert in Source
|
|
'*******************************************************************************************
|
|
Public Function DEZ_To_FloatMSP430(Dezimal As Double) As String
|
|
|
|
Dim sn As Long
|
|
Dim e As Long
|
|
Dim m As Double
|
|
|
|
'--Bestimmung des Vorzeichens
|
|
If Dezimal < 0 Then
|
|
sn = 2 ^ 23
|
|
Dezimal = Dezimal * -1
|
|
Else
|
|
sn = 0
|
|
End If
|
|
|
|
'--Bestimmung des Exponenten von 2 und der Mantisse
|
|
If Dezimal <> 0 Then
|
|
e = 0
|
|
m = Dezimal * 2 ^ 151
|
|
|
|
'---Änderung 12.06.01/Uwe Groß Abfrage auf m >=
|
|
Do While (m >= 2 ^ 24) '---max. Mantisse + 2^23
|
|
m = m / 2
|
|
e = e + 1
|
|
Loop
|
|
m = Dezimal * 2 ^ (151 - e) - 2 ^ 23
|
|
m = sn + m '---Vorzeichen verheiraten
|
|
Else
|
|
e = 0
|
|
End If
|
|
|
|
'--Bestimmung des hexadezimalen String für MSP430 float format
|
|
If e > 255 Then
|
|
'DEZ_To_FloatMSP430 = "Error: Overflow"
|
|
Err.Raise 0, "DEZ_To_FloatMSP430", "Overflow"
|
|
Else
|
|
DEZ_To_FloatMSP430 = Right$("0" + Hex$(e), 2) + _
|
|
Right$("000000" + Hex$(m), 6)
|
|
' a = Hex$(m)
|
|
End If
|
|
|
|
End Function
|
|
|
|
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
|
|
' neu RH 6.1.2011
|
|
'{*******************************************************************************
|
|
'Author: Frank Leidel
|
|
'Datum: 12.11.2011
|
|
'Beschreibung: Rechnet den Offset zum neuen O-Geber hinzu
|
|
'Input: Offset_m3ph : Offset in m³/h
|
|
'KGeber_m : Geberkonstante in m
|
|
'OGeber_ns : O-Geber in ns
|
|
'Temperatur : Wassertemperatur in °C
|
|
'Output: Ergebnis in ns
|
|
'*******************************************************************************}
|
|
Public Function OffsetZumOGeber_ns(Offset_m3ph As Double, KGeber_m As Double, OGeber_ns, Temperatur As Double) As Double
|
|
Dim Laufzeit As Double
|
|
|
|
Laufzeit = US_Laufzeit(Temperatur)
|
|
OffsetZumOGeber_ns = (Offset_m3ph / ((Laufzeit * Laufzeit) * KGeber_m * 3600) * (-1)) * 1000000000 + OGeber_ns
|
|
|
|
End Function
|
|
|
|
|
|
' hinzugefügt am 6.1.2012 von R.Henning:
|
|
'{*******************************************************************************
|
|
'Author: Uwe Groß
|
|
'Datum: 22.03.2001
|
|
'Beschreibung: Berechnung Geberkonstanten und Offsets
|
|
'Input: EPS : Einzelprüfstandsnummer
|
|
'*******************************************************************************}
|
|
Public Sub Justage_Execute_FW2()
|
|
|
|
With gudtUSParameter
|
|
'//---normale Justage berechnen
|
|
'Geberkonstante_Neu1_m := Geberkonstante_m(EPS, Geberkonstante1_IST_m);
|
|
.Geberkonstante_Neu1_m = Geberkonstante_m(.Geberkonstante1_IST_m)
|
|
|
|
'Geberkonstante_Neu2_m := Geberkonstante_m(EPS, Geberkonstante2_IST_m);
|
|
.Geberkonstante_Neu2_m = Geberkonstante_m(.Geberkonstante2_IST_m)
|
|
|
|
' Offset1_Neu_m3ph := Offset_m3ph(EPS, Offset1_IST_m3ph);
|
|
.Offset_Neu1_m3ph = Offset_m3ph(.Offset1_IST_m3ph)
|
|
' Offset2_Neu_m3ph := Offset_m3ph(EPS, Offset2_IST_m3ph);
|
|
.Offset_Neu2_m3ph = Offset_m3ph(.Offset2_IST_m3ph)
|
|
|
|
' // ---- ab hier neue Justage ----------------------------------------
|
|
' // für das Logfile den neu berechneten O-Geber ohne Offset speichern
|
|
' OGeber_Roh_Neu_ns := OffsetGeber_Neu_ns;
|
|
''' .OGeber_Roh_Neu_ns = .OffsetGeber_ns
|
|
.OGeber_Roh_Neu_ns = .OffsetGeber_Neu_ns
|
|
|
|
' Korrektur RH 18.9.2013 mit F.Leidel:
|
|
.OffsetGeber_Neu_ns = 0
|
|
|
|
' Korrektur RH 18.9.2013 mit F.Leidel:
|
|
' ' // Offset zum O-Geber hinzu rechnen
|
|
' ' OffsetGeber_Neu_ns := OffsetZumOGeber_ns(Offset1_Neu_m3ph, Geberkonstante1_IST_m,OffsetGeber_Neu_ns, Temperatur1);
|
|
' ' .OffsetGeber_Neu_ns = OffsetZumOGeber_ns(.Offset_Neu1_m3ph, .Geberkonstante1_IST_m, .OffsetGeber_Neu_ns, .Temperatur1_°C)
|
|
|
|
' RH: wieso eigentlich nur Temperatur1?
|
|
|
|
'// Offset nullen
|
|
'Offset1_Neu_m3ph := 0;
|
|
.Offset_Neu1_m3ph = 0
|
|
|
|
'Offset2_Neu_m3ph := 0;
|
|
.Offset_Neu2_m3ph = 0
|
|
|
|
.OffsetGeber_ns = .OffsetGeber_Neu_ns
|
|
End With
|
|
End Sub
|
|
|
|
|
|
|
|
|
|
|
|
|
|
'{*******************************************************************************
|
|
'Author: Uwe Groß
|
|
'Datum: 15.08.2002
|
|
'Beschreibung: Berechnung Zeroflow
|
|
'Input: EPS : Einzelprüfstandsnummer
|
|
'*******************************************************************************}
|
|
Public Sub Justage_mit_Zeroflow_FW2()
|
|
Dim DT_1 As Double
|
|
Dim DT_2 As Double
|
|
Dim OGeber As Double
|
|
|
|
With gudtUSParameter
|
|
|
|
If (.DiffTof1_ns < 0.01) And (.DiffTof2_ns < 0.01) Then
|
|
' // DiffToff aus den alten Justageparametern für die Prüfpunkte bestimmen
|
|
'DT1 := Diff_Tof(IstFluss1_m3ph * 1000, Temperatur1, GeberKonstante2_Ist_m,Offset2_Ist_m3ph * 1000, GeberKonstante1_Ist_m, Offset1_Ist_m3ph * 1000,-OffsetGeber_ns, SteilheitGeber_nspC, Bereich_ns);
|
|
.DT1 = Diff_Tof(.Istfluss1_m3ph * 1000, .Temperatur1_°C, .Geberkonstante2_IST_m, .Offset2_IST_m3ph * 1000, .Geberkonstante1_IST_m, .Offset1_IST_m3ph * 1000, -.OffsetGeber_ns, .SteilheitGeber_nsp°C, .Bereich_ns)
|
|
'DT2 := Diff_Tof(IstFluss2_m3ph * 1000, Temperatur2, GeberKonstante2_Ist_m,Offset2_Ist_m3ph * 1000, GeberKonstante1_Ist_m, Offset1_Ist_m3ph * 1000,-OffsetGeber_ns, SteilheitGeber_nspC, Bereich_ns);
|
|
.DT2 = Diff_Tof(.Istfluss2_m3ph * 1000, .Temperatur2_°C, .Geberkonstante2_IST_m, .Offset2_IST_m3ph * 1000, .Geberkonstante1_IST_m, .Offset1_IST_m3ph * 1000, -.OffsetGeber_ns, .SteilheitGeber_nsp°C, .Bereich_ns)
|
|
'// neu !!! DiffTof um der Fehler verändern
|
|
'DT_1 := DT1 * (100 - Fehler1) / 100;
|
|
DT_1 = .DT1 * (100 - .Fehler1) / 100
|
|
'DT_2 := DT2 * (100 - Fehler2) / 100;
|
|
DT_2 = .DT2 * (100 - .Fehler2) / 100
|
|
|
|
'// für das Logfile die berenteten DiffTofs als negativen Wert speichern
|
|
'DiffTof1_ns := DT1 * (-1);
|
|
.DiffTof1_ns = .DT1 * (-1)
|
|
'DiffTof2_ns := DT2 * (-1);
|
|
.DiffTof2_ns = .DT2 * (-1)
|
|
Else
|
|
'// gemessene DiffTof übernehmen
|
|
.DT1 = .DiffTof1_ns
|
|
.DT2 = .DiffTof2_ns
|
|
End If
|
|
|
|
'// Berechnung des ZeroFlowOffset aus den beiden Justagepunkten für einer
|
|
'// Temperatur
|
|
|
|
'// OffsetGeber_Neu_ns := ZeroFlowOffset_ErmittelnAusEinerTemperatur(DT1, DT2, Sollfluss1_m3ph, Sollfluss2_m3ph, SteilheitGeber_nspC,(Temperatur1 + Temperatur2) / 2); Diese Funktion bitte entfernen! FL
|
|
'// .OffsetGeber_Neu_ns = ZeroFlowOffset_ErmitteltAusEinerTemperatur(.DT1, .DT2, .Sollfluss1_m3ph, .Sollfluss2_m3ph, .SteilheitGeber_nsp°C, (.Temperatur1_°C + .Temperatur2_°C) / 2)
|
|
|
|
' ' Geraden-Abgleich
|
|
' 'OGeber := ZeroFlowOffset_ErmittelnAusEinerTemperatur(DT_1, DT_2, Sollfluss1_m3ph, Sollfluss2_m3ph, SteilheitGeber_nspC,(Temperatur1 + Temperatur2) / 2);
|
|
' .OGeber = ZeroFlowOffset_ErmitteltAusEinerTemperatur(DT_1, DT_2, .Sollfluss1_m3ph, .Sollfluss2_m3ph, .SteilheitGeber_nsp°C, (.Temperatur1_°C + .Temperatur2_°C) / 2)
|
|
|
|
|
|
' Korrektur RH mit F.Leidel am 18.9.2013
|
|
' o_geber_roh in Nano sekunden
|
|
.OffsetGeber_Neu_ns = ZeroFlowOffset_ErmitteltAusEinerTemperatur(.DT1, .DT2, .Sollfluss1_m3ph, .Sollfluss2_m3ph, .SteilheitGeber_nsp°C, (.Temperatur1_°C + .Temperatur2_°C) / 2)
|
|
|
|
' Korrektur RH mit F.Leidel am 18.9.2013
|
|
''OffsetGeber_Neu_ns := DT1 - DT_1 + OffsetGeber_ns + OGeber '' Hier stand ein falscher Variabelname;
|
|
''.OffsetGeber_Neu_ns = .DT1 - DT_1 + .OffsetGeber_ns + .OGeber
|
|
|
|
'// Berechnung des Istdurchfluss1&2 bei Verwendung des neuen ZeroFlowOffset
|
|
'IstFluss1_m3ph := Q_US_Bereich_lph(DT1, -OffsetGeber_Neu_ns, Temperatur1, GeberKonstante1_Ist_m,GeberKonstante2_Ist_m, SteilheitGeber_nspC, Offset1_Ist_m3ph * 1000,Offset2_Ist_m3ph * 1000, Bereich_ns) / 1000;
|
|
.Istfluss1_m3ph = Q_US_Bereich_lph(.DT1, -.OffsetGeber_Neu_ns, .Temperatur1_°C, .Geberkonstante1_IST_m, .Geberkonstante2_IST_m, .SteilheitGeber_nsp°C, .Offset1_IST_m3ph * 1000, .Offset2_IST_m3ph * 1000, .Bereich_ns) / 1000
|
|
|
|
'IstFluss2_m3ph := Q_US_Bereich_lph(DT2, -OffsetGeber_Neu_ns, Temperatur2, GeberKonstante1_Ist_m,GeberKonstante2_Ist_m, SteilheitGeber_nspC, Offset1_Ist_m3ph * 1000,Offset2_Ist_m3ph * 1000, Bereich_ns) / 1000;
|
|
.Istfluss2_m3ph = Q_US_Bereich_lph(.DT2, -.OffsetGeber_Neu_ns, .Temperatur2_°C, .Geberkonstante1_IST_m, .Geberkonstante2_IST_m, .SteilheitGeber_nsp°C, .Offset1_IST_m3ph * 1000, .Offset2_IST_m3ph * 1000, .Bereich_ns) / 1000
|
|
End With
|
|
End Sub
|
|
|
|
|
|
|
|
|
|
|
|
'========================================================================================================================
|
|
'Justage in 2 Schritten(F.L. 16.10.13)
|
|
'Der Ablauf der Justage in 2 Schritten:
|
|
'Zuerst den Prüfpunkt Qp justieren durch neuen K_Geber1+2 mit Offset_Geber_ist(O_Gerber_roh aus dem Gerät))
|
|
'Im zweiten Schritt den Prüfpunkt Qi justieren durch Offset_Geber_neu(O_Gerber_roh neu)
|
|
'Ziel ist die Berechnung vom Offset_Geber ohne Beeinflussung der Korrektur des K_Gebers
|
|
' neuer Name!
|
|
Public Sub Justage1_Execute_FW2(SollwertQi As Double)
|
|
'1. Schritt
|
|
'Beschreibung: Berechnung Geberkonstanten nur aus Prüfpunkt Qp der Justage
|
|
'Input=Sollfluss2; Istfluss2; Sollfluss1(feste Vorgabe), Istfluss1(feste Vorgabe)
|
|
'Vorgabe Sollfluss1 und Istfluss1: qp25=0,25m³/h;qp40=0,4m³/h;qp60=0,6m€/h
|
|
'An dieser Stelle die Vorgabewerte an die Variablen Sollfluss1 und Istfluss1 übergeben
|
|
'Variable Sollwertqi soll den Prüfwert für Qisoll bekommen
|
|
|
|
With gudtUSParameter
|
|
.Sollfluss1_m3ph = SollwertQi
|
|
.Istfluss1_m3ph = SollwertQi
|
|
|
|
'Berechnung Geberkonstante neu aus Qp Prüfung und feste Vorgabewerte für Sollfluss1 und Istfluss1
|
|
|
|
'Geberkonstante_Neu1_m := Geberkonstante_m(EPS, Geberkonstante1_IST_m);
|
|
.Geberkonstante_Neu1_m = Geberkonstante_m(.Geberkonstante1_IST_m)
|
|
|
|
'Geberkonstante_Neu2_m := Geberkonstante_m(EPS, Geberkonstante2_IST_m);
|
|
.Geberkonstante_Neu2_m = Geberkonstante_m(.Geberkonstante2_IST_m)
|
|
|
|
End With
|
|
End Sub
|
|
|
|
|
|
|
|
'''''2.Schritt
|
|
'''''Beschreibung: Berechnung der restlichen Geberkonstanten außer K_Geber1+2 nach Prüfpunkt Qi bei der Justage)
|
|
'''''{*******************************************************************************
|
|
'''''Author: Uwe Groß
|
|
'''''Datum: 22.03.2001
|
|
'''''Beschreibung: Berechnung Geberkonstanten und Offsets
|
|
'''''Input: EPS : Einzelprüfstandsnummer
|
|
'''''*******************************************************************************}
|
|
''''' neuer Name!
|
|
''''Public Sub Justage2_Execute_FW2()
|
|
'''' With gudtUSParameter
|
|
'''' '//---normale Justage berechnen
|
|
''''
|
|
''''' Offset1_Neu_m3ph := Offset_m3ph(EPS, Offset1_IST_m3ph);
|
|
'''' .Offset_Neu1_m3ph = Offset_m3ph(.Offset1_IST_m3ph)
|
|
''''' Offset2_Neu_m3ph := Offset_m3ph(EPS, Offset2_IST_m3ph);
|
|
'''' .Offset_Neu2_m3ph = Offset_m3ph(.Offset2_IST_m3ph)
|
|
''''
|
|
'''' ' // ---- ab hier neue Justage ----------------------------------------
|
|
'''' ' // für das Logfile den neu berechneten O-Geber ohne Offset speichern
|
|
''''
|
|
'''' .OGeber_Roh_Neu_ns = .OffsetGeber_Neu_ns
|
|
''''
|
|
'''' ' Korrektur RH 18.9.2013 mit F.Leidel:
|
|
'''' .OffsetGeber_Neu_ns = 0
|
|
''''
|
|
'''' '// Offset nullen
|
|
'''' 'Offset1_Neu_m3ph := 0;
|
|
'''' .Offset_Neu1_m3ph = 0
|
|
''''
|
|
'''' 'Offset2_Neu_m3ph := 0;
|
|
'''' .Offset_Neu2_m3ph = 0
|
|
''''
|
|
'''' .OffsetGeber_ns = .OffsetGeber_Neu_ns
|
|
'''' End With
|
|
''''End Sub
|
|
|
|
|
|
'{*******************************************************************************
|
|
'Author: Uwe Groß
|
|
'Datum: 15.08.2002
|
|
'Beschreibung: Berechnung Zeroflow
|
|
'Input: EPS : Einzelprüfstandsnummer
|
|
'*******************************************************************************}
|
|
' neuer Name!
|
|
Public Sub Justage3_mit_Zeroflow_FW2()
|
|
Dim DT_1 As Double
|
|
Dim DT_2 As Double
|
|
Dim OGeber As Double
|
|
|
|
|
|
With gudtUSParameter
|
|
|
|
|
|
.Fehler1 = 100 * (.Istfluss1_m3ph - .Sollfluss1_m3ph) / .Sollfluss1_m3ph
|
|
|
|
|
|
|
|
''' .Istfluss1_m3ph = Q_US_Bereich_lph(.DT1, -.OffsetGeber_Neu_ns, .Temperatur1_°C, .Geberkonstante1_IST_m, .Geberkonstante2_IST_m, .SteilheitGeber_nsp°C, .Offset1_IST_m3ph * 1000, .Offset2_IST_m3ph * 1000, .Bereich_ns) / 1000
|
|
|
|
|
|
' If (.DiffTof1_ns < 0.01) And (.DiffTof2_ns < 0.01) Then
|
|
' // DiffToff aus den alten Justageparametern für die Prüfpunkte bestimmen
|
|
|
|
'.Istfluss2_m3ph = Q_US_Bereich_lph(.DT2, -.OffsetGeber_ns, .Temperatur2_°C, .Geberkonstante1_IST_m, .Geberkonstante2_IST_m, .SteilheitGeber_nsp°C, .Offset1_IST_m3ph * 1000, .Offset2_IST_m3ph * 1000, .Bereich_ns) / 1000
|
|
|
|
'DT1 := Diff_Tof(IstFluss1_m3ph * 1000, Temperatur1, GeberKonstante2_Ist_m,Offset2_Ist_m3ph * 1000, GeberKonstante1_Ist_m, Offset1_Ist_m3ph * 1000,-OffsetGeber_ns, SteilheitGeber_nspC, Bereich_ns);
|
|
.DT1 = Diff_Tof(.Istfluss1_m3ph * 1000, .Temperatur1_°C, .Geberkonstante2_IST_m, .Offset2_IST_m3ph * 1000, .Geberkonstante1_IST_m, .Offset1_IST_m3ph * 1000, -.OffsetGeber_ns, .SteilheitGeber_nsp°C, .Bereich_ns)
|
|
'DT2 := Diff_Tof(IstFluss2_m3ph * 1000, Temperatur2, GeberKonstante2_Ist_m,Offset2_Ist_m3ph * 1000, GeberKonstante1_Ist_m, Offset1_Ist_m3ph * 1000,-OffsetGeber_ns, SteilheitGeber_nspC, Bereich_ns);
|
|
.DT2 = Diff_Tof(.Istfluss2_m3ph * 1000, .Temperatur2_°C, .Geberkonstante2_IST_m, .Offset2_IST_m3ph * 1000, .Geberkonstante1_IST_m, .Offset1_IST_m3ph * 1000, -.OffsetGeber_ns, .SteilheitGeber_nsp°C, .Bereich_ns)
|
|
|
|
|
|
|
|
' Korrektur RH mit F.Leidel am 18.9.2013
|
|
' o_geber_roh in Nano sekunden
|
|
'.OffsetGeber_Neu_ns = ZeroFlowOffset_ErmitteltAusEinerTemperatur(.DT1, .DT2, .Sollfluss1_m3ph, .Sollfluss2_m3ph, .SteilheitGeber_nsp°C, (.Temperatur1_°C + .Temperatur2_°C) / 2)
|
|
.OGeber_Roh_Neu_ns = ZeroFlowOffset_ErmitteltAusEinerTemperatur(.DT1, .DT2, .Sollfluss1_m3ph, .Sollfluss2_m3ph, .SteilheitGeber_nsp°C, (.Temperatur1_°C + .Temperatur2_°C) / 2)
|
|
|
|
'// Berechnung des Istdurchfluss1&2 bei Verwendung des neuen ZeroFlowOffset
|
|
'IstFluss1_m3ph := Q_US_Bereich_lph(DT1, -OffsetGeber_Neu_ns, Temperatur1, GeberKonstante1_Ist_m,GeberKonstante2_Ist_m, SteilheitGeber_nspC, Offset1_Ist_m3ph * 1000,Offset2_Ist_m3ph * 1000, Bereich_ns) / 1000;
|
|
|
|
'Berechnung des Istfluss2 entfällt weil schon im Schritt1 ermittelt, kleine Abweichung weil ohne Offsetgeber neu ist egal
|
|
'IstFluss2_m3ph := Q_US_Bereich_lph(DT2, -OffsetGeber_Neu_ns, Temperatur2, GeberKonstante1_Ist_m,GeberKonstante2_Ist_m, SteilheitGeber_nspC, Offset1_Ist_m3ph * 1000,Offset2_Ist_m3ph * 1000, Bereich_ns) / 1000;
|
|
'entfällt .Istfluss2_m3ph = Q_US_Bereich_lph(.DT2, -.OffsetGeber_Neu_ns, .Temperatur2_°C, .Geberkonstante1_IST_m, .Geberkonstante2_IST_m, .SteilheitGeber_nsp°C, .Offset1_IST_m3ph * 1000, .Offset2_IST_m3ph * 1000, .Bereich_ns) / 1000
|
|
End With
|
|
End Sub
|
|
|
|
|
|
|
|
Public Sub Justage_o_geber_roh()
|
|
' Extrahiert am 6.11.2013 aus dem Excel Blatt "Kopie von Test 40 Justage in 2 Schritten Qp25 33365171 05 11 13.xls"
|
|
|
|
Dim Q_Offset_1 As Double
|
|
Dim Q_Offset_2 As Double
|
|
Dim Q_in_Difftof_1 As Double
|
|
Dim Q_in_Difftof_2 As Double
|
|
Dim Difftof_1_roh_in_s As Double
|
|
Dim Difftof_2_roh_in_s As Double
|
|
Dim Difftof1 As Double
|
|
Dim Difftof2 As Double
|
|
Dim temp As Double
|
|
Dim Temp1 As Double
|
|
Dim Temp2 As Double
|
|
|
|
Dim fp_k_geber_roh As Double
|
|
Dim fp_st_geber_roh As Double
|
|
Dim OffsetGeber_ns As Double
|
|
|
|
fp_st_geber_roh = 0
|
|
fp_k_geber_roh = 1
|
|
OffsetGeber_ns = 0
|
|
|
|
With gudtUSParameter
|
|
'J41 = I41-E9
|
|
Q_Offset_1 = .Istfluss1_m3ph - .Offset1_IST_m3ph
|
|
|
|
'J37 = I37-E9
|
|
Q_Offset_2 = .Istfluss2_m3ph - .Offset2_IST_m3ph
|
|
|
|
'K41 = J41/((Q12*Q12)*H25*3600)
|
|
Q_in_Difftof_1 = Q_Offset_1 / ((US_Laufzeit(.Temperatur1_°C) ^ 2) * .Geberkonstante1_IST_m * 3600)
|
|
|
|
'K37 = J37 /((Q12*Q12)*E8*3600)
|
|
Q_in_Difftof_2 = Q_Offset_2 / ((US_Laufzeit(.Temperatur2_°C) ^ 2) * .Geberkonstante2_IST_m * 3600)
|
|
|
|
' L41 = K41 + E10 - (J2 * E12)
|
|
' Difftof_1_roh_in_s = Q_in_Difftof_1 + O_Geber - (Temp1 * fp_st_Geber)
|
|
Difftof_1_roh_in_s = Q_in_Difftof_1 + OffsetGeber_ns - (.Temperatur1_°C * (.SteilheitGeber_nsp°C / 10 ^ 9))
|
|
|
|
'L37 = K37 + E10 + (G2 * E12)
|
|
'Difftof_2_roh_in_s = Q_in_Difftof_2 + O_Geber + (Temp2 * fp_st_Geber)
|
|
Difftof_2_roh_in_s = Q_in_Difftof_2 + OffsetGeber_ns - (.Temperatur2_°C * (.SteilheitGeber_nsp°C / 10 ^ 9))
|
|
|
|
'Difftof1 = G45 = M41 = (L41 + E11 - (J2 * L11)) * L12
|
|
'Difftof1 = (Difftof_1_roh_in_s + O_Geber_roh - (Temp1 * fp_st_geber_roh)) * fp_k_geber_roh
|
|
Difftof1 = (Difftof_1_roh_in_s + (.OffsetGeber_ns / 10 ^ 9) - (.Temperatur1_°C * fp_st_geber_roh)) * fp_k_geber_roh
|
|
|
|
'H45 = I56 = M37 = (L37 + E11 - (G2 * L11)) * L12
|
|
'Difftof2 = (Difftof_2_roh_in_s + O_Geber_roh - (Temp2 * fp_st_geber_roh)) * fp_k_geber_roh
|
|
Difftof2 = (Difftof_2_roh_in_s + (.OffsetGeber_ns / 10 ^ 9) - (.Temperatur2_°C * fp_st_geber_roh)) * fp_k_geber_roh
|
|
|
|
' gemittelte Temperatur
|
|
temp = (.Temperatur1_°C + .Temperatur2_°C) / 2
|
|
|
|
'I45 = (F45 * G45 - E45 * H45) / (F45 - E45) + C45 * E12
|
|
'fp_o_Geber_roh_neu = (Sollfluss2 * Difftof1 - Sollfluss1 * Difftof2) / (Sollfluss2 - Sollfluss1) + Temp * fp_st_Geber
|
|
Dim OGeber_Roh_Neu_sec As Double
|
|
OGeber_Roh_Neu_sec = (.Sollfluss2_m3ph * Difftof1 - .Sollfluss1_m3ph * Difftof2) / (.Sollfluss2_m3ph - .Sollfluss1_m3ph) + temp * (.SteilheitGeber_nsp°C / 10 ^ 9)
|
|
.OGeber_Roh_Neu_ns = OGeber_Roh_Neu_sec * 10 ^ 9
|
|
End With
|
|
End Sub
|
|
|