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

3741 lines
162 KiB
Plaintext

VERSION 5.00
Begin VB.Form frmRefZaehlerPrf
BorderStyle = 0 'Kein
Caption = "Pruef2000"
ClientHeight = 9570
ClientLeft = 0
ClientTop = 0
ClientWidth = 12390
LinkTopic = "Form1"
ScaleHeight = 9570
ScaleWidth = 12390
ShowInTaskbar = 0 'False
StartUpPosition = 3 'Windows-Standard
Begin VB.CommandButton cmdSPSInfo
Caption = "Schaubild"
BeginProperty Font
Name = "MS Sans Serif"
Size = 12
Charset = 0
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 615
Left = 4785
TabIndex = 11
Top = 225
Width = 1935
End
Begin VB.CommandButton cmdOK
Caption = "Schließen"
BeginProperty Font
Name = "MS Sans Serif"
Size = 9.75
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 615
Left = 6960
TabIndex = 2
Top = 240
Width = 1935
End
Begin VB.Frame frMain
Height = 8535
Left = -60
TabIndex = 0
Top = 1320
Width = 12015
Begin VB.CheckBox chkSimulation
Caption = "Simulation"
Height = 375
Left = 9600
TabIndex = 66
Top = 7680
Visible = 0 'False
Width = 2205
End
Begin VB.Timer Timer1
Enabled = 0 'False
Interval = 60000
Left = 9720
Top = 7260
End
Begin VB.CommandButton cmdAbweichungenAnzeigen
BackColor = &H008080FF&
Caption = "Abweichungen Anzeigen"
Height = 435
Left = 6840
TabIndex = 65
Top = 6330
Width = 2115
End
Begin VB.Frame Frame6
Caption = "Ereignisse"
Height = 4215
Left = 240
TabIndex = 35
Top = 360
Width = 3795
Begin VB.TextBox txtStatus
Height = 3675
Left = 120
MultiLine = -1 'True
ScrollBars = 2 'Vertikal
TabIndex = 36
Top = 360
Width = 3555
End
End
Begin VB.Frame Frame5
Caption = "Referenzzähler"
Height = 2415
Left = 4260
TabIndex = 25
Top = 4620
Width = 7575
Begin VB.Label Label29
Alignment = 1 'Rechts
Caption = "B"
Height = 195
Left = 480
TabIndex = 64
Top = 1140
Width = 255
End
Begin VB.Label lblFehlerB
Alignment = 1 'Rechts
BackColor = &H00FFFFFF&
BorderStyle = 1 'Fest Einfach
BeginProperty Font
Name = "Arial"
Size = 9.75
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Left = 2580
TabIndex = 63
Top = 1080
Width = 1455
End
Begin VB.Label lblFehlerA
Alignment = 1 'Rechts
BackColor = &H00FFFFFF&
BorderStyle = 1 'Fest Einfach
BeginProperty Font
Name = "Arial"
Size = 9.75
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Left = 2580
TabIndex = 62
Top = 660
Width = 1455
End
Begin VB.Label Label1
Caption = "Fehler"
Height = 195
Left = 2580
TabIndex = 61
Top = 420
Width = 1395
End
Begin VB.Label Label24
Caption = "Datum "
Height = 195
Left = 6000
TabIndex = 54
Top = 420
Width = 1395
End
Begin VB.Label lblDatumFehlerA
Alignment = 1 'Rechts
BackColor = &H00FFFFFF&
BorderStyle = 1 'Fest Einfach
BeginProperty Font
Name = "Arial"
Size = 9.75
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Left = 6000
TabIndex = 53
Top = 660
Width = 1455
End
Begin VB.Label lblDatumFehlerB
Alignment = 1 'Rechts
BackColor = &H00FFFFFF&
BorderStyle = 1 'Fest Einfach
BeginProperty Font
Name = "Arial"
Size = 9.75
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Left = 6000
TabIndex = 52
Top = 1080
Width = 1455
End
Begin VB.Label Label22
Caption = "letzter Fehler"
Height = 195
Left = 4260
TabIndex = 51
Top = 420
Width = 1395
End
Begin VB.Label lblLetzterFehlerA
Alignment = 1 'Rechts
BackColor = &H00FFFFFF&
BorderStyle = 1 'Fest Einfach
BeginProperty Font
Name = "Arial"
Size = 9.75
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Left = 4260
TabIndex = 50
Top = 660
Width = 1455
End
Begin VB.Label lblLetzterFehlerB
Alignment = 1 'Rechts
BackColor = &H00FFFFFF&
BorderStyle = 1 'Fest Einfach
BeginProperty Font
Name = "Arial"
Size = 9.75
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Left = 4260
TabIndex = 49
Top = 1080
Width = 1455
End
Begin VB.Label Label17
Caption = "Nennweite:"
Height = 195
Left = 960
TabIndex = 31
Top = 1560
Width = 1395
End
Begin VB.Label lblNennweite
Alignment = 1 'Rechts
BackColor = &H00FFFFFF&
BorderStyle = 1 'Fest Einfach
BeginProperty Font
Name = "Arial"
Size = 9.75
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Left = 960
TabIndex = 30
Top = 1800
Width = 1455
End
Begin VB.Label lblMIDB
Alignment = 1 'Rechts
BackColor = &H00FFFFFF&
BorderStyle = 1 'Fest Einfach
BeginProperty Font
Name = "Arial"
Size = 9.75
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Left = 960
TabIndex = 29
Top = 1080
Width = 1455
End
Begin VB.Label Label14
Alignment = 1 'Rechts
Caption = "A"
Height = 315
Left = 180
TabIndex = 28
Top = 720
Width = 555
End
Begin VB.Label lblMIDA
Alignment = 1 'Rechts
BackColor = &H00FFFFFF&
BorderStyle = 1 'Fest Einfach
BeginProperty Font
Name = "Arial"
Size = 9.75
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Left = 960
TabIndex = 27
Top = 660
Width = 1455
End
Begin VB.Label Label8
Caption = "SerienNr.:"
Height = 255
Left = 960
TabIndex = 26
Top = 420
Width = 1395
End
End
Begin VB.Frame Frame4
Caption = "Einstellungen"
Height = 2415
Left = 240
TabIndex = 23
Top = 4620
Width = 3795
Begin VB.Frame Frame7
Caption = "Dauerprüfung"
Height = 735
Left = 120
TabIndex = 45
Top = 240
Width = 3555
Begin VB.CommandButton cmdStopDP
Caption = "Beenden"
Enabled = 0 'False
Height = 315
Left = 1860
TabIndex = 48
Top = 270
Width = 1455
End
Begin VB.CheckBox chkDauer
Caption = " Anzahl:"
Height = 255
Left = 120
TabIndex = 47
Top = 300
Width = 975
End
Begin VB.TextBox txtDauer
Alignment = 1 'Rechts
Enabled = 0 'False
Height = 315
Left = 1200
TabIndex = 46
Text = "1"
Top = 300
Width = 375
End
End
Begin VB.Frame Frame2
Caption = "Regelart"
Height = 1215
Left = 120
TabIndex = 32
Top = 1020
Width = 3555
Begin VB.OptionButton OptRegelart
Caption = "Servo"
BeginProperty Font
Name = "MS Sans Serif"
Size = 9.75
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 375
Index = 1
Left = 240
TabIndex = 34
Top = 780
Width = 2355
End
Begin VB.OptionButton OptRegelart
Caption = "FU "
BeginProperty Font
Name = "MS Sans Serif"
Size = 9.75
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 375
Index = 0
Left = 240
TabIndex = 33
Top = 360
Width = 2355
End
End
End
Begin VB.Frame Frame3
Caption = "Fortschritt"
Height = 4215
Left = 4200
TabIndex = 21
Top = 360
Width = 1695
Begin VB.ListBox lstPruefpunkte
Height = 2205
Left = 240
TabIndex = 22
Top = 540
Width = 1215
End
Begin VB.Label Label18
Caption = "Prüfpunkte:"
Height = 195
Left = 240
TabIndex = 41
Top = 240
Width = 1335
End
Begin VB.Label Label15
Caption = "Zeit:"
Height = 255
Left = 240
TabIndex = 40
Top = 2820
Width = 1275
End
Begin VB.Label Label11
Caption = "Dauerprüfung:"
Height = 195
Left = 240
TabIndex = 39
Top = 3420
Width = 1275
End
Begin VB.Label lblZeit
Alignment = 1 'Rechts
BackColor = &H00FFFFFF&
BorderStyle = 1 'Fest Einfach
BeginProperty Font
Name = "Arial"
Size = 12
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Left = 240
TabIndex = 38
Top = 3060
Width = 1215
End
Begin VB.Label lblDauer
Alignment = 1 'Rechts
BackColor = &H00FFFFFF&
BorderStyle = 1 'Fest Einfach
BeginProperty Font
Name = "Arial"
Size = 12
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Left = 240
TabIndex = 37
Top = 3720
Width = 1215
End
End
Begin VB.CommandButton cmdStop
Caption = "Stop"
Height = 795
Left = 1530
TabIndex = 10
Top = 7350
Width = 1095
End
Begin VB.CommandButton cmdStart
Caption = "Start"
Height = 795
Left = 330
TabIndex = 3
Top = 7350
Width = 1095
End
Begin VB.Frame Frame1
Caption = "Status"
Height = 4215
Left = 6060
TabIndex = 4
Top = 360
Width = 5775
Begin VB.Label lblBVol
Alignment = 1 'Rechts
Caption = "gem. Volumen B:"
BeginProperty Font
Name = "Arial"
Size = 12
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 375
Left = 180
TabIndex = 60
Top = 1260
Width = 2175
End
Begin VB.Label lblAVol
Alignment = 1 'Rechts
Caption = "gem. Volumen A:"
BeginProperty Font
Name = "Arial"
Size = 12
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 255
Left = 180
TabIndex = 59
Top = 840
Width = 2175
End
Begin VB.Label Label25
Caption = "l"
BeginProperty Font
Name = "Arial"
Size = 12
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Left = 3840
TabIndex = 58
Top = 840
Width = 255
End
Begin VB.Label Label23
Caption = "l"
BeginProperty Font
Name = "Arial"
Size = 12
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Left = 3840
TabIndex = 57
Top = 1260
Width = 255
End
Begin VB.Label lblVolA
Alignment = 1 'Rechts
BackColor = &H00FFFFFF&
BorderStyle = 1 'Fest Einfach
BeginProperty Font
Name = "Arial"
Size = 12
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Left = 2520
TabIndex = 56
Top = 840
Width = 1095
End
Begin VB.Label lblVolB
Alignment = 1 'Rechts
BackColor = &H00FFFFFF&
BorderStyle = 1 'Fest Einfach
BeginProperty Font
Name = "Arial"
Size = 12
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Left = 2520
TabIndex = 55
Top = 1260
Width = 1095
End
Begin VB.Label Label20
Caption = "l"
BeginProperty Font
Name = "Arial"
Size = 12
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Left = 3840
TabIndex = 44
Top = 2100
Width = 255
End
Begin VB.Label lblSollV
Alignment = 1 'Rechts
BackColor = &H00FFFFFF&
BorderStyle = 1 'Fest Einfach
BeginProperty Font
Name = "Arial"
Size = 12
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Left = 2520
TabIndex = 43
Top = 2100
Width = 1095
End
Begin VB.Label Label16
Alignment = 1 'Rechts
Caption = "SollVolumen:"
BeginProperty Font
Name = "Arial"
Size = 12
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 255
Left = 180
TabIndex = 42
Top = 2160
Width = 2175
End
Begin VB.Label Label13
Caption = "kg"
BeginProperty Font
Name = "Arial"
Size = 12
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Left = 3840
TabIndex = 24
Top = 3000
Width = 375
End
Begin VB.Label Label9
Caption = "m³/h"
BeginProperty Font
Name = "Arial"
Size = 12
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Left = 3840
TabIndex = 20
Top = 3600
Width = 975
End
Begin VB.Label lblGrenzwert
Alignment = 1 'Rechts
BackColor = &H00FFFFFF&
BorderStyle = 1 'Fest Einfach
BeginProperty Font
Name = "Arial"
Size = 12
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Left = 2520
TabIndex = 19
Top = 2940
Width = 1095
End
Begin VB.Label Label12
Alignment = 1 'Rechts
Caption = "Waagengrenzwert:"
BeginProperty Font
Name = "Arial"
Size = 12
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Left = 120
TabIndex = 18
Top = 2925
Width = 2295
End
Begin VB.Label Label7
Caption = "l"
BeginProperty Font
Name = "Arial"
Size = 12
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Left = 3840
TabIndex = 17
Top = 1680
Width = 255
End
Begin VB.Label lblQIst
Alignment = 1 'Rechts
BackColor = &H00FFFFFF&
BorderStyle = 1 'Fest Einfach
BeginProperty Font
Name = "Arial"
Size = 12
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Left = 2520
TabIndex = 16
Top = 3540
Width = 1095
End
Begin VB.Label Label6
Caption = "Durchfluß: "
BeginProperty Font
Name = "Arial"
Size = 12
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 255
Left = 1140
TabIndex = 15
Top = 3600
Width = 1335
End
Begin VB.Label Label5
Alignment = 1 'Rechts
Caption = "gewählter Behälter:"
BeginProperty Font
Name = "Arial"
Size = 12
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Left = 120
TabIndex = 14
Top = 1680
Width = 2235
End
Begin VB.Label lblOVol
Alignment = 1 'Rechts
BackColor = &H00FFFFFF&
BorderStyle = 1 'Fest Einfach
BeginProperty Font
Name = "Arial"
Size = 12
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Left = 2520
TabIndex = 13
Top = 1680
Width = 1095
End
Begin VB.Label lbltxtGewicht
Alignment = 1 'Rechts
Caption = "Gewicht:"
BeginProperty Font
Name = "Arial"
Size = 12
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 255
Left = 165
TabIndex = 12
Top = 2565
Width = 2175
End
Begin VB.Label lblGewicht
Alignment = 1 'Rechts
BackColor = &H00FFFFFF&
BorderStyle = 1 'Fest Einfach
BeginProperty Font
Name = "Arial"
Size = 12
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Left = 2520
TabIndex = 9
Top = 2520
Width = 1095
End
Begin VB.Label lbltxtGewichtUnit
Caption = "kg"
BeginProperty Font
Name = "Arial"
Size = 12
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Left = 3840
TabIndex = 8
Top = 2520
Width = 975
End
Begin VB.Label Label2
Caption = "Impulse"
BeginProperty Font
Name = "Arial"
Size = 12
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Left = 4080
TabIndex = 7
Top = 420
Width = 915
End
Begin VB.Label lblImpulseRZ2
Alignment = 1 'Rechts
BackColor = &H00FFFFFF&
BorderStyle = 1 'Fest Einfach
BeginProperty Font
Name = "Arial"
Size = 12
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Left = 4080
TabIndex = 6
Top = 1260
Width = 915
End
Begin VB.Label lblImpulseRZ1
Alignment = 1 'Rechts
BackColor = &H00FFFFFF&
BorderStyle = 1 'Fest Einfach
BeginProperty Font
Name = "Arial"
Size = 12
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Left = 4080
TabIndex = 5
Top = 840
Width = 915
End
End
End
Begin VB.Label lblTitle
Caption = "Referenzzähler Prüfung"
BeginProperty Font
Name = "MS Sans Serif"
Size = 12
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 435
Left = 0
TabIndex = 1
Top = 0
Width = 12015
End
End
Attribute VB_Name = "frmRefZaehlerPrf"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
' Todo: rechtsbündige Anzeigen, mit Format richtig gerundet
' Todo: Einheiten von SPS (m^3 oder Liter)
' Todo: Balken in Listbox, welcher Pruefpunkt
' Todo: Dauerprüfung
' DebugMsg vs PrintStatus
' Private Member
' --------------
Private m_nRet As Integer
Private m_PruefpunktFertig As Boolean
Private m_DauerpruefungAnzahl As Integer
Private m_DauerBeenden As Boolean
Private m_SPS As CSPS
Private m_Pumpe As CPumpe
Private m_ColPumpen As Collection
Private m_ColRefZaehler As Collection
Private m_FMBus As CFMBus
Private m_Waage As CWaage
Private m_Regelart As String
Private m_letzterBehaelterNr As Integer
Private m_Temperatur As Double
'Änderung 23.03.00 Andreas Pfeiffer ##0003##
Private m_ImpulseRZ_A As Double
Private m_ImpulseRZ_B As Double
Private m_RefezaehlerStrang As Integer
Private m_ReferenzzaehlerA As CRefzaehler
Private m_ReferenzzaehlerB As CRefzaehler
Private m_RefZaehlerPruefpunkt As CRefZaehlerPruefpunkt
Private m_strGrund As String
Dim m_ArrayBehaelter(4) As CBehaelter
Private Timestamp As Date ' Timestamp
Private ErrorCount As Integer
Private m_dblStartFuellmenge As Double
Private m_blnMitFuellstand As Boolean
Private m_objFrmRZFehlerAbweichung As frmRZFehlerAbweichung
Private m_blnStrangHatAbweichung As Boolean
Private m_bln_PP_Wird_wiederholt As Boolean
Private m_blnIstErsterPPdesStranges As Boolean
Public Enum STATUS_WDH_RZ_PRUEFPUNKT
NOCH_NICHT_GEPRUEFT = 0
INNERHALB_FEHLERGRENZEN_BEI_ERSTER_PRUEFUNG = 1
ABWEICHUNG_BEI_ERSTER_PRUEFUNG = 2
ABWEICHUNG_BEI_ERSTER_WIEDERHOLUNG = 3
ABWEICHUNG_BEI_ZWEITER_WIEDERHOLUNG = 4
INNERHALB_FEHLERGRENZEN_BEI_ERSTER_WIEDERHOLUNG = 5
INNERHALB_FEHLERGRENZEN_BEI_ZWEITER_WIEDERHOLUNG = 6
End Enum
Private Sub Timer1_Timer()
m_PruefpunktFertig = True
End Sub
' @return Code, mit dem endDialog aufgerufen wurde
'
Public Function getExitCode() As Integer
getExitCode = m_nRet
End Function
'------------------------------------------------------------------------------
' Private Funktionalität
'------------------------------------------------------------------------------
' Dialog beenden
'
' @param nRet Returncode des Dialogs
'
Private Sub endDialog(nRet As Integer)
m_nRet = nRet
Unload Me
End Sub
Private Sub chkDauer_Click()
If chkDauer.value = 1 Then
txtDauer.Enabled = True
lblDauer.Enabled = True
cmdStopDP.Enabled = True
Else
txtDauer.Enabled = False
txtDauer.text = "1"
lblDauer.Enabled = False
cmdStopDP.Enabled = False
End If
End Sub
Private Sub cmdAbweichungenAnzeigen_Click()
If Not m_objFrmRZFehlerAbweichung Is Nothing Then
m_objFrmRZFehlerAbweichung.Visible = True
Else
cmdAbweichungenAnzeigen.Enabled = False
End If
End Sub
Private Sub cmdStopDP_Click()
PrintStatus "Dauerprüfung wurde abgebrochen. " & vbCrLf & "Prüfung wird nach diesem Prüfgang beendet."
m_DauerBeenden = True
cmdStopDP.Enabled = False
cmdStopDP.caption = "wird beendet"
End Sub
Private Sub ShowRZFehlerAbweichung(intNW As Integer, wdh As Integer, dblDurchfluss As Double, Fehler As Double, letzterFehler As Double, blnStrangA As Boolean, Referenzzaehler As CRefzaehler)
On Error GoTo Errorhandler
cmdOK.Enabled = False
cmdAbweichungenAnzeigen.Enabled = True
If m_objFrmRZFehlerAbweichung Is Nothing Then
Set m_objFrmRZFehlerAbweichung = New frmRZFehlerAbweichung
m_objFrmRZFehlerAbweichung.Show vbNormal, Me
m_objFrmRZFehlerAbweichung.Top = Screen.Height * 0.8
m_objFrmRZFehlerAbweichung.Left = Screen.Width * 0.35
m_objFrmRZFehlerAbweichung.AddText "An der Prüfstation " & g_App.PruefstationNr
m_objFrmRZFehlerAbweichung.AddText "wurde bei der Referenzzählerprüfung vom " & Format$(Timestamp, "dd.mm.yyyy hh:mm:ss")
m_objFrmRZFehlerAbweichung.AddText "die Wiederholgenauigkeit von " & g_App.Settings.get_RZ_Wiederholgenauigkeit & "% überschritten!"
End If
If Not IsMissing(Referenzzaehler) Then
SaveWiederholungen Referenzzaehler.SerienNr, Timestamp, wdh, Fehler, dblDurchfluss
End If
m_objFrmRZFehlerAbweichung.Visible = True
m_objFrmRZFehlerAbweichung.AddText "Abweichung " & Round(letzterFehler - Fehler, 2) & "% bei Strang " & IIf(blnStrangA, "A", "B") & ", Nennweite " & intNW & " bei " & dblDurchfluss & " m³/h " & wdh & ". Wiederholung!"
m_objFrmRZFehlerAbweichung.AddFehler intNW, wdh, dblDurchfluss & "", Fehler, letzterFehler, blnStrangA
Exit Sub
Errorhandler:
LogIntoDB "Fehler " & Err.Number & " in ShowRZFehlerAbweichung: " & Err.Description, "unerwartet"
End Sub
Private Sub LockFormular()
m_objFrmRZFehlerAbweichung.Show vbNormal, Me
m_objFrmRZFehlerAbweichung.Visible = True
m_objFrmRZFehlerAbweichung.cmdClose.Enabled = False
End Sub
'Private Sub cmdTest1_Click()
' Set m_objFrmRZFehlerAbweichung = Nothing
' g_Abbruch = False
'
' cmdAbweichungenAnzeigen.Enabled = False
'
' cmdStart.Enabled = False
' cmdStop.Enabled = True
'
' If Not g_blnVersuch Then
' ' Grund eingeben falls RZ Prüfung ausserhalb der dafür vorgesehenden Zeit
' m_strGrund = GetGrundFuerRZ()
' End If
'
' PrintStatus "RZ Prüfung wurde gestartet von Prüfer " & g_App.Mitarbeiter.getAnfangsbuchstabeVornameundName & "."
' If m_strGrund <> "" Then
' PrintStatus "Grund:" & m_strGrund
' End If
'
'
' cmdOK.Enabled = False
'
' ' Referenzzählerprüfung starten
' g_PruefungLaeuft = True
'
'
' Dim Referenzzaehler As CRefzaehler
' Set Referenzzaehler = New CRefzaehler
' Referenzzaehler.loadForDurchfluss 200, 1
'
'''''''''''''''''''''''''''''''
' MsgBox "RZ Prüfung wird 10 sekunden lang simuliert...."
' Timestamp = Now()
'
' Select Case MsgBox("Gibt es Abweichungen > 0,2%?", vbYesNoCancel)
' Case vbYes
' ShowRZFehlerAbweichung 125, 0, 120, 1, 1.3, True, Referenzzaehler
' ShowRZFehlerAbweichung 125, 1, 120, 1, 1.3, True, Referenzzaehler
' ShowRZFehlerAbweichung 125, 2, 120, 1, 1.3, True, Referenzzaehler
' m_objFrmRZFehlerAbweichung.ErzwingeFreigabe
' Case vbNo
' ShowRZFehlerAbweichung 125, 0, 120, 1, 1, True, Referenzzaehler
' ShowRZFehlerAbweichung 125, 1, 120, 1, 1, True, Referenzzaehler
' ShowRZFehlerAbweichung 125, 2, 120, 1, 1, True, Referenzzaehler
' Case vbCancel
' End Select
'
' m_objFrmRZFehlerAbweichung.AddText "ES HANDELT SICH NUR UM EINEN TEST MIT FIKTIVEN RZ FEHLERN."
' Sleep 2000, True
'
''''''''''''''''''''''''''''''''''
' g_PruefungLaeuft = False
'
' cmdOK.Enabled = True
' If g_Abbruch Then
' PrintStatus "Die RZ Prüfung wurde abgebrochen."
' Else
' PrintStatus "Die RZ Prüfung wurde beendet."
' End If
'
'
' ' Referenzzählerprüfung ist beendet oder abgebrochen
' ' Ende der Zeit speichern
' RZPruefgangSpeichern Timestamp, Now()
' MsgBox "Die Referenzzählerprüfung wurde " & IIf(g_Abbruch, "abgebrochen!", "beendet!")
'
' ' Endergebnisse erst drucken, wenn sich Mitarbeiter identifiziert
' Dim dlgLogin As frmLogin
' Set dlgLogin = New frmLogin
' dlgLogin.Caption = "Bitte identifizieren sie sich zum Ende der RZ Prüfung."
' Do While doModal(dlgLogin, True) <> IDOK
' MsgBox "Sie müssen sich anmelden, um die Referenzzählerprüfung beenden zu können."
' Loop
' g_App.Mitarbeiter = dlgLogin.getMitarbeiter()
' Set dlgLogin = Nothing
'
' If g_Abbruch = True Then
' RZPruefgangSpeichern Timestamp, Now(), , g_App.Mitarbeiter.getNr, "Abbruch"
' Else
' RZPruefgangSpeichern Timestamp, Now(), , g_App.Mitarbeiter.getNr
' End If
'
' PrintStatus "RZ Prüfung wurde beendet von Prüfer " & g_App.Mitarbeiter.getAnfangsbuchstabeVornameundName & "."
' m_objFrmRZFehlerAbweichung.AddText "RZ Prüfung wurde beendet von Prüfer " & g_App.Mitarbeiter.getAnfangsbuchstabeVornameundName & "."
' PrintStatus "Prüfprotokoll wird gedruckt..."
' RZFehlerDruck g_App.PruefstationNr, m_Temperatur
' PrintStatus "Prüfprotokoll wurde gedruckt."
' MsgBox "Es wurde ein Referenzzähler-Prüfprotokoll gedruckt."
'
'
' If Not m_objFrmRZFehlerAbweichung Is Nothing Then
' ' Formular darf nicht mehr ausgeblendet werden
' Me.Enabled = False
' Call m_objFrmRZFehlerAbweichung.PruefungIstBeendet
' Set m_objFrmRZFehlerAbweichung = Nothing
' Me.Enabled = True
'
' cmdAbweichungenAnzeigen.Enabled = False
' End If
' cmdOK.Enabled = True
'
' Call ResetFormAndVars
' PrintStatus "Bereit!"
'
'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 Sub txtDauer_Change()
On Error Resume Next
m_DauerpruefungAnzahl = CInt(txtDauer.text)
If m_DauerpruefungAnzahl > 0 And m_DauerpruefungAnzahl < 1000 Then
DebugMsg "Referenzzähler Dauerprüfung Anzahl=" & m_DauerpruefungAnzahl
lblDauer.caption = m_DauerpruefungAnzahl
Else
chkDauer.value = 0
txtDauer.text = "1"
m_DauerpruefungAnzahl = 1
End If
End Sub
Private Sub cmdSPSInfo_Click()
Call g_App.getSPS().ActivateProTool
End Sub
Private Sub cmdStart_Click()
Set m_objFrmRZFehlerAbweichung = Nothing
cmdAbweichungenAnzeigen.Enabled = False
cmdStart.Enabled = False
cmdStop.Enabled = True
If Not g_blnVersuch Then
' Grund eingeben falls RZ Prüfung ausserhalb der dafür vorgesehenden Zeit
m_strGrund = GetGrundFuerRZ()
End If
PrintStatus "RZ Prüfung wurde gestartet von Prüfer " & g_App.Mitarbeiter.getAnfangsbuchstabeVornameundName & "."
If m_strGrund <> "" Then
PrintStatus "Grund:" & m_strGrund
End If
cmdOK.Enabled = False
' Referenzzählerprüfung starten
g_PruefungLaeuft = True
Call StartPruefung
g_PruefungLaeuft = False
cmdOK.Enabled = True
If g_Abbruch Then
PrintStatus "Die RZ Prüfung wurde abgebrochen."
Else
PrintStatus "Die RZ Prüfung wurde beendet."
End If
' Referenzzählerprüfung ist beendet oder abgebrochen
' Ende der Zeit speichern
RZPruefgangSpeichern Timestamp, Now(), , , , Now()
MsgBox "Die Referenzzählerprüfung wurde " & IIf(g_Abbruch, "abgebrochen!", "beendet!")
' Endergebnisse erst drucken, wenn sich Mitarbeiter identifiziert
Dim dlgLogin As frmLogin
Set dlgLogin = New frmLogin
dlgLogin.caption = "Bitte identifizieren sie sich zum Ende der RZ Prüfung."
Do While doModal(dlgLogin, True) <> IDOK
MsgBox "Sie müssen sich anmelden, um die Referenzzählerprüfung beenden zu können."
Loop
g_App.Mitarbeiter = dlgLogin.getMitarbeiter()
Set dlgLogin = Nothing
If g_Abbruch = True Then
RZPruefgangSpeichern Timestamp, Now(), , g_App.Mitarbeiter.getNr, "Abbruch"
Else
RZPruefgangSpeichern Timestamp, Now(), , g_App.Mitarbeiter.getNr
End If
PrintStatus "RZ Prüfung wurde beendet von Prüfer " & g_App.Mitarbeiter.getAnfangsbuchstabeVornameundName & "."
If MsgBox("Möchten Sie ein Referenzzähler-Prüfprotokoll drucken?", vbQuestion Or vbDefaultButton2 Or vbYesNo, "") = vbYes Then
PrintStatus "Prüfprotokoll wird gedruckt..."
RZFehlerDruck g_App.PruefstationNr, m_Temperatur
PrintStatus "Prüfprotokoll wurde gedruckt."
MsgBox "Es wurde ein Referenzzähler-Prüfprotokoll gedruckt."
End If
If Not m_objFrmRZFehlerAbweichung Is Nothing Then
' Formular darf nicht mehr ausgeblendet werden
Me.Enabled = False
Call m_objFrmRZFehlerAbweichung.PruefungIstBeendet
Me.Enabled = True
Set m_objFrmRZFehlerAbweichung = Nothing
cmdAbweichungenAnzeigen.Enabled = False
End If
cmdOK.Enabled = True
Call ResetFormAndVars
PrintStatus "Bereit!"
End Sub
Private Sub cmdStop_Click()
PrintStatus "Abbruch erfolgt..."
cmdStop.Enabled = False
DoEvents
Call Abbruch
g_Abbruch = True
End Sub
Private Sub ResetFormAndVars()
' Setze Formelemente und Variablen zurück
cmdStopDP.caption = "Beenden"
cmdStopDP.Enabled = False
cmdStart.Enabled = True
cmdStop.Enabled = False
cmdOK.Enabled = True
lblDauer.caption = ""
End Sub
Private Sub Abbruch()
If Not g_ohneSPS Then
PrintStatus "Betrieb der Pumpen Stoppen..."
' Betrieb Stoppen
m_SPS.setBetrieb 0
m_SPS.WassserAblassen 0
m_SPS.SetServoStellung 50
'm_SPS.SetQSoll 0 AP 5.5.00
' Alle Pumpen abwählen
m_SPS.AllePumpenAbwaehlen
End If
lblQIst.caption = ""
lblSollV.caption = ""
If Not m_Waage Is Nothing And m_blnMitFuellstand = False Then
PrintStatus "Waagen-Grenzwert zurücksetzen..."
Call WaageZuruecksetzen
Call m_Waage.releaseMScomm
End If
PrintStatus "Abbruch: Warten auf vorzeitige Beendigung des RZ Prüfpunktes..."
End Sub
Private Sub WaageZuruecksetzen()
On Error Resume Next
Dim Behaelter As CBehaelter
Dim i As Integer
Set m_Waage = g_App.getWaage
For i = 1 To 4
Set Behaelter = m_ArrayBehaelter(i)
Set m_Waage = g_App.getWaage
m_Waage.Initialize Behaelter.m_Nr
If Behaelter.m_OVolumen > 0 Then
If Behaelter.m_WaageAnwahl <> 0 Then
m_Waage.Anwahl Behaelter.m_WaageAnwahl
End If
Sleep 1000, True
m_Waage.SetNettoGrenzwert1 Behaelter.m_WaageGrenzwert, Behaelter.m_Genauigkeit
End If
Next
End Sub
'----------------------------------------------------------------------------
' Event-Handling
'------------------------------------------------------------------------------
Private Sub Form_Load()
Dim Referenzzaehler As CRefzaehler
Dim Einbauplatz As Integer
m_DauerpruefungAnzahl = 1
Call ResetFormAndVars
Call setupStdDlg(Me)
If Not g_ohneSPS Then
Set m_SPS = g_App.getSPS
Set m_ColPumpen = g_App.Settings.getPumpen
m_SPS.SetNurMesseinsaetze False
End If
Set m_FMBus = g_App.getFMBus
Set m_ArrayBehaelter(1) = New CBehaelter
Set m_ArrayBehaelter(2) = New CBehaelter
Set m_ArrayBehaelter(3) = New CBehaelter
Set m_ArrayBehaelter(4) = New CBehaelter
m_ArrayBehaelter(1).LoadFromIni (1)
m_ArrayBehaelter(2).LoadFromIni (2)
m_ArrayBehaelter(3).LoadFromIni (3)
m_ArrayBehaelter(4).LoadFromIni (4)
If g_App.Settings.GetBenutzeFuellstandStattWaage() Then
' Fuellstandsensor generell verwenden (wird ersetzt durch Behälterabhängige Eigenschaft "Waagenart")
PrintStatus "Füllstands-Sensor wird verwendet!"
m_blnMitFuellstand = True
lbltxtGewicht.caption = "Füllstand"
lbltxtGewichtUnit = "Liter"
Else
m_blnMitFuellstand = False
Set m_Waage = g_App.getWaage
End If
If Not g_ohneSPS Then
m_SPS.setBetrieb 8 ' Bits zurücksetzen: kein Start, kein Stop, kein Programmende
Sleep 300
m_SPS.setBetrieb 0
m_SPS.SetServoStellung 50
End If
' Ermittle Daten der Referenzzähler:
' Gruppe, Nummer, Seriennummer, Prüfpunkte, letzte Prüfung
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Listbox mit Prüfpunkten füllen
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Set m_ColRefZaehler = New Collection
lstPruefpunkte.Clear
For m_RefezaehlerStrang = 1 To 5
Einbauplatz = (m_RefezaehlerStrang - 1) * 2 + 1
Debug.Print "RZ Ebp: " & Einbauplatz
Set m_ReferenzzaehlerA = New CRefzaehler
If m_ReferenzzaehlerA.LoadForRefzaehlerpruefung(Einbauplatz) = 0 Then
' Referenzzähler konnte geladen werden
Debug.Print m_ReferenzzaehlerA.SerienNr
m_ColRefZaehler.Add m_ReferenzzaehlerA
If g_App.Settings.getAnzahlMIDGruppen > 1 Then
Set m_ReferenzzaehlerB = New CRefzaehler
If m_ReferenzzaehlerB.LoadForRefzaehlerpruefung(Einbauplatz + 1) = 0 Then
m_ColRefZaehler.Add m_ReferenzzaehlerB
End If
End If
' Aktiven Referenzzähler auswählen
Select Case g_App.Settings.getMIDGruppe
Case 1
Set Referenzzaehler = m_ReferenzzaehlerA
Case 2
Set Referenzzaehler = m_ReferenzzaehlerB
Case Else
Set Referenzzaehler = m_ReferenzzaehlerA
ErrorMsg ("MID-Gruppe in INI Datei ungültig: MidGr. A gewählt")
End Select
DoEvents
' Der Referenzzähler für Ermittlung der Prüfpunkte ist der jeweilige A-Referenzzähler
For Each m_RefZaehlerPruefpunkt In m_ReferenzzaehlerA.colPruefpunkte
lstPruefpunkte.AddItem m_ReferenzzaehlerA.Nennweite & ": " & Format(m_RefZaehlerPruefpunkt.Durchfluss, "0.000")
Next
Else
' Referenzzähler konnte nicht geladen werden
End If
Next
' If g_App.Mitarbeiter.getNr = 6316 Or g_strHostname = "la--020190llb0j" Then
' cmdTest1.Enabled = True
' cmdTest1.Visible = True
' End If
End Sub
Private Sub cmdOk_Click()
Call endDialog(IDOK)
End Sub
'Private Sub cmdCancel_Click()
' Call endDialog(IDCANCEL)
'End Sub
Private Sub StartPruefung()
Dim dummy As Variant
Dim DurchflussSoll As Double
Dim Einbauplatz As Integer
Dim Impulse As Integer
Dim Temperatur As Double
Dim VolumenA As Double
Dim VolumenB As Double
Dim VolumenIst As Double
Dim FehlerA As Double
Dim FehlerB As Double
Dim letzterFehlerA As Variant
Dim letzterFehlerB As Variant
Dim letzterFehler As Variant
Dim Endzeit As Long
Dim ImpulseQM As Double
Dim tempDatum As Date
Dim BehaelterNr As Integer
Dim i As Integer
Dim SollVolumen As Double
Dim Behaelter As CBehaelter
Dim Waagengrenzwert As Double
Dim Mindestmenge As Double
Dim AnzahlPeriodenRZ As Long
Dim Referenzzaehler As CRefzaehler
Dim PruefpunktNr As Integer
Dim PP_ZeitStart As Long ' Startzeit der Prüfpunkt-Zeit
Dim PP_Zeit As Long ' Prüfpunkt-Zeit
Dim PP_ZeitSoll As Long
Dim bDataSaved As Boolean 'Prüfpunkt-Daten nach 1/2 Prüfzeit in DB gespeichert
Dim StatusPruefpunktWdh As STATUS_WDH_RZ_PRUEFPUNKT
Dim PP_Durchfluss As Double
Dim m_DauerpruefungZaehler As Integer
Dim strDebugText As String
'Änderung Andreas Pfeiffer 23.03.00 ##0005## Testvariable eingefügt
Dim Test As String
Dim dblFuellstand As Double
On Error GoTo ErrorhandlerLogAndResumeNext
m_letzterBehaelterNr = 0
If Not g_ohneSPS Then
m_SPS.setBetrieb 8 ' Bits zurücksetzen: kein Start, kein Stop, kein Programmende
Sleep 300
m_SPS.setBetrieb 0 ' Bits zurücksetzen: kein Start, kein Stop, kein Programmende
m_SPS.SetRegulierungsSollwert 50
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
If Not m_SPS.IstRefZPrf Then
dummy = MsgBox("Bitte SPS auf Referenzzähler-Prüfung stellen", vbOKCancel)
If dummy = vbCancel Then
endDialog (IDCANCEL)
Exit Sub
End If
GoTo TestAutomatik
End If
End If ' g_ohneSPS
' todo : Grund für eine Referenzzählerprüfung angeben
cmdStart.Enabled = False
g_Abbruch = False
m_DauerBeenden = False
If m_DauerpruefungAnzahl > 1 Then
cmdStopDP.Enabled = True
Else
cmdStopDP.Enabled = False
End If
'-----------------------------------------------------------------
' Schleifenbeginn Dauerprüfung
'-----------------------------------------------------------------
For m_DauerpruefungZaehler = 1 To m_DauerpruefungAnzahl
Timestamp = Now()
If m_DauerpruefungZaehler = 1 Then
RZPruefgangSpeichern Timestamp, , g_App.Mitarbeiter.getNr, , m_strGrund
Else
RZPruefgangSpeichern Timestamp, , g_App.Mitarbeiter.getNr, , "Dauerprüfung " & m_DauerpruefungZaehler
End If
lblDauer.caption = m_DauerpruefungZaehler & " / " & m_DauerpruefungAnzahl
PrintStatus "Dauerprf: " & m_DauerpruefungZaehler & " / " & m_DauerpruefungAnzahl
lblGewicht.caption = ""
lblImpulseRZ1.caption = ""
lblImpulseRZ2.caption = ""
PrintStatus vbCrLf & "Starte neue Referenzzaehler Prüfung" & vbCrLf & "-----------------------------------"
WriteToLog Format(Now, "dd.mm.yyyy hh:mm:ss") & " Pruefung " & m_DauerpruefungZaehler & "/" & m_DauerpruefungAnzahl
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Schleife über alle Stränge
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
For m_RefezaehlerStrang = 1 To 5
m_blnStrangHatAbweichung = False
m_blnIstErsterPPdesStranges = True
' Einsprung für die Wiederholung des letzten Strangs
'Achtung funktioniert nicht bei den anderen Anlagen!!
'Andreas Pfeiffer 19.07.2004 geändert
Einbauplatz = (m_RefezaehlerStrang - 1) * 2 + 1
' Eingebaute Referenzzähler des Stranges ermitteln
Set m_ReferenzzaehlerA = New CRefzaehler
If m_ReferenzzaehlerA.LoadForRefzaehlerpruefung(Einbauplatz) = 0 Then
PrintStatus "RefZ-Strang: " & m_RefezaehlerStrang
Else
GoTo SkipStrang
End If
If g_App.Settings.getAnzahlMIDGruppen > 1 Then
Set m_ReferenzzaehlerB = New CRefzaehler
If m_ReferenzzaehlerB.LoadForRefzaehlerpruefung(Einbauplatz + 1) = 0 Then
PrintStatus "Daten für Referenzzaehler in B Gruppe vorhanden"
End If
End If
Set Referenzzaehler = m_ReferenzzaehlerA
' Aktiven Referenzzähler auswählen
Select Case g_App.Settings.getMIDGruppe
Case 1
lblAVol.FontBold = True
lblBVol.FontBold = False
Case 2
lblAVol.FontBold = False
lblBVol.FontBold = True
Case Else
lblAVol.FontBold = True
lblBVol.FontBold = False
End Select
If m_ReferenzzaehlerA.colPruefpunkte.Count > 0 Then
PrintStatus "RefZ A SNr: " & m_ReferenzzaehlerA.SerienNr
PrintStatus "RefZ A Impulswertigkeit: " & m_ReferenzzaehlerA.ImpulseQM
PrintStatus "- - - - - -"
If g_App.Settings.getAnzahlMIDGruppen > 1 Then
PrintStatus "RefZ B SNr: " & m_ReferenzzaehlerB.SerienNr
PrintStatus "RefZ B Impulswertigkeit: " & m_ReferenzzaehlerB.ImpulseQM
PrintStatus "- - - - - -"
lblMIDB.caption = m_ReferenzzaehlerB.SerienNr
End If
' Anzeige der Referenzzählerdaten
lblNennweite.caption = Referenzzaehler.Nennweite & " mm"
lblMIDA.caption = m_ReferenzzaehlerA.SerienNr
Else
PrintStatus "keine Prüfpunkte !"
lblNennweite.caption = ""
lblMIDA.caption = ""
lblMIDB.caption = ""
End If
WriteToLog "Referenzzähler im Strang " & m_ReferenzzaehlerA.Nennweite & " mm"
'-----------------------------------------------------------------
' Begin Schleife für alle Pruefpunkte
' des Pruefzählers der aktiven Gruppe
'-----------------------------------------------------------------
PruefpunktNr = 0
If m_ReferenzzaehlerA.colPruefpunkte.Count > 10 Then
ErrorMsg "Es sind mehr als 10 Prüfpunkte für Nennweite " & Referenzzaehler.Nennweite & " definiert! Abbruch."
Call Abbruch
Exit Sub
End If
' If g_App.PruefstationNr = 2005 And Int(Now * 1) < 39302 Then
' ' RH 6.8.2007
' m_SPS.AllePumpenAbwaehlen
' Set m_Pumpe = Pumpenwahl(DurchflussSoll, m_ColPumpen)
' PrintStatus "gewählte Pumpe (SPS VarName) " & m_Pumpe.GetSPSVarname
' m_Pumpe.Anwahl
'
' m_SPS.SetMID Referenzzaehler.EinbauplatzNr
'
' 'Auswahl des aktiven Stellgliedes während der Regelung
' ' INI Datei:
' Select Case m_Pumpe.GetRegelart
' ' Servo Vorgeschrieben
' Case "Servo"
' m_SPS.SetRegelart ("Servo")
' m_SPS.SetServoStellung m_RefZaehlerPruefpunkt.Servoposition
' Case "FU"
' ' FU vorgeschrieben
' m_SPS.SetRegelart ("FU")
' m_SPS.SetServoStellung m_RefZaehlerPruefpunkt.FUStellwert
' Case Else
' ErrorMsg "Es ist keine Regelart für die Pumpe " & m_Pumpe.getNr & " in der ini-Datei definiert."
' Call Abbruch
' Exit Sub
' End Select
'
' m_SPS.setBetrieb 2
' Sleep 10000
' m_SPS.setBetrieb 0
'
' End If
' If chkSimulation.Value = vbChecked Then
' MsgBox g_App.Settings.getAnzahlMIDGruppen & " Gruppen mit Gruppe=" & g_App.Settings.getMIDGruppe
' End If
For Each m_RefZaehlerPruefpunkt In m_ReferenzzaehlerA.colPruefpunkte
Temperatur = 0
PP_Durchfluss = 0
bDataSaved = False
PruefpunktNr = PruefpunktNr + 1
' Status der Wiederholung zurücksetzen
StatusPruefpunktWdh = STATUS_WDH_RZ_PRUEFPUNKT.NOCH_NICHT_GEPRUEFT
m_bln_PP_Wird_wiederholt = False
Pruefpunktwiederholung:
PrintStatus "====================="
' Durchflußvorgabe
'-----------------
DurchflussSoll = Round(m_RefZaehlerPruefpunkt.Durchfluss, 4)
PrintStatus "Durchfluss " & DurchflussSoll & " m³/h"
WriteToLog "neuer Prüfpunkt " & DurchflussSoll & " m³/h"
' If chkSimulation.Value = vbChecked Then
' MsgBox "neuer Prüfpunkt " & DurchflussSoll & " m³/h"
' End If
'
If DurchflussSoll > 0 Then
If m_bln_PP_Wird_wiederholt = True Then
PrintStatus "Prüfpunkt " & DurchflussSoll & " wird wiederholt!"
End If
' Durchfluß-Abhängige Daten der Referenzzähler anzeigen
If Not g_ohneSPS Then
Temperatur = m_SPS.GetEinlaufTemperatur()
Else
Temperatur = 25
End If
m_Temperatur = Temperatur
letzterFehler = m_ReferenzzaehlerA.letzterFehlerString(DurchflussSoll, Temperatur)
If letzterFehler <> "" Then
letzterFehlerA = letzterFehler
lblLetzterFehlerA.caption = Format(letzterFehler, "0.00") & "%"
tempDatum = m_ReferenzzaehlerA.DatumDesFehlers
DebugMsg "RefZ A: letzter Fehler für Q=" & DurchflussSoll & ",T=" & Temperatur & "°C, ermittelt am " & Format(tempDatum, "dd.mm.yyyy hh:mm") & ": F=" & letzterFehler & "%"
lblDatumFehlerA.caption = Format(tempDatum, "dd.mm.yyyy hh:mm")
Else
' Todo: Merken, daß der Zähler noch nie in diesem PP geprüft worden ist
' keine Überprüfung auf Abweichung!
lblLetzterFehlerA.caption = " - - -"
letzterFehlerA = Empty
End If
If g_App.Settings.getAnzahlMIDGruppen > 1 Then
letzterFehler = m_ReferenzzaehlerB.letzterFehlerString(DurchflussSoll, Temperatur)
If letzterFehler <> "" Then
letzterFehlerB = letzterFehler
tempDatum = m_ReferenzzaehlerB.DatumDesFehlers
lblDatumFehlerB.caption = Format(tempDatum, "dd.mm.yyyy hh:mm")
lblLetzterFehlerB.caption = Format(letzterFehler, "0.00") & "%"
DebugMsg "RefZ B: letzter Fehler für Q=" & DurchflussSoll & ",T=" & Temperatur & "°C, ermittelt am " & Format(tempDatum, "dd.mm.yyyy hh:mm") & ": F=" & letzterFehler & "%"
Else
lblLetzterFehlerB.caption = " - - -"
letzterFehlerB = Empty
End If
End If
' Balkenanzeige in der Liste der Durchflüsse aktualisieren
For i = 0 To lstPruefpunkte.ListCount - 1
If lstPruefpunkte.List(i) = Referenzzaehler.Nennweite & ": " & Format(DurchflussSoll, "0.00") Then
lstPruefpunkte.Selected(i) = True
Else
lstPruefpunkte.Selected(i) = False
End If
Next
If Not g_ohneSPS Then
' Für die Referenzzähler-Prüfung soll der unbereinigte Durchfluss Wert ermittelt werden
m_SPS.SetQDiff 0
End If ' g_ohneSPS
' Soll-Volumen = (Soll-Pruefzeit in Stunden) * (Soll-Durchfluß in m^3/h)
SollVolumen = (m_RefZaehlerPruefpunkt.Pruefzeit / 3600) * m_RefZaehlerPruefpunkt.Durchfluss
DebugMsg "SollVolumen für diesen Prüfpunkt: " & SollVolumen & " m³"
lblSollV.caption = Format(SollVolumen * 1000, "0")
' Soll-Prüfzeit in Sekunden
PP_ZeitSoll = m_RefZaehlerPruefpunkt.Pruefzeit
PrintStatus "Prüfzeit für diesen Prüfpunkt: " & PP_ZeitSoll
' Behälter festlegen
Set Behaelter = Nothing
For i = 1 To 4
If m_ArrayBehaelter(i).IstOkFuerVolumen(SollVolumen * 1000) Then
Set Behaelter = m_ArrayBehaelter(i)
BehaelterNr = i
Debug.Print "Behälter/Wage Nr " & BehaelterNr & " (siehe ini) gewählt"
PrintStatus "Behälter " & Behaelter.m_OVolumen & " l ist gewählt"
Exit For
End If
Next
' Fehlermeldung wenn Soll-Volumen > als Volumen des größten Behälters
' dann müssen Daten in Tabelle Referenzzähler-Pruefpunkt geändert werden
If Behaelter Is Nothing Then
MsgBox ("Es ist kein Behälter für das Volumen=" & SollVolumen & " vorhanden. " & vbCrLf & _
"Bitte überprüfen Sie die Ini Datei und die Tabelle ReferenzzaehlerPruefpunkt.")
cmdStart.Enabled = True
Exit Sub
End If
ErrorCount = 0
WaagenAnwahlWdh:
' Anwahl Waage zugehörig zum Behälter
If Not m_Waage Is Nothing Then
Set m_Waage = g_App.getWaage
End If
If Not m_Waage Is Nothing Then
m_Waage.Initialize Behaelter.m_Nr
'''''''''''''''''
If g_App.PruefstationNr = 2020 Then
' neu RH 12.4.2007 Immer Reset an der 2020
PrintStatus "Waagen-Reset, 5 sec warten..."
m_Waage.Reset
Sleep 5000
PrintStatus "OK."
End If
'''''''''''''''''
' neu RH 31.10.2011
If Not g_App.Settings.GetBenutzeFuellstandStattWaage() Then
' Füllstand-Sensor soll nicht generell verwendet werden
' Füllstand-Sensor abhängig von den Behälter-Eigenschaften verwenden
Select Case m_Waage.m_Waagenart
Case WAAGENART_FUELLSTAND
m_blnMitFuellstand = True
lbltxtGewichtUnit = "Liter"
lbltxtGewicht.caption = "Füllstand"
Case Else
lbltxtGewicht.caption = "Gewicht"
m_blnMitFuellstand = False
lbltxtGewichtUnit = "kg"
End Select
End If
If Behaelter.m_WaageAnwahl <> 0 Then
If Not m_Waage.Anwahl(Behaelter.m_WaageAnwahl) Then
PrintStatus "Waagen-Anwahl fehlgeschlagen: Reset & Wiederholung"
m_Waage.Reset
Sleep 2000
ErrorCount = ErrorCount + 1
If ErrorCount > 10 Then
MsgBox ("Waagen Fehler! Es erfolgt ein Abbruch")
Call Abbruch
Exit Sub
End If
GoTo WaagenAnwahlWdh
End If
End If
End If ' m_Waage Is Nothing
If Not g_ohneSPS Then
PrintStatus "SPS: Behälter mit Volumen " & Behaelter.m_OVolumen & " l gewählt"
' Behälter anwählen
m_SPS.setBehaelter Behaelter.m_BehaelterAnwahl
lblOVol.caption = Format(Behaelter.m_OVolumen, "0")
End If
' Anzeige Füllmenge
lblGewicht.caption = ""
PrintStatus "Behälter leeren..."
lblVolA.caption = ""
lblVolB.caption = ""
lblImpulseRZ1.caption = ""
lblImpulseRZ2.caption = ""
lblFehlerA.caption = ""
lblFehlerB.caption = ""
lblZeit.caption = ""
'RH 3.5.11 2
If m_blnMitFuellstand Then
'''''''''''''''''''''''''''''''' RH 07.08.2007 '''''''''''''''''''''''''''''''''''''''
''''''''''' jeweilige Steigrohre des Stranges entlüften
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
If m_blnIstErsterPPdesStranges = True And g_ohneSPS = False Then
PrintStatus "alle Behälter leeren 90 sec" '(" & g_App.Settings.GetFuellstandEntleerzeit(0) & ")..."
m_SPS.WassserAblassen 1 + 2 + 4 + 8
For i = 1 To 90 'g_App.Settings.GetFuellstandEntleerzeit(0)
Debug.Print i & "s verstrichen"
lblZeit.caption = 90 - i
lblGewicht.caption = Format(m_SPS.GetFuellstand(Behaelter.m_Nr), "0.0")
Sleep 1000, True
Next
m_SPS.WassserAblassen 0
'''''''''''''''''''''''''''''''''''''''''''
' Steigrohr füllen
m_SPS.SetQSoll DurchflussSoll
PrintStatus "Nächster Durchfluss: " & Format(DurchflussSoll, "0.000")
m_SPS.AllePumpenAbwaehlen
Set m_Pumpe = Pumpenwahl(DurchflussSoll, m_ColPumpen)
PrintStatus "gewählte Pumpe (SPS VarName) " & m_Pumpe.GetSPSVarname
m_Pumpe.Anwahl
' Vorwahl Referenzzaehler Gruppe
' Vorwahl Referenzzaehler Nummer
'-------------------------------
' Referenzzaehler zur Anzeige von QIst enthält:
' - MIDGruppe des Referenzzählers aus Ini Datei
' - SPS setzen mit MID-Strang
m_SPS.SetMID Referenzzaehler.EinbauplatzNr
' RH 3.5.11 1
'Auswahl des aktiven Stellgliedes während der Regelung
' INI Datei:
Select Case m_Pumpe.GetRegelart
' Servo Vorgeschrieben
Case "Servo"
m_SPS.SetRegelart ("Servo")
m_SPS.SetServoStellung m_RefZaehlerPruefpunkt.Servoposition
PrintStatus "Servo Stellewert einstellen: " & m_RefZaehlerPruefpunkt.Servoposition
Case "FU"
' FU vorgeschrieben
m_SPS.SetRegelart ("FU")
m_SPS.SetServoStellung m_RefZaehlerPruefpunkt.FUStellwert
PrintStatus "FU Stellewert einstellen: " & m_RefZaehlerPruefpunkt.FUStellwert
Case Else
ErrorMsg "Es ist keine Regelart für die Pumpe " & m_Pumpe.getNr & " in der ini-Datei definiert."
Call Abbruch
Exit Sub
End Select
PrintStatus "Steigrohr entlüften 30 sec..."
m_SPS.setBetrieb 2
'''''''''''''''''''''''''''''''''''''''''''
For i = 1 To 30 'g_App.Settings.GetFuellstandEntleerzeit(0)
Debug.Print i & "s verstrichen"
lblZeit.caption = 30 - i
lblGewicht.caption = Format(m_SPS.GetFuellstand(Behaelter.m_Nr), "0.0")
Sleep 1000, True
Next
m_SPS.setBetrieb 0
PrintStatus " Steigrohr entlüftet."
End If ' erster PP des Strangs
m_SPS.WassserAblassen 1 + 2 + 4 + 8
PrintStatus "Alle Behälter leeren (" & g_App.Settings.GetFuellstandEntleerzeit(0) & ")..."
For i = 1 To g_App.Settings.GetFuellstandEntleerzeit(0)
Debug.Print i & "s verstrichen"
lblZeit.caption = g_App.Settings.GetFuellstandEntleerzeit(0) - i
lblGewicht.caption = Format(m_SPS.GetFuellstand(Behaelter.m_Nr), "0.0")
Sleep 1000, True
Next
m_SPS.WassserAblassen Behaelter.m_AblassAnwahl
' todo feste zeit warten
PrintStatus "Warte " & g_App.Settings.GetFuellstandEntleerzeit(Behaelter.m_Nr) & " s bis Behälter (" & Behaelter.m_OVolumen & " l) leer"
For i = 1 To g_App.Settings.GetFuellstandEntleerzeit(Behaelter.m_Nr)
Debug.Print i & "s verstrichen"
lblGewicht.caption = Format(m_SPS.GetFuellstand(Behaelter.m_Nr), "0.0")
lblZeit.caption = g_App.Settings.GetFuellstandEntleerzeit(Behaelter.m_Nr) - i
Sleep 1000, True
Next
m_SPS.WassserAblassen 0
End If ' Füllstand
If Not m_blnMitFuellstand Then
' Waage verwenden
m_SPS.WassserAblassen 0
' Behälter Grenzwert an Waage übergeben
m_Waage.SoftTaraReset
m_Waage.TaraReset
' nun Netto = Brutto da kein Tara
PrintStatus "Waagengrenzwert: " & Behaelter.m_WaageGrenzwert
m_Waage.SetNettoGrenzwert1 Behaelter.m_WaageGrenzwert, Behaelter.m_Genauigkeit
m_SPS.WassserAblassen 15
PrintStatus "Alle Behälter leeren bis Prüfmenge nicht mehr erreicht...(15s)"
Sleep 15000, True
Mindestmenge = Behaelter.m_Mindestmenge
If Mindestmenge > 0 Then
PrintStatus "Ist Mindestmenge zum Abpumpen erreicht ?"
' Vor jedem Prüfpunkt beide Behälter leeren bis Prüfmenge nicht mehr erreicht
If m_blnMitFuellstand Then
' Mindestmenge bei Prüfstation 2004,2005,2006, 2007 nicht nötig
Else
' Pumpe zum Abpumpen erfordert Mindestmenge
m_Waage.SoftTaraReset
m_Waage.TaraReset
If m_Waage.GetGewicht < Mindestmenge Then
' Diese Mindestmenge ist unterschritten
'Abpumpen stoppen
PrintStatus "Behälter füllen bis Mindestmenge " & Mindestmenge & "l zum Abpumpen erreicht"
m_SPS.WassserAblassen 0
PrintStatus "setze Waagengrenzwert: " & Mindestmenge & " kg"
' Grenzwert an Waage übergeben
m_Waage.SetNettoGrenzwert1 Mindestmenge, Behaelter.m_Genauigkeit
' Alle Pumpen abwählen
m_SPS.AllePumpenAbwaehlen
m_SPS.StartPumpe 2
' zum Füllen NW 32
m_SPS.SetMID 3
m_SPS.SetRegelart ("FU")
m_SPS.SetServoStellung 55
m_SPS.SetQSoll 25
m_SPS.StartPumpe 2
' Start Betrieb
m_SPS.setBetrieb 2
PrintStatus "Fülle bis Grenzwert erreicht"
Sleep 100
Do While Not m_SPS.GrenzwertWaageErreicht
' Anzeige Füllmenge
lblGewicht.caption = Format(m_Waage.GetGewicht, "0")
Sleep 100, True
Loop
m_SPS.setBetrieb 0
Else
PrintStatus "Mindestmenge zum Abpumpen ist erreicht"
End If
End If
End If
' PrintStatus "gewählten Behälter " & BehaelterNr & " leeren..."
' Vor jedem Prüfpunkt gewählten Behälter leeren
' ---------------------------------------------
' m_SPS.WassserAblassen Behaelter.m_AblassAnwahl
' Sleep 5000
Call AlleBehaelterLeeren(Me, m_SPS, m_Waage, Behaelter)
' Waage ist nun in Ruhe, Ablassen kann beendet werden
PrintStatus "Behälter sind leer.!"
' Wasser ablassen beenden
m_SPS.WassserAblassen 0
If g_Abbruch = True Then
Call Abbruch
Exit Sub
End If
' Hier ist jetzt Platz im Behälter um für das automatische
' Füllen genug Wasser auzunehmen
If BehaelterNr <> m_letzterBehaelterNr Then
m_letzterBehaelterNr = BehaelterNr
' Behälter wurde gewechselt, also zuerst einmal füllen
' RH 3.5.11 3
If m_Waage.m_Waagenart <> WAAGENART_FUELLSTAND Then
Call BehaelterFuellen(Behaelter)
Else
End If
If g_Abbruch = True Then
Call Abbruch
Exit Sub
End If
' Danach wieder Wasser ablassen
Call AlleBehaelterLeeren(Me, m_SPS, m_Waage, Behaelter)
End If
' auf Ruhe testen
If Not m_Waage Is Nothing And m_blnMitFuellstand = False Then
Behaelter.WarteAufRuhe
End If
If g_Abbruch = True Then
Call Abbruch
Exit Sub
End If
End If 'Waage und kein Fuellstand
' PrintStatus "10s warten bis Ablass zu"
' Sleep 10000, True
If Not g_ohneSPS Then
m_SPS.SetQSoll DurchflussSoll
PrintStatus "Nächster Durchfluss: " & Format(DurchflussSoll, "0.000")
' Pumpenauswahl
'--------------
' Hochbehälter Auswahl wenn Q < 1 m ^3 -> Pumpe.Nr = 4
' siehe modPumpe und CPumpe
'msgbox
m_SPS.AllePumpenAbwaehlen
Set m_Pumpe = Pumpenwahl(DurchflussSoll, m_ColPumpen)
PrintStatus "gewählte Pumpe (SPS VarName) " & m_Pumpe.GetSPSVarname
m_Pumpe.Anwahl
' Vorwahl Referenzzaehler Gruppe
' Vorwahl Referenzzaehler Nummer
'-------------------------------
' Referenzzaehler zur Anzeige von QIst enthält:
' - MIDGruppe des Referenzzählers aus Ini Datei
' - SPS setzen mit MID-Strang
m_SPS.SetMID Referenzzaehler.EinbauplatzNr
'RH 3.5.11 5
'Auswahl des aktiven Stellgliedes während der Regelung
' INI Datei:
Select Case m_Pumpe.GetRegelart
' Servo Vorgeschrieben
Case "Servo"
m_SPS.SetRegelart ("Servo")
m_SPS.SetServoStellung m_RefZaehlerPruefpunkt.Servoposition
PrintStatus "Servo Stellewert: einstellen: " & m_RefZaehlerPruefpunkt.Servoposition & " %"
Case "FU"
' FU vorgeschrieben
m_SPS.SetRegelart ("FU")
m_SPS.SetServoStellung m_RefZaehlerPruefpunkt.FUStellwert
PrintStatus "FU Stellewert: einstellen: " & m_RefZaehlerPruefpunkt.FUStellwert & " %"
Case Else
ErrorMsg "Es ist keine Regelart für die Pumpe " & m_Pumpe.getNr & " in der ini-Datei definiert."
Call Abbruch
Exit Sub
End Select
End If
If Not g_ohneSPS Then
m_SPS.m_FuellstandLeer = 0
End If
If Not m_blnMitFuellstand Then
'If Not m_Waage Is Nothing And m_Waage.m_Waagenart <> WAAGENART_FUELLSTAND Then
' Waage auf Null stellen
WaageAufNull1:
' RH 6.3.2006
If g_App.Settings.GetWaageTaraStattNullstellen(Behaelter.m_Nr) = False Then
PrintStatus "Waage auf 0.00 stellen: Nullstellen..."
If m_Waage.Nullstellen = False Then
ErrorMsg "Achtung: Nullstellung fehlgeschlagen!" & vbCrLf & " Bitte Fehler beheben und 'Ignorien' klicken oder abbrechen."
If MsgBox("Waage Nullstellen wiederholen?", vbYesNo) = vbYes Then
GoTo WaageAufNull1
End If
Else
PrintStatus "Waage wurde nullgestellt!"
End If
Sleep 2000
Else
m_Waage.SoftTaraReset
If m_Waage.Tara() = True Then
PrintStatus "Waage wurde tariert!"
Else
PrintStatus "Waage konnte nicht tariert werden! Softtara!"
m_Waage.SoftTara
If Round(m_Waage.GetGewicht(), 2) = 0 Then
PrintStatus "Soft-Tara bei " & m_Waage.SoftTaraGewicht & " kg"
Else
ErrorMsg "Soft-Tara konnte nicht ausgeführt werden. Antwort von Waage:" & m_Waage.m_strFehler
End If
End If
End If
' Anzeige Füllmenge
lblGewicht.caption = Format(m_Waage.GetGewicht, "0")
PrintStatus "Füllmenge: " & Format(m_Waage.GetGewicht, "0.00") & " kg"
WriteToLog "Füllmenge:" & vbTab & Format(m_Waage.GetGewicht, "0.000")
' Waagengrenzwert in Litern entspricht kg
Waagengrenzwert = SollVolumen * 1000 - DurchflussSoll * Behaelter.m_nUeberlaufFaktor
'neu RH 19.1.2006 noch nicht freigegeb, muß auch an der P2000 eingestellt werden
' If m_Behaelter.m_WaageGrenzwert > 0 Then
' If Waagengrenzwert > m_Behaelter.m_WaageGrenzwert Then
' PrintStatus "Der errechnete Grenzwert übersteigt den maximal zulässigen Grenzwert der Waage (ini: Waage" & m_Behaelter.m_Nr & ".Grenzwert) = " & m_Behaelter.m_WaageGrenzwert
' PrintStatus "Der Grenzwert für die Waage wurde auf den maximal zulässigen Grenzwert gesetzt."
' Waagengrenzwert = m_Behaelter.m_WaageGrenzwert
' lblGrenzwert.Caption = Format(Waagengrenzwert, "0.00")
' End If
' End If
PrintStatus "setze Waagengrenzwert: " & Waagengrenzwert & " kg"
lblGrenzwert.caption = Format(Waagengrenzwert, "0")
' Grenzwert an Waage übergeben
m_Waage.SetNettoGrenzwert1 Waagengrenzwert, Behaelter.m_Genauigkeit
PrintStatus "Waagen Grenzwert" & vbTab & Format(m_Waage.GetGewicht, "0.000")
End If
If Not g_ohneSPS Then
' Warte auf Startfreigabe
PrintStatus "Warte auf Startfreigabe"
Do While Not m_SPS.IstStreckePruefbereit
Sleep 1000, True
If g_Abbruch = True Then
Call Abbruch
Exit Sub
End If
Loop
Else
dummy = MsgBox("Ist die Prüfstation zur Prüfung bereit?", vbOKCancel, "Frage an den Bediener")
If dummy = vbCancel Then
Call Abbruch
Exit Sub
End If
End If 'Not g_ohneSPS And Not m_Waage Is Nothing
''''''''' zum testen
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''
'''' FehlerA = CDbl(InputBox("Fehler A:", "Fehler bei " & DurchflussSoll, Round(letzterFehlerA, 3)))
'''' If g_App.Settings.getAnzahlMIDGruppen > 1 Then
'''' FehlerB = CDbl(InputBox("Fehler B:", "Fehler bei " & DurchflussSoll, Round(letzterFehlerB, 3)))
'''' End If
'''' GoTo TestStatusLogik
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' ----------------------------------------------------------
' Datenverkehr mit den FM85
' ----------------------------------------------------------
' Referenzzähler Pulszählung einschalten
' FM85 für diesen Prüfpunkt initialisieren:
'---------------------------------------
' Reset
Dim lngResetFM85counter As Long
lngResetFM85counter = 0
ResetFM85:
PrintStatus "Initialisierung der FM85...(" & lngResetFM85counter & ". Versuch)"
m_FMBus.send "**0@"
m_FMBus.receive (500)
m_FMBus.send "R"
m_FMBus.receive (500)
Sleep 1000, True
' ' Reset
' m_FMBus.send "**0@"
' m_FMBus.receive (500)
' m_FMBus.send "R"
' m_FMBus.receive (500)
'
' ' FM85 Nr 7 ansprechen
' ' Reset
' m_FMBus.send "**" & g_FM85RefZAdresse & "@"
' m_FMBus.receive (500)
' m_FMBus.send "R"
' m_FMBus.receive (500)
'
' ' zur Sicherheit ein zweites mal
' m_FMBus.send "**" & g_FM85RefZAdresse & "@"
' m_FMBus.receive (500)
' m_FMBus.send "R"
' m_FMBus.receive (500)
' Referenzzähler Prüfung einschalten
'Call m_FMBus.dialog("**" & g_FM85RefZAdresse & "@", "FM85P")
m_FMBus.send "**" & g_FM85RefZAdresse & "@"
' m_FMBus.receive (500)
If g_Abbruch Then
Call Abbruch
Exit Sub
End If
' '''''''''''''''''''''''
' ' Dummy-Werte setzen:
' '''''''''''''''''''''''
' ' Multiplikator
' m_FMBus.send "1s"
' m_FMBus.receive (500)
'
' ' keine Doppelimpulssperre
' m_FMBus.send "G"
' m_FMBus.receive (500)
'
' ' Dämpfung
' m_FMBus.send "3T"
' m_FMBus.receive (500)
'
' ' Doppelimpuls-Zeit
' m_FMBus.send "0000S"
' m_FMBus.receive (500)
'
' ' K-Wert sollte immer 1 sein, da Impulswertigkeit der beiden
' ' Referenzzähler immer gleich ist
' m_FMBus.send Trim("1000K+1")
' Für Referenzzähler : FM85P/7 PZ Eingang
m_FMBus.send "Q"
m_FMBus.receive (500)
' Für Referenzzähler : FM85P/7 RZ Eingang
' Sende und erwarte O
m_FMBus.send "O"
m_FMBus.receive (500)
' FM85 mit der Adresse 7 ansprechen
' 13 in 7 geändert Andreas Pfeiffer
' Fehlerbyte auslesen
m_FMBus.dialog "**" & g_FM85RefZAdresse & "@", ""
If g_Abbruch Then
Call Abbruch
Exit Sub
End If
m_FMBus.receive (500)
m_FMBus.send "42 "
dummy = Mid(m_FMBus.receive(500), 6, 2)
If dummy <> "00" And dummy <> "03" Then
If MsgBox("FM85P/7 Fehlerbyte ist nicht '00' oder '03' sondern '" & dummy & "':" & vbCrLf & Fehlerbyte42Meldung(dummy) & "Möchten Sie trotzdem weitermachen", vbYesNo) = vbYes Then
LogIntoDB "Fehlerbyte in frmRefZaehlerPrf StartPruefung() ist '" & dummy & "'", "FM85 Fehlerbyte"
If MsgBox("Programmierung der FM85 Wiederholen ?", vbYesNo) = vbYes Then
GoTo ResetFM85
End If
Else
g_Abbruch = True
End If
End If
'Steht counter auf 0?
m_ImpulseRZ_A = GetHexZahlFromFM85(g_FM85RefZAdresse, "L")
If m_ImpulseRZ_A <> 0 Then
LogIntoDB "Fehler: RefZ A mit " & m_ImpulseRZ_A & " Impulsen gestartet (" & lngResetFM85counter & " Wdh)!", "FM85 RZ Prüf"
PrintStatus "Fehler: RefZ A mit " & m_ImpulseRZ_A & " Impulsen gestartet (" & lngResetFM85counter & " Wdh)!"
lngResetFM85counter = lngResetFM85counter + 1
If lngResetFM85counter < 10 Then
GoTo ResetFM85
Else
LogIntoDB "Fehler: Start-Impulse für RZ_A= waren 10 mal größer 0!", "FM85 RZ Prüf"
End If
Else
PrintStatus "RefZ A mit 0 Impulsen gestartet."
End If
'Steht counter auf 0?
m_ImpulseRZ_B = GetHexZahlFromFM85(g_FM85RefZAdresse, "U")
If m_ImpulseRZ_B <> 0 Then
LogIntoDB "Fehler: RefZ B mit " & m_ImpulseRZ_B & " Impulsen gestartet (" & lngResetFM85counter & " Wdh)!", "FM85 RZ Prüf"
PrintStatus "Fehler: RefZ B mit " & m_ImpulseRZ_B & " Impulsen gestartet (" & lngResetFM85counter & " Wdh)!"
lngResetFM85counter = lngResetFM85counter + 1
If lngResetFM85counter < 10 Then
GoTo ResetFM85
Else
LogIntoDB "Fehler: Start-Impulse für RZ_B= waren 10 mal größer 0!", "FM85 RZ Prüf"
End If
Else
PrintStatus "RefZ B mit 0 Impulsen gestartet."
End If
If g_Abbruch = True Then
Call Abbruch
Exit Sub
End If
If Not g_ohneSPS Then
' Prüfung starten
' Pumpe ist schon angewählt: VB_Betrieb = START setzen
m_SPS.setBetrieb 2
PrintStatus "Warte auf Status Pumpe = läuft"
Do While (Not ((m_Pumpe.GetStatus And 4) = 4))
If m_blnMitFuellstand = False Then
lblGewicht.caption = Format(m_Waage.GetGewicht, "0")
ElseIf m_blnMitFuellstand = True Then
lblGewicht.caption = Format(m_SPS.GetFuellstand(Behaelter.m_Nr), "0.0")
End If
Sleep 500, True
If g_Abbruch Then
Exit Sub
End If
Loop
Else
dummy = MsgBox("Durchfluß " & Format(DurchflussSoll, "0.000") & " m³/h starten.", vbOKCancel, "Anweisung an den Bediener")
If dummy = vbCancel Then
Call Abbruch
g_Abbruch = True
End If
End If
If g_Abbruch = True Then
Exit Sub
End If
PP_ZeitStart = GetTickCount
PrintStatus "Referenzzählerprüfung läuft"
lblFehlerA.caption = "wird ermittelt "
If g_App.Settings.getAnzahlMIDGruppen > 1 Then
lblFehlerB.caption = "wird ermittelt "
End If
If Not g_ohneSPS Then
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' StartMessung
'----------------
' Schleifenbeginn
m_PruefpunktFertig = False
WriteToLog "*** Messung gestartet ***"
Timer1.Enabled = False
Do While Not m_PruefpunktFertig
strDebugText = ""
'strDebugText = Format(Now, "dd.mm.yyyy hh:mm:ss") & vbTab
strDebugText = strDebugText & Format(m_SPS.getQIst, "0.0000") & vbTab
' Durchflußanzeige
lblQIst.caption = Format(m_SPS.getQIst, "0.0000")
DoEvents
If g_Abbruch = True Then
Exit Sub
End If
'Änderung 23.03.00 Andreas Pfeiffer ##0003##
'Ansprechen der Adresse 13 ist nicht mehr nötig, da dieser
'bereits zuvor mehrfach angesprochen wurde
'dadurch schnellere Bildschimaktuallisierung
'Weiter CLng in Cvar geändert, Variablen in Double dimensioniert
'm_FMBus.send "**" & g_FM85RefZAdresse & "@"
'm_FMBus.receive (500)
' Referenzzähler Eingang
' m_FMBus.send "L"
' m_ImpulseRZ_A = Val("&H0" & m_FMBus.receive(500))
m_ImpulseRZ_A = GetHexZahlFromFM85(g_FM85RefZAdresse, "L")
strDebugText = strDebugText & "Imp A" & vbTab & m_ImpulseRZ_A & vbTab
' Referenzzählerimpulse Anzeige aktualisieren
lblImpulseRZ1.caption = CStr(m_ImpulseRZ_A)
lblVolA.caption = Format(1000 * m_ImpulseRZ_A / m_ReferenzzaehlerA.ImpulseQM, "0.000")
If g_App.Settings.getAnzahlMIDGruppen > 1 Then
' Prüfzähler Eingang
' m_FMBus.send "U"
' m_ImpulseRZ_B = Val("&H0" & m_FMBus.receive(500))
m_ImpulseRZ_B = GetHexZahlFromFM85(g_FM85RefZAdresse, "U")
strDebugText = strDebugText & "Imp B" & vbTab & m_ImpulseRZ_B & vbTab
' Referenzzählerimpulse Anzeige aktualisieren
lblImpulseRZ2.caption = CStr(m_ImpulseRZ_B)
lblVolB.caption = Format(1000 * m_ImpulseRZ_B / m_ReferenzzaehlerB.ImpulseQM, "0")
End If
If m_blnMitFuellstand = False Then
' Anzeige Füllmenge IstGewicht
lblGewicht.caption = Format(m_Waage.GetGewicht, Behaelter.m_Genauigkeit)
Else
lblGewicht.caption = Format(m_SPS.GetFuellstand(Behaelter.m_Nr), "0.0")
End If
strDebugText = strDebugText & "Gewicht" & vbTab & lblGewicht.caption & vbTab
' Abfrage SPS BehälterVoll
If m_SPS.GrenzwertWaageErreicht Then
Endzeit = GetTickCount
' Stop Messung
If Timer1.Enabled = False Then
PrintStatus "Waagen Grenzwert Signal: Prüfpunkt ist beendet"
Timer1.Interval = 60000
Timer1.Enabled = True
PrintStatus "Timer: 1 min warten..."
End If
'If g_App.PruefstationNr = 2007 Then
' m_PruefpunktFertig = True
'End If
End If
PP_Zeit = (GetTickCount() - PP_ZeitStart) / 1000
lblZeit.caption = PP_Zeit & "/" & PP_ZeitSoll
' Nach halber Prüfzeit Durchfluß und Temperatur merken
If bDataSaved = False And PP_Zeit > PP_ZeitSoll / 2 And Not g_ohneSPS Then
PrintStatus "Halbe Pruefzeit " & PP_Zeit & "/" & PP_ZeitSoll & "ist verstrichen:"
bDataSaved = True
' Halbe Pruefzeit ist verstrichen, es können Werte gespeichert werden:
' Wassertemperatur von der Strecke
Temperatur = m_SPS.GetEinlaufTemperatur
PrintStatus "Temperatur: " & Format(Temperatur, "0.0")
' RH: 8.7.2004 dieser Wert wird nicht benötigt da für RZP nicht aussagekräftig
'PrintStatus "SERVO/FU Stellwert: " & m_SPS.GetStellwert() & "%"
PrintStatus "SERVO/FU Stellwert: " & m_SPS.GetServoFUStellwert(m_Pumpe.GetRegelart, m_RefezaehlerStrang)
' RH 3.5.11 6
' Durchfluß-Istwert
PP_Durchfluss = m_SPS.getQIst
If Abs(PP_Durchfluss - DurchflussSoll) / DurchflussSoll > 0.1 Then
Printer.FontName = "Courier"
Printer.FontSize = 30
Printer.FontBold = True
Printer.CurrentX = 1000
Printer.CurrentY = 1000
Printer.Print "Warnung"
Printer.FontSize = 12
Printer.CurrentX = 1000
Printer.Print ""
Printer.CurrentX = 1000
Printer.Print "Prüfstation " & g_App.PruefstationNr
Printer.CurrentX = 1000
Printer.Print "Nach halber Prüfzeit (" & PP_Zeit & " s) "
Printer.CurrentX = 1000
Printer.Print "wurde der Solldurchfluß " & Format(DurchflussSoll, "0.000") & " m³/h nicht erreicht."
Printer.FontBold = False
Printer.CurrentX = 1000
Printer.Print ""
Printer.CurrentX = 1000
Printer.Print "Aktueller Durchfluß: " & Format(PP_Durchfluss, "0.000") & " m³/h"
Printer.CurrentX = 1000
Printer.Print "Nennweite: " & m_ReferenzzaehlerA.Nennweite
Printer.CurrentX = 1000
Printer.Print "Referenzzählerprüfung vom " & Format(Timestamp, "dd.mm.yyyy hh:mm")
Printer.CurrentX = 1000
Printer.Print "aufgetreten am " & Format(Now(), "dd.mm.yyyy hh:mm")
Printer.EndDoc
PrintStatus "Abweichung Ist-Durchfluß > 10%: " & Format(PP_Durchfluss, "0.000") & " m³/h"
Else
PrintStatus "Ist-Durchfluß: " & Format(PP_Durchfluss, "0.000") & " m³/h"
End If
End If
WriteToLog strDebugText
Loop
'pruefmenge wurde erreicht
Else ' g_ohneSPS
MsgBox "Weiter mit OK wenn Wasser gestoppt", , "Anweisung an den Bediener"
End If ' g_ohneSPS
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''' Prüfpunkt beendet '''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Betrieb stoppen
If Not g_ohneSPS Then
'm_SPS.SetQSoll 0 AP 5.5.00
m_SPS.setBetrieb 0
'
End If
lblQIst.caption = ""
If Not m_Waage Is Nothing And m_blnMitFuellstand = False Then
' Anzeige Füllmenge
lblGewicht.caption = Format(m_Waage.GetGewicht, "0")
' Anzeige Füllmenge :
PrintStatus "Gewicht: " & Format(m_Waage.GetGewicht, "0.000")
' Beruhigungsphase sleep Zeit
PrintStatus "Beruhigungsphase..."
Sleep 3000, True
' Leckage Kontrolle
' -----------------
' LeckageKontrollZeit = g_App.Settings.LeckageKontrollZeit
'm_Waage.WarteAufRuhe
Behaelter.WarteAufRuhe
If g_Abbruch = True Then
Call Abbruch
Exit Sub
End If
' Anzeige Füllmenge :
PrintStatus "Gewicht: " & Format(m_Waage.GetGewicht, "0.000")
lblGewicht.caption = Format(m_Waage.GetGewicht, "0")
WriteToLog "Gewicht " & vbTab & Format(m_Waage.GetGewicht, "0.000")
' Dauermessung: Gewicht gegen Zeit bleibt konstant ?
' getTickCount() ....
' m_Waage.GetGewicht
' Fehler anzeige: Leck in Behälter ?
End If ' m_Waage is nothing
If m_blnMitFuellstand = True Then
' Anzeige Füllmenge
lblGewicht.caption = Format(m_SPS.GetFuellstand(Behaelter.m_Nr), "0")
PrintStatus "Füllmenge: " & Format(m_SPS.GetFuellstand(Behaelter.m_Nr), "0.0")
' Beruhigungsphase sleep Zeit
PrintStatus "Beruhigungsphase..."
End If
' Fehlerermittlung
' m_FMBus.send "**" & g_FM85RefZAdresse & "@"
' m_FMBus.receive (500)
' m_FMBus.send "L"
' 'Änderung 23.03.00 Andreas Pfeiffer ##005## CVar oder CLng unklar
' m_ImpulseRZ_A = Val("&H0" & m_FMBus.receive(500))
m_ImpulseRZ_A = GetHexZahlFromFM85(g_FM85RefZAdresse, "L")
PrintStatus "Impulse RefZA=" & m_ImpulseRZ_A
' Referenzzählerimpulse Anzeige aktualisieren
lblImpulseRZ1.caption = CStr(m_ImpulseRZ_A)
If m_ImpulseRZ_A = -1 Then m_ImpulseRZ_A = 0
'm_FMBus.send "**" & g_FM85RefZAdresse & "@"
'm_FMBus.receive (500)
If g_App.Settings.getAnzahlMIDGruppen > 1 Then
' m_FMBus.send "U"
' m_ImpulseRZ_B = Val("&H0" & m_FMBus.receive(500))
m_ImpulseRZ_B = GetHexZahlFromFM85(g_FM85RefZAdresse, "U")
PrintStatus "Impulse RefZA=" & m_ImpulseRZ_B
' Referenzzählerimpulse Anzeige aktualisieren
lblImpulseRZ2.caption = CStr(m_ImpulseRZ_B)
If m_ImpulseRZ_B = -1 Then m_ImpulseRZ_B = 0
End If
' Wassertemperatur von der Strecke (1)
'Änderung 23.03.00 Andreas Pfeiffer ##0004##
'Es soll die Temperatur von der Mitte der Prüfung gespeichert werden
If Temperatur = 0 Then
' Temperatur wurde noch nicht ermittelt
If Not g_ohneSPS Then
Temperatur = Format(m_SPS.GetEinlaufTemperatur, "0.0")
Else
Temperatur = 22
PrintStatus "Ohne SPS: Temperatur von 22C angenommen."
End If
End If
VolumenA = m_ImpulseRZ_A / m_ReferenzzaehlerA.ImpulseQM
If g_App.Settings.getAnzahlMIDGruppen > 1 Then
VolumenB = m_ImpulseRZ_B / m_ReferenzzaehlerB.ImpulseQM
lblVolB.caption = Format(1000 * VolumenB, "0")
PrintStatus "VolumenB: " & VolumenB & " m^3"
End If
lblVolA.caption = Format(1000 * VolumenA, "0")
PrintStatus "VolumenA: " & VolumenA & " m^3"
If m_blnMitFuellstand = False Then
' Anzeige Füllmenge IstGewicht
lblGewicht.caption = Format(m_Waage.GetGewicht, "0")
VolumenIst = Errechne_Volumen_Von_Wasser_in_m3(m_Waage.GetGewicht, Temperatur)
Else
PrintStatus "Warte auf Ruhe Füllstand..."
VolumenIst = GetFuellstandInRuhe(Behaelter.m_Nr) / 1000
dblFuellstand = VolumenIst
End If
' Hier ist das Volumen in m³
PrintStatus "Ist-Volumen: " & Format(VolumenIst, "0.000")
If VolumenIst > 0 Then
FehlerA = (VolumenA - VolumenIst) * 100 / VolumenIst
lblFehlerA.caption = Format(FehlerA, "0.00") & "%"
PrintStatus "Fehler RZ-A: " & Format(FehlerA, "0.00") & "%"
If Not IsEmpty(letzterFehlerA) Then
PrintStatus "letzter Fehler RZ-A: " & Format(letzterFehlerA, "0.00") & "%"
PrintStatus "Abweichung RZ-A: " & Round(Abs(FehlerA - letzterFehlerA), 3) & "%"
Else
PrintStatus "letzter Fehler RZ-A konnte für diesen PP nicht ermittelt werden."
End If
If g_App.Settings.getAnzahlMIDGruppen > 1 Then
FehlerB = (VolumenB - VolumenIst) * 100 / VolumenIst
lblFehlerB.caption = Format(FehlerB, "0.00") & "%"
PrintStatus "Fehler RZ-B: " & Format(FehlerB, "0.00") & "%"
If Not IsEmpty(letzterFehlerB) Then
PrintStatus "letzter Fehler RZ-B: " & Format(letzterFehlerB, "0.00") & "%"
PrintStatus "Abweichung RZ-B: " & Round(Abs(FehlerB - letzterFehlerB), 3) & "%"
Else
PrintStatus "letzter Fehler RZ-B konnte für diesen PP nicht ermittelt werden."
End If
End If
TestStatusLogik:
' verstrichene Zeit für diesen Prüfpunkt
PP_Zeit = Int(GetTickCount - PP_ZeitStart) / 1000
Sleep 1000, True
Simulation:
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Statusänderung für die Wiederholung von RZ Prüfpunkten
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'
' Todo
'
'''Select Case g_App.Settings.getMIDGruppe
''' Case 1
''' Set Referenzzaehler = m_ReferenzzaehlerA
''' Case 2
''' Set Referenzzaehler = m_ReferenzzaehlerB
''' Case Else
''' Set Referenzzaehler = m_ReferenzzaehlerA
''' ErrorMsg ("MID-Gruppe in INI Datei ungültig: MidGr. A gewählt")
'''End Select
'''
'''
' ein: StatusPruefpunktWdh mit Dim StatusPruefpunktWdh As STATUS_WDH_RZ_PRUEFPUNKT
' ein FehlerA
' ein letzterFehlerA
' ein FehlerB
' ein letzterFehlerB
' m_ReferenzzaehlerA
' m_ReferenzzaehlerB
' DurchflussSoll
' g_App.Settings.getMIDGruppe = 1 (A) , 2 (B)
' m_blnStrangHatAbweichung ist unwichtig / obsolete
' Timestamp
' m_bln_PP_Wird_wiederholt
' If chkSimulation.Value = vbChecked Then
' ZeigeSimulation StatusPruefpunktWdh, "vorher"
' End If
Select Case StatusPruefpunktWdh
Case STATUS_WDH_RZ_PRUEFPUNKT.NOCH_NICHT_GEPRUEFT
' Es findet die erste Prüfung statt
If RZFehlerWeichtAb(FehlerA, letzterFehlerA) And g_App.Settings.getMIDGruppe = 1 Then
' Der Fehler in Gruppe A weicht das erste Mal ab
m_blnStrangHatAbweichung = True
StatusPruefpunktWdh = STATUS_WDH_RZ_PRUEFPUNKT.ABWEICHUNG_BEI_ERSTER_PRUEFUNG
' Abweichungs-Formular nur anzeigen, wenn eine Abweichung festgestellt wurde
ShowRZFehlerAbweichung m_ReferenzzaehlerA.Nennweite, 0, DurchflussSoll, FehlerA, CDbl(letzterFehlerA), True, m_ReferenzzaehlerA
If g_App.Settings.getAnzahlMIDGruppen > 1 Then
ShowRZFehlerAbweichung m_ReferenzzaehlerB.Nennweite, 0, DurchflussSoll, FehlerB, CDbl(letzterFehlerB), False, m_ReferenzzaehlerB
End If
ZeigeAbweichungstext 0, FehlerA, CDbl(letzterFehlerA), DurchflussSoll, m_ReferenzzaehlerA, Timestamp
' Fahre mit der ersten Wiederholung der ersten Prüfung fort
m_bln_PP_Wird_wiederholt = True
GoTo Pruefpunktwiederholung
Else
' (A ist ausgewählt und A war OK) oder B ist ausgewählt
If g_App.Settings.getAnzahlMIDGruppen > 1 Then
' Es gibt Gruppe A und Gruppe B
If RZFehlerWeichtAb(FehlerB, letzterFehlerB) And g_App.Settings.getMIDGruppe = 2 Then
' Gruppe B ist ausgewählt und Fehler Gruppe B weicht das erste Mal ab
m_blnStrangHatAbweichung = True
' nächster Status
StatusPruefpunktWdh = STATUS_WDH_RZ_PRUEFPUNKT.ABWEICHUNG_BEI_ERSTER_PRUEFUNG
' Abweichungs-Formular nur anzeigen, wenn eine Abweichung festgestellt wurde
ShowRZFehlerAbweichung m_ReferenzzaehlerA.Nennweite, 0, DurchflussSoll, FehlerA, CDbl(letzterFehlerA), True, m_ReferenzzaehlerA
ShowRZFehlerAbweichung m_ReferenzzaehlerB.Nennweite, 0, DurchflussSoll, FehlerB, CDbl(letzterFehlerB), False, m_ReferenzzaehlerB
ZeigeAbweichungstext 0, FehlerB, CDbl(letzterFehlerB), DurchflussSoll, m_ReferenzzaehlerB, Timestamp
' Fahre mit der Wiederholung der ersten Prüfung fort
m_bln_PP_Wird_wiederholt = True
GoTo Pruefpunktwiederholung
Else
' (A ist ausgewählt und A war OK) oder (B ist ausgewählt und B war OK)
' der ausgewählte Strang ist in der ersten Prüfung OK
StatusPruefpunktWdh = STATUS_WDH_RZ_PRUEFPUNKT.INNERHALB_FEHLERGRENZEN_BEI_ERSTER_PRUEFUNG
' mit dem nächsten Prüfpunkt fortfahren
End If
Else
' Es gibt nur Gruppe A und A war OK
StatusPruefpunktWdh = STATUS_WDH_RZ_PRUEFPUNKT.INNERHALB_FEHLERGRENZEN_BEI_ERSTER_PRUEFUNG
' mit dem nächsten Prüfpunkt fortfahren
End If
End If
Case STATUS_WDH_RZ_PRUEFPUNKT.ABWEICHUNG_BEI_ERSTER_PRUEFUNG
'Abweichungsformular aktualisieren für Strang A
ShowRZFehlerAbweichung m_ReferenzzaehlerA.Nennweite, 1, DurchflussSoll, FehlerA, CDbl(letzterFehlerA), True, m_ReferenzzaehlerA
If g_App.Settings.getAnzahlMIDGruppen > 1 Then
ShowRZFehlerAbweichung m_ReferenzzaehlerB.Nennweite, 1, DurchflussSoll, FehlerB, CDbl(letzterFehlerB), False, m_ReferenzzaehlerB
End If
' Es findet die erste Wiederholung statt:
If RZFehlerWeichtAb(FehlerA, letzterFehlerA) And g_App.Settings.getMIDGruppe = 1 Then
' Strang A weicht ab und A ist ausgewählt
ZeigeAbweichungstext 1, FehlerA, CDbl(letzterFehlerA), DurchflussSoll, m_ReferenzzaehlerA, Timestamp
PrintStatus "Prüfstation wird gesperrt. Eine Freigabe durch die Prüfstellenleitung ist erforderlich."
m_objFrmRZFehlerAbweichung.ErzwingeFreigabe
' Fehler Gruppe A weicht in der ersten Wiederholung ab
StatusPruefpunktWdh = STATUS_WDH_RZ_PRUEFPUNKT.ABWEICHUNG_BEI_ERSTER_WIEDERHOLUNG
' zweite Wiederholung durchführen
m_bln_PP_Wird_wiederholt = True
GoTo Pruefpunktwiederholung
End If
If g_App.Settings.getAnzahlMIDGruppen > 1 Then
' Es gibt Gruppe A und Gruppe B, also auch Gruppe B betrachten
' Es findet die erste Wiederholung statt:
If RZFehlerWeichtAb(FehlerB, letzterFehlerB) And g_App.Settings.getMIDGruppe = 2 Then
' B weicht ab und B ist ausgewählt
ZeigeAbweichungstext 1, FehlerB, CDbl(letzterFehlerB), DurchflussSoll, m_ReferenzzaehlerB, Timestamp
PrintStatus "Prüfstation wird gesperrt. Eine Freigabe durch die Prüfstellenleitung ist erforderlich."
m_objFrmRZFehlerAbweichung.ErzwingeFreigabe
' Fehler des RZ in Gruppe B weicht in der ersten Wiederholung ab
StatusPruefpunktWdh = STATUS_WDH_RZ_PRUEFPUNKT.ABWEICHUNG_BEI_ERSTER_WIEDERHOLUNG
'zweite Wiederholung durchführen
m_bln_PP_Wird_wiederholt = True
GoTo Pruefpunktwiederholung
Else
' Entweder (A ist ausgewählt und A war OK) oder (B ist ausgewählt und B ist OK)
' = Der ausgewählte Strang ist OK
' = alle Fehler sind innerhalb der Fehlergrenzen
StatusPruefpunktWdh = STATUS_WDH_RZ_PRUEFPUNKT.INNERHALB_FEHLERGRENZEN_BEI_ERSTER_WIEDERHOLUNG
m_objFrmRZFehlerAbweichung.AddText "Keine Abweichung in der 1. Wiederholung. Zur Kontrolle wird Prüfpunkt Q=" & DurchflussSoll & " m³/h wiederholt!"
PrintStatus "Keine Abweichung in der 1. Wiederholung. Zur Kontrolle wird Prüfpunkt Q=" & DurchflussSoll & " m³/h wiederholt!"
' zweite Wiederholung durchführen zur Bestätgung eines einmaligen Ausreissers
m_bln_PP_Wird_wiederholt = True
GoTo Pruefpunktwiederholung
End If
Else
' es gibt nur Gruppe A und A war OK bei der ersten Wiederholung
StatusPruefpunktWdh = STATUS_WDH_RZ_PRUEFPUNKT.INNERHALB_FEHLERGRENZEN_BEI_ERSTER_WIEDERHOLUNG
' zweite Wiederholung zur Bestätgung eines einmaligen Ausreissers
m_objFrmRZFehlerAbweichung.AddText "Keine Abweichung in der 1. Wiederholung. Zur Kontrolle wird Prüfpunkt Q=" & DurchflussSoll & " m³/h wiederholt!"
PrintStatus "Keine Abweichung in der 1. Wiederholung. Zur Kontrolle wird Prüfpunkt Q=" & DurchflussSoll & " m³/h wiederholt!"
m_bln_PP_Wird_wiederholt = True
GoTo Pruefpunktwiederholung
End If
Case STATUS_WDH_RZ_PRUEFPUNKT.ABWEICHUNG_BEI_ERSTER_WIEDERHOLUNG
' zweite Wiederholung wurde gerade durchgeführt
ShowRZFehlerAbweichung m_ReferenzzaehlerA.Nennweite, 2, DurchflussSoll, FehlerA, CDbl(letzterFehlerA), True, m_ReferenzzaehlerA
If g_App.Settings.getAnzahlMIDGruppen > 1 Then
ShowRZFehlerAbweichung m_ReferenzzaehlerB.Nennweite, 2, DurchflussSoll, FehlerB, CDbl(letzterFehlerB), False, m_ReferenzzaehlerB
End If
' unabhängig vom Fehler
StatusPruefpunktWdh = STATUS_WDH_RZ_PRUEFPUNKT.ABWEICHUNG_BEI_ZWEITER_WIEDERHOLUNG
Case STATUS_WDH_RZ_PRUEFPUNKT.INNERHALB_FEHLERGRENZEN_BEI_ERSTER_PRUEFUNG
' Alles super, fortfahren mit nächstem Prüfpunkt
Case STATUS_WDH_RZ_PRUEFPUNKT.INNERHALB_FEHLERGRENZEN_BEI_ERSTER_WIEDERHOLUNG
' Erste Wiederholung ergab, daß dieser Prüfpunkt ein einmaliger Aussreisser sein könnte
' Zweite Wiederholung wird nun betrachtet
ShowRZFehlerAbweichung m_ReferenzzaehlerA.Nennweite, 2, DurchflussSoll, FehlerA, CDbl(letzterFehlerA), True, m_ReferenzzaehlerA
If g_App.Settings.getAnzahlMIDGruppen > 1 Then
ShowRZFehlerAbweichung m_ReferenzzaehlerB.Nennweite, 2, DurchflussSoll, FehlerB, CDbl(letzterFehlerB), False, m_ReferenzzaehlerB
End If
If RZFehlerWeichtAb(FehlerA, letzterFehlerA) And g_App.Settings.getMIDGruppe = 1 Then
' A ist ausgewählt und A weicht ab
' Fehler des RZ in Gruppe A weicht in der zweiten Wiederholung ab
ZeigeAbweichungstext 2, FehlerA, CDbl(letzterFehlerA), DurchflussSoll, m_ReferenzzaehlerA, Timestamp
PrintStatus "Prüfstation wird gesperrt. Eine Freigabe durch die Prüfstellenleitung ist erforderlich."
m_objFrmRZFehlerAbweichung.ErzwingeFreigabe
StatusPruefpunktWdh = STATUS_WDH_RZ_PRUEFPUNKT.ABWEICHUNG_BEI_ZWEITER_WIEDERHOLUNG
' Endzustand
Else
' A ist OK oder B ist ausgewählt
If g_App.Settings.getAnzahlMIDGruppen > 1 Then
' Es gibt Gruppe A und Gruppe B, also auch Gruppe B betrachten
' Es findet die erste Wiederholung statt:
If RZFehlerWeichtAb(FehlerB, letzterFehlerB) And g_App.Settings.getMIDGruppe = 2 Then
' B ist ausgewählt und weicht ab
ZeigeAbweichungstext 2, FehlerB, CDbl(letzterFehlerB), DurchflussSoll, m_ReferenzzaehlerB, Timestamp
PrintStatus "Prüfstation wird gesperrt. Eine Freigabe durch die Prüfstellenleitung ist erforderlich."
m_objFrmRZFehlerAbweichung.ErzwingeFreigabe
StatusPruefpunktWdh = STATUS_WDH_RZ_PRUEFPUNKT.ABWEICHUNG_BEI_ZWEITER_WIEDERHOLUNG
Else
' A und B sind OK
StatusPruefpunktWdh = STATUS_WDH_RZ_PRUEFPUNKT.INNERHALB_FEHLERGRENZEN_BEI_ZWEITER_WIEDERHOLUNG
' Endzustand
End If
Else
' A ist OK, B wird nicht betrachtet
StatusPruefpunktWdh = STATUS_WDH_RZ_PRUEFPUNKT.INNERHALB_FEHLERGRENZEN_BEI_ZWEITER_WIEDERHOLUNG
' Endzustand
End If
End If
' keine weitere Wiederholung
Case Else
MsgBox "nicht erwarteter Zustand " & StatusPruefpunktWdh
LogIntoDB "frmRefZaehlerPrf StartPruefung(): nicht erwarteter Zustand " & StatusPruefpunktWdh, "Programmfehler"
End Select
' If chkSimulation.Value = vbChecked Then
' ZeigeSimulation StatusPruefpunktWdh, "nachher"
' GoTo EinsprungSimulationNext
' End If
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' folgende Daten Speichern
' m_ReferenzzaehlerA.SerienNr
' TimeStamp
' BehaelterNr ' wie in ini Datei
' DurchflussSoll
' VolumenIst
' m_Waage.GetGewicht
' Temperatur
' Impulse (neu seit 5.10.00)
If Not m_Waage Is Nothing And m_blnMitFuellstand = False Then
Call FehlerSpeichern(m_ReferenzzaehlerA.SerienNr, Timestamp, PruefpunktNr, PP_Zeit, DurchflussSoll, PP_Durchfluss, VolumenA, m_Waage.GetGewicht, Temperatur, BehaelterNr, CLng(m_ImpulseRZ_A))
If g_App.Settings.getAnzahlMIDGruppen > 1 Then
Call FehlerSpeichern(m_ReferenzzaehlerB.SerienNr, Timestamp, PruefpunktNr, PP_Zeit, DurchflussSoll, PP_Durchfluss, VolumenB, m_Waage.GetGewicht, Temperatur, BehaelterNr, CLng(m_ImpulseRZ_B))
End If
Else ' ohne Waage aber mit Füllstand
Call FehlerSpeichern(m_ReferenzzaehlerA.SerienNr, Timestamp, PruefpunktNr, PP_Zeit, DurchflussSoll, PP_Durchfluss, VolumenA, 0, Temperatur, BehaelterNr, CLng(m_ImpulseRZ_A), dblFuellstand)
End If
Else
PrintStatus "Die Referenzzähler-Fehler sind nicht ermittelbar, da IstVolumen=" & VolumenIst & " ist"
End If
DoEvents
If g_Abbruch = True Then
Exit Sub
End If
Else
' sollte nicht vorkommen
DebugMsg "Prüfpunkt " & DurchflussSoll & " wird übersprungen, da DurchflussSoll <= 0 ist"
End If ' DurchflussSoll > 0
' Schleifenende ReferenzzählerPruefpunkt
EinsprungSimulationNext:
m_blnIstErsterPPdesStranges = False
Next
' Select Case StatusWiederholung
' Case 0
' ' Es war keine Wiederholung nötig
' DebugMsg "keine Wdh nötig"
' Case 1
' ' Es wurde festgestellt, daß eine eine Wiederholung des Stranges nötig ist:
' StatusWiederholung = 0 ' Wdh ist im Gange
'
' ' ÄnderungRH 13.2.2002
' ' Es ist eine Wiederholung nötig.
' ' Der Timestamp der Prüfung des neuen Stranges wird aktualisiert
' ' Also vorher Druck veranlassen mit letztem Timestamp
'
' RZFehlerDruck g_App.PruefstationNr, m_Temperatur
' 'alten Prüfgang speichern
' RZPruefgangSpeichern Timestamp, Now(), , g_App.Mitarbeiter.getNr
' Timestamp = Now()
' 'neuen Prüfgang speichern
' RZPruefgangSpeichern Timestamp, , g_App.Mitarbeiter.getNr, , "Wiederholung des Stranges " & m_RefezaehlerStrang
'
' PrintStatus Timestamp & " Dieser Strang wird wiederholt, da Abweichung > " & g_App.Settings.get_RZ_Wiederholgenauigkeit() & " % aufgetreten."
' GoTo StrangWiederholung
' End Select
If g_Abbruch = True Then
Exit Sub
End If
' Schleifenende Referenzzähler / RefZ Strang
SkipStrang:
Next
If m_DauerpruefungZaehler < m_DauerpruefungAnzahl Then
' Änderung: RH 14.05.2009: Es wird als Standard kein RZ Protokoll mehr gedruckt
' RZFehlerDruck g_App.PruefstationNr, m_Temperatur
RZPruefgangSpeichern Timestamp, Now(), , g_App.Mitarbeiter.getNr
End If
If m_DauerBeenden = True Then Exit For
Next m_DauerpruefungZaehler ' Schleifenende Dauerprüfung
' ' letzte Prüfgang
' ' Endergebnisse erst drucken, wenn sich Mitarbeiter identifiziert
' Dim dlgLogin As frmLogin
' Set dlgLogin = New frmLogin
' dlgLogin.Caption = "Zum Ausdruck des Referenzzähler Protokolls bitte identifizieren!"
' Do While doModal(dlgLogin, True) <> IDOK
' MsgBox "Sie müssen sich anmelden, um das Referenzzähler Protokoll drucken zu können."
' Loop
' g_App.Mitarbeiter = dlgLogin.getMitarbeiter()
' Set dlgLogin = Nothing
' RZFehlerDruck g_App.PruefstationNr, m_Temperatur
' RZPruefgangSpeichern Timestamp, Now(), , g_App.Mitarbeiter.getNr
lblDauer.caption = ""
Call ResetFormAndVars
PrintStatus "Referenzzähler Prüfung abgeschlossen"
If Not m_Waage Is Nothing Then
PrintStatus "Waagen-Grenzwert zurücksetzen"
Call WaageZuruecksetzen
Call m_Waage.releaseMScomm
End If ' not m_Waage Is Nothing
If m_blnMitFuellstand Then
' Tara Reset
m_SPS.m_FuellstandLeer = 0
End If
If g_App.Settings.get_RZP_BehaelterLeeren() > 0 Then
Call AlleBehaelterLeeren(Me, m_SPS, m_Waage, Behaelter)
End If
Exit Sub
ErrorhandlerLogAndResumeNext:
ErrorMsg "Fehler " & Err.Number & " in der RefZ-Prüfung: " & Err.Description, "RZ Prüf"
Exit Sub
Resume
End Sub
'-------------------------------------------------------------------------
Public Sub PrintStatus(sText As String)
txtStatus.text = txtStatus.text & sText & vbCrLf
txtStatus.SelStart = Len(txtStatus.text)
DebugMsg ": " & sText
End Sub
Private Function FehlerSpeichern(SerienNr As Long, Timestamp As Date, PruefpunktNr As Integer, Pruefpunkt_Zeit As Long, DurchflussSoll As Double, DurchflussIst As Double, MIDVolumen As Double, Gewicht As Double, Temperatur As Double, BehaelterNr As Integer, Impulse As Long, Optional Fuellstand As Double = 0)
' Errechnet Fehler aus MIDVolumen und Gewicht und Temperatur
' Speichert Pruefpunkt Daten und Fehler in DB, Tabelle ReferenzzaehlerFehler
On Error GoTo FehlerSpeichernError
Dim Fehler As Double
Dim rs As CRecordset
Dim FeldnamePrefix As String
Dim sSQL As String
Dim BehaelterVolumen As Double
Dim strDatumSQL As String
Set rs = New CRecordset
strDatumSQL = FormatDateForSQL(Timestamp, g_App.getDB.getConnection)
sSQL = "Select * from ReferenzzaehlerFehler where SerienNr= " & SerienNr & " and Datum=" & strDatumSQL
rs.openRS (sSQL)
If rs.EOF Then
rs.addNew
Call rs.setValue("SerienNr", SerienNr)
If Timestamp > 0 Then
'Dim TimeStampDatum As Date
'Dim TimestampTime As Date
'TimeStampDatum = CDate(Mid(Str(Timestamp), 1, 9))
'TimestampTime = CDate(Mid(Str(Timestamp), 11, 5))
'Provisorium geändert am 24.09.02 Pfeiffer
'Datumskonvertierung für den SQLServer nicht in Ordnung
'getestet
'Call rs.setValue("Datum", TimeStampDatum + TimestampTime)
'alter Zustand
Call rs.setValue("Datum", Timestamp)
End If
Call rs.update
End If
PrintStatus "Ermittlung des Fehler des RefZ "
PrintStatus "------------------------------"
PrintStatus "Timestamp: " & Format(Timestamp, "dd.mm.yyyy hh.mm.ss")
PrintStatus "SerienNr: " & SerienNr
PrintStatus " "
If Fuellstand > 0 Then
BehaelterVolumen = Fuellstand
Else
BehaelterVolumen = Errechne_Volumen_Von_Wasser_in_m3(Gewicht, Temperatur)
End If
PrintStatus "gemessenes Behälter-Gewicht: " & Format(Gewicht, "0.0000")
PrintStatus "Temperatur: " & Format(Temperatur, "0.0")
PrintStatus "Behälter-Volumen: " & Format(BehaelterVolumen, "0.000")
PrintStatus "Volumen durch MID: " & Format(MIDVolumen, "0.000")
If BehaelterVolumen <> 0 Then
' Fehler in %
If g_objExternePruefformel Is Nothing Then
PrintStatus "Interne Pruefformel"
Fehler = (MIDVolumen - BehaelterVolumen) * 100 / BehaelterVolumen
PrintStatus " MIDVolumen = " & MIDVolumen
PrintStatus " BehaelterVolumen = " & BehaelterVolumen
PrintStatus " Fehler= " & Fehler
Else
' Fehlerberechnung in Externer DLL, neu RH 30.5.2017
Fehler = modPruefformel.Errechne_Relative_Messabweichung_in_Prozent(MIDVolumen, BehaelterVolumen, 0)
PrintStatus g_objExternePruefformel.GetLogText
End If
PrintStatus "daraus berechn. Fehler: " & Format(Fehler, "0.00") & " %"
FeldnamePrefix = "PP" & CStr(PruefpunktNr) & "_"
Call rs.setValue(FeldnamePrefix & "Soll_Q", DurchflussSoll)
Call rs.setValue(FeldnamePrefix & "Ist_Q", DurchflussIst)
Call rs.setValue(FeldnamePrefix & "Ist_V", BehaelterVolumen * 1000) ' Litern
Call rs.setValue(FeldnamePrefix & "Waage", BehaelterNr)
Call rs.setValue(FeldnamePrefix & "Gewicht", Gewicht)
Call rs.setValue(FeldnamePrefix & "WasserTemp", Temperatur)
Call rs.setValue(FeldnamePrefix & "Zeit", Pruefpunkt_Zeit)
Call rs.setValue(FeldnamePrefix & "Fehler", Fehler)
Call rs.setValue(FeldnamePrefix & "Ref_V", MIDVolumen * 1000) ' in Litern
Call rs.setValue("MitarbeiterNr", g_App.Mitarbeiter.getNr)
'neu, 4.10.00, RH:
Call rs.setValue(FeldnamePrefix & "Impulse", Impulse)
' Werte für die Datenbank
' Debug.Print "PP" & CStr(PruefpunktNr) & "_Soll_Q: " & DurchflussSoll
' Debug.Print "PP" & CStr(PruefpunktNr) & "_Ist_Q: " & DurchflussIst
' Debug.Print "PP" & CStr(PruefpunktNr) & "_Waage:" & BehaelterNr
' Debug.Print "PP" & CStr(PruefpunktNr) & "_Ist_V:" & BehaelterVolumen
' Debug.Print "PP" & CStr(PruefpunktNr) & "_Gewicht: " & Gewicht
' Debug.Print "PP" & CStr(PruefpunktNr) & "_WasserTemp: " & Temperatur
' Debug.Print "PP" & CStr(PruefpunktNr) & "_Zeit: " & Pruefpunkt_Zeit
' Debug.Print "PP" & CStr(PruefpunktNr) & "_Fehler: " & Fehler
' Debug.Print "MitarbeiterNr: " & g_App.Mitarbeiter.getNr
Call rs.update
FehlerSpeichern = True
Else
PrintStatus "Fehler: Behältervolumen ist Null! Der RefZ-Fehler konnte nicht ermittelt werden"
Fehler = -100
End If
Exit Function
FehlerSpeichernError:
ErrorMsg ("FehlerSpeichern fehlgeschlagen: " & Err.Description)
End Function
Private Function FehlerSpeichernOhneWaage(SerienNr As Long, Timestamp As Date, PruefpunktNr As Integer, Pruefpunkt_Zeit As Long, DurchflussSoll As Double, DurchflussIst As Double, MIDVolumen As Double, BehaelterVolumen As Double, BehaelterNr As Integer, Impulse As Long)
' Errechnet Fehler aus MIDVolumen und Gewicht und Temperatur
' Speichert Pruefpunkt Daten und Fehler in DB, Tabelle ReferenzzaehlerFehler
On Error GoTo FehlerSpeichernError
Dim Fehler As Double
Dim rs As CRecordset
Dim FeldnamePrefix As String
Dim sSQL As String
Set rs = New CRecordset
'sSQL = "Select * from ReferenzzaehlerFehler where SerienNr= " & Seriennr & " and Datum=" & Format(Timestamp, "\#MM\/DD\/YYYY HH:mm:SS\#") & ""
sSQL = "Select * from ReferenzzaehlerFehler where SerienNr= " & SerienNr & " and Datum=CONVERT(datetime, '" & Format(Timestamp, "yyyy-mm-dd hh:mm:00") & "')"
rs.openRS (sSQL)
If rs.EOF Then
rs.addNew
Call rs.setValue("SerienNr", SerienNr)
If Timestamp > 0 Then
Call rs.setValue("Datum", Timestamp)
End If
Call rs.update
End If
PrintStatus "Ermittlung des Fehler des RefZ "
PrintStatus "------------------------------"
'PrintStatus "Temperatur: " & Format(Temperatur, "0.0")
PrintStatus "Behälter-Volumen: " & Format(BehaelterVolumen, "0.000")
PrintStatus "Volumen durch MID: " & Format(MIDVolumen, "0.000")
' Fehler in %
Fehler = (MIDVolumen - BehaelterVolumen) * 100 / BehaelterVolumen
PrintStatus "daraus berechn. Fehler: " & Format(Fehler, "0.00") & " %"
FeldnamePrefix = "PP" & CStr(PruefpunktNr) & "_"
Call rs.setValue(FeldnamePrefix & "Soll_Q", DurchflussSoll)
Call rs.setValue(FeldnamePrefix & "Ist_Q", DurchflussIst)
Call rs.setValue(FeldnamePrefix & "Ist_V", BehaelterVolumen * 1000) ' Litern
'Call rs.setValue(FeldnamePrefix & "Waage", BehaelterNr)
'Call rs.setValue(FeldnamePrefix & "Gewicht", Gewicht)
'Call rs.setValue(FeldnamePrefix & "WasserTemp", Temperatur)
Call rs.setValue(FeldnamePrefix & "Zeit", Pruefpunkt_Zeit)
Call rs.setValue(FeldnamePrefix & "Fehler", Fehler)
Call rs.setValue(FeldnamePrefix & "Ref_V", MIDVolumen * 1000) ' in Litern
Call rs.setValue("MitarbeiterNr", g_App.Mitarbeiter.getNr)
'neu, 4.10.00, RH:
Call rs.setValue(FeldnamePrefix & "Impulse", Impulse)
' Werte für die Datenbank
' Debug.Print "PP" & CStr(PruefpunktNr) & "_Soll_Q: " & DurchflussSoll
' Debug.Print "PP" & CStr(PruefpunktNr) & "_Ist_Q: " & DurchflussIst
' Debug.Print "PP" & CStr(PruefpunktNr) & "_Waage:" & BehaelterNr
' Debug.Print "PP" & CStr(PruefpunktNr) & "_Ist_V:" & BehaelterVolumen
' Debug.Print "PP" & CStr(PruefpunktNr) & "_Gewicht: " & Gewicht
' Debug.Print "PP" & CStr(PruefpunktNr) & "_WasserTemp: " & Temperatur
' Debug.Print "PP" & CStr(PruefpunktNr) & "_Zeit: " & Pruefpunkt_Zeit
' Debug.Print "PP" & CStr(PruefpunktNr) & "_Fehler: " & Fehler
' Debug.Print "MitarbeiterNr: " & g_App.Mitarbeiter.getNr
Call rs.update
FehlerSpeichernOhneWaage = True
Exit Function
FehlerSpeichernError:
MsgBox ("FehlerSpeichern fehlgeschlagen: " & Err.Description)
End Function
Private Sub txtDauer_Validate(Cancel As Boolean)
If Not IsNumeric(txtDauer.text) Then
chkDauer.value = 0
txtDauer.text = "1"
txtDauer.Enabled = False
m_DauerpruefungAnzahl = 1
End If
End Sub
Public Function GetFuellstandInRuhe(BehaelterNr As Integer) As Double
Dim lngWarteZeit As Long
Dim i As Integer
Dim Fuellstand As Double
Dim dblSumme As Double
Dim lngMittelwertZeit As Long
Dim dblFuellstand As Double
lngWarteZeit = g_App.Settings.GetFuellstandWartezeit(BehaelterNr)
PrintStatus "Wartezeit für Füllstand Ruhe " & lngWarteZeit & " s..."
For i = 1 To lngWarteZeit
lblGewicht.caption = Format(m_SPS.GetFuellstand(BehaelterNr), "0.0")
Sleep 1000, True
lblZeit.caption = lngWarteZeit - i
Debug.Print "warte noch " & lngWarteZeit - i & " s"
Next
lngMittelwertZeit = g_App.Settings.GetFuellstandMittelwert(BehaelterNr)
If lngMittelwertZeit > 1 Then
' Mittelwert bilden
dblSumme = 0
PrintStatus "Mittelwertbildung über " & lngMittelwertZeit & " s ..."
lblZeit.caption = lngMittelwertZeit
For i = 1 To lngMittelwertZeit
dblFuellstand = m_SPS.GetFuellstand(BehaelterNr)
dblSumme = dblSumme + dblFuellstand
lblGewicht.caption = Format(dblSumme / i, "0.0")
Sleep 1000, True
lblZeit.caption = lngMittelwertZeit - i
PrintStatus i & ". Summant für die Mittelwertbildung: " & dblFuellstand
Next
GetFuellstandInRuhe = dblSumme / lngMittelwertZeit
Else
GetFuellstandInRuhe = m_SPS.GetFuellstand(BehaelterNr)
lblGewicht.caption = Format(GetFuellstandInRuhe, "0.0")
End If
PrintStatus "gemessener Füllstand: " & GetFuellstandInRuhe & " Liter"
lblGewicht.caption = Format(GetFuellstandInRuhe, "0.0")
End Function
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
LogIntoDB "FM85P-" & EinbauplatzNr & " antwortete mit '" & strAntwort & "'", "FM85 RZ Prüf"
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
PrintStatus "FM85P-" & EinbauplatzNr & " antwortete mit '" & strAntwort & "'"
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
LogIntoDB "FM85P-" & EinbauplatzNr & " antwortete mit '" & strAntwort & "'", "FM85 RZ Prf"
GetHexZahlFromFM85 = -1
End If
Exit Function
Errorhandler:
LogIntoDB "Fehler " & Err.Number & " in GetHexZahlFromFM85 (RZ Prf):" & Err.Description, "Prg Fehler!"
GetHexZahlFromFM85 = -1
End Function
' RH 3.5.11 4
Private Sub BehaelterFuellen(Behaelter As CBehaelter)
Dim Fuelldurchfluss As Double
Dim Pumpe As CPumpe
Dim Referenzzaehler As CRefzaehler
Dim Fuellvolumen As Double
Dim letztesGewicht As Double
Dim Gewicht As Double
m_Waage.Initialize Behaelter.m_Nr
If Behaelter.m_WaageAnwahl <> 0 Then
m_Waage.Anwahl (Behaelter.m_WaageAnwahl)
End If
m_Waage.TaraReset
m_Waage.SoftTaraReset
' Rohr füllen
Fuelldurchfluss = Behaelter.m_Fuelldurchfluss
Fuellvolumen = Behaelter.m_Fuellvolumen
If Fuellvolumen = 0 Then
Fuellvolumen = Behaelter.m_OVolumen * 0.1
PrintStatus "Füllvolumen auf 10% gesetzt. Bitte Fuellvolumen in ini Datei pflegen!"
End If
If Fuelldurchfluss = 0 Then
PrintStatus "Fülldurchfluss ist 0. Bitte Fuelldurchfluss in ini Datei (Waage" & Behaelter.m_Nr & " 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
Sleep 1000
Set Pumpe = Pumpenwahl(Fuelldurchfluss, m_ColPumpen)
Pumpe.Anwahl
If g_App.PruefstationNr = 2010 Then
m_Waage.Tara
End If
'----------------------------------------------------------
' Füllen bis 10% des Behältervolumens
PrintStatus "Rohr füllen mit Fülldurchfluß " & Fuelldurchfluss & " auf Füllvolumen " & Fuellvolumen & " l in " & Behaelter.m_OVolumen & " l Behälter"
m_Waage.SetNettoGrenzwert1 Fuellvolumen, Behaelter.m_Genauigkeit
If g_App.PruefstationNr = 2010 Then
m_SPS.WassserAblassen 15
Sleep 500
m_SPS.WassserAblassen 0
End If
m_SPS.SetRegelart Pumpe.GetRegelart '!!!!
m_SPS.SetServoStellung lookupFUServoStellwert(Fuelldurchfluss, Pumpe.GetRegelart)
m_SPS.SetQSoll Fuelldurchfluss
m_SPS.setBetrieb 0
Sleep 500, True
m_SPS.setBetrieb 2
Do
Sleep 1000, True
Gewicht = m_Waage.GetGewicht
lblQIst = Format(m_SPS.getQIst, "0.0")
lblGewicht = Gewicht
If Gewicht = -9999 Then
DebugMsg ("Fehler: Gewicht konnte nicht gelesen werden")
Sleep 200, True
Exit Sub
End If
If g_Abbruch = True Then
Exit Sub
End If
Loop While Gewicht < Fuellvolumen Or Not m_SPS.GrenzwertWaageErreicht
m_SPS.setBetrieb 0
PrintStatus "Füllvolumen erreicht."
lblQIst = ""
'-----------------------------------------
End Sub
Private Sub RZPruefgangSpeichern(Timestamp As Date, Optional DatumEnde As Variant, Optional PrueferStart As Variant, Optional PrueferEnde As Variant, Optional strBemerkung As Variant, Optional Stopdatum As Variant)
On Error GoTo Errorhandler
Dim strSQL
Dim rs As CRecordset
Dim strDatumSQL As String
strDatumSQL = FormatDateForSQL(Timestamp, g_App.getDB.getConnection)
strSQL = "SELECT * from ReferenzzaehlerPruefgang where StartDatum = " & strDatumSQL & " and Pruefstation = " & g_App.PruefstationNr
Set rs = New CRecordset
rs.openRS strSQL, False
If rs.EOF Then
rs.addNew
rs.setValue "StartDatum", Timestamp
rs.setValue "Pruefstation", g_App.PruefstationNr
End If
If Not IsMissing(DatumEnde) Then
rs.setValue "EndeDatum", CDate(DatumEnde)
End If
If Not IsMissing(PrueferStart) Then
rs.setValue "PrueferStart", CInt(PrueferStart)
End If
If Not IsMissing(PrueferEnde) Then
rs.setValue "PrueferEnde", CInt(PrueferEnde)
End If
If Not IsMissing(Stopdatum) Then
rs.setValue "Stopdatum", CDate(Stopdatum)
End If
If Not IsMissing(strBemerkung) Then
If Not rs.isFieldNull("Bemerkung") Then
If Trim(rs.getStringValue("Bemerkung")) <> "" Then
strBemerkung = rs.getStringValue("Bemerkung") & "," & strBemerkung
Else
strBemerkung = strBemerkung
End If
End If
rs.setValue "Bemerkung", Left(CStr(strBemerkung), 250)
End If
rs.update
Exit Sub
Errorhandler:
LogIntoDB "Fehler " & Err.Number & " in RZPruefgangSpeichern:" & Err.Description, "RZPruefung"
End Sub
Private Function GetGrundFuerRZ() As String
Dim strSchicht As String
Dim strStart As String
Dim strEnde As String
strSchicht = g_App.Settings.getRZPruefzeitraum()
If UBound(Split(strSchicht, "-")) = 1 Then
strStart = Split(strSchicht, "-")(0)
strEnde = Split(strSchicht, "-")(1)
If time() * 1 >= CDate(strStart) * 1 Or time() * 1 <= CDate(strEnde) * 1 Then
' innerhalb des RZ-Prüfzeitraums, z.B. nach 21:30 abends oder vor 6:00 morgens
GetGrundFuerRZ = ""
Else
' ausserhalb des RZ-Prüfzeitraums
Do While Trim(GetGrundFuerRZ) = ""
GetGrundFuerRZ = InputBox("Die RZ Prüfung liegt außerhalb der dafür vorgesehenen Zeit (" & strStart & "-" & strEnde & " Uhr) . Bitte geben Sie den Grund der RZ Prüfung für statistisch Zwecke an.")
Loop
End If
Else
LogIntoDB "Ini Wert '" & strSchicht & "' für RZPruefzeitraum ist nicht auswertbar.", "INI Werte"
End If
End Function
Private Function RZFehlerWeichtAb(dblFehlerAktuell As Double, varFehlerVorher As Variant) As Boolean
If IsEmpty(varFehlerVorher) Then
RZFehlerWeichtAb = False
Else
varFehlerVorher = CDbl(varFehlerVorher)
End If
If Abs(dblFehlerAktuell - varFehlerVorher) > g_App.Settings.get_RZ_Wiederholgenauigkeit() Then
RZFehlerWeichtAb = True
Else
RZFehlerWeichtAb = False
End If
End Function
'Public Sub RZPruefungvorzeitigAbbrechenWegenAbweichung(intNW As Integer, strStrang As String, dblFehler As Double, dbLetzterFehler As Double, dblDurchfluss As Double, strInfo As String, datTimestamp As Date, ReferenzzaehlerA As CRefzaehler, ReferenzzaehlerB As CRefzaehler)
' Dim strMeldung As String
' Dim strTextMail As String
' Dim objSQL As CSQL
' Dim rs As CRecordset
' Dim strSQL As String
' Dim strFehler As String
' Dim i As Integer
'
' Set objSQL = New CSQL
' Set rs = New CRecordset
'
' Call Abbruch
'
' If Not ReferenzzaehlerA Is Nothing And Not ReferenzzaehlerB Is Nothing Then
'
'
' ' RZFehler lesen und löschen
' strSQL = "SELECT * FROM Referenzzaehlerfehler where Datum = " & FormatDateForSQL(datTimestamp, g_App.getDB.getConnection) & " and (SerienNr = " & ReferenzzaehlerA.SerienNr & " or SerienNr = " & ReferenzzaehlerB.SerienNr & ")"
' Debug.Print strSQL
'
' rs.openRS strSQL
' strFehler = ""
' Do While Not rs.EOF
' For i = 1 To 10
' If rs.isFieldNull("PP" & i & "_Soll_Q") Then
' Exit For
' End If
' strFehler = strFehler & "SNr=" & rs.getLongValue("SerienNr") & ": Q=" & Round(rs.getDoubleValue("PP" & i & "_Soll_Q"), 3) & ", F=" & Round(rs.getDoubleValue("PP" & i & "_Fehler"), 3) & vbCrLf
' Next
' rs.delete
' rs.MoveNext
' Loop
' End If
'
' strMeldung = "Die Referenzzählerprüfung wurde automatisch abgebrochen an der Prüfstation " & g_App.PruefstationNr & "." & vbCrLf
' strMeldung = strMeldung & "Es wurde wiederholt ein RZ-Fehler ermittelt," & vbCrLf
' strMeldung = strMeldung & "dessen Wert die Abweichungstoleranz " & g_App.Settings.get_RZ_Wiederholgenauigkeit() & "%" & "überschritten hat." & vbCrLf
'
' strMeldung = strMeldung & "Strang: " & strStrang & vbCrLf
' strMeldung = strMeldung & "Nennweite: " & intNW & " mm " & vbCrLf
' strMeldung = strMeldung & "Durchfluss: " & Round(dblDurchfluss, 4) & vbCrLf
' strMeldung = strMeldung & "Fehler " & Round(dblFehler, 3) & vbCrLf
' strMeldung = strMeldung & "letzter Fehler: " & Round(dbLetzterFehler, 3) & vbCrLf
' strMeldung = strMeldung & strInfo & vbCrLf
' strMeldung = strMeldung & "Folgende RZ-Fehler wurden wieder gelöscht:" & vbCrLf
' strMeldung = strMeldung & strFehler & vbCrLf
' strMeldung = strMeldung & "Bis zur Klärung des Sachverhalts ist die Prüfstation nur bedingt einsatzbereit:" & vbCrLf
' strMeldung = strMeldung & "Es können nur Zähler, deren Prüfpunkte nicht im Bereich des Referenzzählers liegen, geprüft werden." & vbCrLf
' strMeldung = strMeldung & "Bitte informieren Sie die Prüfstellenleitung!" & vbCrLf
'
' PrintStatus strMeldung
'
' Printer.Print strMeldung
' Printer.EndDoc
'
' strTextMail = "Die Referenzzaehlerprüfung an Prüfstation " & g_App.PruefstationNr & " wurde automatisch abgebrochen." & vbCrLf
' strTextMail = strTextMail & "Die Abweichungstoleranz " & g_App.Settings.get_RZ_Wiederholgenauigkeit & " wurde überschritten." & vbCrLf
' strTextMail = strTextMail & "Strang: " & strStrang & vbCrLf
' strTextMail = strTextMail & "Nennweite: " & intNW & " mm " & vbCrLf
' strTextMail = strTextMail & "Durchfluss: " & Round(dblDurchfluss, 4) & vbCrLf
' strTextMail = strTextMail & "Fehler " & Round(dblFehler, 3) & vbCrLf
' strTextMail = strTextMail & "letzter Fehler: " & Round(dbLetzterFehler, 3) & vbCrLf
' strTextMail = strTextMail & strInfo & vbCrLf
' strTextMail = strTextMail & "Folgende RZ-Fehler wurden wieder gelöscht:" & vbCrLf
' strTextMail = strTextMail & strFehler & vbCrLf
' strTextMail = strTextMail & vbCrLf
' strTextMail = strTextMail & "Bis zur Klärung des Sachverhalts ist die Prüfstation nur bedingt einsatzbereit:" & vbCrLf
' strTextMail = strTextMail & "Es können nur Zähler, deren Prüfpunkte nicht im Bereich des Referenzzählers liegen, geprüft werden." & vbCrLf
'
' SendMail "reinhard.henning@sensus.com", "reinhard.henning@sensus.com;Arno.Schramm@sensus.com;Juergen.Dreyer@sensus.com", "RefZ. Wiederholgenauigkeit ueberschritten an der Prüfstation " & g_App.PruefstationNr, strTextMail
'
'
' MsgBox strMeldung
' m_strGrund = m_strGrund & ", Wiederholgenauigkeit überschritten"
' Exit Sub
'Errorhandler:
' LogIntoDB "Fehler " & Err.Number & " in RZPruefungvorzeitigAbbrechenWegenAbweichung:" & Err.Description, "Softwaretest"
' MsgBox "Fehler " & Err.Number & " in RZPruefungvorzeitigAbbrechenWegenAbweichung:" & Err.Description
'End Sub
Private Sub ZeigeAbweichungstext(ByVal wdh As Integer, ByVal FehlerNeu As Double, ByVal FehlerAlt As Double, ByVal Durchfluss As Double, ByRef Referenzzaehler As CRefzaehler, ByVal Timestamp As Date)
Dim intNW As Integer
Dim strStrang As String
intNW = Referenzzaehler.Nennweite
strStrang = Referenzzaehler.MidGruppe
PrintStatus "Abweichung in der " & wdh & ". Wiederholung bei Prüfpunkt mit Q=" & Durchfluss & ", Referenzzähler bei NW " & intNW & ", Strang " & strStrang
' If Not m_objFrmRZFehlerAbweichung Is Nothing Then
' m_objFrmRZFehlerAbweichung.AddText "Abweichung in der " & wdh & ". Wiederholung bei Prüfpunkt mit Q=" & Durchfluss & ", Referenzzähler bei NW " & intNW & ", Strang " & strStrang
' End If
End Sub
Private Sub SaveWiederholungen(SerienNr As Long, Timestamp As Date, Wiederholungen As Integer, Fehler As Double, QSoll As Double)
On Error GoTo Errorhandler
Dim strSQL As String
Dim rs As CRecordset
strSQL = "SELECT * from ReferenzzaehlerFehlerWdh where 1=0"
Set rs = New CRecordset
rs.openRS strSQL, False
rs.addNew
Call rs.setValue("SerienNr", SerienNr)
Call rs.setValue("Datum", Timestamp)
Call rs.setValue("QSoll", QSoll)
Call rs.setValue("Wdh", Wiederholungen)
Call rs.setValue("Fehler", Fehler)
rs.update
Exit Sub
Errorhandler:
LogIntoDB "Fehler " & Err.Number & " in SaveWiederholungen: " & Err.Description, "unerwartet"
End Sub
Private Sub ZeigeSimulation(StatusPruefpunktWdh As STATUS_WDH_RZ_PRUEFPUNKT, strPretext As String)
Dim strText As String
Select Case StatusPruefpunktWdh
Case STATUS_WDH_RZ_PRUEFPUNKT.ABWEICHUNG_BEI_ERSTER_PRUEFUNG
strText = "ABWEICHUNG_BEI_ERSTER_PRUEFUNG"
Case STATUS_WDH_RZ_PRUEFPUNKT.ABWEICHUNG_BEI_ERSTER_WIEDERHOLUNG
strText = "ABWEICHUNG_BEI_ERSTER_WIEDERHOLUNG"
Case STATUS_WDH_RZ_PRUEFPUNKT.ABWEICHUNG_BEI_ZWEITER_WIEDERHOLUNG
strText = "ABWEICHUNG_BEI_ZWEITER_WIEDERHOLUNG"
Case STATUS_WDH_RZ_PRUEFPUNKT.INNERHALB_FEHLERGRENZEN_BEI_ERSTER_PRUEFUNG
strText = "INNERHALB_FEHLERGRENZEN_BEI_ERSTER_PRUEFUNG"
Case STATUS_WDH_RZ_PRUEFPUNKT.INNERHALB_FEHLERGRENZEN_BEI_ERSTER_WIEDERHOLUNG
strText = "INNERHALB_FEHLERGRENZEN_BEI_ERSTER_WIEDERHOLUNG"
Case STATUS_WDH_RZ_PRUEFPUNKT.INNERHALB_FEHLERGRENZEN_BEI_ZWEITER_WIEDERHOLUNG
strText = "INNERHALB_FEHLERGRENZEN_BEI_ZWEITER_WIEDERHOLUNG"
Case STATUS_WDH_RZ_PRUEFPUNKT.NOCH_NICHT_GEPRUEFT
strText = "NOCH_NICHT_GEPRUEFT"
End Select
MsgBox strPretext & " Status=" & strText
End Sub