laatzen/Pruef2000/source/TEST_PFEIFFER_frmUSHauptprf.frm
2021-10-01 11:11:04 +02:00

5388 lines
216 KiB
Plaintext

Option Explicit
' von aufrufender Form zu setzende Member
' ---------------------------------------
' Für Regulierung und Prüfzaehler Prüfung
Public m_colUniquePP As CPruefpunktCol
Public m_colUniqueVorPP As CVorpruefpunktCol
Public m_bKontinuierlich As Boolean
Public m_colEinbauplatz As Collection
Public m_ParentForm As Form
' Für Regulierung
Public m_Regulierdaten As CRegulierdaten
Public m_RegulierPruefpunkt As CPruefpunkt
Public m_bAutomatik As Boolean
' Public m_bKeineRegulierung As Boolean
Public m_AnzahlPZ As Integer
' Für Prüfzaehlerprüfung
Public m_ImpulswertigkeitPZ As Long
Public m_bDauerpruefung As Boolean
Public m_DauerpruefungAnzahl As Integer
Public m_PruefungsArtWaage As Boolean
Public m_VorPruefungsArtWaage As Boolean
Public m_bPruefgangLang As Boolean
Public m_Regelart As String ' FU, Servo
Public m_NurMesseinsaetze As Boolean
Public m_Pruefgang As CPruefgang
Public m_RegulierungVerwenden As Boolean
Public mbln_Vorpruefung As Boolean
Public mbln_Hauptpruefung As Boolean
Public mbln_Bereichsjustage As Boolean
Public mbln_nachjustage As Boolean
Public mbln_Funktionspruefung As Boolean
Public mbln_ZeroFlowMessung As Boolean
Public mbln_HeissKaltSpreizungBerechnen As Boolean
' Private Member
' --------------
Private m_PPDauerpruefung As Double
Private Dummy As Variant
Private mblnAbbruch As Boolean
Private m_nRet As Integer
Private m_SPS As CSPS
Private m_FMBus As CFMBus
Private m_ColPumpen As Collection
Private m_Pruefpunkt As CPruefpunkt
Private m_vorPruefpunkt As CVorpruefpunkt
Private FormActivated As Boolean
Private m_ZaehlerPP As Integer
Private m_DurchflussSoll As Double
Private m_DurchflussSollManuell As Double
Private m_Pumpe As CPumpe
Private m_Referenzzaehler As CRefzaehler
Private m_ReferenzzaehlerA As CRefzaehler
Private m_ReferenzzaehlerB As CRefzaehler
Private m_PruefpunktFertig As Boolean
Private m_DauerStop As Boolean
Private m_laeuft As Boolean 'Status Prüfung läuft
Private m_QBehalten As Boolean
Private m_Startzeit As Long
Private m_Pruefzeit As Integer
Private m_DauerpruefungZaehler As Integer
Private m_GesZeitZaehler As Long
Private PP_Ist_Zeit As Long
Private AuftragPositionSerienNr As CAuftragPositionSerienNr
Private m_VolumenSoll As Double
Private FehlerInPruefgangLang(3, 10) As Double
Private ZaehlerPruefgangLang As Integer
Private PruefgangLangPruefpunktWiederholen As Boolean
Private m_ersterPruefzaehler As CPruefzaehler
Private m_ersterPruefzaehlerNr As Integer
Private m_ArrayBehaelter(2) As CBehaelter
Private m_Behaelter As CBehaelter
Private m_BehaelterNr As Integer
Private m_Waage As CWaage
Private m_DruckMsg As String
Private m_Tstart As Long 'Bezugszeitpunkt: Start der Prüfung
Private m_Tpruef As Long ' Sollprüfzeit aller US Zähler
Private m_Zeitrahmenzaehler As Long 'Index des aktuellen Zeitrahmens
Private ResultFilePath As String
Private m_AnwahlLetzterBehaelter As Long
Private mudtMessDaten(10) As TYPE_MessDaten
Private strFunktionsPruefungMsg As String
Private Type TypUSPruefdaten
' Enthält alle Daten, die für eine Ultraschallzähler-Prüfung relevant sind
' für einen bestimmten Zähler in einem bestimmten Prüfpunkt
' Solldurchfluß Q des Prüfpunktes
SollDurchfluss As Double ' in M^3/h
' Sollprüfzeit des Prüfpunktes in s
SollPruefzeit_s As Long
' Temperatur zur halben Prüfzeit
dblTemperatur As Double
' Ermitteltes Volumen aus den RZ/FM85 und US Zählern
VolumenRZ As Double
VolumenUS As Double
VolumenWaage As Double
' echte Prüfzeit zwischen USZaehler Start und Stop in ms
US_IstPruefzeit_ms As Long
' echte Prüfzeit zwischen Referenzzaehler Start und Stop in ms
RZ_IstPruefzeit_ms As Long '
NOWA_START_Rueckkehrzeitpunkt As Long
NOWA_STOP_Rueckkehrzeitpunkt As Long
RZ_START_Rueckkehrzeitpunkt As Long
RZ_STOP_Rueckkehrzeitpunkt As Long
StartzeitpunktRZ As Long
StartzeitpunktUS As Long
Stopzeitpunkt As Long
Fehlerinfo As String
Fehler As Double
' zukünftig:
dtmIstPruefzeit As Double
dtmStartZeit As Double
dtmMittelzeit As Double
dtmStoppzeit As Double
blnPruefungsfehler As Boolean
JustageParameter As JustageParameter_Type
End Type
' neu RH! 19.7.2002
Private Type US_ZusatzParameter_Typ
FP_Impulswertigkeit As Double '---Impulswertigkeit normale Ausgabe
FP_Impulswertigkeit_Pruef As Double '---Impulswertigkeit normale Ausgabe
PulseMode As Byte '---PulseMode (PolluFlow=1,PolluStat=2)
FP_Flow_Min As Double '---Minimaler Durchfluß
FP_Flow_Max As Double
End Type
Const dtmZEITRAHMENDAUER As Date = 1 / 24 / 60 / 60 / 1000 * 1000 'ms
Const ZEITRAHMENDAUER As Long = 2000 ' Dauer des Zeitrahmens in msec
Const DELTA_START As Long = 1000 'Zeitlicher Versatz in msec zwischen dem Start des Referenzzählers und des US Zählers
Const DELTA_FM As Long = 0 'Korrekturkonstante: Zeit in msec, um die die tatsächliche Prüfzeit des FM85 größer ist als die Sollprüfzeit, verursacht durch die längere Stopzeit
Const DELTA_US As Long = 0 'Korrekturkonstante: Zeit in msec, um die die tatsächliche Prüfzeit des US-Zählers größer ist als die Sollprüfzeit, verursacht durch die längere Stopzeit
Const FEHLER_ZUSPAET As Long = -15
Const KEIN_FEHLER As Long = 0
Const KEINE_ANTWORT_FEHLER As Long = -16
'--------------------------------------------------------------------
' @return Code, mit dem endDialog aufgerufen wurde
'
Public Function getExitCode() As Integer
getExitCode = m_nRet
End Function
' Dialog beenden
'
' @param nRet Returncode des Dialogs
'
Private Sub endDialog(nRet As Integer)
m_nRet = nRet
Unload Me
End Sub
Private Sub cmdAbbruch_Click()
g_Abbruch = True
End Sub
Private Sub cmdCancel_Click()
If m_laeuft Then
ErrorMsg ("Sie müssen die Prüfung zuerst stoppen")
Else
endDialog (IDCANCEL)
End If
End Sub
Private Sub cmdDauerEnde_Click()
PrintStatus "Dauerprüfung wird nach diesem Prüfgang beendet"
cmdDauerEnde.Caption = "Dauer-P endet !"
cmdDauerEnde.Enabled = False
m_DauerStop = True
End Sub
'Private Sub cmdOK_Click()
' If m_laeuft Then
' ErrorMsg ("Sie müssen die Prüfung zuerst stoppen")
' Else
' endDialog (IDOK)
' End If
'End Sub
Private Sub cmdQSollMinus_Click()
m_DurchflussSollManuell = CDbl(Format(m_DurchflussSollManuell * 0.99, "0.000"))
m_SPS.SetQSoll m_DurchflussSollManuell
PrintStatus "Nächster Durchfluss: " & m_DurchflussSollManuell
lblQSoll.Caption = m_DurchflussSollManuell
End Sub
Private Sub cmdQSollPlus_Click()
m_DurchflussSollManuell = CDbl(Format(m_DurchflussSollManuell * 1.01, "0.000"))
m_SPS.SetQSoll m_DurchflussSollManuell
PrintStatus "Nächster Durchfluss: " & m_DurchflussSollManuell
lblQSoll.Caption = m_DurchflussSollManuell
End Sub
Private Sub cmdSPSInfo_Click()
Call g_App.getSPS().ActivateProTool
End Sub
Private Sub Abbruch(Optional strGrund As String = "")
Dim dlg As frmAbbruch
Set dlg = New frmAbbruch
' Abbruch-Button deaktivieren
cmdStop.Enabled = False
' Flags setzen
g_Abbruch = True
m_laeuft = False
' SPS zurücksetzen
m_SPS.setBetrieb 0
m_SPS.AbwahlPumpe 1
m_SPS.AbwahlPumpe 2
m_SPS.AbwahlPumpe 3
m_SPS.AbwahlPumpe 5
m_SPS.SetNurMesseinsaetze False
m_SPS.WassserAblassen 0
Call ResetPruefung
lblQIst.Caption = ""
dlg.m_strGrund = strGrund
dlg.Show vbModal
m_Pruefgang.Bemerkung = dlg.m_strGrund
m_Pruefgang.save
endDialog IDCANCEL
End Sub
Private Sub cmdStop_Click()
g_Abbruch = True
Call Abbruch("")
End Sub
Private Sub ResetPruefung()
cmdDauerEnde.Caption = "Dauer-P beenden"
cmdQSollPlus.Enabled = False
cmdQSollMinus.Enabled = False
m_laeuft = False
End Sub
Private Sub Form_Load()
Dim PPNr As Integer
Me.Width = Screen.Width
Me.Height = Screen.Height
Call centerFormInScreen(Me)
Set m_SPS = g_App.getSPS
Set m_FMBus = g_App.getFMBus
Set m_ColPumpen = g_App.Settings.getPumpen
m_ZaehlerPP = 0
'cmdOK.Enabled = False
cmdCancel.Enabled = True
Set m_ArrayBehaelter(1) = New CBehaelter
Set m_ArrayBehaelter(2) = New CBehaelter
If m_VorPruefungsArtWaage = True Or m_PruefungsArtWaage = True Then
Set m_Waage = g_App.getWaage
End If
m_ArrayBehaelter(1).LoadFromIni (1)
m_ArrayBehaelter(2).LoadFromIni (2)
m_SPS.SetQSoll 0
m_SPS.setBetrieb 8 ' Bits zurücksetzen
sleep 100, True
m_SPS.setBetrieb 0 ' kein Start, kein Stop, kein Programmende
MSFlexGrid1.Clear
MSFlexGrid1.Cols = 1 + m_colUniqueVorPP.Count
If MSFlexGrid1.Cols < 2 Then MSFlexGrid1.Cols = 2
MSFlexGrid1.Row = 0
MSFlexGrid1.Col = 0
MSFlexGrid1.Text = "SNr.\ Q "
' Listbox mit allen Durchflüssen füllen
lstPruefpunkte.Clear
PPNr = 0
For Each m_vorPruefpunkt In m_colUniqueVorPP.getCollection
PPNr = PPNr + 1
MSFlexGrid1.Row = 0
MSFlexGrid1.Col = PPNr
MSFlexGrid1.Text = m_vorPruefpunkt.getQ
lstPruefpunkte.AddItem (CStr(m_vorPruefpunkt.getQ))
Next m_vorPruefpunkt
If m_bKontinuierlich Then
frameKontinuierlich.Visible = True
Else
frameKontinuierlich.Visible = False
End If
m_AnwahlLetzterBehaelter = 0
End Sub
Private Sub Form_Activate()
g_Abbruch = False
If Not FormActivated Then
FormActivated = True
DoEvents
Call Hauptpruefung
End If
FormActivated = True
End Sub
Private Sub DurchflussLstAktualisieren()
Dim i As Integer
' Balkenanzeige in der Liste der Durchflüsse aktualisieren
For i = 0 To lstPruefpunkte.ListCount - 1
If Format(lstPruefpunkte.List(i), "0.000") = Format(m_DurchflussSoll, "0.000") Then
lstPruefpunkte.Selected(i) = True
Else
lstPruefpunkte.Selected(i) = False
End If
Next
End Sub
' Hauptprüfung mit Referenzzaehler
Private Sub Hauptpruefung()
Dim Dummy As Variant
Dim Einbauplatz As CEinbauplatz
Dim Pruefzaehler As CPruefzaehler
Dim bFehlerermittelt As Boolean
Dim Impulse As Long
Dim blnPruefungFertig As Boolean
Dim PeriodendauerPZ As Long
Dim PeriodendauerRZ As Long
Dim PeriodendauerRefZ1 As Long
Dim PeriodendauerRefZ2 As Long
Dim k As Double
Dim Fehler As Double
Dim FehlerRefZ As Double
Dim FehlerRefZA As Double
Dim FehlerRefZB As Double
Dim QIst As Double
Dim PPNr As Integer
Dim tmpPPNr As Integer
Dim PPZeit As Date
Dim StartZeit As Date
Dim PPSollZeit As Long
Dim Temperatur As Double
Dim PZCount As Integer
Dim bImpulsTest As Boolean
Dim bPPQIstSaved As Boolean
Dim i As Integer
Dim lngRet As Long
Dim lngStartzeit As Long
Dim EinbauplatzNr As Integer
Dim Gewicht As Double
Dim BehaelterVolumen As Double
Dim Waagengrenzwert As Double
Dim GesZeit As Double
Dim tmpPruefpunkt As CPruefpunkt
Dim tmpVorpruefpunkt As CVorpruefpunkt
Dim dblVolumenRZ As Double
Dim dblVolumenUS As Double
Dim dblDurchflussRZ As Double
Dim dblDurchflussUS As Double
Dim US_COMport As Integer
Dim udtPruefdaten_imPP_mitEBP(10) As TypUSPruefdaten
' SPS Parameter zurücksetzen
' Durchlauf
'm_SPS.setBehaelter 1
g_Abbruch = False
m_SPS.setBetrieb 8
sleep 300
m_SPS.setBetrieb 0
lblPruefgangNr.Caption = m_Pruefgang.PruefgangNr
' Einstellung für Vergleichsprüfung-Modus in der SPS testen
TestReferenzPrf:
If Not g_testModus Then
If m_SPS.IstRefZPrf Then
Dummy = MsgBox("Bitte SPS auf Hauptzähler Vergleichs-Prüfung stellen", vbOKCancel)
If Dummy = vbCancel Then
endDialog (IDCANCEL)
Exit Sub
End If
GoTo TestReferenzPrf
End If
End If
TestAutomatik:
If Not m_SPS.IstAutomatik Then
Dummy = MsgBox("Bitte SPS auf Automatik stellen", vbOKCancel)
If Dummy = vbCancel Then
endDialog (IDCANCEL)
Exit Sub
End If
GoTo TestAutomatik
End If
For i = 1 To 2
Set m_Behaelter = New CBehaelter
m_Behaelter.LoadFromIni (i)
Next
If m_PruefungsArtWaage Then
Call WaageZuruecksetzen
End If
m_SPS.setBehaelter 2
PrintStatus "Beide Behälter leeren bis Prüfmenge nicht mehr erreicht..."
If Not g_testModus Then
m_SPS.WassserAblassen 0
' beide Behälter leeren bis Prüfmenge nicht mehr erreicht
sleep 500
m_SPS.WassserAblassen 3
sleep 2000
If m_SPS.GrenzwertWaageErreicht Then
sleep 5000
Do While m_SPS.GrenzwertWaageErreicht
sleep 1000, True
If g_Abbruch = True Then
Exit Sub
End If
Loop
End If
m_SPS.WassserAblassen 0
End If ' Testmodus
m_SPS.setBehaelter 1
' Formular und Flags zurücksetzen
cmdStop.Enabled = True
m_laeuft = True
' Pruefgang Daten setzen mit Eigenschaften des ersten Zählers
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If Not Pruefzaehler Is Nothing Then
Set m_ersterPruefzaehler = Pruefzaehler
m_ersterPruefzaehlerNr = Einbauplatz.getNr
m_Pruefgang.Typ = Pruefzaehler.getIdentNrObj.getTyp
m_Pruefgang.Nennweite = Pruefzaehler.getIdentNrObj.getNennweite
m_Pruefgang.Nenntemperatur = Pruefzaehler.getIdentNrObj.getTemperatur
PrintStatus "Neue Hauptpruefung"
PrintStatus "------------------"
PrintStatus "Pruefgang Daten:"
PrintStatus "Typ: " & m_Pruefgang.Typ
PrintStatus "Nennweite: " & m_Pruefgang.Nennweite
PrintStatus "Nenntemperatur: " & m_Pruefgang.Nenntemperatur
PrintStatus "Waage statt Referenzzaehler: " & CStr(m_PruefungsArtWaage)
Exit For
End If
Next Einbauplatz
'If Not SindPruefzeitenOK() Then
' Call Abbruch("falsche Prüfzeiten für Behälter")
' Exit Sub
'End If
' Flag für PruefgangLang im Pruefgang-Objekt für Tabelle Pruefgang setzen:
m_Pruefgang.PruefgangLang = m_bPruefgangLang
PrintStatus "Pruefgang Lang: " & CStr(m_bPruefgangLang)
' Pruefpunkte absteigend sortieren nach Durchfluessen
m_colUniquePP.sortQ
If Not g_testModus Then
' Einstellung für Automatik-Modus in der SPS testen
m_SPS.setBetrieb 8 ' Bits zurücksetzen
sleep 300
m_SPS.setBetrieb 0 ' kein Start, kein Stop, kein Programmende
PrintStatus "Teste auf Prüfbereitschaft"
sleep 3000, True
If Not m_SPS.IstStreckePruefbereit Then
' Betrieb Vorbereiten
If MsgBox("Soll die Strecke automatsich gefüllt werden?", vbYesNo Or vbDefaultButton2, "Strecke ist nicht prüfbereit") = vbYes Then
m_SPS.setBetrieb 1
PrintStatus "Betrieb vorbereiten: Spannen und Füllen..."
End If
Do While Not m_SPS.IstStreckeGefuellt
sleep 1000, True
If g_Abbruch = True Then
Exit Sub
End If
Loop
' nach dem Füllen: Betrieb auf 0
sleep 500
m_SPS.setBetrieb 0
'------------------------------------------------------------------------
PrintStatus "Warte auf Pruefbereitschaft der SPS..."
Do While Not m_SPS.IstStreckePruefbereit
sleep 1000, True
If g_Abbruch = True Then
Exit Sub
End If
Loop
End If
End If
PrintStatus "Strecke ist Prüfbereit !"
'---------------------------------------------------------------
' vorraussichtliche Pruefzeit ausrechnen
tmpPPNr = 0
GesZeit = 0
For Each tmpPruefpunkt In m_colUniquePP.getCollection
tmpPPNr = tmpPPNr + 1
If m_bPruefgangLang And tmpPPNr = m_colUniquePP.Count Then
GesZeit = GesZeit + tmpPruefpunkt.GetTime * 3
Else
GesZeit = GesZeit + tmpPruefpunkt.GetTime
End If
Next
GesZeit = GesZeit * m_DauerpruefungAnzahl / 60
m_GesZeitZaehler = 0
lblGesZeit.Caption = Format(m_GesZeitZaehler, "#0.0") & "/" & Format(GesZeit, "#0.0")
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Vorprüfung / Justage
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
If mbln_Vorpruefung Then
lblTitle.Caption = "Ultraschall-Zähler Vorprüfung (Justage)"
If Vorpruefung() < 0 Then
g_Abbruch = True
End If
Call sleep(2000, True)
End If
If g_Abbruch Then
Call Abbruch("Es ist ein Fehler in der Vorprüfung aufgetreten.")
Exit Sub
End If
If m_bKontinuierlich Then
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Kontinuierliche
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Call KontinuierrlichePruefungInit
Exit Sub
End If
If Not mbln_Hauptpruefung Then
GoTo EndeDerHauppruefung
Else
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Hauptprüfung
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
lblTitle.Caption = "Ultraschall-Zähler Hauptprüfung"
End If
If g_Abbruch Then Exit Sub
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Schleifenbeginn Hauptprüfung / Dauerprüfung
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
StartZeit = Now()
m_DauerStop = False
If m_DauerpruefungAnzahl > 1 Then
cmdDauerEnde.Enabled = True
End If
For m_DauerpruefungZaehler = 1 To m_DauerpruefungAnzahl
m_DruckMsg = ""
' Pruefgang wird komplett, aber ohne Regulierung wiederholt
PrintStatus "Dauerprf.: " & m_DauerpruefungZaehler & " / " & m_DauerpruefungAnzahl
lblDauer.Caption = m_DauerpruefungZaehler & " / " & m_DauerpruefungAnzahl
PPNr = 0 ' Zaehler für Pruefpunkte , 1 = Qmax,
If m_DauerpruefungZaehler > 1 Then
' Neuer Pruefgang-Eintrag in der Datenbank
m_Pruefgang.save
Set m_Pruefgang = Nothing
Set m_Pruefgang = New CPruefgang
m_Pruefgang.Typ = m_ersterPruefzaehler.getIdentNrObj.getTyp
m_Pruefgang.Nennweite = m_ersterPruefzaehler.getIdentNrObj.getNennweite
m_Pruefgang.Nenntemperatur = m_ersterPruefzaehler.getIdentNrObj.getTemperatur
PrintStatus "neuer Prüfgang gestarted"
lblPruefgangNr.Caption = m_Pruefgang.PruefgangNr
End If
' Pruefgang abspeichern und neue Prüfgangnummer erzeugen
m_Pruefgang.save
lblPruefgangNr.Caption = m_Pruefgang.PruefgangNr
' Listbox mit allen Durchflüssen füllen
lstPruefpunkte.Clear
For Each tmpPruefpunkt In m_colUniquePP.getCollection
lstPruefpunkte.AddItem Format(tmpPruefpunkt.getQ, "0.000")
Next
' Anzahl der Pruefzähler zählen, wird in Pruefgang Tabelle eingetragen
' FlexGrid dimensionieren
MSFlexGrid1.Clear
PZCount = 0
MSFlexGrid1.Cols = 1 + m_colUniquePP.Count
MSFlexGrid1.Row = 0
MSFlexGrid1.Col = 0
MSFlexGrid1.Text = "SNr.\ Q "
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
MSFlexGrid1.Row = Einbauplatz.getNr
MSFlexGrid1.Col = 0
If Not Pruefzaehler Is Nothing Then
Einbauplatz.setAktiv True
MSFlexGrid1.Text = Pruefzaehler.getSerienNr
PZCount = PZCount + 1
' Änderung am 22.8.2002 Reinhard Henning:
Pruefzaehler.getAuftragPositionSerienNr.setPruefgangNr m_Pruefgang.PruefgangNr
Pruefzaehler.getAuftragPositionSerienNr.setEinbauplatzNr Einbauplatz.getNr
Pruefzaehler.getAuftragPositionSerienNr.setPruefgangDatum m_Pruefgang.Datum
' erst mal zurücksetzen
Pruefzaehler.getAuftragPositionSerienNr.setStatusFertigung 22
' Hochzählen des Wiederholungszählers (-1 = Original Datensatz, 0 = 1. Pruefung, 1 = 1.Wdh, 2 = 2.Wdh , usw.
Pruefzaehler.getAuftragPositionSerienNr.setWiederholungen Pruefzaehler.getAuftragPositionSerienNr.getWiederholungen + 1
' Bemerkungen brauchen nicht vererbt werden ??? Todo: klären
' Pruefzaehler.getAuftragPositionSerienNr.setBemerkung ""
' alle anderen Angaben in AuftragPositionSeriennr werden von der vorherigen Wiederholung vererbt
Pruefzaehler.getAuftragPositionSerienNr.setAnlageDatum Now()
Pruefzaehler.getAuftragPositionSerienNr.setAnlageMitarbeiterNr g_App.Mitarbeiter.getNr
'Angaben für Änderung löschen
Pruefzaehler.getAuftragPositionSerienNr.setAenderungDatum Empty
Pruefzaehler.getAuftragPositionSerienNr.setAenderungMitarbeiterNr Empty
' Metrologische Klasse unter der diese Prüfung durchgeführt wurde
Pruefzaehler.getAuftragPositionSerienNr.setMetrolog Pruefzaehler.getPruefklasseKZ
' AuftragPositionsobjekt als neuen Datensatz speichern
PrintStatus "neuer Datensatz in AuftragPosSerNr mit Pruefgang=" & m_Pruefgang.PruefgangNr & ", SerNr=" & Pruefzaehler.getSerienNr & ", Wdh=" & Pruefzaehler.getAuftragPositionSerienNr.getWiederholungen
Pruefzaehler.getAuftragPositionSerienNr.save True
End If
Next Einbauplatz
For i = 1 To m_colUniquePP.Count
MSFlexGrid1.Row = 0
MSFlexGrid1.Col = i
MSFlexGrid1.Text = Format(m_colUniquePP.Item(i).getQ, "0.###") & " m³ [%]"
Next
m_Pruefgang.Anzahl = PZCount
PrintStatus "Anzahl eingebaute Pruefzähler: " & CStr(PZCount)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Schleife für alle Pruefpunkte
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
For Each m_Pruefpunkt In m_colUniquePP.getCollection
For i = 1 To g_App.Settings.EinbauplaetzeJeStrang
lblVerbleib(i).Caption = ""
lblPZImpulse(i).Caption = ""
Next
DoEvents
If g_Abbruch Then
Exit Sub
End If
PrintStatus "--------------------------------------"
' Für diesen PP wurde noch kein QIst gespeichert
bPPQIstSaved = False
' Zähler für PP in PP Collection: PPNr = 1 bei Qmax
PPNr = PPNr + 1
PrintStatus "nächster Pruefpunkt (" & PPNr & " / " & m_colUniquePP.Count & "): " & m_Pruefpunkt.getQ
' Dauer dieses Pruefpunktes
m_Pruefzeit = m_Pruefpunkt.GetTime
PrintStatus "Soll-Pruefzeit für diesen PP: " & m_Pruefzeit & " sec"
m_DurchflussSoll = m_Pruefpunkt.getQ
lblQSoll.Caption = m_DurchflussSoll
' Durchfluß ist nun änderbar
cmdQSollPlus.Enabled = True
cmdQSollMinus.Enabled = True
m_DurchflussSollManuell = m_DurchflussSoll
' Balkenanzeige in der Liste der Durchflüsse aktualisieren
Call DurchflussLstAktualisieren
' Referenzzähler wechseln
' ----------------------
' für den Referenzzaehler-Vergleich herangezogene Referenzzaehler
Set m_ReferenzzaehlerA = New CRefzaehler
' Referenzzaehler in Abbhängigkeit vom Durchfluß und INI Datei bestimmen
m_ReferenzzaehlerA.loadForDurchfluss m_DurchflussSoll, 1
FehlerRefZA = m_ReferenzzaehlerA.letzterFehler(m_DurchflussSoll)
PrintStatus "Letzter Fehler des Referenzzählers A(interpoliert): " & Format(FehlerRefZA, "0.00") & "%"
If g_App.Settings.getAnzahlMIDGruppen > 1 Then
Set m_ReferenzzaehlerB = New CRefzaehler
m_ReferenzzaehlerB.loadForDurchfluss m_DurchflussSoll, 2
FehlerRefZB = m_ReferenzzaehlerB.letzterFehler(m_DurchflussSoll)
PrintStatus "Letzter Fehler des Referenzzählers B(interpoliert): " & Format(FehlerRefZB, "0.00") & "%"
' Aktiven Referenzzähler auswählen
Select Case g_App.Settings.getMIDGruppe
Case 1
Set m_Referenzzaehler = m_ReferenzzaehlerA
PrintStatus "Aktive RefZ-Gruppe ist A"
FehlerRefZ = FehlerRefZA
Case 2
Set m_Referenzzaehler = m_ReferenzzaehlerB
PrintStatus "Aktive RefZ-Gruppe ist B"
FehlerRefZ = FehlerRefZB
Case Else
ErrorMsg ("MID-Gruppe in INI Datei ungültig: MidGr. A gewählt")
Set m_Referenzzaehler = m_ReferenzzaehlerA
FehlerRefZ = FehlerRefZA
End Select
Else
Set m_Referenzzaehler = m_ReferenzzaehlerA
PrintStatus "Aktive RefZ-Gruppe ist A"
FehlerRefZ = FehlerRefZA
End If
lblFehlerRZ.Caption = Format(FehlerRefZ, "0.00") & "%"
' Referenzzaehler Daten für Pruefpunkt speichern
m_Pruefgang.PP_RefZSerienNr(PPNr) = m_Referenzzaehler.SerienNr
If m_DurchflussSoll = 0 Then
PrintStatus "Durchfluß ist 0, wird übersprungen"
Else
' Schleife PruefgangLang initialisieren
ZaehlerPruefgangLang = 0
PruefgangLangPruefpunktWiederholen = False
SchleifenanfangPruefgangLang:
' SchleifenanfangPruefgangLang:
' PPNr und Q bleibt
' -----------------------------
PrintStatus "Schleifenbeginn Prüfgang Lang, Zaehler=" & ZaehlerPruefgangLang
lblLang.Caption = ZaehlerPruefgangLang
' Startzeit für diesen Pruefpunkt festhalten
PPZeit = Now
For Each Einbauplatz In m_colEinbauplatz
If Not Einbauplatz.getPruefzaehler Is Nothing Then
If Einbauplatz.getPruefzaehler.getPruefpunkte.hasQ(m_DurchflussSoll) Then
udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).SollDurchfluss = m_DurchflussSoll
udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).SollPruefzeit_s = m_Pruefzeit
Else
' Dieser Zähler wird in diesem PP nicht geprüft
udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).SollDurchfluss = 0
udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).SollPruefzeit_s = 0
End If
End If
Next
If Not m_PruefungsArtWaage Then
' Vergleichsprüfung gegen RefZ: erst Pumpen starten, dann messen mit FM85
' SPS für diesen Prüfpunkt initialisieren:
' FM85 für Periodendauermessung für diesen Prüfpunkt initialisieren
' Da neuer Pruefpunkt, Pruefpunkt neu initialisieren
If Not g_testModus Then
Call initSPSfuerPP
Call initSPSfuerDurchlauf
' WarteAufStartfreigabe
PrintStatus "checke Pruefbereitschaft der SPS "
Do While Not m_SPS.IstStreckePruefbereit
sleep 1000, True
If g_Abbruch = True Then
Exit Sub
End If
Loop
End If ' testModus
PrintStatus "Warten auf Solldurchfluß erreicht..."
If Not g_testModus Then
' Vergleichsprüfung gegen RefZ
' Pruefung starten
m_SPS.setBetrieb 2
Do While Not m_SPS.SolldurchflussErreicht
lblQIst.Caption = Format(m_SPS.getQIst, "0.000")
sleep 500, True
If g_Abbruch = True Then
Exit Sub
End If
Loop
' Durchflußanzeige RefIstWert korrigiert
QIst = m_SPS.getQIst
PrintStatus "Solldurchfluss erreicht bei Q=" & Format(QIst, "0.000")
lblQIst.Caption = Format(QIst, "0.000")
' FM85 für Periodendauermessung für diesen Pruefpunkt initialisieren
Call initFM85fuerPP
End If ' G_testModus
Else
'PruefungsArt ist Waage
' ZeitSoll, Durchfluß -> SollVolumen
' -> Behälter
' -> Waage
' Behälter leeren
' erst Messung mit FM85 ,
' dann Pumpen starten
' Todo: Behälter Zuleitung füllen
' Messung gegen Waage/Behälter in der SPS vorbereiten
' ---------------------------------------------------
' Betrieb stoppen und Pumpen Abwählen
' Durchfluß vorgabe
' Pumpe auswählen und anwählen
' Regelart und Regel-Position setzen
' MID Strang setzen
' Pruefung mit Waage
' --------------------
' geschätzes Volumen in Litern
' Behälterauswahl
' Waagenauswahl
' Behälter leeren oder füllen
' Tara
' Waagengrenzwert setzen
If WaageVorbereitenFuerPP() < 0 Then
Call Abbruch("Waage konnte nicht vorbereitet werden (falsches SollVolumen)")
Exit Sub
End If
If g_Abbruch Then
Exit Sub
End If
Call initSPSfuerPP
If g_Abbruch Then
Exit Sub
End If
' Anzeige Füllmenge
lblGewicht.Caption = ""
' Sollvolumen für Waagengrenzwert:
' m_VolumenSoll = (m_Pruefzeit / 3600) * m_DurchflussSoll
' lblSollV.Caption = Format(m_VolumenSoll * 1000, "0")
' Waagengrenzwert in Litern entspricht kg
' Waagengrenzwert = m_VolumenSoll * 1000 - m_DurchflussSoll * m_Behaelter.m_nUeberlaufFaktor
' PrintStatus "setze Waagengrenzwert: " & Waagengrenzwert & " kg"
' lblGrenzwert.Caption = Format(Waagengrenzwert, "0")
' Grenzwert an Waage übergeben
' m_Waage.SetNettoGrenzwert1 Waagengrenzwert, m_Behaelter.m_Genauigkeit
' Warte auf Startfreigabe
PrintStatus "Warte auf Startfreigabe"
Do While Not m_SPS.IstStreckePruefbereit
sleep 1000, True
If g_Abbruch = True Then
Exit Sub
End If
Loop
' Impulszählung programmieren
' Call initFM85fuerPP_Waage
If g_Abbruch Then
Exit Sub
End If
End If
' wieder beide Prüfungsarten (Waage und Vergleich)
' Anzeige diverser SPS Parameter:
' Betriebsanzeige Pumpen,
' Pumpendrehzahl,
' Leistungsanzeige FU,
' Pruefgang Daten aktualisieren
m_Pruefgang.PP_Soll(PPNr) = m_DurchflussSoll
' Prüfgang Daten in DB synchronisieren
m_Pruefgang.save
' ' Zeit in s in der der erste Impuls erwartet wird
' ImpulsTestZeit = (3600 / (m_DurchflussSoll * m_ImpulswertigkeitPZ)) * 2
' PrintStatus "Pulsabstand: " & Format(ImpulsTestZeit / 2, "0.0") & " s min."
' ImpulsTestZeit = ImpulsTestZeit
' PrintStatus "Wartezeit auf 1. Impuls = " & Format(ImpulsTestZeit, "0.0") & " s"
' AnzahlZaehlerOhneImpulse = 0
' bImpulsTest = False
'''''''''''''''''''''''''''''''''''''
' M E S S U N G
'''''''''''''''''''''''''''''''''''''
m_Startzeit = GetTickCount()
If g_testModus Then
Temperatur = 21.99
Else
Temperatur = m_SPS.GetEinlaufTemperatur
PrintStatus "Einlauftemperatur für diesen PP: " & Format(Temperatur, "0.00") & "°C"
End If
For Each Einbauplatz In m_colEinbauplatz
udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).dblTemperatur = Temperatur
Next
If m_PruefungsArtWaage Then
''''''''''''''''''''''' mit Waage ''''''''''''''
For Each Einbauplatz In m_colEinbauplatz
EinbauplatzNr = Einbauplatz.getNr
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If (Not Pruefzaehler Is Nothing) And Einbauplatz.getAktiv Then
' dieser Zähler soll geprüft werden
lngRet = USSetTemperatur(EinbauplatzNr, Temperatur)
If lngRet = 0 Then
PrintStatus "USSetTemperatur OK"
Else
PrintStatus "USSetTemperatur Fehler" & lngRet
End If
lngRet = StarteUSundRZZaehler(EinbauplatzNr)
If lngRet = 0 Then
PrintStatus "RZ-START und NOVA_START OK"
Else
PrintStatus "RZ-START und NOVA_START Fehler:" & lngRet
End If
End If ' PZ is nothing and GetActive
Next Einbauplatz
' Prüfung starten
m_SPS.setBetrieb 2
m_Tstart = GetTickCount
PrintStatus "Pumpe gestartet"
Do While Not ((m_Pumpe.GetStatus And 4) = 4)
If m_SPS.GrenzwertWaageErreicht Then
PrintStatus "Grenzwert erreicht bevor Pumpe läuft"
Exit Do
End If
sleep 500, True
If g_Abbruch Then
Exit Sub
End If
Loop
PrintStatus "Pumpe läuft"
blnPruefungFertig = False
Do While Not blnPruefungFertig
If m_SPS.GrenzwertWaageErreicht Then
PrintStatus "Grenzwert Waage erreicht"
blnPruefungFertig = True
End If
lblGewicht = Format(m_Waage.GetGewicht, "0.00")
AnzeigeAktualisieren
' Temperatur in den Zähler schreiben
UpdateTemperaturInZaehler
If g_Abbruch Then
Exit Sub
End If
sleep 100
DoEvents
Loop
Call m_Waage.WarteAufRuhe
For Each Einbauplatz In m_colEinbauplatz
EinbauplatzNr = Einbauplatz.getNr
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If (Not Pruefzaehler Is Nothing) And Einbauplatz.getAktiv Then
lngRet = StoppeUSundRZZaehler(EinbauplatzNr)
If lngRet = 0 Then
PrintStatus "RZ-STOP und NOVA_STOP OK"
Else
PrintStatus "RZ-STOP und NOVA_STOP Fehler:" & lngRet
End If
End If ' PZ is nothing and GetActive
Next Einbauplatz
Else
Call UltraschallPruefung(udtPruefdaten_imPP_mitEBP())
End If
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''
' PrintStatus "Warten, bis der Referenzzaehler alle Impulse gezählt hat..."
' AlleImpulseFertig = True
' Do
' ' Verbleibende Referenzzaehlerimpulse in FM85 für RefZ-Vergleich auslesen
' m_FMBus.send "**" & Hex(g_FM85RefZAdresse) & "@"
' m_FMBus.receive (500)
'
' m_FMBus.send "J"
' Impulse = Val("&H0000" & m_FMBus.receive(500))
' lblVerbleibRZA.Caption = Str(Impulse)
' If Impulse > 0 Then
' AlleImpulseFertig = False
' End If
'
' m_FMBus.send "I"
' Impulse = Val("&H0000" & m_FMBus.receive(500))
' lblVerbleibRZB.Caption = Str(Impulse)
' If Impulse > 0 Then
' AlleImpulseFertig = False
' End If
' Loop While Not AlleImpulseFertig
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
PP_Ist_Zeit = m_Tpruef
m_GesZeitZaehler = m_GesZeitZaehler + PP_Ist_Zeit
lblGesZeit.Caption = Format(m_GesZeitZaehler, "#0.0") & "/" & Format(GesZeit, "#0.0")
Stopphase:
m_Pruefgang.PP_Zeit(PPNr) = m_Pruefpunkt.GetTime
m_Pruefgang.save
' Betrieb stop: es ist hier ungewiss, ob Pruefpunkt wiederholt wird wenn Prüefgang Lang
If m_bPruefgangLang And PPNr = m_colUniquePP.Count And Not m_PruefungsArtWaage Then
' Betrieb wird später gestoppt
Else
m_SPS.setBetrieb 8
sleep 500
m_SPS.setBetrieb 0
lblQIst.Caption = ""
PrintStatus "Wasser gestoppt"
End If
' nach dem Qmax soll Wassertemperatur für Prüfgang ermittelt und gespeichert werden
If PPNr = 1 Then
If Not g_testModus Then
Temperatur = m_SPS.GetEinlaufTemperatur
Else
Temperatur = 21
End If
m_Pruefgang.Vorlauftemperatur = Temperatur
PrintStatus "Temperatur: " & Format(Temperatur, "0.00") & " °C"
m_Pruefgang.save
End If
'----------------------------------------------------------------
' Fehlerermittung
'----------------------------------------------------------------
PrintStatus "Fehlerermittlung:"
PrintStatus "-----------------"
If m_PruefungsArtWaage Then
'PrintStatus "Beruhigungsphase..."
'sleep 3000, True
'm_Waage.WarteAufRuhe
If g_Abbruch Then
Call Abbruch("")
Exit Sub
End If
Gewicht = m_Waage.GetGewicht
lblGewicht.Caption = Format(Gewicht, "0.000")
PrintStatus "Gewicht: " & Format(Gewicht, "0.000")
' Volumen in der Waage ermitteln
BehaelterVolumen = Volumen(Gewicht, Temperatur)
m_Pruefgang.PP_Waage(PPNr) = m_Behaelter.m_Nr
m_Pruefgang.save
PrintStatus "Volumen in der Waage " & m_BehaelterNr & " : " & BehaelterVolumen & " m³"
End If
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If (Not Pruefzaehler Is Nothing) And (Einbauplatz.getAktiv = True) Then
If (Not Pruefzaehler.getPruefpunkte Is Nothing) Then
If (Pruefzaehler.getPruefpunkte.hasQ(m_DurchflussSoll) = True) Then
MSFlexGrid1.Col = PPNr
MSFlexGrid1.Row = Einbauplatz.getNr
' ' FM85P mit entspr. Adresse ansprechen
' m_FMBus.send "**" & Hex(Einbauplatz.getNr) & "@"
' m_FMBus.receive (500)
' m_FMBus.send "L"
' Impulse = CLng("&H0" & m_FMBus.receive(500))
' ' Prüfzählermpulse Anzeige aktualisieren
' lblPZImpulse(Einbauplatz.getNr).Caption = Str(Impulse)
' dblVolumenRZ = Impulse / m_Referenzzaehler.ImpulseQM ' in m^3
Dummy = GetUSVolumen(Einbauplatz.getNr, dblVolumenUS, Einbauplatz.getPruefzaehler.getSerienNr)
If Dummy = 0 Then
PrintStatus "Volumen des US [m³]: " & dblVolumenUS
Else
dblVolumenUS = 0
PrintStatus "GetUSVolumen Fehler: " & Dummy
End If
If m_PruefungsArtWaage Then
' Fehlerermittlung
' Fehler = (Impulse / Pruefzaehler.GetImpulseQM - BehaelterVolumen) * 100 / BehaelterVolumen
' PrintStatus " PZ" & Einbauplatz.getNr & " Fehler=" & Format(Fehler, "0.00") & " %"
Fehler = ((dblVolumenUS - BehaelterVolumen) / BehaelterVolumen) * 100
m_Pruefgang.PP_Ist_V(PPNr) = BehaelterVolumen * 1000
m_Pruefgang.save
Else ' (not m_PruefungsArtWaage )
Call GetRZVolumen(Einbauplatz.getNr, m_Referenzzaehler, dblVolumenRZ)
' Korrektur
DebugMsg "ermitteltes Volumen des RZ: " & dblVolumenRZ & " m³"
dblVolumenRZ = dblVolumenRZ / (1 + m_Referenzzaehler.letzterFehler(m_DurchflussSoll) / 100)
m_Pruefgang.PP_Ist_V(PPNr) = dblVolumenRZ * 1000
m_Pruefgang.save
DebugMsg "korrigiertes Volumen des RZ: " & dblVolumenRZ & " m³"
If Not dblVolumenRZ = 0 Then
'PrintStatus "Letzter Fehler des Referenzzählers : " & Format(FehlerRefZ, "0.00") & " %"
' Fehler-Formel hergeleitet aus
' Q = ( Impulswertigkeit * Impulse) / Periodendauer
' FPz = (QPz - QRz)/QRz
' Fehler in % (* 100)
'Änderung Andreas Pfeiffer 07.04.00 #0007
'Wenn keine Impulse eingegangen sind soll kein Fehler berechnet werden Fehlwert = 99%
'Fehler Division durch 0 vermeiden und Hinweis in Datenbank auf nicht Funktion
If Not dblVolumenUS = 0 Then
' die Unterschiedlichen Zeiten eliminieren
dblDurchflussRZ = dblVolumenRZ / udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).RZ_IstPruefzeit_ms
If udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).US_IstPruefzeit_ms = 0 Then
PrintStatus "Fehler des US-Zählers konnte nicht ermittelt werden, da Stop-Zeitpunkt verpasst"
Fehler = 98 'Merker für "STOP Zeitpunkt verpasst"
Else
dblDurchflussUS = dblVolumenUS / udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).US_IstPruefzeit_ms
PrintStatus "Durchfluss RZ:" & Format(dblDurchflussRZ, "0.000")
PrintStatus "Durchfluss US:" & Format(dblDurchflussUS, "0.000")
Fehler = ((dblDurchflussUS - dblDurchflussRZ) / dblDurchflussRZ) * 100
PrintStatus "Fehler des PZ: " & Fehler & " %"
' Korrektur des Fehlers mit dem Fehler des Referenzzählers
'####### geändert am 21.08.02 Pfeiffer ##########
'Fehler = Fehler + FehlerRefZ
'PrintStatus "Summe der Fehler: " & Format(Fehler, "0.00") & " %"
End If
Else
Fehler = 99 'Merker für "Keine Impulse"
PrintStatus "Fehler: Das Volumen des US Zählers konnte nicht bestimmt werden für Einbauplatz " & Einbauplatz.getNr
End If
Else 'VolumenRZ = 0
PrintStatus ("Fehler: Das Volumen des Referenz-Zählers konnte aus den FM85 nicht ermittelt werden (=0)")
End If
End If ' (not m_PruefungsArtWaage )
PrintStatus "ermittelter Fehler: " & Format(Fehler, "0.00") & " %"
' Fehler dieses Prüfpunktes für diesen Einbauplatz steht fest,
' es ist aber noch nicht berücksichtigt, ob Langmessung nötig ist
bFehlerermittelt = False
If m_bPruefgangLang And PPNr = m_colUniquePP.Count Then
' ------------------------------------------
' Behandlung bei Pruefgang Lang,
' letzter Prüfpunkt mit kleinstem Durchfluss
' ------------------------------------------
' Pruefgang-Lang und Pruefpunkt = Qmin.
FehlerInPruefgangLang(ZaehlerPruefgangLang, Einbauplatz.getNr) = Fehler
MSFlexGrid1.Text = Format(Fehler, "0.00") & "/" & ZaehlerPruefgangLang + 1
Select Case ZaehlerPruefgangLang
Case 0
PrintStatus "PruefgangLang: 1.Fehler: wurde zwischengespeichert"
PruefgangLangPruefpunktWiederholen = True
Case 1
PrintStatus "PruefgangLang: 2.Fehler: Vergleich mit 1.Fehler"
' Abweichung aus Ini Datei in %
PrintStatus "Testen ob die gemessenen Fehler abweichen um weiniger als " & g_App.Settings.getPruefgangLangAbweichung() & " % ..."
PrintStatus "Einbauplatz: " & Einbauplatz.getNr
PrintStatus "Fehler Lang 1: " & FehlerInPruefgangLang(1, Einbauplatz.getNr)
PrintStatus "Fehler Lang 0: " & FehlerInPruefgangLang(0, Einbauplatz.getNr)
PrintStatus "Abweichung: " & FehlerInPruefgangLang(1, Einbauplatz.getNr) - FehlerInPruefgangLang(0, Einbauplatz.getNr)
PrintStatus " Abs() ist größer als " & g_App.Settings.getPruefgangLangAbweichung() & " ?"
If Abs(FehlerInPruefgangLang(1, Einbauplatz.getNr) - FehlerInPruefgangLang(0, Einbauplatz.getNr)) > g_App.Settings.getPruefgangLangAbweichung() Then
PruefgangLangPruefpunktWiederholen = True
PrintStatus " ja, also Prüfung wiederholen."
Else
PrintStatus " nein, also Mittelwert bestimmen."
' Wiederholen, wenn mind 1 mal Abweichung überschritten
' Mittelwert aus den letzen beiden Fehlern für diesen PP bestimmen
Fehler = (FehlerInPruefgangLang(1, Einbauplatz.getNr) + FehlerInPruefgangLang(0, Einbauplatz.getNr)) / 2
' Fehler steht fest
bFehlerermittelt = True
PruefgangLangPruefpunktWiederholen = False
End If
Case 2
PrintStatus "PruefgangLang: 3.Fehler..."
' Bestimmen der dicht beieinander liegenden Punkte
Fehler = MittelwertDerFehlerOhneAusreisser(FehlerInPruefgangLang(0, Einbauplatz.getNr), FehlerInPruefgangLang(1, Einbauplatz.getNr), FehlerInPruefgangLang(2, Einbauplatz.getNr))
' Fehler steht fest
bFehlerermittelt = True
PruefgangLangPruefpunktWiederholen = False
End Select
Else 'm_bPruefgangLang And PPNr = m_colUniquePP.Count
' ------------------------------------------
' Behandlung sonst, wenn kein Pruefgang Lang
' ------------------------------------------
bFehlerermittelt = True
End If ' Prüfgang lang
' -------------------------------
' Behandlung aller Pruefungen
' -------------------------------
If bFehlerermittelt = True Then
' Fehler steht fest:
' speichern
Call FehlerSpeichern(Fehler, Pruefzaehler, m_Pruefgang, m_Pruefpunkt, m_colUniquePP)
MSFlexGrid1.Text = Format(Fehler, "0.00")
' Fehler speichern für Druck
For i = 1 To Pruefzaehler.getPruefpunkte.getPruefpunkteCount
If Pruefzaehler.getPruefpunkte.getPruefpunkt(i).getQ = m_DurchflussSoll Then
Pruefzaehler.getPruefpunkte.getPruefpunkt(i).setFehler Fehler
End If
Next
' Bei Grenzwertüberschreitung
Set AuftragPositionSerienNr = Pruefzaehler.getAuftragPositionSerienNr
If GrenzwertUeberschritten(m_Pruefpunkt.getFGo, Fehler, m_Pruefpunkt.getFGu) Then
AuftragPositionSerienNr.setStatusFertigung 25
PrintStatus "Grenzwert überschritten. " & m_Pruefpunkt.getFGu & " < " & Fehler & " < " & m_Pruefpunkt.getFGu & " ?"
MSFlexGrid1.CellBackColor = &HC0C0FF
End If
End If ' bFehlerermittelt
PrintStatus " ermittelter Fehler = " & Format(Fehler, "0.00") & "%"
End If ' Prüfzähler hat diesen Prüfpunkt
End If ' Prüfpunkte vorhanden
End If 'Pruefzaehler vorhanden
Next Einbauplatz 'In m_colEinbauplatz
If m_bPruefgangLang And PPNr = m_colUniquePP.Count Then
ZaehlerPruefgangLang = ZaehlerPruefgangLang + 1
lblLang.Caption = (ZaehlerPruefgangLang + 1) & " ."
DebugMsg "Zähler PGang Lang: " & ZaehlerPruefgangLang
End If
If Not m_PruefungsArtWaage Then
If g_App.Settings.getAnzahlMIDGruppen > 1 Then
' Abweichung zwischen den Referenzzaehlern ermitteln
m_FMBus.send "**" & Hex(g_FM85RefZAdresse) & "@"
m_FMBus.receive (500)
m_FMBus.send "X"
PeriodendauerRefZ1 = Val("&H0000" & m_FMBus.receive(500))
m_FMBus.send "Y"
PeriodendauerRefZ2 = Val("&H0000" & m_FMBus.receive(500))
PrintStatus "Referenzzaehler1 Periodendauer = " & PeriodendauerRefZ1
PrintStatus "Referenzzaehler2 Periodendauer = " & PeriodendauerRefZ2
' Referenzzähler Vergleich
If PeriodendauerRefZ1 = 0 Or PeriodendauerRefZ2 = 0 Then
PrintStatus ("Periodendauer eines RefZ (FM85P-13)liegt noch nicht vor.")
Else
PrintStatus "Fehler des RefZählers A: " & FehlerRefZA & " %"
PrintStatus "Fehler des RefZählers B: " & FehlerRefZB & " %"
' ' Korrigierter Wert
PeriodendauerRefZ1 = PeriodendauerRefZ1 * (1 - FehlerRefZA / 100)
PeriodendauerRefZ2 = PeriodendauerRefZ2 * (1 - FehlerRefZB / 100)
PrintStatus "Referenzzaehler1 Periodendauer (korrigiert)= " & PeriodendauerRefZ1
PrintStatus "Referenzzaehler2 Periodendauer (korrigiert)= " & PeriodendauerRefZ2
Fehler = 100 * (PeriodendauerRefZ1 - PeriodendauerRefZ2) / (PeriodendauerRefZ1)
' Warnung, wenn Fehler zwischen den Referenzzählern > MaxDiff
If Abs(Fehler) > g_App.Settings.getMaxDiffRZ() Then
m_DruckMsg = m_DruckMsg & "Warnung: der Fehler zwischen Referenzzaehlern " & Format(Fehler, "0.000") & "% " & vbCrLf & "ist größer als " & g_App.Settings.getMaxDiffRZ() & " % bei Q=" & Format(m_DurchflussSoll, "0.000") & "m³/h" & vbCrLf
PrintStatus "Warnung: der Fehler zwischen Referenzzaehlern " & Format(Fehler, "0.000") & "% ist größer als " & g_App.Settings.getMaxDiffRZ() & " % bei Q=" & Format(m_DurchflussSoll, "0.000") & "m³/h"
End If ' Fehler > MaxDiff
End If ' Periodendauer (nicht) liegt vor
End If ' 2 Referenzzähler zum Vergleichen
Else
Call WaageZuruecksetzen
End If ' Prüfungsart Vergleichsprüfung, not Waage
lblZeit.Caption = ""
PrintStatus "Schleifenende Pruefgang Lang: Zähler=" & ZaehlerPruefgangLang
' Schleifenende für Pruefgang Lang
If PruefgangLangPruefpunktWiederholen Then
PrintStatus "Wg. Pruefgang Lang: Pruefpunkt wiederholen..."
m_QBehalten = True
GoTo SchleifenanfangPruefgangLang
End If
m_SPS.setBetrieb 8
sleep 500
m_SPS.setBetrieb 0
lblQIst.Caption = ""
PrintStatus "Wasser gestoppt"
lblFehlerRZ.Caption = ""
' Alle Einbauplätze wieder aktivieren
For Each Einbauplatz In m_colEinbauplatz
lblPZImpulse(Einbauplatz.getNr).BackColor = &H8000000F
lblVerbleib(Einbauplatz.getNr).BackColor = &H8000000F
Einbauplatz.setAktiv True
Next
End If ' m_DurchflussSoll > 0 ' und RZ-Vergleichs-Prüfung erfolgt
' Schleifenende Pruefpukte: nächster Pruefpunkt
Next m_Pruefpunkt
' Kompletter Pruefgang bendet
' ----------------------------
' Für jeden geprüften Pruefzähler:
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If Not Pruefzaehler Is Nothing Then
Set AuftragPositionSerienNr = Pruefzaehler.getAuftragPositionSerienNr
Select Case AuftragPositionSerienNr.getStatusFertigung
Case 25
' Grenzwertüberschreitung in einem Prüfpunkt
Case 23
' Ausfall in einem Prüfpunkt
Case Else
' Geprüft in allen Prüfpunkten ohne Ausfall und Grenzwertüberschreitung
AuftragPositionSerienNr.setStatusFertigung 30
' Todo:
' AuftragPosition.FertigemeldeTermin FertigmeldeMitarbeiter
' FertMeld_Pterm_MA = Mitarbeiter.GetNr
' P_IstTerm = now()
' Fertmeld_Pterm_Dat = now()
End Select
AuftragPositionSerienNr.save
End If
Next Einbauplatz
' Todo: wann neuer Prüfgang für AuftragpositionSeriennummer ?
PrintStatus "Schleifenende Dauerprüfung. " & m_DauerpruefungZaehler
If m_DauerStop = True Then
PrintStatus "Dauerprüfung wurde vorzeitig gestopt"
Exit For
End If
Next m_DauerpruefungZaehler ' Schleifenende Dauerprüfung
PrintStatus "Prüfergebnisse werden gespeichert..."
DoEvents
' Speichern der PruefgangDaten
m_Pruefgang.save
' SPS Betrieb Programmende
PrintStatus "Ende der Hauppruefung"
EndeDerHauppruefung:
DoEvents
' Stoppen
m_SPS.setBetrieb 0
sleep 1000
If mbln_Funktionspruefung = True Then
lblTitle.Caption = "Funktionsprüfung"
Call Funktionspruefung
m_DruckMsg = m_DruckMsg & vbCrLf & "Ergebnisse der Funktionsprüfung: " & vbCrLf & strFunktionsPruefungMsg
End If
PrintStatus "Prüfergebnisse werden gedruckt..."
DoEvents
Call PruefgangDruck(m_Pruefgang, Temperatur, m_colEinbauplatz, PZCount, m_DruckMsg)
lblTitle.Caption = "Ultraschall-Zähler Prüfung"
' Programmende einleiten
If MsgBox("Automatisch beenden ?", vbYesNo) = vbNo Then
GoTo Fertig ' nicht öffnen
Else
' lösen
m_SPS.setBetrieb 4
sleep 1000
End If
If m_NurMesseinsaetze = False Then
' warten bis Lösen begonnen wurde
PrintStatus "Warten bis Lösen beginnt..."
Do While m_SPS.IstStreckeGespannt
sleep 1000, True
If g_Abbruch = True Then
Exit Sub
End If
Loop
PrintStatus "Lösen..."
End If
Fertig:
' Jetzt kann Betrieb = 0 gesetzt werden
m_SPS.SetQSoll 0
sleep 1000
m_SPS.setBetrieb 0
sleep 1000
Call ResetPruefung
If m_PruefungsArtWaage = True Then
Call m_Waage.releaseMScomm
End If
endDialog IDOK
End Sub
Private Sub initSPSfuerDurchlauf()
' Durchlauf auswählen
m_SPS.setBehaelter 1
lblGewichtLabel.Enabled = False
lblGewicht.Enabled = False
End Sub
Private Function initSPSfuerPP()
' SPS für diesen Prüfpunkt initialisieren, unabhängig von Waage/Behälter oder Durchlauf
' -------------------------------------------------------------------------------------
' Betrieb stoppen und Pumpen Abwählen
' Durchfluß vorgabe
' Pumpe auswählen und anwählen
' Regelart und Regel-Position setzen
' MID Strang setzen
Dim Einbauplatz As CEinbauplatz
Dim i As Integer
Dim iStellwert As Integer
'Dim Waagengrenzwert As Double
' Betrieb Start zurücksetzen
m_SPS.setBetrieb 8
sleep 500
m_SPS.setBetrieb 0
m_SPS.SetQSoll m_DurchflussSoll
PrintStatus "Nächster Durchfluss: " & m_DurchflussSoll
' Pumpenauswahl
' Hochbehälter Auswahl wenn Q < 1 m ^3 -> Pumpe.Nr = 4
' siehe modPumpe
m_SPS.AllePumpenAbwaehlen
Set m_Pumpe = Pumpenwahl(m_DurchflussSoll, m_ColPumpen)
PrintStatus "zu startende Pumpe: " & m_Pumpe.GetSPSVarname
m_Pumpe.Anwahl
Select Case m_Pumpe.GetRegelart
Case "Servo"
' Servo vorgeschrieben
m_SPS.SetRegelart ("Servo")
' Formel für ServoPosition zur Feinregulierung des Durchflusses
iStellwert = CInt(lookupFUServoStellwert(m_DurchflussSoll, "Servo"))
If iStellwert > 100 Then iStellwert = 100
PrintStatus "Stellwert: " & iStellwert
m_SPS.SetServoStellung iStellwert
Case "FU"
' Frequenzumrichter vorgeschrieben
m_SPS.SetRegelart ("FU")
' Formel für ServoPosition zur Feinregulierung des Durchflusses
If m_DurchflussSoll = m_ersterPruefzaehler.getPruefpunkte.getPruefpunkt(1).getQ Then
iStellwert = GetUSVoreinstellwert(m_DurchflussSoll)
Else
iStellwert = 50
End If
'If iStellwert = 0 Then
' PrintStatus "GetUSVoreinstellwert= 0, deshalb Voreinstellwert aus RZPP"
' iStellwert = lookupFUServoStellwert(m_DurchflussSoll, "FU")
'End If
' iStellwert = iStellwert * (1 + (m_AnzahlPZ * (100 - m_ersterPruefzaehler.getIdentNrObj.GetNennweite) * 0.001))
If iStellwert > 100 Then iStellwert = 100
PrintStatus "Stellwert: " & iStellwert
m_SPS.SetServoStellung iStellwert
Case Else
ErrorMsg "Es ist keine Regelart für die Pumpe " & m_Pumpe.getNr & " in der ini-Datei definiert."
Call Abbruch
Exit Function
End Select
' Vorwahl Referenzzaehler
m_SPS.SetMID m_Referenzzaehler.EinbauplatzNr
m_SPS.SetQDiff 0
End Function
Private Function initSPSfuerWaage()
Dim i As Integer
Dim Waagengrenzwert As Double
' initialisierung der SPS und Waage für Pruefung mit Waage
'---------------------------------------------------------
' Behälterauswahl
' Waagenanwahl
' Waagengrenzwert auf oberen Wert
' Behälter leeren
' Waage tarieren
' letzter Fehler auf 0
' geschätzes Volumen in Litern als Sollvolumen für Waagengrenzwert:
m_VolumenSoll = m_Pruefzeit * m_DurchflussSoll / 3.6
PrintStatus "geschätztes Soll-Volumen in Litern: " & m_VolumenSoll
lblSollV.Caption = Format(m_VolumenSoll, "0")
' Behälterauswahl
For i = 1 To 2
If m_ArrayBehaelter(i).IstOkFuerVolumen(m_VolumenSoll) Then
Set m_Behaelter = m_ArrayBehaelter(i)
m_BehaelterNr = i
Exit For
End If
Next
' Waagenanwahl
If Not m_Behaelter Is Nothing Then
PrintStatus "-> Gewählte Waage: " & m_Behaelter.m_WaageAnwahl
PrintStatus "-> Gewählte m_Behaelter: " & m_Behaelter.m_BehaelterAnwahl
Set m_Waage = g_App.getWaage
Do While m_Waage.Anwahl(m_Behaelter.m_WaageAnwahl) = False
If MsgBox("Waage (Anwahl=" & m_Behaelter.m_WaageAnwahl & ") konnte nicht angewählt werden." & vbCrLf & "Bitte Waagen-Reset (C-Taste) durchführen." & vbCrLf & "Möchten Sie die Waagenanwahl wiederholen ?" & vbCrLf & "Cancel bricht die Prüfung ab", vbOKCancel, "Waagen Fehler ?") = vbCancel Then
Call Abbruch
Exit Do
End If
Loop
' 2= klein, 4= groß
m_SPS.setBehaelter m_Behaelter.m_BehaelterAnwahl
Else
ErrorMsg ("Es konnte keine Waage und kein Behälter für Volumen " & m_VolumenSoll & " bestimmt werden")
' Prüfung abbrechen
g_Abbruch = True
Call Abbruch
Exit Function
End If
m_Waage.SetNettoGrenzwert1 m_Behaelter.m_WaageGrenzwert, m_Behaelter.m_Genauigkeit
lblGrenzwert.Caption = ""
m_SPS.WassserAblassen 0
' Vor jedem Prüfpunkt beide Behälter leeren bis Prüfmenge nicht mehr erreicht
m_SPS.WassserAblassen 3
PrintStatus "Beide Behälter leeren bis Prüfmenge nicht mehr erreicht..."
sleep 5000
Do While m_SPS.GrenzwertWaageErreicht
sleep 1000, True
If g_Abbruch = True Then
Exit Function
End If
Loop
PrintStatus "gewählten Behälter " & m_BehaelterNr & " leeren..."
' Vor jedem Prüfpunkt gewählten Behälter leeren
' ---------------------------------------------
m_SPS.WassserAblassen m_Behaelter.m_AblassAnwahl
sleep 5000
' auf Ruhe testen
m_Waage.WarteAufRuhe
If g_Abbruch = True Then
Call Abbruch
Exit Function
End If
' Waage ist nun in Ruhe, Ablassen kann beendet werden
PrintStatus "Behälter ist nun leer.!"
' Wasser ablassen beenden
m_SPS.WassserAblassen 0
' Waage tarieren
PrintStatus "Waage Tarieren"
m_Waage.Tara
Set m_Pumpe = Pumpenwahl(m_DurchflussSoll, m_ColPumpen)
PrintStatus "zu startende Pumpe: " & m_Pumpe.GetSPSVarname
m_Pumpe.Anwahl
' Waagengrenzwert bestimmen
Waagengrenzwert = m_VolumenSoll - m_DurchflussSoll * m_Behaelter.m_nUeberlaufFaktor
PrintStatus "Waagengrenzwert: " & Waagengrenzwert
lblGrenzwert.Caption = Format(Waagengrenzwert, "0")
' Grenzwert an Waage übergeben
m_Waage.SetNettoGrenzwert1 Waagengrenzwert, m_Behaelter.m_Genauigkeit
' Der Durchfluß Wert soll unbereinigt angezeigt werden
m_SPS.SetQDiff 0
lblGewichtLabel.Enabled = True
lblGewicht.Enabled = True
End Function
Private Function WaageVorbereitenFuerPP()
Dim StartVolumen As Double
Dim Gewicht As Double
Dim letztesGewicht As Double
Dim Referenzzaehler As CRefzaehler
Dim Pumpe As CPumpe
Dim Fuelldurchfluss As Double
Dim Fuellvolumen As Double
Dim Waagengrenzwert As Double
PrintStatus "Waage vorbereiten für diesen Prüfpunkt:"
lblQIst.Caption = "0"
m_SPS.setBetrieb 0
m_SPS.WassserAblassen 3
sleep 1000, True
m_SPS.WassserAblassen 0
m_Waage.TaraReset
m_Waage.SoftTaraReset
m_VolumenSoll = m_Pruefzeit * m_DurchflussSoll / 3.6
PrintStatus "Sollvolumen:" & Format(m_VolumenSoll, "0.000") & " l"
'-----------------------------------------
Set m_Behaelter = New CBehaelter
If m_Behaelter.LoadForVolumen(m_VolumenSoll) = False Then
MsgBox ("Es exisitiert kein Behälter für Volumen=" & m_VolumenSoll & vbCrLf & "Abbruch empfohlen!")
WaageVorbereitenFuerPP = -1
Exit Function
End If
PrintStatus "gewählter Behälter: OVolumen=" & m_Behaelter.m_OVolumen
m_SPS.setBehaelter m_Behaelter.m_BehaelterAnwahl
Do While m_Waage.Anwahl(m_Behaelter.m_WaageAnwahl) = False
If MsgBox("Waage (Anwahl=" & m_Behaelter.m_WaageAnwahl & ") konnte nicht angewählt werden." & vbCrLf & "Bitte Waagen-Reset (C-Taste) durchführen." & vbCrLf & "Möchten Sie die Waagenanwahl wiederholen ?" & vbCrLf & "Cancel bricht die Prüfung ab", vbOKCancel, "Waagen Fehler ?") = vbCancel Then
Call Abbruch
Exit Do
End If
Loop
'-----------------------------------------
If m_AnwahlLetzterBehaelter <> m_Behaelter.m_BehaelterAnwahl Then
' Behälter wurde gewechselt oder das erste mal benutzt
PrintStatus "Behälter wurde gewechselt oder das erste mal benutzt: (Anwahl von " & m_AnwahlLetzterBehaelter & " nach " & m_Behaelter.m_BehaelterAnwahl & ")"
m_AnwahlLetzterBehaelter = m_Behaelter.m_BehaelterAnwahl
PrintStatus "Wasser ganz ablassen"
'-----------------------------------------
' Wasser ganz ablassen
StartVolumen = 0
letztesGewicht = 0
m_SPS.WassserAblassen m_Behaelter.m_AblassAnwahl
sleep 2000, True
Do
sleep 1000, True
Gewicht = m_Waage.GetGewicht
lblGewicht = Format(Gewicht, "0.00")
If Gewicht = -9999 Then
DebugMsg ("Fehler: Gewicht konnte nicht gelesen werden")
sleep 200, True
End If
If letztesGewicht = Gewicht Then Exit Do
letztesGewicht = Gewicht
If g_Abbruch = True Then
Exit Function
End If
Loop While Gewicht > StartVolumen
m_SPS.WassserAblassen 0
'---------------------------------------
' Rohr füllen
Fuelldurchfluss = m_ersterPruefzaehler.getPruefpunkte.getPruefpunkt(1).getQ
If Fuelldurchfluss > m_Behaelter.m_Fuelldurchfluss Then
' Bestimme den kleineren Durchfluß von Qmax-Zähler und Behälter
Fuelldurchfluss = m_Behaelter.m_Fuelldurchfluss
End If
Fuellvolumen = m_Behaelter.m_Fuellvolumen
If Fuellvolumen = 0 Then
Fuellvolumen = m_Behaelter.m_OVolumen * 0.1
PrintStatus "Füllvolumen auf 10% gesetzt. Bitte Fuellvolumen in ini Datei pflegen!"
End If
' Setze MID und MIDGruppe
Set Referenzzaehler = New CRefzaehler
Call Referenzzaehler.loadForDurchfluss(Fuelldurchfluss, g_App.Settings.getMIDGruppe)
m_SPS.SetMID Referenzzaehler.EinbauplatzNr
m_SPS.SetQDiff 0
m_SPS.AllePumpenAbwaehlen
Set Pumpe = Pumpenwahl(m_Behaelter.m_Fuelldurchfluss, m_ColPumpen)
Pumpe.Anwahl
PrintStatus "gewählte Pumpe: " & Pumpe.GetSPSVarname
'----------------------------------------------------------
' Füllen bis 10% des Behältervolumens
PrintStatus "Rohr füllen mit Fülldurchfluß " & Fuelldurchfluss & " auf Fuellvolumen " & Fuellvolumen & " l in " & m_Behaelter.m_OVolumen & " l Behälter"
m_SPS.SetServoStellung lookupFUServoStellwert(Fuelldurchfluss)
m_SPS.SetQSoll Fuelldurchfluss
lblSollV = Format(Fuellvolumen, "0.0")
lblQSoll.Caption = Fuelldurchfluss
m_SPS.setBetrieb 2
Do
sleep 1000, True
Gewicht = m_Waage.GetGewicht
lblGewicht = Gewicht
If Gewicht = -9999 Then
DebugMsg ("Fehler: Gewicht konnte nicht gelesen werden")
sleep 200, True
End If
If g_Abbruch = True Then
Exit Function
End If
Loop While Gewicht < Fuellvolumen
m_SPS.setBetrieb 0
lblQSoll.Caption = 0
'-----------------------------------------
PrintStatus "Wasser ganz ablassen"
'-----------------------------------------
' Wasser ganz ablassen
StartVolumen = 0
letztesGewicht = 0
lblSollV.Caption = "0"
m_SPS.WassserAblassen m_Behaelter.m_AblassAnwahl
sleep 2000, True
Do
sleep 1000, True
Gewicht = m_Waage.GetGewicht
lblGewicht = Format(Gewicht, "0.00")
If Gewicht = -9999 Then
DebugMsg ("Fehler: Gewicht konnte nicht gelesen werden")
sleep 200, True
End If
If letztesGewicht = Gewicht Then Exit Do
letztesGewicht = Gewicht
If g_Abbruch = True Then
Exit Function
End If
Loop While Gewicht > StartVolumen
m_SPS.WassserAblassen 0
'---------------------------------------
End If 'Behälterwechsel
'-----------------------------------------
Gewicht = m_Waage.GetGewicht
lblGewicht = Format(Gewicht, "0.00")
' geschätzes Volumen in Litern als Sollvolumen für Waagengrenzwert:
m_VolumenSoll = m_Pruefzeit * m_DurchflussSoll / 3.6
PrintStatus "geschätztes Soll-Volumen in Litern: " & Format(m_VolumenSoll, "0")
lblSollV.Caption = Format(m_VolumenSoll, "0")
If m_VolumenSoll + Volumen(Gewicht, m_SPS.GetEinlaufTemperatur) * 1000 > m_Behaelter.m_WaageGrenzwert Then
' Zuviel Wasser drin, also ablassen
'-----------------------------------------
' Wasser ganz ablassen
StartVolumen = 0
m_SPS.WassserAblassen m_Behaelter.m_AblassAnwahl
sleep 2000, True
Do
sleep 200, True
Gewicht = m_Waage.GetGewicht
lblGewicht = Gewicht
If Gewicht = -9999 Then
DebugMsg ("Fehler: Gewicht konnte nicht gelesen werden")
sleep 200, True
End If
If g_Abbruch = True Then
Exit Function
End If
If letztesGewicht = Gewicht Then Exit Do
letztesGewicht = Gewicht
Loop While Gewicht > StartVolumen
m_SPS.WassserAblassen 0
'-----------------------------------------
End If
' hier ist sichergestellt dass mind. noch das Sollvolumen hinein passt
' neuen Grenzwert für das Sollvolumen setzen
Gewicht = m_Waage.GetGewicht
lblGewicht = Format(Gewicht, "0.00")
PrintStatus "Warten auf Waagen Ruhe"
m_Waage.WarteAufRuhe
Gewicht = m_Waage.GetGewicht
lblGewicht = Format(Gewicht, "0.00")
PrintStatus " neuer Grenzwert :" & Format(Volumen(Gewicht, m_SPS.GetEinlaufTemperatur) * 1000, "0.000") & " + " & Format(m_VolumenSoll, "0.000") & " = " & Format(m_VolumenSoll + Volumen(Gewicht, m_SPS.GetEinlaufTemperatur) * 1000, "0.000")
Waagengrenzwert = m_VolumenSoll + Volumen(Gewicht, m_SPS.GetEinlaufTemperatur) * 1000
lblGrenzwert.Caption = Format(Waagengrenzwert, "0.00")
m_Waage.SetNettoGrenzwert1 Waagengrenzwert
' dieses Gewicht gilt
m_Waage.SoftTara
lblGewicht = "0"
End Function
Private Sub initFM85fuerPP_Waage()
' FM85 für Impulszählung für diesen Pruefpunkt initialisieren
sendonly "**0@"
sendonly "R"
sleep 1000, True
' PZ Impulse zählen
sendonly "Q"
' RZ Impulse zählen
sendonly "O"
m_FMBus.dialog "**" & Hex(m_ersterPruefzaehlerNr) & "@", "FM85"
m_FMBus.send "42 "
Dummy = Mid(m_FMBus.receive(500), 6, 2)
If Dummy <> "00" And Dummy <> "03" Then
If MsgBox("FM85 Fehlerbyte ist weder '00' noch '03'" & vbCrLf & "Möchten Sie weitermachen", vbYesNo) = vbYes Then
Else
' Todo: Allgemeine Abbruchfunktion
' Prüfung abbrechen
g_Abbruch = True
Call Abbruch
Exit Sub
End If
End If
End Sub
'-------------------------------------------------------------------------
'' FM85 für diesen Prüfpunkt initialisieren:
Private Sub initFM85fuerPP()
Dim AnzahlPeriodenPZ As Double
Dim AnzahlPeriodenRZ As Double
Dim AnzahlPeriodenPZNeu As Long
Dim AnzahlPeriodenRZA As Long
Dim AnzahlPeriodenRZB As Long
Dim ImpulswertigkeitRZ As Long
Dim Korrekturwert As Double
Dim Fehler As Double
Dim Pruefzaehler As CPruefzaehler
Dim Einbauplatz As CEinbauplatz
PrintStatus "**********************************************"
PrintStatus "Initialisierung der FM85 für Vergleichsprüfung"
' Dummy Werte
sendonly "**0@"
sendonly "R"
sleep 1000, True
sendonly "**0@"
' Multiplikator
sendonly "1s"
' keine Doppelimpulssperre
sendonly "G"
' Doppelimpuls-Zeit
sendonly "0000S"
' Dämpfung
sendonly "3T"
' K Wert
sendonly Trim("1000K+1") ' entspricht k* 0.1000 * 10 ^1 = K
' ----------------------------------------------------------------------------------
' Periodenzahl errechnen
ImpulswertigkeitRZ = m_Referenzzaehler.ImpulseQM
' PrintStatus "ImpulswertigkeitPZ: " & m_ImpulswertigkeitPZ
PrintStatus "ImpulswertigkeitRZ: " & ImpulswertigkeitRZ
If m_Pruefzeit < 60 Then
PrintStatus "Prüfzeit dieses PP (" & m_Pruefzeit & "s) auf 60 s korrigiert."
m_Pruefzeit = 60
End If
' AnzahlPeriodenPZ = (m_Pruefzeit / 3600) * m_DurchflussSoll * m_ImpulswertigkeitPZ
' PrintStatus "unkorrigierter AnzahlPeriodenPZ: " & AnzahlPeriodenPZ
' AnzahlPeriodenPZNeu = Int(AnzahlPeriodenPZ / 10 + 0.9) * 10
' If AnzahlPeriodenPZNeu < 20 Then
' DebugMsg "Anzahl der Perioden (" & AnzahlPeriodenPZNeu & ") auf 20 Pulse korrigiert."
' AnzahlPeriodenPZNeu = 20
' End If
' PrintStatus "AnzahlPeriodenPZNeu: " & AnzahlPeriodenPZNeu
' Korrekturwert = AnzahlPeriodenPZNeu / AnzahlPeriodenPZ
' PrintStatus "AnzahlPeriodenPZNeu / AnzahlPeriodenPZ = Korrekturwert= " & Korrekturwert
' AnzahlPeriodenRZ = (m_Pruefzeit / 3600) * m_DurchflussSoll * ImpulswertigkeitRZ '* Korrekturwert
' AnzahlPeriodenPZ = AnzahlPeriodenPZNeu
' PrintStatus "Perioden RZ: " & AnzahlPeriodenRZ
' PrintStatus "AnzahlPeriodenRZ an FM85: " & Hex(AnzahlPeriodenRZ) & "M"
' m_FMBus.send Hex(AnzahlPeriodenRZ) & "M"
' If m_FMBus.receive(500) <> "" Then
' PrintStatus "Warnung: Periodenzahl RZ " & AnzahlPeriodenRZ & " für FM85 ausserhalb des zulässigen Bereiches"
' End If
' PrintStatus "Perioden PZ: " & AnzahlPeriodenPZ
' PrintStatus "AnzahlPeriodenPZ an FM85: " & Hex(AnzahlPeriodenPZ) & "H"
' m_FMBus.send Hex(AnzahlPeriodenPZ) & "H"
' If m_FMBus.receive(500) <> "" Then
' PrintStatus "Warnung: Periodenzahl PZ " & AnzahlPeriodenPZ & " für FM85 ausserhalb des zulässigen Bereiches"
' End If
' m_FMBus.dialog "**" & Hex(m_ersterPruefzaehlerNr) & "@", "FM85"
' If g_Abbruch Then
' Exit Sub
' End If
' m_FMBus.send "42 "
' If Mid(m_FMBus.receive(500), 6, 2) <> "00" Then
' If MsgBox("FM85 Fehlerbyte ist nicht '00'" & vbCrLf & "Möchten Sie weitermachen", vbYesNo, "FM85 Fehler") = vbYes Then
' Else
' Todo: Allgemeine Abbruchfunktion
' Prüfung abbrechen
' Call Abbruch
' Exit Sub
' End If
' End If
''''''''''''''''''''''''''''''''''''''''''''
' FM85 Nr: 7 Referenzähler Vergleich:
PrintStatus "Impulswertigkeit RefZ A: " & m_ReferenzzaehlerA.ImpulseQM
AnzahlPeriodenRZA = (m_Pruefzeit / 3600) * m_DurchflussSoll * (m_ReferenzzaehlerA.ImpulseQM) '* Korrekturwert
If g_App.Settings.getAnzahlMIDGruppen > 1 Then
PrintStatus "Impulswertigkeit RefZ B: " & m_ReferenzzaehlerB.ImpulseQM
AnzahlPeriodenRZB = (m_Pruefzeit / 3600) * m_DurchflussSoll * (m_ReferenzzaehlerB.ImpulseQM) '* Korrekturwert
' FM85 für Referenzzähler Vergleich Nr 7 setzen
' Adressieren
m_FMBus.dialog "**" & Hex(g_FM85RefZAdresse) & "@", "FM85P"
If g_Abbruch Then
Exit Sub
End If
m_FMBus.send "R"
m_FMBus.receive (500)
sleep 1000, True
' Adressieren
m_FMBus.send "**" & Hex(g_FM85RefZAdresse) & "@"
m_FMBus.receive (500)
' Todo: Multiplikator
sendonly "1s"
' keine Doppelimpulssprerre
sendonly "G"
' Doppelimpuls-Zeit
sendonly "0000S"
' Dämpfung
sendonly "3T"
' Todo: K Wert für beide Referenzzähler sollte immer 1 sein
sendonly Trim("1000K+1") ' entspricht k* 0.1000 * 10 ^1 = K = 1
' Referenzzähler A
PrintStatus "Anzahl der Perioden RZA: " & AnzahlPeriodenRZA
m_FMBus.send Hex(AnzahlPeriodenRZA) & "M"
If m_FMBus.receive(500) <> "" Then
PrintStatus "Warnung: Periodenzahl RZA " & AnzahlPeriodenRZA & " für FM85 ausserhalb des zulässigen Bereiches"
End If
' Referenzzähler B
PrintStatus "Anzahl der Perioden RZB: " & AnzahlPeriodenRZB
m_FMBus.send Hex(AnzahlPeriodenRZB) & "H"
If m_FMBus.receive(500) <> "" Then
PrintStatus "Warnung: Periodenzahl RZB " & AnzahlPeriodenRZB & " für FM85 ausserhalb des zulässigen Bereiches"
End If
m_FMBus.send "**" & Hex(g_FM85RefZAdresse) & "@"
m_FMBus.receive (500)
m_FMBus.send "42 "
If Mid(m_FMBus.receive(500), 6, 2) <> "00" Then
If MsgBox("FM85 Nr.7 Fehlerbyte ist nicht '00'" & vbCrLf & "Möchten Sie weitermachen", vbYesNo) = vbYes Then
Else
Call Abbruch
Exit Sub
End If
End If
End If '2 RefZ
End Sub
Private Sub PrintStatus(sText As String)
If Len(txtStatus.Text & sText) > 32768 Then
txtStatus.Text = ""
End If
txtStatus.Text = txtStatus.Text & sText & vbCrLf
txtStatus.SelStart = Len(txtStatus.Text)
DebugMsg sText
DoEvents
End Sub
Private Sub sendonly(Text)
m_FMBus.send (Text)
m_FMBus.receive (500)
End Sub
Private Function FehlerSpeichern(Fehler As Double, Pruefzaehler As CPruefzaehler, Pruefgang As CPruefgang, Pruefpunkt As CPruefpunkt, PruefpunktCol As CPruefpunktCol)
On Error GoTo FehlerSpeichernError
Dim PruefgangNr As Long
Dim SerienNr As Long
Dim PPNr As Integer
Dim rs As CRecordset
Dim Feldname As String
Dim sSQL As String
PruefgangNr = Pruefgang.PruefgangNr
SerienNr = Pruefzaehler.getSerienNr
PPNr = PruefpunktCol.ItemNr(Pruefpunkt)
Set rs = New CRecordset
sSQL = "SELECT * from Prueffehler where PruefgangNr=" & PruefgangNr & " and SerienNr=" & SerienNr & ";"
rs.openRS (sSQL)
If rs.EOF Then
rs.addNew
End If
Call rs.setValue("SerienNr", SerienNr)
Call rs.setValue("PruefgangNr", PruefgangNr)
Feldname = "PP" & CStr(PPNr) & "_Fehler"
Call rs.setValue(Feldname, Fehler)
Call rs.setValue("PruefDatum", Now)
Call rs.update
FehlerSpeichern = True
Exit Function
FehlerSpeichernError:
MsgBox ("FehlerSpeichern fehlgeschlagen: " & Err.Description)
End Function
'
' @return Mittelwert der beiden Fehler-Werte, die am nächsten beieinander liegen,
' sonst Mittelwert aus allen drei Fehler-Werten.
'
Private Function MittelwertDerFehlerOhneAusreisser(Fehler0 As Double, Fehler1 As Double, Fehler2 As Double) As Double
Dim d0 As Double
Dim d1 As Double
Dim d2 As Double
' Abstände bestimmen
d0 = Abs(Fehler0 - Fehler1)
d1 = Abs(Fehler0 - Fehler2)
d2 = Abs(Fehler1 - Fehler2)
' Sonderfall wenn mind. 2 von 3 Abständen gleich
MittelwertDerFehlerOhneAusreisser = (Fehler0 + Fehler1 + Fehler2) / 3
' Sonderfall wenn Abstand zw. F0 und F1 am kleinsten
If d0 < d1 And d0 < d2 Then
MittelwertDerFehlerOhneAusreisser = (Fehler0 + Fehler1) / 2
End If
' Sonderfall wenn Abstand zw. F0 und F2 am kleinsten
If d1 < d0 And d1 < d2 Then
MittelwertDerFehlerOhneAusreisser = (Fehler0 + Fehler2) / 2
End If
' Sonderfall wenn Abstand zw. F1 und F2 am kleinsten
If d2 < d0 And d2 < d1 Then
MittelwertDerFehlerOhneAusreisser = (Fehler1 + Fehler2) / 2
End If
End Function
Private Sub WaageZuruecksetzen()
Dim Behaelter As CBehaelter
Dim i As Integer
Set m_Waage = g_App.getWaage
For i = 1 To 2
Set Behaelter = m_ArrayBehaelter(i)
If Behaelter.m_WaageAnwahl > 0 Then
Debug.Print "Waage " & i & ": Grenzwert=" & Behaelter.m_WaageGrenzwert & " setzen..."
m_Waage.Anwahl Behaelter.m_WaageAnwahl
sleep 1000, True
m_Waage.SetNettoGrenzwert1 Behaelter.m_WaageGrenzwert, Behaelter.m_Genauigkeit
lblGrenzwert.Caption = ""
End If
Next
End Sub
' Führt eine komplette Ultraschallzählerprüfung für einen Prüfpunkt durch.
' Übergabe der Daten durch udtPruefdaten
Private Function UltraschallPruefung(ByRef udtPruefdaten() As TypUSPruefdaten) As Long
' kein Fehler annehmen
UltraschallPruefung = 0
Dim Einbauplatz As CEinbauplatz
Dim EinbauplatzNr As Integer
Dim Zeitrahmenzaehler As Long
Dim Fehler As Long
Dim FehlerRZ As Long
Dim lngTemp As Long
Dim Stopzeitpunkt(10) As Long 'Zeitpunkt zum Stoppen des jeweiligen FM Zählers
Dim Pruefzaehler As CPruefzaehler
Dim dblTemperatur As Double
Dim StartzeitpunktRZ As Long
Dim lngReturn As Long
Dim blnHalbzeit As Boolean
Dim lngZeitpunktms As Long
Dim lngZeitpunktTemperaturmessungMs As Long
Dim i As Integer
' Bezugszeit
m_Tstart = GetTickCount()
' Starte alle Zähler
Zeitrahmenzaehler = 0
PrintStatus " Start-Phase"
PrintStatus "----------------------------------"
m_Tpruef = 0
AnzeigeAktualisieren
' Für alle Einbauplätze
For EinbauplatzNr = 1 To g_App.Settings.EinbauplaetzeJeStrang
With udtPruefdaten(EinbauplatzNr)
.Stopzeitpunkt = 0
.Fehlerinfo = ""
.blnPruefungsfehler = False
' Soll dieser Zähler geprüft werden
If .SollPruefzeit_s > 0 Then
Set Einbauplatz = m_colEinbauplatz(EinbauplatzNr)
Set Pruefzaehler = Einbauplatz.getPruefzaehler
' Temperatur für diese Ultraschallzählung messen und im Rechenwerk setzten
dblTemperatur = m_SPS.GetEinlaufTemperatur
' Todo: nur im Bedarfsfall, wenn Zaehler T nicht selbst misst
lngReturn = USSetTemperatur(EinbauplatzNr, dblTemperatur)
If lngReturn = 0 Then
PrintStatus "Temperatur '" & dblTemperatur & "' messen und setzten für Einbauplatz " & EinbauplatzNr
Else
PrintStatus "Fehler: Temperatur '" & dblTemperatur & "' messen und setzten für Einbauplatz " & EinbauplatzNr & " fehlgschlagen!"
.Fehlerinfo = .Fehlerinfo & "Temperatur konnte nicht gesetzt werden für Einbauplatz " & EinbauplatzNr & vbCrLf
.blnPruefungsfehler = True
End If
' Eine Prüfzeit für alle Zähler aus dem ersten zu prüfenden Zähler
' Notwendig, da alle Zähler der Einbauplatz-Reihe nach gestartet und gestopt werden.
If m_Tpruef = 0 Then
m_Tpruef = udtPruefdaten(EinbauplatzNr).SollPruefzeit_s * 1000
End If
PrintStatus "Zähler-Einbauplatz: " & EinbauplatzNr
' mit Beginn eines Zeitrahmens synchronisieren
Do
Zeitrahmenzaehler = Zeitrahmenzaehler + 1
' Stopzeitpunkt dieses Zählers bestimmen
' RZ Zaehler starten
PrintStatus "RZ soll zum Zeitpunkt " & Zeitrahmenzaehler * ZEITRAHMENDAUER & " starten"
Fehler = StarteRZZaehlerZumZeitpunkt(EinbauplatzNr, m_Tstart + Zeitrahmenzaehler * ZEITRAHMENDAUER, .RZ_START_Rueckkehrzeitpunkt, lngZeitpunktms)
' Todo Zeitpunkt in Funktion einbauen
udtPruefdaten(EinbauplatzNr).StartzeitpunktRZ = .RZ_START_Rueckkehrzeitpunkt
PrintStatus lngZeitpunktms - m_Tstart & " RZ_START begonnen"
PrintStatus .RZ_START_Rueckkehrzeitpunkt - m_Tstart & " RZ_START abgeschlossen"
PrintStatus "RZ_START Dauer: " & .RZ_START_Rueckkehrzeitpunkt - lngZeitpunktms
Select Case Fehler
Case KEIN_FEHLER
PrintStatus "RZ_START im Zeitrahmen " & Zeitrahmenzaehler & " OK"
Fehler = StarteUSZaehlerZumZeitpunkt(EinbauplatzNr, m_Tstart + Zeitrahmenzaehler * ZEITRAHMENDAUER + DELTA_START, .NOWA_START_Rueckkehrzeitpunkt, lngZeitpunktms)
PrintStatus lngZeitpunktms - m_Tstart & " NOWA_START begonnen"
PrintStatus .NOWA_START_Rueckkehrzeitpunkt - m_Tstart & " NOWA_START abgeschlossen"
Select Case Fehler
Case KEIN_FEHLER
' hat geklappt
PrintStatus "NOWA_START im Zeitrahmen " & Zeitrahmenzaehler & " OK"
' nur bei erfolgreichem Start den Stopzeitpunkt setzen
.Stopzeitpunkt = m_Tstart + (Zeitrahmenzaehler * ZEITRAHMENDAUER) + m_Tpruef
PrintStatus "RZ soll zum Zeitpunkt " & .Stopzeitpunkt - m_Tstart & " gestopt werden"
DoEvents
Case FEHLER_ZUSPAET
PrintStatus lngZeitpunktms & " Zeitfenster für Start des US-Zähler verpasst. DELTA_START zu niedrig?"
Case Else
PrintStatus "Fehlercode beim Starten des US-Zählers: " & Fehler
.Fehlerinfo = .Fehlerinfo & "Fehlercode beim Starten des US-Zählers " & EinbauplatzNr & ".Fehler:" & Fehler & vbCrLf
.blnPruefungsfehler = True
End Select
Case FEHLER_ZUSPAET
PrintStatus " Zeitfenster für Start des RZ-Zähler " & EinbauplatzNr & " verpasst."
Case KEINE_ANTWORT_FEHLER
PrintStatus " keine Antwort beim Starten des RZ-Zählers " & EinbauplatzNr
.Fehlerinfo = .Fehlerinfo & "keine Antwort beim Starten des RZ-Zählers " & EinbauplatzNr & vbCrLf
.blnPruefungsfehler = True
End Select
Loop While Fehler = FEHLER_ZUSPAET
PrintStatus "----------------------------------"
End If ' SollPruefzeit_s > 0
End With
Next EinbauplatzNr
Do
sleep 1000, True
' Verbleibende Zeit 1s bis zum Zeitrahmen vor dem ersten Stop
lngTemp = m_Tpruef + m_Tstart - (1 * ZEITRAHMENDAUER) - GetTickCount()
AnzeigeAktualisieren
' Bis 3s vor Ende Temperatur in alle Zähler schreiben
If lngTemp > 3000 Then
UpdateTemperaturInZaehler
End If
' Halbzeit nur einmal abwarten
If Not blnHalbzeit And m_Tpruef / 2 + m_Tstart < GetTickCount Then
blnHalbzeit = True
dblTemperatur = m_SPS.GetEinlaufTemperatur
PrintStatus "Halbzeit Temperatur=" & Format(dblTemperatur, "0.00") & "°C"
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If Not Pruefzaehler Is Nothing Then
EinbauplatzNr = Einbauplatz.getNr
' Halbzeit-Temperatur merken
udtPruefdaten(EinbauplatzNr).dblTemperatur = dblTemperatur
End If ' Pruefzaehler is nothing
Next Einbauplatz
End If
DoEvents
If g_Abbruch Then
Exit Function
End If
Loop While lngTemp > 1000 'Zeit bis zum Ende
PrintStatus "----------------------------------"
PrintStatus GetTickCount - m_Tstart & " Stop-Phase"
' alle US-Zähler und MIDs Stoppen
Zeitrahmenzaehler = 0
For EinbauplatzNr = 1 To g_App.Settings.EinbauplaetzeJeStrang
With udtPruefdaten(EinbauplatzNr)
.RZ_IstPruefzeit_ms = 0
.US_IstPruefzeit_ms = 0
If .Stopzeitpunkt <> 0 Then 'Wenn Stopzeit <> 0 dann war Start für diesen Zähler erfolgreich
PrintStatus "Zähler-Einbauplatz: " & EinbauplatzNr
Do
PrintStatus "Warte auf Zeitpunkt zum Stopen des RZ: " & .Stopzeitpunkt + Zeitrahmenzaehler * ZEITRAHMENDAUER - m_Tstart
FehlerRZ = StoppeRZZaehlerZumZeitpunkt(EinbauplatzNr, .Stopzeitpunkt + Zeitrahmenzaehler * ZEITRAHMENDAUER, .RZ_STOP_Rueckkehrzeitpunkt, lngZeitpunktms)
PrintStatus "RZ_STOP zum Zeitpunkt " & lngZeitpunktms - m_Tstart & " begonnen"
PrintStatus "RZ_STOP zum Zeitpunkt " & .RZ_STOP_Rueckkehrzeitpunkt - m_Tstart & " abgeschlossen"
PrintStatus "RZ_STOP Dauer: " & .RZ_STOP_Rueckkehrzeitpunkt - lngZeitpunktms
.RZ_IstPruefzeit_ms = .RZ_STOP_Rueckkehrzeitpunkt - .RZ_START_Rueckkehrzeitpunkt
PrintStatus "reine RZ Prüfzeit (Rückkehr): " & .RZ_IstPruefzeit_ms
Select Case FehlerRZ
Case KEIN_FEHLER
PrintStatus "RZ_STOP im Zeitrahmen " & Zeitrahmenzaehler & " OK"
' hat geklappt
Fehler = StoppeUSZaehlerZumZeitpunkt(EinbauplatzNr, udtPruefdaten(EinbauplatzNr).Stopzeitpunkt + Zeitrahmenzaehler * ZEITRAHMENDAUER + DELTA_START + DELTA_FM, .NOWA_STOP_Rueckkehrzeitpunkt, lngZeitpunktms)
PrintStatus lngZeitpunktms - m_Tstart & " NOWA_STOP begonnen"
PrintStatus .NOWA_STOP_Rueckkehrzeitpunkt - m_Tstart & " NOWA_STOP abgeschlossen"
' .RZ_IstPruefzeit_ms = .Stopzeitpunkt + Zeitrahmenzaehler * ZEITRAHMENDAUER + DELTA_START + DELTA_FM
' .US_IstPruefzeit_ms = .RZ_STOP_Rueckkehrzeitpunkt - .RZ_START_Rueckkehrzeitpunkt
.RZ_IstPruefzeit_ms = .RZ_STOP_Rueckkehrzeitpunkt - .RZ_START_Rueckkehrzeitpunkt
PrintStatus "reine RZ Pruefzeit (Rückkehr): " & .RZ_IstPruefzeit_ms
Select Case Fehler
Case KEIN_FEHLER
' hat geklappt
PrintStatus " NOWA_STOP für Einbauplatz " & EinbauplatzNr & " OK"
' .US_IstPruefzeit_ms = .Stopzeitpunkt + Zeitrahmenzaehler * ZEITRAHMENDAUER + DELTA_START + DELTA_FM
.US_IstPruefzeit_ms = .NOWA_STOP_Rueckkehrzeitpunkt - .NOWA_START_Rueckkehrzeitpunkt
PrintStatus "reine NOWA Zeit (Rückkehr): " & .US_IstPruefzeit_ms
DoEvents
Case FEHLER_ZUSPAET
' Dieses Volumen kann nicht mehr synchron gemessen werden
Debug.Print " Zeitfenster für Stopp des US-Zählers " & EinbauplatzNr & " verpasst."
.Fehlerinfo = .Fehlerinfo & "Zeitfenster für Stopp des US-Zählers verpasst." & vbCrLf
.blnPruefungsfehler = True
Case Else
' Dieses Volumen kann nicht mehr synchron gemessen werden
.Fehlerinfo = .Fehlerinfo & "Fehler beim Stoppen des RZ-Zählers für EinbauplatzNr " & EinbauplatzNr & ". IECCOM-Fehler: " & Fehler & vbCrLf
Debug.Print " Fehler beim Stoppen des RZ-Zählers für EinbauplatzNr " & EinbauplatzNr & ". IECCOM-Fehler: " & Fehler & vbCrLf
.blnPruefungsfehler = True
End Select
Case FEHLER_ZUSPAET
PrintStatus GetTickCount - m_Tstart & " Zeitfenster für Stopp des RZ-Zähler " & EinbauplatzNr & " verpasst."
Zeitrahmenzaehler = Zeitrahmenzaehler + 1
Case Else
' Dieses Volumen kann nicht mehr geprüft werden
.Fehlerinfo = .Fehlerinfo & "Fehler '" & Fehler & "' beim stoppen des RZ-Zählers für Einbauplatznr " & EinbauplatzNr & vbCrLf
.RZ_IstPruefzeit_ms = 0
.blnPruefungsfehler = True
End Select
Loop While FehlerRZ = FEHLER_ZUSPAET
PrintStatus "----------------------------------"
End If ' Stopzeitpunkt <> 0
End With
Next EinbauplatzNr
AnzeigeAktualisieren
End Function
Private Function StarteUSundRZZaehler(EinbauplatzNr As Integer, Optional lngIdentNrForVeriaction As Long = -1) As Long
Dim US_COM_Port As Integer
US_COM_Port = g_App.Settings.getUSComPort(EinbauplatzNr)
m_FMBus.send "**" & EinbauplatzNr & "@"
If m_FMBus.receive(500) = "" Then
PrintStatus "Fehler in StarteUSundRZZaehler mit FM85 an Einbauplatz " & EinbauplatzNr & ": keine Antwort"
StarteUSundRZZaehler = KEINE_ANTWORT_FEHLER
Exit Function
End If
m_FMBus.send "O"
StarteUSundRZZaehler = modIECCOM.NOWA_START(US_COM_Port)
If StarteUSundRZZaehler <> 0 Then
PrintStatus "modIECCOM.NOWA_START Return-Wert:" & StarteUSundRZZaehler
Exit Function
End If
End Function
Private Function StoppeUSundRZZaehler(EinbauplatzNr As Integer, Optional lngIdentNrForVeriaction As Long = -1) As Long
Dim US_COM_Port As Integer
US_COM_Port = g_App.Settings.getUSComPort(EinbauplatzNr)
m_FMBus.send "**" & EinbauplatzNr & "@"
If m_FMBus.receive(500) = "" Then
StoppeUSundRZZaehler = KEINE_ANTWORT_FEHLER
Exit Function
End If
m_FMBus.send "q"
StoppeUSundRZZaehler = modIECCOM.NOWA_STOP(US_COM_Port, lngIdentNrForVeriaction)
If StoppeUSundRZZaehler <> 0 Then
Exit Function
End If
End Function
Private Function StarteRZZaehlerZumZeitpunkt(EinbauplatzNr As Integer, Zeitpunkt As Long, Rueckkehrzeitpunkt As Long, Optional ByRef lngZeitpunktms As Long) As Long
If g_testModus Then
Rueckkehrzeitpunkt = Zeitpunkt + 30
StarteRZZaehlerZumZeitpunkt = 0
Exit Function
End If
m_FMBus.send "**" & EinbauplatzNr & "@"
If m_FMBus.receive(500) = "" Then
StarteRZZaehlerZumZeitpunkt = KEINE_ANTWORT_FEHLER
Exit Function
End If
StarteRZZaehlerZumZeitpunkt = FEHLER_ZUSPAET ' zu Spät
Do While Zeitpunkt > GetTickCount()
StarteRZZaehlerZumZeitpunkt = KEIN_FEHLER
Loop
If StarteRZZaehlerZumZeitpunkt = FEHLER_ZUSPAET Then
' zu spät
Exit Function
End If
lngZeitpunktms = GetTickCount()
m_FMBus.send "O"
Rueckkehrzeitpunkt = GetTickCount()
End Function
Private Function StoppeRZZaehlerZumZeitpunkt(EinbauplatzNr As Integer, Zeitpunkt As Long, Rueckkehrzeitpunkt As Long, Optional ByRef lngZeitpunktms As Long) As Long
If g_testModus Then
Rueckkehrzeitpunkt = Zeitpunkt + 30
StoppeRZZaehlerZumZeitpunkt = 0
Exit Function
End If
m_FMBus.send "**" & EinbauplatzNr & "@"
If m_FMBus.receive(500) = "" Then
StoppeRZZaehlerZumZeitpunkt = KEINE_ANTWORT_FEHLER
Exit Function
End If
If Not m_PruefungsArtWaage Then
StoppeRZZaehlerZumZeitpunkt = FEHLER_ZUSPAET ' zu Spät
Do While Zeitpunkt > GetTickCount()
StoppeRZZaehlerZumZeitpunkt = KEIN_FEHLER
Loop
If StoppeRZZaehlerZumZeitpunkt = FEHLER_ZUSPAET Then
' zu spät
Exit Function
End If
End If
lngZeitpunktms = GetTickCount
m_FMBus.send "q"
Rueckkehrzeitpunkt = GetTickCount
End Function
Private Function StoppeUSZaehlerZumZeitpunkt(EinbauplatzNr As Integer, Zeitpunkt As Long, Rueckkehrzeitpunkt As Long, Optional ByRef lngZeitpunktms As Long) As Long
Dim US_COM_Port As Integer
Rueckkehrzeitpunkt = GetTickCount
lngZeitpunktms = GetTickCount
Debug.Print "Zeit bis zum US-Zähler Stoppen:" & Zeitpunkt - GetTickCount()
US_COM_Port = g_App.Settings.getUSComPort(EinbauplatzNr)
If Not m_PruefungsArtWaage Then
StoppeUSZaehlerZumZeitpunkt = FEHLER_ZUSPAET ' zu Spät
Do While Zeitpunkt > GetTickCount()
StoppeUSZaehlerZumZeitpunkt = KEIN_FEHLER
Loop
If StoppeUSZaehlerZumZeitpunkt = FEHLER_ZUSPAET Then
' zu spät
Exit Function
End If
End If
lngZeitpunktms = GetTickCount
StoppeUSZaehlerZumZeitpunkt = modIECCOM.NOWA_STOP(US_COM_Port)
Rueckkehrzeitpunkt = GetTickCount
End Function
' Rückgabe: 0 wenn kein Fehler
Private Function StarteUSZaehlerZumZeitpunkt(EinbauplatzNr As Integer, Zeitpunkt As Long, Rueckkehrzeitpunkt As Long, Optional ByRef lngZeitpunktms As Long) As Long
Dim US_COM_Port As Integer
StarteUSZaehlerZumZeitpunkt = FEHLER_ZUSPAET ' Zu spät
US_COM_Port = g_App.Settings.getUSComPort(EinbauplatzNr)
Do While Zeitpunkt > GetTickCount()
StarteUSZaehlerZumZeitpunkt = KEIN_FEHLER
Loop
If StarteUSZaehlerZumZeitpunkt = FEHLER_ZUSPAET Then
' zu spät
Exit Function
End If
lngZeitpunktms = GetTickCount
StarteUSZaehlerZumZeitpunkt = modIECCOM.NOWA_START(US_COM_Port)
Rueckkehrzeitpunkt = GetTickCount
End Function
Private Function Funktionspruefung() As Long
Dim QIst As Double
Dim udtPruefdaten_imPP_mitEBP(10) As TypUSPruefdaten
Dim Einbauplatz As CEinbauplatz
Dim EinbauplatzNr As Integer
Dim Pruefzaehler As CPruefzaehler
Dim dblTemperatur As Double
Dim ComPort As Integer
Dim lngReturn As Long
Dim dtmMessDauer As Date
Dim dblEnergie As Double
Dim dblResult As Double
Dim dblDeltaT_US As Double
lstPruefpunkte.Clear
strFunktionsPruefungMsg = ""
TestAutomatik:
If Not m_SPS.IstAutomatik Then
Dummy = MsgBox("Bitte SPS auf Automatik stellen", vbOKCancel)
If Dummy = vbCancel Then
endDialog (IDCANCEL)
Exit Function
End If
GoTo TestAutomatik
End If
If Not m_SPS.IstStreckePruefbereit Then
' Betrieb Vorbereiten
m_SPS.setBetrieb 1
PrintStatus "Betrieb vorbereiten: Spannen und Füllen..."
Do While Not m_SPS.IstStreckeGefuellt
sleep 1000, True
If g_Abbruch = True Then
Exit Function
End If
Loop
' nach dem Füllen: Betrieb auf 0
sleep 500
m_SPS.setBetrieb 0
End If
If Not m_SPS.IstStreckePruefbereit Then
' Betrieb Vorbereiten
m_SPS.setBetrieb 1
PrintStatus "Betrieb vorbereiten: Spannen und Füllen..."
Do While Not m_SPS.IstStreckeGefuellt
sleep 1000, True
If g_Abbruch = True Then
Exit Function
End If
Loop
' nach dem Füllen: Betrieb auf 0
sleep 500
m_SPS.setBetrieb 0
PrintStatus "Warte auf Pruefbereitschaft der SPS..."
Do While Not m_SPS.IstStreckePruefbereit
sleep 1000, True
If g_Abbruch = True Then
Exit Function
End If
Loop
End If ' Pruefbereit
PrintStatus "Strecke ist Prüfbereit !"
PrintStatus "***** Funktionsprüfung ******"
'------------------------------------------------------------------------
m_Pruefzeit = g_App.Settings.GetUSFunktionspruefung_Pruefzeit()
Set m_Pruefpunkt = m_colUniquePP.getCollection.Item(1)
m_DurchflussSoll = m_Pruefpunkt.getQ
lstPruefpunkte.AddItem m_DurchflussSoll
PrintStatus "Durchfluss Soll=" & m_DurchflussSoll
Set m_Referenzzaehler = New CRefzaehler
Call m_Referenzzaehler.loadForDurchfluss(m_DurchflussSoll, g_App.Settings.getMIDGruppe)
m_SPS.SetQDiff 0
m_SPS.SetQSoll 0
sleep 1000
m_SPS.setBetrieb 0
sleep 1000
m_DurchflussSoll = m_colUniquePP.getCollection.Item(1).getQ
lblQSoll.Caption = m_DurchflussSoll
' Pumpe, MID, Regelart
Call initSPSfuerPP
Call DurchflussLstAktualisieren
Call initSPSfuerDurchlauf
' Vergleichsprüfung gegen RefZ.: Betrieb starten
m_SPS.setBetrieb 2
' auf konsten Durchfluß warten
PrintStatus "Warten auf Solldurchfluß erreicht..."
If Not g_testModus Then
Do While Not m_SPS.SolldurchflussErreicht
lblQIst.Caption = Format(m_SPS.getQIst, "0.000")
sleep 500, True
If g_Abbruch = True Then
Exit Function
End If
Loop
End If
'------------------------------------
' ' Durchflußanzeige RefIstWert korrigiert
If Not g_testModus Then
QIst = m_SPS.getQIst
Else
QIst = 99
End If
PrintStatus "Solldurchfluss erreicht bei Q=" & Format(QIst, "0.000")
lblQIst.Caption = Format(QIst, "0.000")
mdblToleranzEnergie = g_App.Settings.GetUSFunktionspruefung_Toleranz
mdblToleranzDeltaT = g_App.Settings.GetUSFunktionspruefung_GetDelta_T
For Each Einbauplatz In m_colEinbauplatz
EinbauplatzNr = Einbauplatz.getNr
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If (Not Pruefzaehler Is Nothing) Then
ComPort = g_App.Settings.getUSComPort(EinbauplatzNr)
mudtMessDaten(EinbauplatzNr).intPortNr = ComPort
PrintStatus "Vorbereitung der Funktionssprüfung für Einbauplatz " & EinbauplatzNr & " am COMPort " & ComPort
If ResetTemperaturTransferLock(ComPort) <> 0 Then
strFunktionsPruefungMsg = strFunktionsPruefungMsg & "Temperatur unlock fehlgeschlagen für Einbauplatz " & EinbauplatzNr & vbCrLf
PrintStatus "Temperatur unlock fehlgeschlagen für Einbauplatz " & EinbauplatzNr
End If
Else
mudtMessDaten(EinbauplatzNr).intPortNr = 0
End If
'Alle Werte löschen
mudtMessDaten(EinbauplatzNr).dtmStartZeit = 0
mudtMessDaten(EinbauplatzNr).dtmStopZeit = 0
mudtMessDaten(EinbauplatzNr).dblStartDeltaT = 0
mudtMessDaten(EinbauplatzNr).dblStopDeltaT = 0
' mudtMessDaten(EinbauplatzNr).dblStartEnergy = 0
mudtMessDaten(EinbauplatzNr).dblStopEnergy = 0
' mudtMessDaten(EinbauplatzNr).dblStartVolume = 0
mudtMessDaten(EinbauplatzNr).dblStopVolume = 0
mudtMessDaten(EinbauplatzNr).blnDeltaT_OK = False
mudtMessDaten(EinbauplatzNr).blnEnergy_OK = False
Next
For Each Einbauplatz In m_colEinbauplatz
EinbauplatzNr = Einbauplatz.getNr
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If (Not Pruefzaehler Is Nothing) Then
ComPort = g_App.Settings.getUSComPort(EinbauplatzNr)
lngReturn = USSetTemperatureLock(Einbauplatz.getNr, False)
If lngReturn = 0 Then
lngReturn = modIECCOM.NOWA_START(ComPort)
If lngReturn <> 0 Then
strFunktionsPruefungMsg = strFunktionsPruefungMsg & "NOWA_START für Einbauplatz " & EinbauplatzNr & " fehlgeschlagen" & vbCrLf
PrintStatus "NOWA_START für Einbauplatz " & EinbauplatzNr & " fehlgeschlagen" & vbCrLf
Else
PrintStatus "NOWA_START am Einbauplatz" & EinbauplatzNr
mudtMessDaten(EinbauplatzNr).dtmStartZeit = GetTime()
lngReturn = Get_T_fp(ComPort, enuTemp_DeltaVorlaufRuecklauf, dblResult)
If lngReturn <> 0 Then
strFunktionsPruefungMsg = strFunktionsPruefungMsg & "Fehler beim Auslesen der Temperaturdifferenz für " & EinbauplatzNr & vbCrLf
PrintStatus "Fehler beim Auslesen der Temperaturdifferenz für " & EinbauplatzNr & vbCrLf
Else
PrintStatus "Einbauplatz" & EinbauplatzNr & " dblStartDeltaT: " & dblResult
mudtMessDaten(EinbauplatzNr).dblStartDeltaT = dblResult
End If
End If ' NOWA_START OK
Else
PrintStatus "unset Temperature Lock am Einbauplatz " & EinbauplatzNr & " fehlgeschlagen"
strFunktionsPruefungMsg = strFunktionsPruefungMsg & "unset Temperature Lock am Einbauplatz " & EinbauplatzNr & " fehlgeschlagen" & vbCrLf
End If ' Temperatur Lock
End If 'Pruefzaehler Is Nothing
Next 'Einbauplatz
PrintStatus "Messung dauert " & m_Pruefzeit & " Sekunden"
Call sleep(m_Pruefzeit * 1000, True)
For Each Einbauplatz In m_colEinbauplatz
EinbauplatzNr = Einbauplatz.getNr
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If (Not Pruefzaehler Is Nothing) Then
ComPort = g_App.Settings.getUSComPort(EinbauplatzNr)
lngReturn = modIECCOM.NOWA_STOP(ComPort)
If lngReturn <> 0 Then
strFunktionsPruefungMsg = strFunktionsPruefungMsg & "NOWA_STOP fehlgeschlagen am Einbauplatz " & EinbauplatzNr
PrintStatus "NOWA_STOP fehlgeschlagen am Einbauplatz " & EinbauplatzNr
Else
mudtMessDaten(Einbauplatz.getNr).dtmStopZeit = GetTime()
PrintStatus "NOWA_STOP am Einbauplatz " & EinbauplatzNr
End If
End If
Next
m_SPS.SetQSoll 0
sleep 1000
m_SPS.setBetrieb 0
For Each Einbauplatz In m_colEinbauplatz
EinbauplatzNr = Einbauplatz.getNr
Set Pruefzaehler = Einbauplatz.getPruefzaehler
ComPort = g_App.Settings.getUSComPort(EinbauplatzNr)
If (Not Pruefzaehler Is Nothing) Then
lngReturn = Get_T_fp(ComPort, enuTemp_DeltaVorlaufRuecklauf, dblResult)
If lngReturn <> 0 Then
strFunktionsPruefungMsg = strFunktionsPruefungMsg & "Fehler beim Auslesen der Temperaturdifferenz im Einbauplatz " & EinbauplatzNr & vbCrLf
PrintStatus "Fehler beim Auslesen der Temperaturdifferenz im Einbauplatz " & EinbauplatzNr & vbCrLf
Else
PrintStatus "StopDeltaT = " & Format(dblResult, "0.00") & " am Einbauplatz " & EinbauplatzNr
mudtMessDaten(EinbauplatzNr).dblStopDeltaT = dblResult
lngReturn = Get_NOWA_energy(ComPort, dblResult)
If lngReturn <> 0 Then
strFunktionsPruefungMsg = strFunktionsPruefungMsg & "Fehler beim Auslesen des Energiewertes im Einbauplatz " & EinbauplatzNr & vbCrLf
PrintStatus "Fehler beim Auslesen des Energiewertes im Einbauplatz " & EinbauplatzNr & vbCrLf
Else
PrintStatus "NOWA_Energie= " & dblResult & " am Einbauplatz " & EinbauplatzNr
mudtMessDaten(EinbauplatzNr).dblStopEnergy = dblResult
lngReturn = Get_NOWA_volume_fp(ComPort, dblResult)
If lngReturn <> 0 Then
strFunktionsPruefungMsg = strFunktionsPruefungMsg & "Fehler beim Auslesen des Volumens im Einbauplatz " & EinbauplatzNr & vbCrLf
PrintStatus "Fehler beim Auslesen des Volumens im Einbauplatz " & EinbauplatzNr
Else
PrintStatus "dblStopVolume= " & Format(dblResult, "0.00") & " am Einbauplatz " & EinbauplatzNr
mudtMessDaten(EinbauplatzNr).dblStopVolume = dblResult
' Energie OK ?
mudtMessDaten(EinbauplatzNr).blnEnergy_OK = isEnergyOK(mudtMessDaten(EinbauplatzNr).dblStopVolume, mudtMessDaten(EinbauplatzNr).dblStopEnergy, _
mudtMessDaten(EinbauplatzNr).dblStartDeltaT, mudtMessDaten(EinbauplatzNr).dblStopDeltaT, _
dtmMessDauer)
PrintStatus "- - - - - - "
PrintStatus "Einbauplatz " & EinbauplatzNr
'Alle Werte anzeigen
PrintStatus "Comport " & mudtMessDaten(EinbauplatzNr).intPortNr
PrintStatus "dtmStartZeit " & mudtMessDaten(EinbauplatzNr).dtmStartZeit
PrintStatus "dtmStopZeit " & mudtMessDaten(EinbauplatzNr).dtmStopZeit
PrintStatus "dblStartDeltaT " & Format(mudtMessDaten(EinbauplatzNr).dblStartDeltaT, "0.00")
PrintStatus "dblStopDeltaT " & mudtMessDaten(EinbauplatzNr).dblStopDeltaT
' mudtMessDaten(EinbauplatzNr).dblStartEnergy = 0
PrintStatus "dblStopEnergy " & Format(mudtMessDaten(EinbauplatzNr).dblStopEnergy, "0.00")
' mudtMessDaten(EinbauplatzNr).dblStartVolume = 0
PrintStatus "dblStopVolume " & Format(mudtMessDaten(EinbauplatzNr).dblStopVolume, "0.00")
'PrintStatus "blnDeltaT_OK " & mudtMessDaten(EinbauplatzNr).blnDeltaT_OK
PrintStatus "blnEnergy_OK " & mudtMessDaten(EinbauplatzNr).blnEnergy_OK
'If Not DeltaT_Difference_OK(mudtMessDaten(EinbauplatzNr).intPortNr) Then
'Fehlerabweichung zu groß
' strFunktionsPruefungMsg = strFunktionsPruefungMsg & "DeltaT Fehlerabweichung am Einbauplatz " & EinbauplatzNr & " zu groß" & vbCrLf
'PrintStatus "DeltaT Fehlerabweichung am Einbauplatz " & EinbauplatzNr & " zu groß" & vbCrLf
'Else
'mudtMessDaten(Einbau).blnDeltaT_OK = True
'End If
End If 'Get_NOWA_volume_fp lngReturn <> 0
End If ' Get_NOWA_energy lngReturn <> 0
End If ' Get_T_fp lngReturn <> 0
End If 'not Pruefzaehler Is Nothing
Next ' Einbauplatz
m_SPS.SetQSoll 0
For Each Einbauplatz In m_colEinbauplatz
EinbauplatzNr = Einbauplatz.getNr
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If (Not Pruefzaehler Is Nothing) Then
If mudtMessDaten(EinbauplatzNr).dtmStopZeit > 0 And mudtMessDaten(EinbauplatzNr).dtmStartZeit > 0 Then
dtmMessDauer = mudtMessDaten(EinbauplatzNr).dtmStopZeit - mudtMessDaten(EinbauplatzNr).dtmStartZeit
dblEnergie = GetSollEnergy(mudtMessDaten(EinbauplatzNr).dblStopVolume, mudtMessDaten(EinbauplatzNr).dblStopEnergy, _
mudtMessDaten(EinbauplatzNr).dblStartDeltaT, mudtMessDaten(EinbauplatzNr).dblStopDeltaT, _
dtmMessDauer)
PrintStatus "Einbauplatz " & EinbauplatzNr & ": gerechnete Energie= " & Format(dblEnergie, "0.00") & " kWh"
PrintStatus "Einbauplatz " & EinbauplatzNr & ": NOWA Energie= " & Format(mudtMessDaten(EinbauplatzNr).dblStopEnergy, "0.00")
If mudtMessDaten(EinbauplatzNr).dblStopEnergy <> 0 Then
PrintStatus "Fehler der Energie in %: " & Format((mudtMessDaten(EinbauplatzNr).dblStopEnergy - dblEnergie) / mudtMessDaten(EinbauplatzNr).dblStopEnergy * 100, "0.00")
If (mudtMessDaten(EinbauplatzNr).dblStopEnergy - dblEnergie) / mudtMessDaten(EinbauplatzNr).dblStopEnergy > g_App.Settings.GetUSFunktionspruefung_Toleranz Then
strFunktionsPruefungMsg = strFunktionsPruefungMsg & "Einbauplatz " & EinbauplatzNr & ":"
strFunktionsPruefungMsg = strFunktionsPruefungMsg & " Die NOWA Energie weicht von der errechneten Energie ab:" & vbCrLf
strFunktionsPruefungMsg = strFunktionsPruefungMsg & " errechnete Energie= " & Format(dblEnergie, "0.00") & " kWh" & vbCrLf
strFunktionsPruefungMsg = strFunktionsPruefungMsg & " NOWA Energie= " & Format(mudtMessDaten(EinbauplatzNr).dblStopEnergy, "0.00") & " kWh" & vbCrLf
strFunktionsPruefungMsg = strFunktionsPruefungMsg & " Abweichung : " & Format((mudtMessDaten(EinbauplatzNr).dblStopEnergy - dblEnergie) / mudtMessDaten(EinbauplatzNr).dblStopEnergy * 100, "0.00") & " %" & vbCrLf
strFunktionsPruefungMsg = strFunktionsPruefungMsg & " Toleranzgrenze: " & g_App.Settings.GetUSFunktionspruefung_Toleranz & " %" & vbCrLf
End If
Else
strFunktionsPruefungMsg = strFunktionsPruefungMsg & "Einbauplatz " & EinbauplatzNr & vbCrLf & " NOWA Energie = 0 !" & vbCrLf
End If
PrintStatus "gemessenes DeltaT = " & (mudtMessDaten(EinbauplatzNr).dblStartDeltaT + mudtMessDaten(EinbauplatzNr).dblStopDeltaT) / 2 & " K"
If (mudtMessDaten(EinbauplatzNr).dblStartDeltaT + mudtMessDaten(EinbauplatzNr).dblStopDeltaT) / 2 < g_App.Settings.GetUSFunktionspruefung_GetDelta_T Then
strFunktionsPruefungMsg = strFunktionsPruefungMsg & "Einbauplatz " & EinbauplatzNr & vbCrLf
strFunktionsPruefungMsg = strFunktionsPruefungMsg & " DeltaT unterschreitet die Toleranzgrenze von " & g_App.Settings.GetUSFunktionspruefung_GetDelta_T & " °K" & vbCrLf
strFunktionsPruefungMsg = strFunktionsPruefungMsg & " gemessenes DeltaT: " & Format((mudtMessDaten(EinbauplatzNr).dblStartDeltaT + mudtMessDaten(EinbauplatzNr).dblStopDeltaT) / 2, "0.00") & " °K" & vbCrLf
Else
mudtMessDaten(EinbauplatzNr).blnDeltaT_OK = True
End If ' DeltaT
If mudtMessDaten(EinbauplatzNr).blnDeltaT_OK = True And mudtMessDaten(EinbauplatzNr).blnEnergy_OK = True Then
PrintStatus "Funktionsprüfung OK in Tabelle Speicherabbild schreiben"
SavePruefergebnis getUSFabNr(EinbauplatzNr), True
Else
PrintStatus "Funktionsprüfung fehlgeschlagen in Tabelle Speicherabbild schreiben"
SavePruefergebnis getUSFabNr(EinbauplatzNr), False
End If
Else
' Prüfung nicht erfolgreich
End If ' Prüfung erfolgreich
End If ' Pruefzaehler eingebaut
Next
'If Not AllDeltaT_OK(mudtMessDaten()) Then
'Nur die Meldung auf der Status-Anzeige ist zu sehen (z.Zt.)
'End If
' For EinbauplatzNr = 0 To UBound(mudtMessDaten)
' dtmMessDauer = mudtMessDaten(EinbauplatzNr).dtmStopZeit - mudtMessDaten(EinbauplatzNr).dtmStartZeit
' MsgBox "dblStartVolume" & vbTab & mudtMessDaten(i).dblStartVolume & vbCrLf & _
' "dblStopVolume" & vbTab & mudtMessDaten(i).dblStopVolume & vbCrLf & _
' "dblStartEnergy" & vbTab & mudtMessDaten(i).dblStartEnergy & vbCrLf & _
' "dblStopEnergy" & vbTab & mudtMessDaten(i).dblStopEnergy & vbCrLf & vbCrLf & _
' "DAUER: " & vbTab & dblMessDauer & _
' "Durchfluß: " & vbTab & mudtMessDaten(i).dblStopVolume / 1000 / dblMessDauer & " m³/h"
' MsgBox "dblStopVolume" & vbTab & mudtMessDaten(i).dblStopVolume & vbCrLf & _
' "dblStopEnergy" & vbTab & mudtMessDaten(i).dblStopEnergy & vbCrLf & vbCrLf & _
' "DAUER: " & vbTab & dtmMessDauer & _
' "Durchfluß: " & vbTab & mudtMessDaten(i).dblStopVolume / 1000 / (dtmMessDauer * 24#) & " m³/h"
'If mudtMessDaten(EinbauplatzNr).blnDeltaT_OK Then
'mudtMessDaten(EinbauplatzNr).blnEnergy_OK = isEnergyOK(mudtMessDaten(EinbauplatzNr).dblStopVolume, mudtMessDaten(EinbauplatzNr).dblStopEnergy, _
mudtMessDaten(EinbauplatzNr).dblStartDeltaT, mudtMessDaten(EinbauplatzNr).dblStopDeltaT, _
dtmMessDauer)
'End If
'Next
EndeFunktionspruefung:
If strFunktionsPruefungMsg <> "" Then
Call MsgBox(strFunktionsPruefungMsg, , "Ergebniss der Funktionsprüfung")
PrintStatus "Ergebniss der Funktionsprüfung:" & vbCrLf & strFunktionsPruefungMsg
Else
Call MsgBox("Alle eingebauten Zähler haben die Funktionsprüfung bestanden", , "Ergebniss der Funktionsprüfung")
PrintStatus "Alle eingebauten Zähler haben die Funktionsprüfung bestanden"
strFunktionsPruefungMsg = "Alle eingebauten Zähler haben die Funktionsprüfung bestanden."
End If
End Function
Private Function Vorpruefung() As Long
Dim Einbauplatz As CEinbauplatz
Dim Pruefzaehler As CPruefzaehler
Dim USVolumen As Double
Dim RefVolumen As Double
Dim PPNr As Integer
Dim EinbauplatzNr As Integer
Dim dblFehler As Double
Dim lngReturn As Long
Dim lngError As Long
Dim Identitaetsnummer As Long
Dim QIst As Double
Dim dblTemperatur As Double
Dim RefZFehler As Double
Dim lngUSPruefZeit_ms As Long
Dim lngRZPruefZeit_ms As Long
Dim Fehler As Double
Dim udtPruefdaten_imPP_mitEBP(10) As TypUSPruefdaten
Dim firmwareVersion As Byte
Dim ComPort As Integer
Dim lngRet As Long
Dim dblLetzterRZFehler As Double
Dim udtUSParameter(10) As JustageParameter_Type
Dim udtUSZusatzParameter(10) As US_ZusatzParameter_Typ
''''''''''''''''''''''''''''''
Dim dblFehlerInQb(10) As Double
Dim dblIstFlussInQb(10) As Double
Dim dblSollFlussInQb(10) As Double
Dim dblTemperaturInQb(10) As Double
Dim dblNeuIstFluss1_m3ph As Double
Dim dblQminFehler As Double
Dim objJustageWerte(10) As CJustagewerte
Set m_Referenzzaehler = New CRefzaehler
If Not g_testModus Then
' Einstellung für Automatik-Modus in der SPS testen
TestAutomatik:
If Not m_SPS.IstAutomatik Then
Dummy = MsgBox("Bitte SPS auf Automatik stellen", vbOKCancel)
If Dummy = vbCancel Then
endDialog (IDCANCEL)
Exit Function
End If
GoTo TestAutomatik
End If
If Not m_SPS.IstStreckePruefbereit Then
' Betrieb Vorbereiten
m_SPS.setBetrieb 1
PrintStatus "Betrieb vorbereiten: Spannen und Füllen..."
Do While Not m_SPS.IstStreckeGefuellt
sleep 1000, True
If g_Abbruch = True Then
Exit Function
End If
Loop
' nach dem Füllen: Betrieb auf 0
sleep 500
m_SPS.setBetrieb 0
'------------------------------------------------------------------------
PrintStatus "Warte auf Pruefbereitschaft der SPS..."
Do While Not m_SPS.IstStreckePruefbereit
sleep 1000, True
If g_Abbruch = True Then
Exit Function
End If
Loop
End If ' Pruefbereit
PrintStatus "Strecke ist Prüfbereit !"
End If ' Testmodus
PrintStatus "***** Vorprüfung ******"
'''''''''''''''''''''''''''
' Schleife Vorprüfpunkte
'''''''''''''''''''''''''''
m_colUniqueVorPP.sortQ
' ########################### Nachjustage ###########################
' Je Einbauplatz werden die aktuellen Daten aus dem Zähler gelesen
If mbln_nachjustage = True Then
MsgBox ("neue ungetestete Funktion: Es findet eine Nachjustage statt. Die Startkonstanten werden aus dem Zähler gelesen.")
End If
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If Not Pruefzaehler Is Nothing Then
EinbauplatzNr = Einbauplatz.getNr
ComPort = g_App.Settings.getUSComPort(EinbauplatzNr)
' OffsetJustage / Tabelle USJustageWerte
Set objJustageWerte(EinbauplatzNr) = New CJustagewerte
objJustageWerte(EinbauplatzNr).SerienNr = Pruefzaehler.getSerienNr
If mbln_nachjustage = True Then
Call modIECCOM.GetOffsetAndGeberAndBereich(ComPort, udtUSParameter(Einbauplatz.getNr))
' hinzugefügt RH 5.11.2002:
Call modIECCOM.Get_FP_Flow_MaxMin(ComPort, udtUSZusatzParameter(Einbauplatz.getNr).FP_Flow_Min, udtUSZusatzParameter(Einbauplatz.getNr).FP_Flow_Max)
ShowUSParameter udtUSParameter(Einbauplatz.getNr), udtUSZusatzParameter(Einbauplatz.getNr), "Justage Parameter aus Zähler", Einbauplatz.getNr
Else
' Die sieben Justage Parameter aus DB vorbesetzen
udtUSParameter(Einbauplatz.getNr).Geberkonstante1_IST_m = Pruefzaehler.getVorpruefpunkte.getGeberkonstante1
udtUSParameter(Einbauplatz.getNr).Geberkonstante2_IST_m = Pruefzaehler.getVorpruefpunkte.getGeberkonstante2
udtUSParameter(Einbauplatz.getNr).Offset1_IST_m3ph = Pruefzaehler.getVorpruefpunkte.getOffset1
udtUSParameter(Einbauplatz.getNr).Offset2_IST_m3ph = Pruefzaehler.getVorpruefpunkte.getOffset2
udtUSParameter(Einbauplatz.getNr).Bereich_ns = Pruefzaehler.getVorpruefpunkte.getBereich
udtUSParameter(Einbauplatz.getNr).SteilheitGeber_nsp°C = Pruefzaehler.getVorpruefpunkte.getSteilheitGeber
udtUSParameter(Einbauplatz.getNr).OffsetGeber_ns = Pruefzaehler.getVorpruefpunkte.getOffsetGeber
' die neuen Justage Parameter aus DB vorbesetzen
udtUSParameter(Einbauplatz.getNr).Geberkonstante_Neu1_m = Pruefzaehler.getVorpruefpunkte.getGeberkonstante1
udtUSParameter(Einbauplatz.getNr).Geberkonstante_Neu2_m = Pruefzaehler.getVorpruefpunkte.getGeberkonstante2
udtUSParameter(Einbauplatz.getNr).Offset_Neu1_m3ph = Pruefzaehler.getVorpruefpunkte.getOffset1
udtUSParameter(Einbauplatz.getNr).Offset_Neu2_m3ph = Pruefzaehler.getVorpruefpunkte.getOffset2
udtUSParameter(Einbauplatz.getNr).Unlinearitaet = Pruefzaehler.getVorpruefpunkte.getUnlinearitaet / 100
' Parameter für Heiß-Kalt Spreizung as DB Vorbesetzten
udtUSParameter(Einbauplatz.getNr).Offset_Qmin = Pruefzaehler.getVorpruefpunkte.getOffset_Qmin
udtUSParameter(Einbauplatz.getNr).Offset_QBereich = Pruefzaehler.getVorpruefpunkte.getOffset_QBereich
udtUSParameter(Einbauplatz.getNr).Offset_Qp = Pruefzaehler.getVorpruefpunkte.getOffset_Qp
udtUSParameter(Einbauplatz.getNr).SollFehlerDifferenz_Qmin = Pruefzaehler.getVorpruefpunkte.getSollFehlerDifferenz_Qmin
udtUSZusatzParameter(Einbauplatz.getNr).FP_Flow_Min = Pruefzaehler.getVorpruefpunkte.getFlowMin
udtUSZusatzParameter(Einbauplatz.getNr).FP_Flow_Max = Pruefzaehler.getVorpruefpunkte.getFlowMax
udtUSZusatzParameter(Einbauplatz.getNr).PulseMode = Pruefzaehler.getVorpruefpunkte.getPulseMode
udtUSZusatzParameter(Einbauplatz.getNr).FP_Impulswertigkeit = Pruefzaehler.getVorpruefpunkte.getImpulswertigkeit
udtUSZusatzParameter(Einbauplatz.getNr).FP_Impulswertigkeit_Pruef = Pruefzaehler.getVorpruefpunkte.getImpulswertigkeit_Pruef
ShowUSParameter udtUSParameter(Einbauplatz.getNr), udtUSZusatzParameter(Einbauplatz.getNr), "Justage Parameter aus Datenbank", Einbauplatz.getNr
End If ' nachjustage
End If ' Pruefzaehler is nothing
Next Einbauplatz
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
If mbln_nachjustage = False Then
'''''''''''''''''''''''' in Zähler schreiben '''''''''''''''''''''''''''''
PrintStatus "Set Offset,Geber,Bereich/Impulswertigkeit/FlowMin/FlowMax f.a. Zähler"
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If Not Pruefzaehler Is Nothing Then
EinbauplatzNr = Einbauplatz.getNr
ComPort = g_App.Settings.getUSComPort(EinbauplatzNr)
' und merken
udtPruefdaten_imPP_mitEBP(EinbauplatzNr).JustageParameter = udtUSParameter(EinbauplatzNr)
lngRet = modIECCOM.SetOffsetAndGeberAndBereich(ComPort, udtUSParameter(Einbauplatz.getNr))
If lngRet <> 0 Then
DebugMsg ("SetOffsetAndGeberAndBereich für Einbauplatz " & EinbauplatzNr & " gab Fehler " & lngRet & " zurück")
End If
lngRet = modIECCOM.SetImpulsWertigkeitAndPulseMode(ComPort, udtUSZusatzParameter(Einbauplatz.getNr).FP_Impulswertigkeit, udtUSZusatzParameter(Einbauplatz.getNr).FP_Impulswertigkeit_Pruef, udtUSZusatzParameter(Einbauplatz.getNr).PulseMode)
If lngRet <> 0 Then
DebugMsg ("SetImpulsWertigkeitAndPulseMode für Einbauplatz " & EinbauplatzNr & " gab Fehler " & lngRet & " zurück")
End If
Call modIECCOM.Get_Slave_FLASH_Firmware_Version(ComPort, firmwareVersion)
If firmwareVersion <= 23 Then
' Vorgabe: AP, nichts tun , 25.03.2003
'lngRet = modIECCOM.Set_FP_Flow_MaxMin(COMport, udtUSZusatzParameter(Einbauplatz.getNr).FP_Flow_Min * 2, udtUSZusatzParameter(Einbauplatz.getNr).FP_Flow_Max)
Else
lngRet = modIECCOM.Set_FP_Flow_MaxMin(ComPort, udtUSZusatzParameter(Einbauplatz.getNr).FP_Flow_Min, udtUSZusatzParameter(Einbauplatz.getNr).FP_Flow_Max)
End If
'ShowUSParameter udtUSParameter(Einbauplatz.getNr), udtUSZusatzParameter(Einbauplatz.getNr), "Justage Parameter aus Datenbank", Einbauplatz.getNr
End If ' Pruefzaehler is nothing
Next Einbauplatz
End If
'''''''''''''''''''''''' 1. Prüfpunkt bei Qmax ''''''''''''''''''''''
PPNr = 1
Set m_vorPruefpunkt = m_colUniqueVorPP.getCollection.Item(PPNr)
m_DurchflussSoll = m_vorPruefpunkt.getQ
m_Pruefzeit = m_vorPruefpunkt.GetTime
m_VolumenSoll = m_Pruefzeit * m_DurchflussSoll / 3.6
PrintStatus "geschätztes Soll-Volumen in Litern: " & m_VolumenSoll
lblSollV.Caption = Format(m_VolumenSoll, "0")
Call m_Referenzzaehler.loadForDurchfluss(m_DurchflussSoll, g_App.Settings.getMIDGruppe)
m_SPS.SetQDiff 0
PrintStatus "Vorprüfung im Vorprüfpunkt 1 (QNenn):"
lngRet = VorpruefungImPP(PPNr, udtPruefdaten_imPP_mitEBP())
If lngRet < 0 Then
g_Abbruch = True
Vorpruefung = -1
End If
If g_Abbruch Then Exit Function
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If Not Pruefzaehler Is Nothing Then
EinbauplatzNr = Einbauplatz.getNr
' veränderten Wert wieder zurückholen
udtUSParameter(EinbauplatzNr).SteilheitGeber_nsp°C = udtPruefdaten_imPP_mitEBP(EinbauplatzNr).JustageParameter.SteilheitGeber_nsp°C
ComPort = g_App.Settings.getUSComPort(EinbauplatzNr)
If udtPruefdaten_imPP_mitEBP(EinbauplatzNr).blnPruefungsfehler = False Then
If udtPruefdaten_imPP_mitEBP(EinbauplatzNr).Fehlerinfo <> "" Then
PrintStatus udtPruefdaten_imPP_mitEBP(EinbauplatzNr).Fehlerinfo
End If
' kein Fehler aufgetreten
Call GetUSVolumen(EinbauplatzNr, USVolumen)
If USVolumen = 0 Then
MsgBox ("US Volumen konnte nicht ermittelt werden")
Vorpruefung = -20
'Stop
End If
lngUSPruefZeit_ms = udtPruefdaten_imPP_mitEBP(EinbauplatzNr).US_IstPruefzeit_ms
lngRZPruefZeit_ms = udtPruefdaten_imPP_mitEBP(EinbauplatzNr).RZ_IstPruefzeit_ms
PrintStatus "US Zähler Prüfzeit(" & EinbauplatzNr & ")= " & lngUSPruefZeit_ms & " ms"
PrintStatus "RZ Zähler Prüfzeit(" & EinbauplatzNr & ")= " & lngRZPruefZeit_ms & " ms"
PrintStatus "US Volumen am Einbauplatz " & EinbauplatzNr & " [m³]:" & USVolumen
' Refererenz Volumen bestimmen
If Not m_VorPruefungsArtWaage Then
' Refererenz Volumen bestimmen aus Referenzzähler
Call GetRZVolumen(EinbauplatzNr, m_Referenzzaehler, RefVolumen)
PrintStatus "RZ Volumen [m³]:" & RefVolumen
dblLetzterRZFehler = m_Referenzzaehler.letzterFehler(m_DurchflussSoll)
PrintStatus "Fehler des RZ in diesem Prüfpunkt: " & Format(dblLetzterRZFehler, "0.0")
RefVolumen = RefVolumen / (1 + dblLetzterRZFehler / 100)
PrintStatus "Ist-Volumen (korrigiert mit Fehler des RZ): " & RefVolumen
Else
' Refererenz Volumen bestimmen aus Gewicht der Waage
RefVolumen = Volumen(m_Waage.GetGewicht, udtPruefdaten_imPP_mitEBP(EinbauplatzNr).dblTemperatur)
PrintStatus "Ist-Volumen [m³] (aus Waage, korrigiert mit Temperatur): " & RefVolumen
' Hier sind die Prüfzeiten rechnerisch gleich
lngRZPruefZeit_ms = lngUSPruefZeit_ms
End If
If RefVolumen = 0 Then
MsgBox ("Referenz Volumen (Waage oder Referenzzähler) konnte nicht ermittelt werden")
Vorpruefung = -21
'Stop
End If
MSFlexGrid1.Row = Einbauplatz.getNr
MSFlexGrid1.Col = PPNr
If Not lngUSPruefZeit_ms = 0 Then
If Not m_VorPruefungsArtWaage Then
'Offset_Qp abziehen, um Kurve nach oben zu bekommen
'geändert am 20.01.2004 AP mit Gepräch mit UD
RefVolumen = RefVolumen * (1 - udtUSParameter(Einbauplatz.getNr).Offset_Qp / 100 * (-1))
' mit den wahren Prüfzeiten korrigierter Fehler
Fehler = 100 * (USVolumen / lngUSPruefZeit_ms - RefVolumen / lngRZPruefZeit_ms) / (RefVolumen / lngRZPruefZeit_ms)
PrintStatus "Fehler = 100 * (USVolumen / lngUSPruefZeit_ms - RefVolumen / lngRZPruefZeit_ms) / (RefVolumen / lngRZPruefZeit_ms) =" & Format(Fehler, "0.00")
Else
'Offset_Qp abziehen, um Kurve nach oben zu bekommen
'geändert am 20.01.2004 AP mit Gepräch mit UD
RefVolumen = RefVolumen * (1 - udtUSParameter(Einbauplatz.getNr).Offset_Qp / 100 * (-1))
Fehler = 100 * (USVolumen - RefVolumen) / RefVolumen
PrintStatus "Fehler = 100 * (USVolumen - RefVolumen) / RefVolumen =" & Format(Fehler, "0.00")
End If
dblTemperatur = m_SPS.GetEinlaufTemperatur
MSFlexGrid1.Text = Format(Fehler, "0.00")
udtUSParameter(Einbauplatz.getNr).Istfluss2_m3ph = USVolumen / (lngUSPruefZeit_ms / 1000 / 60 / 60)
udtUSParameter(Einbauplatz.getNr).Sollfluss2_m3ph = RefVolumen / (lngRZPruefZeit_ms / 1000 / 60 / 60)
udtUSParameter(Einbauplatz.getNr).Temperatur2_°C = dblTemperatur
PrintStatus "gemessenes Q vom US = (USVolumen / (lngUSPruefZeit_ms / 1000 / 60 / 60)=" & udtUSParameter(Einbauplatz.getNr).Istfluss2_m3ph
PrintStatus "gemessenes Q vom FM85 = RefVolumen / (lngRZPruefZeit_ms / 1000 / 60 / 60) =" & udtUSParameter(Einbauplatz.getNr).Sollfluss2_m3ph
ShowUSParameter udtUSParameter(Einbauplatz.getNr), udtUSZusatzParameter(Einbauplatz.getNr), "Justage Parameter nach 1. Vor-Prüfpunkt Qmax", Einbauplatz.getNr
Else
PrintStatus "Vorprüfung für Einbauplatz " & EinbauplatzNr & " fehlgeschlagen."
MSFlexGrid1.Text = "?"
Vorpruefung = -23
'Stop
End If
Else
PrintStatus "Vorprüfung für Einbauplatz " & EinbauplatzNr & " fehlgeschlagen:"
PrintStatus udtPruefdaten_imPP_mitEBP(EinbauplatzNr).Fehlerinfo
End If
gudtUSParameter = udtUSParameter(Einbauplatz.getNr)
End If ' Pruefzaehler is nothing
Next Einbauplatz
'''''''''''''''''''''''' Qmin ''''''''''''''''''''''
' Qmin
PPNr = m_colUniqueVorPP.getCollection.Count
Set m_vorPruefpunkt = m_colUniqueVorPP.getCollection.Item(PPNr)
m_DurchflussSoll = m_vorPruefpunkt.getQ
m_Pruefzeit = m_vorPruefpunkt.GetTime
m_VolumenSoll = m_Pruefzeit * m_DurchflussSoll / 3.6
PrintStatus "geschätztes Soll-Volumen in Litern: " & Format(m_VolumenSoll, "0.000")
lblSollV.Caption = Format(m_VolumenSoll, "0")
Call m_Referenzzaehler.loadForDurchfluss(m_DurchflussSoll, g_App.Settings.getMIDGruppe)
m_SPS.SetQDiff 0
PrintStatus "Vorprüfung im Vorprüfpunkt (Qmin):"
lngRet = VorpruefungImPP(PPNr, udtPruefdaten_imPP_mitEBP())
If lngRet < 0 Then
Vorpruefung = -1
g_Abbruch = True
End If
If g_Abbruch Then Exit Function
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If Not Pruefzaehler Is Nothing Then
EinbauplatzNr = Einbauplatz.getNr
ComPort = g_App.Settings.getUSComPort(EinbauplatzNr)
If udtPruefdaten_imPP_mitEBP(EinbauplatzNr).blnPruefungsfehler = False Then
If udtPruefdaten_imPP_mitEBP(EinbauplatzNr).Fehlerinfo <> "" Then
PrintStatus udtPruefdaten_imPP_mitEBP(EinbauplatzNr).Fehlerinfo
End If
' kein Fehler aufgetreten
Call GetUSVolumen(EinbauplatzNr, USVolumen)
If USVolumen = 0 Then
MsgBox ("US Volumen konnte nicht ermittelt werden")
Vorpruefung = -20
'Stop
End If
lngUSPruefZeit_ms = udtPruefdaten_imPP_mitEBP(EinbauplatzNr).US_IstPruefzeit_ms
lngRZPruefZeit_ms = udtPruefdaten_imPP_mitEBP(EinbauplatzNr).RZ_IstPruefzeit_ms
PrintStatus "US Zähler Prüfzeit(" & EinbauplatzNr & ")= " & lngUSPruefZeit_ms & " ms"
PrintStatus "RZ Zähler Prüfzeit(" & EinbauplatzNr & ")= " & lngRZPruefZeit_ms & " ms"
PrintStatus "US Volumen am Einbauplatz " & EinbauplatzNr & " [m³]:" & USVolumen
' Refererenz Volumen bestimmen
If Not m_VorPruefungsArtWaage Then
' Refererenz Volumen bestimmen aus Referenzzähler
Call GetRZVolumen(EinbauplatzNr, m_Referenzzaehler, RefVolumen)
PrintStatus "RZ Volumen [m³]:" & RefVolumen
dblLetzterRZFehler = m_Referenzzaehler.letzterFehler(m_DurchflussSoll)
PrintStatus "Fehler des RZ in diesem Prüfpunkt: " & Format(dblLetzterRZFehler, "0.0")
RefVolumen = RefVolumen / (1 + dblLetzterRZFehler / 100)
PrintStatus "Ist-Volumen (korrigiert mit Fehler des RZ): " & RefVolumen
Else
' Refererenz Volumen bestimmen aus Gewicht der Waage
RefVolumen = Volumen(m_Waage.GetGewicht, udtPruefdaten_imPP_mitEBP(EinbauplatzNr).dblTemperatur)
PrintStatus "Ist-Volumen [m³] (aus Waage, korrigiert mit Temperatur): " & RefVolumen
' Hier sind die Prüfzeiten rechnerisch gleich
lngRZPruefZeit_ms = lngUSPruefZeit_ms
End If
If RefVolumen = 0 Then
MsgBox ("Referenz Volumen (Waage oder Referenzzähler) konnte nicht ermittelt werden")
Vorpruefung = -21
'Stop
End If
MSFlexGrid1.Row = Einbauplatz.getNr
MSFlexGrid1.Col = PPNr
If Not lngUSPruefZeit_ms = 0 Then
If Not m_VorPruefungsArtWaage Then
'Offset_Qmin abziehen, um Kurve nach oben zu bekommen
'geändert am 20.01.2004 AP mit Gepräch mit UD
RefVolumen = RefVolumen * (1 - udtUSParameter(Einbauplatz.getNr).Offset_Qmin / 100 * (-1))
' mit den wahren Prüfzeiten korrigierter Fehler
Fehler = 100 * (USVolumen / lngUSPruefZeit_ms - RefVolumen / lngRZPruefZeit_ms) / (RefVolumen / lngRZPruefZeit_ms)
PrintStatus "Fehler = 100 * (USVolumen / lngUSPruefZeit_ms - RefVolumen / lngRZPruefZeit_ms) / (RefVolumen / lngRZPruefZeit_ms) =" & Format(Fehler, "0.00")
Else
'Offset_Qmin abziehen, um Kurve nach oben zu bekommen
'geändert am 20.01.2004 AP mit Gepräch mit UD
RefVolumen = RefVolumen * (1 - udtUSParameter(Einbauplatz.getNr).Offset_Qmin / 100 * (-1))
Fehler = 100 * (USVolumen - RefVolumen) / RefVolumen
PrintStatus "Fehler = 100 * (USVolumen - RefVolumen) / RefVolumen =" & Format(Fehler, "0.00")
End If
dblTemperatur = m_SPS.GetEinlaufTemperatur
MSFlexGrid1.Text = Format(Fehler, "0.00")
udtUSParameter(Einbauplatz.getNr).Istfluss1_m3ph = USVolumen / (lngUSPruefZeit_ms / 1000 / 60 / 60)
udtUSParameter(Einbauplatz.getNr).Sollfluss1_m3ph = RefVolumen / (lngRZPruefZeit_ms / 1000 / 60 / 60)
udtUSParameter(Einbauplatz.getNr).Temperatur1_°C = dblTemperatur
' hier speichern
objJustageWerte(EinbauplatzNr).IstFluss2 = udtUSParameter(Einbauplatz.getNr).Istfluss2_m3ph
objJustageWerte(EinbauplatzNr).SollFluss2 = udtUSParameter(Einbauplatz.getNr).Sollfluss2_m3ph
objJustageWerte(EinbauplatzNr).Temperatur2 = udtUSParameter(Einbauplatz.getNr).Temperatur2_°C
objJustageWerte(EinbauplatzNr).IstFluss1 = udtUSParameter(Einbauplatz.getNr).Istfluss1_m3ph
objJustageWerte(EinbauplatzNr).SollFluss1 = udtUSParameter(Einbauplatz.getNr).Sollfluss1_m3ph
objJustageWerte(EinbauplatzNr).Temperatur1 = udtUSParameter(Einbauplatz.getNr).Temperatur1_°C
PrintStatus "gemessenes Q vom US = (USVolumen / (lngUSPruefZeit_ms / 1000 / 60 / 60)=" & udtUSParameter(Einbauplatz.getNr).Istfluss1_m3ph
PrintStatus "gemessenes Q vom FM85 = RefVolumen / (lngRZPruefZeit_ms / 1000 / 60 / 60) =" & udtUSParameter(Einbauplatz.getNr).Sollfluss1_m3ph
ShowUSParameter udtUSParameter(Einbauplatz.getNr), udtUSZusatzParameter(Einbauplatz.getNr), "Justage Parameter nach 2. Vor-Prüfpunkt vor Justage", Einbauplatz.getNr
gudtUSParameter = udtUSParameter(EinbauplatzNr)
'A.P.am 18.08.02
If mbln_nachjustage = False Then
' RH am 30.4.2003
If mbln_HeissKaltSpreizungBerechnen = True Then
PrintStatus "Heiss-Kalt Spreizung Berechnen: Seriennr=" & Pruefzaehler.getSerienNr & ", m_DurchflussSoll=" & m_DurchflussSoll
If Pruefzaehler.getVorpruefpunkte.LadeHeissesQMin(Pruefzaehler.getSerienNr, m_DurchflussSoll, dblQminFehler) Then
gudtUSParameter.IstFehler_qmin_50°C = dblQminFehler
' Formel Aufruf
' 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
modUS2000_Algorithmen.Qmin_Temperaturjustage
ShowUSParameter gudtUSParameter, udtUSZusatzParameter(Einbauplatz.getNr), "Justage Parameter nach Qmin_Temperaturjustage an Einbauplatz ", Einbauplatz.getNr
End If
End If
modUS2000_Algorithmen.Justage_mit_ZeroFlow
'Neu AP 04.07.03
'objJustageWerte(EinbauplatzNr).save
ShowUSParameter gudtUSParameter, udtUSZusatzParameter(Einbauplatz.getNr), "Justage Parameter nach Justage_mit_ZeroFlow nach Prüfpunkt Nr2 = Qmin", Einbauplatz.getNr
Else
' Nachjustage
modUS2000_Algorithmen.Justage_Execute
ShowUSParameter gudtUSParameter, udtUSZusatzParameter(Einbauplatz.getNr), "Justage Parameter nach Justage_Execute (Nachjustage) nach Prüfpunkt Nr2 = Qmin", Einbauplatz.getNr
End If
udtUSParameter(EinbauplatzNr) = gudtUSParameter
Else
PrintStatus "Vorprüfung für Einbauplatz " & EinbauplatzNr & " fehlgeschlagen."
MSFlexGrid1.Text = "?"
Vorpruefung = -23
'Stop
End If
Else
PrintStatus "Vorprüfung für Einbauplatz " & EinbauplatzNr & " fehlgeschlagen:"
PrintStatus udtPruefdaten_imPP_mitEBP(EinbauplatzNr).Fehlerinfo
End If
gudtUSParameter = udtUSParameter(Einbauplatz.getNr)
End If ' Pruefzaehler is nothing
Next Einbauplatz
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
PrintStatus "SetOffsetAndGeberAndBereich f.a. Zähler"
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If Not Pruefzaehler Is Nothing Then
EinbauplatzNr = Einbauplatz.getNr
ComPort = g_App.Settings.getUSComPort(EinbauplatzNr)
If udtPruefdaten_imPP_mitEBP(EinbauplatzNr).blnPruefungsfehler = False Then
lngRet = modIECCOM.SetOffsetAndGeberAndBereich(ComPort, udtUSParameter(Einbauplatz.getNr))
If lngRet <> 0 Then
DebugMsg ("SetOffsetAndGeberAndBereich für Einbauplatz " & EinbauplatzNr & " gab Fehler " & lngRet & " zurück")
Vorpruefung = -29
Exit Function
End If
Else
PrintStatus "SetOffsetAndGeber für Einbauplatz " & EinbauplatzNr & " nicht erfolgt"
End If
End If ' Pruefzaehler is nothing
Next Einbauplatz
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'
' Bereichsjustage
'
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
If mbln_Bereichsjustage = True And m_colUniqueVorPP.Count > 2 Then
PPNr = 2
Set m_vorPruefpunkt = m_colUniqueVorPP.getCollection.Item(PPNr)
m_DurchflussSoll = m_vorPruefpunkt.getQ
m_Pruefzeit = m_vorPruefpunkt.GetTime
m_VolumenSoll = m_Pruefzeit * m_DurchflussSoll / 3.6
PrintStatus "geschätztes Soll-Volumen in Litern: " & m_VolumenSoll
lblSollV.Caption = Format(m_VolumenSoll, "0")
Call m_Referenzzaehler.loadForDurchfluss(m_DurchflussSoll, g_App.Settings.getMIDGruppe)
m_SPS.SetQDiff 0
PrintStatus "Vorprüfung im Vorprüfpunkt (Qmin):"
lngRet = VorpruefungImPP(PPNr, udtPruefdaten_imPP_mitEBP())
If lngRet < 0 Then
g_Abbruch = True
Vorpruefung = -1
End If
If g_Abbruch Then Exit Function
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If Not Pruefzaehler Is Nothing Then
EinbauplatzNr = Einbauplatz.getNr
ComPort = g_App.Settings.getUSComPort(EinbauplatzNr)
If udtPruefdaten_imPP_mitEBP(EinbauplatzNr).blnPruefungsfehler = False Then
If udtPruefdaten_imPP_mitEBP(EinbauplatzNr).Fehlerinfo <> "" Then
PrintStatus udtPruefdaten_imPP_mitEBP(EinbauplatzNr).Fehlerinfo
End If
' kein Fehler aufgetreten
Call GetUSVolumen(EinbauplatzNr, USVolumen)
If USVolumen = 0 Then
ErrorMsg ("US Volumen konnte nicht ermittelt werden (gleich 0)")
Vorpruefung = -20
Exit Function
End If
lngUSPruefZeit_ms = udtPruefdaten_imPP_mitEBP(EinbauplatzNr).US_IstPruefzeit_ms
lngRZPruefZeit_ms = udtPruefdaten_imPP_mitEBP(EinbauplatzNr).RZ_IstPruefzeit_ms
PrintStatus "US Zähler Prüfzeit(" & EinbauplatzNr & ")= " & lngUSPruefZeit_ms & " ms"
PrintStatus "RZ Zähler Prüfzeit(" & EinbauplatzNr & ")= " & lngRZPruefZeit_ms & " ms"
PrintStatus "US Volumen am Einbauplatz " & EinbauplatzNr & " [m³]:" & USVolumen
' Refererenz Volumen bestimmen
If Not m_VorPruefungsArtWaage Then
' Refererenz Volumen bestimmen aus Referenzzähler
Call GetRZVolumen(EinbauplatzNr, m_Referenzzaehler, RefVolumen)
PrintStatus "RZ Volumen [m³]:" & RefVolumen
dblLetzterRZFehler = m_Referenzzaehler.letzterFehler(m_DurchflussSoll)
PrintStatus "Fehler des RZ in diesem Prüfpunkt: " & Format(dblLetzterRZFehler, "0.0")
RefVolumen = RefVolumen / (1 + dblLetzterRZFehler / 100)
PrintStatus "Ist-Volumen (korrigiert mit Fehler des RZ): " & RefVolumen
Else
' Refererenz Volumen bestimmen aus Gewicht der Waage
RefVolumen = Volumen(m_Waage.GetGewicht, udtPruefdaten_imPP_mitEBP(EinbauplatzNr).dblTemperatur)
PrintStatus "Ist-Volumen [m³] (aus Waage, korrigiert mit Temperatur): " & RefVolumen
' Hier sind die Prüfzeiten rechnerisch gleich
lngRZPruefZeit_ms = lngUSPruefZeit_ms
End If
If RefVolumen = 0 Then
ErrorMsg ("Referenz Volumen (Waage oder Referenzzähler) konnte nicht ermittelt werden")
Vorpruefung = -21
Exit Function
End If
MSFlexGrid1.Row = Einbauplatz.getNr
MSFlexGrid1.Col = PPNr
If Not lngUSPruefZeit_ms = 0 Then
If Not m_VorPruefungsArtWaage Then
' mit den wahren Prüfzeiten korrigierter Fehler
Fehler = 100 * (USVolumen / lngUSPruefZeit_ms - RefVolumen / lngRZPruefZeit_ms) / (RefVolumen / lngRZPruefZeit_ms)
'Offset_QBereich abziehen, um Kurve nach oben zu bekommen
Fehler = Fehler - udtUSParameter(Einbauplatz.getNr).Offset_QBereich
PrintStatus "Fehler = 100 * (USVolumen / lngUSPruefZeit_ms - RefVolumen / lngRZPruefZeit_ms) / (RefVolumen / lngRZPruefZeit_ms) =" & Format(Fehler, "0.00")
Else
Fehler = 100 * (USVolumen - RefVolumen) / RefVolumen
'Offset_QBereich abziehen, um Kurve nach oben zu bekommen
Fehler = Fehler - udtUSParameter(Einbauplatz.getNr).Offset_QBereich
PrintStatus "Fehler = 100 * (USVolumen - RefVolumen) / RefVolumen =" & Format(Fehler, "0.00")
End If
'''''''''''''''''''''''''''''''''''''''''''''''''''''''
MSFlexGrid1.Text = Format(Fehler, "0.00")
dblFehlerInQb(Einbauplatz.getNr) = Fehler
dblIstFlussInQb(Einbauplatz.getNr) = USVolumen / (lngUSPruefZeit_ms / 1000 / 60 / 60)
dblSollFlussInQb(Einbauplatz.getNr) = RefVolumen / (lngRZPruefZeit_ms / 1000 / 60 / 60)
dblTemperaturInQb(Einbauplatz.getNr) = m_SPS.GetEinlaufTemperatur
PrintStatus "gemessenes Q2 vom US = (USVolumen / (lngUSPruefZeit_ms / 1000 / 60 / 60)=" & dblIstFlussInQb(Einbauplatz.getNr)
PrintStatus "gemessenes Q2 vom FM85 = RefVolumen / (lngRZPruefZeit_ms / 1000 / 60 / 60) =" & dblSollFlussInQb(Einbauplatz.getNr)
PrintStatus "gemessene Temp2 =" & dblTemperaturInQb(Einbauplatz.getNr)
''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Else
PrintStatus "Vorprüfung für Einbauplatz " & EinbauplatzNr & " fehlgeschlagen."
MSFlexGrid1.Text = "?"
Vorpruefung = -23
Exit Function
End If
Else
PrintStatus "Vorprüfung für Einbauplatz " & EinbauplatzNr & " fehlgeschlagen:"
PrintStatus udtPruefdaten_imPP_mitEBP(EinbauplatzNr).Fehlerinfo
End If
gudtUSParameter = udtUSParameter(Einbauplatz.getNr)
End If ' Pruefzaehler is nothing
Next Einbauplatz
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If Not Pruefzaehler Is Nothing Then
EinbauplatzNr = Einbauplatz.getNr
' Annahme: die Bereichsjustage wird nur in Folge der normale Justage durchgeführt, d.h. dass
' bedingt durch die vorangestellte Justage Soll und Ist Durchflüsse als gleich angesehen werden
' Qmin-ist = Qmin-soll und Qmax-ist = Qmax-soll
udtUSParameter(Einbauplatz.getNr).Istfluss1_m3ph = udtUSParameter(Einbauplatz.getNr).Sollfluss1_m3ph
udtUSParameter(Einbauplatz.getNr).Istfluss2_m3ph = udtUSParameter(Einbauplatz.getNr).Sollfluss2_m3ph
' Die GeberKonstanten und der Offset werden aus den bereits berechneten Variablen Neu in die nun
' nicht mehr gültigen IST Variablen übergeben
udtUSParameter(Einbauplatz.getNr).Geberkonstante1_IST_m = udtUSParameter(Einbauplatz.getNr).Geberkonstante_Neu1_m
udtUSParameter(Einbauplatz.getNr).Offset1_IST_m3ph = udtUSParameter(Einbauplatz.getNr).Offset_Neu1_m3ph
udtUSParameter(Einbauplatz.getNr).Geberkonstante2_IST_m = udtUSParameter(Einbauplatz.getNr).Geberkonstante_Neu2_m
udtUSParameter(Einbauplatz.getNr).Offset2_IST_m3ph = udtUSParameter(Einbauplatz.getNr).Offset_Neu2_m3ph
udtUSParameter(Einbauplatz.getNr).Unlinearitaet = -dblFehlerInQb(Einbauplatz.getNr) / 100
' Speichern der Unlinearitaet für Offsetjustage
objJustageWerte(Einbauplatz.getNr).Unlinearitaet = udtUSParameter(EinbauplatzNr).Unlinearitaet
ShowUSParameter udtUSParameter(Einbauplatz.getNr), udtUSZusatzParameter(Einbauplatz.getNr), "Justage Parameter nach Bereichs-Vorprüfpunkt vor Bereichs-Justage", Einbauplatz.getNr
' ######## BEREICHSJUSTAGE WIRD OHNE ZEROFLOWJUSTAGE AUSGEFÜHRT ########
gudtUSParameter = udtUSParameter(EinbauplatzNr)
modUS2000_Algorithmen.Justage_Execute
udtUSParameter(EinbauplatzNr) = gudtUSParameter
' ------------------------------------------------
ShowUSParameter udtUSParameter(Einbauplatz.getNr), udtUSZusatzParameter(Einbauplatz.getNr), "Justage Parameter nach Bereichs-Vor-Prüfpunkt nach Bereichs-Justage ", Einbauplatz.getNr
End If
Next Einbauplatz
PrintStatus "SetOffsetAndGeberAndBereich f.a. Zähler"
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If Not Pruefzaehler Is Nothing Then
EinbauplatzNr = Einbauplatz.getNr
ComPort = g_App.Settings.getUSComPort(EinbauplatzNr)
If udtPruefdaten_imPP_mitEBP(EinbauplatzNr).blnPruefungsfehler = False Then
lngRet = modIECCOM.SetOffsetAndGeberAndBereich(ComPort, udtUSParameter(Einbauplatz.getNr))
If lngRet <> 0 Then
DebugMsg ("SetOffsetAndGeberAndBereich für Einbauplatz " & EinbauplatzNr & " gab Fehler " & lngRet & " zurück")
Vorpruefung = -29
Exit Function
End If
Else
PrintStatus "SetOffsetAndGeber für Einbauplatz " & EinbauplatzNr & " nicht erfolgt"
End If
End If ' Pruefzaehler is nothing
Next Einbauplatz
End If ' Bereichsjustage
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
PrintStatus "OffsetJustage Werte in Tabelle USJustageWerte speichern"
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If Not Pruefzaehler Is Nothing Then
EinbauplatzNr = Einbauplatz.getNr
' OffsetJustage / Tabelle USJustageWerte
' --------------------------------------
objJustageWerte(EinbauplatzNr).FP_Bereich = udtUSParameter(EinbauplatzNr).Bereich_ns
objJustageWerte(EinbauplatzNr).FP_K_Geber1 = udtUSParameter(EinbauplatzNr).Geberkonstante_Neu1_m
objJustageWerte(EinbauplatzNr).FP_K_Geber2 = udtUSParameter(EinbauplatzNr).Geberkonstante_Neu2_m
objJustageWerte(EinbauplatzNr).FP_O_Geber = udtUSParameter(EinbauplatzNr).OffsetGeber_ns
objJustageWerte(EinbauplatzNr).FP_QOffset1 = udtUSParameter(EinbauplatzNr).Offset_Neu1_m3ph
objJustageWerte(EinbauplatzNr).FP_QOffset2 = udtUSParameter(EinbauplatzNr).Offset_Neu2_m3ph
objJustageWerte(EinbauplatzNr).FP_ST_Geber = udtUSParameter(EinbauplatzNr).SteilheitGeber_nsp°C
' Datum der letzten Vorprüfung, die für diesen Zähler gemacht wurde
objJustageWerte(EinbauplatzNr).DatumVorpruefung = m_Pruefgang.Datum
' Die eigentliche Berechnung der Justage ist etwas später
objJustageWerte(EinbauplatzNr).DatumJustage = Now
' Die Offsets, die für diese Justage aus der Datenbank vorgegeben waren
objJustageWerte(EinbauplatzNr).Offset_Qp = udtUSParameter(EinbauplatzNr).Offset_Qp
objJustageWerte(EinbauplatzNr).Offset_Bereich = udtUSParameter(EinbauplatzNr).Offset_QBereich
objJustageWerte(EinbauplatzNr).Offset_Qmin = udtUSParameter(EinbauplatzNr).Offset_Qmin
' nach einer Vorprüfung alle Justage-Werte für OffsetJustage speichern
objJustageWerte(EinbauplatzNr).save
End If
Next
PrintStatus "***** Vorprüfung beendet ******"
Vorpruefung = 0
End Function
Private Function VorpruefungImPP(PPNr As Integer, udtPruefdaten_imPP_mitEBP() As TypUSPruefdaten) As Long
Dim QIst As Double
Dim Einbauplatz As CEinbauplatz
Dim Pruefzaehler As CPruefzaehler
Dim dblTemperatur As Double
Dim EinbauplatzNr As Integer
Dim Identitaetsnummer As Long
Dim ComPort As Integer
Dim lngRet As Long
Dim QIstSPS As Double
Dim blnPruefungFertig As Boolean
Dim dblVolumenWaage As Double
Dim dblVolumenRZ As Double
Dim lngReturn As Long
Dim dblVolumenUS As Double
Dim Fehler As Double
Dim SteilheitGeber_nsp(10) As Double
' muss gesetzt sein
' m_vorPruefpunkt
m_SPS.setBetrieb 0
sleep 1000
m_DurchflussSoll = m_vorPruefpunkt.getQ
lblQSoll.Caption = m_DurchflussSoll
' Pumpe, MID, Regelart
Call initSPSfuerPP
Call DurchflussLstAktualisieren
DoEvents
Call m_Referenzzaehler.loadForDurchfluss(m_DurchflussSoll, g_App.Settings.getMIDGruppe)
lblFehlerRZ.Caption = Format(m_Referenzzaehler.letzterFehler(m_DurchflussSoll), "0.00")
PrintStatus "Neuer Prüfpunkt: " & m_DurchflussSoll
If m_VorPruefungsArtWaage = True Then
''''''''''''''''''''''''''''''' W A A G E A N F A N G ''''''''''''''''''''''''''''''''''''
'Call initSPSfuerWaage
If WaageVorbereitenFuerPP() < 0 Then
VorpruefungImPP = -1
Exit Function
End If
PrintStatus "Warten auf Prüfbereitschaft der Strecke"
Do While Not m_SPS.IstStreckePruefbereit
sleep 1000, True
If g_Abbruch = True Then
Exit Function
End If
Loop
dblTemperatur = m_SPS.GetEinlaufTemperatur
PrintStatus "Temperatur: " & Format(dblTemperatur, "0.00") & " °C"
If mbln_ZeroFlowMessung = True And PPNr = 1 Then
Setze_FP_St_GeberKonstanteZeroflow SteilheitGeber_nsp()
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
EinbauplatzNr = Einbauplatz.getNr
If Not Pruefzaehler Is Nothing Then
ComPort = g_App.Settings.getUSComPort(EinbauplatzNr)
If SteilheitGeber_nsp(EinbauplatzNr) <> 0 Then
PrintStatus "Einbauplatz " & EinbauplatzNr & " SteilheitGeber=" & Format(SteilheitGeber_nsp(EinbauplatzNr) * 1000000000, "0.00000") & " ns/'C"
udtPruefdaten_imPP_mitEBP(EinbauplatzNr).JustageParameter.SteilheitGeber_nsp°C = SteilheitGeber_nsp(EinbauplatzNr)
lngReturn = modIECCOM.SetOffsetAndGeberAndBereich(ComPort, udtPruefdaten_imPP_mitEBP(EinbauplatzNr).JustageParameter)
End If
End If
Next
End If
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If (Not Pruefzaehler Is Nothing) Then
' Pruefzaehler ist eingebaut
If Not Pruefzaehler.getPruefpunkte Is Nothing Then
If (Pruefzaehler.getVorpruefpunkte.hasQ(m_DurchflussSoll) = True) Then
Call USSetTemperatur(Einbauplatz.getNr, dblTemperatur)
PrintStatus "Temperatur in den Zähler schreiben"
End If
End If
End If
Next
' US Messung starten
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If (Not Pruefzaehler Is Nothing) Then
' Pruefzaehler ist eingebaut
If Not Pruefzaehler.getPruefpunkte Is Nothing Then
If (Pruefzaehler.getVorpruefpunkte.hasQ(m_DurchflussSoll) = True) Then
MSFlexGrid1.Row = Einbauplatz.getNr
MSFlexGrid1.Col = 0
MSFlexGrid1.Text = Einbauplatz.getPruefzaehler.getSerienNr
'Call USSetTemperatur(Einbauplatz.getNr, dblTemperatur)
udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).dblTemperatur = dblTemperatur
udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).SollDurchfluss = m_DurchflussSoll
udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).SollPruefzeit_s = m_vorPruefpunkt.GetTime
If StarteUSundRZZaehler(Einbauplatz.getNr, Einbauplatz.getPruefzaehler.getSerienNr) = 0 Then
PrintStatus "NOVA_START für Einbauplatz " & Einbauplatz.getNr & " OK"
Else
udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).blnPruefungsfehler = True
udtPruefdaten_imPP_mitEBP(EinbauplatzNr).Fehlerinfo = "NOVA_START für Einbauplatz " & Einbauplatz.getNr & " fehlgeschlagen."
PrintStatus "NOVA_START für Einbauplatz " & Einbauplatz.getNr & " fehlgeschlagen."
If Err.Number <> 0 Then
PrintStatus "Fehler " & Err.Number & " :" & Err.Description
End If
End If
Else
PrintStatus "Warnung: Prüfzähler am Einbauplatz " & Einbauplatz.getNr & " enthält nicht den Vorprüfpunkt Q=" & m_DurchflussSoll
End If
End If
End If
Next
Call initSPSfuerPP
m_SPS.setBetrieb 2
m_Tstart = GetTickCount
PrintStatus "Pumpe gestartet"
Do While Not ((m_Pumpe.GetStatus And 4) = 4)
DoEvents
If g_Abbruch = True Then
Exit Function
End If
Loop
PrintStatus "Pumpe läuft"
QIstSPS = 0
blnPruefungFertig = False
' Waagen SPS-Grenzwert abwarten
Do While Not blnPruefungFertig
If m_SPS.GrenzwertWaageErreicht Then
blnPruefungFertig = True
Else
If QIstSPS = 0 And (GetTickCount - m_Tstart) \ 1000 > m_Pruefzeit \ 2 Then
QIstSPS = m_SPS.getQIst
PrintStatus "IstDurchfluss zur halben Prüfzeit: " & Format(QIstSPS, "0.000") & " m³/h"
End If
lblQIst.Caption = Format(m_SPS.getQIst, "0.000")
lblGewicht.Caption = Format(m_Waage.GetGewicht, "0.000")
sleep 500
End If
AnzeigeAktualisieren
UpdateTemperaturInZaehler
sleep 100
DoEvents
If g_Abbruch Then Exit Function
Loop
PrintStatus "Waagen-Grenzwert erreicht"
' Wasser stoppen
m_SPS.setBetrieb 0
' Prüfzeit messen/stoppen in s
m_Tpruef = (GetTickCount - m_Tstart) \ 1000
m_Waage.SetNettoGrenzwert1 m_Behaelter.m_WaageGrenzwert, m_Behaelter.m_Genauigkeit
' Waagenruhe abwarten
PrintStatus "Warte auf Waagenruhe"
Call m_Waage.WarteAufRuhe
' Referenz-Volumen aus Waagen-Gewicht ermitteln
dblVolumenWaage = Volumen(m_Waage.GetGewicht, dblTemperatur) ' in m³
PrintStatus "VolumenWaage: " & Format(dblVolumenWaage, "0.000") & " m³"
For Each Einbauplatz In m_colEinbauplatz
EinbauplatzNr = Einbauplatz.getNr
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If (Not Pruefzaehler Is Nothing) Then
lngReturn = StoppeUSundRZZaehler(EinbauplatzNr)
If lngReturn = 0 Then
PrintStatus "RZ-STOP und NOVA_STOP OK"
udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).RZ_IstPruefzeit_ms = m_Tpruef * 1000
udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).US_IstPruefzeit_ms = m_Tpruef * 1000
Else
PrintStatus "RZ-STOP und NOVA_STOP Fehler:" & lngReturn
udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).blnPruefungsfehler = True
End If
End If ' PZ is nothing and GetActive
Next Einbauplatz
' Volumen aus US Zaehler lesen
For Each Einbauplatz In m_colEinbauplatz
EinbauplatzNr = Einbauplatz.getNr
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If (Not Pruefzaehler Is Nothing) Then
dblVolumenUS = 0
lngReturn = GetUSVolumen(EinbauplatzNr, dblVolumenUS, Einbauplatz.getPruefzaehler.getSerienNr)
If dblVolumenUS = 0 Then
udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).blnPruefungsfehler = True
End If
PrintStatus "Volumen des US: " & dblVolumenUS & " m³"
Fehler = (dblVolumenUS - dblVolumenWaage) / dblVolumenWaage * 100
udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).VolumenWaage = dblVolumenWaage
End If
Next
Debug.Print
''''''''''''''''''''''''''''''' W A A G E E N D E ''''''''''''''''''''''''''''''''''''''''
Else
''''''''''''''''''''''''''''''' V E R G L E I C H ''''''''''''''''''''''''''''''''''''''''
Call initSPSfuerDurchlauf
If mbln_ZeroFlowMessung = True And PPNr = 1 Then
Setze_FP_St_GeberKonstanteZeroflow SteilheitGeber_nsp()
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
EinbauplatzNr = Einbauplatz.getNr
If Not Pruefzaehler Is Nothing Then
ComPort = g_App.Settings.getUSComPort(EinbauplatzNr)
If SteilheitGeber_nsp(EinbauplatzNr) <> 0 Then
PrintStatus "Einbauplatz " & EinbauplatzNr & " SteilheitGeber=" & Format(SteilheitGeber_nsp(EinbauplatzNr) * 1000000000, "0.00000") & " ns/'C"
udtPruefdaten_imPP_mitEBP(EinbauplatzNr).JustageParameter.SteilheitGeber_nsp°C = SteilheitGeber_nsp(EinbauplatzNr)
lngReturn = modIECCOM.SetOffsetAndGeberAndBereich(ComPort, udtPruefdaten_imPP_mitEBP(EinbauplatzNr).JustageParameter)
End If
End If
Next
End If
' Vergleichsprüfung gegen RefZ.: Betrieb starten
m_SPS.setBetrieb 2
' auf konsten Durchfluß warten
PrintStatus "Warten auf Solldurchfluß erreicht..."
If Not g_testModus Then
Do While Not m_SPS.SolldurchflussErreicht
lblQIst.Caption = Format(m_SPS.getQIst, "0.000")
sleep 500, True
If g_Abbruch = True Then
Exit Function
End If
Loop
End If
' ' Durchflußanzeige RefIstWert korrigiert
If Not g_testModus Then
QIst = m_SPS.getQIst
Else
QIst = 99
End If
PrintStatus "Solldurchfluss erreicht bei Q=" & Format(QIst, "0.000")
lblQIst.Caption = Format(QIst, "0.000")
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If (Not Pruefzaehler Is Nothing) Then
' Pruefzaehler ist eingebaut
If Not Pruefzaehler.getPruefpunkte Is Nothing Then
If (Pruefzaehler.getVorpruefpunkte.hasQ(m_DurchflussSoll) = True) Then
MSFlexGrid1.Row = Einbauplatz.getNr
MSFlexGrid1.Col = 0
MSFlexGrid1.Text = Einbauplatz.getPruefzaehler.getSerienNr
udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).SollDurchfluss = m_DurchflussSoll
udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).SollPruefzeit_s = m_vorPruefpunkt.GetTime
Else
PrintStatus "Warnung: Prüfzähler am Einbauplatz " & Einbauplatz.getNr & " enthält nicht den Vorprüfpunkt Q=" & m_DurchflussSoll
End If
End If
End If
Next
If g_testModus Then
dblTemperatur = 21.99
Else
dblTemperatur = m_SPS.GetEinlaufTemperatur
End If
Call UltraschallPruefung(udtPruefdaten_imPP_mitEBP())
For EinbauplatzNr = 1 To g_App.Settings.EinbauplaetzeJeStrang
If udtPruefdaten_imPP_mitEBP(EinbauplatzNr).Fehlerinfo <> "" Then
PrintStatus "Fehler bei der Vorprüfung:" & udtPruefdaten_imPP_mitEBP(EinbauplatzNr).Fehlerinfo
udtPruefdaten_imPP_mitEBP(EinbauplatzNr).Fehlerinfo = ""
End If
Next EinbauplatzNr
DoEvents
If g_Abbruch Then
Exit Function
End If
' Wasser stoppen
m_SPS.setBetrieb 8
sleep 500
m_SPS.setBetrieb 0
lblQIst.Caption = ""
PrintStatus "Wasser gestoppt"
''''''''''''''''''''''''''''''' V E R G L E I C H E N D E '''''''''''''''''''''''''''''''''''
End If
End Function
Private Function Bereichsjustage() As Long
Dim Einbauplatz As CEinbauplatz
Dim Pruefzaehler As CPruefzaehler
Dim USVolumen As Double
Dim RefVolumen As Double
Dim PPNr As Integer
Dim EinbauplatzNr As Integer
Dim dblFehler As Double
Dim lngReturn As Long
Dim lngError As Long
Dim Identitaetsnummer As Long
Dim QIst As Double
Dim dblTemperatur As Double
Dim RefZFehler As Double
Dim lngUSPruefZeit_ms As Long
Dim lngRZPruefZeit_ms As Long
Dim Fehler As Double
Dim udtPruefdaten_imPP_mitEBP(10) As TypUSPruefdaten
Dim udtPruefdaten_Bereichsgrenze(10) As TypUSPruefdaten
Dim ComPort As Integer
Dim lngRet As Long
Dim udtUSParameter(10) As JustageParameter_Type
Dim udtUSZusatzParameter(10) As US_ZusatzParameter_Typ
Set m_Referenzzaehler = New CRefzaehler
' Einstellung für Automatik-Modus in der SPS testen
TestAutomatik:
If Not m_SPS.IstAutomatik Then
Dummy = MsgBox("Bitte SPS auf Automatik stellen", vbOKCancel)
If Dummy = vbCancel Then
endDialog (IDCANCEL)
Exit Function
End If
GoTo TestAutomatik
End If
If Not m_SPS.IstStreckePruefbereit Then
' Betrieb Vorbereiten
m_SPS.setBetrieb 1
PrintStatus "Betrieb vorbereiten: Spannen und Füllen..."
Do While Not m_SPS.IstStreckeGefuellt
sleep 1000, True
If g_Abbruch = True Then
Exit Function
End If
Loop
' nach dem Füllen: Betrieb auf 0
sleep 500
m_SPS.setBetrieb 0
'------------------------------------------------------------------------
PrintStatus "Warte auf Pruefbereitschaft der SPS..."
Do While Not m_SPS.IstStreckePruefbereit
sleep 1000, True
If g_Abbruch = True Then
Exit Function
End If
Loop
End If ' Pruefbereit
PrintStatus "Strecke ist Prüfbereit !"
PrintStatus "***** Bereichsjustage ******"
' Justage Zählerdaten bestimmen
PPNr = 0
m_colUniqueVorPP.sortQ
'''''''''''''''''''''''' Prüfpunkt bei Q2 ''''''''''''''''''''''
' Qmax
Set m_vorPruefpunkt = m_colUniqueVorPP.getCollection.Item(2)
PPNr = 2
m_DurchflussSoll = m_vorPruefpunkt.getQ
m_Pruefzeit = m_vorPruefpunkt.GetTime
m_VolumenSoll = m_Pruefzeit * m_DurchflussSoll / 3.6
PrintStatus "geschätztes Soll-Volumen in Litern: " & m_VolumenSoll
lblSollV.Caption = Format(m_VolumenSoll, "0")
Call m_Referenzzaehler.loadForDurchfluss(m_DurchflussSoll, g_App.Settings.getMIDGruppe)
m_SPS.SetQDiff 0 'm_Referenzzaehler.letzterFehler(m_DurchflussSoll)
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If Not Pruefzaehler Is Nothing Then
EinbauplatzNr = Einbauplatz.getNr
ComPort = g_App.Settings.getUSComPort(EinbauplatzNr)
' Die sieben Justage Parameter aus Zähler lesen
' Geberkonstante1_IST_m
' Geberkonstante2_IST_m
' SteilheitGeber_nsp°C
' OffsetGeber_ns
If modIECCOM.GetOffsetAndGeberAndBereich(ComPort, udtUSParameter(Einbauplatz.getNr)) <> 0 Then
MsgBox "GetOffsetAndGeberAndBereich konten nicht ausgelesen werden. Bereichsjustage wird abgebrochen."
Bereichsjustage = -1
Exit Function
Else
Call ShowUSParameter(udtUSParameter(Einbauplatz.getNr), udtUSZusatzParameter(Einbauplatz.getNr), "Justage Parameter aus Zähler gelesen:", Einbauplatz.getNr)
End If
End If
Next
PrintStatus "Vorprüfung im Vorprüfpunkt 2:"
lngRet = VorpruefungImPP(PPNr, udtPruefdaten_imPP_mitEBP())
If lngRet = -1 Then
Exit Function
End If
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If Not Pruefzaehler Is Nothing Then
EinbauplatzNr = Einbauplatz.getNr
ComPort = g_App.Settings.getUSComPort(EinbauplatzNr)
If udtPruefdaten_imPP_mitEBP(EinbauplatzNr).blnPruefungsfehler = False Then
' Volumen bestimmen
Call GetRZVolumen(EinbauplatzNr, m_Referenzzaehler, RefVolumen)
PrintStatus "RZ Volumen [m³]:" & RefVolumen
PrintStatus "Fehler des RZ in diesem Prüfpunkt: " & Format(m_Referenzzaehler.letzterFehler(m_DurchflussSoll), "0.0")
RefVolumen = RefVolumen / (1 + m_Referenzzaehler.letzterFehler(m_DurchflussSoll) / 100)
PrintStatus "Ist-Volumen:" & RefVolumen
Call GetUSVolumen(EinbauplatzNr, USVolumen)
PrintStatus "US Volumen [m³]:" & Format(USVolumen, "0.0000")
If USVolumen = 0 Then
MsgBox ("US Volumen ist 0")
Bereichsjustage = -24
Stop
'Exit Function
End If
If RefVolumen = 0 Then
Stop
MsgBox ("Ref. Volumen ist 0")
Bereichsjustage = -25
'Exit Function
End If
MSFlexGrid1.Row = Einbauplatz.getNr
MSFlexGrid1.Col = PPNr
lngUSPruefZeit_ms = udtPruefdaten_imPP_mitEBP(EinbauplatzNr).US_IstPruefzeit_ms
lngRZPruefZeit_ms = udtPruefdaten_imPP_mitEBP(EinbauplatzNr).RZ_IstPruefzeit_ms
PrintStatus "US Zähler Prüfzeit(" & EinbauplatzNr & ")= " & lngUSPruefZeit_ms & " ms"
PrintStatus "RZ Zähler Prüfzeit(" & EinbauplatzNr & ")= " & lngRZPruefZeit_ms & " ms"
If Not lngUSPruefZeit_ms = 0 Then
If Not lngUSPruefZeit_ms = 0 Then
udtUSParameter(Einbauplatz.getNr).Istfluss1_m3ph = USVolumen / (lngUSPruefZeit_ms / 1000 / 60 / 60)
udtUSParameter(Einbauplatz.getNr).Sollfluss1_m3ph = RefVolumen / (lngRZPruefZeit_ms / 1000 / 60 / 60)
udtUSParameter(Einbauplatz.getNr).Temperatur1_°C = m_SPS.GetEinlaufTemperatur
If Not m_VorPruefungsArtWaage Then
' mit den wahren Prüfzeiten korrigierter Fehler
Fehler = 100 * (USVolumen / lngUSPruefZeit_ms - RefVolumen / lngRZPruefZeit_ms) / (RefVolumen / lngRZPruefZeit_ms)
PrintStatus "Fehler = 100 * (USVolumen / lngUSPruefZeit_ms - RefVolumen / lngRZPruefZeit_ms) / (RefVolumen / lngRZPruefZeit_ms) =" & Format(Fehler, "0.00")
Else
Fehler = 100 * (USVolumen - RefVolumen) / RefVolumen
PrintStatus "Fehler = 100 * (USVolumen - RefVolumen) / RefVolumen =" & Format(Fehler, "0.00")
End If
udtUSParameter(Einbauplatz.getNr).Unlinearitaet = -Fehler
MSFlexGrid1.Text = Format(Fehler, "0.00")
Else
MsgBox ("US PP Zeit = 0 !")
Bereichsjustage = -26
Exit Function
End If
Else
MsgBox ("RZ PP Zeit = 0 !")
Bereichsjustage = -27
Exit Function
End If
gudtUSParameter = udtUSParameter(EinbauplatzNr)
ShowUSParameter gudtUSParameter, udtUSZusatzParameter(EinbauplatzNr), "Justage Parameter vor Bereichs Justage", Einbauplatz.getNr
'Eingefügt provisorisch am 18.08.02
modUS2000_Algorithmen.Justage_Execute
ShowUSParameter gudtUSParameter, udtUSZusatzParameter(EinbauplatzNr), "Justage Parameter nach Bereichs Justage", Einbauplatz.getNr
udtUSParameter(EinbauplatzNr) = gudtUSParameter
Else
PrintStatus "Einbauplatz " & EinbauplatzNr & " konnte nicht justiert werden"
PrintStatus udtPruefdaten_imPP_mitEBP(EinbauplatzNr).Fehlerinfo
udtPruefdaten_imPP_mitEBP(EinbauplatzNr).Fehlerinfo = ""
End If
End If ' Pruefzaehler is nothing
Next Einbauplatz
PrintStatus "SetOffsetAndGeberAndBereich f.a. Zähler"
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If Not Pruefzaehler Is Nothing Then
EinbauplatzNr = Einbauplatz.getNr
ComPort = g_App.Settings.getUSComPort(EinbauplatzNr)
If udtPruefdaten_imPP_mitEBP(EinbauplatzNr).blnPruefungsfehler = False Then
lngRet = modIECCOM.SetOffsetAndGeberAndBereich(ComPort, udtUSParameter(Einbauplatz.getNr))
If lngRet <> 0 Then
DebugMsg ("SetOffsetAndGeberAndBereich für Einbauplatz " & EinbauplatzNr & " gab Fehler " & lngRet & " zurück")
Bereichsjustage = -29
Stop
End If
Else
PrintStatus "SetOffsetAndGeber für Einbauplatz " & EinbauplatzNr & " nicht erfolgt"
End If
End If ' Pruefzaehler is nothing
Next Einbauplatz
PrintStatus "***** Bereichs-Justage beendet ******"
End Function
Private Sub AnzeigeAktualisieren()
lblZeit.Caption = (GetTickCount - m_Tstart) \ 1000 & "/" & m_Pruefzeit
If Not g_testModus Then
lblQIst = Format(m_SPS.getQIst, "0.000")
End If
End Sub
Private Sub AnzeigeAktualisieren_mit_Waage()
lblZeit.Caption = (GetTickCount - m_Tstart) \ 1000 & "/" & m_Pruefzeit
If Not g_testModus Then
lblQIst = Format(m_SPS.getQIst, "0.000")
End If
If m_PruefungsArtWaage Then
lblGewicht.Caption = Format(m_Waage.GetGewicht, "0.00")
End If
End Sub
'Private Sub KontinuierrlichePruefung()
'Dim altePumpeNr As Integer
'Dim udtPruefdaten_imPP_mitEBP(10) As TypUSPruefdaten
'Dim Einbauplatz As CEinbauplatz
'Dim EinbauplatzNr As Integer
'Dim lngReturn As Long
'
'Dim Pruefzaehler As CPruefzaehler
'Dim DurchflussRZ As Double
'Dim DurchflussUS As Double
'Dim dblVolumenRZ As Double
'Dim dblVolumenUS As Double
'Dim blnFertig As Boolean
'Dim ResultFilePath As String
'Dim ResultFileHandle As Long
'Dim QIstSPS As Double
'Dim QFlow_fp As Double
'Dim Fehler As Double
'Dim bBetriebNeustart As Boolean
'
'
' Set m_Referenzzaehler = New CRefzaehler
'
' m_SPS.setBetrieb 0
' sleep 2000
'
'
' ResultFilePath = "C:\kont.txt"
' On Error Resume Next
' Kill ResultFilePath
' On Error GoTo 0
'
'
' ResultFileHandle = FreeFile()
' Open ResultFilePath For Append As ResultFileHandle
'
' Print #ResultFileHandle, "Ergebnisse der Kontinuierlichen Prüfung"
' If m_PruefungsArtWaage Then
' Print #ResultFileHandle, "gegen Waage"
' Else
' Print #ResultFileHandle, "gegen Referenzzähler"
' End If
' Print #ResultFileHandle, ""
'
' Print #ResultFileHandle, "EinbauplatzNr" & vbTab & "DurchflussSoll" & vbTab & "QIstSPS" & vbTab & "Fehler" & vbTab & "Prüfzeit" & vbTab & "MID/Pumpe"
' Close #ResultFileHandle
'
' m_DurchflussSoll = CDbl(txtFlowMax.Text)
'
' Call m_Referenzzaehler.loadForDurchfluss(m_DurchflussSoll, g_App.Settings.getMIDGruppe)
' m_SPS.SetMID m_Referenzzaehler.EinbauplatzNr
'
' ' Pumpenauswahl
' m_SPS.AllePumpenAbwaehlen
' Set m_Pumpe = Pumpenwahl(m_DurchflussSoll, m_ColPumpen)
' m_Pumpe.Anwahl
'
' ' Durchlauf auswählen
' m_SPS.setBehaelter 1
'
' bBetriebNeustart = True
'
' Do
' PrintStatus "Nächster Durchfluss: " & m_DurchflussSoll
' m_SPS.SetQSoll m_DurchflussSoll
' lblQSoll.Caption = m_DurchflussSoll
'
' If Not m_Referenzzaehler.IstOkFuerDurchfluss(m_DurchflussSoll) Then
' m_SPS.SetQSoll 0
' sleep 5000
'
' m_SPS.setBetrieb 0
' sleep 2000
'
' Call m_Referenzzaehler.loadForDurchfluss(m_DurchflussSoll, g_App.Settings.getMIDGruppe)
' m_SPS.SetMID m_Referenzzaehler.EinbauplatzNr
' bBetriebNeustart = True
' End If
'
' If Not m_Pumpe.IstOkFuerDurchfluss(m_DurchflussSoll) Then
' m_SPS.SetQSoll 0
' sleep 5000
'
' m_SPS.setBetrieb 0
' sleep 2000
'
'
' ' Pumpenauswahl
' m_SPS.AllePumpenAbwaehlen
' Set m_Pumpe = Pumpenwahl(m_DurchflussSoll, m_ColPumpen)
' m_Pumpe.Anwahl
' PrintStatus "zu startende Pumpe: " & m_Pumpe.GetSPSVarname
'
' bBetriebNeustart = True
'
' End If
'
' If bBetriebNeustart = True Then
'
' m_SPS.SetServoStellung lookupFUServoStellwert(m_DurchflussSoll)
' m_SPS.SetQSoll m_DurchflussSoll
' lblQSoll.Caption = m_DurchflussSoll
'
' m_SPS.setBetrieb 2
' bBetriebNeustart = False
'
' End If
'
' ' Warten bis Durchfluss erreicht ist
' PrintStatus "Warte auf 'Solldurchfluss erreicht'"
' Do While Not m_SPS.SolldurchflussErreicht
' QIstSPS = Format(m_SPS.getQIst, "0.000")
' lblQIst.Caption = QIstSPS
' sleep 500, True
' If g_Abbruch = True Then
' Exit Sub
' End If
' Loop
' sleep 2000
'
'
' ' Prüfzeit in s ausrechnen
' m_Pruefzeit = 240 / m_DurchflussSoll
' If m_Pruefzeit < 60 Then
' m_Pruefzeit = 60
' End If
'
'
' For Each Einbauplatz In m_colEinbauplatz
' Set Pruefzaehler = Einbauplatz.getPruefzaehler
' EinbauplatzNr = Einbauplatz.getNr
'
'
' If Not Pruefzaehler Is Nothing Then
'
' udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).SollDurchfluss = m_DurchflussSoll
' udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).SollPruefzeit_s = m_Pruefzeit
'
' End If
' Next
' DoEvents
'
' m_Tstart = GetTickCount
' QIstSPS = Format(m_SPS.getQIst, "0.000")
' lngReturn = UltraschallPruefung(udtPruefdaten_imPP_mitEBP)
'
' ' lngReturn = 0
'
' If lngReturn = 0 Then
' ' Fehlerermittlung
' For Each Einbauplatz In m_colEinbauplatz
' Set Pruefzaehler = Einbauplatz.getPruefzaehler
' EinbauplatzNr = Einbauplatz.getNr
'
' If Not Pruefzaehler Is Nothing Then
' lngReturn = GetUSVolumen(EinbauplatzNr, dblVolumenUS, Einbauplatz.getPruefzaehler.getSerienNr) And 0
' If lngReturn = 0 Then
' PrintStatus "Volumen des USZ: " & dblVolumenUS & " m³"
' lngReturn = GetRZVolumen(EinbauplatzNr, m_Referenzzaehler, dblVolumenRZ)
' If lngReturn = 0 Then
'
' PrintStatus "Volumen des RZ: " & dblVolumenRZ & " m³"
' dblVolumenRZ = dblVolumenRZ / (1 + m_Referenzzaehler.letzterFehler(m_DurchflussSoll) / 100)
' PrintStatus "Fehler des RZ in diesem PP:" & m_Referenzzaehler.letzterFehler(m_DurchflussSoll)
' PrintStatus "korrigiertes Volumen: " & dblVolumenRZ & " m³"
'
'
' ' unterschiedliche Prüfzeiten eliminieren
' DurchflussRZ = dblVolumenRZ / udtPruefdaten_imPP_mitEBP(EinbauplatzNr).RZ_IstPruefzeit_ms
' DurchflussUS = dblVolumenUS / udtPruefdaten_imPP_mitEBP(EinbauplatzNr).US_IstPruefzeit_ms
'
' 'Simulation
' 'DurchflussRZ = m_DurchflussSoll
' 'DurchflussUS = DurchflussRZ * (1 + (Rnd(1) * 0.1 - 0.05))
'
' PrintStatus "US Durchfluss: " & DurchflussUS
' PrintStatus "Ist-Durchfluss: " & DurchflussRZ
'
' Fehler = ((DurchflussUS - DurchflussRZ) / DurchflussRZ) * 100
' PrintStatus "ergibt Fehler: " & Format(Fehler, "0.0") & " %"
'
' ResultFileHandle = FreeFile()
' Open ResultFilePath For Append As ResultFileHandle
'
' Print #ResultFileHandle, EinbauplatzNr & vbTab & Format(m_DurchflussSoll, "0.000") & vbTab & Format(QIstSPS, "0.000") & vbTab & Format(Fehler, "0.00") & vbTab & m_Pruefzeit & vbTab & "MID" & m_Referenzzaehler.Nennweite & "," & m_Pumpe.GetSPSVarname
' Close #ResultFileHandle
' Else
' PrintStatus " GETRZVolumen Fehlfunktion:" & lngReturn
' End If
' Else
' PrintStatus " GETUSVolumen Fehlfunktion:" & lngReturn
' End If
' End If
' Next
' End If ' UltraschallPruefung
'
' ' Durchfluss ändern
' m_DurchflussSoll = CDbl(Format(m_DurchflussSoll * 0.9, "0.000"))
'
' If m_DurchflussSoll < CDbl(txtFlowMin) Then
' blnFertig = True
' End If
'
' Loop While Not blnFertig
'
' PrintStatus "Kontinuierliche Prüfung beendet"
'End Sub
Private Sub KontinuierrlichePruefungWaage()
Dim altePumpeNr As Integer
Dim udtPruefdaten_imPP_mitEBP(10) As TypUSPruefdaten
Dim Einbauplatz As CEinbauplatz
Dim EinbauplatzNr As Integer
Dim lngReturn As Long
Dim Pruefzaehler As CPruefzaehler
Dim DurchflussRZ As Double
Dim DurchflussUS As Double
Dim dblVolumenRZ As Double
Dim dblVolumenUS As Double
Dim dblVolumenWaage As Double
Dim blnFertig As Boolean
Dim ResultFileHandle As Long
Dim QIstSPS As Double
Dim QFlow_fp As Double
Dim Fehler As Double
Dim bBetriebNeustart As Boolean
Dim Temperatur As Double
Dim blnPruefungFertig As Boolean
m_SPS.setBetrieb 0
sleep 2000
lblGesZeit.Visible = False
Set m_Referenzzaehler = New CRefzaehler
If g_Abbruch Then
Exit Sub
End If
m_DurchflussSoll = CDbl(txtFlowMax.Text)
' Pumpe für den Start auswählen
m_SPS.AllePumpenAbwaehlen
Set m_Pumpe = Pumpenwahl(m_DurchflussSoll, m_ColPumpen)
PrintStatus "zu startende Pumpe: " & m_Pumpe.GetSPSVarname
bBetriebNeustart = True
Set m_Referenzzaehler = New CRefzaehler
Call m_Referenzzaehler.loadForDurchfluss(m_DurchflussSoll, g_App.Settings.getMIDGruppe)
m_SPS.SetQDiff 0 ' m_Referenzzaehler.letzterFehler(m_DurchflussSoll)
Do
PrintStatus "Nächster Durchfluss: " & m_DurchflussSoll
Debug.Print m_ersterPruefzaehler.getIdentNrObj.getNennweite
'geändert am 22.01.2004 AP
m_Pruefzeit = 500 / m_DurchflussSoll 'Falls neue Nennweiten geprüft werden sollten
Select Case m_ersterPruefzaehler.getIdentNrObj.getNennweite
Case 50
m_Pruefzeit = 100 / m_DurchflussSoll
Case 65
m_Pruefzeit = 160 / m_DurchflussSoll
Case 80
m_Pruefzeit = 250 / m_DurchflussSoll
Case 100
m_Pruefzeit = 400 / m_DurchflussSoll
End Select
'Die Prüfzeit soll 60 Sekunden nie unterschreiten
If m_Pruefzeit <= 60 Then
m_Pruefzeit = 60
End If
'neu am 21.01.2004 AP die Prüfzeit soll 600 Sekunden nicht überschreiten
If m_Pruefzeit >= 1100 Then
m_Pruefzeit = 1100
End If
PrintStatus "Prüfzeit: " & m_Pruefzeit
' Ist der Referenzzähler für diesen Durchfluß geeignet ?
If Not m_Referenzzaehler.IstOkFuerDurchfluss(m_DurchflussSoll) Then
' Referenzzaehler wechseln
PrintStatus "Referenzzaehler wechseln"
If Not m_PruefungsArtWaage Then
m_SPS.SetQSoll 0
sleep 5000
m_SPS.setBetrieb 0
sleep 2000
End If
Call m_Referenzzaehler.loadForDurchfluss(m_DurchflussSoll, g_App.Settings.getMIDGruppe)
m_SPS.SetQDiff 0 ' m_Referenzzaehler.letzterFehler(m_DurchflussSoll)
PrintStatus "nutze MID " & m_Referenzzaehler.Nennweite
bBetriebNeustart = True
End If
If Not m_Pumpe.IstOkFuerDurchfluss(m_DurchflussSoll) Then
' Pumpe wechseln
PrintStatus "Pumpe wechseln"
If Not m_PruefungsArtWaage Then
m_SPS.SetQSoll 0
sleep 5000
m_SPS.setBetrieb 0
sleep 2000
End If
' Pumpenauswahl
m_SPS.AllePumpenAbwaehlen
Set m_Pumpe = Pumpenwahl(m_DurchflussSoll, m_ColPumpen)
PrintStatus "zu startende Pumpe: " & m_Pumpe.GetSPSVarname
bBetriebNeustart = True
End If
' hier gehts los, Pumpe und MID sind eingestellt
If m_PruefungsArtWaage Then
' Waage soweit wie nötig füllen und leeren, Grenzwert setzen
If WaageVorbereitenFuerPP() < 0 Then
' Änderung 9.9.2002
GoTo NextDurchfluss
End If
Else
' Durchlauf (kein Beählter) auswählen
m_SPS.setBehaelter 1
m_SPS.SetQSoll m_DurchflussSoll
lblQSoll.Caption = m_DurchflussSoll
m_SPS.SetMID m_Referenzzaehler.EinbauplatzNr
m_SPS.SetQSoll m_DurchflussSoll
lblQSoll.Caption = m_DurchflussSoll
If bBetriebNeustart = True Then
m_SPS.SetServoStellung lookupFUServoStellwert(m_DurchflussSoll)
' Pumpe starten
m_Pumpe.Anwahl
m_SPS.SetMID m_Referenzzaehler.EinbauplatzNr
m_SPS.setBetrieb 2
bBetriebNeustart = False
End If
' Warten bis Durchfluss erreicht ist
PrintStatus "Warte auf 'Solldurchfluss erreicht'"
Do While Not m_SPS.SolldurchflussErreicht
QIstSPS = CDbl(m_SPS.getQIst)
lblQIst.Caption = Format(QIstSPS, "0.000")
sleep 500, True
If g_Abbruch = True Then
Exit Sub
End If
Loop
'sleep 2000
End If ' keine Waage
' Wenn keine Waage: Wasser läuft
' Wenn Waage: Wasser läuft nicht, Waage tariert
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
EinbauplatzNr = Einbauplatz.getNr
If Not Pruefzaehler Is Nothing Then
' OptoTimer reset
Call USSetOptoOffTimerMax(Einbauplatz.getNr)
' Pruefdaten setzen für Ultraschallprüfung
udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).SollDurchfluss = m_DurchflussSoll
udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).SollPruefzeit_s = m_Pruefzeit
End If
Next
DoEvents
Temperatur = m_SPS.GetEinlaufTemperatur
If m_PruefungsArtWaage Then
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
EinbauplatzNr = Einbauplatz.getNr
If Not Pruefzaehler Is Nothing Then
lngReturn = StarteUSundRZZaehler(Einbauplatz.getNr)
If lngReturn = 0 Then
PrintStatus "RZ-START und NOVA_START OK"
Else
PrintStatus "RZ-START und NOVA_START Fehler:" & lngReturn
End If
End If
Next
' Waage virtuell tarieren
m_Waage.SoftTara
' Prüfung starten
m_SPS.AllePumpenAbwaehlen
m_Pumpe.Anwahl
m_SPS.SetMID m_Referenzzaehler.EinbauplatzNr
m_SPS.SetServoStellung lookupFUServoStellwert(m_DurchflussSoll)
m_SPS.SetQSoll m_DurchflussSoll
m_SPS.setBetrieb 2
m_Tstart = GetTickCount
PrintStatus "Pumpe gestartet"
Do While Not ((m_Pumpe.GetStatus And 4) = 4)
sleep 500, True
If g_Abbruch = True Then
Exit Sub
End If
Loop
PrintStatus "Pumpe läuft"
' Prüfung startet
lblGewicht = m_Waage.GetGewicht
PrintStatus "Prüfung läuft, Ventil offen."
QIstSPS = 0
blnPruefungFertig = False
Do While Not blnPruefungFertig
If m_SPS.GrenzwertWaageErreicht Then
blnPruefungFertig = True
Else
If QIstSPS = 0 And (GetTickCount - m_Tstart) \ 1000 > m_Pruefzeit \ 2 Then
QIstSPS = m_SPS.getQIst
PrintStatus "IstDurchfluss zur halben Prüfzeit: " & QIstSPS & " m³/h"
End If
lblQIst.Caption = Format(m_SPS.getQIst, "0.000")
lblGewicht = m_Waage.GetGewicht
sleep 500
End If
AnzeigeAktualisieren_mit_Waage
sleep 100
DoEvents
If g_Abbruch Then Exit Sub
Loop
PrintStatus "Waagen-Grenzwert erreicht"
m_SPS.setBetrieb 0
' Prüfzeit messen/stoppen in s
m_Tpruef = (GetTickCount - m_Tstart) \ 1000
m_Waage.SetNettoGrenzwert1 m_Behaelter.m_WaageGrenzwert
PrintStatus "Warte auf Waagenruhe"
Call m_Waage.WarteAufRuhe
dblVolumenWaage = Volumen(m_Waage.GetGewicht, Temperatur) ' in m³
PrintStatus "VolumenWaage: " & Format(dblVolumenWaage, "0.00000") & " m³"
For Each Einbauplatz In m_colEinbauplatz
EinbauplatzNr = Einbauplatz.getNr
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If (Not Pruefzaehler Is Nothing) Then
lngReturn = StoppeUSundRZZaehler(EinbauplatzNr)
If lngReturn = 0 Then
PrintStatus "RZ-STOP und NOVA_STOP OK"
Else
PrintStatus "RZ-STOP und NOVA_STOP Fehler:" & lngReturn
End If
End If ' PZ is nothing and GetActive
Next Einbauplatz
For Each Einbauplatz In m_colEinbauplatz
EinbauplatzNr = Einbauplatz.getNr
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If (Not Pruefzaehler Is Nothing) Then
lngReturn = GetUSVolumen(EinbauplatzNr, dblVolumenUS)
PrintStatus "Volumen des US: " & dblVolumenUS & " m³"
Fehler = (dblVolumenUS - dblVolumenWaage) / dblVolumenWaage * 100
PrintStatus "ergibt Fehler: " & Format(Fehler, "0.0") & " %"
saveKontPrueffehler Fehler, QIstSPS, dblVolumenUS, dblVolumenRZ, dblVolumenWaage, EinbauplatzNr, Temperatur, m_Tpruef, Einbauplatz.getPruefzaehler.getSerienNr
'auskommentiert am 29.08.02 Pfeiffer
'ResultFileHandle = FreeFile()
'Open ResultFilePath For Append As ResultFileHandle
' Print #ResultFileHandle, EinbauplatzNr & vbTab & Format(m_DurchflussSoll, "0.000") & vbTab & Format(QIstSPS, "0.000") & vbTab & Format(Fehler, "0.00") & vbTab & m_Tpruef & vbTab & "MID" & m_Referenzzaehler.Nennweite & "," & m_Pumpe.GetSPSVarname & vbTab & Format(dblVolumenUS, "0.00000") & vbTab & Format(dblVolumenWaage, "0.00000")
' Close #ResultFileHandle
End If
Next
Else
' keine Waage
sleep 1000
QIstSPS = Format(m_SPS.getQIst, "0.000")
lngReturn = UltraschallPruefung(udtPruefdaten_imPP_mitEBP)
If g_Abbruch Then
Exit Sub
End If
If lngReturn = 0 Then
' Fehlerermittlung
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
EinbauplatzNr = Einbauplatz.getNr
If Not Pruefzaehler Is Nothing Then
lngReturn = GetUSVolumen(EinbauplatzNr, dblVolumenUS) 'And 0
If lngReturn = 0 Then
PrintStatus "Volumen des USZ: " & dblVolumenUS & " m³"
lngReturn = GetRZVolumen(EinbauplatzNr, m_Referenzzaehler, dblVolumenRZ) And 0
If lngReturn = 0 Then
PrintStatus "Volumen des RZ: " & dblVolumenRZ & " m³"
PrintStatus "Fehler des RZ in diesem PP:" & m_Referenzzaehler.letzterFehler(m_DurchflussSoll)
dblVolumenRZ = dblVolumenRZ / (1 + m_Referenzzaehler.letzterFehler(m_DurchflussSoll) / 100)
PrintStatus "korrigiertes Volumen:" & dblVolumenRZ & " m³"
' unterschiedliche Prüf-Zeiten elimienieren
DurchflussRZ = dblVolumenRZ / udtPruefdaten_imPP_mitEBP(EinbauplatzNr).RZ_IstPruefzeit_ms
If udtPruefdaten_imPP_mitEBP(EinbauplatzNr).US_IstPruefzeit_ms = 0 Then
PrintStatus "US_IstPruefzeit_ms = 0, dh. Fehler konnte nicht ermittelt werden"
Else
DurchflussUS = dblVolumenUS / udtPruefdaten_imPP_mitEBP(EinbauplatzNr).US_IstPruefzeit_ms
'Simulation
'DurchflussRZ = m_DurchflussSoll
'DurchflussUS = DurchflussRZ * (1 + (Rnd(1) * 0.1 - 0.05))
PrintStatus "US Durchfluss: " & DurchflussUS
PrintStatus "Ist-Durchfluss: " & DurchflussRZ
Fehler = ((DurchflussUS - DurchflussRZ) / DurchflussRZ) * 100
PrintStatus "ergibt Fehler: " & Format(Fehler, "0.0") & " %"
'Hier werden die Daten für die Prüfung gegen Referenzzähler angespeichert
saveKontPrueffehler Fehler, QIstSPS, dblVolumenUS, dblVolumenRZ, dblVolumenWaage, EinbauplatzNr, Temperatur, m_Tpruef, Einbauplatz.getPruefzaehler.getSerienNr
' ResultFileHandle = FreeFile()
' Open ResultFilePath For Append As ResultFileHandle
'
' Print #ResultFileHandle, EinbauplatzNr & vbTab & Format(m_DurchflussSoll, "0.000") & vbTab & Format(QIstSPS, "0.000") & vbTab & Format(Fehler, "0.00") & vbTab & m_Pruefzeit & vbTab & "MID" & m_Referenzzaehler.Nennweite & "," & m_Pumpe.GetSPSVarname
' Close #ResultFileHandle
End If
Else
PrintStatus " GETRZVolumen Fehlfunktion:" & lngReturn
End If
Else
PrintStatus " GETUSVolumen Fehlfunktion:" & lngReturn
End If
End If
Next
End If ' UltraschallPruefung
End If ' keine Waage
' Durchfluss ändern
NextDurchfluss:
m_DurchflussSoll = CDbl(Format(m_DurchflussSoll * (100 - CDbl(Left(cmbKontSprung.Text, 8))) / 100, "0.000"))
If m_DurchflussSoll < CDbl(txtFlowMin) Then
blnFertig = True
End If
Loop While Not blnFertig
lblGesZeit.Visible = True
PrintStatus "Kontinuierliche Prüfung beendet"
End Sub
Private Sub KontinuierrlichePruefungInit()
ResultFilePath = "C:\kont.txt"
On Error Resume Next
Kill ResultFilePath
On Error GoTo 0
txtFlowMax = m_colUniqueVorPP.Item(1).getQ
txtFlowMin = m_colUniqueVorPP.Item(m_colUniqueVorPP.Count).getQ
'geändert am 22.01.2004 AP Vorbesetzung der ComboBox mit dem 2.Wert
cmbKontSprung.ListIndex = 2
End Sub
Public Sub cmdStart_Click()
Dim i As Integer
Dim Ende As Integer
m_Pruefgang.save
lblTitle.Caption = "kontinuierliche Ultraschall-Zähler Prüfung"
Ende = CInt(txtKontCount.Text)
For i = Ende To 1 Step -1
If g_Abbruch Then Exit Sub
txtKontCount.Text = i
PrintStatus "kontinuierlicher Prüfgang " & Ende - i & "/" & Ende
Call KontinuierrlichePruefungWaage
Set m_Pruefgang = Nothing
Set m_Pruefgang = New CPruefgang
m_Pruefgang.save
If g_Abbruch Then Exit Sub
Next
End Sub
Private Sub ShowUSParameter(udtUSJustageParameter As JustageParameter_Type, udtUSZusatzParameter As US_ZusatzParameter_Typ, sUeberschrift As String, EinbauplatzNr As Integer)
PrintStatus "-----------------------------------------------------"
PrintStatus sUeberschrift
PrintStatus "Einbauplatz: " & EinbauplatzNr
PrintStatus "Bereich_ns: " & udtUSJustageParameter.Bereich_ns
PrintStatus "Geberkonstante_Neu1_m: " & udtUSJustageParameter.Geberkonstante_Neu1_m
PrintStatus "Geberkonstante_Neu2_m: " & udtUSJustageParameter.Geberkonstante_Neu2_m
PrintStatus " "
PrintStatus "Geberkonstante1_IST_m: " & udtUSJustageParameter.Geberkonstante1_IST_m
PrintStatus "Geberkonstante2_IST_m: " & udtUSJustageParameter.Geberkonstante2_IST_m
PrintStatus "SteilheitGeber:" & udtUSJustageParameter.SteilheitGeber_nsp°C
PrintStatus "Istfluss1_m3ph: " & udtUSJustageParameter.Istfluss1_m3ph
PrintStatus " "
PrintStatus "Istfluss2_m3ph: " & udtUSJustageParameter.Istfluss2_m3ph
PrintStatus "Offset_Neu1_m3ph: " & udtUSJustageParameter.Offset_Neu1_m3ph
PrintStatus "Offset_Neu2_m3ph: " & udtUSJustageParameter.Offset_Neu2_m3ph
PrintStatus "Offset1_IST_m3ph: " & udtUSJustageParameter.Offset1_IST_m3ph
PrintStatus "Offset2_IST_m3ph: " & udtUSJustageParameter.Offset2_IST_m3ph
PrintStatus "OffsetGeber_ns: " & udtUSJustageParameter.OffsetGeber_ns
PrintStatus " "
PrintStatus "Sollfluss1_m3ph: " & udtUSJustageParameter.Sollfluss1_m3ph
PrintStatus "Sollfluss2_m3ph: " & udtUSJustageParameter.Sollfluss2_m3ph
PrintStatus "Temperatur1_°C: " & udtUSJustageParameter.Temperatur1_°C
PrintStatus "Temperatur2_°C: " & udtUSJustageParameter.Temperatur2_°C
PrintStatus "Unlinearitaet: " & udtUSJustageParameter.Unlinearitaet
PrintStatus " "
PrintStatus "FP_Impulswertigkeit: " & udtUSZusatzParameter.FP_Impulswertigkeit
PrintStatus "FP_Impulswertigkeit_Pruef: " & udtUSZusatzParameter.FP_Impulswertigkeit_Pruef
PrintStatus "PulseMode: " & udtUSZusatzParameter.PulseMode
PrintStatus "FP_Flow_Min: " & udtUSZusatzParameter.FP_Flow_Min
PrintStatus "FP_Flow_Max: " & udtUSZusatzParameter.FP_Flow_Max
PrintStatus "-----------------------------------------------------"
End Sub
Private Function UltraschallpruefungWaage() As Double
Dim Einbauplatz As CEinbauplatz
Dim Pruefzaehler As CPruefzaehler
Dim udtPruefdaten_imPP_mitEBP(10) As TypUSPruefdaten
Dim Temperatur As Double
Dim dblVolumenWaage As Double
' Folgende Werte mussen gesetzt sein:
' m_ersterPruefzaehler (QMax bestimmen zum Füllen)
' m_DurchflussSoll
' m_PruefungsartWaage
' m_Pruefzeit
' Waage (m_Waage) vorbereiten
' Call WaageVorbereitenFuerPP
' Referenzzazehler m_Referenzzaehler setzen
' m_SPS.SetMID m_Referenzzaehler.EinbauplatzNr
' SPS.MID, m_Referenzzaehler muss ausgewählt sein
' m_waage muss ausgewählt sein
' For Each Einbauplatz In m_colEinbauplatz
' Set Pruefzaehler = Einbauplatz.getPruefzaehler
' EinbauplatzNr = Einbauplatz.getNr
'
' If Not Pruefzaehler Is Nothing Then
' ' OptoTimer reset
' Call USSetOptoOffTimerMax(Einbauplatz.getNr)
' ' Pruefdaten setzen für Ultraschallprüfung
' udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).SollDurchfluss = m_DurchflussSoll
' udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).SollPruefzeit_s = m_Pruefzeit
' End If
' Next
' DoEvents
'
' Temperatur = m_SPS.GetEinlaufTemperatur
'
' m_Tstart = GetTickCount ' Startzeitpunkt
'
' For Each Einbauplatz In m_colEinbauplatz
' Set Pruefzaehler = Einbauplatz.getPruefzaehler
' EinbauplatzNr = Einbauplatz.getNr
' If Not Pruefzaehler Is Nothing Then
' lngReturn = StarteUSundRZZaehler(Einbauplatz.getNr, Einbauplatz.getPruefzaehler.getSerienNr)
' If lngReturn = 0 Then
' PrintStatus "RZ-START und NOVA_START OK"
' Else
' PrintStatus "RZ-START und NOVA_START Fehler:" & lngReturn
' End If
' End If
' Next
'
' ' Prüfung starten
'
' m_SPS.setBetrieb 2
' PrintStatus "Pumpe läuft, Ventil ist noch geschlossen"
' Do While Not ((m_Pumpe.GetStatus And 4) = 4)
' sleep 500, True
' Loop
' PrintStatus "Prüfung läuft, Ventil offen."
'
' blnPruefungFertig = False
' Do While Not blnPruefungFertig
' If m_SPS.GrenzwertWaageErreicht Then
' blnPruefungFertig = True
' Else
' sleep 300, True
' End If
' AnzeigeAktualisieren
' sleep 100
' DoEvents
'
' If g_Abbruch Then Exit Function
' Loop
' PrintStatus "Waagen-Grenzwert erreicht"
'
' m_SPS.setBetrieb 0
' PrintStatus "Warte auf Waagenruhe"
' Call m_Waage.WarteAufRuhe
'
' For Each Einbauplatz In m_colEinbauplatz
' EinbauplatzNr = Einbauplatz.getNr
' Set Pruefzaehler = Einbauplatz.getPruefzaehler
' If (Not Pruefzaehler Is Nothing) Then
'
' lngReturn = StoppeUSundRZZaehler(EinbauplatzNr)
' If lngReturn = 0 Then
' PrintStatus "RZ-STOP und NOVA_STOP OK"
' Else
' PrintStatus "RZ-STOP und NOVA_STOP Fehler:" & lngReturn
' End If
' End If ' PZ is nothing
' Next Einbauplatz
'
End Function
Private Sub saveKontPrueffehler(Fehler As Double, QIst As Double, VolumenUS As Double, VolumenRZ As Double, VolumenWaage As Double, EinbauplatzNr As Integer, Temperatur As Double, Pruefzeit As Long, SerienNr As Long)
Dim rs As CRecordset
Set rs = New CRecordset
rs.openRS "KontPrueffehler", False
rs.addNew
Call rs.setValue("PruefgangNr", m_Pruefgang.PruefgangNr)
Call rs.setValue("Datum", Now())
Call rs.setValue("Fehler", Fehler)
Call rs.setValue("Solldurchfluss", m_DurchflussSoll)
Call rs.setValue("DurchflussSPS", QIst)
Call rs.setValue("VolumenUS", VolumenUS)
Call rs.setValue("VolumenRef", VolumenRZ)
Call rs.setValue("VolumenWaage", VolumenWaage)
Call rs.setValue("SerienNr", SerienNr)
If Not m_Pumpe Is Nothing Then
Call rs.setValue("Pumpe", m_Pumpe.GetSPSVarname)
End If
If Not m_Referenzzaehler Is Nothing Then
Call rs.setValue("MID", m_Referenzzaehler.Nennweite)
End If
Call rs.setValue("EinbauplatzNr", EinbauplatzNr)
Call rs.setValue("Temperatur", Temperatur)
Call rs.setValue("Pruefzeit", Pruefzeit)
rs.update
Set rs = Nothing
End Sub
Private Sub Form_Unload(Cancel As Integer)
On Error Resume Next
If Not m_Waage Is Nothing Then
m_Waage.releaseMScomm
Set m_Waage = Nothing
End If
End Sub
Private Function SindPruefzeitenOK() As Boolean
PrintStatus "SIndPruefzeitenOK..."
SindPruefzeitenOK = True
' Exit Function
Dim Vorpruefpunkt As CVorpruefpunkt
Dim Pruefpunkt As CPruefpunkt
Dim dblSollVolumen As Double
Dim Behaelter As CBehaelter
If m_VorPruefungsArtWaage And mbln_Vorpruefung Then
For Each Vorpruefpunkt In m_ersterPruefzaehler.getVorpruefpunkte.getPruefpunkte.getCollection
dblSollVolumen = Vorpruefpunkt.getQ * Vorpruefpunkt.GetTime / 3.6
Set Behaelter = New CBehaelter
If Behaelter.IstOkFuerVolumen(dblSollVolumen) = True Then
PrintStatus "Behälter für Prüfpunkt Q=" & Vorpruefpunkt.getQ & ", " & Vorpruefpunkt.GetTime & "s gefunden."
PrintStatus "Behälter grenzwert:" & Behaelter.m_WaageGrenzwert
Else
MsgBox "### kein Behälter mit" & dblSollVolumen & "l für VorPrüfpunkt Q=" & Vorpruefpunkt.getQ & " und Tprüf=" & Vorpruefpunkt.GetTime & "s gefunden."
PrintStatus "### kein Behälter mit" & dblSollVolumen & "l für VorPrüfpunkt Q=" & Vorpruefpunkt.getQ & " und Tprüf=" & Vorpruefpunkt.GetTime & "s gefunden."
SindPruefzeitenOK = False
End If
Next
End If
If m_PruefungsArtWaage And mbln_Hauptpruefung Then
For Each Pruefpunkt In m_ersterPruefzaehler.getPruefpunkte.getPruefpunkte.getCollection
dblSollVolumen = Pruefpunkt.getQ * Pruefpunkt.GetTime / 3.6
Set Behaelter = New CBehaelter
If Behaelter.LoadForVolumen(dblSollVolumen) Then
PrintStatus "Behälter mit " & dblSollVolumen & " l für Prüfpunkt Q=" & Pruefpunkt.getQ & " und Tprüf=" & Pruefpunkt.GetTime & "s gefunden."
PrintStatus "Behälter grenzwert:" & Behaelter.m_WaageGrenzwert
Else
MsgBox "### kein Behälter mit " & dblSollVolumen & " l für Prüfpunkt Q=" & Pruefpunkt.getQ & ", " & Pruefpunkt.GetTime & "s gefunden."
PrintStatus "### kein Behälter mit " & dblSollVolumen & " l für Prüfpunkt Q=" & Pruefpunkt.getQ & " und Tprüf=" & Pruefpunkt.GetTime & "s gefunden."
SindPruefzeitenOK = False
End If
Next
End If
End Function
Function ResetTemperaturTransferLock(intPortNr As Integer, Optional lngIdentNoForVerification As Long = -1) As Long
Dim lngReturn As Long
Dim blnResult As Boolean
lngReturn = SetTemperatureTransferLock(intPortNr, False, lngIdentNoForVerification)
If lngReturn <> 0 Then
ResetTemperaturTransferLock = lngReturn
Exit Function
End If
'Überprüfen !
lngReturn = GetTemperatureTransferLock(intPortNr, blnResult, lngIdentNoForVerification)
If lngReturn <> 0 Then
ResetTemperaturTransferLock = lngReturn
Exit Function
End If
If blnResult = True Then 'Temperatur kann nicht gemessen werden -> Zähler darf so nicht ausgeliefert werden !!!
ResetTemperaturTransferLock = -55
Exit Function
End If
End Function
Function GetUSVoreinstellwert(dblDurchfluss As Double) As Integer
Dim strSQL As String
Dim rs As CRecordset
Dim iNennweite As Integer
Dim dblObererDurchfluss As Double
Dim dblUntererDurchfluss As Double
Dim dblObererVoreinstellwert As Double
Dim dblUntererVoreinstellwert As Double
On Error GoTo Errorhandler
Set rs = New CRecordset
iNennweite = m_ersterPruefzaehler.getIdentNrObj.getNennweite
strSQL = "SELECT * FROM USVoreinstellwerte where Nennweite = " & iNennweite & " and Pruefstation= " & g_App.PruefstationNr & " order by Durchfluss desc"
rs.openRS strSQL, True
dblObererDurchfluss = 0
dblUntererDurchfluss = 0
Do While Not rs.EOF
Debug.Print rs.getDoubleValue("Durchfluss")
dblObererDurchfluss = rs.getDoubleValue("Durchfluss")
dblObererVoreinstellwert = rs.getDoubleValue("Voreinstellwert")
If dblObererDurchfluss >= dblDurchfluss And dblDurchfluss >= dblUntererDurchfluss Then
GetUSVoreinstellwert = dblObererVoreinstellwert - (dblObererVoreinstellwert - dblUntererVoreinstellwert) * (dblObererDurchfluss - dblDurchfluss) / (dblObererDurchfluss - dblUntererDurchfluss)
PrintStatus "USVoreinstellwert (interpoliert)= " & GetUSVoreinstellwert
Exit Function
End If
dblUntererDurchfluss = dblObererDurchfluss
dblUntererVoreinstellwert = dblObererVoreinstellwert
rs.MoveNext
Loop
ErrorMsg "bitte Tabelle USVoreinstellwert pflegen"
GetUSVoreinstellwert = 50
Exit Function
Errorhandler:
ErrorMsg "Fehler " & Err.Number & " in GetUSVoreinstellwert: " & Err.Description
End Function
Private Sub Setze_FP_St_GeberKonstanteZeroflow(ByRef SteilheitGeber_nsp() As Double)
Dim EinbauplatzNr As Integer
Dim Einbauplatz As CEinbauplatz
Dim Pruefzaehler As CPruefzaehler
Dim ComPort As Integer
Dim lngReturn As Long
Dim dblFlpDiffTof As Double
Dim dblFP_Zeroflow_DiffTof As Double
Dim dblFP_Zeroflow_Temp As Double
Dim dblFP_ST_Geber As Double
Dim dblTemperatur As Double
Dim intMessdauer As Integer
Dim lngStartzeit As Long
Dim i As Integer
Dim mlngCountMessungenLaufzeit(10) As Long
Dim mdblLaufzeitMittelSumme(10) As Double
Dim mdblTemperaturMittelSumme(10) As Double
Dim mlngCountMessungenTemp(10) As Double
dblTemperatur = m_SPS.GetEinlaufTemperatur
' zur Berechnung der Mittelwerte auf Null setzen
For i = 1 To 10
mdblLaufzeitMittelSumme(i) = 0
mdblTemperaturMittelSumme(i) = 0
mlngCountMessungenLaufzeit(i) = 0
mlngCountMessungenTemp(i) = 0
Next
' Messdauer aus INI Datei holen
intMessdauer = g_App.Settings.GETUSZeroflowMesszeit
PrintStatus "Zeroflow Messung gestartet (Dauer " & intMessdauer & " s)"
' durchschnittliche Zeroflow Laufzeit für alle Einbauplätze bestimmen
lngStartzeit = GetTickCount
' für die Dauer der Prüfzeit
Do While (GetTickCount - lngStartzeit) / 1000 < intMessdauer
lblZeit.Caption = Format((GetTickCount - lngStartzeit) / 1000, "0") & "/" & intMessdauer
DoEvents
' für jeden Prüfzaehler
For Each Einbauplatz In m_colEinbauplatz
EinbauplatzNr = Einbauplatz.getNr
ComPort = g_App.Settings.getUSComPort(EinbauplatzNr)
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If Not Pruefzaehler Is Nothing Then
Debug.Print "Einbauplatz " & EinbauplatzNr
' Hole die aktuelle Laufzeit im stehenden kalten Wasser für diesen Prüfzähler
lngReturn = modIECCOM.Get_FLP_DIffTof(ComPort, dblFlpDiffTof)
Debug.Print "Get_FLP_DIffTof: " & dblFlpDiffTof
DoEvents
If lngReturn = 0 Then
' Errechne den Mittelwert
mlngCountMessungenLaufzeit(EinbauplatzNr) = mlngCountMessungenLaufzeit(EinbauplatzNr) + 1
Debug.Print "Messung Nr " & mlngCountMessungenLaufzeit(EinbauplatzNr)
mdblLaufzeitMittelSumme(EinbauplatzNr) = mdblLaufzeitMittelSumme(EinbauplatzNr) + dblFlpDiffTof
Debug.Print "mdblLaufzeitMittelSumme(" & EinbauplatzNr & "): " & mdblLaufzeitMittelSumme(EinbauplatzNr)
Else
PrintStatus "Fehler in Get_FLP_DIffTof " & lngReturn & " für Einbauplatz " & EinbauplatzNr
End If
End If
Next
Loop
For Each Einbauplatz In m_colEinbauplatz
EinbauplatzNr = Einbauplatz.getNr
ComPort = g_App.Settings.getUSComPort(EinbauplatzNr)
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If Not Pruefzaehler Is Nothing Then
' Hole die im Zähler gespeicherte Temperatur der warmen Zeroflow Messung
If modIECCOM.Get_FP_Zeroflow_DiffTof(ComPort, dblFP_Zeroflow_DiffTof) = 0 Then
' Hole die im Zähler gespeicherte Laufzeit der warmen Zeroflow Messung
If modIECCOM.Get_FP_ZeroflowTemperature(ComPort, dblFP_Zeroflow_Temp) = 0 Then
' aktuelle kalte Laufzeit - gespeicherte warme Laufzeit
'd ns/°C = -----------------------------------------------------------
' aktuelle kalte Temperatur - gespeicherte warme Temperatur
dblFP_ST_Geber = (dblFP_Zeroflow_DiffTof - dblFlpDiffTof) / (dblFP_Zeroflow_Temp - dblTemperatur)
' Setze den JustageParameter
SteilheitGeber_nsp(EinbauplatzNr) = dblFP_ST_Geber
Else
'Get_FP_ZeroflowTemperature
Stop
End If
Else
'Get_FP_Zeroflow_DiffTof
Stop
End If
End If
Next
End Sub
Sub UpdateTemperaturInZaehler()
Dim Einbauplatz As CEinbauplatz
Dim EinbauplatzNr As Integer
Dim Pruefzaehler As CPruefzaehler
Dim dblTemperatur As Double
Dim lngRet As Long
Dim Fehler As Boolean
Dim MerkerEinbauplatz As Byte
dblTemperatur = m_SPS.GetEinlaufTemperatur
'PrintStatus "Stations Temperatur ermittelt =" & Format(dblTemperatur, "0.00") & "Grad"
For Each Einbauplatz In m_colEinbauplatz
EinbauplatzNr = Einbauplatz.getNr
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If (Not Pruefzaehler Is Nothing) And Einbauplatz.getAktiv Then
' dieser Zähler soll geprüft werden
lngRet = USSetTemperatur(EinbauplatzNr, dblTemperatur)
If lngRet = 0 Then
'PrintStatus "USSetTemperatur OK: T=" & Format(dblTemperatur, "0.00") & " EP " & EinbauplatzNr
Else
Fehler = True
MerkerEinbauplatz = EinbauplatzNr
'PrintStatus "USSetTemperatur Fehler" & lngRet
End If
End If
Next
If Not Fehler Then
'PrintStatus "In alle USZähler übertragen"
Else
PrintStatus "Übertragungsfehler nach USZähler " & MerkerEinbauplatz
End If
End Sub