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

2712 lines
100 KiB
Plaintext

VERSION 5.00
Object = "{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.2#0"; "MSCOMCTL.OCX"
Object = "{5E9E78A0-531B-11CF-91F6-C2863C385E30}#1.0#0"; "msflxgrd.ocx"
Begin VB.Form frmVerbundzaehlerHauptpruefung
Caption = "Verbundzähler Prüfung"
ClientHeight = 11115
ClientLeft = 165
ClientTop = 450
ClientWidth = 15240
LinkTopic = "Form1"
ScaleHeight = 11115
ScaleWidth = 15240
StartUpPosition = 3 'Windows-Standard
Begin VB.Frame frMain
Height = 10995
Left = 30
TabIndex = 1
Top = 0
Width = 15405
Begin VB.CommandButton cmdCancel
Caption = "Abbruch"
Height = 735
Left = 8580
TabIndex = 39
Top = 10080
Width = 2475
End
Begin VB.CommandButton cmdSchrittAbbruch
Caption = "aktuellen Schritt abbrechen"
Height = 315
Left = 750
TabIndex = 36
Top = 7440
Width = 2265
End
Begin MSFlexGridLib.MSFlexGrid MSFgErgebnisse
Height = 2085
Left = 3690
TabIndex = 35
Top = 4980
Width = 7275
_ExtentX = 12832
_ExtentY = 3678
_Version = 393216
End
Begin MSComctlLib.ProgressBar ProgressBar1
Height = 315
Left = 210
TabIndex = 34
Top = 7110
Visible = 0 'False
Width = 3255
_ExtentX = 5741
_ExtentY = 556
_Version = 393216
Appearance = 1
End
Begin MSFlexGridLib.MSFlexGrid msfgAblauf
Height = 6675
Left = 240
TabIndex = 33
Top = 480
Width = 3285
_ExtentX = 5794
_ExtentY = 11774
_Version = 393216
Cols = 1
AllowBigSelection= 0 'False
Enabled = 0 'False
HighLight = 0
SelectionMode = 1
End
Begin VB.Frame Frame3
Caption = "Regulierung"
Height = 1005
Left = 11490
TabIndex = 28
Top = 720
Width = 3255
Begin VB.ComboBox cmbDaempfung
Enabled = 0 'False
Height = 315
Left = 1260
TabIndex = 29
Text = "Combo1"
Top = 570
Width = 975
End
Begin VB.Label Label12
Alignment = 1 'Rechts
Caption = "Sollwert"
Height = 315
Left = 180
TabIndex = 32
Top = 270
Width = 825
End
Begin VB.Label Label11
BorderStyle = 1 'Fest Einfach
Height = 285
Left = 1260
TabIndex = 31
Top = 240
Width = 1215
End
Begin VB.Label Label10
Caption = "Dämpfung"
Height = 315
Left = 240
TabIndex = 30
Top = 600
Width = 885
End
End
Begin VB.Frame frmOeffnenSchliessen
Caption = "Eingabe Öffnen / Schliessen Durchfluss"
Enabled = 0 'False
Height = 4185
Left = 11130
TabIndex = 17
Top = 5550
Visible = 0 'False
Width = 3945
Begin VB.Frame FrameOffnenSchliessen
Caption = "Einbauplatz B"
Height = 1185
Index = 2
Left = 240
TabIndex = 23
Top = 1620
Width = 3465
Begin VB.TextBox txtDurchflussOeffnen
Alignment = 1 'Rechts
Height = 345
Index = 2
Left = 180
TabIndex = 25
Top = 600
Width = 1305
End
Begin VB.TextBox txtDurchflussSchliessen
Alignment = 1 'Rechts
Height = 345
Index = 2
Left = 1890
TabIndex = 24
Top = 600
Width = 1305
End
Begin VB.Label Label8
Caption = "Öffnen [m³/h]"
Height = 345
Index = 1
Left = 210
TabIndex = 27
Top = 330
Width = 1245
End
Begin VB.Label Label9
Caption = "Schliessen [m³/h]"
Height = 255
Index = 1
Left = 1860
TabIndex = 26
Top = 300
Width = 1365
End
End
Begin VB.Frame FrameOffnenSchliessen
Caption = "Einbauplatz A"
Height = 1095
Index = 1
Left = 240
TabIndex = 18
Top = 450
Width = 3465
Begin VB.TextBox txtDurchflussSchliessen
Alignment = 1 'Rechts
Height = 345
Index = 1
Left = 1860
TabIndex = 22
Top = 570
Width = 1305
End
Begin VB.TextBox txtDurchflussOeffnen
Alignment = 1 'Rechts
Height = 345
Index = 1
Left = 150
TabIndex = 20
Top = 570
Width = 1305
End
Begin VB.Label Label9
Caption = "Schliessen [m³/h]"
Height = 345
Index = 0
Left = 1920
TabIndex = 21
Top = 300
Width = 1455
End
Begin VB.Label Label8
Caption = "Öffnen [m³/h]"
Height = 345
Index = 0
Left = 180
TabIndex = 19
Top = 300
Width = 1935
End
End
End
Begin VB.TextBox txtStatus
Height = 2415
Left = 3690
MultiLine = -1 'True
ScrollBars = 2 'Vertikal
TabIndex = 8
Top = 7200
Width = 7185
End
Begin MSFlexGridLib.MSFlexGrid MSFlexgridMessung
Height = 4545
Left = 3600
TabIndex = 3
Top = 450
Width = 7305
_ExtentX = 12885
_ExtentY = 8017
_Version = 393216
End
Begin VB.Frame Frame1
Height = 2145
Left = 120
TabIndex = 4
Top = 7740
Width = 3435
Begin VB.Label Label13
Caption = "PrüfgangNr"
Height = 255
Left = 240
TabIndex = 38
Top = 1620
Width = 915
End
Begin VB.Label lblPruefgangNr
BorderStyle = 1 'Fest Einfach
Height = 315
Left = 1290
TabIndex = 37
Top = 1590
Width = 1515
End
Begin VB.Label lblPruefzeitSoll
Alignment = 1 'Rechts
BorderStyle = 1 'Fest Einfach
Height = 345
Left = 1290
TabIndex = 15
Top = 1170
Width = 855
End
Begin VB.Label Label7
Caption = "Soll Pruefzeit"
Height = 315
Left = 150
TabIndex = 14
Top = 1200
Width = 1005
End
Begin VB.Label Label6
Caption = "s"
Height = 315
Left = 2220
TabIndex = 13
Top = 1230
Width = 555
End
Begin VB.Label lblQSoll
Alignment = 1 'Rechts
BorderStyle = 1 'Fest Einfach
Height = 345
Left = 1320
TabIndex = 12
Top = 150
Width = 855
End
Begin VB.Label Label5
Caption = "Soll-Durchfluss"
Height = 315
Left = 180
TabIndex = 11
Top = 210
Width = 1005
End
Begin VB.Label Label4
Caption = "m³/(h"
Height = 315
Left = 2280
TabIndex = 10
Top = 150
Width = 555
End
Begin VB.Label Label2
Caption = "m³/(h"
Height = 315
Left = 2280
TabIndex = 7
Top = 540
Width = 555
End
Begin VB.Label Label3
Caption = "Ist-Durchfluss"
Height = 315
Left = 180
TabIndex = 6
Top = 600
Width = 1005
End
Begin VB.Label lblQist
Alignment = 1 'Rechts
BorderStyle = 1 'Fest Einfach
Height = 345
Left = 1320
TabIndex = 5
Top = 540
Width = 855
End
End
Begin VB.CommandButton cmdWeiter
Caption = "Weiter"
Height = 735
Left = 11190
TabIndex = 16
Top = 10080
Width = 2475
End
Begin VB.Label lblAutosize
BorderStyle = 1 'Fest Einfach
Caption = "lblAutosize"
Height = 255
Left = 9780
TabIndex = 9
Top = 180
Visible = 0 'False
Width = 1065
End
Begin VB.Label Label1
Caption = "Fortschritt"
Height = 165
Left = 180
TabIndex = 2
Top = 210
Width = 1935
End
End
Begin MSComctlLib.StatusBar StatusBar1
Align = 2 'Unten ausrichten
Height = 435
Left = 0
TabIndex = 0
Top = 10680
Width = 15240
_ExtentX = 26882
_ExtentY = 767
Style = 1
_Version = 393216
BeginProperty Panels {8E3867A5-8586-11D1-B16A-00C0F0283628}
NumPanels = 1
BeginProperty Panel1 {8E3867AB-8586-11D1-B16A-00C0F0283628}
EndProperty
EndProperty
End
End
Attribute VB_Name = "frmVerbundzaehlerHauptpruefung"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
Public m_nRet As Integer
Public m_colEinbauplatz As Collection
Public m_Pruefgang As CPruefgang
Public m_colUniquePP As CPruefpunktCol
Public m_ColPumpen As Collection
Private m_Pumpe As CPumpe
Private m_DurchflussSoll As Double
Private m_Refzaehler As CRefzaehler
Private m_blnActivated As Boolean
Private m_lngPruefzeit_s As Long
Private m_FMBus As CFMBus
Private m_SPS As CSPS
Public m_blnSimulation As Boolean
Private m_Messdaten(2) As Pruefdaten_type
Private m_dblPruefzeit_s As Double
Private m_blnAbbruch As Boolean ' aktuellen Schritt abbrechen
Private mblnWeiter As Boolean
Private m_ersterPruefzaehler As CPruefzaehler
Public m_lngImpulswertigkeit_NZ As Long
Private m_PruefungAbbrechen As Boolean ' Prüfung muss wegen defektem Zähler abgebrochen werden
Public mbln_eRegister As Boolean
Const INISECTION = "Verbundzaehlerpruefung"
Const INIKEY_PRUEFZEIT_DER_IMPULSZAEHLUNG = "Pruefzeit_Impulszaehlung"
Const INIKEY_MAX_IMPULSE_HZ = "MaxImpulseHZBeiNZPeriodendauermessung"
Const INIKEY_MAX_IMPULSE_NZ = "MaxImpulseNZBeiHZPeriodendauermessung"
Private Type Pruefdaten_type
FM85Adresse_RZ As Integer
FM85Adresse_HZ As Integer
FM85Adresse_NZ As Integer
Impulswertigkeit_HZ As Long
Impulswertigkeit_NZ As Long
Impulswertigkeit_RZ As Long
Durchfluss_HZ As Double
Durchfluss_NZ As Double
Durchfluss_RZ As Double
Durchfluss_HZ_NZ As Double
gezaehlteImpulse_HZ As Long
gezaehlteImpulse_NZ As Long
gezaehlteImpulse_RZ As Long
Pruefzeit_HZ As Double
Pruefzeit_NZ As Double
Pruefzeit_RZ As Double
verbleibendeImpulse_HZ As Long
verbleibendeImpulse_NZ As Long
verbleibendeImpulse_RZ As Long
AnzahlPerioden_HZ As Long
AnzahlPerioden_NZ As Long
AnzahlPerioden_RZ As Long
Periodendauer_HZ As Long
Periodendauer_NZ As Long
Periodendauer_RZ As Long
Durchfluss_ist As Double
Durchfluss_Oeffnen As Double
Durchfluss_Schliessen As Double
Anteil_HZ As Double
Anteil_NZ As Double
bln_Auf_NZ_warten As Boolean
Fehler_RZ As Double
gesamtFehler As Double
Ergebniss_Fehler_Qmax As Double
Ergebniss_Fehler_Oeffnen As Double
Ergebniss_Fehler_Schliessen As Double
Ergebniss_Fehler_Qmin As Double
MaxErlaubteAnzahlVonImpulsen_HZ As Long
MaxErlaubteAnzahlVonImpulsen_NZ As Long
MessungAbbrechenNachSekunden As Long
End Type
Private Enum enum_spalte
Ueberschrift = 0
RZ = 1
HZ1 = 2
NZ1 = 3
HZ2 = 4
NZ2 = 5
End Enum
Private Enum enum_ergbenissspalte
Label = 0
Qmax = 1
Qoeff = 2
Qschl = 3
Qmin = 4
End Enum
Private Enum enum_zeile_ereg
Funkadresse = 1
SerienNr = 2
End Enum
Private Enum enum_zeile
Ueberschrift = 0
Adresse = 1
SerienNr = 2
KndEigeneSNr = 3
Impulswertigkeit = 4
Impulse = 5
GezaehlteImpulse = 6
VerbleibeneImpulse = 7
Durchfluss_m3 = 8
Anteil = 9
Periodendauer = 10
Pruefzeit = 11
Fehler = 12
Durchfluss_HZ_NZ = 13
Fehler_HZ_NZ = 14
Durchfluss_Oeffnen = 15
Durchfluss_Schliessen = 16
Anzahl = 17
End Enum
Private Enum enum_Fortschritt
Regulieren_bei_QMax = 0
Regulieren_bei_QMax_Impulszaehlung = 1
Regulieren_bei_QMax_Regulieren = 2
Eintragen_Oeffnen_Schließen = 3
Messung_QMax = 4
Messung_QMax_Impulszaehlung = 5
Messung_QMax_Periodendauermessung = 6
Messung_Qoeff = 7
Messung_Qoeff_Durchfluss_einstellen = 8
Messung_Qoeff_Periodendauermessung = 9
Messung_Qschl = 10
Messung_Qschl_Durchfluss_einstellen = 11
Messung_Qschl_Periodendauermessung = 12
Messung_Qmin = 13
Messung_Qmin_Periodendauermessung = 14
Fertig = 15
End Enum
Private Sub cmbDaempfung_Change()
cmbDaempfung.Enabled = False
Me.MousePointer = vbHourglass
cmbDaempfung.SelStart = 0
cmbDaempfung.SelLength = Len(cmbDaempfung.text)
Dim Wert As Integer
Wert = Val(cmbDaempfung.text)
' Dämpfung
sendonly "**0@"
sendonly Trim(Wert & "T")
PrintStatus "Dämpfung " & Wert
cmbDaempfung.Enabled = True
Me.MousePointer = vbNormal
cmbDaempfung.SetFocus
End Sub
Private Sub cmbDaempfung_Click()
cmbDaempfung_Change
End Sub
Private Sub cmdCancel_Click()
If g_Abbruch Then Unload Me
' aktuellen Schritt abbrechen
m_blnAbbruch = True
' und dann verlassen des Ablaufes
g_Abbruch = True
End Sub
Private Sub cmdSchrittAbbruch_Click()
m_blnAbbruch = True
End Sub
'Private Sub cmdTestSpeichern_Click()
'
'
' m_Messdaten(1).Ergebniss_Fehler_Oeffnen = 1.4
' m_Messdaten(2).Ergebniss_Fehler_Oeffnen = -1.4
'
' m_Messdaten(1).Durchfluss_Oeffnen = 1.3
' m_Messdaten(2).Durchfluss_Oeffnen = 1.3
'
' m_Messdaten(1).Durchfluss_Schliessen = 2.1
' m_Messdaten(2).Durchfluss_Schliessen = 2.1
'
' m_Messdaten(1).Ergebniss_Fehler_Schliessen = 0.5
' m_Messdaten(2).Ergebniss_Fehler_Schliessen = -0.5
'
' m_Messdaten(1).Ergebniss_Fehler_Qmin = -1.2
' m_Messdaten(2).Ergebniss_Fehler_Qmin = 1.2
'
' m_Messdaten(1).Ergebniss_Fehler_Qmax = 1.1
' m_Messdaten(2).Ergebniss_Fehler_Qmax = -1.1
'
' PruefdatenSpeichern
'
'End Sub
Private Sub cmdWeiter_Click()
If cmdWeiter.caption = "Beenden" Then
Unload Me
Exit Sub
Else
cmdWeiter.Enabled = False
mblnWeiter = True
End If
End Sub
Private Sub Form_Activate()
If Not m_blnActivated Then
m_blnActivated = True
If mbln_eRegister Then
InitFlexgridAblauf_eRegister
Call Ablauf_eRegister
Else
InitFlexgridAblauf
Call Ablauf
End If
End If
End Sub
Private Sub initMSFgErgebnisse()
Dim Pruefzaehler As CPruefzaehler
Dim Einbauplatz As CEinbauplatz
MSFgErgebnisse.Clear
MSFgErgebnisse.Font.Size = 10
MSFgErgebnisse.FormatString = "Fehler [%]| Qmax [m³/h]| Qoeff [m³/h]| Qschl [m³/h]| Qmin [m³/h]"
MSFgErgebnisse.Rows = 6
MSFgErgebnisse.FixedRows = 2
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If Not Pruefzaehler Is Nothing Then
MSFgErgebnisse.TextMatrix(Einbauplatz.getNr + 1, 0) = Pruefzaehler.getAuftragPositionSerienNr.getNr
Else
MSFgErgebnisse.TextMatrix(Einbauplatz.getNr + 1, 0) = ""
End If
Next
MSFgErgebnisse.TextMatrix(5, 0) = "FG"
If m_colUniquePP.Count >= 1 Then
MSFgErgebnisse.TextMatrix(1, 1) = m_colUniquePP.Item(1).getQ
If m_colUniquePP.Count >= 2 Then
MSFgErgebnisse.TextMatrix(1, 4) = m_colUniquePP.Item(2).getQ
End If
End If
AutoSpaltenBreite MSFgErgebnisse, lblAutosize
End Sub
Private Sub AddErgebnissToMSfg(strQ As String, dblFehler1 As Double, dblFehler2 As Double, strFG As String, intSpalte As Integer)
MSFgErgebnisse.TextMatrix(1, intSpalte) = strQ
Dim Einbaulatz As CEinbauplatz
Dim Pruefzaehler As CPruefzaehler
For Each Einbaulatz In m_colEinbauplatz
Set Pruefzaehler = Einbaulatz.getPruefzaehler
If Not Pruefzaehler Is Nothing Then
Select Case Einbaulatz.getNr
Case 1
MSFgErgebnisse.TextMatrix(2, intSpalte) = Format(dblFehler1, "0.00")
Case 2
MSFgErgebnisse.TextMatrix(3, intSpalte) = Format(dblFehler2, "0.00")
End Select
End If
Next
MSFgErgebnisse.TextMatrix(5, intSpalte) = strFG
AutoSpaltenBreite MSFgErgebnisse, lblAutosize
End Sub
Private Sub InitFlexgridAblauf_eRegister()
Dim Pruefpunkt As CPruefpunkt
Set Pruefpunkt = m_colUniquePP.Item(1)
msfgAblauf.Clear
msfgAblauf.Cols = 1
msfgAblauf.col = 0
msfgAblauf.CellAlignment = vbLeftJustify
msfgAblauf.Rows = 0
msfgAblauf.AddItem "Entlüften "
msfgAblauf.AddItem "eRegister Init."
msfgAblauf.AddItem "Q Öffnen "
msfgAblauf.AddItem "Q Schliessen"
msfgAblauf.AddItem "Regulieren"
msfgAblauf.AddItem "Messung Q3"
msfgAblauf.AddItem "Messung Q öffnen"
msfgAblauf.AddItem "Messung Q Schliessen"
msfgAblauf.AddItem "Messung Q = 0.150 m³/h"
msfgAblauf.AddItem "eRegister abschluss"
msfgAblauf.AddItem "fertig"
msfgAblauf.Enabled = False
AutoSpaltenBreite msfgAblauf, lblAutosize
End Sub
Private Sub InitFlexgridAblauf()
Dim Pruefpunkt As CPruefpunkt
msfgAblauf.Clear
msfgAblauf.Cols = 1
msfgAblauf.col = 0
Set Pruefpunkt = m_colUniquePP.Item(1)
msfgAblauf.CellAlignment = vbLeftJustify
msfgAblauf.Rows = 0
msfgAblauf.AddItem "Regulieren bei Qmax = " & Pruefpunkt.getQ & " m³/h" ' 0
msfgAblauf.AddItem " Impulszählung" '1
msfgAblauf.AddItem " Regulieren" '2
msfgAblauf.AddItem "Eintragen Öffnen- / Schließen " '3
msfgAblauf.AddItem "Messung bei Qmax = " & Pruefpunkt.getQ & " m³/h" '4
msfgAblauf.AddItem " Impulszählung" '5
msfgAblauf.AddItem " Periodendauermessung" '6
msfgAblauf.AddItem "Messung bei Q öffnen" '7
msfgAblauf.AddItem " Durchfluss steigend einstellen " '8
msfgAblauf.AddItem " Periodendauermessung" '9
msfgAblauf.AddItem "Messung bei Q schliessen" '10
msfgAblauf.AddItem " Durchfluss fallend einstellen " '11
msfgAblauf.AddItem " Periodendauermessung" '12
Set Pruefpunkt = m_colUniquePP.Item(2)
msfgAblauf.AddItem "Messung bei Q min = " & Pruefpunkt.getQ & " m³/h" '13
msfgAblauf.AddItem " Periodendauermessung" '14
msfgAblauf.AddItem "fertig" '15
msfgAblauf.Enabled = False
AutoSpaltenBreite msfgAblauf, lblAutosize
End Sub
Private Sub Form_Load()
Me.WindowState = vbMaximized
centerFormInScreen Me
m_blnAbbruch = False
initMSFgErgebnisse
Set m_SPS = g_App.getSPS
Set m_FMBus = g_App.getFMBus
Set m_ColPumpen = g_App.Settings.getPumpen
cmbDaempfung.Enabled = False
cmbDaempfung.Clear
Dim i As Integer
For i = 1 To 9
cmbDaempfung.AddItem i
Next
cmdWeiter.Enabled = False
If Not g_ohneSPS Then
m_SPS.setBetrieb 0
End If
Dim Einbauplatz As CEinbauplatz
For Each Einbauplatz In m_colEinbauplatz
If Not Einbauplatz.getPruefzaehler Is Nothing Then
Set m_ersterPruefzaehler = Einbauplatz.getPruefzaehler
Exit For
End If
Next
'm_blnSimulation = True
End Sub
Private Sub UpdateFlexgridMessung_eReg(Optional blnClear As Boolean = False)
Dim Einbauplatz As CEinbauplatz
Dim Pruefzaehler As CPruefzaehler
Dim VerbundzaehlerIndex As Integer
Dim Spalte_HZ As Integer
Dim Spalte_NZ As Integer
If blnClear Then
MSFlexgridMessung.Clear
End If
MSFlexgridMessung.Rows = enum_zeile.Anzahl
MSFlexgridMessung.Cols = 6
MSFlexgridMessung.FixedCols = 1
MSFlexgridMessung.FixedRows = 1
MSFlexgridMessung.FormatString = "|RZ |HZ 1|NZ 1|HZ 2|NZ 2"
MSFlexgridMessung.TextMatrix(enum_zeile_ereg.SerienNr, enum_spalte.Ueberschrift) = "SerienNr"
MSFlexgridMessung.TextMatrix(enum_zeile_ereg.Funkadresse, enum_spalte.Ueberschrift) = "Funkadresse"
Dim EinbauplatzNr As Integer
For EinbauplatzNr = 1 To m_colEinbauplatz.Count - 1
Set Einbauplatz = m_colEinbauplatz.Item(EinbauplatzNr)
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If Not Pruefzaehler Is Nothing Then
MSFlexgridMessung.TextMatrix(enum_zeile_ereg.SerienNr, Einbauplatz.getNr + 1) = Pruefzaehler.getSerienNr
MSFlexgridMessung.TextMatrix(enum_zeile_ereg.Funkadresse, Einbauplatz.getNr + 1) = Einbauplatz.eRegister.m_sRadioAdressFinal
End If
Next
AutoSpaltenBreite MSFlexgridMessung, lblAutosize
' For VerbundzaehlerIndex = 1 To 2
' Select Case VerbundzaehlerIndex
' Case 1
' Spalte_HZ = enum_spalte.HZ1
' Spalte_NZ = enum_spalte.NZ1
' Case 2
' Spalte_HZ = enum_spalte.HZ2
' Spalte_NZ = enum_spalte.NZ2
' End Select
'
'
' Set Einbauplatz = m_colEinbauplatz(VerbundzaehlerIndex)
' Set Pruefzaehler = Einbauplatz.getPruefzaehler
' If Not Pruefzaehler Is Nothing Then
' ' SerienNr HZ
' MSFlexgridMessung.TextMatrix(enum_zeile_ereg.SerienNr, Spalte_HZ) = Pruefzaehler.getSerienNr
' MSFlexgridMessung.TextMatrix(enum_zeile_ereg.Funkadresse, Spalte_HZ) = Einbauplatz.eRegister.m_sRadioAdressFinal
' End If
'
'
' Next
End Sub
Private Sub UpdateFlexgridMessung(Optional blnClear As Boolean = False)
Dim Einbauplatz As CEinbauplatz
Dim Pruefzaehler As CPruefzaehler
Dim VerbundzaehlerIndex As Integer
Dim Spalte_HZ As Integer
Dim Spalte_NZ As Integer
If blnClear Then
MSFlexgridMessung.Clear
End If
MSFlexgridMessung.Rows = enum_zeile.Anzahl
MSFlexgridMessung.Cols = 6
MSFlexgridMessung.FixedCols = 1
MSFlexgridMessung.FixedRows = 1
MSFlexgridMessung.FormatString = "|RZ |HZ 1|NZ 1|HZ 2|NZ 2"
MSFlexgridMessung.TextMatrix(enum_zeile.Adresse, enum_spalte.Ueberschrift) = "FM85 Adresse"
MSFlexgridMessung.TextMatrix(enum_zeile.SerienNr, enum_spalte.Ueberschrift) = "SerienNr"
MSFlexgridMessung.TextMatrix(enum_zeile.Impulswertigkeit, enum_spalte.Ueberschrift) = "Impulswertigkeit [1/m³]"
MSFlexgridMessung.TextMatrix(enum_zeile.Impulse, enum_spalte.Ueberschrift) = "Impuls Vorwahl"
MSFlexgridMessung.TextMatrix(enum_zeile.GezaehlteImpulse, enum_spalte.Ueberschrift) = "gezählte Impulse"
MSFlexgridMessung.TextMatrix(enum_zeile.VerbleibeneImpulse, enum_spalte.Ueberschrift) = "verbleibende Impulse"
MSFlexgridMessung.TextMatrix(enum_zeile.Durchfluss_m3, enum_spalte.Ueberschrift) = "Q [m³/h]"
MSFlexgridMessung.TextMatrix(enum_zeile.Anteil, enum_spalte.Ueberschrift) = "Anteil"
MSFlexgridMessung.TextMatrix(enum_zeile.Periodendauer, enum_spalte.Ueberschrift) = "Periodendauer [s/2994]"
MSFlexgridMessung.TextMatrix(enum_zeile.Pruefzeit, enum_spalte.Ueberschrift) = "Prüfzeit"
MSFlexgridMessung.TextMatrix(enum_zeile.Fehler, enum_spalte.Ueberschrift) = "Fehler [%]"
MSFlexgridMessung.TextMatrix(enum_zeile.Durchfluss_HZ_NZ, enum_spalte.Ueberschrift) = "Qges HZ + NZ"
MSFlexgridMessung.TextMatrix(enum_zeile.Fehler_HZ_NZ, enum_spalte.Ueberschrift) = "Fehler HZ + NZ"
MSFlexgridMessung.TextMatrix(enum_zeile.Fehler_HZ_NZ, enum_spalte.Ueberschrift) = "Fehler HZ + NZ"
MSFlexgridMessung.TextMatrix(enum_zeile.Durchfluss_Oeffnen, enum_spalte.Ueberschrift) = "Q Öffnen [m³/h]"
MSFlexgridMessung.TextMatrix(enum_zeile.Durchfluss_Schliessen, enum_spalte.Ueberschrift) = "Q Schliessen [m³/h]"
If Not m_Refzaehler Is Nothing Then
MSFlexgridMessung.TextMatrix(enum_zeile.SerienNr, enum_spalte.RZ) = m_Refzaehler.SerienNr
If m_DurchflussSoll > 0 Then
MSFlexgridMessung.TextMatrix(enum_zeile.Fehler, enum_spalte.RZ) = Format(m_Refzaehler.letzterFehler(m_DurchflussSoll), "0.00")
Else
MSFlexgridMessung.TextMatrix(enum_zeile.Fehler, enum_spalte.RZ) = ""
End If
End If
For VerbundzaehlerIndex = 1 To 2
Select Case VerbundzaehlerIndex
Case 1
Spalte_HZ = enum_spalte.HZ1
Spalte_NZ = enum_spalte.NZ1
Case 2
Spalte_HZ = enum_spalte.HZ2
Spalte_NZ = enum_spalte.NZ2
End Select
Set Einbauplatz = m_colEinbauplatz(VerbundzaehlerIndex)
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If Not Pruefzaehler Is Nothing Then
' SerienNr HZ
MSFlexgridMessung.TextMatrix(enum_zeile.SerienNr, Spalte_HZ) = Pruefzaehler.getSerienNr
' Kundeneigene SerienNr HZ
If Pruefzaehler.getAuftragPositionSerienNr.getKundeneigeneSerienNr <> "" Then
MSFlexgridMessung.TextMatrix(enum_zeile.KndEigeneSNr, Spalte_HZ) = Pruefzaehler.getAuftragPositionSerienNr.getKundeneigeneSerienNr
End If
If Not Pruefzaehler.m_Verbundzaehler Is Nothing Then
' SerienNr Nebenzähler
If Pruefzaehler.m_Verbundzaehler.lngSerienNrNZ > 0 Then
MSFlexgridMessung.TextMatrix(enum_zeile.SerienNr, Spalte_NZ) = Pruefzaehler.m_Verbundzaehler.lngSerienNrNZ
End If
' Kundeneigene SerienNr NZ
If Pruefzaehler.m_Verbundzaehler.strKundeneigeneSerienNrNZ <> "" Then
MSFlexgridMessung.TextMatrix(enum_zeile.KndEigeneSNr, Spalte_NZ) = Pruefzaehler.m_Verbundzaehler.strKundeneigeneSerienNrNZ
End If
End If
End If
Next
AutoSpaltenBreite MSFlexgridMessung, lblAutosize
DoEvents
End Sub
Private Sub Form_Resize()
On Error Resume Next
If Me.ScaleHeight < frMain.Height + StatusBar1.Height Then Me.Height = frMain.Height + StatusBar1.Height
If Me.ScaleWidth < frMain.Width Then Me.Width = frMain.Width
frMain.Top = (Me.ScaleHeight - frMain.Height) / 2
frMain.Left = (Me.ScaleWidth - frMain.Width) / 2
' cmdWeiter.Top = Me.ScaleHeight - StatusBar1.Height - cmdWeiter.Height * 1.5
' cmdWeiter.Left = Me.ScaleWidth - cmdWeiter.Width * 1.5
End Sub
Private Sub PrintStatus(strText As String)
txtStatus.text = txtStatus.text & strText & vbCrLf
txtStatus.SelStart = Len(txtStatus.text)
DebugMsg ": " & strText
End Sub
Private Sub HighlightAblaufZeile(intIndex As Integer)
Dim i As Integer
msfgAblauf.ColWidth(0) = msfgAblauf.Width
For i = 0 To msfgAblauf.Rows - 1
msfgAblauf.RowHeight(i) = msfgAblauf.Height / msfgAblauf.Rows / 1.1
msfgAblauf.row = i
msfgAblauf.col = 0
msfgAblauf.CellFontBold = False
msfgAblauf.CellBackColor = RGB(200, 200, 200)
Next
msfgAblauf.row = intIndex
msfgAblauf.CellBackColor = vbWhite
msfgAblauf.CellFontBold = True
DoEvents
End Sub
Private Sub Ablauf_eRegister()
UpdateFlexgridMessung_eReg
MsgBox "Ablauf eRegister prüfung nicht implementiert"
End Sub
Private Sub Ablauf()
Dim lngSollPruefzeit As Long
Dim lngPruefzeitperiodendauer As Long
Dim Index As Integer
Dim Einbauplatz As CEinbauplatz
Dim Pruefzaehler As CPruefzaehler
Dim iret As Integer
m_PruefungAbbrechen = False
g_Abbruch = False
m_blnAbbruch = False
If Not g_ohneSPS Then
TestAutomatik:
If g_Abbruch Then GoTo PruefungsAbbruch
' Test auf Automatik
If Not m_SPS.IstAutomatik Then
iret = MsgBox("Bitte SPS auf Automatik stellen!", vbOKCancel Or vbDefaultButton1)
Select Case iret
Case vbOK
GoTo TestAutomatik
Case Else
Exit Sub
End Select
End If
TestPruefbereit:
If g_Abbruch Then GoTo PruefungsAbbruch
' Test auf Prüfbereitschaft
If Not m_SPS.IstStreckePruefbereit Then
iret = MsgBox("Bitte SPS prüfbereit machen!", vbOKCancel Or vbDefaultButton1)
Select Case iret
Case vbOK
GoTo TestPruefbereit
Case Else
Exit Sub
End Select
End If
End If
lngSollPruefzeit = g_App.Settings.GetOrSetIniWert(INISECTION, INIKEY_PRUEFZEIT_DER_IMPULSZAEHLUNG, "60")
' Neuen Prüfgang erzeugen
Set m_Pruefgang = New CPruefgang
' PruefgangNr, Datum, Prüfer, Pruefzeit und PruefstationNr werden automatisch gefüllt
m_Pruefgang.Typ = m_ersterPruefzaehler.getIdentNrObj.getTyp
m_Pruefgang.Nennweite = m_ersterPruefzaehler.getIdentNrObj.getNennweite
m_Pruefgang.Nenntemperatur = m_ersterPruefzaehler.getIdentNrObj.GetTemperatur
m_Pruefgang.LuftDruck = g_dblLuftDruck
m_Pruefgang.Lufttemperatur = g_dblLuftTemperatur
m_Pruefgang.RelativeFeuchte = g_dblLuftFeuchte
If Not g_ohneSPS Then
m_Pruefgang.Vorlauftemperatur = m_SPS.GetEinlaufTemperatur
End If
Dim Anzahl As Integer
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If Not Pruefzaehler Is Nothing Then
Anzahl = Anzahl + 1
End If
Next
m_Pruefgang.Anzahl = Anzahl
m_Pruefgang.save
lblPruefgangNr.caption = m_Pruefgang.PruefgangNr
UpdateFlexgridMessung False
'''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''' Regulieren ''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''
HighlightAblaufZeile enum_Fortschritt.Regulieren_bei_QMax
Regulieren
If g_Abbruch Then GoTo PruefungsAbbruch
'''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''' Öffnen / Schliessen ermitteln ''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If Not Pruefzaehler Is Nothing Then
FrameOffnenSchliessen(Einbauplatz.getNr).Visible = True
Else
FrameOffnenSchliessen(Einbauplatz.getNr).Visible = False
End If
Next
OeffnenSchliessenDurchfluss_Ermitteln
If g_Abbruch Then GoTo PruefungsAbbruch
GoTo QoeffnenMessen
'''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''' Qmax ''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''
HighlightAblaufZeile enum_Fortschritt.Messung_QMax
Dim Pruefpunkt As CPruefpunkt
Set Pruefpunkt = m_colUniquePP.Item(1)
m_DurchflussSoll = Pruefpunkt.getQ
Set m_Refzaehler = New CRefzaehler
m_Refzaehler.loadForDurchfluss m_DurchflussSoll, 0
PrintStatus "Referenzzähler mit NW " & m_Refzaehler.Nennweite & " gewählt. "
SetQinSPS
WarteAufDurchflussErreicht
If g_Abbruch Then GoTo PruefungsAbbruch
lngSollPruefzeit = g_App.Settings.GetOrSetIniWert(INISECTION, INIKEY_PRUEFZEIT_DER_IMPULSZAEHLUNG, "60")
HighlightAblaufZeile enum_Fortschritt.Messung_QMax_Impulszaehlung
Call Impulszaehlung(lngSollPruefzeit)
If g_Abbruch Then GoTo PruefungsAbbruch
HighlightAblaufZeile enum_Fortschritt.Messung_QMax_Periodendauermessung
lngSollPruefzeit = Pruefpunkt.GetTime
m_Pruefgang.PP_Soll(1) = m_DurchflussSoll
m_Pruefgang.PP_Zeit(1) = lngSollPruefzeit
m_Pruefgang.PP_RefZSerienNr(1) = m_Refzaehler.SerienNr
Periodendauermessung lngSollPruefzeit, True, True
If g_Abbruch Then GoTo PruefungsAbbruch
m_Pruefgang.PP_Ist(1) = m_Messdaten(1).Durchfluss_ist
m_Messdaten(1).Ergebniss_Fehler_Qmax = m_Messdaten(1).gesamtFehler
m_Messdaten(2).Ergebniss_Fehler_Qmax = m_Messdaten(2).gesamtFehler
AddErgebnissToMSfg m_DurchflussSoll & "", m_Messdaten(1).gesamtFehler, m_Messdaten(2).gesamtFehler, Pruefpunkt.getFGo & " / " & Pruefpunkt.getFGu, enum_ergbenissspalte.Qmax
'''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''' Q öffnen ''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''
QoeffnenMessen:
HighlightAblaufZeile enum_Fortschritt.Messung_Qoeff
Sleep 3000
If m_Messdaten(1).Durchfluss_Oeffnen > 0 Then
' erstere Einbauplatz hat Vorrang
m_DurchflussSoll = m_Messdaten(1).Durchfluss_Oeffnen
ElseIf m_Messdaten(2).Durchfluss_Oeffnen > 0 Then
m_DurchflussSoll = m_Messdaten(1).Durchfluss_Oeffnen
Else
GoTo MessungInQOeffnenUberspringen
End If
Set m_Refzaehler = New CRefzaehler
m_Refzaehler.loadForDurchfluss m_DurchflussSoll, 0
PrintStatus "Referenzzähler mit NW " & m_Refzaehler.Nennweite & " gewählt. "
SetQinSPS
For Index = 1 To 5
MSFlexgridMessung.TextMatrix(enum_zeile.Anteil, Index) = ""
Next
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If Not Pruefzaehler Is Nothing Then
m_Messdaten(Einbauplatz.getNr).Anteil_HZ = 1
m_Messdaten(Einbauplatz.getNr).Anteil_NZ = 0
End If
Next
HighlightAblaufZeile enum_Fortschritt.Messung_Qoeff_Durchfluss_einstellen
' Durchfluss treppenfoermig fallend anfahren
DurchflussTreppenfoermigAnfahren True
m_SPS.SetQSoll m_DurchflussSoll
If g_Abbruch Then GoTo PruefungsAbbruch
HighlightAblaufZeile enum_Fortschritt.Messung_Qoeff_Periodendauermessung
m_Messdaten(1).MaxErlaubteAnzahlVonImpulsen_NZ = g_App.Settings.GetOrSetIniWert(INISECTION, INIKEY_MAX_IMPULSE_NZ, "4")
m_Messdaten(1).MaxErlaubteAnzahlVonImpulsen_HZ = -1
m_Messdaten(2).MaxErlaubteAnzahlVonImpulsen_NZ = g_App.Settings.GetOrSetIniWert(INISECTION, INIKEY_MAX_IMPULSE_NZ, "4")
m_Messdaten(2).MaxErlaubteAnzahlVonImpulsen_HZ = -1
m_Messdaten(1).MessungAbbrechenNachSekunden = 30
m_Messdaten(2).MessungAbbrechenNachSekunden = 30
m_Messdaten(1).Anteil_HZ = 1
m_Messdaten(2).Anteil_HZ = 1
Call Periodendauermessung(lngSollPruefzeit, True, False)
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If Not Pruefzaehler Is Nothing Then
If m_Messdaten(Einbauplatz.getNr).gezaehlteImpulse_NZ > m_Messdaten(Einbauplatz.getNr).MaxErlaubteAnzahlVonImpulsen_NZ Then
MsgBox "Zuviele Impulse (" & m_Messdaten(Einbauplatz.getNr).gezaehlteImpulse_NZ & ") am Einbauplatz vom Nebenzähler am Einbauplatz " & Einbauplatz.getNr & ". Prüfung wird abgebrochen."
GoTo PruefungsAbbruch
End If
End If
Next
If g_Abbruch Then GoTo PruefungsAbbruch
m_Messdaten(1).Ergebniss_Fehler_Oeffnen = m_Messdaten(1).gesamtFehler
m_Messdaten(2).Ergebniss_Fehler_Oeffnen = m_Messdaten(2).gesamtFehler
AddErgebnissToMSfg m_DurchflussSoll & "", m_Messdaten(1).gesamtFehler, m_Messdaten(2).gesamtFehler, "1,5 / -1,5", enum_ergbenissspalte.Qoeff
MessungInQOeffnenUberspringen:
If Not g_ohneSPS Then
m_SPS.SetQSoll 0
m_SPS.setBetrieb 8
Sleep 500, True
m_SPS.setBetrieb 0
End If
'''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''' Q schliessen ''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''
HighlightAblaufZeile enum_Fortschritt.Messung_Qschl
Sleep 3000, True
HighlightAblaufZeile enum_Fortschritt.Messung_Qschl_Durchfluss_einstellen
' Durchfluss treppenfoermig fallend anfahren
If m_Messdaten(1).Durchfluss_Schliessen > 0 Then
m_DurchflussSoll = m_Messdaten(1).Durchfluss_Schliessen
ElseIf m_Messdaten(2).Durchfluss_Schliessen > 0 Then
m_DurchflussSoll = m_Messdaten(2).Durchfluss_Schliessen
End If
DurchflussTreppenfoermigAnfahren False
If g_Abbruch Then GoTo PruefungsAbbruch
If m_Messdaten(1).Durchfluss_Schliessen > 0 Then
' erstere Einbauplatz hat Vorrang
m_DurchflussSoll = m_Messdaten(1).Durchfluss_Schliessen
ElseIf m_Messdaten(2).Durchfluss_Schliessen > 0 Then
m_DurchflussSoll = m_Messdaten(1).Durchfluss_Schliessen
Else
MsgBox "beide Durchfluss_Schliessen = 0 ==> Messung Schliessen ueberspringen"
GoTo MessungSchliessenUeberspringen
End If
Set m_Refzaehler = New CRefzaehler
m_Refzaehler.loadForDurchfluss m_DurchflussSoll, 0
PrintStatus "Referenzzähler mit NW " & m_Refzaehler.Nennweite & " gewählt. "
SetQinSPS
WarteAufDurchflussErreicht
If g_Abbruch Then GoTo PruefungsAbbruch
Dim lngPruefzeit As Long
lngPruefzeit = g_App.Settings.GetOrSetIniWert(INISECTION, "Q_Schliessen_Pruefzeit", "60")
For Index = 1 To 5
MSFlexgridMessung.TextMatrix(enum_zeile.Anteil, Index) = ""
Next
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If Not Pruefzaehler Is Nothing Then
m_Messdaten(Einbauplatz.getNr).Anteil_HZ = 0
m_Messdaten(Einbauplatz.getNr).Anteil_NZ = 1
End If
Next
HighlightAblaufZeile enum_Fortschritt.Messung_Qschl_Periodendauermessung
m_Messdaten(1).MaxErlaubteAnzahlVonImpulsen_HZ = g_App.Settings.GetOrSetIniWert(INISECTION, INIKEY_MAX_IMPULSE_HZ, "4")
Call Periodendauermessung(lngPruefzeit, False, True)
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If Not Pruefzaehler Is Nothing Then
If m_Messdaten(Einbauplatz.getNr).gezaehlteImpulse_HZ > m_Messdaten(Einbauplatz.getNr).MaxErlaubteAnzahlVonImpulsen_HZ Then
MsgBox "Zuviele Impulse (" & m_Messdaten(Einbauplatz.getNr).Impulswertigkeit_HZ & ") am Einbauplatz vom Hauptzähler am Einbauplatz " & Einbauplatz.getNr & ". Prüfung wird abgebrochen."
GoTo PruefungsAbbruch
End If
End If
Next
m_Messdaten(Einbauplatz.getNr).MaxErlaubteAnzahlVonImpulsen_HZ = 0
If g_Abbruch Then GoTo PruefungsAbbruch
m_Messdaten(1).Ergebniss_Fehler_Schliessen = m_Messdaten(1).gesamtFehler
m_Messdaten(2).Ergebniss_Fehler_Schliessen = m_Messdaten(2).gesamtFehler
AddErgebnissToMSfg m_DurchflussSoll & "", m_Messdaten(1).gesamtFehler, m_Messdaten(2).gesamtFehler, "1,5 / -1,5", enum_ergbenissspalte.Qschl
MessungSchliessenUeberspringen:
If Not g_ohneSPS Then
m_SPS.SetQSoll 0
m_SPS.setBetrieb 0
End If
cmdWeiter.caption = "Weiter mit Qmin"
cmdWeiter.Enabled = True
Do
Sleep 100, True
Loop While Not mblnWeiter
cmdWeiter.Enabled = False
'''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''' Q min ''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''
HighlightAblaufZeile enum_Fortschritt.Messung_Qmin
Set Pruefpunkt = m_colUniquePP.Item(2)
m_DurchflussSoll = Pruefpunkt.getQ
Set m_Refzaehler = New CRefzaehler
m_Refzaehler.loadForDurchfluss m_DurchflussSoll, 0
PrintStatus "Referenzzähler mit NW " & m_Refzaehler.Nennweite & " gewählt. "
SetQinSPS
WarteAufDurchflussErreicht
If g_Abbruch Then GoTo PruefungsAbbruch
HighlightAblaufZeile enum_Fortschritt.Messung_Qmin_Periodendauermessung
lngPruefzeit = Pruefpunkt.GetTime
lblPruefzeitSoll.caption = lngPruefzeit
m_Pruefgang.PP_Soll(2) = m_DurchflussSoll
m_Pruefgang.PP_Zeit(2) = lngPruefzeit
Call Periodendauermessung(lngPruefzeit, False, True)
If g_Abbruch Then GoTo PruefungsAbbruch
m_Messdaten(1).Ergebniss_Fehler_Qmin = m_Messdaten(1).gesamtFehler
m_Messdaten(2).Ergebniss_Fehler_Qmin = m_Messdaten(2).gesamtFehler
m_Pruefgang.PP_RefZSerienNr(2) = m_Refzaehler.SerienNr
If m_Messdaten(1).Durchfluss_ist > 0 Then
m_Pruefgang.PP_Ist(2) = m_Messdaten(1).Durchfluss_ist
ElseIf m_Messdaten(2).Durchfluss_ist > 0 Then
m_Pruefgang.PP_Ist(2) = m_Messdaten(2).Durchfluss_ist
End If
AddErgebnissToMSfg m_DurchflussSoll & "", m_Messdaten(1).gesamtFehler, m_Messdaten(2).gesamtFehler, Pruefpunkt.getFGo & " / " & Pruefpunkt.getFGu, enum_ergbenissspalte.Qmin
If Not g_ohneSPS Then
m_SPS.SetQSoll 0
m_SPS.setBetrieb 0
End If
HighlightAblaufZeile enum_Fortschritt.Fertig
If g_Abbruch Then GoTo PruefungsAbbruch
PruefdatenSpeichern
m_Pruefgang.save
PrintStatus "Prüfdaten wurden gespeichert. Fertig!"
cmdWeiter.caption = "Beenden"
cmdWeiter.Enabled = True
Exit Sub
PruefungsAbbruch:
If Not g_ohneSPS Then
m_SPS.SetQSoll 0
m_SPS.setBetrieb 0
End If
Unload Me
End Sub
Private Sub DurchflussTreppenfoermigAnfahren(blnSteigend As Boolean)
Dim dblQ As Double
Dim dblProzentwertStart As Double
Dim dblProzentwert As Double
Dim dblZeit_s As Double
Dim dblDauer_s As Double
Dim dblDauer_normiert As Double
Dim dblSpeed As Double
Dim lngStartZeitpunkt As Long
Dim dblQ_Ziel As Double
m_blnAbbruch = False
If Not g_ohneSPS Then
' Betrieb Start zurücksetzen
m_SPS.setBetrieb 8
m_SPS.SetQSoll 0
Sleep 500
m_SPS.setBetrieb 0
Sleep 2000, True
End If
' Dauer der Treppe in Sekunden
dblDauer_s = g_App.Settings.GetOrSetIniWert(INISECTION, "Treppendauer_s", "60")
dblQ_Ziel = m_DurchflussSoll
' Startwert in Prozent
If blnSteigend Then
dblProzentwertStart = Val(g_App.Settings.GetOrSetIniWert(INISECTION, "Q_steigend_start_Prozent", "50"))
If dblProzentwertStart < 0 Or dblProzentwertStart > 200 Then
MsgBox "falscher Wert für Q_steigend_start_Prozent=" & dblProzentwertStart
dblProzentwertStart = 50
End If
Else
' fallend
dblProzentwertStart = Val(g_App.Settings.GetOrSetIniWert(INISECTION, "Q_fallend_start_Prozent", "250"))
If dblProzentwertStart < 0 Or dblProzentwertStart > 300 Then
MsgBox "falscher Wert für Q_steigend_start_Prozent=" & dblProzentwertStart
dblProzentwertStart = 250
End If
End If
PrintStatus "Durchfluss " & Format(m_DurchflussSoll, "0.000") & "m³/h treppenförmig von " & dblProzentwertStart & "% auf 100% in " & dblDauer_s & " s " & IIf(blnSteigend, "steigend", "fallend") & " anfahren"
m_DurchflussSoll = (dblProzentwertStart / 100) * dblQ_Ziel
PrintStatus "Startwert " & Format(m_DurchflussSoll, "0.000") & "m³/h einstellen."
lblQsoll.caption = Format(m_DurchflussSoll, "0.000")
SetQinSPS
WarteAufDurchflussErreicht
lngStartZeitpunkt = GetTickCount()
dblProzentwert = dblProzentwertStart
dblSpeed = (100 - dblProzentwertStart) / dblDauer_s ' in Prozent pro s
Do
' Treppenintervall
dblZeit_s = (GetTickCount() - lngStartZeitpunkt) / 1000
dblDauer_normiert = dblZeit_s / dblDauer_s
If dblDauer_normiert < 1 And dblDauer_normiert >= 0 Then
ProgressBar1.Visible = True
ProgressBar1.Max = 100
ProgressBar1.value = dblDauer_normiert * 100
End If
dblProzentwert = dblProzentwertStart + dblSpeed * dblZeit_s
Sleep 1000, True
dblQ = (dblProzentwert / 100) * dblQ_Ziel
lblQsoll.caption = Format(dblQ, "0.000")
PrintStatus "Q=" & Format(dblQ, "0.000") & " : " & Format(dblZeit_s, "0.0 /s")
If Not g_ohneSPS Then
m_SPS.SetQSoll dblQ
End If
UpdateQist
DoEvents
If m_blnAbbruch Then Exit Do
If blnSteigend Then
If dblProzentwert >= 100 Then Exit Do
Else
If dblProzentwert <= 100 Then Exit Do
End If
Loop While True
m_DurchflussSoll = dblQ_Ziel
' Ziel erreicht
WarteAufDurchflussErreicht
ProgressBar1.Visible = False
End Sub
Private Sub UpdateQist()
If g_ohneSPS Then
Exit Sub
End If
lblQIst.caption = Format(m_SPS.getQIst, "0.0000")
If m_SPS.SolldurchflussErreicht Then
lblQIst.BackColor = vbGreen
Else
lblQIst.BackColor = vbYellow
End If
End Sub
Private Sub Regulieren()
Dim Einbauplatz As CEinbauplatz
Dim EinbauplatzNr As Integer
Dim Pruefzaehler As CPruefzaehler
Dim lngSollPruefzeit As Long
HighlightAblaufZeile enum_Fortschritt.Regulieren_bei_QMax
m_blnAbbruch = False
m_DurchflussSoll = m_colUniquePP.Item(1).getQ
lblQsoll.caption = m_DurchflussSoll
Set m_Refzaehler = New CRefzaehler
If m_Refzaehler.loadForDurchfluss(m_DurchflussSoll, 0) = False Then
MsgBox "Kein Referenzzähler für Durchfluss " & m_DurchflussSoll
Exit Sub
End If
PrintStatus "Referenzzähler mit NW " & m_Refzaehler.Nennweite & " gewählt. "
SetQinSPS
WarteAufDurchflussErreicht
PrintStatus "Solldurchfluss erreicht"
''''''''''''''''''''''''''''
' Impulszählung
''''''''''''''''''''''''''''
' todo aus Ini
m_Messdaten(1).FM85Adresse_RZ = 1
m_Messdaten(1).FM85Adresse_HZ = 1
m_Messdaten(1).FM85Adresse_NZ = 2
m_Messdaten(2).FM85Adresse_RZ = 3
m_Messdaten(2).FM85Adresse_HZ = 3
m_Messdaten(2).FM85Adresse_NZ = 4
' Referenzzähler Daten anzeigen
UpdateFlexgridMessung False ' ohne Clear
For Each Einbauplatz In m_colEinbauplatz
EinbauplatzNr = Einbauplatz.getNr
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If Not Pruefzaehler Is Nothing Then
m_Messdaten(EinbauplatzNr).Impulswertigkeit_HZ = Einbauplatz.getPruefzaehler.GetImpulseQM
m_Messdaten(EinbauplatzNr).Impulswertigkeit_NZ = m_lngImpulswertigkeit_NZ
m_Messdaten(EinbauplatzNr).Impulswertigkeit_RZ = m_Refzaehler.ImpulseQM
Else
m_Messdaten(EinbauplatzNr).Impulswertigkeit_HZ = 0
m_Messdaten(EinbauplatzNr).Impulswertigkeit_NZ = 0
m_Messdaten(EinbauplatzNr).Impulswertigkeit_RZ = 0
Debug.Print "Kein Zaähler am Einbauplatz " & EinbauplatzNr
End If
Next
lngSollPruefzeit = g_App.Settings.GetOrSetIniWert(INISECTION, INIKEY_PRUEFZEIT_DER_IMPULSZAEHLUNG, "60")
HighlightAblaufZeile enum_Fortschritt.Regulieren_bei_QMax_Impulszaehlung
Call Impulszaehlung(lngSollPruefzeit)
If m_blnAbbruch Then Exit Sub
PrintStatus "FM85 reset"
If Not m_blnSimulation Then
' RESET
sendonly "**0@"
sendonly "R"
Sleep 3000, True
sendonly "**0@"
sendonly "1s" ' Multiplikator
' keine Doppelimpulssprerre
sendonly "G"
' Doppelimpulssperrzeit
sendonly "0000S"
End If
' FM85 K-Wert setzen
Dim VerbundzaehlerIndex As Integer
Dim m_KWert As Double
Dim TmpStr As String
For Each Einbauplatz In m_colEinbauplatz
EinbauplatzNr = Einbauplatz.getNr
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If Not Pruefzaehler Is Nothing Then
' K Wert berechnen
PrintStatus "mit dem HZ-Anteil " & Format(m_Messdaten(EinbauplatzNr).Anteil_HZ, "0.0000") & " korrigierte Impulswertigkeit " & m_Messdaten(EinbauplatzNr).Impulswertigkeit_HZ & " des HZ: " & m_Messdaten(EinbauplatzNr).Anteil_HZ * m_Messdaten(EinbauplatzNr).Impulswertigkeit_HZ
m_KWert = GetKWert(m_Messdaten(EinbauplatzNr).Anteil_HZ * m_Messdaten(EinbauplatzNr).Impulswertigkeit_HZ, m_Refzaehler.ImpulseQM, m_Refzaehler.letzterFehler(m_DurchflussSoll))
TmpStr = ValToKString(m_KWert)
If Not m_blnSimulation Then
sendonly "**" & m_Messdaten(EinbauplatzNr).FM85Adresse_HZ & "@"
sendonly TmpStr
End If
PrintStatus "K-Wert für FM85(" & m_Messdaten(EinbauplatzNr).FM85Adresse_HZ & ") : " & TmpStr
End If
Next
AutoSpaltenBreite MSFlexgridMessung, lblAutosize
HighlightAblaufZeile enum_Fortschritt.Regulieren_bei_QMax_Regulieren
cmbDaempfung.Enabled = True
cmbDaempfung.SetFocus
PrintStatus "Bitte jetzt manuell regulieren!"
cmdWeiter.Enabled = True
cmbDaempfung.Enabled = True
cmdWeiter.caption = "Weiter (Regulieren beenden)"
''' lstAblauf.ListIndex = 2
Do While Not mblnWeiter
Sleep 100, True
Loop
cmbDaempfung.Enabled = False
PrintStatus "Regulieren beendet!"
End Sub
Private Sub Impulszaehlung(lngZaehlzeit_s As Long)
Dim lngStartzeit As Long
Dim VerbundzaehlerIndex As Integer
Dim SpaltenIndex As Integer
m_blnAbbruch = False
Wiederholung:
On Error GoTo Errorhandler
ClearFlexgridMessung
For SpaltenIndex = 1 To 5
' neu berechnet:
MSFlexgridMessung.TextMatrix(enum_zeile.GezaehlteImpulse, SpaltenIndex) = ""
MSFlexgridMessung.TextMatrix(enum_zeile.Anteil, SpaltenIndex) = ""
MSFlexgridMessung.TextMatrix(enum_zeile.Impulse, SpaltenIndex) = ""
Next
lblPruefzeitSoll.caption = lngZaehlzeit_s
ProgressBar1.value = 0
ProgressBar1.Max = lngZaehlzeit_s * 100
ProgressBar1.Visible = True
PrintStatus "Reset alle FM85..."
If Not m_blnSimulation Then
sendonly "**0@"
sendonly "R"
Sleep 5000
End If
PrintStatus "FM85 Impulszählung für alle FM85 Eingänge starten..."
If Not m_blnSimulation Then
sendonly "**0@"
' todo Auswahl Version 9 oder Version 10
'sendonly "o"
' PZ Eingang
sendonly "Q"
' RZ Eingang
sendonly "O"
End If
PrintStatus "Impulszählung läuft " & lngZaehlzeit_s & " sec"
lngStartzeit = GetTickCount()
Do
If Not g_ohneSPS Then
UpdateQist
End If
If m_blnAbbruch Then
Exit Do
End If
m_dblPruefzeit_s = (GetTickCount() - lngStartzeit) / 1000
MSFlexgridMessung.TextMatrix(enum_zeile.Pruefzeit, enum_spalte.RZ) = Format(m_dblPruefzeit_s, "0")
If m_dblPruefzeit_s <> 0 Then
For VerbundzaehlerIndex = 1 To 2
' Haupzähler
If m_Messdaten(VerbundzaehlerIndex).Impulswertigkeit_HZ > 0 Then
' gezaehlte Impulse für HZ auslesen und darstellen
If m_blnSimulation Then
m_Messdaten(VerbundzaehlerIndex).gezaehlteImpulse_HZ = 838 * m_dblPruefzeit_s / lngZaehlzeit_s
Else
m_Messdaten(VerbundzaehlerIndex).gezaehlteImpulse_HZ = GetHexZahlFromFM85(m_Messdaten(VerbundzaehlerIndex).FM85Adresse_HZ, "U")
End If
End If
' Nebenzaehler
If m_Messdaten(VerbundzaehlerIndex).Impulswertigkeit_NZ > 0 Then
' gezaehlte Impulse für NZ auslesen und darstellen
If m_blnSimulation Then
m_Messdaten(VerbundzaehlerIndex).gezaehlteImpulse_NZ = 154 * m_dblPruefzeit_s / lngZaehlzeit_s
Else
m_Messdaten(VerbundzaehlerIndex).gezaehlteImpulse_NZ = GetHexZahlFromFM85(m_Messdaten(VerbundzaehlerIndex).FM85Adresse_NZ, "U")
End If
End If
If m_blnSimulation Then
m_Messdaten(VerbundzaehlerIndex).gezaehlteImpulse_RZ = 1690 * m_dblPruefzeit_s / lngZaehlzeit_s
Else
' Referenzzähler
m_Messdaten(VerbundzaehlerIndex).gezaehlteImpulse_RZ = GetHexZahlFromFM85(m_Messdaten(VerbundzaehlerIndex).FM85Adresse_RZ, "L")
End If
AktualisiereDatenFuerImpulszaehlung VerbundzaehlerIndex
If m_blnAbbruch Then
PrintStatus "Impulszählung abgebrochen"
Exit Sub
End If
Next
End If
If m_dblPruefzeit_s < lngZaehlzeit_s Then
ProgressBar1.Visible = True
ProgressBar1.value = m_dblPruefzeit_s * 100
End If
DoEvents
AutoSpaltenBreite MSFlexgridMessung, lblAutosize
Loop While lngStartzeit + 1000 * lngZaehlzeit_s > GetTickCount And m_blnAbbruch = False
' todo
'' ' Impulse für alle FM85 zwischenspeichern
'' sendonly "**0@"
'' sendonly "q"
m_dblPruefzeit_s = (GetTickCount - lngStartzeit) / 1000
For VerbundzaehlerIndex = 1 To 2
' Endgültige Ergebnisse auslesen
If m_Messdaten(VerbundzaehlerIndex).Impulswertigkeit_HZ > 0 Then
' gezaehlte Impulse für HZ auslesen und darstellen
If m_blnSimulation Then
m_Messdaten(VerbundzaehlerIndex).gezaehlteImpulse_HZ = 838 * m_dblPruefzeit_s / lngZaehlzeit_s
Else
m_Messdaten(VerbundzaehlerIndex).gezaehlteImpulse_HZ = GetHexZahlFromFM85(m_Messdaten(VerbundzaehlerIndex).FM85Adresse_HZ, "U")
End If
End If
' Nebenzaehler
If m_Messdaten(VerbundzaehlerIndex).Impulswertigkeit_NZ > 0 Then
' gezaehlte Impulse für NZ auslesen und darstellen
If m_blnSimulation Then
m_Messdaten(VerbundzaehlerIndex).gezaehlteImpulse_NZ = 154 * m_dblPruefzeit_s / lngZaehlzeit_s
Else
m_Messdaten(VerbundzaehlerIndex).gezaehlteImpulse_NZ = GetHexZahlFromFM85(m_Messdaten(VerbundzaehlerIndex).FM85Adresse_NZ, "U")
End If
End If
If m_blnSimulation Then
m_Messdaten(VerbundzaehlerIndex).gezaehlteImpulse_RZ = 1690 * m_dblPruefzeit_s / lngZaehlzeit_s
Else
' Referenzzähler
m_Messdaten(VerbundzaehlerIndex).gezaehlteImpulse_RZ = GetHexZahlFromFM85(m_Messdaten(VerbundzaehlerIndex).FM85Adresse_RZ, "L")
End If
AktualisiereDatenFuerImpulszaehlung VerbundzaehlerIndex
Next
PrintStatus "Impulszählung beendet."
ProgressBar1.Visible = False
Exit Sub
Errorhandler:
Dim errdesc As String
Dim errnum As Long
Dim ret As Long
errdesc = Err.Description
errnum = Err.Number
Err.Clear
ret = MsgBox("Fehler " & errnum & " in Impulszählung: " & errdesc)
Exit Sub
Resume
End Sub
Private Sub AktualisiereDatenFuerImpulszaehlung(VerbundzaehlerIndex As Integer)
Dim Spalte_HZ As Integer
Dim Spalte_NZ As Integer
Select Case VerbundzaehlerIndex
Case 1
Spalte_HZ = enum_spalte.HZ1
Spalte_NZ = enum_spalte.NZ1
Case 2
Spalte_HZ = enum_spalte.HZ2
Spalte_NZ = enum_spalte.NZ2
End Select
MSFlexgridMessung.TextMatrix(enum_zeile.Adresse, Spalte_HZ) = m_Messdaten(VerbundzaehlerIndex).FM85Adresse_HZ
MSFlexgridMessung.TextMatrix(enum_zeile.Adresse, Spalte_NZ) = m_Messdaten(VerbundzaehlerIndex).FM85Adresse_NZ
MSFlexgridMessung.TextMatrix(enum_zeile.Adresse, enum_spalte.RZ) = m_Messdaten(VerbundzaehlerIndex).FM85Adresse_RZ
If m_Messdaten(VerbundzaehlerIndex).Impulswertigkeit_HZ > 0 Then
MSFlexgridMessung.TextMatrix(enum_zeile.Impulswertigkeit, Spalte_HZ) = m_Messdaten(VerbundzaehlerIndex).Impulswertigkeit_HZ
End If
If m_Messdaten(VerbundzaehlerIndex).Impulswertigkeit_NZ > 0 Then
MSFlexgridMessung.TextMatrix(enum_zeile.Impulswertigkeit, Spalte_NZ) = m_Messdaten(VerbundzaehlerIndex).Impulswertigkeit_NZ
End If
MSFlexgridMessung.TextMatrix(enum_zeile.Impulswertigkeit, enum_spalte.RZ) = m_Refzaehler.ImpulseQM
If m_Messdaten(VerbundzaehlerIndex).Impulswertigkeit_HZ > 0 And m_dblPruefzeit_s <> 0 Then
' HZ
MSFlexgridMessung.TextMatrix(enum_zeile.GezaehlteImpulse, Spalte_HZ) = m_Messdaten(VerbundzaehlerIndex).gezaehlteImpulse_HZ
' Durchfluss für HZ m³/h = Impulse / [Impulse/m³] / h
m_Messdaten(VerbundzaehlerIndex).Durchfluss_HZ = (m_Messdaten(VerbundzaehlerIndex).gezaehlteImpulse_HZ / m_Messdaten(VerbundzaehlerIndex).Impulswertigkeit_HZ) / (m_dblPruefzeit_s / 3600)
MSFlexgridMessung.TextMatrix(enum_zeile.Durchfluss_m3, Spalte_HZ) = Format(m_Messdaten(VerbundzaehlerIndex).Durchfluss_HZ, "0.000")
End If
If m_Messdaten(VerbundzaehlerIndex).Impulswertigkeit_NZ > 0 And m_dblPruefzeit_s <> 0 Then
' NZ
MSFlexgridMessung.TextMatrix(enum_zeile.GezaehlteImpulse, Spalte_NZ) = m_Messdaten(VerbundzaehlerIndex).gezaehlteImpulse_NZ
' Durchfluss für NZ m³/h = Impulse / [Impulse/m³] / h
m_Messdaten(VerbundzaehlerIndex).Durchfluss_NZ = (m_Messdaten(VerbundzaehlerIndex).gezaehlteImpulse_NZ / m_Messdaten(VerbundzaehlerIndex).Impulswertigkeit_NZ) / (m_dblPruefzeit_s / 3600)
MSFlexgridMessung.TextMatrix(enum_zeile.Durchfluss_m3, Spalte_NZ) = Format(m_Messdaten(VerbundzaehlerIndex).Durchfluss_NZ, "0.000")
End If
If m_Messdaten(VerbundzaehlerIndex).Impulswertigkeit_RZ <> 0 And m_dblPruefzeit_s <> 0 Then
' Referenzzähler
MSFlexgridMessung.TextMatrix(enum_zeile.GezaehlteImpulse, enum_spalte.RZ) = m_Messdaten(VerbundzaehlerIndex).gezaehlteImpulse_RZ
' Durchfluss für RZ
m_Messdaten(VerbundzaehlerIndex).Durchfluss_RZ = (m_Messdaten(VerbundzaehlerIndex).gezaehlteImpulse_RZ / m_Messdaten(VerbundzaehlerIndex).Impulswertigkeit_RZ) / (m_dblPruefzeit_s / 3600)
MSFlexgridMessung.TextMatrix(enum_zeile.Durchfluss_m3, enum_spalte.RZ) = Format(m_Messdaten(VerbundzaehlerIndex).Durchfluss_RZ, "0.000")
End If
' Durchfluss HZ + NZ
m_Messdaten(VerbundzaehlerIndex).Durchfluss_HZ_NZ = m_Messdaten(VerbundzaehlerIndex).Durchfluss_HZ + m_Messdaten(VerbundzaehlerIndex).Durchfluss_NZ
If m_Messdaten(VerbundzaehlerIndex).Impulswertigkeit_HZ > 0 And m_Messdaten(VerbundzaehlerIndex).Impulswertigkeit_NZ > 0 Then
MSFlexgridMessung.TextMatrix(enum_zeile.Durchfluss_HZ_NZ, Spalte_HZ) = Format(m_Messdaten(VerbundzaehlerIndex).Durchfluss_HZ_NZ, "0.000")
End If
' Anteile errechnen und anzeigen
' HZ
If m_Messdaten(VerbundzaehlerIndex).Durchfluss_HZ_NZ > 0 And m_dblPruefzeit_s <> 0 Then
m_Messdaten(VerbundzaehlerIndex).Anteil_HZ = m_Messdaten(VerbundzaehlerIndex).Durchfluss_HZ / m_Messdaten(VerbundzaehlerIndex).Durchfluss_HZ_NZ
MSFlexgridMessung.TextMatrix(enum_zeile.Anteil, Spalte_HZ) = Format(m_Messdaten(VerbundzaehlerIndex).Anteil_HZ, "0.000000")
' NZ
m_Messdaten(VerbundzaehlerIndex).Anteil_NZ = m_Messdaten(VerbundzaehlerIndex).Durchfluss_NZ / m_Messdaten(VerbundzaehlerIndex).Durchfluss_HZ_NZ
MSFlexgridMessung.TextMatrix(enum_zeile.Anteil, Spalte_NZ) = Format(m_Messdaten(VerbundzaehlerIndex).Anteil_NZ, "0.000000")
' RZ
MSFlexgridMessung.TextMatrix(enum_zeile.Anteil, enum_spalte.RZ) = Format(m_Messdaten(VerbundzaehlerIndex).Anteil_HZ + m_Messdaten(VerbundzaehlerIndex).Anteil_NZ, "0.00")
End If
End Sub
Private Sub AktualisiereDatenFuerPeriodendauermessung(VerbundzaehlerIndex As Integer)
'VerbundzaehlerIndex = 1 oder 2
Dim Spalte_HZ As Integer
Dim Spalte_NZ As Integer
If m_dblPruefzeit_s <= 0 Then Exit Sub
Select Case VerbundzaehlerIndex
Case 1
Spalte_HZ = enum_spalte.HZ1
Spalte_NZ = enum_spalte.NZ1
Case 2
Spalte_HZ = enum_spalte.HZ2
Spalte_NZ = enum_spalte.NZ2
End Select
' Adresse FM 85
' Impulswertigkeit
' Anzahl der zu zählenden Impulse
MSFlexgridMessung.TextMatrix(enum_zeile.Impulse, Spalte_HZ) = m_Messdaten(VerbundzaehlerIndex).AnzahlPerioden_HZ
MSFlexgridMessung.TextMatrix(enum_zeile.Impulse, Spalte_NZ) = m_Messdaten(VerbundzaehlerIndex).AnzahlPerioden_NZ
MSFlexgridMessung.TextMatrix(enum_zeile.Impulse, enum_spalte.RZ) = m_Messdaten(VerbundzaehlerIndex).AnzahlPerioden_RZ
' verbleibende Impulse
MSFlexgridMessung.TextMatrix(enum_zeile.VerbleibeneImpulse, Spalte_HZ) = m_Messdaten(VerbundzaehlerIndex).verbleibendeImpulse_HZ
MSFlexgridMessung.TextMatrix(enum_zeile.VerbleibeneImpulse, Spalte_NZ) = m_Messdaten(VerbundzaehlerIndex).verbleibendeImpulse_NZ
MSFlexgridMessung.TextMatrix(enum_zeile.VerbleibeneImpulse, enum_spalte.RZ) = m_Messdaten(VerbundzaehlerIndex).verbleibendeImpulse_RZ
' Prüfzeit
' Fehler RZ
' ************ nicht wichtig ****
' Q HZ = (ImpulseHZ - verblHZ) * ImpulswertigHZ / Pruefzeit
' Q NZ = (ImpulseNZ - verblNZ) * ImpulswertigNZ / Pruefzeit
' Q_REF =(ImpulseRZ - verblRZ) * ImpulswertigRZ / Pruefzeit
' Q_HZ_NZ = QHZ + QNZ
' (Fehler HZ_NZ = (Q_HZ_NZ - Q_REF) / Q_REF)
'***************************
End Sub
Private Sub WarteAufDurchflussErreicht()
If g_ohneSPS Then
Exit Sub
End If
Sleep 2000, True
lblQIst.BackColor = vbYellow
Do
If m_blnAbbruch Then
lblQIst.BackColor = &H8000000F
Exit Sub
End If
lblQIst.caption = Format(m_SPS.getQIst, "0.0000")
DoEvents
Loop While Not m_SPS.SolldurchflussErreicht
lblQIst.BackColor = vbGreen
End Sub
Private Sub SetQinSPS()
PrintStatus "Nächster Durchfluss: " & m_DurchflussSoll
lblQsoll.caption = Format(m_DurchflussSoll, "0.000")
If g_ohneSPS Then
Exit Sub
End If
' Betrieb Start zurücksetzen
m_SPS.setBetrieb 8
Sleep 500
m_SPS.setBetrieb 0
' Durchlauf auswählen
m_SPS.setBehaelter 1
m_SPS.SetQSoll 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
m_SPS.SetServoStellung 50
' Vorwahl Referenzzaehler
m_SPS.SetMID m_Refzaehler.EinbauplatzNr
m_SPS.SetQDiff 0
' Durchfluss starten
m_SPS.setBetrieb 2
End Sub
Private Sub sendonly(text)
m_FMBus.send (text)
m_FMBus.receive (500)
End Sub
Private Function GetHexZahlFromFM85(EinbauplatzNr As Integer, strSende As String) As Long
Dim strAntwortAdressierung As String
Dim strAntwort As String
Dim Versuche As Long
On Error GoTo Errorhandler
Versuche = 0
startagain1:
If EinbauplatzNr > 0 Then
' FM85P mit entspr. Adresse ansprechen
m_FMBus.send "**" & EinbauplatzNr & "@"
strAntwortAdressierung = m_FMBus.receive(700)
If InStr(1, strAntwortAdressierung, EinbauplatzNr) = 0 Then
PrintStatus "FM85P-" & EinbauplatzNr & " antwortete bei Adressierung '" & strAntwortAdressierung & "'"
If Versuche < 10 Then
Versuche = Versuche + 1
GoTo startagain1
End If
If EinbauplatzNr > 0 Then
LogIntoDB "FM85P-" & EinbauplatzNr & " antwortete mit '" & strAntwort & "'", "FM85 RZ Prüf"
End If
End If
End If
Versuche = 0
startagain2:
m_FMBus.send strSende
strAntwort = m_FMBus.receive(700)
If IsNumeric("&H" & strAntwort) Then
GetHexZahlFromFM85 = CLng("&H" & strAntwort)
'PrintStatus "Anwort vom FM85: " & strAntwort & " = " & GetHexZahlFromFM85
Else
If EinbauplatzNr > 0 Then
PrintStatus "FM85P-" & EinbauplatzNr & " antwortete mit '" & strAntwort & "'"
End If
If InStr(1, strAntwort, "MESSERGEBNIS LIEGT NICHT VOR") > 0 Then
GetHexZahlFromFM85 = -1
Exit Function
End If
If Versuche < 10 Then
Versuche = Versuche + 1
GoTo startagain2
End If
If EinbauplatzNr > 0 Then
LogIntoDB "FM85P-" & EinbauplatzNr & " antwortete mit '" & strAntwort & "'", "FM85 RZ Prf"
End If
GetHexZahlFromFM85 = -1
End If
Exit Function
Errorhandler:
LogIntoDB "Fehler " & Err.Number & " in GetHexZahlFromFM85 (RZ Prf):" & Err.Description, "Prg Fehler!"
GetHexZahlFromFM85 = -1
End Function
Private Sub Form_Unload(Cancel As Integer)
If MsgBox("Beenden?", vbYesNo) = vbYes Then
Cancel = False
m_blnAbbruch = True
Else
Cancel = True
End If
End Sub
Private Function GetKWert(dblImpulswertigkeitPZ As Double, dblImpulswertigkeitRZ As Double, dblletzterFehlerRZ As Double) As Double
' K Wert bestimmen
GetKWert = dblImpulswertigkeitPZ / dblImpulswertigkeitPZ
PrintStatus "PZ-Impulse/m³ = " & dblImpulswertigkeitPZ
PrintStatus "RZ-Impulse/m³ = " & dblImpulswertigkeitRZ
PrintStatus "interpolierter Fehler RZ: " & dblletzterFehlerRZ & " % "
PrintStatus "unkorrigierter K Wert: " & dblImpulswertigkeitRZ & "/" & dblImpulswertigkeitPZ & " = " & dblImpulswertigkeitRZ / dblImpulswertigkeitPZ
GetKWert = dblImpulswertigkeitRZ * (1 + dblletzterFehlerRZ / 100) / dblImpulswertigkeitPZ
PrintStatus "mit RZ Fehler korrigierter K Wert: K = K' * (1 + Frz/100) = " & GetKWert
End Function
Private Sub OeffnenSchliessenDurchfluss_Ermitteln()
Dim strTemp As String
Dim Einbauplatz As CEinbauplatz
Dim Pruefzaehler As CPruefzaehler
Dim VerbundzaehlerIndex As Integer
Dim Spalte_HZ As Integer
Dim Spalte_NZ As Integer
HighlightAblaufZeile 3
m_blnAbbruch = False
If Not g_ohneSPS Then
m_SPS.SetQSoll 0
m_SPS.setBetrieb 0
End If
m_DurchflussSoll = CDbl(g_App.Settings.GetOrSetIniWert(INISECTION, "Durchfluss_Oeffnen_Schliessen", "3,9"))
m_Refzaehler.loadForDurchfluss m_DurchflussSoll, 1
SetQinSPS
For VerbundzaehlerIndex = 1 To 2
Set Einbauplatz = m_colEinbauplatz.Item(VerbundzaehlerIndex)
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If Not Pruefzaehler Is Nothing Then
frmOeffnenSchliessen.Enabled = True
frmOeffnenSchliessen.Visible = True
End If
Next
PrintStatus "Bitte ermitteln sie jetzt die Öffnen- und Schließen-Durchflüsse und tragen Sie sie ein!"
mblnWeiter = False
cmdWeiter.Enabled = True
cmdWeiter.caption = "Weiter (Öff/Schl eintragen)"
If txtDurchflussOeffnen(2).Visible Then
txtDurchflussOeffnen(2).SetFocus
End If
If txtDurchflussOeffnen(1).Visible Then
txtDurchflussOeffnen(1).SetFocus
End If
Do While Not mblnWeiter
If m_blnAbbruch Then Exit Sub
UpdateQist
Sleep 100, True
Loop
PrintStatus "Öffnen/Schließen Phase beendet."
''''''''''''''''' '''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''''''
''''''''''''''''' Öffnen / Schliessen Durchflüsse speichern '''''''''''''''''''''''''''''''''''
''''''''''''''''' '''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''''''
For VerbundzaehlerIndex = 1 To 2
Set Einbauplatz = m_colEinbauplatz.Item(VerbundzaehlerIndex)
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If Not Pruefzaehler Is Nothing Then
Select Case VerbundzaehlerIndex
Case 1
Spalte_HZ = enum_spalte.HZ1
Spalte_NZ = enum_spalte.NZ1
Case 2
Spalte_HZ = enum_spalte.HZ2
Spalte_NZ = enum_spalte.NZ2
End Select
strTemp = Replace(txtDurchflussOeffnen(VerbundzaehlerIndex).text, ".", ",")
If IsNumeric(strTemp) Then
m_Messdaten(VerbundzaehlerIndex).Durchfluss_Oeffnen = CDbl(strTemp)
End If
strTemp = Replace(txtDurchflussSchliessen(VerbundzaehlerIndex).text, ".", ",")
If IsNumeric(strTemp) Then
m_Messdaten(VerbundzaehlerIndex).Durchfluss_Schliessen = CDbl(strTemp)
End If
' Anzeigen
MSFlexgridMessung.TextMatrix(enum_zeile.Durchfluss_Oeffnen, Spalte_HZ) = Format(m_Messdaten(VerbundzaehlerIndex).Durchfluss_Oeffnen, "0.000")
MSFlexgridMessung.TextMatrix(enum_zeile.Durchfluss_Schliessen, Spalte_HZ) = Format(m_Messdaten(VerbundzaehlerIndex).Durchfluss_Schliessen, "0.000")
If MSFgErgebnisse.TextMatrix(1, 2) = "" Then
MSFgErgebnisse.TextMatrix(1, 2) = Format(m_Messdaten(VerbundzaehlerIndex).Durchfluss_Oeffnen, "0.000")
End If
If MSFgErgebnisse.TextMatrix(1, 3) = "" Then
MSFgErgebnisse.TextMatrix(1, 3) = Format(m_Messdaten(VerbundzaehlerIndex).Durchfluss_Schliessen, "0.000")
End If
End If
Next
frmOeffnenSchliessen.Enabled = False
frmOeffnenSchliessen.Visible = False
If Not g_ohneSPS Then
m_SPS.SetQSoll 0
m_SPS.setBetrieb 0
End If
End Sub
Private Sub Periodendauermessung(lngPruefzeit_s As Long, bln_HZ_Messen As Boolean, bln_NZ_Messen As Boolean)
Dim dblPruefvolumen_m3 As Double
Dim Pruefzaehler As CPruefzaehler
Dim Einbauplatz As CEinbauplatz
Dim lngStartzeit As Long
Dim verbleibendeImpulseGesamt As Long
Dim Spalte_HZ As Integer
Dim SpaltenIndex As Integer
Dim Spalte_NZ As Integer
Dim bln_Auf_NZ_warten As Boolean
Dim intCountWiederholung As Integer
m_blnAbbruch = False
intCountWiederholung = -1
Wiederholung:
intCountWiederholung = intCountWiederholung + 1
ClearFlexgridMessung
If Not m_blnSimulation Then
PrintStatus "Reset alle FM85..."
sendonly "**0@"
sendonly "R"
Sleep 5000, True
End If
m_Messdaten(1).Durchfluss_ist = 0
m_Messdaten(2).Durchfluss_ist = 0
dblPruefvolumen_m3 = m_DurchflussSoll * lngPruefzeit_s / 3600 ' m³ = (m³/h) / (3600 s/h)
PrintStatus "Prüfvolumen " & Format(dblPruefvolumen_m3, "0.000") & " m³"
lblPruefzeitSoll = Format(lngPruefzeit_s, "0")
' Periodenzahl für alle RZ festlegen
m_Messdaten(1).AnzahlPerioden_RZ = m_Refzaehler.ImpulseQM * dblPruefvolumen_m3 ' Anteil = 1
m_Messdaten(2).AnzahlPerioden_RZ = m_Refzaehler.ImpulseQM * dblPruefvolumen_m3 ' Anteil = 1
PrintStatus "Periodendauermessung für alle RZ starten mit " & m_Messdaten(1).AnzahlPerioden_RZ & " Impulsen"
sendonly "**0@"
m_Messdaten(1).Impulswertigkeit_RZ = m_Refzaehler.ImpulseQM
m_Messdaten(2).Impulswertigkeit_RZ = m_Refzaehler.ImpulseQM
' todo: ersten Zähler (ebp 1 oder 2) verwenden
sendonly Hex(m_Messdaten(1).AnzahlPerioden_RZ) & "M"
ProgressBar1.value = 0
ProgressBar1.Max = lngPruefzeit_s * 100
ProgressBar1.Visible = True
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
m_Messdaten(Einbauplatz.getNr).verbleibendeImpulse_HZ = 0
m_Messdaten(Einbauplatz.getNr).verbleibendeImpulse_RZ = 0
m_Messdaten(Einbauplatz.getNr).verbleibendeImpulse_NZ = 0
If Not Pruefzaehler Is Nothing Then
If bln_HZ_Messen Then
If bln_NZ_Messen = False Then m_Messdaten(Einbauplatz.getNr).Anteil_HZ = 1
' für den Hauptzähler soll eine Periodendauermessung durchgeführt werden
m_Messdaten(Einbauplatz.getNr).AnzahlPerioden_HZ = m_Messdaten(Einbauplatz.getNr).Impulswertigkeit_HZ * dblPruefvolumen_m3 * m_Messdaten(Einbauplatz.getNr).Anteil_HZ
PrintStatus "Periodendauermessung für HZ starten mit FM85-" & m_Messdaten(Einbauplatz.getNr).FM85Adresse_HZ & " mit " & m_Messdaten(Einbauplatz.getNr).AnzahlPerioden_HZ & " Impulsen"
sendonly "**" & m_Messdaten(Einbauplatz.getNr).FM85Adresse_HZ & "@"
sendonly Hex(m_Messdaten(Einbauplatz.getNr).AnzahlPerioden_HZ) & "H"
Else
' ggf. Impulse zählen
m_Messdaten(Einbauplatz.getNr).AnzahlPerioden_HZ = 0
If m_Messdaten(Einbauplatz.getNr).MaxErlaubteAnzahlVonImpulsen_HZ > -1 Then
' für den Hauptzähler eine Impulszählung zur Kontrolle starten
sendonly "**" & m_Messdaten(Einbauplatz.getNr).FM85Adresse_HZ & "@"
sendonly "Q"
End If
End If
If bln_NZ_Messen Then
m_Messdaten(Einbauplatz.getNr).AnzahlPerioden_NZ = m_Messdaten(Einbauplatz.getNr).Impulswertigkeit_NZ * dblPruefvolumen_m3 * m_Messdaten(Einbauplatz.getNr).Anteil_NZ
sendonly "**" & m_Messdaten(Einbauplatz.getNr).FM85Adresse_NZ & "@"
PrintStatus "Periodendauermessung für NZ starten mit FM85-" & m_Messdaten(Einbauplatz.getNr).FM85Adresse_NZ & " mit " & m_Messdaten(Einbauplatz.getNr).AnzahlPerioden_NZ & " Impulsen"
sendonly Hex(m_Messdaten(Einbauplatz.getNr).AnzahlPerioden_NZ) & "H"
Else
m_Messdaten(Einbauplatz.getNr).AnzahlPerioden_NZ = 0
If m_Messdaten(Einbauplatz.getNr).MaxErlaubteAnzahlVonImpulsen_NZ > -1 Then
' für den Nebenzaehler eine Impulszählung zur Kontrolle starten
sendonly "**" & m_Messdaten(Einbauplatz.getNr).FM85Adresse_NZ & "@"
sendonly "Q"
End If
End If
''AktualisiereDatenFuerPeriodendauermessung (Einbauplatz.getNr)
If m_Messdaten(Einbauplatz.getNr).MaxErlaubteAnzahlVonImpulsen_HZ > -1 Or m_Messdaten(Einbauplatz.getNr).MaxErlaubteAnzahlVonImpulsen_NZ > -1 Then
AktualisiereDatenFuerImpulszaehlung Einbauplatz.getNr
End If
End If ' Not Pruefzaehler Is Nothing
Next
' Startzeit festlegen
lngStartzeit = GetTickCount()
Do
If Not g_ohneSPS Then
UpdateQist
End If
m_dblPruefzeit_s = (GetTickCount - lngStartzeit) / 1000
verbleibendeImpulseGesamt = 0
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If Not Pruefzaehler Is Nothing Then
Select Case Einbauplatz.getNr
Case 1
Spalte_HZ = enum_spalte.HZ1
Spalte_NZ = enum_spalte.NZ1
Case 2
Spalte_HZ = enum_spalte.HZ2
Spalte_NZ = enum_spalte.NZ2
End Select
' HZ
If bln_HZ_Messen Then
' Verbleibemde Hauptzähler Impulse für Periodendauermessung ablesen
If m_blnSimulation Then
m_Messdaten(Einbauplatz.getNr).verbleibendeImpulse_HZ = m_Messdaten(Einbauplatz.getNr).AnzahlPerioden_HZ * (lngPruefzeit_s - m_dblPruefzeit_s) / lngPruefzeit_s * m_Messdaten(Einbauplatz.getNr).Anteil_HZ
Else
m_Messdaten(Einbauplatz.getNr).verbleibendeImpulse_HZ = GetHexZahlFromFM85(m_Messdaten(Einbauplatz.getNr).FM85Adresse_HZ, "I")
End If
Else
m_Messdaten(Einbauplatz.getNr).verbleibendeImpulse_HZ = 0
If m_blnSimulation Then
m_Messdaten(Einbauplatz.getNr).AnzahlPerioden_NZ = 1
Else
m_Messdaten(Einbauplatz.getNr).AnzahlPerioden_HZ = GetHexZahlFromFM85(m_Messdaten(Einbauplatz.getNr).FM85Adresse_HZ, "U")
End If
' hauptzähler Impulse überwachen?
If m_Messdaten(Einbauplatz.getNr).MaxErlaubteAnzahlVonImpulsen_HZ > -1 Then
' HZ Impulse amzeigen
If m_blnSimulation Then
m_Messdaten(Einbauplatz.getNr).gezaehlteImpulse_HZ = 1
Else
m_Messdaten(Einbauplatz.getNr).gezaehlteImpulse_HZ = GetHexZahlFromFM85(m_Messdaten(Einbauplatz.getNr).FM85Adresse_HZ, "U")
End If
MSFlexgridMessung.TextMatrix(enum_zeile.GezaehlteImpulse, Spalte_HZ) = m_Messdaten(Einbauplatz.getNr).gezaehlteImpulse_HZ
' HZ Impulse überprüfen
If m_Messdaten(Einbauplatz.getNr).gezaehlteImpulse_HZ > m_Messdaten(Einbauplatz.getNr).MaxErlaubteAnzahlVonImpulsen_HZ Then
' erst eine einstellbare Zeit nur Impulse zählen, erst dann Konsequenzen ziehen
If m_dblPruefzeit_s > m_Messdaten(Einbauplatz.getNr).MessungAbbrechenNachSekunden Then
If intCountWiederholung < 1 Then
' Periodendauermessung komplett neu starten
GoTo Wiederholung
Else
' Messung beenden
Exit Do
End If
End If
End If
End If
End If
' NZ
If bln_NZ_Messen Then
' Nebenzähler messen
If m_blnSimulation Then
m_Messdaten(Einbauplatz.getNr).verbleibendeImpulse_NZ = m_Messdaten(Einbauplatz.getNr).Impulswertigkeit_NZ * dblPruefvolumen_m3 * (lngPruefzeit_s - m_dblPruefzeit_s) / lngPruefzeit_s * m_Messdaten(Einbauplatz.getNr).Anteil_NZ
Else
m_Messdaten(Einbauplatz.getNr).verbleibendeImpulse_NZ = GetHexZahlFromFM85(m_Messdaten(Einbauplatz.getNr).FM85Adresse_NZ, "I")
End If
If m_Messdaten(Einbauplatz.getNr).AnzahlPerioden_NZ - m_Messdaten(Einbauplatz.getNr).verbleibendeImpulse_NZ > 1 Then
' Es gab zwei Impulse vom NZ
If m_Messdaten(Einbauplatz.getNr).bln_Auf_NZ_warten = False Then
PrintStatus "Es gab 2 Impulse vom NZ " & Einbauplatz.getNr & ". Nun muss auch auf alle NZ-Impulse gewartet werden."
End If
' gezählte Impulse beim NZ >= 2 => Es läuft Wasser durch den NZ => Auf NZ Impulse warten
m_Messdaten(Einbauplatz.getNr).bln_Auf_NZ_warten = True
Else
' gezählte Impulse beim NZ noch < 2 => Es läuft KEIN Wasser durch den NZ, NICHT auf NZ Impulse warten
m_Messdaten(Einbauplatz.getNr).bln_Auf_NZ_warten = True
End If
Else
If m_Messdaten(Einbauplatz.getNr).MaxErlaubteAnzahlVonImpulsen_NZ > -1 Then
' NZ Impulse amzeigen
If m_blnSimulation Then
m_Messdaten(Einbauplatz.getNr).gezaehlteImpulse_NZ = 5
Else
m_Messdaten(Einbauplatz.getNr).gezaehlteImpulse_NZ = GetHexZahlFromFM85(m_Messdaten(Einbauplatz.getNr).FM85Adresse_NZ, "U")
End If
MSFlexgridMessung.TextMatrix(enum_zeile.GezaehlteImpulse, Spalte_NZ) = m_Messdaten(Einbauplatz.getNr).gezaehlteImpulse_NZ
' HZ Impulse überprüfen
If m_Messdaten(Einbauplatz.getNr).gezaehlteImpulse_NZ > m_Messdaten(Einbauplatz.getNr).MaxErlaubteAnzahlVonImpulsen_NZ Then
' erst eine einstellbare Zeit nur Nebenzähler Impulse zählen, erst dann Konsequenzen ziehen
If m_dblPruefzeit_s > m_Messdaten(Einbauplatz.getNr).MessungAbbrechenNachSekunden Then
If intCountWiederholung < 1 Then
' Periodendauermessung komplett neu starten
GoTo Wiederholung
Else
' Messung beenden
Exit Do
End If
End If
End If
End If
End If 'bln_NZ_Messen / Else
' RZ
If m_blnSimulation Then
m_Messdaten(Einbauplatz.getNr).verbleibendeImpulse_RZ = m_Messdaten(Einbauplatz.getNr).Impulswertigkeit_RZ * dblPruefvolumen_m3 * (lngPruefzeit_s - m_dblPruefzeit_s) / lngPruefzeit_s
Else
m_Messdaten(Einbauplatz.getNr).verbleibendeImpulse_RZ = GetHexZahlFromFM85(m_Messdaten(Einbauplatz.getNr).FM85Adresse_RZ, "J")
End If
' Verbleibende Impulse
verbleibendeImpulseGesamt = verbleibendeImpulseGesamt + m_Messdaten(Einbauplatz.getNr).verbleibendeImpulse_HZ + IIf(m_Messdaten(Einbauplatz.getNr).bln_Auf_NZ_warten, m_Messdaten(Einbauplatz.getNr).verbleibendeImpulse_NZ, 0) + m_Messdaten(Einbauplatz.getNr).verbleibendeImpulse_RZ
AktualisiereDatenFuerPeriodendauermessung (Einbauplatz.getNr)
If m_Messdaten(Einbauplatz.getNr).Durchfluss_ist = 0 And m_dblPruefzeit_s > lngPruefzeit_s / 2 Then
' Ist-Durchfluss nach halber Prüfzeit
If Not g_ohneSPS Then
m_Messdaten(Einbauplatz.getNr).Durchfluss_ist = m_SPS.getQIst
End If
End If
End If
Next
If Int(m_dblPruefzeit_s * 100) < ProgressBar1.Max Then
ProgressBar1.value = Int(m_dblPruefzeit_s * 100)
End If
MSFlexgridMessung.TextMatrix(enum_zeile.Pruefzeit, enum_spalte.RZ) = Int(m_dblPruefzeit_s)
DoEvents
If m_blnAbbruch Then
If m_blnSimulation Then
m_Messdaten(1).gesamtFehler = Round((Rnd(1) * 3 - 1), 1)
m_Messdaten(2).gesamtFehler = Round((Rnd(1) * 3 - 1), 1)
End If
Exit Sub
End If
Loop While verbleibendeImpulseGesamt > 0
PrintStatus "verbleibende Impulse =0"
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If Not Pruefzaehler Is Nothing Then
Select Case Einbauplatz.getNr
Case 1
Spalte_HZ = enum_spalte.HZ1
Spalte_NZ = enum_spalte.NZ1
Case 2
Spalte_HZ = enum_spalte.HZ2
Spalte_NZ = enum_spalte.NZ2
End Select
' Hauptzähler
If bln_HZ_Messen = True Then
If m_blnSimulation Then
m_Messdaten(Einbauplatz.getNr).Periodendauer_HZ = m_dblPruefzeit_s * 500000 / 167 '* 0.995
Else
m_Messdaten(Einbauplatz.getNr).Periodendauer_HZ = GetHexZahlFromFM85(m_Messdaten(Einbauplatz.getNr).FM85Adresse_HZ, "X")
End If
PrintStatus "Periodendauer HZ " & Einbauplatz.getNr & " = " & m_Messdaten(Einbauplatz.getNr).Periodendauer_HZ
MSFlexgridMessung.TextMatrix(enum_zeile.Periodendauer, Spalte_HZ) = m_Messdaten(Einbauplatz.getNr).Periodendauer_HZ
m_Messdaten(Einbauplatz.getNr).Pruefzeit_HZ = m_Messdaten(Einbauplatz.getNr).Periodendauer_HZ * 167 / 500000 'Quarzzeitbasis 1/2994 s
PrintStatus "Pruefzeit HZ " & Einbauplatz.getNr & " = " & m_Messdaten(Einbauplatz.getNr).Pruefzeit_HZ
MSFlexgridMessung.TextMatrix(enum_zeile.Pruefzeit, Spalte_HZ) = Format(m_Messdaten(Einbauplatz.getNr).Pruefzeit_HZ, "0.0")
If (m_Messdaten(Einbauplatz.getNr).Impulswertigkeit_HZ) * m_Messdaten(Einbauplatz.getNr).Pruefzeit_HZ <> 0 Then
m_Messdaten(Einbauplatz.getNr).Durchfluss_HZ = 3600 * m_Messdaten(Einbauplatz.getNr).AnzahlPerioden_HZ / (m_Messdaten(Einbauplatz.getNr).Impulswertigkeit_HZ * m_Messdaten(Einbauplatz.getNr).Pruefzeit_HZ)
PrintStatus "Durchfluss HZ " & Einbauplatz.getNr & " = " & m_Messdaten(Einbauplatz.getNr).Durchfluss_HZ
MSFlexgridMessung.TextMatrix(enum_zeile.Durchfluss_m3, Spalte_HZ) = Format(m_Messdaten(Einbauplatz.getNr).Durchfluss_HZ, "0.000")
Else
PrintStatus "Durchfluss HZ " & Einbauplatz.getNr & " konnte nicht berechnet werden"
MSFlexgridMessung.TextMatrix(enum_zeile.Durchfluss_m3, Spalte_HZ) = "?"
End If
Else
If m_Messdaten(Einbauplatz.getNr).MaxErlaubteAnzahlVonImpulsen_HZ > -1 Then
' Hauptzähler Impulse überprüfen
m_Messdaten(Einbauplatz.getNr).gezaehlteImpulse_HZ = GetHexZahlFromFM85(m_Messdaten(Einbauplatz.getNr).FM85Adresse_HZ, "U")
MSFlexgridMessung.TextMatrix(enum_zeile.GezaehlteImpulse, Spalte_HZ) = m_Messdaten(Einbauplatz.getNr).gezaehlteImpulse_HZ
End If
m_Messdaten(Einbauplatz.getNr).Periodendauer_HZ = 0
m_Messdaten(Einbauplatz.getNr).Pruefzeit_HZ = 0
m_Messdaten(Einbauplatz.getNr).Durchfluss_HZ = 0
End If
' Nebenzähler
If bln_NZ_Messen Then
If m_blnSimulation Then
m_Messdaten(Einbauplatz.getNr).Periodendauer_NZ = m_dblPruefzeit_s * 500000 / 167 * (1 + 0) ' simulierter Fehler
Else
m_Messdaten(Einbauplatz.getNr).Periodendauer_NZ = GetHexZahlFromFM85(m_Messdaten(Einbauplatz.getNr).FM85Adresse_NZ, "X")
End If
PrintStatus "Periodendauer NZ " & Einbauplatz.getNr & " : " & m_Messdaten(Einbauplatz.getNr).Periodendauer_NZ
MSFlexgridMessung.TextMatrix(enum_zeile.Periodendauer, Spalte_NZ) = m_Messdaten(Einbauplatz.getNr).Periodendauer_NZ
m_Messdaten(Einbauplatz.getNr).Pruefzeit_NZ = m_Messdaten(Einbauplatz.getNr).Periodendauer_NZ * 167 / 500000 'Quarzzeitbasis 1/2994 s
PrintStatus "Pruefzeit NZ " & Einbauplatz.getNr & " : " & m_Messdaten(Einbauplatz.getNr).Pruefzeit_NZ & " s"
MSFlexgridMessung.TextMatrix(enum_zeile.Pruefzeit, Spalte_NZ) = Format(m_Messdaten(Einbauplatz.getNr).Pruefzeit_NZ, "0.00")
If (m_Messdaten(Einbauplatz.getNr).Impulswertigkeit_NZ * m_Messdaten(Einbauplatz.getNr).Pruefzeit_NZ) <> 0 Then
m_Messdaten(Einbauplatz.getNr).Durchfluss_NZ = 3600 * m_Messdaten(Einbauplatz.getNr).AnzahlPerioden_NZ / (m_Messdaten(Einbauplatz.getNr).Impulswertigkeit_NZ * m_Messdaten(Einbauplatz.getNr).Pruefzeit_NZ)
MSFlexgridMessung.TextMatrix(enum_zeile.Durchfluss_m3, Spalte_NZ) = Format(m_Messdaten(Einbauplatz.getNr).Durchfluss_NZ, "0.000")
PrintStatus "Durchfluss NZ : " & Format(m_Messdaten(Einbauplatz.getNr).Durchfluss_NZ, "0.000") & " m³/h"
Else
PrintStatus "Durchfluss NZ " & Einbauplatz.getNr & " konnte nicht berechnet werden."
MSFlexgridMessung.TextMatrix(enum_zeile.Durchfluss_m3, Spalte_NZ) = "?"
m_Messdaten(Einbauplatz.getNr).Durchfluss_NZ = 0
End If
Else
m_Messdaten(Einbauplatz.getNr).Periodendauer_NZ = 0
m_Messdaten(Einbauplatz.getNr).Pruefzeit_NZ = 0
m_Messdaten(Einbauplatz.getNr).Durchfluss_NZ = 0
If m_Messdaten(Einbauplatz.getNr).MaxErlaubteAnzahlVonImpulsen_NZ > -1 Then
' Nebenzähler Impulse überprüfen
If m_blnSimulation Then
m_Messdaten(Einbauplatz.getNr).gezaehlteImpulse_NZ = 1
Else
m_Messdaten(Einbauplatz.getNr).gezaehlteImpulse_NZ = GetHexZahlFromFM85(m_Messdaten(Einbauplatz.getNr).FM85Adresse_NZ, "U")
End If
MSFlexgridMessung.TextMatrix(enum_zeile.GezaehlteImpulse, Spalte_NZ) = m_Messdaten(Einbauplatz.getNr).gezaehlteImpulse_NZ
End If
MSFlexgridMessung.TextMatrix(enum_zeile.Periodendauer, Spalte_NZ) = ""
MSFlexgridMessung.TextMatrix(enum_zeile.Pruefzeit, Spalte_NZ) = ""
MSFlexgridMessung.TextMatrix(enum_zeile.Durchfluss_m3, Spalte_NZ) = ""
End If
' Referenzzähler
' Periodendauer
If m_blnSimulation Then
m_Messdaten(Einbauplatz.getNr).Periodendauer_RZ = m_dblPruefzeit_s * 500000 / 167
Else
m_Messdaten(Einbauplatz.getNr).Periodendauer_RZ = GetHexZahlFromFM85(m_Messdaten(Einbauplatz.getNr).FM85Adresse_NZ, "Y")
End If
PrintStatus "Periodendauer RZ" & Einbauplatz.getNr & " = " & m_Messdaten(Einbauplatz.getNr).Periodendauer_RZ
MSFlexgridMessung.TextMatrix(enum_zeile.Periodendauer, enum_spalte.RZ) = m_Messdaten(Einbauplatz.getNr).Periodendauer_RZ
' Prüfzeit
m_Messdaten(Einbauplatz.getNr).Pruefzeit_RZ = m_Messdaten(Einbauplatz.getNr).Periodendauer_RZ * 167 / 500000 'Quarzzeitbasis 1/2994 s
MSFlexgridMessung.TextMatrix(enum_zeile.Pruefzeit, enum_spalte.RZ) = Format(m_Messdaten(1).Pruefzeit_RZ, "0.000")
PrintStatus "Pruefzeit RZ: " & Format(m_Messdaten(Einbauplatz.getNr).Pruefzeit_RZ, "0.000") & "s"
' Durchfluss HZ + NZ
m_Messdaten(Einbauplatz.getNr).Durchfluss_HZ_NZ = m_Messdaten(Einbauplatz.getNr).Durchfluss_HZ + m_Messdaten(Einbauplatz.getNr).Durchfluss_NZ
MSFlexgridMessung.TextMatrix(enum_zeile.Durchfluss_HZ_NZ, Spalte_HZ) = Format(m_Messdaten(Einbauplatz.getNr).Durchfluss_HZ_NZ, "0.000")
PrintStatus "Durchfluss_HZ+NZ_" & Einbauplatz.getNr & " = " & Format(m_Messdaten(Einbauplatz.getNr).Durchfluss_HZ_NZ, "0.000") & "m³/h"
' Fehler RZ
m_Messdaten(Einbauplatz.getNr).Fehler_RZ = m_Refzaehler.letzterFehler(m_DurchflussSoll)
PrintStatus "Fehler des RZ bei " & m_DurchflussSoll & "m³/h =" & Format(m_Messdaten(Einbauplatz.getNr).Fehler_RZ, "0.00") & " %"
MSFlexgridMessung.TextMatrix(enum_zeile.Fehler, enum_spalte.RZ) = Format(m_Messdaten(Einbauplatz.getNr).Fehler_RZ, "0.00") & " %"
If (m_Messdaten(Einbauplatz.getNr).Impulswertigkeit_RZ) * m_Messdaten(Einbauplatz.getNr).Pruefzeit_RZ <> 0 Then
m_Messdaten(Einbauplatz.getNr).Durchfluss_RZ = 3600 * m_Messdaten(Einbauplatz.getNr).AnzahlPerioden_RZ / (m_Messdaten(Einbauplatz.getNr).Impulswertigkeit_RZ * m_Messdaten(Einbauplatz.getNr).Pruefzeit_RZ)
PrintStatus "Durchfluss RZ (unkorrigiert) : " & Format(m_Messdaten(Einbauplatz.getNr).Durchfluss_RZ, "0.00000") & " m³/h"
m_Messdaten(Einbauplatz.getNr).Durchfluss_RZ = 3600 * (m_Messdaten(Einbauplatz.getNr).AnzahlPerioden_RZ / m_Messdaten(Einbauplatz.getNr).Impulswertigkeit_RZ) / m_Messdaten(Einbauplatz.getNr).Pruefzeit_RZ / (1 + m_Messdaten(Einbauplatz.getNr).Fehler_RZ / 100)
MSFlexgridMessung.TextMatrix(enum_zeile.Durchfluss_m3, enum_spalte.RZ) = Format(m_Messdaten(Einbauplatz.getNr).Durchfluss_RZ, "0.000")
PrintStatus "Durchfluss RZ (korrigiert) : " & Format(m_Messdaten(Einbauplatz.getNr).Durchfluss_RZ, "0.00000") & " m³/h"
Else
PrintStatus "Durchfluss RZ konnte nicht berechnet werden."
MSFlexgridMessung.TextMatrix(enum_zeile.Durchfluss_m3, enum_spalte.RZ) = "?"
m_Messdaten(Einbauplatz.getNr).Durchfluss_RZ = 0
End If
If m_Messdaten(Einbauplatz.getNr).Durchfluss_RZ > 0 Then
m_Messdaten(Einbauplatz.getNr).gesamtFehler = 100 * (m_Messdaten(Einbauplatz.getNr).Durchfluss_HZ_NZ - m_Messdaten(Einbauplatz.getNr).Durchfluss_RZ) / m_Messdaten(Einbauplatz.getNr).Durchfluss_RZ
MSFlexgridMessung.TextMatrix(enum_zeile.Fehler_HZ_NZ, Spalte_HZ) = Format(m_Messdaten(Einbauplatz.getNr).gesamtFehler, "0.000")
PrintStatus "Fehler des Verbundzaehlers: " & Format(m_Messdaten(Einbauplatz.getNr).gesamtFehler, "0.000") & " %"
Else
MSFlexgridMessung.TextMatrix(enum_zeile.Fehler_HZ_NZ, Spalte_HZ) = "?"
End If
End If
Next
AutoSpaltenBreite MSFlexgridMessung, lblAutosize
End Sub
Public Sub ClearFlexgridMessung()
Dim i As Integer
For i = 1 To 5
MSFlexgridMessung.TextMatrix(enum_zeile.Durchfluss_HZ_NZ, i) = ""
MSFlexgridMessung.TextMatrix(enum_zeile.Durchfluss_m3, i) = ""
MSFlexgridMessung.TextMatrix(enum_zeile.Fehler, i) = ""
MSFlexgridMessung.TextMatrix(enum_zeile.Fehler_HZ_NZ, i) = ""
MSFlexgridMessung.TextMatrix(enum_zeile.Periodendauer, i) = ""
MSFlexgridMessung.TextMatrix(enum_zeile.Pruefzeit, i) = ""
MSFlexgridMessung.TextMatrix(enum_zeile.VerbleibeneImpulse, i) = ""
MSFlexgridMessung.TextMatrix(enum_zeile.GezaehlteImpulse, i) = ""
Next
End Sub
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Sub PruefdatenSpeichern()
Dim Einbauplatz As CEinbauplatz
Dim Pruefzaehler As CPruefzaehler
Dim AuftragpositionSerienNr As CAuftragPositionSerienNr
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If Not Pruefzaehler Is Nothing Then
Set AuftragpositionSerienNr = New CAuftragPositionSerienNr
AuftragpositionSerienNr.load Pruefzaehler.getSerienNr
AuftragpositionSerienNr.setPruefgangNr m_Pruefgang.PruefgangNr
AuftragpositionSerienNr.setEinbauplatzNr Einbauplatz.getNr
AuftragpositionSerienNr.setAnlageDatum Now()
AuftragpositionSerienNr.setAnlageMitarbeiterNr g_App.Mitarbeiter.getNr
' Metrologische Klasse unter der diese Prüfung durchgeführt wurde
If Pruefzaehler.getPruefklasseKZ <> "" Then
AuftragpositionSerienNr.setMetrolog Pruefzaehler.getPruefklasseKZ
Else
AuftragpositionSerienNr.setMetrolog Pruefzaehler.getPruefpunkte.getPruefklasseKZ
End If
'Angaben für Änderung löschen
AuftragpositionSerienNr.setAenderungDatum Empty
AuftragpositionSerienNr.setAenderungMitarbeiterNr Empty
' Setzen der neuen Werte: PgangDatum, PgangNr, Einbauplatz, AnlageDatum, MitarbeiterNr
AuftragpositionSerienNr.setPruefgangDatum m_Pruefgang.Datum
AuftragpositionSerienNr.setWiederholungen AuftragpositionSerienNr.getWiederholungen + 1
AuftragpositionSerienNr.setStatusFertigung 25
FehlerSpeichern m_Messdaten(Einbauplatz.getNr).Ergebniss_Fehler_Qmax, Pruefzaehler, m_Pruefgang, 1
FehlerSpeichern m_Messdaten(Einbauplatz.getNr).Ergebniss_Fehler_Qmin, Pruefzaehler, m_Pruefgang, 2
' Überprüfen auf Fehlergrenzen
' 1. Qmax
If Not GrenzwertUeberschritten(m_colUniquePP.Item(1).getFGo, m_Messdaten(Einbauplatz.getNr).Ergebniss_Fehler_Qmax, m_colUniquePP.Item(1).getFGu) Then
' 2. Qmin
If Not GrenzwertUeberschritten(m_colUniquePP.Item(2).getFGo, m_Messdaten(Einbauplatz.getNr).Ergebniss_Fehler_Qmin, m_colUniquePP.Item(2).getFGu) Then
If Not GrenzwertUeberschritten(1.5, m_Messdaten(Einbauplatz.getNr).Ergebniss_Fehler_Oeffnen, -1.5) Then
' 3. Qoeffnen
If Not GrenzwertUeberschritten(1.5, m_Messdaten(Einbauplatz.getNr).Ergebniss_Fehler_Schliessen, -1.5) Then
' 4. Schliessen
AuftragpositionSerienNr.setStatusFertigung 30
End If
End If
End If
End If
AuftragpositionSerienNr.save True
If VerbundzaehlerSpeichern(Pruefzaehler.getSerienNr, m_Pruefgang.PruefgangNr, m_Messdaten(Einbauplatz.getNr).Durchfluss_Oeffnen, m_Messdaten(Einbauplatz.getNr).Ergebniss_Fehler_Oeffnen, m_Messdaten(Einbauplatz.getNr).Durchfluss_Schliessen, m_Messdaten(Einbauplatz.getNr).Ergebniss_Fehler_Schliessen, Pruefzaehler.m_Verbundzaehler.lngSerienNrNZ, False, Pruefzaehler.m_Verbundzaehler.strKundeneigeneSerienNrNZ, Pruefzaehler.getAuftragPosition) Then
End If
End If
Next
End Sub
Private Function FehlerSpeichern(Fehler As Double, Pruefzaehler As CPruefzaehler, Pruefgang As CPruefgang, PruefpunktNr As Integer)
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
Set rs = New CRecordset
sSQL = "SELECT * from Prueffehler where PruefgangNr=" & PruefgangNr & " and SerienNr=" & SerienNr & ";"
rs.openRS (sSQL)
Debug.Print sSQL
If rs.EOF Then
rs.addNew
End If
Call rs.setValue("SerienNr", SerienNr)
Call rs.setValue("PruefgangNr", PruefgangNr)
Feldname = "PP" & CStr(PruefpunktNr) & "_Fehler"
Debug.Print "Feldname=" & Feldname & "; Fehler=" & Fehler
Call rs.setValue(Feldname, Fehler)
Call rs.setValue("PruefDatum", Now)
Call rs.update
FehlerSpeichern = True
Exit Function
FehlerSpeichernError:
ErrorMsg ("FehlerSpeichern fehlgeschlagen: " & Err.Description)
End Function
Private Function VerbundzaehlerSpeichern(SerienNr As Long, PruefgangNr As Long, dblPP_Oeffnen As Double, dblPP_OeffnenFehler As Double, dblPP_Schliessen As Double, dblPP_SchliessenFehler As Double, strSerienNrNebenzaehler As String, bPruefNZ As Boolean, Optional strKundeneigeneSerienNrNZ As String = "", Optional objAuftragPosition As CAuftragPosition) As Boolean
On Error GoTo VerbundzaehlerSpeichernError
Dim rs As CRecordset
Dim Feldname As String
Dim sSQL As String
Set rs = New CRecordset
sSQL = "SELECT * from Verbundzaehler where PruefgangNr=" & PruefgangNr & " and SerienNr=" & SerienNr & ";"
rs.openRS sSQL, False
If rs.EOF Then
sSQL = "SELECT * from Verbundzaehler where PruefgangNr=0 and SerienNr=" & SerienNr & ";"
rs.openRS sSQL, False
If rs.EOF Then
rs.addNew
End If
End If
Call rs.setValue("SerienNr", SerienNr)
Call rs.setValue("PruefgangNr", PruefgangNr)
Call rs.setValue("PP_Oeffnen", dblPP_Oeffnen)
Call rs.setValue("PP_OeffnenFehler", Round(dblPP_OeffnenFehler, 3))
Call rs.setValue("PP_Schliessen", dblPP_Schliessen)
Call rs.setValue("PP_SchliessenFehler", Round(dblPP_SchliessenFehler, 3))
If Val(strSerienNrNebenzaehler) <> 0 Then
Call rs.setValue("SerienNrNebenzaehler", strSerienNrNebenzaehler)
Call rs.setValue("Pruefnebenzaehler", bPruefNZ)
End If
If strKundeneigeneSerienNrNZ <> "" Then
Call rs.setValue("KundeneigeneSerNrNbZ", strKundeneigeneSerienNrNZ)
End If
Call rs.setValue("PrueferNr", g_App.Mitarbeiter.getNr)
Call rs.setValue("Datum", Now())
' neu RH 17.11.2010
Call rs.setValue("Info_FertigungsauftragNr", objAuftragPosition.GetFertigungsauftragNr)
Call rs.update
VerbundzaehlerSpeichern = True
Exit Function
VerbundzaehlerSpeichernError:
ErrorMsg ("VerbundzaehlerSpeichern fehlgeschlagen: " & Err.Description)
VerbundzaehlerSpeichern = False
End Function
Private Sub txtDurchflussOeffnen_KeyPress(Index As Integer, KeyAscii As Integer)
If KeyAscii = 13 Then
txtDurchflussSchliessen(Index).SetFocus
End If
End Sub
Private Sub txtDurchflussSchliessen_KeyPress(Index As Integer, KeyAscii As Integer)
If KeyAscii = 13 Then
cmdWeiter.Default = True
End If
End Sub