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

8219 lines
331 KiB
Plaintext

VERSION 5.00
Object = "{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.2#0"; "MSCOMCTL.OCX"
Object = "{5E9E78A0-531B-11CF-91F6-C2863C385E30}#1.0#0"; "msflxgrd.ocx"
Begin VB.Form frmUSFW2Hauptprf
BorderStyle = 1 'Fest Einfach
Caption = "Pruef2000"
ClientHeight = 11715
ClientLeft = 150
ClientTop = 510
ClientWidth = 15255
LinkTopic = "Form1"
MaxButton = 0 'False
MinButton = 0 'False
ScaleHeight = 11715
ScaleWidth = 15255
StartUpPosition = 3 'Windows-Standard
WindowState = 2 'Maximiert
Begin VB.Frame frMain
Height = 10305
Left = 30
TabIndex = 0
Top = 60
Width = 15195
Begin VB.CheckBox chkProtokolldruck
Caption = "Prüf-Protokoll drucken"
Height = 315
Left = 11700
TabIndex = 101
Top = 5820
Width = 1965
End
Begin VB.TextBox txtBemerkung
Height = 345
Left = 10650
TabIndex = 93
Top = 300
Visible = 0 'False
Width = 1695
End
Begin VB.CommandButton cmdCancel
Caption = "Zurück"
BeginProperty Font
Name = "MS Sans Serif"
Size = 9.75
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 675
Left = 13260
TabIndex = 88
Top = 9420
Width = 1335
End
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 = 675
Left = 10560
TabIndex = 87
Top = 9420
Width = 1335
End
Begin VB.Frame frameKontinuierlich
Height = 945
Left = 7500
TabIndex = 67
Top = 8400
Width = 6165
Begin VB.TextBox txtKontCount
Alignment = 1 'Rechts
Height = 315
Left = 5190
TabIndex = 73
Text = "10"
Top = 180
Width = 465
End
Begin VB.CommandButton cmdStart
Caption = "START"
Height = 285
Left = 2670
TabIndex = 70
ToolTipText = "kontinuierliche Ultraschall-Zähler Prüfung"
Top = 600
Width = 975
End
Begin VB.TextBox txtFlowMax
Alignment = 1 'Rechts
Height = 315
Left = 1020
TabIndex = 69
Top = 150
Width = 915
End
Begin VB.TextBox txtFlowMin
Alignment = 1 'Rechts
Height = 315
Left = 2640
TabIndex = 68
Top = 180
Width = 915
End
Begin VB.ComboBox cmbKontSprung
Height = 315
ItemData = "frmUSFW2Hauptprf.frx":0000
Left = 990
List = "frmUSFW2Hauptprf.frx":0010
TabIndex = 77
ToolTipText = "Hier kann auch direkt ein Wert 10-90% eingegeben werden"
Top = 540
Width = 1365
End
Begin VB.Label Label22
Caption = "Schrittweite"
Height = 285
Left = 90
TabIndex = 76
Top = 600
Width = 855
End
Begin VB.Label Label21
Caption = "%"
Height = 255
Left = 2430
TabIndex = 75
Top = 600
Width = 195
End
Begin VB.Label Label19
Caption = "verbleibene Anzahl"
Height = 195
Left = 3750
TabIndex = 74
Top = 240
Width = 1425
End
Begin VB.Label Label14
Caption = "Von Qmax"
Height = 195
Left = 60
TabIndex = 72
Top = 210
Width = 795
End
Begin VB.Label Label15
Caption = "bis Qmin"
Height = 195
Index = 0
Left = 1980
TabIndex = 71
Top = 240
Width = 645
End
End
Begin VB.Frame Frame1
Caption = "Fortschritt"
Height = 3555
Left = 120
TabIndex = 52
Top = 6540
Width = 3795
Begin MSComctlLib.ProgressBar ProgressBar1
Height = 225
Left = 150
TabIndex = 60
Top = 2820
Width = 3375
_ExtentX = 5953
_ExtentY = 397
_Version = 393216
Appearance = 1
End
Begin VB.CommandButton cmdDauerEnde
Caption = "Abbruch"
Enabled = 0 'False
BeginProperty Font
Name = "Arial"
Size = 9.75
Charset = 0
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Left = 2550
TabIndex = 59
Top = 930
Width = 975
End
Begin VB.Label Label16
Alignment = 1 'Rechts
Caption = "Prüfgang Nr.:"
Height = 225
Left = 270
TabIndex = 66
Top = 3180
Width = 1035
End
Begin VB.Label lblPruefgangNr
BackColor = &H00FFFFFF&
BorderStyle = 1 'Fest Einfach
Height = 315
Left = 1410
TabIndex = 65
Top = 3120
Width = 1065
End
Begin VB.Label Label10
Caption = "Sekunden"
Height = 285
Left = 2580
TabIndex = 64
Top = 360
Width = 855
End
Begin VB.Label Label9
Caption = "Minuten"
Height = 285
Left = 2550
TabIndex = 63
Top = 2280
Width = 825
End
Begin VB.Label Label8
Alignment = 1 'Rechts
Caption = "Ges. Zeit"
Height = 285
Left = 240
TabIndex = 62
Top = 2280
Width = 825
End
Begin VB.Label lblGesZeit
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 = 345
Left = 1170
TabIndex = 61
Top = 2220
Width = 1275
End
Begin VB.Label Label15
Alignment = 1 'Rechts
Caption = "Zeit (PP):"
Height = 285
Index = 1
Left = 240
TabIndex = 58
Top = 360
Width = 825
End
Begin VB.Label Label11
Alignment = 1 'Rechts
Caption = "Dauerprüfung:"
Height = 285
Left = 90
TabIndex = 57
Top = 960
Width = 1035
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 = 345
Left = 1170
TabIndex = 56
Top = 930
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 = 345
Left = 1170
TabIndex = 55
Top = 300
Width = 1305
End
Begin VB.Label Label6
Alignment = 1 'Rechts
Caption = "Langprüfung:"
Height = 255
Left = 120
TabIndex = 54
Top = 1590
Width = 975
End
Begin VB.Label lblLang
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 = 345
Left = 1170
TabIndex = 53
Top = 1560
Width = 1275
End
End
Begin VB.Frame Frame2
Caption = "Meßwertabweichung"
BeginProperty Font
Name = "Arial"
Size = 9.75
Charset = 0
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 4155
Left = 3300
TabIndex = 50
Top = 720
Width = 11325
Begin MSFlexGridLib.MSFlexGrid MSFlexGrid1
Height = 3855
Left = 180
TabIndex = 51
Top = 240
Width = 11055
_ExtentX = 19500
_ExtentY = 6800
_Version = 393216
Rows = 11
AllowBigSelection= 0 'False
AllowUserResizing= 1
BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851}
Name = "Arial"
Size = 12
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
End
End
Begin VB.ListBox lstPruefpunkte
Height = 2400
Left = 13830
TabIndex = 48
Top = 5940
Width = 1215
End
Begin VB.Frame frameVerblImpulse
Caption = "Pruef2000"
BeginProperty Font
Name = "Arial"
Size = 9.75
Charset = 0
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 5775
Left = 120
TabIndex = 23
Top = 720
Width = 3045
Begin VB.Label lblPZImpulse
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 = 345
Index = 10
Left = 1800
TabIndex = 92
Top = 3840
Width = 1095
End
Begin VB.Label lblVerbleib
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 = 345
Index = 10
Left = 600
TabIndex = 91
Top = 3840
Width = 1095
End
Begin VB.Label LblNummer
Caption = "10"
BeginProperty Font
Name = "Arial"
Size = 12
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Index = 10
Left = 120
TabIndex = 90
Top = 3900
Width = 315
End
Begin VB.Label lblVerbleib
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 = 345
Index = 9
Left = 600
TabIndex = 86
Top = 3450
Width = 1095
End
Begin VB.Label lblVerbleib
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 = 345
Index = 8
Left = 600
TabIndex = 85
Top = 3060
Width = 1095
End
Begin VB.Label lblVerbleib
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 = 345
Index = 7
Left = 600
TabIndex = 84
Top = 2670
Width = 1095
End
Begin VB.Label LblNummer
Caption = "7"
BeginProperty Font
Name = "Arial"
Size = 12
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Index = 7
Left = 180
TabIndex = 83
Top = 2730
Width = 315
End
Begin VB.Label LblNummer
Caption = "8"
BeginProperty Font
Name = "Arial"
Size = 12
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 375
Index = 8
Left = 180
TabIndex = 82
Top = 3120
Width = 315
End
Begin VB.Label LblNummer
Caption = "9"
BeginProperty Font
Name = "Arial"
Size = 12
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Index = 9
Left = 180
TabIndex = 81
Top = 3510
Width = 315
End
Begin VB.Label lblPZImpulse
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 = 345
Index = 8
Left = 1800
TabIndex = 80
Top = 3060
Width = 1095
End
Begin VB.Label lblPZImpulse
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 = 345
Index = 7
Left = 1800
TabIndex = 79
Top = 2670
Width = 1095
End
Begin VB.Label lblPZImpulse
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 = 345
Index = 9
Left = 1800
TabIndex = 78
Top = 3450
Width = 1095
End
Begin VB.Label lblPZImpulse
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 = 345
Index = 6
Left = 1800
TabIndex = 47
Top = 2250
Width = 1095
End
Begin VB.Label lblPZImpulse
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 = 345
Index = 5
Left = 1800
TabIndex = 46
Top = 1860
Width = 1095
End
Begin VB.Label lblPZImpulse
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 = 345
Index = 4
Left = 1800
TabIndex = 45
Top = 1470
Width = 1095
End
Begin VB.Label lblPZImpulse
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 = 345
Index = 3
Left = 1800
TabIndex = 44
Top = 1080
Width = 1095
End
Begin VB.Label lblPZImpulse
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 = 345
Index = 2
Left = 1800
TabIndex = 43
Top = 690
Width = 1095
End
Begin VB.Label lblPZImpulse
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 = 345
Index = 1
Left = 1800
TabIndex = 42
Top = 300
Width = 1095
End
Begin VB.Label LblNummer
Caption = "6"
BeginProperty Font
Name = "Arial"
Size = 12
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Index = 6
Left = 180
TabIndex = 41
Top = 2310
Width = 315
End
Begin VB.Label LblNummer
Caption = "5"
BeginProperty Font
Name = "Arial"
Size = 12
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 375
Index = 5
Left = 180
TabIndex = 40
Top = 1920
Width = 315
End
Begin VB.Label LblNummer
Caption = "4"
BeginProperty Font
Name = "Arial"
Size = 12
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Index = 4
Left = 180
TabIndex = 39
Top = 1530
Width = 315
End
Begin VB.Label LblNummer
Caption = "3"
BeginProperty Font
Name = "Arial"
Size = 12
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Index = 3
Left = 180
TabIndex = 38
Top = 1140
Width = 315
End
Begin VB.Label LblNummer
Caption = "2"
BeginProperty Font
Name = "Arial"
Size = 12
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Index = 2
Left = 180
TabIndex = 37
Top = 750
Width = 315
End
Begin VB.Label LblNummer
Caption = "1"
BeginProperty Font
Name = "Arial"
Size = 12
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Index = 1
Left = 180
TabIndex = 36
Top = 360
Width = 315
End
Begin VB.Label lblVerbleib
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 = 345
Index = 1
Left = 600
TabIndex = 35
Tag = "#1"
Top = 300
Width = 1095
End
Begin VB.Label lblVerbleib
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 = 345
Index = 2
Left = 600
TabIndex = 34
Top = 690
Width = 1095
End
Begin VB.Label lblVerbleib
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 = 345
Index = 3
Left = 600
TabIndex = 33
Top = 1080
Width = 1095
End
Begin VB.Label lblVerbleib
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 = 345
Index = 4
Left = 600
TabIndex = 32
Top = 1470
Width = 1095
End
Begin VB.Label lblVerbleib
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 = 345
Index = 5
Left = 600
TabIndex = 31
Top = 1860
Width = 1095
End
Begin VB.Label lblVerbleib
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 = 345
Index = 6
Left = 600
TabIndex = 30
Top = 2250
Width = 1095
End
Begin VB.Label Label1
Caption = "RZ"
BeginProperty Font
Name = "Arial"
Size = 12
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Index = 12
Left = 60
TabIndex = 29
Top = 4350
Width = 315
End
Begin VB.Label lblVerbleibRZ
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 = 345
Left = 600
TabIndex = 28
Top = 4290
Width = 1095
End
Begin VB.Label lblVerbleibRZA
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 = 345
Left = 600
TabIndex = 27
Top = 4710
Width = 1095
End
Begin VB.Label lblVerbleibRZB
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 = 345
Left = 600
TabIndex = 26
Top = 5130
Width = 1095
End
Begin VB.Label Label1
Caption = "A"
BeginProperty Font
Name = "Arial"
Size = 12
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Index = 13
Left = 120
TabIndex = 25
Top = 4770
Width = 375
End
Begin VB.Label Label1
Caption = "B"
BeginProperty Font
Name = "Arial"
Size = 12
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Index = 14
Left = 120
TabIndex = 24
Top = 5160
Width = 375
End
End
Begin VB.Frame Frame4
Caption = "Soll-Durchfluss"
Height = 735
Left = 7560
TabIndex = 16
Top = 5010
Width = 3285
Begin VB.CommandButton cmdQSollMinus
Caption = "QSoll -"
Enabled = 0 'False
Height = 375
Left = 1170
TabIndex = 18
Top = 240
Width = 915
End
Begin VB.CommandButton cmdQSollPlus
Caption = "QSoll +"
Enabled = 0 'False
Height = 375
Left = 180
TabIndex = 17
Top = 240
Width = 915
End
Begin VB.Label lblQSoll
BackColor = &H00C0C0C0&
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 = 2160
TabIndex = 19
Top = 270
Width = 915
End
End
Begin VB.Frame Frame5
Height = 2745
Left = 7500
TabIndex = 3
Top = 5670
Width = 4065
Begin VB.Label lblWasserdruck
Alignment = 1 'Rechts
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 = 2220
TabIndex = 99
Top = 1980
Width = 1095
End
Begin VB.Label Label26
Caption = "bar"
BeginProperty Font
Name = "Arial"
Size = 9.75
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Left = 3360
TabIndex = 98
Top = 2010
Width = 465
End
Begin VB.Label Label24
Alignment = 1 'Rechts
Caption = "Wasserdruck:"
BeginProperty Font
Name = "Arial"
Size = 9.75
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Left = 450
TabIndex = 97
Top = 2010
Width = 1635
End
Begin VB.Label Label28
Caption = "°C"
BeginProperty Font
Name = "Arial"
Size = 9.75
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Left = 3360
TabIndex = 96
Top = 2370
Width = 465
End
Begin VB.Label Label29
Alignment = 1 'Rechts
Caption = "Vorlauf Temperatur:"
BeginProperty Font
Name = "Arial"
Size = 9.75
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Left = 90
TabIndex = 95
Top = 2370
Width = 2025
End
Begin VB.Label lblTemperatur
Alignment = 1 'Rechts
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 = 2220
TabIndex = 94
Top = 2340
Width = 1095
End
Begin VB.Label lblGrenzwert
Alignment = 1 'Rechts
BackColor = &H80000004&
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 = 2220
TabIndex = 22
Top = 540
Width = 1095
End
Begin VB.Label Label13
Caption = "kg"
BeginProperty Font
Name = "Arial"
Size = 9.75
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 345
Left = 3390
TabIndex = 21
Top = 540
Width = 375
End
Begin VB.Label Label12
Alignment = 1 'Rechts
Caption = "Waagengrenzwert:"
BeginProperty Font
Name = "Arial"
Size = 9.75
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 255
Left = 120
TabIndex = 20
Top = 540
Width = 1965
End
Begin VB.Label Label7
Caption = "l"
BeginProperty Font
Name = "Arial"
Size = 9.75
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 345
Left = 3390
TabIndex = 15
Top = 1290
Width = 405
End
Begin VB.Label lblFehlerRZ
Alignment = 1 'Rechts
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 = 2220
TabIndex = 14
Top = 1620
Width = 1095
End
Begin VB.Label lblLabelFehlerRZ
Alignment = 1 'Rechts
Caption = "Fehler RZ:"
BeginProperty Font
Name = "Arial"
Size = 9.75
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Left = 420
TabIndex = 13
Top = 1620
Width = 1635
End
Begin VB.Label Label5
Caption = "%"
BeginProperty Font
Name = "Arial"
Size = 9.75
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Left = 3420
TabIndex = 12
Top = 1650
Width = 255
End
Begin VB.Label Label4
Caption = "kg"
BeginProperty Font
Name = "Arial"
Size = 9.75
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Left = 3420
TabIndex = 11
Top = 930
Width = 375
End
Begin VB.Label Label2
Alignment = 1 'Rechts
Caption = "Soll Volumen:"
BeginProperty Font
Name = "Arial"
Size = 9.75
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Left = 420
TabIndex = 10
Top = 1260
Width = 1635
End
Begin VB.Label lblSollV
Alignment = 1 'Rechts
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 = 2220
TabIndex = 9
Top = 1260
Width = 1095
End
Begin VB.Label lblQIst
Alignment = 1 'Rechts
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 = 2220
TabIndex = 8
Top = 180
Width = 1095
End
Begin VB.Label Label3
Alignment = 1 'Rechts
Caption = "Durchfluß:"
BeginProperty Font
Name = "Arial"
Size = 9.75
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 285
Left = 510
TabIndex = 7
Top = 180
Width = 1545
End
Begin VB.Label lblGewicht
Alignment = 1 'Rechts
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 = 2220
TabIndex = 6
Top = 900
Width = 1095
End
Begin VB.Label lblGewichtLabel
Alignment = 1 'Rechts
Caption = "Gewicht:"
BeginProperty Font
Name = "Arial"
Size = 9.75
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Left = 900
TabIndex = 5
Top = 870
Width = 1155
End
Begin VB.Label Label20
Caption = "m³/h"
BeginProperty Font
Name = "Arial"
Size = 9.75
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 315
Left = 3390
TabIndex = 4
Top = 210
Width = 645
End
End
Begin VB.CommandButton cmdStop
Caption = "STOP"
Enabled = 0 'False
BeginProperty Font
Name = "Arial"
Size = 12
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 675
Left = 7560
TabIndex = 2
Top = 9420
Width = 1335
End
Begin VB.TextBox txtStatus
Height = 5175
Left = 4110
MultiLine = -1 'True
ScrollBars = 2 'Vertikal
TabIndex = 1
Top = 4950
Width = 3285
End
Begin VB.Label lblAutoSize
AutoSize = -1 'True
BorderStyle = 1 'Fest Einfach
Caption = "lblAutosize"
Height = 255
Left = 8580
TabIndex = 100
Top = 300
Visible = 0 'False
Width = 1170
End
Begin VB.Label lblTitle
Alignment = 2 'Zentriert
Caption = "Ultraschallzähler Prüfung FW2"
BeginProperty Font
Name = "MS Sans Serif"
Size = 12
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 375
Left = 120
TabIndex = 89
Top = 210
Width = 12015
End
Begin VB.Label Label18
Caption = "Prüfpunkte:"
Height = 195
Left = 13920
TabIndex = 49
Top = 5700
Width = 1005
End
End
End
Attribute VB_Name = "frmUSFW2Hauptprf"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
' von aufrufender Form zu setzende Member
' ---------------------------------------
' Für Regulierung und Prüfzaehler Prüfung
Public m_colUniquePP As CPruefpunktCol
Public m_colUniqueVorPP As CVorpruefpunktCol
Public m_bKontinuierlich As Boolean
Public m_colEinbauplatz As Collection
Public m_ParentForm As Form
' Für Regulierung
Public m_Regulierdaten As CRegulierdaten
Public m_RegulierPruefpunkt As CPruefpunkt
Private m_vorPruefpunktQi As CVorpruefpunkt
Public m_bAutomatik As Boolean
' Public m_bKeineRegulierung As Boolean
Public m_AnzahlPZ As Integer
' Für Prüfzaehlerprüfung
Public m_ImpulswertigkeitPZ As Long
Private m_JustageCount As String
Public m_bDauerpruefung As Boolean
Public m_DauerpruefungAnzahl As Integer
Public m_PruefungsArtWaage As Boolean
Public m_VorPruefungsArtWaage As Boolean
Public m_bPruefgangLang As Boolean
Public m_Regelart As String ' FU, Servo
Public m_NurMesseinsaetze As Boolean
Public m_Pruefgang As CPruefgang
Public m_RegulierungVerwenden As Boolean
Public mbln_Vorpruefung As Boolean
Public mbln_Hauptpruefung As Boolean
'''Public mbln_Vorjustage As Boolean
Public mbln_Bereichsjustage As Boolean
Public mbln_nachjustage As Boolean
Public mbln_Funktionspruefung As Boolean
Public mbln_ZeroFlowMessung As Boolean
Public mbln_HeissKaltSpreizungBerechnen As Boolean
Public mbln_ZeroFlowJustage As Boolean 'OGeber bestimmen
Public mblnExternalTemperatur As Boolean
' Private Member
' --------------
Private m_PPDauerpruefung As Double
Private dummy As Variant
Private mblnAbbruch As Boolean
Private m_nRet As Integer
Private m_SPS As CSPS
Private m_FMBus As CFMBus
Private m_ColPumpen As Collection
Private m_Pruefpunkt As CPruefpunkt
Private m_vorPruefpunkt As CVorpruefpunkt
Private FormActivated As Boolean
Private m_ZaehlerPP As Integer
Private m_DurchflussSoll As Double
Private m_DurchflussSollManuell As Double
Private m_Pumpe As CPumpe
Private m_Referenzzaehler As CRefzaehler
Private m_ReferenzzaehlerA As CRefzaehler
Private m_ReferenzzaehlerB As CRefzaehler
Private m_PruefpunktFertig As Boolean
Private m_DauerStop As Boolean
Private m_laeuft As Boolean 'Status Prüfung läuft
Private m_QBehalten As Boolean
Private m_Startzeit As Long
Private m_Pruefzeit As Integer
Private m_DauerpruefungZaehler As Integer
Private m_GesZeitZaehler As Long
Private PP_Ist_Zeit As Long
Private AuftragpositionSerienNr As CAuftragPositionSerienNr
Private m_VolumenSoll As Double
Private FehlerInPruefgangLang(3, 10) As Double
Private ZaehlerPruefgangLang As Integer
Private PruefgangLangPruefpunktWiederholen As Boolean
Private m_ersterPruefzaehler As CPruefzaehler
Private m_ersterPruefzaehlerNr As Integer
Private m_ArrayBehaelter() As CBehaelter
Private m_Behaelter As CBehaelter
Private m_BehaelterNr As Integer
Private m_Waage As CWaage
Private m_DruckMsg As String
Private m_Tstart As Long 'Bezugszeitpunkt: Start der Prüfung
Private m_Tpruef As Long ' Sollprüfzeit aller US Zähler
Private m_Zeitrahmenzaehler As Long 'Index des aktuellen Zeitrahmens
Private ResultFilePath As String
Private m_AnwahlLetzterBehaelter As Long
Private mudtMessDaten(10) As TYPE_MessDaten
Private strFunktionsPruefungMsg As String
Private m_bVoreinstellwertSetzen As Boolean
Private m_dblTemperaturVergleich As Double
Private mobjMittelwertTemperatur As clsMittelwert
Private Type TypUSPruefdaten
' Enthält alle Daten, die für eine Ultraschallzähler-Prüfung relevant sind
' für einen bestimmten Zähler in einem bestimmten Prüfpunkt
' Solldurchfluß Q des Prüfpunktes
SollDurchfluss As Double ' in M^3/h
' Sollprüfzeit des Prüfpunktes in s
SollPruefzeit_s As Long
' Temperatur zur halben Prüfzeit
dblTemperatur As Double
' Ermitteltes Volumen aus den RZ/FM85 und US Zählern
VolumenRZ As Double
VolumenUS As Double
VolumenWaage As Double
' echte Prüfzeit zwischen USZaehler Start und Stop in ms
US_IstPruefzeit_ms As Double
' echte Prüfzeit zwischen Referenzzaehler Start und Stop in ms
RZ_IstPruefzeit_ms As Long '
NOWA_START_Rueckkehrzeitpunkt As Long
NOWA_STOP_Rueckkehrzeitpunkt As Long
RZ_START_Rueckkehrzeitpunkt As Long
RZ_STOP_Rueckkehrzeitpunkt As Long
StartzeitpunktRZ As Long
StartzeitpunktUS As Long
Stopzeitpunkt As Long
Fehlerinfo As String
Fehler As Double
' zukünftig:
dtmIstPruefzeit As Double
dtmStartZeit As Double
dtmMittelzeit As Double
dtmStoppzeit As Double
blnPruefungsfehler As Boolean
JustageParameter As JustageParameter_Type
End Type
' neu RH! 19.7.2002
Private Type US_ZusatzParameter_Typ
FP_Impulswertigkeit As Double '---Impulswertigkeit normale Ausgabe
FP_Impulswertigkeit_Pruef As Double '---Impulswertigkeit normale Ausgabe
PulseMode As Byte '---PulseMode (PolluFlow=1,PolluStat=2)
FP_Flow_Min As Double '---Minimaler Durchfluß
FP_Flow_Max As Double
End Type
Const dtmZEITRAHMENDAUER As Date = 1 / 24 / 60 / 60 / 1000 * 1000 'ms
Const ZEITRAHMENDAUER As Long = 4000 ' Dauer des Zeitrahmens in msec
Const DELTA_START As Long = 2000 'Zeitlicher Versatz in msec zwischen dem Start des Referenzzählers und NOWA_START
Const DELTA_FM As Long = 0 'Korrekturkonstante: Zeit in msec, um die die tatsächliche Prüfzeit des FM85 größer ist als die Sollprüfzeit, verursacht durch die längere Stopzeit
Const DELTA_US As Long = 0 'Korrekturkonstante: Zeit in msec, um die die tatsächliche Prüfzeit des US-Zählers größer ist als die Sollprüfzeit, verursacht durch die längere Stopzeit
Const FEHLER_ZUSPAET As Long = -15
Const KEIN_FEHLER As Long = 0
Const KEINE_ANTWORT_FEHLER As Long = -16
'--------------------------------------------------------------------
' @return Code, mit dem endDialog aufgerufen wurde
'
Public Function getExitCode() As Integer
getExitCode = m_nRet
End Function
' Dialog beenden
'
' @param nRet Returncode des Dialogs
'
Private Sub endDialog(nRet As Integer)
m_nRet = nRet
Unload Me
End Sub
Private Sub cmdAbbruch_Click()
g_Abbruch = True
End Sub
Private Sub cmdCancel_Click()
If m_laeuft Then
ErrorMsg ("Sie müssen die Prüfung zuerst stoppen")
Else
endDialog (IDCANCEL)
End If
End Sub
Private Sub cmdDauerEnde_Click()
PrintStatus "Dauerprüfung wird nach diesem Prüfgang beendet"
cmdDauerEnde.caption = "Dauer-P endet !"
cmdDauerEnde.Enabled = False
m_DauerStop = True
End Sub
'Private Sub cmdOK_Click()
' If m_laeuft Then
' ErrorMsg ("Sie müssen die Prüfung zuerst stoppen")
' Else
' endDialog (IDOK)
' End If
'End Sub
Private Sub cmdQSollMinus_Click()
If Not g_ohneSPS Then
m_DurchflussSollManuell = CDbl(Format(m_DurchflussSollManuell * 0.99, "0.000"))
m_SPS.SetQSoll m_DurchflussSollManuell
PrintStatus "Nächster Durchfluss: " & m_DurchflussSollManuell
lblQSoll.caption = m_DurchflussSollManuell
End If
End Sub
Private Sub cmdQSollPlus_Click()
If Not g_ohneSPS Then
m_DurchflussSollManuell = CDbl(Format(m_DurchflussSollManuell * 1.01, "0.000"))
m_SPS.SetQSoll m_DurchflussSollManuell
PrintStatus "Nächster Durchfluss: " & m_DurchflussSollManuell
lblQSoll.caption = m_DurchflussSollManuell
End If
End Sub
Private Sub cmdSPSInfo_Click()
Call g_App.getSPS().ActivateProTool
End Sub
Private Sub Abbruch(Optional strGrund As String = "")
Dim dlg As frmAbbruch
Set dlg = New frmAbbruch
' Abbruch-Button deaktivieren
cmdStop.Enabled = False
' Flags setzen
g_Abbruch = True
m_laeuft = False
If Not g_ohneSPS Then
' SPS zurücksetzen
m_SPS.setBetrieb 0
m_SPS.AbwahlPumpe 1
m_SPS.AbwahlPumpe 2
m_SPS.AbwahlPumpe 3
m_SPS.AbwahlPumpe 5
m_SPS.SetNurMesseinsaetze False
m_SPS.WassserAblassen 0
m_SPS.SetServoStellung 50
End If
Call ResetPruefung
lblQIst.caption = ""
dlg.m_strGrund = strGrund
dlg.Show vbModal
m_Pruefgang.Bemerkung = dlg.m_strGrund
m_Pruefgang.save
endDialog IDCANCEL
End Sub
Private Sub cmdStop_Click()
PrintStatus "Es wurde auf Stop gedückt. Abbrechen..."
g_Abbruch = True
Call Abbruch("Es wurde auf Stop gedrückt")
End Sub
Private Sub ResetPruefung()
cmdDauerEnde.caption = "Dauer-P beenden"
cmdQSollPlus.Enabled = False
cmdQSollMinus.Enabled = False
m_laeuft = False
End Sub
Private Sub Form_Load()
Dim PPNr As Integer
Dim Index As Integer
Me.Width = Screen.Width
Me.Height = Screen.Height
Me.caption = "Pruef2000 FW2 Ultraschallzähler Konfigurationsvergleich Version" & g_App.AppVersion
Call centerFormInScreen(Me)
Set m_SPS = g_App.getSPS
' Temperatur-Mittelwert-Objekt erzeugen
Set mobjMittelwertTemperatur = New clsMittelwert
mobjMittelwertTemperatur.setMax 10
Set m_FMBus = g_App.getFMBus
Set m_ColPumpen = g_App.Settings.getPumpen
m_ZaehlerPP = 0
'cmdOK.Enabled = False
cmdCancel.Enabled = True
' Behälter Konfiguration aus Ini Lesen
' Set m_ArrayBehaelter(1) = New CBehaelter
' Set m_ArrayBehaelter(2) = New CBehaelter
' m_ArrayBehaelter(1).LoadFromIni (1)
' m_ArrayBehaelter(2).LoadFromIni (2)
For Index = 1 To 10
Set m_Behaelter = New CBehaelter
If m_Behaelter.LoadFromIni(Index) Then
ReDim Preserve m_ArrayBehaelter(Index)
Set m_ArrayBehaelter(Index) = m_Behaelter
Else
Set m_Behaelter = Nothing
Exit For
End If
Next
Set m_Waage = g_App.getWaage
If Not g_ohneSPS Then
m_SPS.setBehaelter 1 ' durchlauf
m_SPS.SetQSoll 0
m_SPS.setBetrieb 8 ' Bits zurücksetzen
Sleep 100, True
m_SPS.setBetrieb 0 ' kein Start, kein Stop, kein Programmende
End If
MSFlexGrid1.Clear
If g_blnVorpruefung3malQiMittelwert Then
MSFlexGrid1.Cols = 1 + m_colUniqueVorPP.Count + 3
Else
MSFlexGrid1.Cols = 1 + m_colUniqueVorPP.Count
End If
If MSFlexGrid1.Cols < 2 Then MSFlexGrid1.Cols = 2
MSFlexGrid1.Rows = g_App.Settings.EinbauplaetzeJeStrang + 1
MSFlexGrid1.row = 0
MSFlexGrid1.col = 0
MSFlexGrid1.text = "FabNr SNr.\ Q [m³/h]"
txtBemerkung.Visible = False
' Listbox mit allen Durchflüssen füllen
lstPruefpunkte.Clear
PPNr = 0
For Each m_vorPruefpunkt In m_colUniqueVorPP.getCollection
PPNr = PPNr + 1
MSFlexGrid1.row = 0
MSFlexGrid1.col = PPNr
MSFlexGrid1.text = m_vorPruefpunkt.getQ
lstPruefpunkte.AddItem (CStr(m_vorPruefpunkt.getQ))
Next m_vorPruefpunkt
If m_bKontinuierlich Then
frameKontinuierlich.Visible = True
Else
frameKontinuierlich.Visible = False
End If
m_AnwahlLetzterBehaelter = 0
For Index = 1 To 10
If Index > g_App.Settings.EinbauplaetzeJeStrang Then
lblVerbleib(Index).Visible = False
lblPZImpulse(Index).Visible = False
LblNummer(Index).Visible = False
End If
Next
If g_blnPruefprotokoll Then chkProtokolldruck.value = vbChecked
End Sub
Private Sub Form_Activate()
If Not FormActivated Then
FormActivated = True
DoEvents
Call Hauptpruefung
End If
FormActivated = True
End Sub
Private Sub DurchflussLstAktualisieren()
Dim i As Integer
' Balkenanzeige in der Liste der Durchflüsse aktualisieren
For i = 0 To lstPruefpunkte.ListCount - 1
If Format(lstPruefpunkte.List(i), "0.000") = Format(m_DurchflussSoll, "0.000") Then
lstPruefpunkte.Selected(i) = True
Else
lstPruefpunkte.Selected(i) = False
End If
Next
End Sub
' Hauptprüfung mit Referenzzaehler
Private Sub Hauptpruefung()
Dim dummy As Variant
Dim Einbauplatz As CEinbauplatz
Dim Pruefzaehler As CPruefzaehler
Dim bFehlerermittelt As Boolean
Dim Impulse As Long
Dim blnPruefungFertig As Boolean
Dim blnHalbzeit As Boolean
Dim PeriodendauerPZ As Long
Dim PeriodendauerRZ As Long
Dim PeriodendauerRefZ1 As Long
Dim PeriodendauerRefZ2 As Long
Dim k As Double
Dim Fehler As Double
Dim FehlerRefZ As Double
Dim FehlerRefZA As Double
Dim FehlerRefZB As Double
Dim QIst As Double
Dim PPNr As Integer
Dim tmpPPNr As Integer
Dim PPZeit As Date
Dim StartZeit As Date
Dim PPSollZeit As Long
Dim dblTemperatur As Double
Dim PZCount As Integer
Dim bImpulsTest As Boolean
Dim bPPQIstSaved As Boolean
Dim i As Integer
Dim lngRet As Long
Dim lngStartzeit As Long
Dim EinbauplatzNr As Integer
Dim Gewicht As Double
Dim BehaelterVolumen As Double
Dim Waagengrenzwert As Double
Dim GesZeit As Double
Dim tmpPruefpunkt As CPruefpunkt
Dim tmpVorpruefpunkt As CVorpruefpunkt
Dim dblVolumenRZ As Double
Dim dblVolumenUS As Double
Dim dblDurchflussRZ As Double
Dim dblDurchflussUS As Double
Dim US_COMport As Integer
Dim udtPruefdaten_imPP_mitEBP(10) As TypUSPruefdaten
Dim Voreinstellwert As Integer
On Error GoTo Errorhandler
' SPS Parameter zurücksetzen
' Durchlauf
'm_SPS.setBehaelter 1
g_Abbruch = False
' Formular und Flags zurücksetzen
cmdStop.Enabled = True
m_SPS.setBetrieb 8
Sleep 300
m_SPS.setBetrieb 0
m_laeuft = True
lblPruefgangNr.caption = m_Pruefgang.PruefgangNr
' Einstellung für Vergleichsprüfung-Modus in der SPS testen
TestReferenzPrf:
If Not g_ohneSPS Then
If m_SPS.IstRefZPrf Then
dummy = MsgBox("Bitte SPS auf Hauptzähler Vergleichs-Prüfung stellen", vbOKCancel)
If dummy = vbCancel Then
endDialog (IDCANCEL)
Exit Sub
End If
GoTo TestReferenzPrf
End If
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
Debug.Print g_App.PruefstationTyp
If g_App.PruefstationNr = 2020 Then
' es darf kein warmes Wasser im Behälter kalt werden
Call BeideBehaelterLeeren
End If
End If
If m_PruefungsArtWaage Then
Call WaageZuruecksetzen
End If
' klären Todo: warum diesen Behälter ?
'm_SPS.setBehaelter 2
PrintStatus "alle Behälter leeren bis Prüfmenge nicht mehr erreicht..."
If Not g_ohneSPS Then
m_SPS.WassserAblassen 0
' beide Behälter leeren bis Prüfmenge nicht mehr erreicht
Sleep 500
m_SPS.WassserAblassen 1 + 2 + 4 + 8
Sleep 2000
If m_SPS.GrenzwertWaageErreicht Then
Sleep 5000
Do While m_SPS.GrenzwertWaageErreicht
Sleep 1000, True
If g_Abbruch = True Then
Exit Sub
End If
Loop
End If
m_SPS.WassserAblassen 0
End If ' Testmodus
' klären Todo: warum diesen Behälter ?
'm_SPS.setBehaelter 1
' Pruefgang Daten setzen mit Eigenschaften des ersten Zählers
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If Not Pruefzaehler Is Nothing Then
Set m_ersterPruefzaehler = Pruefzaehler
m_ersterPruefzaehlerNr = Einbauplatz.getNr
m_Pruefgang.Typ = Pruefzaehler.getIdentNrObj.getTyp
m_Pruefgang.Typzusatz = Pruefzaehler.getIdentNrObj.getTypzusatz
m_Pruefgang.Nennweite = Pruefzaehler.getIdentNrObj.getNennweite
m_Pruefgang.Nenntemperatur = Pruefzaehler.getIdentNrObj.GetTemperatur
PrintStatus "Neue Hauptpruefung"
PrintStatus "------------------"
PrintStatus "Pruefgang Daten:"
PrintStatus "Typ: " & m_Pruefgang.Typ
PrintStatus "Nennweite: " & m_Pruefgang.Nennweite
PrintStatus "Nenntemperatur: " & m_Pruefgang.Nenntemperatur
PrintStatus "Waage statt Referenzzaehler: " & CStr(m_PruefungsArtWaage)
Exit For
End If
Next Einbauplatz
'If Not SindPruefzeitenOK() Then
' Call Abbruch("falsche Prüfzeiten für Behälter")
' Exit Sub
'End If
' Flag für PruefgangLang im Pruefgang-Objekt für Tabelle Pruefgang setzen:
m_Pruefgang.PruefgangLang = m_bPruefgangLang
PrintStatus "Pruefgang Lang: " & CStr(m_bPruefgangLang)
' Pruefpunkte absteigend sortieren nach Durchfluessen
'm_colUniquePP.sortQ
If Not g_ohneSPS Then
' Einstellung für Automatik-Modus in der SPS testen
m_SPS.setBetrieb 8 ' Bits zurücksetzen
Sleep 300
m_SPS.setBetrieb 0 ' kein Start, kein Stop, kein Programmende
PrintStatus "Teste auf Prüfbereitschaft"
Sleep 3000, True
If Not m_SPS.IstStreckePruefbereit Then
' Betrieb Vorbereiten
If MsgBox("Soll die Strecke jetzt automatisch gespannt u. gefüllt werden?", vbYesNo Or vbDefaultButton2, "SPS meldet: Strecke ist nicht prüfbereit") = vbYes Then
'??? m_SPS.setBehaelter DURCHLAUF
' beim Abbrechen war kein Prüfbereit. Hier kommt die SPS Meldung: Füllen in kl Behälter nicht möglich
m_SPS.setBetrieb 1
PrintStatus "Betrieb vorbereiten: Spannen und Füllen..."
Do While Not m_SPS.IstStreckeGefuellt
Sleep 1000, True
If g_Abbruch = True Then
Exit Sub
End If
Loop
' nach dem Füllen: Betrieb auf 0
Sleep 500
m_SPS.setBetrieb 0
End If
'------------------------------------------------------------------------
PrintStatus "Warte auf Pruefbereitschaft der SPS..."
Do While Not m_SPS.IstStreckePruefbereit
Sleep 1000, True
If g_Abbruch = True Then
Exit Sub
End If
Loop
End If
End If
PrintStatus "Strecke ist Prüfbereit !"
'---------------------------------------------------------------
' vorraussichtliche Pruefzeit ausrechnen
tmpPPNr = 0
GesZeit = 0
For Each tmpPruefpunkt In m_colUniquePP.getCollection
tmpPPNr = tmpPPNr + 1
If m_bPruefgangLang And tmpPPNr = m_colUniquePP.Count Then
GesZeit = GesZeit + tmpPruefpunkt.GetTime * 3
Else
GesZeit = GesZeit + tmpPruefpunkt.GetTime
End If
Next
GesZeit = GesZeit * m_DauerpruefungAnzahl / 60
m_GesZeitZaehler = 0
lblGesZeit.caption = Format(m_GesZeitZaehler, "#0.0") & "/" & Format(GesZeit, "#0.0")
' vor einer Justage die Temperatur für alle Ultraschallzählung einmal messen und in alle Rechenwerk setzten
If mblnExternalTemperatur Then
UpdateTemperaturInZaehlerFW2 True
End If
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Vorprüfung mit Justage bei Qmax und Qmin
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
If mbln_Vorpruefung Then
lblTitle.caption = "FW2 Ultraschall-Zähler Vorprüfung (Justage)"
' Zu beginn der Vorprüfung die Systemzeit zurücksetzen wegen OptoTimeout
If g_blnFW2_Systemzeit_setzen = True Then
Call FW2_SetTimeToZero(Einbauplatz)
End If
Dim intJustageCount As Integer
For intJustageCount = 1 To g_intAnzahlFW2Justage
'''''''''''''''''''''''''' Vorprüfung / Justage '''''''''''''''''''''''''
lblTitle.caption = "FW2 Ultraschall-Zähler Vorprüfung (Justage) " & intJustageCount & " / " & g_intAnzahlFW2Justage
m_JustageCount = intJustageCount & " / " & g_intAnzahlFW2Justage
PrintStatus intJustageCount & ". Durchlauf der Justage"
' Todo erste Vorprüfung gegen RefZ , 2. gegen Waage
If False Then
If intJustageCount = 1 Then
' Prf gegen RefZ
m_VorPruefungsArtWaage = False
Else
m_VorPruefungsArtWaage = True
End If
End If
If Vorpruefung() < 0 Then
g_Abbruch = True
End If
Next
Call Sleep(2000, True)
'If g_blnPruefprotokoll Then
' PrintGrid MSFlexGrid1, 15, 50, 10, 10, "Fehlerwerte der Justage", Format(Now, "dd.mm.yyyy hh:mm"), 0
'End If
If m_VorPruefungsArtWaage Then
PrintStatus "Behälter-Wasser von der Justage ablassen..."
BeideBehaelterLeeren
End If
End If
If g_Abbruch Then
'Call Abbruch("Es ist ein Fehler in der Vorprüfung aufgetreten.")
Exit Sub
End If
If m_bKontinuierlich Then
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Kontinuierliche
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Call KontinuierlichePruefungInit
Exit Sub
End If
If Not mbln_Hauptpruefung Then
GoTo EndeDerHauppruefung
Else
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Hauptprüfung
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
lblTitle.caption = "FW2 Ultraschall-Zähler Hauptprüfung"
End If
If g_Abbruch Then
Exit Sub
End If
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Schleifenbeginn Hauptprüfung / Dauerprüfung
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
StartZeit = Now()
m_DauerStop = False
If m_DauerpruefungAnzahl > 1 Then
cmdDauerEnde.Enabled = True
End If
For m_DauerpruefungZaehler = 1 To m_DauerpruefungAnzahl
m_DruckMsg = ""
' Pruefgang wird komplett, aber ohne Regulierung wiederholt
PrintStatus "Dauerprf.: " & m_DauerpruefungZaehler & " / " & m_DauerpruefungAnzahl
lblDauer.caption = m_DauerpruefungZaehler & " / " & m_DauerpruefungAnzahl
PPNr = 0 ' Zaehler für Pruefpunkte , 1 = Qmax,
If m_DauerpruefungZaehler > 1 Then
' Neuer Pruefgang-Eintrag in der Datenbank
m_Pruefgang.save
Set m_Pruefgang = Nothing
Set m_Pruefgang = New CPruefgang
m_Pruefgang.Typ = m_ersterPruefzaehler.getIdentNrObj.getTyp
m_Pruefgang.Nennweite = m_ersterPruefzaehler.getIdentNrObj.getNennweite
m_Pruefgang.Nenntemperatur = m_ersterPruefzaehler.getIdentNrObj.GetTemperatur
PrintStatus "neuer Prüfgang gestartet"
lblPruefgangNr.caption = m_Pruefgang.PruefgangNr
End If
'Geändert 28.04.2004 Andreas Pfeiffer
'zur Zeit darf diese Zuweisung nur bei St. 2015 und 2016 erfolgen
'diese Abfrage erweitern um die Stationen, die entsprechende Messungen
'in ProTool zu Verfügung stellen
'If m_Pruefgang.PruefstationNr = 2015 Or m_Pruefgang.PruefstationNr = 2016 Then
' m_Pruefgang.RelativeFeuchte = m_SPS.GetRelativeFeuchte
' m_Pruefgang.Lufttemperatur = m_SPS.GetLuftTemperatur
'End If
' Pruefgang abspeichern und neue Prüfgangnummer erzeugen
m_Pruefgang.save
lblPruefgangNr.caption = m_Pruefgang.PruefgangNr
' Listbox mit allen Durchflüssen füllen
lstPruefpunkte.Clear
For Each tmpPruefpunkt In m_colUniquePP.getCollection
lstPruefpunkte.AddItem Format(tmpPruefpunkt.getQ, "0.000")
Next
' Anzahl der Pruefzähler zählen, wird in Pruefgang Tabelle eingetragen
' FlexGrid dimensionieren
MSFlexGrid1.Clear
PZCount = 0
MSFlexGrid1.Cols = 1 + m_colUniquePP.Count
MSFlexGrid1.row = 0
MSFlexGrid1.col = 0
MSFlexGrid1.text = "FabNr SNr.\ Q "
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
MSFlexGrid1.row = Einbauplatz.getNr
MSFlexGrid1.col = 0
If Not Pruefzaehler Is Nothing Then
WriteToFW2Logfile Einbauplatz, "PrüfgangNr=" & vbTab & m_Pruefgang.PruefgangNr
If m_DauerpruefungAnzahl > 1 Then
WriteToFW2Logfile Einbauplatz, "Dauerprüfung=" & vbTab & m_DauerpruefungZaehler & " / " & m_DauerpruefungAnzahl
End If
''MSFlexGrid1.text = FormatSerienNr(Pruefzaehler.getSerienNr) & " F:" & Pruefzaehler.getAuftragPositionSerienNr.getFabNr
MSFlexGrid1_AnzeigeSerienNrFabNr Pruefzaehler
PZCount = PZCount + 1
' Änderung am 22.8.2002 Reinhard Henning:
Pruefzaehler.getAuftragPositionSerienNr.setPruefgangNr m_Pruefgang.PruefgangNr
Pruefzaehler.getAuftragPositionSerienNr.setEinbauplatzNr Einbauplatz.getNr
Pruefzaehler.getAuftragPositionSerienNr.setPruefgangDatum m_Pruefgang.Datum
' erst mal zurücksetzen
Pruefzaehler.getAuftragPositionSerienNr.setStatusFertigung 22
' Hochzählen des Wiederholungszählers (-1 = Original Datensatz, 0 = 1. Pruefung, 1 = 1.Wdh, 2 = 2.Wdh , usw.
Pruefzaehler.getAuftragPositionSerienNr.setWiederholungen Pruefzaehler.getAuftragPositionSerienNr.getWiederholungen + 1
' Bemerkungen brauchen nicht vererbt werden ??? Todo: klären
' Pruefzaehler.getAuftragPositionSerienNr.setBemerkung ""
' alle anderen Angaben in AuftragPositionSeriennr werden von der vorherigen Wiederholung vererbt
Pruefzaehler.getAuftragPositionSerienNr.setAnlageDatum Now()
Pruefzaehler.getAuftragPositionSerienNr.setAnlageMitarbeiterNr g_App.Mitarbeiter.getNr
'Angaben für Änderung löschen
Pruefzaehler.getAuftragPositionSerienNr.setAenderungDatum Empty
Pruefzaehler.getAuftragPositionSerienNr.setAenderungMitarbeiterNr Empty
' Metrologische Klasse unter der diese Prüfung durchgeführt wurde
Pruefzaehler.getAuftragPositionSerienNr.setMetrolog Pruefzaehler.getPruefklasseKZ
' AuftragPositionsobjekt als neuen Datensatz speichern
PrintStatus "neuer Datensatz in AuftragPosSerNr mit Pruefgang=" & m_Pruefgang.PruefgangNr & ", SerNr=" & FormatSerienNr(Pruefzaehler.getSerienNr) & ", Wdh=" & Pruefzaehler.getAuftragPositionSerienNr.getWiederholungen
Pruefzaehler.getAuftragPositionSerienNr.SetEinbaulage Einbauplatz.m_strEinbaulage
Pruefzaehler.getAuftragPositionSerienNr.save True
' Der aktuelle Status des Zählers wird in das Rechenwerk übertragen.
' Prüfung läuft oder geprüft FAIL (vor der Prüfung)
Call modUSchall.FW2_writeVar(Einbauplatz, "u8_hydraulik_flag_KEV1", CByte(1))
'''''''''''''''''''''''''''''''''''''
' neu RH 4.12.2013, 9.12.2013
' RW Werte vor der Prüfung dokumentieren
'''''''''''''''''''''''''''''''''''''
Dim dblWert As Double
dblWert = 0
If modUSchall.FW2_ReadVar(Einbauplatz, "f_fp_k_geber1", dblWert) = 0 Then
WriteToFW2Logfile Einbauplatz, "f_fp_k_geber1=" & vbTab & dblWert
End If
dblWert = 0
If modUSchall.FW2_ReadVar(Einbauplatz, "f_fp_k_geber2", dblWert) = 0 Then
WriteToFW2Logfile Einbauplatz, "f_fp_k_geber2=" & vbTab & dblWert
End If
dblWert = 0
If modUSchall.FW2_ReadVar(Einbauplatz, "f_fp_o_geber_roh", dblWert) = 0 Then
WriteToFW2Logfile Einbauplatz, "f_fp_o_geber_roh=" & vbTab & dblWert
End If
End If
Next Einbauplatz
For i = 1 To m_colUniquePP.Count
MSFlexGrid1.row = 0
MSFlexGrid1.col = i
If m_colUniquePP.Item(i).getQ = Int(m_colUniquePP.Item(i).getQ) Then
'Ganze Zahl
MSFlexGrid1.text = Format(m_colUniquePP.Item(i).getQ, "0") & " "
Else
'Liter Angabe erforderlich mit 3 Stellen hinter Komma
MSFlexGrid1.text = Format(m_colUniquePP.Item(i).getQ, "0.###") & " "
End If
Next
m_Pruefgang.Anzahl = PZCount
PrintStatus "Anzahl eingebaute Pruefzähler: " & CStr(PZCount)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Schleife für alle Pruefpunkte
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
For Each m_Pruefpunkt In m_colUniquePP.getCollection
For i = 1 To g_App.Settings.EinbauplaetzeJeStrang
lblVerbleib(i).caption = ""
lblPZImpulse(i).caption = ""
Next
DoEvents
If g_Abbruch Then
Exit Sub
End If
PrintStatus "--------------------------------------"
' Für diesen PP wurde noch kein QIst gespeichert
bPPQIstSaved = False
' Zähler für PP in PP Collection: PPNr = 1 bei Qmax
PPNr = PPNr + 1
PrintStatus "nächster Pruefpunkt (" & PPNr & " / " & m_colUniquePP.Count & "): " & m_Pruefpunkt.getQ
' Dauer dieses Pruefpunktes
m_Pruefzeit = m_Pruefpunkt.GetTime
PrintStatus "Soll-Pruefzeit für diesen PP: " & m_Pruefzeit & " sec"
m_DurchflussSoll = m_Pruefpunkt.getQ
lblQSoll.caption = m_DurchflussSoll
' Durchfluß ist nun änderbar
cmdQSollPlus.Enabled = True
cmdQSollMinus.Enabled = True
m_DurchflussSollManuell = m_DurchflussSoll
' Balkenanzeige in der Liste der Durchflüsse aktualisieren
Call DurchflussLstAktualisieren
' Referenzzähler wechseln
' ----------------------
' für den Referenzzaehler-Vergleich herangezogene Referenzzaehler
Set m_ReferenzzaehlerA = New CRefzaehler
' Referenzzaehler in Abbhängigkeit vom Durchfluß und INI Datei bestimmen
m_ReferenzzaehlerA.loadForDurchfluss m_DurchflussSoll, 1
If Not g_ohneSPS Then
mobjMittelwertTemperatur.AddWert m_SPS.GetEinlaufTemperatur
Else
mobjMittelwertTemperatur.AddWert 20
End If
dblTemperatur = mobjMittelwertTemperatur.GetWert
FehlerRefZA = m_ReferenzzaehlerA.letzterFehler(m_DurchflussSoll, dblTemperatur)
PrintStatus "Letzter Fehler des Referenzzählers A(interpoliert): " & Format(FehlerRefZA, "0.00") & "% bei T=" & Format(dblTemperatur, "0") & " °C"
If g_App.Settings.getAnzahlMIDGruppen > 1 Then
Set m_ReferenzzaehlerB = New CRefzaehler
m_ReferenzzaehlerB.loadForDurchfluss m_DurchflussSoll, 2
FehlerRefZB = m_ReferenzzaehlerB.letzterFehler(m_DurchflussSoll, dblTemperatur)
PrintStatus "Letzter Fehler des Referenzzählers B(interpoliert): " & Format(FehlerRefZB, "0.00") & "% bei T=" & Format(dblTemperatur, "0") & " °C"
' Aktiven Referenzzähler auswählen
Select Case g_App.Settings.getMIDGruppe
Case 1
Set m_Referenzzaehler = m_ReferenzzaehlerA
PrintStatus "Aktive RefZ-Gruppe ist A"
FehlerRefZ = FehlerRefZA
Case 2
Set m_Referenzzaehler = m_ReferenzzaehlerB
PrintStatus "Aktive RefZ-Gruppe ist B"
FehlerRefZ = FehlerRefZB
Case Else
ErrorMsg ("MID-Gruppe in INI Datei ungültig: MidGr. A gewählt")
Set m_Referenzzaehler = m_ReferenzzaehlerA
FehlerRefZ = FehlerRefZA
End Select
Else
Set m_Referenzzaehler = m_ReferenzzaehlerA
PrintStatus "Aktive RefZ-Gruppe ist A"
FehlerRefZ = FehlerRefZA
End If
lblFehlerRZ.caption = Format(FehlerRefZ, "0.00")
' Referenzzaehler Daten für Pruefpunkt speichern
m_Pruefgang.PP_RefZSerienNr(PPNr) = m_Referenzzaehler.SerienNr
If m_DurchflussSoll = 0 Then
PrintStatus "Durchfluß ist 0, wird übersprungen"
Else
' Schleife PruefgangLang initialisieren
ZaehlerPruefgangLang = 0
PruefgangLangPruefpunktWiederholen = False
SchleifenanfangPruefgangLang:
' SchleifenanfangPruefgangLang:
' PPNr und Q bleibt
' -----------------------------
PrintStatus "Schleifenbeginn Prüfgang Lang, Zaehler=" & ZaehlerPruefgangLang
lblLang.caption = ZaehlerPruefgangLang
' Startzeit für diesen Pruefpunkt festhalten
PPZeit = Now
For Each Einbauplatz In m_colEinbauplatz
If Not Einbauplatz.getPruefzaehler Is Nothing Then
If Einbauplatz.getPruefzaehler.getPruefpunkte.hasQ(m_DurchflussSoll) Then
udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).SollDurchfluss = m_DurchflussSoll
udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).SollPruefzeit_s = m_Pruefzeit
WriteToFW2Logfile Einbauplatz, ""
WriteToFW2Logfile Einbauplatz, "-----------"
WriteToFW2Logfile Einbauplatz, "Prüfpunkt Nr=" & vbTab & PPNr
WriteToFW2Logfile Einbauplatz, "Soll-Durchfluss [m³/h]=" & vbTab & m_DurchflussSoll
WriteToFW2Logfile Einbauplatz, "Soll-Prüfzeit [s]=" & vbTab & m_Pruefzeit
Else
' Dieser Zähler wird in diesem PP nicht geprüft
udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).SollDurchfluss = 0
udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).SollPruefzeit_s = 0
End If
If g_blnFW2_Systemzeit_setzen = True Then
Call FW2_SetTimeToZero(Einbauplatz)
End If
End If
Next
If mblnExternalTemperatur Then
UpdateTemperaturInZaehlerFW2 True
End If
If Not m_PruefungsArtWaage Then
' Vergleichsprüfung gegen RefZ: erst Pumpen starten, dann messen mit FM85
' SPS für diesen Prüfpunkt initialisieren:
' FM85 für Periodendauermessung für diesen Prüfpunkt initialisieren
' Da neuer Pruefpunkt, Pruefpunkt neu initialisieren
If Not g_ohneSPS Then
Call initSPSfuerPP
Call initSPSfuerDurchlauf
' WarteAufStartfreigabe
PrintStatus "checke Pruefbereitschaft der SPS "
Do While Not m_SPS.IstStreckePruefbereit
Sleep 1000, True
If g_Abbruch = True Then
Exit Sub
End If
Loop
End If ' testModus
PrintStatus "Warten auf Solldurchfluß erreicht..."
If Not g_ohneSPS Then
' Vergleichsprüfung gegen RefZ
' Pruefung starten
m_SPS.setBetrieb 2
Do While Not m_SPS.SolldurchflussErreicht
lblQIst.caption = Format(m_SPS.getQIst, "0.000")
Sleep 500, True
'Debug.Print m_SPS.GetStellwert
mobjMittelwertTemperatur.AddWert m_SPS.GetEinlaufTemperatur
If g_Abbruch = True Then
Exit Sub
End If
Loop
' Durchflußanzeige RefIstWert korrigiert
QIst = m_SPS.getQIst
PrintStatus "Solldurchfluss erreicht bei Q=" & Format(QIst, "0.000")
lblQIst.caption = Format(QIst, "0.000")
' FM85 für Periodendauermessung für diesen Pruefpunkt initialisieren
Call initFM85fuerPP
End If ' g_ohneSPS
Else
'PruefungsArt ist Waage
' ZeitSoll, Durchfluß -> SollVolumen
' -> Behälter
' -> Waage
' Behälter leeren
' erst Messung mit FM85 ,
' dann Pumpen starten
' Todo: Behälter Zuleitung füllen
' Messung gegen Waage/Behälter in der SPS vorbereiten
' ---------------------------------------------------
' Betrieb stoppen und Pumpen Abwählen
' Durchfluß vorgabe
' Pumpe auswählen und anwählen
' Regelart und Regel-Position setzen
' MID Strang setzen
' Pruefung mit Waage
' --------------------
' geschätzes Volumen in Litern
' Behälterauswahl
' Waagenauswahl
' Behälter leeren oder füllen
' Tara
' Waagengrenzwert setzen
BeideBehaelterLeeren
If WaageVorbereitenFuerPP() < 0 Then
Call Abbruch("Waage konnte nicht vorbereitet werden (falsches SollVolumen)")
Exit Sub
End If
If g_Abbruch Then
Exit Sub
End If
Call initSPSfuerPP
If g_Abbruch Then
Exit Sub
End If
' Anzeige Füllmenge
lblGewicht.caption = ""
' Sollvolumen für Waagengrenzwert:
' m_VolumenSoll = (m_Pruefzeit / 3600) * m_DurchflussSoll
' lblSollV.Caption = Format(m_VolumenSoll * 1000, "0")
' Waagengrenzwert in Litern entspricht kg
' Waagengrenzwert = m_VolumenSoll * 1000 - m_DurchflussSoll * m_Behaelter.m_nUeberlaufFaktor
' PrintStatus "setze Waagengrenzwert: " & Waagengrenzwert & " kg"
' lblGrenzwert.Caption = Format(Waagengrenzwert, "0")
' Grenzwert an Waage übergeben
' m_Waage.SetNettoGrenzwert1 Waagengrenzwert, m_Behaelter.m_Genauigkeit
' Warte auf Startfreigabe
PrintStatus "Warte auf Startfreigabe"
Do While Not m_SPS.IstStreckePruefbereit
Sleep 1000, True
If g_Abbruch = True Then
Exit Sub
End If
Loop
' Impulszählung programmieren
' Call initFM85fuerPP_Waage
If g_Abbruch Then
Exit Sub
End If
End If
' wieder beide Prüfungsarten (Waage und Vergleich)
' Anzeige diverser SPS Parameter:
' Betriebsanzeige Pumpen,
' Pumpendrehzahl,
' Leistungsanzeige FU,
' Pruefgang Daten aktualisieren
m_Pruefgang.PP_Soll(PPNr) = m_DurchflussSoll
dblTemperatur = m_SPS.GetEinlaufTemperatur
m_Pruefgang.PP_T_Start(PPNr) = dblTemperatur
' Prüfgang Daten in DB synchronisieren
m_Pruefgang.save
' ' Zeit in s in der der erste Impuls erwartet wird
' ImpulsTestZeit = (3600 / (m_DurchflussSoll * m_ImpulswertigkeitPZ)) * 2
' PrintStatus "Pulsabstand: " & Format(ImpulsTestZeit / 2, "0.0") & " s min."
' ImpulsTestZeit = ImpulsTestZeit
' PrintStatus "Wartezeit auf 1. Impuls = " & Format(ImpulsTestZeit, "0.0") & " s"
' AnzahlZaehlerOhneImpulse = 0
' bImpulsTest = False
'''''''''''''''''''''''''''''''''''''
' M E S S U N G
'''''''''''''''''''''''''''''''''''''
m_Startzeit = GetTickCount()
If g_ohneSPS Then
dblTemperatur = 20
Else
mobjMittelwertTemperatur.AddWert m_SPS.GetEinlaufTemperatur
dblTemperatur = mobjMittelwertTemperatur.GetWert
PrintStatus "Einlauftemperatur für diesen PP: " & Format(dblTemperatur, "0.00") & "°C"
End If
For Each Einbauplatz In m_colEinbauplatz
udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).dblTemperatur = dblTemperatur
Next
If m_PruefungsArtWaage Then
''''''''''''''''''''''' mit Waage ''''''''''''''
For Each Einbauplatz In m_colEinbauplatz
EinbauplatzNr = Einbauplatz.getNr
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If (Not Pruefzaehler Is Nothing) And Einbauplatz.getAktiv Then
' dieser Zähler soll geprüft werden
'Die Temperatur muss einmal vor jedem Prüfpunkt gesetzt werden.
If mblnExternalTemperatur Then
lblTemperatur.caption = Format(dblTemperatur, "0.0")
lngRet = FW2_USSetTemperatur(Einbauplatz, dblTemperatur)
If lngRet = 0 Then
PrintStatus "USSetTemperatur OK"
Else
PrintStatus "USSetTemperatur Fehler" & lngRet
End If
End If
'lngRet = FW2_StarteUSundRZZaehler(Einbauplatz)
lngRet = FW2_Starte_NOWA(Einbauplatz)
If lngRet = 0 Then
PrintStatus "NOWA_START OK"
Else
PrintStatus "NOWA_START Fehler:" & lngRet
End If
End If ' PZ is nothing and GetAktive
If g_Abbruch = True Then Exit Sub
Next Einbauplatz
' neu RH 15.2.2013
PrintStatus "warte 2 Sek bevor Pumpe gestartet wird"
Sleep 2000
' Prüfung starten
m_SPS.setBetrieb 2
m_Tstart = GetTickCount
PrintStatus "Pumpe gestartet"
Do While Not ((m_Pumpe.GetStatus And 4) = 4)
If m_SPS.GrenzwertWaageErreicht Then
PrintStatus "Grenzwert erreicht bevor Pumpe läuft"
Exit Do
End If
Sleep 500, True
If g_Abbruch Then
Exit Sub
End If
Loop
PrintStatus "Pumpe läuft"
blnHalbzeit = False
blnPruefungFertig = False
Do While Not blnPruefungFertig
If m_SPS.GrenzwertWaageErreicht Then
PrintStatus "Grenzwert Waage erreicht"
blnPruefungFertig = True
End If
If g_Abbruch Then
Exit Sub
End If
If Not m_Waage Is Nothing Then
lblGewicht.caption = Format(m_Waage.GetGewicht, "0.00")
End If
AnzeigeAktualisieren
'Neu RH 13.3.2008
If (Not blnHalbzeit) And (m_Pruefzeit * CLng(1000)) / 2 + m_Tstart < GetTickCount Then
blnHalbzeit = True
PrintStatus "nach halber Prüfzeit " & (m_Pruefzeit * CLng(1000)) / 2 & " s"
QIst = m_SPS.getQIst
' Wasserdruck messen für Zulassungspruefdaten
g_dblWasserdruck = Round(MesseWasserdruck(), 3)
If g_dblWasserdruck <> -1 Then
PrintStatus "Wasserdruck: " & g_dblWasserdruck
End If
If m_bVoreinstellwertSetzen Then
' 2% höher regeln,
' um den Durchfluß schneller zu erreichen
' Todo: diese Formel von g_App.Settings.GetAnzahlFuerVoreinstellwert
' abhängig machen
Voreinstellwert = m_SPS.GetStellwert + 2 '
PrintStatus "Stellwert: " & m_SPS.GetStellwert
PrintStatus "bei Durchfluss: " & Format(QIst, "0.000") & " m³/h (" & m_DurchflussSoll & ")"
PrintStatus "=> Voreinstellwert " & Voreinstellwert & " speichern"
SetVoreinstellwert m_DurchflussSoll, Voreinstellwert
End If
End If
' Temperatur in den Zähler schreiben
If mblnExternalTemperatur Then
UpdateTemperaturInZaehlerFW2
End If
If g_Abbruch Then
Exit Sub
End If
Sleep 100
DoEvents
Loop
Call m_Behaelter.WarteAufRuhe
For Each Einbauplatz In m_colEinbauplatz
EinbauplatzNr = Einbauplatz.getNr
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If (Not Pruefzaehler Is Nothing) And Einbauplatz.getAktiv Then
lngRet = FW2_StoppeUSundRZZaehler(Einbauplatz)
If lngRet = 0 Then
PrintStatus "RZ-STOP und NOWA_STOP OK"
Else
PrintStatus "RZ-STOP und NOWA_STOP Fehler:" & lngRet
End If
End If ' PZ is nothing and GetActive
Next Einbauplatz
Else
' Prüfung gegen Referenzzähler
Call UltraschallPruefung(udtPruefdaten_imPP_mitEBP())
If g_Abbruch = True Then Exit Sub
End If
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''
' PrintStatus "Warten, bis der Referenzzaehler alle Impulse gezählt hat..."
' AlleImpulseFertig = True
' Do
' ' Verbleibende Referenzzaehlerimpulse in FM85 für RefZ-Vergleich auslesen
' m_FMBus.send "**" & g_FM85RefZAdresse & "@"
' m_FMBus.receive (500)
'
' m_FMBus.send "J"
' Impulse = Val("&H0000" & m_FMBus.receive(500))
' lblVerbleibRZA.Caption = Str(Impulse)
' If Impulse > 0 Then
' AlleImpulseFertig = False
' End If
'
' m_FMBus.send "I"
' Impulse = Val("&H0000" & m_FMBus.receive(500))
' lblVerbleibRZB.Caption = Str(Impulse)
' If Impulse > 0 Then
' AlleImpulseFertig = False
' End If
' Loop While Not AlleImpulseFertig
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
PP_Ist_Zeit = m_Tpruef
m_GesZeitZaehler = m_GesZeitZaehler + PP_Ist_Zeit
lblGesZeit.caption = Format(m_GesZeitZaehler, "#0.0") & "/" & Format(GesZeit, "#0.0")
Stopphase:
m_Pruefgang.PP_Zeit(PPNr) = m_Pruefpunkt.GetTime
m_Pruefgang.save
' Betrieb stop: es ist hier ungewiss, ob Pruefpunkt wiederholt wird wenn Prüefgang Lang
If m_bPruefgangLang And PPNr = m_colUniquePP.Count And Not m_PruefungsArtWaage Then
' Betrieb wird später gestoppt
Else
m_SPS.setBetrieb 8
Sleep 500
m_SPS.setBetrieb 0
lblQIst.caption = ""
PrintStatus "Wasser gestoppt"
End If
' nach dem Qmax soll Wassertemperatur für Prüfgang ermittelt und gespeichert werden
If Not g_ohneSPS Then
dblTemperatur = m_SPS.GetEinlaufTemperatur
Else
dblTemperatur = 20
End If
PrintStatus "Temperatur: " & Format(dblTemperatur, "0.00") & " °C"
m_Pruefgang.PP_T_Ende(PPNr) = dblTemperatur
mobjMittelwertTemperatur.Clear
mobjMittelwertTemperatur.AddWert dblTemperatur
dblTemperatur = mobjMittelwertTemperatur.GetWert
If PPNr = 1 Then
m_Pruefgang.Vorlauftemperatur = dblTemperatur
End If
m_Pruefgang.save
'----------------------------------------------------------------
' Fehlerermittung
'----------------------------------------------------------------
PrintStatus "Fehlerermittlung:"
PrintStatus "-----------------"
If m_PruefungsArtWaage Then
'PrintStatus "Beruhigungsphase..."
'sleep 3000, True
'm_Waage.WarteAufRuhe
If g_Abbruch Then
Call Abbruch("")
Exit Sub
End If
If g_App.Settings.GetBenutzeFuellstandStattWaage() Then
m_Pruefgang.KalibrierID = KALIBRIERUNG.KALIBRIER_ID_Behaelter
Else
m_Pruefgang.KalibrierID = KALIBRIERUNG.KALIBRIER_ID_Waage
End If
Gewicht = m_Waage.GetGewicht
lblGewicht.caption = Format(Gewicht, "0.000")
PrintStatus "Gewicht: " & Format(Gewicht, "0.000") & " kg"
' Volumen in der Waage ermitteln
BehaelterVolumen = Errechne_Volumen_Von_Wasser_in_m3(Gewicht, dblTemperatur)
m_Pruefgang.PP_Waage(PPNr) = m_Behaelter.m_Nr
m_Pruefgang.save
PrintStatus "Volumen in der Waage " & m_BehaelterNr & " : " & BehaelterVolumen & " m³"
Else
m_Pruefgang.KalibrierID = KALIBRIERUNG.KALIBRIER_ID_Referenzzaehler
End If
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If (Not Pruefzaehler Is Nothing) Then
If Einbauplatz.getAktiv Then
If (Not Pruefzaehler.getPruefpunkte Is Nothing) Then
If (Pruefzaehler.getPruefpunkte.hasQ(m_DurchflussSoll) = True) Then
MSFlexGrid1.col = PPNr
MSFlexGrid1.row = Einbauplatz.getNr
dummy = FW2_GetUSVolumen(Einbauplatz, dblVolumenUS)
If dummy = 0 Then
PrintStatus "Volumen des US-" & Einbauplatz.getNr & " [m³]: " & dblVolumenUS
Else
dblVolumenUS = 0
PrintStatus "FW2_GetUSVolumen Fehler: " & dummy & ": " & modMBUS_SMS.Errorstring(CInt(dummy))
End If
If m_PruefungsArtWaage Then
WriteToFW2Logfile Einbauplatz, "Gewicht im Behälter [kg]=" & vbTab & Gewicht
WriteToFW2Logfile Einbauplatz, "Temperatur=" & vbTab & dblTemperatur
WriteToFW2Logfile Einbauplatz, "BehaelterVolumen=" & vbTab & BehaelterVolumen
If BehaelterVolumen > 0 Then
' Fehlerermittlung
' Fehler = (Impulse / Pruefzaehler.GetImpulseQM - BehaelterVolumen) * 100 / BehaelterVolumen
' PrintStatus " PZ" & Einbauplatz.getNr & " Fehler=" & Format(Fehler, "0.00") & " %"
If g_objExternePruefformel Is Nothing Then
PrintStatus "Interne Pruefformel"
PrintStatus " dblVolumenUS = " & dblVolumenUS
PrintStatus " BehaelterVolumen = " & BehaelterVolumen
Fehler = ((dblVolumenUS - BehaelterVolumen) / BehaelterVolumen) * 100
Else
' Fehlerberechnung in Externer DLL, neu RH 30.5.2017
Fehler = modPruefformel.Errechne_Relative_Messabweichung_in_Prozent(dblVolumenUS, BehaelterVolumen, 0)
PrintStatus g_objExternePruefformel.GetLogText
End If
PrintStatus "ermittelter Fehler: " & Format(Fehler, "0.00") & " %"
WriteToFW2Logfile Einbauplatz, "ermittelter Fehler=" & vbTab & Round(Fehler, 3)
Else
Fehler = -99
WriteToFW2Logfile Einbauplatz, "Der Fehler konnte nicht ermittelt werden, weil das gemessene Behältervolumen=" & BehaelterVolumen & " ist."
End If
m_Pruefgang.PP_Ist_V(PPNr) = BehaelterVolumen * 1000
'''''''''''''''''''
Call MesseWetterdaten
m_Pruefgang.LuftDruck = g_dblLuftDruck
If g_dblLuftDruck > 0 Then
DebugMsg "speichern im Prüfgang: LuftDruck [hPa]=" & g_dblLuftDruck
WriteToFW2Logfile Einbauplatz, "Luftdruck [hPa]=" & vbTab & g_dblLuftDruck
End If
m_Pruefgang.Lufttemperatur = g_dblLuftTemperatur
If g_dblLuftTemperatur > 0 Then
WriteToFW2Logfile Einbauplatz, "Lufttemperatur [°C]=" & vbTab & g_dblLuftTemperatur
DebugMsg "speichern im Prüfgang: Lufttemperatur [°C]=" & g_dblLuftTemperatur
End If
m_Pruefgang.RelativeFeuchte = g_dblLuftFeuchte
If g_dblLuftFeuchte > 0 Then
DebugMsg "speichern im Prüfgang: Relative Feuchte [%]=" & g_dblLuftFeuchte
WriteToFW2Logfile Einbauplatz, "Luftfeuchte [%]=" & vbTab & g_dblLuftFeuchte
End If
m_Pruefgang.save
'''''''''''''''''''
WriteToLog "SchreibeZulassungspruefdaten " & g_blnZulassungspruefung & ", Waage, Q=" & m_DurchflussSoll
If g_blnZulassungspruefung Then
Call SchreibeZulassungspruefdaten(Pruefzaehler.getSerienNr, m_Pruefgang.PruefgangNr, m_DurchflussSoll, QIst, dblVolumenUS, dblVolumenRZ, Fehler, dblTemperatur, PPZeit, True)
End If
Else ' (not m_PruefungsArtWaage) Prüfung gegen Refeenzzähler
Call GetRZVolumen(Einbauplatz.getNr, m_Referenzzaehler, dblVolumenRZ)
' Korrektur
DebugMsg "ermitteltes Volumen des RZ: " & dblVolumenRZ & " m³"
WriteToFW2Logfile Einbauplatz, "FM85 Volumen=" & vbTab & dblVolumenRZ
If Not g_ohneSPS Then
mobjMittelwertTemperatur.AddWert m_SPS.GetEinlaufTemperatur
dblTemperatur = mobjMittelwertTemperatur.GetWert
Else
dblTemperatur = 20
End If
WriteToFW2Logfile Einbauplatz, "Fehler RZ=" & vbTab & m_Referenzzaehler.letzterFehler(m_DurchflussSoll, dblTemperatur) & "%"
dblVolumenRZ = dblVolumenRZ / (1 + m_Referenzzaehler.letzterFehler(m_DurchflussSoll, dblTemperatur) / 100)
WriteToFW2Logfile Einbauplatz, "Referenzvolumen [m³]=" & vbTab & dblVolumenRZ
m_Pruefgang.PP_Ist_V(PPNr) = dblVolumenRZ * 1000
Call MesseWetterdaten
m_Pruefgang.RelativeFeuchte = g_dblLuftFeuchte
m_Pruefgang.Lufttemperatur = g_dblLuftTemperatur
m_Pruefgang.LuftDruck = g_dblLuftDruck
DebugMsg "speichern im Prüfgang: LuftDruck [hPa]=" & g_dblLuftDruck
DebugMsg "speichern im Prüfgang: Lufttemperatur [°C]=" & g_dblLuftTemperatur
DebugMsg "speichern im Prüfgang: Relative Feuchte [%]=" & g_dblLuftFeuchte
WriteToFW2Logfile Einbauplatz, "Luftdruck [hPa]=" & vbTab & g_dblLuftDruck
WriteToFW2Logfile Einbauplatz, "Lufttemperatur [°C]=" & vbTab & g_dblLuftTemperatur
WriteToFW2Logfile Einbauplatz, "Luftfeuchte [%]=" & vbTab & g_dblLuftFeuchte
m_Pruefgang.save
DebugMsg "korrigiertes Volumen des RZ: " & dblVolumenRZ & " m³"
If Not dblVolumenRZ = 0 Then
'PrintStatus "Letzter Fehler des Referenzzählers : " & Format(FehlerRefZ, "0.00") & " %"
' Fehler-Formel hergeleitet aus
' Q = ( Impulswertigkeit * Impulse) / Periodendauer
' FPz = (QPz - QRz)/QRz
' Fehler in % (* 100)
'Änderung Andreas Pfeiffer 07.04.00 #0007
'Wenn keine Impulse eingegangen sind soll kein Fehler berechnet werden Fehlwert = 99%
'Fehler Division durch 0 vermeiden und Hinweis in Datenbank auf nicht Funktion
If Not dblVolumenUS = 0 Then
' die Unterschiedlichen Zeiten eliminieren
WriteToFW2Logfile Einbauplatz, "RZ_IstPruefzeit_ms=" & vbTab & udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).RZ_IstPruefzeit_ms
dblDurchflussRZ = dblVolumenRZ / udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).RZ_IstPruefzeit_ms
WriteToFW2Logfile Einbauplatz, "Durchfluss RZ=" & vbTab & dblDurchflussRZ
If udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).US_IstPruefzeit_ms = 0 Then
PrintStatus "Fehler des US-Zählers konnte nicht ermittelt werden, da Stop-Zeitpunkt verpasst (.US_IstPruefzeit_ms = 0)"
Fehler = 98 'Merker für "STOP Zeitpunkt verpasst"
Else
WriteToFW2Logfile Einbauplatz, "US_IstPruefzeit_ms=" & vbTab & udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).US_IstPruefzeit_ms
dblDurchflussUS = dblVolumenUS / udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).US_IstPruefzeit_ms
WriteToFW2Logfile Einbauplatz, "Durchfluss US=" & vbTab & dblDurchflussUS
PrintStatus "Durchfluss RZ:" & Format(dblDurchflussRZ, "0.00000000")
PrintStatus "Durchfluss US:" & Format(dblDurchflussUS, "0.00000000")
If g_objExternePruefformel Is Nothing Then
PrintStatus "Interne Pruefformel"
PrintStatus " dblDurchflussUS = " & dblDurchflussUS
PrintStatus " dblDurchflussRZ = " & dblDurchflussRZ
Fehler = ((dblDurchflussUS - dblDurchflussRZ) / dblDurchflussRZ) * 100
Else
' Fehlerberechnung in Externer DLL, neu RH 30.4.2017
Fehler = modPruefformel.Errechne_Relative_Messabweichung_in_Prozent(1 / PeriodendauerPZ, 1 / PeriodendauerRZ, FehlerRefZ)
PrintStatus g_objExternePruefformel.GetLogText
End If
PrintStatus "ermittelter Fehler: " & Format(Fehler, "0.00") & " %"
WriteToFW2Logfile Einbauplatz, "ermittelter Fehler=" & vbTab & Round(Fehler, 3)
WriteToLog "SchreibeZulassungspruefdaten " & g_blnZulassungspruefung & ", RZ, Q=" & m_DurchflussSoll
If g_blnZulassungspruefung Then
Call SchreibeZulassungspruefdaten(Pruefzaehler.getSerienNr, m_Pruefgang.PruefgangNr, m_DurchflussSoll, QIst, dblVolumenUS, dblVolumenRZ, Fehler, dblTemperatur, PPZeit, False)
End If
End If
Else
Fehler = 99 'Merker für "Keine Impulse"
PrintStatus "Fehler: Das Volumen des US Zählers konnte nicht bestimmt werden für Einbauplatz " & Einbauplatz.getNr
End If
Else 'VolumenRZ = 0
PrintStatus ("Fehler: Das Volumen des Referenz-Zählers konnte aus den FM85 nicht ermittelt werden (=0)")
GoTo Fehler_speichern_ueberspringen
End If
End If ' (not m_PruefungsArtWaage )
' Fehler dieses Prüfpunktes für diesen Einbauplatz steht fest,
' es ist aber noch nicht berücksichtigt, ob Langmessung nötig ist
bFehlerermittelt = False
If m_bPruefgangLang And PPNr = m_colUniquePP.Count Then
WriteToFW2Logfile Einbauplatz, "PruefgangLang: Mittelung der Fehler"
' ------------------------------------------
' Behandlung bei Pruefgang Lang,
' letzter Prüfpunkt mit kleinstem Durchfluss
' ------------------------------------------
' Pruefgang-Lang und Pruefpunkt = Qmin.
FehlerInPruefgangLang(ZaehlerPruefgangLang, Einbauplatz.getNr) = Fehler
MSFlexGrid1.text = Format(Fehler, "0.00") & "/" & ZaehlerPruefgangLang + 1
AutoSpaltenBreite MSFlexGrid1, lblAutosize
DoEvents
Select Case ZaehlerPruefgangLang
Case 0
PrintStatus "PruefgangLang: 1.Fehler: wurde zwischengespeichert"
PruefgangLangPruefpunktWiederholen = True
Case 1
PrintStatus "PruefgangLang: 2.Fehler: Vergleich mit 1.Fehler"
' Abweichung aus Ini Datei in %
PrintStatus "Testen ob die gemessenen Fehler abweichen um weiniger als " & g_App.Settings.getPruefgangLangAbweichung() & " % ..."
PrintStatus "Einbauplatz: " & Einbauplatz.getNr
PrintStatus "Fehler Lang 1: " & FehlerInPruefgangLang(1, Einbauplatz.getNr)
PrintStatus "Fehler Lang 0: " & FehlerInPruefgangLang(0, Einbauplatz.getNr)
PrintStatus "Abweichung: " & FehlerInPruefgangLang(1, Einbauplatz.getNr) - FehlerInPruefgangLang(0, Einbauplatz.getNr)
PrintStatus " Abs() ist größer als " & g_App.Settings.getPruefgangLangAbweichung() & " ?"
If Abs(FehlerInPruefgangLang(1, Einbauplatz.getNr) - FehlerInPruefgangLang(0, Einbauplatz.getNr)) > g_App.Settings.getPruefgangLangAbweichung() Then
PruefgangLangPruefpunktWiederholen = True
PrintStatus " ja, also Prüfung wiederholen."
Else
PrintStatus " nein, also Mittelwert bestimmen."
' Wiederholen, wenn mind 1 mal Abweichung überschritten
' Mittelwert aus den letzen beiden Fehlern für diesen PP bestimmen
Fehler = (FehlerInPruefgangLang(1, Einbauplatz.getNr) + FehlerInPruefgangLang(0, Einbauplatz.getNr)) / 2
' Fehler steht fest
bFehlerermittelt = True
' geändert RH 17.09.2007
' PruefgangLangPruefpunktWiederholen = False
End If
Case 2
PrintStatus "PruefgangLang: 3.Fehler..."
' Bestimmen der dicht beieinander liegenden Punkte
Fehler = MittelwertDerFehlerOhneAusreisser(FehlerInPruefgangLang(0, Einbauplatz.getNr), FehlerInPruefgangLang(1, Einbauplatz.getNr), FehlerInPruefgangLang(2, Einbauplatz.getNr))
' Fehler steht fest
bFehlerermittelt = True
PruefgangLangPruefpunktWiederholen = False
End Select
Else 'm_bPruefgangLang And PPNr = m_colUniquePP.Count
' ------------------------------------------
' Behandlung sonst, wenn kein Pruefgang Lang
' ------------------------------------------
bFehlerermittelt = True
End If ' Prüfgang lang
' -------------------------------
' Behandlung aller Pruefungen
' -------------------------------
If bFehlerermittelt = True Then
' Fehler steht fest:
' speichern
'WriteToFW2Logfile Einbauplatz, "speichern des Fehlers " & vbTab & Fehler
Call FehlerSpeichern(Fehler, Pruefzaehler, m_Pruefgang, m_Pruefpunkt, m_colUniquePP)
MSFlexGrid1.text = Format(Fehler, "0.00")
AutoSpaltenBreite MSFlexGrid1, lblAutosize
DoEvents
' Fehler speichern für Druck
For i = 1 To Pruefzaehler.getPruefpunkte.getPruefpunkteCount
If Pruefzaehler.getPruefpunkte.getPruefpunkt(i).getQ = m_DurchflussSoll Then
Pruefzaehler.getPruefpunkte.getPruefpunkt(i).setFehler Fehler
End If
Next
' Bei Grenzwertüberschreitung
Set AuftragpositionSerienNr = Pruefzaehler.getAuftragPositionSerienNr
' Neu RH 14.05.2007
If GrenzwertUeberschritten(Pruefzaehler.getPruefpunkte.getPruefpunkte.getPP(m_DurchflussSoll).getFGo, Fehler, Pruefzaehler.getPruefpunkte.getPruefpunkte.getPP(m_DurchflussSoll).getFGu) Then
' alt: If GrenzwertUeberschritten(m_Pruefpunkt.getFGo, Fehler, m_Pruefpunkt.getFGu) Then
AuftragpositionSerienNr.setStatusFertigung 25
PrintStatus "Grenzwert überschritten. " & Pruefzaehler.getPruefpunkte.getPruefpunkte.getPP(m_DurchflussSoll).getFGu & " < " & Fehler & " < " & Pruefzaehler.getPruefpunkte.getPruefpunkte.getPP(m_DurchflussSoll).getFGo & " !"
MSFlexGrid1.CellBackColor = &HC0C0FF
End If
AutoSpaltenBreite MSFlexGrid1, lblAutosize, 1
Else ' bFehlerermittelt
' bFehlerermittelt = false:
End If ' bFehlerermittelt
PrintStatus " ermittelter Fehler = " & Format(Fehler, "0.00") & "%"
Fehler_speichern_ueberspringen:
End If ' Prüfzähler hat diesen Prüfpunkt
End If ' Prüfpunkte vorhanden
Else
m_Pruefgang.save
PrintStatus "Ebp " & Einbauplatz.getNr & " wurde deaktiviert: Fehler-Ermittlung/Speicherung wurde übersprungen."
' Einbauplatz Active = false
End If ' Einbauplatz Active
End If 'Pruefzaehler vorhanden
Next Einbauplatz 'In m_colEinbauplatz
If m_bPruefgangLang And PPNr = m_colUniquePP.Count Then
ZaehlerPruefgangLang = ZaehlerPruefgangLang + 1
lblLang.caption = (ZaehlerPruefgangLang + 1) & " ."
DebugMsg "Zähler PGang Lang: " & ZaehlerPruefgangLang
End If
If Not m_PruefungsArtWaage Then
If g_App.Settings.getAnzahlMIDGruppen > 1 Then
' Abweichung zwischen den Referenzzaehlern ermitteln
m_FMBus.send "**" & g_FM85RefZAdresse & "@"
m_FMBus.receive (500)
m_FMBus.send "X"
PeriodendauerRefZ1 = Hex2Long(m_FMBus.receive(500))
m_FMBus.send "Y"
PeriodendauerRefZ2 = Hex2Long(m_FMBus.receive(500))
PrintStatus "Referenzzaehler1 Periodendauer = " & PeriodendauerRefZ1
PrintStatus "Referenzzaehler2 Periodendauer = " & PeriodendauerRefZ2
' Referenzzähler Vergleich
If PeriodendauerRefZ1 = 0 Or PeriodendauerRefZ2 = 0 Then
PrintStatus ("Periodendauer eines RefZ (FM85P-13)liegt noch nicht vor.")
Else
PrintStatus "Fehler des RefZählers A: " & FehlerRefZA & " %"
PrintStatus "Fehler des RefZählers B: " & FehlerRefZB & " %"
' ' Korrigierter Wert
PeriodendauerRefZ1 = PeriodendauerRefZ1 * (1 - FehlerRefZA / 100)
PeriodendauerRefZ2 = PeriodendauerRefZ2 * (1 - FehlerRefZB / 100)
PrintStatus "Referenzzaehler1 Periodendauer (korrigiert)= " & PeriodendauerRefZ1
PrintStatus "Referenzzaehler2 Periodendauer (korrigiert)= " & PeriodendauerRefZ2
Fehler = 100 * (PeriodendauerRefZ1 - PeriodendauerRefZ2) / (PeriodendauerRefZ1)
' Warnung, wenn Fehler zwischen den Referenzzählern > MaxDiff
If Abs(Fehler) > g_App.Settings.getMaxDiffRZ() Then
m_DruckMsg = m_DruckMsg & "Warnung: der Fehler zwischen Referenzzaehlern " & Format(Fehler, "0.000") & "% " & vbCrLf & "ist größer als " & g_App.Settings.getMaxDiffRZ() & " % bei Q=" & Format(m_DurchflussSoll, "0.000") & "m³/h" & vbCrLf
PrintStatus "Warnung: der Fehler zwischen Referenzzaehlern " & Format(Fehler, "0.000") & "% ist größer als " & g_App.Settings.getMaxDiffRZ() & " % bei Q=" & Format(m_DurchflussSoll, "0.000") & "m³/h"
End If ' Fehler > MaxDiff
End If ' Periodendauer (nicht) liegt vor
End If ' 2 Referenzzähler zum Vergleichen
Else
Call WaageZuruecksetzen
End If ' Prüfungsart Vergleichsprüfung, not Waage
lblZeit.caption = ""
PrintStatus "Schleifenende Pruefgang Lang: Zähler=" & ZaehlerPruefgangLang
' Schleifenende für Pruefgang Lang
If PruefgangLangPruefpunktWiederholen Then
PrintStatus "Wg. Pruefgang Lang: Pruefpunkt wiederholen..."
m_QBehalten = True
GoTo SchleifenanfangPruefgangLang
End If
m_SPS.setBetrieb 8
Sleep 500
m_SPS.setBetrieb 0
lblQIst.caption = ""
PrintStatus "Wasser gestoppt"
lblFehlerRZ.caption = ""
' Alle Einbauplätze wieder aktivieren
For Each Einbauplatz In m_colEinbauplatz
lblPZImpulse(Einbauplatz.getNr).BackColor = &H8000000F
lblVerbleib(Einbauplatz.getNr).BackColor = &H8000000F
'''' Einbauplatz.setAktiv True
Next
End If ' m_DurchflussSoll > 0 ' und RZ-Vergleichs-Prüfung erfolgt
If m_PruefungsArtWaage Then
' es darf kein warmes Wasser im Behälter kalt werden
'Call BeideBehaelterLeeren
PrintStatus "Wasser ablassen beginnen"
m_SPS.WassserAblassen 1 + 2 + 4 + 8
End If
' Schleifenende Pruefpukte: nächster Pruefpunkt
Next m_Pruefpunkt
If m_PruefungsArtWaage And g_App.PruefstationNr = 2020 Then
AlleBehaelterLeeren Me, m_SPS, m_Waage
End If
PPZeit = Now()
' Kompletter Pruefgang bendet
' ----------------------------
' Für jeden geprüften Pruefzähler:
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If Not Pruefzaehler Is Nothing Then
Set AuftragpositionSerienNr = Pruefzaehler.getAuftragPositionSerienNr
WriteToLog "SchreibeZulassungspruefdaten " & g_blnZulassungspruefung & " , Q=0(Timestamp)"
If g_blnZulassungspruefung Then
' Zeitstempel schreiben
Call SchreibeZulassungspruefdaten(Pruefzaehler.getSerienNr, m_Pruefgang.PruefgangNr, 0, 0, 0, 0, 0, dblTemperatur, PPZeit)
End If
If Einbauplatz.getAktiv = False Then
' neu RH 2015-11-18: Zähler ist bei der Justage oder Prüfung ausgefallen
AuftragpositionSerienNr.setStatusFertigung 23
PrintStatus "Da Ebp " & Einbauplatz.getNr & " nicht aktiv: StatusFertigung = 23"
End If
Select Case AuftragpositionSerienNr.getStatusFertigung
Case 25
' Grenzwertüberschreitung in einem Prüfpunkt
Case 23
' Ausfall in einem Prüfpunkt oder bei der Justage
Case 22
' Geprüft in allen Prüfpunkten ohne Ausfall und Grenzwertüberschreitung
AuftragpositionSerienNr.setStatusFertigung 30
' " 0x00 = geprüft PASS
modUSchall.FW2_writeVar Einbauplatz, "u8_hydraulik_flag_KEV1", CByte(0)
' Todo:
' AuftragPosition.FertigemeldeTermin FertigmeldeMitarbeiter
' FertMeld_Pterm_MA = Mitarbeiter.GetNr
' P_IstTerm = now()
' Fertmeld_Pterm_Dat = now()
End Select
AuftragpositionSerienNr.save
End If
Next Einbauplatz
If g_blnPruefprotokoll Then
PrintStatus "Prüfergebnisse werden gedruckt..."
DoEvents
Call PruefgangDruck(m_Pruefgang, dblTemperatur, m_colEinbauplatz, PZCount, m_DruckMsg)
End If
' Neu RH 28.3.2017
Verschiebe_Prueffehler_Befundpruefung_Eichung m_Pruefgang.PruefgangNr
PrintStatus "Schleifenende Dauerprüfung. " & m_DauerpruefungZaehler
If m_DauerStop = True Then
PrintStatus "Dauerprüfung wurde vorzeitig gestopt"
Exit For
End If
Next m_DauerpruefungZaehler ' Schleifenende Dauerprüfung
PrintStatus "Prüfergebnisse werden gespeichert..."
DoEvents
' Speichern der PruefgangDaten
m_Pruefgang.save
' SPS Betrieb Programmende
PrintStatus "Ende der Hauppruefung"
EndeDerHauppruefung:
DoEvents
' Stoppen
m_SPS.setBetrieb 0
Sleep 1000
'If mbln_Funktionspruefung = True Then
' lblTitle.Caption = "FW2 Funktionsprüfung"
' Call Funktionspruefung
' m_DruckMsg = m_DruckMsg & vbCrLf & "Ergebnisse der Funktionsprüfung: " & vbCrLf & strFunktionsPruefungMsg
'End If
lblTitle.caption = "Ultraschall-Zähler Prüfung"
If g_blnVersuch Then
MsgBox ("Hauptprüfung schließen und mit Prüfungsabschluss fortfahren?")
End If
If False Then
' Programmende einleiten
If MsgBox("Automatisch beenden (SPS: entleeren & lösen)?", vbYesNo) = vbNo Then
GoTo Fertig ' nicht öffnen
Else
' lösen
m_SPS.setBetrieb 4
Sleep 1000
End If
If m_NurMesseinsaetze = False Then
' warten bis Lösen begonnen wurde
PrintStatus "Warten bis Lösen beginnt..."
Do While m_SPS.IstStreckeGespannt
Sleep 1000, True
If g_Abbruch = True Then
Exit Sub
End If
Loop
PrintStatus "Lösen..."
End If
End If
Fertig:
If Not g_ohneSPS Then
' Jetzt kann Betrieb = 0 gesetzt werden
m_SPS.SetQSoll 0
Sleep 1000
m_SPS.setBetrieb 0
Sleep 1000
m_SPS.SetServoStellung 50
End If
Call ResetPruefung
If m_PruefungsArtWaage = True And Not m_Waage Is Nothing Then
Call m_Waage.releaseMScomm
End If
endDialog IDOK
Exit Sub
Errorhandler:
MsgBox "Fehler " & Err.Number & " in Hauptprüfung: " & Err.Description
Exit Sub
Resume
End Sub
Private Sub initSPSfuerDurchlauf()
' Durchlauf auswählen
If Not g_ohneSPS Then
m_SPS.setBehaelter 1
End If
lblGewichtLabel.Enabled = False
lblGewicht.Enabled = False
End Sub
Private Function initSPSfuerPP()
' SPS für diesen Prüfpunkt initialisieren, unabhängig von Waage/Behälter oder Durchlauf
' -------------------------------------------------------------------------------------
' Betrieb stoppen und Pumpen Abwählen
' Durchfluß vorgabe
' Pumpe auswählen und anwählen
' Regelart und Regel-Position setzen
' MID Strang setzen
Dim Einbauplatz As CEinbauplatz
Dim i As Integer
Dim iStellwert As Integer
Dim AnzahlPP As Integer
'Dim Waagengrenzwert As Double
If Not g_ohneSPS Then
' Betrieb Start zurücksetzen
m_SPS.setBetrieb 8
Sleep 500
m_SPS.setBetrieb 0
m_SPS.SetQSoll m_DurchflussSoll
End If
PrintStatus "Nächster Durchfluss: " & m_DurchflussSoll
' Pumpenauswahl
' Hochbehälter Auswahl wenn Q < 1 m ^3 -> Pumpe.Nr = 4
' siehe modPumpe
m_SPS.AllePumpenAbwaehlen
Set m_Pumpe = Pumpenwahl(m_DurchflussSoll, m_ColPumpen)
PrintStatus "zu startende Pumpe: " & m_Pumpe.GetSPSVarname
m_Pumpe.Anwahl
If Not g_ohneSPS Then
Select Case m_Pumpe.GetRegelart
Case "Servo"
' Servo vorgeschrieben
m_SPS.SetRegelart ("Servo")
' Wenn letzter PP
'AnzahlPP = m_ersterPruefzaehler.getPruefpunkte.getPruefpunkteCount
'If m_DurchflussSoll = m_ersterPruefzaehler.getPruefpunkte.getPruefpunkt(AnzahlPP).getQ Then
' iStellwert = getUSVoreinstellwert(m_DurchflussSoll, True)
'Else
' ' Formel für ServoPosition zur Feinregulierung des Durchflusses
' iStellwert = CInt(lookupFUServoStellwert(m_DurchflussSoll, "Servo"))
'End If
iStellwert = getVoreinstellwert(m_DurchflussSoll, m_bVoreinstellwertSetzen)
Case "FU"
' Frequenzumrichter vorgeschrieben
m_SPS.SetRegelart ("FU")
' Formel für ServoPosition zur Feinregulierung des Durchflusses
iStellwert = getVoreinstellwert(m_DurchflussSoll, m_bVoreinstellwertSetzen)
' If m_DurchflussSoll = m_ersterPruefzaehler.getPruefpunkte.getPruefpunkt(1).getQ Then
' iStellwert = getUSVoreinstellwert(m_DurchflussSoll, False)
' Else
' iStellwert = 50
' End If
Case Else
ErrorMsg "Es ist keine Regelart für die Pumpe " & m_Pumpe.getNr & " in der ini-Datei definiert."
Call Abbruch
Exit Function
End Select
End If
If iStellwert > 100 Then iStellwert = 100
PrintStatus "Stellwert: " & iStellwert
If Not g_ohneSPS Then
m_SPS.SetServoStellung iStellwert
' Vorwahl Referenzzaehler
m_SPS.SetMID m_Referenzzaehler.EinbauplatzNr
m_SPS.SetQDiff 0
End If
End Function
Private Function initSPSfuerWaage()
Dim i As Integer
Dim Waagengrenzwert As Double
' initialisierung der SPS und Waage für Pruefung mit Waage
'---------------------------------------------------------
' Behälterauswahl
' Waagenanwahl
' Waagengrenzwert auf oberen Wert
' Behälter leeren
' Waage tarieren
' letzter Fehler auf 0
' geschätzes Volumen in Litern als Sollvolumen für Waagengrenzwert:
m_VolumenSoll = m_Pruefzeit * m_DurchflussSoll / 3.6
PrintStatus "geschätztes Soll-Volumen in Litern: " & m_VolumenSoll
lblSollV.caption = Format(m_VolumenSoll, "0")
' Behälterauswahl
For i = 1 To 2
If m_ArrayBehaelter(i).IstOkFuerVolumen(m_VolumenSoll) Then
Set m_Behaelter = m_ArrayBehaelter(i)
m_BehaelterNr = i
Exit For
End If
Next
' Waagenanwahl
If Not m_Behaelter Is Nothing Then
PrintStatus "-> Gewählte Waage: " & m_Behaelter.m_WaageAnwahl
PrintStatus "-> Gewählte m_Behaelter: " & m_Behaelter.m_BehaelterAnwahl
Set m_Waage = g_App.getWaage
m_Waage.Initialize m_Behaelter.m_Nr
Do While m_Waage.Anwahl(m_Behaelter.m_WaageAnwahl) = False
If MsgBox("Waage (Anwahl=" & m_Behaelter.m_WaageAnwahl & ") konnte nicht angewählt werden." & vbCrLf & "Bitte Waagen-Reset (C-Taste) durchführen." & vbCrLf & "Möchten Sie die Waagenanwahl wiederholen ?" & vbCrLf & "Cancel bricht die Prüfung ab", vbOKCancel, "Waagen Fehler ?") = vbCancel Then
Call Abbruch
Exit Do
End If
Loop
' 2= klein, 4= groß
m_SPS.setBehaelter m_Behaelter.m_BehaelterAnwahl
Else
ErrorMsg ("Es konnte keine Waage und kein Behälter für Volumen " & m_VolumenSoll & " bestimmt werden")
' Prüfung abbrechen
g_Abbruch = True
Call Abbruch
Exit Function
End If
m_Waage.SetNettoGrenzwert1 m_Behaelter.m_WaageGrenzwert, m_Behaelter.m_Genauigkeit
lblGrenzwert.caption = ""
m_SPS.WassserAblassen 0
' Vor jedem Prüfpunkt beide Behälter leeren bis Prüfmenge nicht mehr erreicht
m_SPS.WassserAblassen 3
PrintStatus "Beide Behälter leeren bis Prüfmenge nicht mehr erreicht..."
Sleep 5000
Do While m_SPS.GrenzwertWaageErreicht
Sleep 1000, True
If g_Abbruch = True Then
Exit Function
End If
Loop
PrintStatus "gewählten Behälter " & m_BehaelterNr & " leeren..."
' Vor jedem Prüfpunkt gewählten Behälter leeren
' ---------------------------------------------
m_SPS.WassserAblassen m_Behaelter.m_AblassAnwahl
Sleep 5000
' auf Ruhe testen
'm_Waage.WarteAufRuhe
m_Behaelter.WarteAufRuhe
If g_Abbruch = True Then
Call Abbruch
Exit Function
End If
' Waage ist nun in Ruhe, Ablassen kann beendet werden
PrintStatus "Behälter ist nun leer.!"
' Wasser ablassen beenden
m_SPS.WassserAblassen 0
' Waage tarieren
PrintStatus "Waage Tarieren"
m_Waage.Tara
Set m_Pumpe = Pumpenwahl(m_DurchflussSoll, m_ColPumpen)
PrintStatus "zu startende Pumpe: " & m_Pumpe.GetSPSVarname
m_Pumpe.Anwahl
' Waagengrenzwert bestimmen
Waagengrenzwert = m_VolumenSoll - m_DurchflussSoll * m_Behaelter.m_nUeberlaufFaktor
PrintStatus "Waagengrenzwert: " & Waagengrenzwert
lblGrenzwert.caption = Format(Waagengrenzwert, "0")
' Grenzwert an Waage übergeben
m_Waage.SetNettoGrenzwert1 Waagengrenzwert, m_Behaelter.m_Genauigkeit
' Der Durchfluß Wert soll unbereinigt angezeigt werden
m_SPS.SetQDiff 0
lblGewichtLabel.Enabled = True
lblGewicht.Enabled = True
End Function
Private Function WaageVorbereitenFuerPP()
Dim StartVolumen As Double
Dim Gewicht As Double
Dim letztesGewicht As Double
Dim Referenzzaehler As CRefzaehler
Dim Pumpe As CPumpe
Dim Fuelldurchfluss As Double
Dim Fuellvolumen As Double
Dim Waagengrenzwert As Double
PrintStatus "Waage vorbereiten für diesen Prüfpunkt:"
lblQIst.caption = "0"
'neu RH 28.2.2013
WaageZuruecksetzen
If Not g_ohneSPS Then
m_SPS.setBetrieb 0
m_SPS.WassserAblassen 3
Sleep 1000, True
m_SPS.WassserAblassen 0
End If
PrintStatus "Softtara reset + Tara reset"
m_Waage.TaraReset
m_Waage.SoftTaraReset
m_VolumenSoll = m_Pruefzeit * m_DurchflussSoll / 3.6
PrintStatus "Sollvolumen:" & Format(m_VolumenSoll, "0.000") & " l"
'-----------------------------------------
Set m_Behaelter = New CBehaelter
If m_Behaelter.LoadForVolumen(m_VolumenSoll) = False Then
MsgBox ("Es exisitiert kein Behälter für Volumen=" & m_VolumenSoll & vbCrLf & "Bitte abbrechen und Prüfzeit anpassen!")
WaageVorbereitenFuerPP = -1
Exit Function
End If
PrintStatus "gewählter Behälter: OVolumen=" & m_Behaelter.m_OVolumen
If Not g_ohneSPS Then
m_SPS.setBehaelter m_Behaelter.m_BehaelterAnwahl
Else
MsgBox "Behälter mit " & m_Behaelter.m_OVolumen & "l wählen!"
End If
m_Waage.Initialize m_Behaelter.m_Nr
m_Waage.SoftTaraReset
m_Waage.TaraReset
Do While m_Waage.Anwahl(m_Behaelter.m_WaageAnwahl) = False
If MsgBox("Waage (Anwahl=" & m_Behaelter.m_WaageAnwahl & ") konnte nicht angewählt werden." & vbCrLf & "Bitte Waagen-Reset (C-Taste) durchführen." & vbCrLf & "Möchten Sie die Waagenanwahl wiederholen ?" & vbCrLf & "Cancel bricht die Prüfung ab", vbOKCancel, "Waagen Fehler ?") = vbCancel Then
Call Abbruch
Exit Do
End If
Loop
'-----------------------------------------
If m_AnwahlLetzterBehaelter <> m_Behaelter.m_BehaelterAnwahl Then
' Behälter wurde gewechselt oder das erste mal benutzt
PrintStatus "Behälter wurde gewechselt oder das erste mal benutzt: (Anwahl von " & m_AnwahlLetzterBehaelter & " nach " & m_Behaelter.m_BehaelterAnwahl & ")"
m_AnwahlLetzterBehaelter = m_Behaelter.m_BehaelterAnwahl
PrintStatus "Wasser ganz ablassen"
'-----------------------------------------
' Wasser ganz ablassen
StartVolumen = 0
letztesGewicht = 0
If Not g_ohneSPS Then
m_SPS.WassserAblassen m_Behaelter.m_AblassAnwahl
Sleep 2000, True
Do
Sleep 1000, True
Gewicht = m_Waage.GetGewicht
lblGewicht = Format(Gewicht, "0.00")
If Gewicht = -9999 Then
DebugMsg ("Fehler: Gewicht konnte nicht gelesen werden")
Sleep 200, True
End If
If letztesGewicht = Gewicht Then Exit Do
letztesGewicht = Gewicht
If g_Abbruch = True Then
Exit Function
End If
Loop While Gewicht > StartVolumen
m_SPS.WassserAblassen 0
'---------------------------------------
' Rohr füllen, aber nicht mit mehr, als Qmax
Fuelldurchfluss = m_ersterPruefzaehler.getPruefpunkte.getPruefpunkt(1).getQ
If Fuelldurchfluss > m_Behaelter.m_Fuelldurchfluss Then
' Bestimme den kleineren Durchfluß von Qmax-Zähler und Behälter
Fuelldurchfluss = m_Behaelter.m_Fuelldurchfluss
End If
Fuellvolumen = m_Behaelter.m_Fuellvolumen
If Fuellvolumen = 0 Then
Fuellvolumen = m_Behaelter.m_OVolumen * 0.1
PrintStatus "Füllvolumen auf 10% gesetzt. Bitte Fuellvolumen in ini Datei pflegen!"
End If
' Setze MID und MIDGruppe
Set Referenzzaehler = New CRefzaehler
Call Referenzzaehler.loadForDurchfluss(Fuelldurchfluss, g_App.Settings.getMIDGruppe)
m_SPS.SetMID Referenzzaehler.EinbauplatzNr
m_SPS.SetQDiff 0
m_SPS.AllePumpenAbwaehlen
Set Pumpe = Pumpenwahl(Fuelldurchfluss, m_ColPumpen)
Pumpe.Anwahl
PrintStatus "gewählte Pumpe: " & Pumpe.GetSPSVarname
'----------------------------------------------------------
' Füllen bis 10% des Behältervolumens
PrintStatus "Rohr füllen mit Fülldurchfluß " & Fuelldurchfluss & " auf Fuellvolumen " & Fuellvolumen & " l in " & m_Behaelter.m_OVolumen & " l Behälter"
m_SPS.SetServoStellung lookupFUServoStellwert(Fuelldurchfluss)
m_SPS.SetQSoll Fuelldurchfluss
lblSollV = Format(Fuellvolumen, "0.0")
lblQSoll.caption = Fuelldurchfluss
m_SPS.setBetrieb 2
Do
Sleep 1000, True
Gewicht = m_Waage.GetGewicht
lblGewicht = Gewicht
lblQIst = Format(m_SPS.getQIst, 3)
If Gewicht = -9999 Then
DebugMsg ("Fehler: Gewicht konnte nicht gelesen werden")
Sleep 200, True
End If
If g_Abbruch = True Then
Exit Function
End If
Loop While Gewicht < Fuellvolumen
m_SPS.setBetrieb 0
lblQSoll.caption = 0
'-----------------------------------------
PrintStatus "Wasser ganz ablassen"
'-----------------------------------------
' Wasser ganz ablassen und (nicht mehr) Nullstellen
lblSollV.caption = "0"
m_SPS.WassserAblassen m_Behaelter.m_AblassAnwahl
Sleep 2000, True
m_Waage.WarteAufRuhe
m_SPS.WassserAblassen 0
Sleep 1000, True
' Bizerba an P2020 kann nicht Nullstellen
'PrintStatus "Nullstellen bei " & m_Waage.GetGewicht
'm_Waage.Nullstellen
'---------------------------------------
Else
MsgBox "Bitte Rohr füllen und Wasser ganz ablassen!", , "Keine SPS"
End If ' g_OhneSPS
End If 'Behälterwechsel
'-----------------------------------------
Gewicht = m_Waage.GetGewicht
lblGewicht = Format(Gewicht, "0.000")
' geschätzes Volumen in Litern als Sollvolumen für Waagengrenzwert:
m_VolumenSoll = m_Pruefzeit * m_DurchflussSoll / 3.6
PrintStatus "geschätztes Soll-Volumen in Litern: " & Format(m_VolumenSoll, "0")
lblSollV.caption = Format(m_VolumenSoll, "0")
If Not g_ohneSPS Then
If m_VolumenSoll + Errechne_Volumen_Von_Wasser_in_m3(Gewicht, m_SPS.GetEinlaufTemperatur) * 1000 > m_Behaelter.m_WaageGrenzwert Then
' Zuviel Wasser drin, also ablassen
PrintStatus "Zuviel Wasser drin, also ablassen."
'-----------------------------------------
' Wasser ganz ablassen
StartVolumen = 0
m_SPS.WassserAblassen m_Behaelter.m_AblassAnwahl
Sleep 2000, True
Do
Sleep 200, True
Gewicht = m_Waage.GetGewicht
lblGewicht = Gewicht
If Gewicht = -9999 Then
DebugMsg ("Fehler: Gewicht konnte nicht gelesen werden")
Sleep 200, True
End If
If g_Abbruch = True Then
Exit Function
End If
If letztesGewicht = Gewicht Then Exit Do
letztesGewicht = Gewicht
Loop While Gewicht > StartVolumen
m_SPS.WassserAblassen 0
'-----------------------------------------
End If
Else
MsgBox "Bitte Wasser ablassen um " & m_VolumenSoll + Errechne_Volumen_Von_Wasser_in_m3(Gewicht, 22) * 1000 & " l füllen zu können.", , "keine SPS"
End If
' hier ist sichergestellt dass mind. noch das Sollvolumen hinein passt
' neuen Grenzwert für das Sollvolumen setzen
Gewicht = m_Waage.GetGewicht
lblGewicht = Format(Gewicht, "0.00")
PrintStatus "Warten auf Waagen Ruhe"
'm_Waage.WarteAufRuhe
m_Behaelter.WarteAufRuhe
Gewicht = m_Waage.GetGewicht
' If Gewicht = -9999 Then
' ' Waage evtl. in Unterlast
' PrintStatus "Gewicht konnte nicht gelesen werden. Nullstellen versuchen..."
' m_Waage.Nullstellen
' Sleep 1000, True
' Gewicht = m_Waage.GetGewicht
' End If
lblGewicht = Format(Gewicht, "0.000")
If Not g_ohneSPS Then
Waagengrenzwert = m_VolumenSoll + Errechne_Volumen_Von_Wasser_in_m3(Gewicht, m_SPS.GetEinlaufTemperatur) * 1000 - m_DurchflussSoll * m_Behaelter.m_nUeberlaufFaktor
PrintStatus " neuer Grenzwert :" & Format(Errechne_Volumen_Von_Wasser_in_m3(Gewicht, m_SPS.GetEinlaufTemperatur) * 1000, "0.000") & " + " & Format(m_VolumenSoll, "0.000") & " = " & Format(Waagengrenzwert, "0.000")
lblGrenzwert.caption = Format(Waagengrenzwert, "0.00")
If Waagengrenzwert >= m_Behaelter.m_OVolumen Then
PrintStatus "Der errechnete Grenzwert erreicht bzw. übersteigt das Volumen des Behälters."
PrintStatus "Bitte Prüfzeit für diesen Prüfpunkt anpassen! Der Grenzwert wird auf 95% des Behältervolumens gesetzt."
Waagengrenzwert = m_Behaelter.m_OVolumen * 0.95
End If
End If
m_Waage.SetNettoGrenzwert1 Waagengrenzwert
Gewicht = m_Waage.GetGewicht
' dieses Gewicht gilt als Startwert
m_Waage.SoftTara
Gewicht = m_Waage.GetGewicht
lblGewicht.caption = Format(Gewicht, "0.000") ' sollte 0 sein
PrintStatus "Gewicht nach Softtara: " & Format(Gewicht, "0.000") & " kg"
End Function
Private Sub initFM85fuerPP_Waage()
Dim strMeldung As String
' FM85 für Impulszählung für diesen Pruefpunkt initialisieren
sendonly "**0@"
sendonly "R"
Sleep 1000, True
' Todo s-Befehl weil Fehlerbyte = 03
' Todo faktor k weil Fehlerbyte = 03
' PZ Impulse zählen
sendonly "Q"
' RZ Impulse zählen
sendonly "O"
m_FMBus.dialog "**" & m_ersterPruefzaehlerNr & "@", ""
m_FMBus.send "42 "
dummy = Mid(m_FMBus.receive(500), 6, 2)
If dummy <> "00" And dummy <> "03" Then
strMeldung = Fehlerbyte42Meldung(dummy)
If MsgBox("Das FM85-Fehlerbyte ist weder '00' noch '03' sondern '" & dummy & "':" & vbCrLf & strMeldung & vbCrLf & "Möchten Sie weitermachen", vbYesNo) = vbYes Then
Else
' Todo: Allgemeine Abbruchfunktion
' Prüfung abbrechen
g_Abbruch = True
Call Abbruch
Exit Sub
End If
End If
End Sub
'-------------------------------------------------------------------------
'' FM85 für diesen Prüfpunkt initialisieren:
Private Sub initFM85fuerPP()
Dim AnzahlPeriodenPZ As Double
Dim AnzahlPeriodenRZ As Double
Dim AnzahlPeriodenPZNeu As Long
Dim AnzahlPeriodenRZA As Long
Dim AnzahlPeriodenRZB As Long
Dim ImpulswertigkeitRZ As Long
Dim Korrekturwert As Double
Dim Fehler As Double
Dim Pruefzaehler As CPruefzaehler
Dim Einbauplatz As CEinbauplatz
PrintStatus "**********************************************"
PrintStatus "Initialisierung der FM85 für Vergleichsprüfung"
' Dummy Werte
sendonly "**0@"
sendonly "R"
Sleep 1000, True
sendonly "**0@"
' Multiplikator
sendonly "1s"
' keine Doppelimpulssperre
sendonly "G"
' Doppelimpuls-Zeit
sendonly "0000S"
' Dämpfung
sendonly "3T"
' K Wert
sendonly Trim("1000K+1") ' entspricht k* 0.1000 * 10 ^1 = K
' ----------------------------------------------------------------------------------
' Periodenzahl errechnen
ImpulswertigkeitRZ = m_Referenzzaehler.ImpulseQM
' PrintStatus "ImpulswertigkeitPZ: " & m_ImpulswertigkeitPZ
PrintStatus "ImpulswertigkeitRZ: " & ImpulswertigkeitRZ
If m_Pruefzeit < 60 Then
PrintStatus "Prüfzeit dieses PP (" & m_Pruefzeit & "s) auf 60 s korrigiert."
m_Pruefzeit = 60
End If
' AnzahlPeriodenPZ = (m_Pruefzeit / 3600) * m_DurchflussSoll * m_ImpulswertigkeitPZ
' PrintStatus "unkorrigierter AnzahlPeriodenPZ: " & AnzahlPeriodenPZ
' AnzahlPeriodenPZNeu = Int(AnzahlPeriodenPZ / 10 + 0.9) * 10
' If AnzahlPeriodenPZNeu < 20 Then
' DebugMsg "Anzahl der Perioden (" & AnzahlPeriodenPZNeu & ") auf 20 Pulse korrigiert."
' AnzahlPeriodenPZNeu = 20
' End If
' PrintStatus "AnzahlPeriodenPZNeu: " & AnzahlPeriodenPZNeu
' Korrekturwert = AnzahlPeriodenPZNeu / AnzahlPeriodenPZ
' PrintStatus "AnzahlPeriodenPZNeu / AnzahlPeriodenPZ = Korrekturwert= " & Korrekturwert
' AnzahlPeriodenRZ = (m_Pruefzeit / 3600) * m_DurchflussSoll * ImpulswertigkeitRZ '* Korrekturwert
' AnzahlPeriodenPZ = AnzahlPeriodenPZNeu
' PrintStatus "Perioden RZ: " & AnzahlPeriodenRZ
' PrintStatus "AnzahlPeriodenRZ an FM85: " & Hex(AnzahlPeriodenRZ) & "M"
' m_FMBus.send Hex(AnzahlPeriodenRZ) & "M"
' If m_FMBus.receive(500) <> "" Then
' PrintStatus "Warnung: Periodenzahl RZ " & AnzahlPeriodenRZ & " für FM85 ausserhalb des zulässigen Bereiches"
' End If
' PrintStatus "Perioden PZ: " & AnzahlPeriodenPZ
' PrintStatus "AnzahlPeriodenPZ an FM85: " & Hex(AnzahlPeriodenPZ) & "H"
' m_FMBus.send Hex(AnzahlPeriodenPZ) & "H"
' If m_FMBus.receive(500) <> "" Then
' PrintStatus "Warnung: Periodenzahl PZ " & AnzahlPeriodenPZ & " für FM85 ausserhalb des zulässigen Bereiches"
' End If
' m_FMBus.dialog "**" & m_ersterPruefzaehlerNr & "@", ""
' If g_Abbruch Then
' Exit Sub
' End If
' m_FMBus.send "42 "
' If Mid(m_FMBus.receive(500), 6, 2) <> "00" Then
' If MsgBox("FM85 Fehlerbyte ist nicht '00'" & vbCrLf & "Möchten Sie weitermachen", vbYesNo, "FM85 Fehler") = vbYes Then
' Else
' Todo: Allgemeine Abbruchfunktion
' Prüfung abbrechen
' Call Abbruch
' Exit Sub
' End If
' End If
''''''''''''''''''''''''''''''''''''''''''''
' FM85 Nr: 7 Referenzähler Vergleich:
PrintStatus "Impulswertigkeit RefZ A: " & m_ReferenzzaehlerA.ImpulseQM
AnzahlPeriodenRZA = (m_Pruefzeit / 3600) * m_DurchflussSoll * (m_ReferenzzaehlerA.ImpulseQM) '* Korrekturwert
If g_App.Settings.getAnzahlMIDGruppen > 1 Then
PrintStatus "Impulswertigkeit RefZ B: " & m_ReferenzzaehlerB.ImpulseQM
AnzahlPeriodenRZB = (m_Pruefzeit / 3600) * m_DurchflussSoll * (m_ReferenzzaehlerB.ImpulseQM) '* Korrekturwert
' FM85 für Referenzzähler Vergleich Nr 7 setzen
' Adressieren
m_FMBus.dialog "**" & g_FM85RefZAdresse & "@", ""
If g_Abbruch Then
Exit Sub
End If
m_FMBus.send "R"
m_FMBus.receive (500)
Sleep 1000, True
' Adressieren
m_FMBus.send "**" & g_FM85RefZAdresse & "@"
m_FMBus.receive (500)
' Todo: Multiplikator
sendonly "1s"
' keine Doppelimpulssprerre
sendonly "G"
' Doppelimpuls-Zeit
sendonly "0000S"
' Dämpfung
sendonly "3T"
' Todo: K Wert für beide Referenzzähler sollte immer 1 sein
sendonly Trim("1000K+1") ' entspricht k* 0.1000 * 10 ^1 = K = 1
' Referenzzähler A
PrintStatus "Anzahl der Perioden RZA: " & AnzahlPeriodenRZA
m_FMBus.send Hex(AnzahlPeriodenRZA) & "M"
If m_FMBus.receive(500) <> "" Then
PrintStatus "Warnung: Periodenzahl RZA " & AnzahlPeriodenRZA & " für FM85 ausserhalb des zulässigen Bereiches"
End If
' Referenzzähler B
PrintStatus "Anzahl der Perioden RZB: " & AnzahlPeriodenRZB
m_FMBus.send Hex(AnzahlPeriodenRZB) & "H"
If m_FMBus.receive(500) <> "" Then
PrintStatus "Warnung: Periodenzahl RZB " & AnzahlPeriodenRZB & " für FM85 ausserhalb des zulässigen Bereiches"
End If
m_FMBus.send "**" & g_FM85RefZAdresse & "@"
m_FMBus.receive (500)
Dim strTmp As String
m_FMBus.send "42 "
strTmp = Mid(m_FMBus.receive(500), 6, 2)
If strTmp <> "00" Then
If MsgBox("FM85 Nr.7 Fehlerbyte ist nicht '00' sondern '" & strTmp & "'" & vbCrLf & "Möchten Sie weitermachen", vbYesNo) = vbYes Then
Else
Call Abbruch
Exit Sub
End If
End If
End If '2 RefZ
End Sub
Private Sub PrintStatusNoCrLf(sText As String)
If Len(txtStatus.text & sText) > 32768 Then
txtStatus.text = ""
End If
txtStatus.text = txtStatus.text & sText
txtStatus.SelStart = Len(txtStatus.text)
DebugMsg sText
DoEvents
End Sub
Private Sub PrintStatus(sText As String)
If Len(txtStatus.text & sText) > 32768 Then
txtStatus.text = ""
End If
txtStatus.text = txtStatus.text & sText & vbCrLf
txtStatus.SelStart = Len(txtStatus.text)
DebugMsg sText
DoEvents
End Sub
Private Sub sendonly(text)
m_FMBus.send (text)
m_FMBus.receive (500)
End Sub
Private Function FehlerSpeichern(Fehler As Double, Pruefzaehler As CPruefzaehler, Pruefgang As CPruefgang, Pruefpunkt As CPruefpunkt, PruefpunktCol As CPruefpunktCol)
On Error GoTo FehlerSpeichernError
Dim PruefgangNr As Long
Dim SerienNr As Long
Dim PPNr As Integer
Dim rs As CRecordset
Dim Feldname As String
Dim sSQL As String
PruefgangNr = Pruefgang.PruefgangNr
SerienNr = Pruefzaehler.getSerienNr
PPNr = PruefpunktCol.ItemNr(Pruefpunkt)
Set rs = New CRecordset
sSQL = "SELECT * from Prueffehler where PruefgangNr=" & PruefgangNr & " and SerienNr=" & SerienNr & ";"
rs.openRS (sSQL)
If rs.EOF Then
rs.addNew
End If
Call rs.setValue("SerienNr", SerienNr)
Call rs.setValue("PruefgangNr", PruefgangNr)
Feldname = "PP" & CStr(PPNr) & "_Fehler"
Call rs.setValue(Feldname, Fehler)
Call rs.setValue("PruefDatum", Now)
Call rs.update
FehlerSpeichern = True
Exit Function
FehlerSpeichernError:
MsgBox ("FehlerSpeichern fehlgeschlagen: " & Err.Description)
End Function
'
' @return Mittelwert der beiden Fehler-Werte, die am nächsten beieinander liegen,
' sonst Mittelwert aus allen drei Fehler-Werten.
'
Private Function MittelwertDerFehlerOhneAusreisser(Fehler0 As Double, Fehler1 As Double, Fehler2 As Double) As Double
Dim d0 As Double
Dim d1 As Double
Dim d2 As Double
' Abstände bestimmen
d0 = Abs(Fehler0 - Fehler1)
d1 = Abs(Fehler0 - Fehler2)
d2 = Abs(Fehler1 - Fehler2)
' Sonderfall wenn mind. 2 von 3 Abständen gleich
MittelwertDerFehlerOhneAusreisser = (Fehler0 + Fehler1 + Fehler2) / 3
' Sonderfall wenn Abstand zw. F0 und F1 am kleinsten
If d0 < d1 And d0 < d2 Then
MittelwertDerFehlerOhneAusreisser = (Fehler0 + Fehler1) / 2
End If
' Sonderfall wenn Abstand zw. F0 und F2 am kleinsten
If d1 < d0 And d1 < d2 Then
MittelwertDerFehlerOhneAusreisser = (Fehler0 + Fehler2) / 2
End If
' Sonderfall wenn Abstand zw. F1 und F2 am kleinsten
If d2 < d0 And d2 < d1 Then
MittelwertDerFehlerOhneAusreisser = (Fehler1 + Fehler2) / 2
End If
End Function
Private Sub WaageZuruecksetzen()
Dim Behaelter As CBehaelter
Dim i As Integer
If m_Waage Is Nothing Then Exit Sub
PrintStatus "Waagen Grenzwerte zurücksetzen"
Set m_Waage = g_App.getWaage
For i = 1 To UBound(m_ArrayBehaelter)
Set Behaelter = m_ArrayBehaelter(i)
If Behaelter.m_OVolumen > 0 Then
m_Waage.Initialize Behaelter.m_Nr
If Behaelter.m_WaageAnwahl > 0 Then
m_Waage.Anwahl Behaelter.m_WaageAnwahl
End If
Sleep 1000, True
PrintStatus "Waage " & i & ": Grenzwert=" & Behaelter.m_WaageGrenzwert & " setzen..."
If Behaelter.m_WaageGrenzwert > 0 Then
m_Waage.SetNettoGrenzwert1 Behaelter.m_WaageGrenzwert, Behaelter.m_Genauigkeit
lblGrenzwert.caption = ""
End If
End If
Next
End Sub
' Führt eine komplette Ultraschallzählerprüfung für einen Prüfpunkt durch.
' Übergabe der Daten durch udtPruefdaten
Private Function UltraschallPruefung(ByRef udtPruefdaten() As TypUSPruefdaten) As Long
' kein Fehler annehmen
UltraschallPruefung = 0
Dim Einbauplatz As CEinbauplatz
Dim EinbauplatzNr As Integer
Dim Zeitrahmenzaehler As Long
Dim Fehler As Long
Dim FehlerRZ As Long
Dim lngTemp As Long
Dim Stopzeitpunkt(10) As Long 'Zeitpunkt zum Stoppen des jeweiligen FM Zählers
Dim Pruefzaehler As CPruefzaehler
Dim dblTemperatur As Double
Dim StartzeitpunktRZ As Long
Dim lngReturn As Long
Dim blnHalbzeit As Boolean
Dim lngZeitpunktms As Long
Dim lngZeitpunktTemperaturmessungMs As Long
Dim Voreinstellwert As Integer
Dim i As Integer
' Bezugszeit
m_Tstart = GetTickCount()
' Starte alle Zähler
Zeitrahmenzaehler = 0
PrintStatus " Start-Phase"
PrintStatus "----------------------------------"
m_Tpruef = 0
AnzeigeAktualisieren
' Für alle Einbauplätze
For EinbauplatzNr = 1 To g_App.Settings.EinbauplaetzeJeStrang
With udtPruefdaten(EinbauplatzNr)
.Stopzeitpunkt = 0
.Fehlerinfo = ""
.blnPruefungsfehler = False
' Soll dieser Zähler geprüft werden
If .SollPruefzeit_s > 0 Then
Set Einbauplatz = m_colEinbauplatz(EinbauplatzNr)
Set Pruefzaehler = Einbauplatz.getPruefzaehler
' Temperatur für diese Ultraschallzählung messen und im Rechenwerk setzten
udtPruefdaten(EinbauplatzNr).dblTemperatur = dblTemperatur
' Eine Prüfzeit für alle Zähler aus dem ersten zu prüfenden Zähler
' Notwendig, da alle Zähler der Einbauplatz-Reihe nach gestartet und gestopt werden.
If m_Tpruef = 0 Then
m_Tpruef = udtPruefdaten(EinbauplatzNr).SollPruefzeit_s * 1000
End If
' mit Beginn eines Zeitrahmens synchronisieren
Do
Zeitrahmenzaehler = Zeitrahmenzaehler + 1
' Stopzeitpunkt dieses Zählers bestimmen
' RZ Zaehler starten
PrintStatus "RZ soll zum Zeitpunkt " & Zeitrahmenzaehler * ZEITRAHMENDAUER & " starten"
Fehler = StarteRZZaehlerZumZeitpunkt(EinbauplatzNr, m_Tstart + Zeitrahmenzaehler * ZEITRAHMENDAUER, .RZ_START_Rueckkehrzeitpunkt, lngZeitpunktms)
' Todo Zeitpunkt in Funktion einbauen
udtPruefdaten(EinbauplatzNr).StartzeitpunktRZ = .RZ_START_Rueckkehrzeitpunkt
PrintStatus lngZeitpunktms - m_Tstart & " RZ_START begonnen"
PrintStatus .RZ_START_Rueckkehrzeitpunkt - m_Tstart & " RZ_START abgeschlossen"
PrintStatus "RZ_START Dauer: " & .RZ_START_Rueckkehrzeitpunkt - lngZeitpunktms
Select Case Fehler
Case KEIN_FEHLER
PrintStatus "RZ_START im Zeitrahmen " & Zeitrahmenzaehler & " OK"
Fehler = StarteUSZaehlerZumZeitpunkt(Einbauplatz, m_Tstart + Zeitrahmenzaehler * ZEITRAHMENDAUER + DELTA_START, .NOWA_START_Rueckkehrzeitpunkt, lngZeitpunktms)
PrintStatus lngZeitpunktms - m_Tstart & " NOWA_START begonnen"
PrintStatus .NOWA_START_Rueckkehrzeitpunkt - m_Tstart & " NOWA_START abgeschlossen"
Select Case Fehler
Case KEIN_FEHLER
' hat geklappt
PrintStatus "NOWA_START im Zeitrahmen " & Zeitrahmenzaehler & " OK"
WriteToFW2Logfile Einbauplatz, "NOWA_START OK"
' nur bei erfolgreichem Start den Stopzeitpunkt setzen
.Stopzeitpunkt = m_Tstart + (Zeitrahmenzaehler * ZEITRAHMENDAUER) + m_Tpruef
PrintStatus "RZ soll zum Zeitpunkt " & .Stopzeitpunkt - m_Tstart & " gestopt werden"
DoEvents
Case FEHLER_ZUSPAET
PrintStatus lngZeitpunktms & " Zeitfenster für Start des US-Zähler verpasst. DELTA_START zu niedrig?"
Case Else
PrintStatus "Fehlercode beim Starten des US-Zählers: " & Fehler
.Fehlerinfo = .Fehlerinfo & "Fehlercode beim Starten des US-Zählers " & EinbauplatzNr & ".Fehler:" & Fehler & vbCrLf
.blnPruefungsfehler = True
End Select
Case FEHLER_ZUSPAET
PrintStatus " Zeitfenster für Start des RZ-Zähler " & EinbauplatzNr & " verpasst."
Case KEINE_ANTWORT_FEHLER
PrintStatus " keine Antwort beim Starten des RZ-Zählers " & EinbauplatzNr
.Fehlerinfo = .Fehlerinfo & "keine Antwort beim Starten des RZ-Zählers " & EinbauplatzNr & vbCrLf
.blnPruefungsfehler = True
End Select
Loop While Fehler = FEHLER_ZUSPAET
PrintStatus "----------------------------------"
End If ' SollPruefzeit_s > 0
End With
Next EinbauplatzNr
Do
Sleep 1000, True
' Verbleibende Zeit 1s bis zum Zeitrahmen vor dem ersten Stop
lngTemp = m_Tpruef + m_Tstart - (1 * ZEITRAHMENDAUER) - GetTickCount()
AnzeigeAktualisieren
If mblnExternalTemperatur Then
' Bis 10s vor Ende geänderte Temperatur in alle Zähler schreiben, wenn sie sich geändert hat
If (lngTemp And (2 ^ 31 - 1)) > 10000 Then
Debug.Print "verbleibende Zeit " & Int(lngTemp / 1000) & " s"
UpdateTemperaturInZaehlerFW2
Else
Debug.Print "das ende ist nah in " & Int(lngTemp / 1000) & " s"
End If
End If
' Halbzeit nur einmal abwarten
If Not blnHalbzeit And m_Tpruef / 2 + m_Tstart < GetTickCount Then
blnHalbzeit = True
If Not g_ohneSPS Then
dblTemperatur = m_SPS.GetEinlaufTemperatur
Else
dblTemperatur = 20
End If
PrintStatus "Halbzeit Temperatur=" & Format(dblTemperatur, "0.00") & "°C"
' Wasserdruck messen für Zulassungspruefdaten
g_dblWasserdruck = Round(MesseWasserdruck(), 3)
If g_dblWasserdruck <> -1 Then
PrintStatus "Wasserdruck: " & g_dblWasserdruck
End If
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If Not Pruefzaehler Is Nothing Then
EinbauplatzNr = Einbauplatz.getNr
' Halbzeit-Temperatur merken
udtPruefdaten(EinbauplatzNr).dblTemperatur = dblTemperatur
End If ' Pruefzaehler is nothing
Next Einbauplatz
If m_bVoreinstellwertSetzen Then
' 2% höher regeln,
' um den Durchfluß schneller zu erreichen
' Todo: diese Formel von g_App.Settings.GetAnzahlFuerVoreinstellwert
' abhängig machen
Voreinstellwert = m_SPS.GetStellwert + 2 '
PrintStatus "Stellwert: " & m_SPS.GetStellwert
'PrintStatus "Anzahl eingeb.Zähler:" & g_App.Settings.GetAnzahlFuerVoreinstellwert
PrintStatus "=> Voreinstellwert " & Voreinstellwert & " speichern"
SetVoreinstellwert m_DurchflussSoll, Voreinstellwert
End If
End If
DoEvents
If g_Abbruch Then
Exit Function
End If
Loop While lngTemp > 1000 'Zeit bis zum Ende
PrintStatus "----------------------------------"
PrintStatus GetTickCount - m_Tstart & " Stop-Phase"
' alle US-Zähler und MIDs Stoppen
Zeitrahmenzaehler = 0
For EinbauplatzNr = 1 To g_App.Settings.EinbauplaetzeJeStrang
Set Einbauplatz = m_colEinbauplatz.Item(EinbauplatzNr)
If Not Einbauplatz.getPruefzaehler Is Nothing Then
With udtPruefdaten(EinbauplatzNr)
.RZ_IstPruefzeit_ms = 0
.US_IstPruefzeit_ms = 0
If .Stopzeitpunkt <> 0 Then 'Wenn Stopzeit <> 0 dann war Start für diesen Zähler erfolgreich
PrintStatus "Zähler-Einbauplatz: " & EinbauplatzNr
Do
PrintStatus "Warte auf Zeitpunkt zum Stoppen des RZ: " & .Stopzeitpunkt + Zeitrahmenzaehler * ZEITRAHMENDAUER - m_Tstart
FehlerRZ = StoppeRZZaehlerZumZeitpunkt(EinbauplatzNr, .Stopzeitpunkt + Zeitrahmenzaehler * ZEITRAHMENDAUER, .RZ_STOP_Rueckkehrzeitpunkt, lngZeitpunktms)
PrintStatus "RZ_STOP zum Zeitpunkt " & lngZeitpunktms - m_Tstart & " begonnen"
PrintStatus "RZ_STOP zum Zeitpunkt " & .RZ_STOP_Rueckkehrzeitpunkt - m_Tstart & " abgeschlossen"
PrintStatus "RZ_STOP Dauer: " & .RZ_STOP_Rueckkehrzeitpunkt - lngZeitpunktms
.RZ_IstPruefzeit_ms = .RZ_STOP_Rueckkehrzeitpunkt - .RZ_START_Rueckkehrzeitpunkt
PrintStatus "reine RZ Prüfzeit gemessen (Rückkehr): " & .RZ_IstPruefzeit_ms
Select Case FehlerRZ
Case KEIN_FEHLER
PrintStatus "RZ_STOP im Zeitrahmen " & Zeitrahmenzaehler & " OK"
' hat geklappt
Fehler = StoppeUSZaehlerZumZeitpunkt(Einbauplatz, udtPruefdaten(EinbauplatzNr).Stopzeitpunkt + Zeitrahmenzaehler * ZEITRAHMENDAUER + DELTA_START + DELTA_FM, .NOWA_STOP_Rueckkehrzeitpunkt, lngZeitpunktms)
.US_IstPruefzeit_ms = .NOWA_STOP_Rueckkehrzeitpunkt - .NOWA_START_Rueckkehrzeitpunkt
PrintStatus lngZeitpunktms - m_Tstart & " NOWA_STOP begonnen"
PrintStatus .NOWA_STOP_Rueckkehrzeitpunkt - m_Tstart & " NOWA_STOP abgeschlossen"
PrintStatus "reine NOWA Prüfzeit gemessen (Rückkehr): " & .US_IstPruefzeit_ms
'.RZ_IstPruefzeit_ms = .Stopzeitpunkt + Zeitrahmenzaehler * ZEITRAHMENDAUER + DELTA_START + DELTA_FM
'.RZ_IstPruefzeit_ms = .RZ_STOP_Rueckkehrzeitpunkt - .RZ_START_Rueckkehrzeitpunkt
Select Case Fehler
Case KEIN_FEHLER
' hat geklappt
'PrintStatus " NOWA_STOP für Einbauplatz " & EinbauplatzNr & " OK"
' .US_IstPruefzeit_ms = .Stopzeitpunkt + Zeitrahmenzaehler * ZEITRAHMENDAUER + DELTA_START + DELTA_FM
WriteToFW2Logfile Einbauplatz, "NOWA_STOP OK"
Dim dblTemp As Double
If FW2_GetUS_NOWA_Zeit(Einbauplatz, dblTemp) = 0 Then
'OK
.US_IstPruefzeit_ms = dblTemp
WriteToFW2Logfile Einbauplatz, "NOWA Zeit: " & .US_IstPruefzeit_ms & " ms"
PrintStatus "NOWA-Zeit aus Rechenwerk: " & .US_IstPruefzeit_ms
PrintStatus "zum Vergleich von vb gemessene Zeit zw. NOWA Start und NOWA STOP: " & .NOWA_STOP_Rueckkehrzeitpunkt - .NOWA_START_Rueckkehrzeitpunkt
Else
.US_IstPruefzeit_ms = .NOWA_STOP_Rueckkehrzeitpunkt - .NOWA_START_Rueckkehrzeitpunkt
PrintStatus "Fallback auf die von VB gemessene Zeit zw. NOWA Start und NOWA STOP: " & .US_IstPruefzeit_ms
WriteToFW2Logfile Einbauplatz, "gemessene Prf-Zeit: " & .US_IstPruefzeit_ms & " ms"
End If
DoEvents
Case FEHLER_ZUSPAET
' Dieses Volumen kann nicht mehr synchron gemessen werden
Debug.Print " Zeitfenster für Stopp des US-Zählers " & EinbauplatzNr & " verpasst."
.Fehlerinfo = .Fehlerinfo & "Zeitfenster für Stopp des US-Zählers verpasst." & vbCrLf
.blnPruefungsfehler = True
Case Else
' Dieses Volumen kann nicht mehr synchron gemessen werden
.Fehlerinfo = .Fehlerinfo & "Fehler beim Stoppen des RZ-Zählers für EinbauplatzNr " & EinbauplatzNr & ". IECCOM-Fehler: " & Fehler & vbCrLf
Debug.Print " Fehler beim Stoppen des RZ-Zählers für EinbauplatzNr " & EinbauplatzNr & ". IECCOM-Fehler: " & Fehler & vbCrLf
.blnPruefungsfehler = True
End Select
Case FEHLER_ZUSPAET
PrintStatus GetTickCount - m_Tstart & " Zeitfenster für Stopp des RZ-Zähler " & EinbauplatzNr & " verpasst."
Zeitrahmenzaehler = Zeitrahmenzaehler + 1
Case Else
' Dieses Volumen kann nicht mehr geprüft werden
.Fehlerinfo = .Fehlerinfo & "Fehler '" & Fehler & "' beim stoppen des RZ-Zählers für Einbauplatznr " & EinbauplatzNr & vbCrLf
.RZ_IstPruefzeit_ms = 0
.blnPruefungsfehler = True
End Select
Loop While FehlerRZ = FEHLER_ZUSPAET
PrintStatus "----------------------------------"
End If ' Stopzeitpunkt <> 0
End With
End If
If g_Abbruch = True Then Exit For
Next EinbauplatzNr
AnzeigeAktualisieren
End Function
'Private Function FW2_NOWA_Start(Einbauplatz As CEinbauplatz) As Long
' FW2_NOWA_Start = modMBUS_SMS.fw2_open_comport(Einbauplatz.m_iComport, 2400, Einbauplatz.m_strMapfile, True)
' If FW2_NOWA_Start <> 0 Then
' PrintStatus "Fehler " & FW2_NOWA_Start & " in FW2_NOWA_Start(" & Einbauplatz.getNr & ") bei fw2_open_comport: " & modMBUS_SMS.Errorstring(CInt(FW2_NOWA_Start))
' Exit Function
' End If
' FW2_NOWA_Start = modMBUS_SMS.NOWA_START_FW2
'
' If FW2_NOWA_Start <> 0 Then
' PrintStatus "Fehler " & FW2_NOWA_Start & " in FW2_NOWA_Start(" & Einbauplatz.getNr & ") bei modMBUS_SMS.NOWA_START_FW2: " & modMBUS_SMS.Errorstring(CInt(FW2_NOWA_Start))
' Exit Function
' End If
'
'End Function
'Private Function FW2_NOWA_Stop(Einbauplatz As CEinbauplatz) As Long
' FW2_NOWA_Stop = modMBUS_SMS.fw2_open_comport(Einbauplatz.m_iComport, 2400, Einbauplatz.m_strMapfile, True)
' If FW2_NOWA_Stop <> 0 Then
' PrintStatus "Fehler " & FW2_NOWA_Stop & " in FW2_NOWA_Stop(" & Einbauplatz.getNr & ") bei fw2_open_comport: " & modMBUS_SMS.Errorstring(CInt(FW2_NOWA_Stop))
' Exit Function
' End If
' FW2_NOWA_Stop = modMBUS_SMS.NOWA_STOP_FW2
'
' If FW2_NOWA_Stop <> 0 Then
' PrintStatus "Fehler " & FW2_NOWA_Stop & " in FW2_NOWA_Stop(" & Einbauplatz.getNr & ") bei modMBUS_SMS.NOWA_STOP_FW2: " & modMBUS_SMS.Errorstring(CInt(FW2_NOWA_Stop))
' Exit Function
' End If
'End Function
Public Function FW2_Starte_NOWA(Einbauplatz As CEinbauplatz) As Long
Dim Wiederholung As Integer
FW2_Starte_NOWA = modMBUS_SMS.fw2_open_comport(Einbauplatz.m_iComport, 2400, Einbauplatz.m_strMapfile, True)
If FW2_Starte_NOWA <> 0 Then Exit Function
Wiederholung = 0
NochmalNowaStart:
FW2_Starte_NOWA = modMBUS_SMS.NOWA_START_FW2
If FW2_Starte_NOWA = MBUS_SMS_ERR_OK Then
' alles OK
ElseIf Wiederholung < 3 Then
PrintStatus "modMBUS_SMS.NOWA_START_FW2 Ebp=" & Einbauplatz.getNr & " Fehler: " & FW2_Starte_NOWA & ": " & modMBUS_SMS.Errorstring(CInt(FW2_Starte_NOWA)) & ", wdh = " & Wiederholung
Wiederholung = Wiederholung + 1
GoTo NochmalNowaStart
Else
PrintStatus "modMBUS_SMS.NOWA_START_FW2 Ebp=" & Einbauplatz.getNr & " wiederholter Fehler: " & FW2_Starte_NOWA & ": " & modMBUS_SMS.Errorstring(CInt(FW2_Starte_NOWA))
Exit Function
End If
' Taskbyte lesen. Bei den 65 NW gehen die Zähler manchmal nicht in den Prüfmodus
Dim intRet As Integer
Dim bytTaskbyte As Byte
intRet = modMBUS_SMS.ReadValue("u8_nowa_task_byte", bytTaskbyte)
If intRet = MBUS_SMS_ERR_OK Then
Select Case bytTaskbyte
Case &H0 'NOWA_OFF
WriteToFW2Logfile Einbauplatz, "lese u8_nowa_task_byte=" & vbTab & bytTaskbyte & "( NOWA_OFF: Zähler nicht im Prüfmodus, NOWA_START wiederholen)"
' Zähler nicht im Prüfmodus, NOWA_START wiederholen
If Wiederholung < 3 Then
Wiederholung = Wiederholung + 1
GoTo NochmalNowaStart
End If
Case &H55 'NOWA_ON
WriteToFW2Logfile Einbauplatz, "lese u8_nowa_task_byte=" & vbTab & bytTaskbyte & " ( = 85 OK)"
' alles gut
Case Else
WriteToFW2Logfile Einbauplatz, "lese u8_nowa_task_byte=" & vbTab & bytTaskbyte & " (nicht definiert)"
' nicht definiert
End Select
Else
WriteToFW2Logfile Einbauplatz, "lese u8_nowa_task_byte in FW2_Starte_NOWA() Fehler = " & intRet & " = " & modMBUS_SMS.Errorstring(intRet)
End If
'modMBUS_SMS.IECCOM_CloseCom
End Function
Public Function FW2_StarteUSundRZZaehler(Einbauplatz As CEinbauplatz, Optional lngIdentNrForVeriaction As Long = -1) As Long
Dim Wiederholung As Integer
Wiederholung = 0
FW2_StarteUSundRZZaehler = modMBUS_SMS.fw2_open_comport(Einbauplatz.m_iComport, 2400, Einbauplatz.m_strMapfile, True)
If FW2_StarteUSundRZZaehler <> 0 Then Exit Function
Wiederholung = 0
nochmalRZansprechen:
m_FMBus.send "**" & Einbauplatz.getNr & "@"
If m_FMBus.receive(500) = "" Then
PrintStatus "Fehler in StarteUSundRZZaehler mit FM85 an Einbauplatz " & Einbauplatz.getNr & ": keine Antwort. wdh=" & Wiederholung
If Wiederholung < 3 Then
Wiederholung = Wiederholung + 1
GoTo nochmalRZansprechen
Else
FW2_StarteUSundRZZaehler = KEINE_ANTWORT_FEHLER
PrintStatus "wiederholt Fehler in StarteUSundRZZaehler mit FM85 an Einbauplatz " & Einbauplatz.getNr & ": keine Antwort."
Exit Function
End If
End If
m_FMBus.send "O"
Wiederholung = 0
NochmalNowaStart:
FW2_StarteUSundRZZaehler = modMBUS_SMS.NOWA_START_FW2
If FW2_StarteUSundRZZaehler = MBUS_SMS_ERR_OK Then
' alles OK
ElseIf Wiederholung < 3 Then
PrintStatus "modMBUS_SMS.NOWA_START_FW2 Ebp=" & Einbauplatz.getNr & " Fehler: " & FW2_StarteUSundRZZaehler & ": " & modMBUS_SMS.Errorstring(CInt(FW2_StarteUSundRZZaehler)) & ", wdh = " & Wiederholung
Wiederholung = Wiederholung + 1
GoTo NochmalNowaStart
Else
PrintStatus "modMBUS_SMS.NOWA_START_FW2 Ebp=" & Einbauplatz.getNr & " Fehler: " & FW2_StarteUSundRZZaehler & ": " & modMBUS_SMS.Errorstring(CInt(FW2_StarteUSundRZZaehler))
Exit Function
End If
' Taskbyte lesen. Bei den 65 NW gehen die Zähler manchmal nicht in den Prüfmodus
Dim intRet As Integer
Dim bytTaskbyte As Byte
intRet = modMBUS_SMS.ReadValue("u8_nowa_task_byte", bytTaskbyte)
If intRet = MBUS_SMS_ERR_OK Then
Select Case bytTaskbyte
Case &H0 'NOWA_OFF
WriteToFW2Logfile Einbauplatz, "lese u8_nowa_task_byte=" & vbTab & bytTaskbyte & "( NOWA_OFF: Zähler nicht im Prüfmodus, NOWA_START wiederholen)"
' Zähler nicht im Prüfmodus, NOWA_START wiederholen
If Wiederholung < 1 Then
Wiederholung = Wiederholung + 1
GoTo NochmalNowaStart
End If
Case &H55 'NOWA_ON
WriteToFW2Logfile Einbauplatz, "lese u8_nowa_task_byte=" & vbTab & bytTaskbyte & " ( = 85 OK)"
' alles gut
Case Else
WriteToFW2Logfile Einbauplatz, "lese u8_nowa_task_byte=" & vbTab & bytTaskbyte & " (nicht definiert)"
' nicht definiert
End Select
Else
WriteToFW2Logfile Einbauplatz, "lese u8_nowa_task_byte in FW2_StarteUSundRZZaehler() Fehler = " & intRet & " = " & modMBUS_SMS.Errorstring(intRet)
End If
End Function
Private Function FW2_Stoppe_NOWA(Einbauplatz As CEinbauplatz) As Long
Dim Wiederholung As Integer
FW2_Stoppe_NOWA = modMBUS_SMS.fw2_open_comport(Einbauplatz.m_iComport, 2400, Einbauplatz.m_strMapfile, True)
If FW2_Stoppe_NOWA <> 0 Then Exit Function
Wiederholung = 0
nochmalNOWAStop:
FW2_Stoppe_NOWA = modMBUS_SMS.NOWA_STOP_FW2()
If FW2_Stoppe_NOWA <> MBUS_SMS_ERR_OK Then
If Wiederholung < 3 Then
PrintStatus "FW2_Stoppe_NOWA Ebp=" & Einbauplatz.getNr & " & Fehler: " & FW2_Stoppe_NOWA & ": " & modMBUS_SMS.Errorstring(CInt(FW2_Stoppe_NOWA)) & ", wdh=" & Wiederholung
Wiederholung = Wiederholung + 1
GoTo nochmalNOWAStop
Else
PrintStatus "FW2_Stoppe_NOWA NOWA_STOP_FW2 Ebp=" & Einbauplatz.getNr & " & wiederholter Fehler: " & FW2_Stoppe_NOWA & ": " & modMBUS_SMS.Errorstring(CInt(FW2_Stoppe_NOWA))
Exit Function
End If
End If
End Function
Private Function FW2_StoppeUSundRZZaehler(Einbauplatz As CEinbauplatz) As Long
Dim Wiederholung As Integer
FW2_StoppeUSundRZZaehler = modMBUS_SMS.fw2_open_comport(Einbauplatz.m_iComport, 2400, Einbauplatz.m_strMapfile, True)
If FW2_StoppeUSundRZZaehler <> 0 Then Exit Function
Wiederholung = 0
nochmalRZansprechen:
m_FMBus.send "**" & Einbauplatz.getNr & "@"
If m_FMBus.receive(500) = "" Then
FW2_StoppeUSundRZZaehler = KEINE_ANTWORT_FEHLER
If Wiederholung < 3 Then
Wiederholung = Wiederholung + 1
PrintStatus "FW2_StoppeUSundRZZaehler: keine Antwort beim Adressieren des FM85, wdh=" & Wiederholung
GoTo nochmalRZansprechen
Else
PrintStatus "FW2_StoppeUSundRZZaehler: wiederholt keine Antwort beim Adressieren des FM85!"
Exit Function
End If
End If
m_FMBus.send "q"
Wiederholung = 0
nochmalNOWAStop:
FW2_StoppeUSundRZZaehler = modMBUS_SMS.NOWA_STOP_FW2()
If FW2_StoppeUSundRZZaehler <> MBUS_SMS_ERR_OK Then
If Wiederholung < 3 Then
PrintStatus "FW2_StoppeUSundRZZaehler NOWA_STOP_FW2 Ebp=" & Einbauplatz.getNr & " & Fehler: " & FW2_StoppeUSundRZZaehler & ": " & modMBUS_SMS.Errorstring(CInt(FW2_StoppeUSundRZZaehler)) & ", wdh=" & Wiederholung
Wiederholung = Wiederholung + 1
GoTo nochmalNOWAStop
Else
PrintStatus "FW2_StoppeUSundRZZaehler NOWA_STOP_FW2 Ebp=" & Einbauplatz.getNr & " & wiederholter Fehler: " & FW2_StoppeUSundRZZaehler & ": " & modMBUS_SMS.Errorstring(CInt(FW2_StoppeUSundRZZaehler))
Exit Function
End If
End If
End Function
Private Function StarteRZZaehlerZumZeitpunkt(EinbauplatzNr As Integer, Zeitpunkt As Long, Rueckkehrzeitpunkt As Long, Optional ByRef lngZeitpunktms As Long) As Long
Dim Wiederholung As Integer
Wiederholung = 0
nochmalFM85adressieren:
m_FMBus.send "**" & EinbauplatzNr & "@"
If m_FMBus.receive(500) = "" Then
StarteRZZaehlerZumZeitpunkt = KEINE_ANTWORT_FEHLER
Wiederholung = Wiederholung + 1
If Wiederholung < 3 Then
GoTo nochmalFM85adressieren
Else
Exit Function
End If
End If
StarteRZZaehlerZumZeitpunkt = FEHLER_ZUSPAET ' zu Spät
Do While Zeitpunkt > GetTickCount()
StarteRZZaehlerZumZeitpunkt = KEIN_FEHLER
Loop
If StarteRZZaehlerZumZeitpunkt = FEHLER_ZUSPAET Then
' zu spät
Exit Function
End If
lngZeitpunktms = GetTickCount()
m_FMBus.send "O"
Rueckkehrzeitpunkt = GetTickCount()
End Function
Private Function StoppeRZZaehlerZumZeitpunkt(EinbauplatzNr As Integer, Zeitpunkt As Long, Rueckkehrzeitpunkt As Long, Optional ByRef lngZeitpunktms As Long) As Long
Dim Wiederholung As Integer
Wiederholung = 0
nochmalFM85adressieren:
m_FMBus.send "**" & EinbauplatzNr & "@"
If m_FMBus.receive(500) = "" Then
StoppeRZZaehlerZumZeitpunkt = KEINE_ANTWORT_FEHLER
If Wiederholung < 3 Then
Wiederholung = Wiederholung + 1
GoTo nochmalFM85adressieren
Else
PrintStatus "StoppeRZZaehlerZumZeitpunkt(): wiederholt keine Antwort beim Adresseieren von FM85-" & EinbauplatzNr
Exit Function
End If
End If
If Not m_PruefungsArtWaage Then
StoppeRZZaehlerZumZeitpunkt = FEHLER_ZUSPAET ' zu Spät
Do While Zeitpunkt > GetTickCount()
StoppeRZZaehlerZumZeitpunkt = KEIN_FEHLER
lblZeit.caption = Int((Zeitpunkt - GetTickCount()) / 1000)
DoEvents
Loop
If StoppeRZZaehlerZumZeitpunkt = FEHLER_ZUSPAET Then
' zu spät
Exit Function
End If
End If
lngZeitpunktms = GetTickCount
m_FMBus.send "q"
Rueckkehrzeitpunkt = GetTickCount
End Function
Private Function JustageArt(strText As String) As String
JustageArt = ""
If g_blnbedingteQiJustage Then
JustageArt = JustageArt & "bedingte "
End If
If g_bGetrennteJustage Then
JustageArt = JustageArt & "getrennte "
End If
JustageArt = JustageArt & "Justage"
If strText <> "" Then
JustageArt = JustageArt & " " & strText
End If
JustageArt = JustageArt & " " & IIf(m_VorPruefungsArtWaage, "g.Wg", "g.RZ")
If m_JustageCount <> "" Then
JustageArt = JustageArt & " " & m_JustageCount
End If
End Function
Private Function StoppeUSZaehlerZumZeitpunkt(Einbauplatz As CEinbauplatz, Zeitpunkt As Long, Rueckkehrzeitpunkt As Long, Optional ByRef lngZeitpunktms As Long) As Long
Dim US_COM_Port As Integer
Rueckkehrzeitpunkt = GetTickCount
lngZeitpunktms = GetTickCount
Debug.Print "Zeit bis zum US-Zähler Stoppen:" & Zeitpunkt - GetTickCount()
US_COM_Port = Val(g_App.Settings.getUSComPort(Einbauplatz.getNr))
If Not m_PruefungsArtWaage Then
StoppeUSZaehlerZumZeitpunkt = FEHLER_ZUSPAET ' zu Spät
Do While Zeitpunkt > GetTickCount()
StoppeUSZaehlerZumZeitpunkt = KEIN_FEHLER
Loop
If StoppeUSZaehlerZumZeitpunkt = FEHLER_ZUSPAET Then
' zu spät
Exit Function
End If
End If
lngZeitpunktms = GetTickCount
StoppeUSZaehlerZumZeitpunkt = modMBUS_SMS.fw2_open_comport(Einbauplatz.m_iComport, 2400, Einbauplatz.m_strMapfile, True, 3)
If StoppeUSZaehlerZumZeitpunkt = 0 Then
StoppeUSZaehlerZumZeitpunkt = modMBUS_SMS.NOWA_STOP_FW2()
End If
modMBUS_SMS.IECCOM_CloseCom
Rueckkehrzeitpunkt = GetTickCount
End Function
' Rückgabe: 0 wenn kein Fehler
Private Function StarteUSZaehlerZumZeitpunkt(Einbauplatz As CEinbauplatz, Zeitpunkt As Long, Rueckkehrzeitpunkt As Long, Optional ByRef lngZeitpunktms As Long) As Integer
Dim US_COM_Port As Integer
Dim Wiederholung As Integer
StarteUSZaehlerZumZeitpunkt = FEHLER_ZUSPAET ' Zu spät annehmen
US_COM_Port = Val(g_App.Settings.getUSComPort(Einbauplatz.getNr))
Do While Zeitpunkt > GetTickCount()
' noch innerhalb des Zeitrahmens
StarteUSZaehlerZumZeitpunkt = KEIN_FEHLER
Loop
If StarteUSZaehlerZumZeitpunkt = FEHLER_ZUSPAET Then
' zu spät, ggf Aufruf der Funktion zu einem späteren Zeitpunkt wiederholen
Exit Function
End If
lngZeitpunktms = GetTickCount
StarteUSZaehlerZumZeitpunkt = modMBUS_SMS.fw2_open_comport(Einbauplatz.m_iComport, 2400, Einbauplatz.m_strMapfile, True, 3)
If StarteUSZaehlerZumZeitpunkt = 0 Then
Wiederholung = 0
NochmalNowaStart:
StarteUSZaehlerZumZeitpunkt = modMBUS_SMS.NOWA_START_FW2
If StarteUSZaehlerZumZeitpunkt = MBUS_SMS_ERR_OK Then
WriteToFW2Logfile Einbauplatz, "NOWA_START_FW2 OK"
Else
WriteToFW2Logfile Einbauplatz, "NOWA_START_FW2 Fehler " & StarteUSZaehlerZumZeitpunkt & ": " & modMBUS_SMS.Errorstring(StarteUSZaehlerZumZeitpunkt) & ", wdh=" & Wiederholung
If Wiederholung < 3 Then
Wiederholung = Wiederholung + 1
GoTo NochmalNowaStart
Else
Exit Function
End If
End If
Else
' Schnittstellen Fehler
Exit Function
End If
'StarteUSZaehlerZumZeitpunkt = modIECCOM.NOWA_START(US_COM_Port)
Rueckkehrzeitpunkt = GetTickCount()
' Taskbyte lesen. Bei den 65 NW gehen die Zähler manchmal nicht in den Prüfmodus
Dim intRet As Integer
Dim bytTaskbyte As Byte
intRet = modMBUS_SMS.ReadValue("u8_nowa_task_byte", bytTaskbyte)
If intRet = MBUS_SMS_ERR_OK Then
WriteToFW2Logfile Einbauplatz, "lese u8_nowa_task_byte=" & vbTab & bytTaskbyte
Select Case bytTaskbyte
Case 0 'NOWA_OFF
' Zähler nicht im Prüfmodus, NOWA_START 1 * wiederholen
If Wiederholung < 1 Then
Wiederholung = Wiederholung + 1
GoTo NochmalNowaStart
End If
Case 85 'NOWA_ON
' alles gut
Case Else
' nicht definiert
End Select
Else
WriteToFW2Logfile Einbauplatz, "lese u8_nowa_task_byte Fehler = " & intRet & " = " & modMBUS_SMS.Errorstring(intRet)
End If
modMBUS_SMS.IECCOM_CloseCom
End Function
Private Function Vorpruefung() As Long
Dim Einbauplatz As CEinbauplatz
Dim Pruefzaehler As CPruefzaehler
Dim USVolumen As Double
Dim RefVolumen As Double
Dim PPNr As Integer
Dim EinbauplatzNr As Integer
Dim dblFehler As Double
Dim lngReturn As Long
Dim lngError As Long
Dim Identitaetsnummer As Long
Dim QIst As Double
Dim dblTemperatur As Double
Dim RefZFehler As Double
Dim lngUSPruefZeit_ms As Long
Dim lngRZPruefZeit_ms As Long
Dim dblPruefzeit As Double
Dim Fehler As Double
Dim udtPruefdaten_imPP_mitEBP(10) As TypUSPruefdaten
Dim firmwareVersion As Byte
Dim comport As Integer
Dim lngRet As Long
Dim dblLetzterRZFehler As Double
Dim udtUSParameter(10) As JustageParameter_Type
Dim Mittelwert_udtUSParameter(10) As JustageParameter_Type
Dim udtUSZusatzParameter(10) As US_ZusatzParameter_Typ
''''''''''''''''''''''''''''''
Dim dblFehlerInQb(10) As Double
Dim dblIstFlussInQb(10) As Double
Dim dblSollFlussInQb(10) As Double
Dim dblTemperaturInQb(10) As Double
Dim dblNeuIstFluss1_m3ph As Double
Dim dblQminFehler As Double
Dim objJustageWerte(10) As CJustagewerte
Set m_Referenzzaehler = New CRefzaehler
Dim QiDurchlauf As Integer
Dim strTemp As String
' Einstellung für Automatik-Modus in der SPS testen
TestAutomatik:
If Not m_SPS.IstAutomatik Then
dummy = MsgBox("Bitte SPS auf Automatik stellen", vbOKCancel)
If dummy = vbCancel Then
endDialog (IDCANCEL)
Exit Function
End If
GoTo TestAutomatik
End If
If Not m_SPS.IstStreckePruefbereit Then
If MsgBox("Soll die Strecke jetzt automatisch gespannt u. gefüllt werden?", vbYesNo Or vbDefaultButton2, "SPS meldet: Strecke ist nicht prüfbereit") = vbYes Then
' Betrieb Vorbereiten
m_SPS.setBetrieb 1
PrintStatus "Betrieb vorbereiten: Spannen und Füllen..."
Do While Not m_SPS.IstStreckeGefuellt
Sleep 1000, True
If g_Abbruch = True Then
Exit Function
End If
Loop
' nach dem Füllen: Betrieb auf 0
Sleep 500
m_SPS.setBetrieb 0
End If
'------------------------------------------------------------------------
PrintStatus "Warte auf Pruefbereitschaft der SPS..."
Do While Not m_SPS.IstStreckePruefbereit
Sleep 1000, True
If g_Abbruch = True Then
Exit Function
End If
Loop
End If ' Pruefbereit
PrintStatus "Strecke ist Prüfbereit !"
PrintStatus "***** Vorprüfung ******"
'''''''''''''''''''''''''''
' Schleife Vorprüfpunkte
'''''''''''''''''''''''''''
m_colUniqueVorPP.sortQ
Set m_vorPruefpunktQi = m_colUniqueVorPP.getCollection.Item(m_colUniqueVorPP.getCollection.Count)
' Je Einbauplatz werden die aktuellen Daten aus dem Zähler gelesen
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If Not Pruefzaehler Is Nothing Then
EinbauplatzNr = Einbauplatz.getNr
' neu RH 31.10.2013 21= Justage begonnen
Pruefzaehler.getAuftragPositionSerienNr.setStatusFertigung 21
Pruefzaehler.getAuftragPositionSerienNr.save
' OffsetJustage / Tabelle USJustageWerte
Set objJustageWerte(EinbauplatzNr) = New CJustagewerte
objJustageWerte(EinbauplatzNr).SerienNr = Pruefzaehler.getSerienNr
objJustageWerte(EinbauplatzNr).FabNr = Pruefzaehler.getAuftragPositionSerienNr.getFabNr
objJustageWerte(EinbauplatzNr).Einbauplatz = EinbauplatzNr
objJustageWerte(EinbauplatzNr).comport = Val(g_App.Settings.getUSComPort(EinbauplatzNr))
objJustageWerte(EinbauplatzNr).DatumVorpruefung = m_Pruefgang.Datum
udtUSParameter(EinbauplatzNr).Offset_Qmin = Pruefzaehler.getVorpruefpunkte.getOffset_Qmin
udtUSParameter(EinbauplatzNr).Offset_Qp = Pruefzaehler.getVorpruefpunkte.getOffset_Qp
If g_blnJustageWerteNICHTschreiben = False Then
If Einbauplatz.getAktiv = True Then
' Sicherstellen, dass im RW f_fp_o_geber auf Null gesetzt ist
FW2_writeVar Einbauplatz, "f_fp_o_geber", 0
objJustageWerte(EinbauplatzNr).FP_O_Geber = 0
Else
WriteToFW2Logfile Einbauplatz, "Der Wert von f_fp_o_geber wird wegen Ausfall NICHT auf 0 gesetzt."
End If
Else
WriteToFW2Logfile Einbauplatz, "Der Wert von f_fp_o_geber wird auf Wunsch NICHT auf 0 gesetzt."
End If
'Daten aus dem Rechenwerk auslesen
If LeseJustageParameterAusZaehler(Einbauplatz, udtUSParameter(Einbauplatz.getNr)) <> 0 Then
' Fehler
WriteToFW2Logfile Einbauplatz, "Fehler in LeseJustageParameterAusZaehler()" & vbTab & "Prüfung für diesen Zähler wurde deaktiviert."
Einbauplatz.setAktiv False
Else
ShowUSParameter udtUSParameter(Einbauplatz.getNr), udtUSZusatzParameter(Einbauplatz.getNr), "Justage Parameter aus Zähler", Einbauplatz.getNr
End If
End If
Next Einbauplatz
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''' eigentliche Vorprüfung ''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''' 1. Prüfpunkt bei Qmax ''''''''''''''''''''''
PPNr = 1
Set m_vorPruefpunkt = m_colUniqueVorPP.getCollection.Item(PPNr)
m_DurchflussSoll = m_vorPruefpunkt.getQ
m_Pruefzeit = m_vorPruefpunkt.GetTime
m_VolumenSoll = m_Pruefzeit * m_DurchflussSoll / 3.6
PrintStatus "geschätztes Soll-Volumen in Litern: " & m_VolumenSoll
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If Not Pruefzaehler Is Nothing Then
WriteToFW2Logfile Einbauplatz, "Justage Qmax [m³/h]=" & vbTab & m_DurchflussSoll
WriteToFW2Logfile Einbauplatz, "Soll-Pruefzeit [s]=" & vbTab & m_Pruefzeit
WriteToFW2Logfile Einbauplatz, "geschätztes Soll-Volumen in Litern=" & vbTab & m_VolumenSoll
End If
Next
lblSollV.caption = Format(m_VolumenSoll, "0")
Call m_Referenzzaehler.loadForDurchfluss(m_DurchflussSoll, g_App.Settings.getMIDGruppe)
m_SPS.SetQDiff 0
PrintStatus "Vorprüfung im Vorprüfpunkt 1 (QNenn):"
lngRet = VorpruefungImPP(PPNr, udtPruefdaten_imPP_mitEBP())
If lngRet < 0 Then
g_Abbruch = True
Vorpruefung = -1
End If
If g_Abbruch Then Exit Function
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If Not Pruefzaehler Is Nothing Then
EinbauplatzNr = Einbauplatz.getNr
comport = Val(g_App.Settings.getUSComPort(EinbauplatzNr))
If udtPruefdaten_imPP_mitEBP(EinbauplatzNr).blnPruefungsfehler = False Then
If udtPruefdaten_imPP_mitEBP(EinbauplatzNr).Fehlerinfo <> "" Then
PrintStatus udtPruefdaten_imPP_mitEBP(EinbauplatzNr).Fehlerinfo
End If
' kein Fehler aufgetreten
Call modUSchall.FW2_GetUSVolumen(Einbauplatz, USVolumen)
WriteToFW2Logfile Einbauplatz, "NOWA Volumen=" & vbTab & USVolumen
Call modUSchall.FW2_GetUS_NOWA_Zeit(Einbauplatz, dblPruefzeit)
PrintStatus "NOWA Prüfzeit: " & dblPruefzeit & " ms"
WriteToFW2Logfile Einbauplatz, "NOWA Prüfzeit=" & vbTab & dblPruefzeit
If USVolumen = 0 Then
WriteToFW2Logfile Einbauplatz, "Da das NOWA-Volumen nicht ermittelt werden konnte, wird dieser Zähler nicht weiter justiert."
Vorpruefung = -20
Einbauplatz.setAktiv False
'Stop
End If
lngUSPruefZeit_ms = udtPruefdaten_imPP_mitEBP(EinbauplatzNr).US_IstPruefzeit_ms
lngRZPruefZeit_ms = udtPruefdaten_imPP_mitEBP(EinbauplatzNr).RZ_IstPruefzeit_ms
PrintStatus "US Zähler Prüfzeit(" & EinbauplatzNr & ")= " & lngUSPruefZeit_ms & " ms"
PrintStatus "RZ Zähler Prüfzeit(" & EinbauplatzNr & ")= " & lngRZPruefZeit_ms & " ms"
PrintStatus "US Volumen am Einbauplatz " & EinbauplatzNr & " [m³]:" & USVolumen
' Refererenz Volumen bestimmen
If Not m_VorPruefungsArtWaage Then
' Refererenz Volumen bestimmen aus Referenzzähler
Call GetRZVolumen(EinbauplatzNr, m_Referenzzaehler, RefVolumen)
WriteToFW2Logfile Einbauplatz, "Referenzvolumen FM85 [m³]=" & vbTab & RefVolumen
PrintStatus "FM85 Volumen [m³]:" & RefVolumen
If Not g_ohneSPS Then
dblTemperatur = m_SPS.GetEinlaufTemperatur
End If
dblLetzterRZFehler = m_Referenzzaehler.letzterFehler(m_DurchflussSoll, dblTemperatur)
WriteToFW2Logfile Einbauplatz, "Fehler RZ=" & vbTab & dblLetzterRZFehler
PrintStatus "Fehler des RZ in diesem Prüfpunkt: " & Format(dblLetzterRZFehler, "0.0")
RefVolumen = RefVolumen / (1 + dblLetzterRZFehler / 100)
PrintStatus "Ist-Volumen (korrigiert mit Fehler des RZ): " & RefVolumen
WriteToFW2Logfile Einbauplatz, "korrigiertes Referenzvolumen [m³]=" & vbTab & RefVolumen
Else
' Refererenz Volumen bestimmen aus Gewicht der Waage
RefVolumen = Errechne_Volumen_Von_Wasser_in_m3(m_Waage.GetGewicht, udtPruefdaten_imPP_mitEBP(EinbauplatzNr).dblTemperatur)
WriteToFW2Logfile Einbauplatz, "Referenzvolumen Waage [m³]=" & vbTab & RefVolumen
PrintStatus "Ist-Volumen [m³] (aus Waage, korrigiert mit Temperatur): " & RefVolumen
' Hier sind die Prüfzeiten rechnerisch gleich
lngRZPruefZeit_ms = lngUSPruefZeit_ms
End If
If RefVolumen = 0 Then
MsgBox ("Referenz Volumen (Waage oder Referenzzähler) konnte nicht ermittelt werden")
Vorpruefung = -21
WriteToFW2Logfile Einbauplatz, "Referenz Volumen konnte nicht ermittelt werden."
Einbauplatz.setAktiv False
'Stop
End If
MSFlexGrid1.row = Einbauplatz.getNr
MSFlexGrid1.col = PPNr
If Not lngUSPruefZeit_ms = 0 Then
If Not m_VorPruefungsArtWaage Then
'Offset_Qp abziehen, um Kurve nach oben zu bekommen
'geändert am 20.01.2004 AP mit Gepräch mit UD
If udtUSParameter(Einbauplatz.getNr).Offset_Qp <> 0 Then
WriteToFW2Logfile Einbauplatz, "Offset_Qp=" & vbTab & udtUSParameter(Einbauplatz.getNr).Offset_Qp
RefVolumen = RefVolumen * (1 - udtUSParameter(Einbauplatz.getNr).Offset_Qp / 100 * (-1))
WriteToFW2Logfile Einbauplatz, "Qp RefVolumen (- Offset_Qp) =" & vbTab & RefVolumen
End If
' mit den wahren Prüfzeiten korrigierter Fehler
Fehler = 100 * (USVolumen / lngUSPruefZeit_ms - RefVolumen / lngRZPruefZeit_ms) / (RefVolumen / lngRZPruefZeit_ms)
PrintStatus "Fehler = 100 * (USVolumen / lngUSPruefZeit_ms - RefVolumen / lngRZPruefZeit_ms) / (RefVolumen / lngRZPruefZeit_ms) =" & Format(Fehler, "0.00")
WriteToFW2Logfile Einbauplatz, "Fehler Qp =" & vbTab & Format(Fehler, "0.00")
Else
'Offset_Qp abziehen, um Kurve nach oben zu bekommen
'geändert am 20.01.2004 AP mit Gepräch mit UD
If udtUSParameter(Einbauplatz.getNr).Offset_Qp <> 0 Then
WriteToFW2Logfile Einbauplatz, "Offset_Qp=" & vbTab & udtUSParameter(Einbauplatz.getNr).Offset_Qp
RefVolumen = RefVolumen * (1 - udtUSParameter(Einbauplatz.getNr).Offset_Qp / 100 * (-1))
WriteToFW2Logfile Einbauplatz, "Qp RefVolumen (-Qffset_Qp)=" & vbTab & RefVolumen
End If
Fehler = 100 * (USVolumen - RefVolumen) / RefVolumen
PrintStatus "Fehler = 100 * (USVolumen - RefVolumen) / RefVolumen =" & Format(Fehler, "0.00")
WriteToFW2Logfile Einbauplatz, "Fehler Qp=" & vbTab & Format(Fehler, "0.00")
End If
If Not g_ohneSPS Then
dblTemperatur = m_SPS.GetEinlaufTemperatur
End If
MSFlexGrid1.text = Format(Fehler, "0.00")
AutoSpaltenBreite MSFlexGrid1, lblAutosize
DoEvents
udtUSParameter(Einbauplatz.getNr).Istfluss2_m3ph = USVolumen / (lngUSPruefZeit_ms / 1000 / 60 / 60)
udtUSParameter(Einbauplatz.getNr).Sollfluss2_m3ph = RefVolumen / (lngRZPruefZeit_ms / 1000 / 60 / 60)
udtUSParameter(Einbauplatz.getNr).Temperatur2_°C = dblTemperatur
udtUSParameter(Einbauplatz.getNr).Fehler2 = Fehler
PrintStatus "gemessenes Q vom US = (USVolumen / (lngUSPruefZeit_ms / 1000 / 60 / 60)=" & udtUSParameter(Einbauplatz.getNr).Istfluss2_m3ph
PrintStatus "gemessenes Q vom FM85 = RefVolumen / (lngRZPruefZeit_ms / 1000 / 60 / 60) =" & udtUSParameter(Einbauplatz.getNr).Sollfluss2_m3ph
WriteToFW2Logfile Einbauplatz, "Prüfzeit [s]=" & vbTab & lngUSPruefZeit_ms / 1000
WriteToFW2Logfile Einbauplatz, "Istfluss2_m3ph=" & vbTab & udtUSParameter(Einbauplatz.getNr).Istfluss2_m3ph
WriteToFW2Logfile Einbauplatz, "Sollfluss2_m3ph=" & vbTab & udtUSParameter(Einbauplatz.getNr).Sollfluss2_m3ph
If g_bGetrennteJustage Then
WriteToFW2Logfile Einbauplatz, "getrennte K-Geber Justageformel "
gudtUSParameter = udtUSParameter(Einbauplatz.getNr)
Justage1_Execute_FW2 m_vorPruefpunktQi.getQ
udtUSParameter(Einbauplatz.getNr) = gudtUSParameter
If g_blnJustageWerteNICHTschreiben = False Then
If Einbauplatz.getAktiv = True Then
modUSchall.FW2_writeVar Einbauplatz, "f_fp_k_geber1", udtUSParameter(Einbauplatz.getNr).Geberkonstante_Neu1_m
modUSchall.FW2_writeVar Einbauplatz, "f_fp_k_geber2", udtUSParameter(Einbauplatz.getNr).Geberkonstante_Neu2_m
Else
WriteToFW2Logfile Einbauplatz, "f_fp_k_geber1,2 werden wegen Ausfall nicht ins RW geschrieben"
End If
Else
WriteToFW2Logfile Einbauplatz, "f_fp_k_geber1,2 werden nicht ins RW geschrieben"
End If
End If
ShowUSParameter udtUSParameter(Einbauplatz.getNr), udtUSZusatzParameter(Einbauplatz.getNr), "Justage Parameter nach 1. Vor-Prüfpunkt Qmax", Einbauplatz.getNr
Else
WriteToFW2Logfile Einbauplatz, "Da USPruefZeit_ms = 0: Vorprüfung für Einbauplatz " & Einbauplatz.getNr & " fehlgeschlagen."
Einbauplatz.setAktiv False
MSFlexGrid1.text = "?"
Vorpruefung = -23
End If
Else
WriteToFW2Logfile Einbauplatz, "Vorprüfung für Einbauplatz " & EinbauplatzNr & " fehlgeschlagen:"
If udtPruefdaten_imPP_mitEBP(EinbauplatzNr).Fehlerinfo <> "" Then
WriteToFW2Logfile Einbauplatz, udtPruefdaten_imPP_mitEBP(EinbauplatzNr).Fehlerinfo
End If
Einbauplatz.setAktiv False
End If
gudtUSParameter = udtUSParameter(Einbauplatz.getNr)
End If ' Pruefzaehler is nothing
Next Einbauplatz
If m_PruefungsArtWaage = True Then
If g_App.PruefstationNr = 2020 Then
' es darf kein warmes Wasser im Behälter kalt werden
Call BeideBehaelterLeeren
End If
End If
'''''''''''''''''''''''' Qmin ''''''''''''''''''''''
' Qmin
PPNr = m_colUniqueVorPP.getCollection.Count
Set m_vorPruefpunkt = m_colUniqueVorPP.getCollection.Item(PPNr)
m_DurchflussSoll = m_vorPruefpunkt.getQ
m_Pruefzeit = m_vorPruefpunkt.GetTime
m_VolumenSoll = m_Pruefzeit * m_DurchflussSoll / 3.6
PrintStatus "geschätztes Soll-Volumen in Litern: " & Format(m_VolumenSoll, "0.000")
lblSollV.caption = Format(m_VolumenSoll, "0")
Call m_Referenzzaehler.loadForDurchfluss(m_DurchflussSoll, g_App.Settings.getMIDGruppe)
m_SPS.SetQDiff 0
PrintStatus "Vorprüfung im Vorprüfpunkt (Qmin):"
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If Not Pruefzaehler Is Nothing Then
WriteToFW2Logfile Einbauplatz, "-----------"
WriteToFW2Logfile Einbauplatz, "Justage Qmin [m³/h]=" & vbTab & m_DurchflussSoll
WriteToFW2Logfile Einbauplatz, "Pruefzeit [s]=" & vbTab & m_Pruefzeit
WriteToFW2Logfile Einbauplatz, "geschätztes Soll-Volumen [l]=" & vbTab & m_VolumenSoll
End If
Next
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
QiDurchlauf = 0
EinsprungQiWiederholung:
If g_blnVorpruefung3malQiMittelwert Then
QiDurchlauf = QiDurchlauf + 1 ' 1,2,3
End If
lngRet = VorpruefungImPP(PPNr, udtPruefdaten_imPP_mitEBP())
If lngRet < 0 Then
Vorpruefung = -1
g_Abbruch = True
End If
If g_Abbruch Then Exit Function
Simulation:
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If Not Pruefzaehler Is Nothing Then
EinbauplatzNr = Einbauplatz.getNr
comport = Val(g_App.Settings.getUSComPort(EinbauplatzNr))
If udtPruefdaten_imPP_mitEBP(EinbauplatzNr).blnPruefungsfehler = False Then
If udtPruefdaten_imPP_mitEBP(EinbauplatzNr).Fehlerinfo <> "" Then
PrintStatus udtPruefdaten_imPP_mitEBP(EinbauplatzNr).Fehlerinfo
End If
' kein Fehler aufgetreten
Call FW2_GetUSVolumen(Einbauplatz, USVolumen)
WriteToFW2Logfile Einbauplatz, "NOWA Volumen=" & vbTab & USVolumen
PrintStatus "US Volumen am Einbauplatz " & EinbauplatzNr & " [m³]:" & USVolumen
If USVolumen = 0 Then
MsgBox ("US Volumen konnte nicht ermittelt werden")
Vorpruefung = -20
Einbauplatz.setAktiv False
'Stop
End If
Call FW2_GetUS_NOWA_Zeit(Einbauplatz, dblPruefzeit)
PrintStatus "NOWA Prüfzeit: " & dblPruefzeit & " ms"
WriteToFW2Logfile Einbauplatz, "NOWA Prüfzeit= " & vbTab & dblPruefzeit
lngUSPruefZeit_ms = udtPruefdaten_imPP_mitEBP(EinbauplatzNr).US_IstPruefzeit_ms
lngRZPruefZeit_ms = udtPruefdaten_imPP_mitEBP(EinbauplatzNr).RZ_IstPruefzeit_ms
WriteToFW2Logfile Einbauplatz, "US-Zähler Prüfzeit [ms] t=" & vbTab & lngUSPruefZeit_ms
WriteToFW2Logfile Einbauplatz, "Ref-Zähler Prüfzeit [ms]=" & vbTab & lngRZPruefZeit_ms
PrintStatus "US Zähler Prüfzeit(" & EinbauplatzNr & ")= " & lngUSPruefZeit_ms & " ms"
PrintStatus "RZ Zähler Prüfzeit(" & EinbauplatzNr & ")= " & lngRZPruefZeit_ms & " ms"
' Refererenz Volumen bestimmen
If Not m_VorPruefungsArtWaage Then
' Refererenz Volumen bestimmen aus Referenzzähler
Call GetRZVolumen(EinbauplatzNr, m_Referenzzaehler, RefVolumen)
PrintStatus "RZ Volumen [m³]:" & RefVolumen
WriteToFW2Logfile Einbauplatz, "Referenzvolumen FM85 [m³]=" & vbTab & RefVolumen
If Not g_ohneSPS Then
dblLetzterRZFehler = m_Referenzzaehler.letzterFehler(m_DurchflussSoll, m_SPS.GetEinlaufTemperatur)
End If
WriteToFW2Logfile Einbauplatz, "Fehler RZ=" & vbTab & dblLetzterRZFehler
PrintStatus "Fehler des RZ in diesem Prüfpunkt: " & Format(dblLetzterRZFehler, "0.0")
RefVolumen = RefVolumen / (1 + dblLetzterRZFehler / 100)
PrintStatus "Ist-Volumen (korrigiert mit Fehler des RZ): " & RefVolumen
WriteToFW2Logfile Einbauplatz, "korrigiertes Referenzvolumen [m³]=" & vbTab & RefVolumen
Else
' Refererenz Volumen bestimmen aus Gewicht der Waage
RefVolumen = Errechne_Volumen_Von_Wasser_in_m3(m_Waage.GetGewicht, udtPruefdaten_imPP_mitEBP(EinbauplatzNr).dblTemperatur)
PrintStatus "Ist-Volumen [m³] (aus Waage, korrigiert mit Temperatur): " & RefVolumen
WriteToFW2Logfile Einbauplatz, "Referenzvolumen Waage [m³]=" & vbTab & RefVolumen
' Hier sind die Prüfzeiten rechnerisch gleich
lngRZPruefZeit_ms = lngUSPruefZeit_ms
End If
If RefVolumen = 0 Then
MsgBox ("Referenz Volumen (Waage oder Referenzzähler) konnte nicht ermittelt werden")
Vorpruefung = -21
'Stop
End If
If g_blnVorpruefung3malQiMittelwert Then
MSFlexGrid1.col = PPNr + (QiDurchlauf - 1)
MSFlexGrid1.row = 0
MSFlexGrid1.text = m_DurchflussSoll & " (" & QiDurchlauf & ")"
MSFlexGrid1.row = Einbauplatz.getNr
Else
MSFlexGrid1.col = PPNr
MSFlexGrid1.row = Einbauplatz.getNr
End If
If Not lngUSPruefZeit_ms = 0 Then
If Not m_VorPruefungsArtWaage Then
' Referenzzähler
'Offset_Qmin abziehen, um Kurve nach oben zu bekommen
'geändert am 20.01.2004 AP mit Gepräch mit UD
If udtUSParameter(Einbauplatz.getNr).Offset_Qmin <> 0 Then
PrintStatus "Offset_Qmin % wird vom RZ Volumen abgezogen: " & udtUSParameter(Einbauplatz.getNr).Offset_Qmin & " %"
WriteToFW2Logfile Einbauplatz, "Offset_Qmin=" & vbTab & udtUSParameter(Einbauplatz.getNr).Offset_Qmin
RefVolumen = RefVolumen * (1 - udtUSParameter(Einbauplatz.getNr).Offset_Qmin / 100 * (-1))
WriteToFW2Logfile Einbauplatz, "RefVolumen (- Offset_Qmin)=" & vbTab & RefVolumen
End If
' mit den wahren Prüfzeiten korrigierter Fehler
Fehler = 100 * (USVolumen / lngUSPruefZeit_ms - RefVolumen / lngRZPruefZeit_ms) / (RefVolumen / lngRZPruefZeit_ms)
PrintStatus "Fehler = 100 * (USVolumen / lngUSPruefZeit_ms - RefVolumen / lngRZPruefZeit_ms) / (RefVolumen / lngRZPruefZeit_ms) =" & Format(Fehler, "0.00")
WriteToFW2Logfile Einbauplatz, "Fehler Qmin=" & vbTab & Format(Fehler, "0.00")
Else
' Waage
'Offset_Qmin abziehen, um Kurve nach oben zu bekommen
'geändert am 20.01.2004 AP mit Gepräch mit UD
If udtUSParameter(Einbauplatz.getNr).Offset_Qmin <> 0 Then
PrintStatus "Offset_Qmin % wird vom Waagen-Volumen abgezogen: " & udtUSParameter(Einbauplatz.getNr).Offset_Qmin & " %"
WriteToFW2Logfile Einbauplatz, "Offset_Qmin=" & vbTab & udtUSParameter(Einbauplatz.getNr).Offset_Qmin
RefVolumen = RefVolumen * (1 - udtUSParameter(Einbauplatz.getNr).Offset_Qmin / 100 * (-1))
WriteToFW2Logfile Einbauplatz, "RefVolumen (- Offset_Qmin)=" & vbTab & RefVolumen
End If
Fehler = 100 * (USVolumen - RefVolumen) / RefVolumen
PrintStatus "Fehler = 100 * (USVolumen - RefVolumen) / RefVolumen =" & Format(Fehler, "0.00")
WriteToFW2Logfile Einbauplatz, "Fehler Qmin=" & vbTab & Format(Fehler, "0.00")
End If
If Not g_ohneSPS Then
dblTemperatur = m_SPS.GetEinlaufTemperatur
End If
MSFlexGrid1.text = Format(Fehler, "0.00")
AutoSpaltenBreite MSFlexGrid1, lblAutosize
DoEvents
udtUSParameter(Einbauplatz.getNr).Istfluss1_m3ph = USVolumen / (lngUSPruefZeit_ms / 1000 / 60 / 60)
udtUSParameter(Einbauplatz.getNr).Sollfluss1_m3ph = RefVolumen / (lngRZPruefZeit_ms / 1000 / 60 / 60)
udtUSParameter(Einbauplatz.getNr).Temperatur1_°C = dblTemperatur
udtUSParameter(Einbauplatz.getNr).Fehler1 = Fehler
WriteToFW2Logfile Einbauplatz, "Prüfzeit [s]=" & vbTab & lngUSPruefZeit_ms / 1000
WriteToFW2Logfile Einbauplatz, "Istfluss1_m3ph= " & vbTab & udtUSParameter(Einbauplatz.getNr).Istfluss1_m3ph
WriteToFW2Logfile Einbauplatz, "Sollfluss1_m3ph= " & vbTab & udtUSParameter(Einbauplatz.getNr).Sollfluss1_m3ph
objJustageWerte(EinbauplatzNr).IstFluss1 = udtUSParameter(Einbauplatz.getNr).Istfluss1_m3ph
objJustageWerte(EinbauplatzNr).SollFluss1 = udtUSParameter(Einbauplatz.getNr).Sollfluss1_m3ph
objJustageWerte(EinbauplatzNr).Temperatur1 = udtUSParameter(Einbauplatz.getNr).Temperatur1_°C
objJustageWerte(EinbauplatzNr).Fehler1 = udtUSParameter(Einbauplatz.getNr).Fehler1
objJustageWerte(EinbauplatzNr).IstFluss2 = udtUSParameter(Einbauplatz.getNr).Istfluss2_m3ph
objJustageWerte(EinbauplatzNr).SollFluss2 = udtUSParameter(Einbauplatz.getNr).Sollfluss2_m3ph
objJustageWerte(EinbauplatzNr).Temperatur2 = udtUSParameter(Einbauplatz.getNr).Temperatur2_°C
objJustageWerte(EinbauplatzNr).Fehler2 = udtUSParameter(Einbauplatz.getNr).Fehler2
' neu RH 11.7.2013
objJustageWerte(EinbauplatzNr).f_fp_o_geber_roh = udtUSParameter(Einbauplatz.getNr).OGeber_Roh_Neu_ns / 10 ^ 9
' neu RH 6.8.2013 Originalwert aus dem rechenwerk
objJustageWerte(EinbauplatzNr).f_fp_o_geber_roh_RW = udtUSParameter(Einbauplatz.getNr).OGeber_Roh_Neu_ns / 10 ^ 9
PrintStatus "gemessenes Q vom US = (USVolumen / (lngUSPruefZeit_ms / 1000 / 60 / 60)=" & udtUSParameter(Einbauplatz.getNr).Istfluss1_m3ph
PrintStatus "gemessenes Q vom FM85 = RefVolumen / (lngRZPruefZeit_ms / 1000 / 60 / 60) =" & udtUSParameter(Einbauplatz.getNr).Sollfluss1_m3ph
'' *******************************************************************************************************
FertigVorpruefung:
'###############################################################################################################
' Mittelwert bilden über 3 Qi Durchläufe
'###############################################################################################################
If g_blnVorpruefung3malQiMittelwert Then
ShowUSParameter udtUSParameter(Einbauplatz.getNr), udtUSZusatzParameter(Einbauplatz.getNr), "Justage Parameter, " & QiDurchlauf & ". Mittelwert-Beitrag nach Qi Messung", Einbauplatz.getNr
' als Neu abspeichern
objJustageWerte(EinbauplatzNr).JustageArt = JustageArt(QiDurchlauf & ". Mittelwert-Beitrag bei Qi")
objJustageWerte(EinbauplatzNr).DatumVorpruefung = Now()
objJustageWerte(EinbauplatzNr).save
' zum Mittelwert aufaddieren
Mittelwert_udtUSParameter(EinbauplatzNr).Istfluss1_m3ph = Mittelwert_udtUSParameter(EinbauplatzNr).Istfluss1_m3ph + udtUSParameter(EinbauplatzNr).Istfluss1_m3ph
Mittelwert_udtUSParameter(EinbauplatzNr).Sollfluss1_m3ph = Mittelwert_udtUSParameter(EinbauplatzNr).Sollfluss1_m3ph + udtUSParameter(EinbauplatzNr).Sollfluss1_m3ph
Mittelwert_udtUSParameter(EinbauplatzNr).Fehler1 = Mittelwert_udtUSParameter(EinbauplatzNr).Fehler1 + udtUSParameter(EinbauplatzNr).Fehler1
Mittelwert_udtUSParameter(EinbauplatzNr).Temperatur1_°C = Mittelwert_udtUSParameter(EinbauplatzNr).Temperatur1_°C + udtUSParameter(EinbauplatzNr).Temperatur1_°C
If QiDurchlauf = 3 Then
' Mittelwert bilden
udtUSParameter(Einbauplatz.getNr).Istfluss1_m3ph = Mittelwert_udtUSParameter(EinbauplatzNr).Istfluss1_m3ph / 3
udtUSParameter(Einbauplatz.getNr).Sollfluss1_m3ph = Mittelwert_udtUSParameter(EinbauplatzNr).Sollfluss1_m3ph / 3
udtUSParameter(Einbauplatz.getNr).Fehler1 = Mittelwert_udtUSParameter(EinbauplatzNr).Fehler1 / 3
udtUSParameter(Einbauplatz.getNr).Temperatur1_°C = Mittelwert_udtUSParameter(EinbauplatzNr).Temperatur1_°C / 3
ShowUSParameter udtUSParameter(Einbauplatz.getNr), udtUSZusatzParameter(Einbauplatz.getNr), "(gemittelte) Justage Parameter nach 2. Vor-Prüfpunkt(Qi) vor Justage", Einbauplatz.getNr
' RH 13.6.2013 Mittelwerte setzen für Datenbank Justagewerte
objJustageWerte(EinbauplatzNr).JustageArt = JustageArt("Mittelwert bei Qi")
Sleep 1000 ' eine neue Zeit bekommen um einen neuen objJustageWerte Datensatz zu speichern
objJustageWerte(EinbauplatzNr).DatumVorpruefung = Now()
objJustageWerte(EinbauplatzNr).IstFluss1 = udtUSParameter(Einbauplatz.getNr).Istfluss1_m3ph
objJustageWerte(EinbauplatzNr).SollFluss1 = udtUSParameter(Einbauplatz.getNr).Sollfluss1_m3ph
objJustageWerte(EinbauplatzNr).Temperatur1 = udtUSParameter(Einbauplatz.getNr).Temperatur1_°C
objJustageWerte(EinbauplatzNr).Fehler1 = udtUSParameter(Einbauplatz.getNr).Fehler1
objJustageWerte(EinbauplatzNr).save
End If
Else
ShowUSParameter udtUSParameter(Einbauplatz.getNr), udtUSZusatzParameter(Einbauplatz.getNr), "Justage Parameter nach 2. Vor-Prüfpunkt vor Justage", Einbauplatz.getNr
End If
Else
PrintStatus "Vorprüfung für Einbauplatz " & EinbauplatzNr & " fehlgeschlagen."
Einbauplatz.setAktiv False
MSFlexGrid1.text = "?"
'Vorpruefung = -23
'Stop
End If
Else
PrintStatus "Vorprüfung für Einbauplatz " & EinbauplatzNr & " fehlgeschlagen:"
PrintStatus udtPruefdaten_imPP_mitEBP(EinbauplatzNr).Fehlerinfo
Einbauplatz.setAktiv False
End If
gudtUSParameter = udtUSParameter(Einbauplatz.getNr)
End If ' Pruefzaehler is nothing
Next Einbauplatz
' Bei Mittelwerbildung den Prüfpunkt bis zu 2 mal wiederholen
If g_blnVorpruefung3malQiMittelwert = True Then
If QiDurchlauf < 3 Then
GoTo EinsprungQiWiederholung ' Nochmal Qi messen
Else
MSFlexGrid1.col = MSFlexGrid1.Cols - 1
MSFlexGrid1.row = 0
MSFlexGrid1.text = m_DurchflussSoll & " (M)"
End If
End If
' Justage durchführen
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If Not Pruefzaehler Is Nothing Then
EinbauplatzNr = Einbauplatz.getNr
If Einbauplatz.getAktiv = True Then
Fehler = udtUSParameter(EinbauplatzNr).Fehler1
MSFlexGrid1.row = EinbauplatzNr
MSFlexGrid1.text = Format(Fehler, "0.00")
AutoSpaltenBreite MSFlexGrid1, lblAutosize
DoEvents
If False Then
udtUSParameter(7).Istfluss1_m3ph = 0.259629137619682
udtUSParameter(7).Sollfluss1_m3ph = 0.253828356111453
udtUSParameter(7).Fehler1 = 100 * (udtUSParameter(7).Istfluss1_m3ph - udtUSParameter(7).Sollfluss1_m3ph) / udtUSParameter(7).Sollfluss1_m3ph
udtUSParameter(7).Temperatur1_°C = 57.3
End If
' Justage durchführen
gudtUSParameter = udtUSParameter(EinbauplatzNr)
If g_bGetrennteJustage Then
WriteToFW2Logfile Einbauplatz, "getrennte O-Geber Justageformel "
If g_blnbedingteQiJustage Then
'bedingte Qi Justage
If Abs(udtUSParameter(EinbauplatzNr).Fehler1) >= 1 Then
' bedingte Qi Justage nur wenn Fehler bei Qi >= 1 % ist
Call Justage_o_geber_roh
WriteToFW2Logfile Einbauplatz, "Justage_o_geber_roh da der Fehler Qi " & udtUSParameter(EinbauplatzNr).Fehler1 & " % >= 1%"
Else
' hier braucht nicht justiert werden
WriteToFW2Logfile Einbauplatz, "Justage_o_geber_roh übersprungen da der Fehler Qi " & udtUSParameter(EinbauplatzNr).Fehler1 & "% < 1%"
End If
Else
' unbedingte Justage
Call Justage_o_geber_roh
End If
ShowUSParameter udtUSParameter(Einbauplatz.getNr), udtUSZusatzParameter(Einbauplatz.getNr), "Justage Parameter nach Justage3_mit_Zeroflow_FW2 vor Justage_Execute_FW2", Einbauplatz.getNr
Else
Call Justage_mit_Zeroflow_FW2
ShowUSParameter udtUSParameter(Einbauplatz.getNr), udtUSZusatzParameter(Einbauplatz.getNr), "Justage Parameter nach Justage_mit_Zeroflow_FW2 vor Justage_Execute_FW2", Einbauplatz.getNr
modUS2000_Algorithmen.Justage_Execute_FW2
ShowUSParameter gudtUSParameter, udtUSZusatzParameter(Einbauplatz.getNr), "Justage Parameter nach Justage_FW2", Einbauplatz.getNr
End If
udtUSParameter(EinbauplatzNr) = gudtUSParameter
End If
End If
Next
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
PrintStatus "SetOffsetAndGeberAndBereich f.a. Zähler"
For Each Einbauplatz In m_colEinbauplatz
If Einbauplatz.getAktiv Then
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If Not Pruefzaehler Is Nothing Then
EinbauplatzNr = Einbauplatz.getNr
comport = Val(g_App.Settings.getUSComPort(EinbauplatzNr))
If g_blnJustageWerteNICHTschreiben = False Then
' Justage soll soweit durchgeführt werden
''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Neu RH 2015-11-05
' Einbauplatz deaktivieren, wenn bei der Justage Fehler-Grenzwerte überschritten werden.
'
strTemp = Trim(g_App.Settings.readStringValue("USFirmware2", "Justage_FG_Qi", ""))
If strTemp <> "" Then
strTemp = Replace(strTemp, ",", ".")
If Abs(udtUSParameter(Einbauplatz.getNr).Fehler1) > Val(strTemp) Then
Einbauplatz.setAktiv False
PrintStatus "Justage Fehler Qi=" & Format(udtUSParameter(Einbauplatz.getNr).Fehler1, "0.00") & " ist ausserhalb der erlaubten Fehlergrenzen +-" & strTemp & "%. Zähler am Ebp " & EinbauplatzNr & " wird nicht weiter geprüft!"
End If
End If
strTemp = Trim(g_App.Settings.readStringValue("USFirmware2", "Justage_FG_Qp", ""))
If strTemp <> "" Then
strTemp = Replace(strTemp, ",", ".")
If Abs(udtUSParameter(Einbauplatz.getNr).Fehler2) > Val(strTemp) Then
Einbauplatz.setAktiv False
PrintStatus "Justage Fehler Qp=" & Format(udtUSParameter(Einbauplatz.getNr).Fehler1, "0.00") & " ist ausserhalb der erlaubten Fehlergrenzen +-" & strTemp & "%. Zähler am Ebp " & EinbauplatzNr & " wird nicht weiter geprüft!"
End If
End If
''''''''''''''''''''''''''''''''''''''''''''''''''''''
If Einbauplatz.getAktiv = True Then
modUSchall.FW2_writeVar Einbauplatz, "f_fp_k_geber1", udtUSParameter(Einbauplatz.getNr).Geberkonstante_Neu1_m
modUSchall.FW2_writeVar Einbauplatz, "f_fp_k_geber2", udtUSParameter(Einbauplatz.getNr).Geberkonstante_Neu2_m
' umwandeln in m³/s => 0 reinschreiben
modUSchall.FW2_writeVar Einbauplatz, "f_fp_qoffset1", udtUSParameter(Einbauplatz.getNr).Offset_Neu1_m3ph
modUSchall.FW2_writeVar Einbauplatz, "f_fp_qoffset2", udtUSParameter(Einbauplatz.getNr).Offset_Neu2_m3ph
modUSchall.FW2_writeVar Einbauplatz, "f_fp_o_geber", 0
If g_blnbedingteQiJustage Then
' bedingte Qi Justage
If Abs(udtUSParameter(EinbauplatzNr).Fehler1) >= 1 Then
' bedingte Qi Justage nur wenn Fehler bei Qi >= 1 % ist
modUSchall.FW2_writeVar Einbauplatz, "f_fp_o_geber_roh", udtUSParameter(Einbauplatz.getNr).OGeber_Roh_Neu_ns / 10 ^ 9
Else
' Es wird der f_fp_o_geber_roh Wert im RW belassen
WriteToFW2Logfile Einbauplatz, "schreiben von f_fp_o_geber_roh übersprungen da Fehler Qi " & udtUSParameter(EinbauplatzNr).Fehler1 & " < 1%"
End If
Else
' unbedingte Justage
modUSchall.FW2_writeVar Einbauplatz, "f_fp_o_geber_roh", udtUSParameter(Einbauplatz.getNr).OGeber_Roh_Neu_ns / 10 ^ 9
End If
' TEST_CS durchführen, um Checksumme im Flash zu korrigieren
Call modMBUS_SMS.do_test2(&HE8, &H5A)
WriteToFW2Logfile Einbauplatz, "Justagewerte geschrieben."
Else
WriteToFW2Logfile Einbauplatz, "alle Justagewerte werden wegen Ausfall NICHT in den Zähler geschrieben"
End If
Else
WriteToFW2Logfile Einbauplatz, "alle Justagewerte werden auf Wunsch NICHT in den Zähler geschrieben"
End If
Debug_UeberspringeSchreiben:
' bleibt wie es ist
' USParameter.SteilheitGeber_nsp°C,
' modUSchall.FW2_writeVar Einbauplatz, "f_fp_st_geber", udtUSParameter(Einbauplatz.getNr).SteilheitGeber_nsp°C
' USParameter.Bereich_ns
' modUSchall.FW2_writeVar Einbauplatz, "f_fp_bereich", udtUSParameter(Einbauplatz.getNr).Bereich_ns
End If ' Pruefzaehler is nothing
Else
' Einbauplatz ist wegen eines Fehlers nicht aktiv
WriteToFW2Logfile Einbauplatz, "Wegen eines Fehler während der Justage werden die Justagewerte NICHT in den Zähler am Einbauplatz " & Einbauplatz.getNr & " geschrieben."
End If
Next Einbauplatz
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
PrintStatus "OffsetJustage Werte in Tabelle USJustageWerte speichern"
Sleep 1000
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If Not Pruefzaehler Is Nothing Then
EinbauplatzNr = Einbauplatz.getNr
' OffsetJustage / Tabelle USJustageWerte
' --------------------------------------
objJustageWerte(EinbauplatzNr).JustageArt = JustageArt("")
objJustageWerte(EinbauplatzNr).FP_Bereich = udtUSParameter(EinbauplatzNr).Bereich_ns
objJustageWerte(EinbauplatzNr).FP_K_Geber1 = udtUSParameter(EinbauplatzNr).Geberkonstante_Neu1_m
objJustageWerte(EinbauplatzNr).FP_K_Geber2 = udtUSParameter(EinbauplatzNr).Geberkonstante_Neu2_m
objJustageWerte(EinbauplatzNr).FP_O_Geber = udtUSParameter(EinbauplatzNr).OffsetGeber_ns / 10 ^ 9
' neu RH 7.11.2013
objJustageWerte(EinbauplatzNr).f_fp_o_geber_roh = udtUSParameter(EinbauplatzNr).OGeber_Roh_Neu_ns / 10 ^ 9
objJustageWerte(EinbauplatzNr).FP_QOffset1 = udtUSParameter(EinbauplatzNr).Offset_Neu1_m3ph
objJustageWerte(EinbauplatzNr).FP_QOffset2 = udtUSParameter(EinbauplatzNr).Offset_Neu2_m3ph
objJustageWerte(EinbauplatzNr).FP_ST_Geber = udtUSParameter(EinbauplatzNr).SteilheitGeber_nsp°C / 10 ^ 9
objJustageWerte(EinbauplatzNr).DatumVorpruefung = Now()
' Die eigentliche Berechnung der Justage ist etwas später
objJustageWerte(EinbauplatzNr).DatumJustage = Now()
' Die Offsets, die für diese Justage aus der Datenbank vorgegeben waren
objJustageWerte(EinbauplatzNr).Offset_Qp = udtUSParameter(EinbauplatzNr).Offset_Qp
objJustageWerte(EinbauplatzNr).Offset_Bereich = udtUSParameter(EinbauplatzNr).Offset_QBereich
objJustageWerte(EinbauplatzNr).Offset_Qmin = udtUSParameter(EinbauplatzNr).Offset_Qmin
' nach einer Vorprüfung alle Justage-Werte für OffsetJustage speichern
objJustageWerte(EinbauplatzNr).save
End If
Next
PrintStatus "***** Vorprüfung beendet ******"
Vorpruefung = 0
End Function
Private Function VorpruefungImPP(PPNr As Integer, udtPruefdaten_imPP_mitEBP() As TypUSPruefdaten) As Long
Dim QIst As Double
Dim Einbauplatz As CEinbauplatz
Dim Pruefzaehler As CPruefzaehler
Dim dblTemperatur As Double
Dim EinbauplatzNr As Integer
Dim Identitaetsnummer As Long
Dim comport As Integer
Dim lngRet As Long
Dim QIstSPS As Double
Dim blnPruefungFertig As Boolean
Dim dblVolumenWaage As Double
Dim dblVolumenRZ As Double
Dim lngReturn As Long
Dim dblVolumenUS As Double
Dim Fehler As Double
Dim SteilheitGeber_nsp(10) As Double
' muss gesetzt sein
' m_vorPruefpunkt
m_SPS.setBetrieb 0
Sleep 1000
m_DurchflussSoll = m_vorPruefpunkt.getQ
lblQSoll.caption = m_DurchflussSoll
' Pumpe, MID, Regelart
Call initSPSfuerPP
Call DurchflussLstAktualisieren
DoEvents
Call m_Referenzzaehler.loadForDurchfluss(m_DurchflussSoll, g_App.Settings.getMIDGruppe)
If Not g_ohneSPS Then
lblFehlerRZ.caption = Format(m_Referenzzaehler.letzterFehler(m_DurchflussSoll, m_SPS.GetEinlaufTemperatur), "0.00")
End If
PrintStatus "Neuer Prüfpunkt: " & m_DurchflussSoll
If m_VorPruefungsArtWaage = True Then
''''''''''''''''''''''''''''''' W A A G E A N F A N G ''''''''''''''''''''''''''''''''''''
'Call initSPSfuerWaage
If WaageVorbereitenFuerPP() < 0 Then
VorpruefungImPP = -1
Exit Function
End If
PrintStatus "Warten auf Prüfbereitschaft der Strecke"
Do While Not m_SPS.IstStreckePruefbereit
Sleep 1000, True
If g_Abbruch = True Then
Exit Function
End If
Loop
dblTemperatur = m_SPS.GetEinlaufTemperatur
PrintStatus "Temperatur: " & Format(dblTemperatur, "0.00") & " °C"
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If (Not Pruefzaehler Is Nothing) Then
' Pruefzaehler ist eingebaut
If Not Pruefzaehler.getPruefpunkte Is Nothing Then
If (Pruefzaehler.getVorpruefpunkte.hasQ(m_DurchflussSoll) = True) Then
Call FW2_USSetTemperatur(Einbauplatz, dblTemperatur)
PrintStatus "Temperatur in den Zähler schreiben an Einbauplatz " & Einbauplatz.getNr
End If
End If
End If
Next
' US Messung starten
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If (Not Pruefzaehler Is Nothing) Then
' Pruefzaehler ist eingebaut
If Not Pruefzaehler.getPruefpunkte Is Nothing Then
If (Pruefzaehler.getVorpruefpunkte.hasQ(m_DurchflussSoll) = True) Then
MSFlexGrid1.row = Einbauplatz.getNr
MSFlexGrid1.col = 0
MSFlexGrid1_AnzeigeSerienNrFabNr Einbauplatz.getPruefzaehler
''MSFlexGrid1.text = FormatSerienNr(Einbauplatz.getPruefzaehler.getSerienNr)
udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).dblTemperatur = dblTemperatur
udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).SollDurchfluss = m_DurchflussSoll
udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).SollPruefzeit_s = m_vorPruefpunkt.GetTime
'If FW2_StarteUSundRZZaehler(Einbauplatz) = 0 Then
If FW2_Starte_NOWA(Einbauplatz) = 0 Then
PrintStatus "NOWA_START für Einbauplatz " & Einbauplatz.getNr & " OK"
Else
udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).blnPruefungsfehler = True
udtPruefdaten_imPP_mitEBP(EinbauplatzNr).Fehlerinfo = "NOWA_START für Einbauplatz " & Einbauplatz.getNr & " fehlgeschlagen."
PrintStatus "NOWA_START für Einbauplatz " & Einbauplatz.getNr & " fehlgeschlagen."
If Err.Number <> 0 Then
PrintStatus "Fehler " & Err.Number & " :" & Err.Description
End If
End If
Else
PrintStatus "Warnung: Prüfzähler am Einbauplatz " & Einbauplatz.getNr & " enthält nicht den Vorprüfpunkt Q=" & m_DurchflussSoll
End If
End If
End If
Next
Call initSPSfuerPP
m_SPS.setBetrieb 2
PrintStatus "Pumpe gestartet"
m_Tstart = GetTickCount
Do While Not ((m_Pumpe.GetStatus And 4) = 4)
DoEvents
If g_Abbruch = True Then
Exit Function
End If
Loop
PrintStatus "Pumpe läuft"
QIstSPS = 0
blnPruefungFertig = False
' Waagen SPS-Grenzwert abwarten
Do While Not blnPruefungFertig
If m_SPS.GrenzwertWaageErreicht Then
blnPruefungFertig = True
Else
If QIstSPS = 0 And (GetTickCount - m_Tstart) \ 1000 > m_Pruefzeit \ 2 Then
QIstSPS = m_SPS.getQIst
PrintStatus "IstDurchfluss zur halben Prüfzeit: " & Format(QIstSPS, "0.000") & " m³/h"
End If
lblQIst.caption = Format(m_SPS.getQIst, "0.000")
lblGewicht.caption = Format(m_Waage.GetGewicht, "0.000")
Sleep 500
End If
AnzeigeAktualisieren
If mblnExternalTemperatur And (GetTickCount - m_Tstart) \ 1000 < Int(m_Pruefzeit - 30) Then
' nicht in den letzten 30 sekunden
UpdateTemperaturInZaehlerFW2
End If
Sleep 100
DoEvents
If g_Abbruch Then Exit Function
Loop
' Prüfzeit messen/stoppen in s BEVOR die Waage beruhigt wird
m_Tpruef = (GetTickCount - m_Tstart) \ 1000
PrintStatus "Waagen-Grenzwert erreicht nach " & m_Tpruef & " sec."
' Wasser stoppen
m_SPS.setBetrieb 0
m_Waage.SetNettoGrenzwert1 m_Behaelter.m_WaageGrenzwert, m_Behaelter.m_Genauigkeit
' Waagenruhe abwarten
PrintStatus "Warte auf Waagenruhe"
'm_Waage.WarteAufRuhe
m_Behaelter.WarteAufRuhe
' Referenz-Volumen aus Waagen-Gewicht ermitteln
dblVolumenWaage = Errechne_Volumen_Von_Wasser_in_m3(m_Waage.GetGewicht, dblTemperatur) ' in m³
PrintStatus "VolumenWaage: " & Format(dblVolumenWaage, "0.000") & " m³"
For Each Einbauplatz In m_colEinbauplatz
EinbauplatzNr = Einbauplatz.getNr
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If (Not Pruefzaehler Is Nothing) Then
''lngReturn = FW2_StoppeUSundRZZaehler(Einbauplatz)
lngReturn = FW2_Stoppe_NOWA(Einbauplatz)
If lngReturn = 0 Then
'PrintStatus "RZ-STOP und NOWA_STOP OK"
PrintStatus "NOWA_STOP OK"
udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).RZ_IstPruefzeit_ms = m_Tpruef * 1000
udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).US_IstPruefzeit_ms = m_Tpruef * 1000
' 'Die NOWA_PUEFZEIT ist zu lang und kann hier nicht genommen werden. Damit würden wir den Durchfluss zu niedrig berechnen
' Call FW2_GetUS_NOWA_Zeit(Einbauplatz, udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).US_IstPruefzeit_ms)
' PrintStatus "NOWA Prüfzeit=" & udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).US_IstPruefzeit_ms & " ms"
Else
'PrintStatus "RZ-STOP und NOWA_STOP Fehler:" & lngReturn
PrintStatus "NOWA_STOP Fehler:" & lngReturn
udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).blnPruefungsfehler = True
End If
End If ' PZ is nothing and GetActive
Next Einbauplatz
' Volumen aus US Zaehler lesen
For Each Einbauplatz In m_colEinbauplatz
EinbauplatzNr = Einbauplatz.getNr
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If (Not Pruefzaehler Is Nothing) Then
dblVolumenUS = 0
lngReturn = FW2_GetUSVolumen(Einbauplatz, dblVolumenUS)
If dblVolumenUS = 0 Then
udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).blnPruefungsfehler = True
End If
PrintStatus "Volumen des US: " & dblVolumenUS & " m³"
Fehler = (dblVolumenUS - dblVolumenWaage) / dblVolumenWaage * 100
udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).VolumenWaage = dblVolumenWaage
End If
Next
Debug.Print
''''''''''''''''''''''''''''''' W A A G E E N D E ''''''''''''''''''''''''''''''''''''''''
Else
''''''''''''''''''''''''''''''' V E R G L E I C H ''''''''''''''''''''''''''''''''''''''''
Call initSPSfuerDurchlauf
' If mbln_ZeroFlowMessung = True And PPNr = 1 Then
' Setze_FP_St_GeberKonstanteZeroflow SteilheitGeber_nsp()
' For Each Einbauplatz In m_colEinbauplatz
' Set Pruefzaehler = Einbauplatz.getPruefzaehler
' EinbauplatzNr = Einbauplatz.getNr
' If Not Pruefzaehler Is Nothing Then
' comport = g_App.Settings.getUSComPort(EinbauplatzNr)
' If SteilheitGeber_nsp(EinbauplatzNr) <> 0 Then
' PrintStatus "Einbauplatz " & EinbauplatzNr & " SteilheitGeber=" & Format(SteilheitGeber_nsp(EinbauplatzNr) * 1000000000, "0.00000") & " ns/'C"
'
' udtPruefdaten_imPP_mitEBP(EinbauplatzNr).JustageParameter.SteilheitGeber_nsp°C = SteilheitGeber_nsp(EinbauplatzNr)
' lngReturn = modIECCOM.SetOffsetAndGeberAndBereich(comport, udtPruefdaten_imPP_mitEBP(EinbauplatzNr).JustageParameter)
' End If
' End If
' Next
' End If
' Vergleichsprüfung gegen RefZ.: Betrieb starten
m_SPS.setBetrieb 2
' auf konsten Durchfluß warten
PrintStatus "Warten auf Solldurchfluß erreicht..."
If Not g_ohneSPS Then
Do While Not m_SPS.SolldurchflussErreicht
lblQIst.caption = Format(m_SPS.getQIst, "0.000")
Sleep 500, True
If g_Abbruch = True Then
Exit Function
End If
Loop
End If
' ' Durchflußanzeige RefIstWert korrigiert
If Not g_ohneSPS Then
QIst = m_SPS.getQIst
Else
QIst = 99
End If
PrintStatus "Solldurchfluss erreicht bei Q=" & Format(QIst, "0.000")
lblQIst.caption = Format(QIst, "0.000")
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If (Not Pruefzaehler Is Nothing) Then
' Pruefzaehler ist eingebaut
If Not Pruefzaehler.getPruefpunkte Is Nothing Then
If (Pruefzaehler.getVorpruefpunkte.hasQ(m_DurchflussSoll) = True) Then
MSFlexGrid1.row = Einbauplatz.getNr
MSFlexGrid1.col = 0
MSFlexGrid1_AnzeigeSerienNrFabNr Einbauplatz.getPruefzaehler
''MSFlexGrid1.text = FormatSerienNr(Einbauplatz.getPruefzaehler.getSerienNr) & " F:" & Einbauplatz.getPruefzaehler.getAuftragPositionSerienNr.getFabNr
AutoSpaltenBreite MSFlexGrid1, lblAutosize
udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).SollDurchfluss = m_DurchflussSoll
udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).SollPruefzeit_s = m_vorPruefpunkt.GetTime
Else
PrintStatus "Warnung: Prüfzähler am Einbauplatz " & Einbauplatz.getNr & " enthält nicht den Vorprüfpunkt Q=" & m_DurchflussSoll
End If
End If
End If
Next
If Not g_ohneSPS Then
dblTemperatur = m_SPS.GetEinlaufTemperatur
Else
dblTemperatur = 21.99
End If
Call UltraschallPruefung(udtPruefdaten_imPP_mitEBP())
For EinbauplatzNr = 1 To g_App.Settings.EinbauplaetzeJeStrang
If udtPruefdaten_imPP_mitEBP(EinbauplatzNr).Fehlerinfo <> "" Then
PrintStatus "Fehler bei der Vorprüfung:" & udtPruefdaten_imPP_mitEBP(EinbauplatzNr).Fehlerinfo
udtPruefdaten_imPP_mitEBP(EinbauplatzNr).Fehlerinfo = ""
End If
Next EinbauplatzNr
DoEvents
If g_Abbruch Then
Exit Function
End If
' Wasser stoppen
m_SPS.setBetrieb 8
Sleep 500
m_SPS.setBetrieb 0
lblQIst.caption = ""
PrintStatus "Wasser gestoppt"
''''''''''''''''''''''''''''''' V E R G L E I C H E N D E '''''''''''''''''''''''''''''''''''
End If
End Function
'Private Function Bereichsjustage() As Long
' Dim Einbauplatz As CEinbauplatz
' Dim Pruefzaehler As CPruefzaehler
' Dim USVolumen As Double
' Dim RefVolumen As Double
' Dim PPNr As Integer
' Dim EinbauplatzNr As Integer
' Dim dblFehler As Double
' Dim lngReturn As Long
' Dim lngError As Long
' Dim Identitaetsnummer As Long
' Dim QIst As Double
' Dim dblTemperatur As Double
' Dim RefZFehler As Double
'
' Dim lngUSPruefZeit_ms As Long
' Dim lngRZPruefZeit_ms As Long
'
' Dim Fehler As Double
' Dim udtPruefdaten_imPP_mitEBP(10) As TypUSPruefdaten
' Dim udtPruefdaten_Bereichsgrenze(10) As TypUSPruefdaten
'
' Dim ComPort As Integer
' Dim lngRet As Long
'
' Dim udtUSParameter(10) As JustageParameter_Type
' Dim udtUSZusatzParameter(10) As US_ZusatzParameter_Typ
'
' Set m_Referenzzaehler = New CRefzaehler
'
'
' ' Einstellung für Automatik-Modus in der SPS testen
'TestAutomatik:
' If Not m_SPS.IstAutomatik Then
' Dummy = MsgBox("Bitte SPS auf Automatik stellen", vbOKCancel)
' If Dummy = vbCancel Then
' endDialog (IDCANCEL)
' Exit Function
' End If
' GoTo TestAutomatik
' End If
'
' If Not m_SPS.IstStreckePruefbereit Then
' ' Betrieb Vorbereiten
' m_SPS.setBetrieb 1
'
' PrintStatus "Betrieb vorbereiten: Spannen und Füllen..."
' Do While Not m_SPS.IstStreckeGefuellt
' Sleep 1000, True
' If g_Abbruch = True Then
' Exit Function
' End If
' Loop
' ' nach dem Füllen: Betrieb auf 0
' Sleep 500
' m_SPS.setBetrieb 0
'
' '------------------------------------------------------------------------
'
' PrintStatus "Warte auf Pruefbereitschaft der SPS..."
' Do While Not m_SPS.IstStreckePruefbereit
' Sleep 1000, True
' If g_Abbruch = True Then
' Exit Function
' End If
' Loop
' End If ' Pruefbereit
' PrintStatus "Strecke ist Prüfbereit !"
'
' PrintStatus "***** Bereichsjustage ******"
'
'
'' Justage Zählerdaten bestimmen
'
'
' PPNr = 0
' m_colUniqueVorPP.sortQ
'
'
' '''''''''''''''''''''''' Prüfpunkt bei Q2 ''''''''''''''''''''''
' ' Qmax
' Set m_vorPruefpunkt = m_colUniqueVorPP.getCollection.Item(2)
' PPNr = 2
'
' m_DurchflussSoll = m_vorPruefpunkt.getQ
' m_Pruefzeit = m_vorPruefpunkt.GetTime
'
' m_VolumenSoll = m_Pruefzeit * m_DurchflussSoll / 3.6
' PrintStatus "geschätztes Soll-Volumen in Litern: " & m_VolumenSoll
' lblSollV.Caption = Format(m_VolumenSoll, "0")
'
' Call m_Referenzzaehler.loadForDurchfluss(m_DurchflussSoll, g_App.Settings.getMIDGruppe)
' m_SPS.SetQDiff 0 'm_Referenzzaehler.letzterFehler(m_DurchflussSoll)
'
'
' For Each Einbauplatz In m_colEinbauplatz
' Set Pruefzaehler = Einbauplatz.getPruefzaehler
' If Not Pruefzaehler Is Nothing Then
' EinbauplatzNr = Einbauplatz.getNr
' ComPort = g_App.Settings.getUSComPort(EinbauplatzNr)
'
' ' Die sieben Justage Parameter aus Zähler lesen
' ' Geberkonstante1_IST_m
' ' Geberkonstante2_IST_m
' ' SteilheitGeber_nsp°C
' ' OffsetGeber_ns
' If modIECCOM.GetOffsetAndGeberAndBereich(ComPort, udtUSParameter(Einbauplatz.getNr)) <> 0 Then
'
' ' leider überschreibt GetOffsetAndGeberAndBereich die Offset_Qmin, Offset_QBereich, Offset_Qp, also nochmal aus DB lesen
' udtUSParameter(Einbauplatz.getNr).Offset_Qmin = Pruefzaehler.getVorpruefpunkte.getOffset_Qmin
' udtUSParameter(Einbauplatz.getNr).Offset_QBereich = Pruefzaehler.getVorpruefpunkte.getOffset_QBereich
' udtUSParameter(Einbauplatz.getNr).Offset_Qp = Pruefzaehler.getVorpruefpunkte.getOffset_Qp
'
' MsgBox "GetOffsetAndGeberAndBereich konten nicht ausgelesen werden. Bereichsjustage wird abgebrochen."
' Bereichsjustage = -1
' Exit Function
' Else
'
' ' leider überschreibt GetOffsetAndGeberAndBereich die Offset_Qmin, Offset_QBereich, Offset_Qp, also nochmal aus DB lesen
' udtUSParameter(Einbauplatz.getNr).Offset_Qmin = Pruefzaehler.getVorpruefpunkte.getOffset_Qmin
' udtUSParameter(Einbauplatz.getNr).Offset_QBereich = Pruefzaehler.getVorpruefpunkte.getOffset_QBereich
' udtUSParameter(Einbauplatz.getNr).Offset_Qp = Pruefzaehler.getVorpruefpunkte.getOffset_Qp
'
' Call ShowUSParameter(udtUSParameter(Einbauplatz.getNr), udtUSZusatzParameter(Einbauplatz.getNr), "Justage Parameter aus Zähler gelesen:", Einbauplatz.getNr)
' End If
' End If
' Next
'
' PrintStatus "Vorprüfung im Vorprüfpunkt 2:"
'
' lngRet = VorpruefungImPP(PPNr, udtPruefdaten_imPP_mitEBP())
' If lngRet = -1 Then
' Exit Function
' End If
'
'
' For Each Einbauplatz In m_colEinbauplatz
' Set Pruefzaehler = Einbauplatz.getPruefzaehler
' If Not Pruefzaehler Is Nothing Then
' EinbauplatzNr = Einbauplatz.getNr
' ComPort = g_App.Settings.getUSComPort(EinbauplatzNr)
'
' If udtPruefdaten_imPP_mitEBP(EinbauplatzNr).blnPruefungsfehler = False Then
'
' ' Volumen bestimmen
' Call GetRZVolumen(EinbauplatzNr, m_Referenzzaehler, RefVolumen)
' PrintStatus "RZ Volumen [m³]:" & RefVolumen
' PrintStatus "Fehler des RZ in diesem Prüfpunkt: " & Format(m_Referenzzaehler.letzterFehler(m_DurchflussSoll, m_SPS.GetEinlaufTemperatur), "0.0")
' RefVolumen = RefVolumen / (1 + m_Referenzzaehler.letzterFehler(m_DurchflussSoll, m_SPS.GetEinlaufTemperatur) / 100)
'
' PrintStatus "Ist-Volumen:" & RefVolumen
'
' Call GetUSVolumen(EinbauplatzNr, USVolumen)
' PrintStatus "US Volumen [m³]:" & Format(USVolumen, "0.0000")
'
' If USVolumen = 0 Then
' MsgBox ("US Volumen ist 0")
' Bereichsjustage = -24
' Stop
' 'Exit Function
' End If
' If RefVolumen = 0 Then
' Stop
' MsgBox ("Ref. Volumen ist 0")
' Bereichsjustage = -25
' 'Exit Function
' End If
'
'
' MSFlexGrid1.row = Einbauplatz.getNr
' MSFlexGrid1.Col = PPNr
'
' lngUSPruefZeit_ms = udtPruefdaten_imPP_mitEBP(EinbauplatzNr).US_IstPruefzeit_ms
' lngRZPruefZeit_ms = udtPruefdaten_imPP_mitEBP(EinbauplatzNr).RZ_IstPruefzeit_ms
'
' PrintStatus "US Zähler Prüfzeit(" & EinbauplatzNr & ")= " & lngUSPruefZeit_ms & " ms"
' PrintStatus "RZ Zähler Prüfzeit(" & EinbauplatzNr & ")= " & lngRZPruefZeit_ms & " ms"
'
' If Not lngUSPruefZeit_ms = 0 Then
' If Not lngUSPruefZeit_ms = 0 Then
' udtUSParameter(Einbauplatz.getNr).Istfluss1_m3ph = USVolumen / (lngUSPruefZeit_ms / 1000 / 60 / 60)
' udtUSParameter(Einbauplatz.getNr).Sollfluss1_m3ph = RefVolumen / (lngRZPruefZeit_ms / 1000 / 60 / 60)
' udtUSParameter(Einbauplatz.getNr).Temperatur1_°C = m_SPS.GetEinlaufTemperatur
'
' If Not m_VorPruefungsArtWaage Then
' ' mit den wahren Prüfzeiten korrigierter Fehler
' Fehler = 100 * (USVolumen / lngUSPruefZeit_ms - RefVolumen / lngRZPruefZeit_ms) / (RefVolumen / lngRZPruefZeit_ms)
' PrintStatus "Fehler = 100 * (USVolumen / lngUSPruefZeit_ms - RefVolumen / lngRZPruefZeit_ms) / (RefVolumen / lngRZPruefZeit_ms) =" & Format(Fehler, "0.00")
' Else
' Fehler = 100 * (USVolumen - RefVolumen) / RefVolumen
' PrintStatus "Fehler = 100 * (USVolumen - RefVolumen) / RefVolumen =" & Format(Fehler, "0.00")
' End If
'
' udtUSParameter(Einbauplatz.getNr).Unlinearitaet = -Fehler
'
' MSFlexGrid1.text = Format(Fehler, "0.00")
' Else
' MsgBox ("US PP Zeit = 0 !")
' Bereichsjustage = -26
' Exit Function
' End If
' Else
' MsgBox ("RZ PP Zeit = 0 !")
' Bereichsjustage = -27
' Exit Function
' End If
'
' gudtUSParameter = udtUSParameter(EinbauplatzNr)
' ShowUSParameter gudtUSParameter, udtUSZusatzParameter(EinbauplatzNr), "Justage Parameter vor Bereichs Justage", Einbauplatz.getNr
'
' 'Eingefügt provisorisch am 18.08.02
' modUS2000_Algorithmen.Justage_Execute
'
' ShowUSParameter gudtUSParameter, udtUSZusatzParameter(EinbauplatzNr), "Justage Parameter nach Bereichs Justage", Einbauplatz.getNr
' udtUSParameter(EinbauplatzNr) = gudtUSParameter
' Else
' PrintStatus "Einbauplatz " & EinbauplatzNr & " konnte nicht justiert werden"
' PrintStatus udtPruefdaten_imPP_mitEBP(EinbauplatzNr).Fehlerinfo
' udtPruefdaten_imPP_mitEBP(EinbauplatzNr).Fehlerinfo = ""
' End If
' End If ' Pruefzaehler is nothing
' Next Einbauplatz
'
'
' PrintStatus "SetOffsetAndGeberAndBereich f.a. Zähler"
' For Each Einbauplatz In m_colEinbauplatz
' Set Pruefzaehler = Einbauplatz.getPruefzaehler
' If Not Pruefzaehler Is Nothing Then
' EinbauplatzNr = Einbauplatz.getNr
' ComPort = g_App.Settings.getUSComPort(EinbauplatzNr)
'
' If udtPruefdaten_imPP_mitEBP(EinbauplatzNr).blnPruefungsfehler = False Then
' lngRet = modIECCOM.SetOffsetAndGeberAndBereich(ComPort, udtUSParameter(Einbauplatz.getNr))
' If lngRet <> 0 Then
' DebugMsg ("SetOffsetAndGeberAndBereich für Einbauplatz " & EinbauplatzNr & " gab Fehler " & lngRet & " zurück")
' Bereichsjustage = -29
' Stop
' End If
' Else
' PrintStatus "SetOffsetAndGeber für Einbauplatz " & EinbauplatzNr & " nicht erfolgt"
' End If
'
' End If ' Pruefzaehler is nothing
' Next Einbauplatz
'
'
' PrintStatus "***** Bereichs-Justage beendet ******"
'
'End Function
Private Sub AnzeigeAktualisieren()
lblZeit.caption = (GetTickCount - m_Tstart) \ 1000 & "/" & m_Pruefzeit
If Not g_ohneSPS Then
lblQIst = Format(m_SPS.getQIst, "0.000")
End If
Dim dummy As Variant
dummy = MesseWasserdruck()
If dummy >= 0 Then
lblWasserdruck.caption = Round(dummy, 2)
Else
lblWasserdruck.caption = ""
End If
End Sub
Private Sub AnzeigeAktualisieren_mit_Waage()
lblZeit.caption = (GetTickCount - m_Tstart) \ 1000 & "/" & m_Pruefzeit
lblQIst = Format(m_SPS.getQIst, "0.000")
If m_PruefungsArtWaage Then
lblGewicht.caption = Format(m_Waage.GetGewicht, "0.00")
End If
dummy = MesseWasserdruck()
If dummy >= 0 Then
lblWasserdruck.caption = Round(dummy, 2)
Else
lblWasserdruck.caption = ""
End If
End Sub
'Private Sub KontinuierlichePruefung()
'Dim altePumpeNr As Integer
'Dim udtPruefdaten_imPP_mitEBP(10) As TypUSPruefdaten
'Dim Einbauplatz As CEinbauplatz
'Dim EinbauplatzNr As Integer
'Dim lngReturn As Long
'
'Dim Pruefzaehler As CPruefzaehler
'Dim DurchflussRZ As Double
'Dim DurchflussUS As Double
'Dim dblVolumenRZ As Double
'Dim dblVolumenUS As Double
'Dim blnFertig As Boolean
'Dim ResultFilePath As String
'Dim ResultFileHandle As Long
'Dim QIstSPS As Double
'Dim QFlow_fp As Double
'Dim Fehler As Double
'Dim bBetriebNeustart As Boolean
'
'
' Set m_Referenzzaehler = New CRefzaehler
'
' m_SPS.setBetrieb 0
' sleep 2000
'
'
' ResultFilePath = "C:\kont.txt"
' On Error Resume Next
' Kill ResultFilePath
' On Error GoTo 0
'
'
' ResultFileHandle = FreeFile()
' Open ResultFilePath For Append As ResultFileHandle
'
' Print #ResultFileHandle, "Ergebnisse der Kontinuierlichen Prüfung"
' If m_PruefungsArtWaage Then
' Print #ResultFileHandle, "gegen Waage"
' Else
' Print #ResultFileHandle, "gegen Referenzzähler"
' End If
' Print #ResultFileHandle, ""
'
' Print #ResultFileHandle, "EinbauplatzNr" & vbTab & "DurchflussSoll" & vbTab & "QIstSPS" & vbTab & "Fehler" & vbTab & "Prüfzeit" & vbTab & "MID/Pumpe"
' Close #ResultFileHandle
'
' m_DurchflussSoll = CDbl(txtFlowMax.Text)
'
' Call m_Referenzzaehler.loadForDurchfluss(m_DurchflussSoll, g_App.Settings.getMIDGruppe)
' m_SPS.SetMID m_Referenzzaehler.EinbauplatzNr
'
' ' Pumpenauswahl
' m_SPS.AllePumpenAbwaehlen
' Set m_Pumpe = Pumpenwahl(m_DurchflussSoll, m_ColPumpen)
' m_Pumpe.Anwahl
'
' ' Durchlauf auswählen
' m_SPS.setBehaelter 1
'
' bBetriebNeustart = True
'
' Do
' PrintStatus "Nächster Durchfluss: " & m_DurchflussSoll
' m_SPS.SetQSoll m_DurchflussSoll
' lblQSoll.Caption = m_DurchflussSoll
'
' If Not m_Referenzzaehler.IstOkFuerDurchfluss(m_DurchflussSoll) Then
' m_SPS.SetQSoll 0
' sleep 5000
'
' m_SPS.setBetrieb 0
' sleep 2000
'
' Call m_Referenzzaehler.loadForDurchfluss(m_DurchflussSoll, g_App.Settings.getMIDGruppe)
' m_SPS.SetMID m_Referenzzaehler.EinbauplatzNr
' bBetriebNeustart = True
' End If
'
' If Not m_Pumpe.IstOkFuerDurchfluss(m_DurchflussSoll) Then
' m_SPS.SetQSoll 0
' sleep 5000
'
' m_SPS.setBetrieb 0
' sleep 2000
'
'
' ' Pumpenauswahl
' m_SPS.AllePumpenAbwaehlen
' Set m_Pumpe = Pumpenwahl(m_DurchflussSoll, m_ColPumpen)
' m_Pumpe.Anwahl
' PrintStatus "zu startende Pumpe: " & m_Pumpe.GetSPSVarname
'
' bBetriebNeustart = True
'
' End If
'
' If bBetriebNeustart = True Then
'
' m_SPS.SetServoStellung lookupFUServoStellwert(m_DurchflussSoll)
' m_SPS.SetQSoll m_DurchflussSoll
' lblQSoll.Caption = m_DurchflussSoll
'
' m_SPS.setBetrieb 2
' bBetriebNeustart = False
'
' End If
'
' ' Warten bis Durchfluss erreicht ist
' PrintStatus "Warte auf 'Solldurchfluss erreicht'"
' Do While Not m_SPS.SolldurchflussErreicht
' QIstSPS = Format(m_SPS.getQIst, "0.000")
' lblQIst.Caption = QIstSPS
' sleep 500, True
' If g_Abbruch = True Then
' Exit Sub
' End If
' Loop
' sleep 2000
'
'
' ' Prüfzeit in s ausrechnen
' m_Pruefzeit = 240 / m_DurchflussSoll
' If m_Pruefzeit < 60 Then
' m_Pruefzeit = 60
' End If
'
'
' For Each Einbauplatz In m_colEinbauplatz
' Set Pruefzaehler = Einbauplatz.getPruefzaehler
' EinbauplatzNr = Einbauplatz.getNr
'
'
' If Not Pruefzaehler Is Nothing Then
'
' udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).SollDurchfluss = m_DurchflussSoll
' udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).SollPruefzeit_s = m_Pruefzeit
'
' End If
' Next
' DoEvents
'
' m_Tstart = GetTickCount
' QIstSPS = Format(m_SPS.getQIst, "0.000")
' lngReturn = UltraschallPruefung(udtPruefdaten_imPP_mitEBP)
'
' ' lngReturn = 0
'
' If lngReturn = 0 Then
' ' Fehlerermittlung
' For Each Einbauplatz In m_colEinbauplatz
' Set Pruefzaehler = Einbauplatz.getPruefzaehler
' EinbauplatzNr = Einbauplatz.getNr
'
' If Not Pruefzaehler Is Nothing Then
' lngReturn = GetUSVolumen(EinbauplatzNr, dblVolumenUS, Einbauplatz.getPruefzaehler.getSerienNr) And 0
' If lngReturn = 0 Then
' PrintStatus "Volumen des USZ: " & dblVolumenUS & " m³"
' lngReturn = GetRZVolumen(EinbauplatzNr, m_Referenzzaehler, dblVolumenRZ)
' If lngReturn = 0 Then
'
' PrintStatus "Volumen des RZ: " & dblVolumenRZ & " m³"
' dblVolumenRZ = dblVolumenRZ / (1 + m_Referenzzaehler.letzterFehler(m_DurchflussSoll) / 100)
' PrintStatus "Fehler des RZ in diesem PP:" & m_Referenzzaehler.letzterFehler(m_DurchflussSoll)
' PrintStatus "korrigiertes Volumen: " & dblVolumenRZ & " m³"
'
'
' ' unterschiedliche Prüfzeiten eliminieren
' DurchflussRZ = dblVolumenRZ / udtPruefdaten_imPP_mitEBP(EinbauplatzNr).RZ_IstPruefzeit_ms
' DurchflussUS = dblVolumenUS / udtPruefdaten_imPP_mitEBP(EinbauplatzNr).US_IstPruefzeit_ms
'
' 'Simulation
' 'DurchflussRZ = m_DurchflussSoll
' 'DurchflussUS = DurchflussRZ * (1 + (Rnd(1) * 0.1 - 0.05))
'
' PrintStatus "US Durchfluss: " & DurchflussUS
' PrintStatus "Ist-Durchfluss: " & DurchflussRZ
'
' Fehler = ((DurchflussUS - DurchflussRZ) / DurchflussRZ) * 100
' PrintStatus "ergibt Fehler: " & Format(Fehler, "0.0") & " %"
'
' ResultFileHandle = FreeFile()
' Open ResultFilePath For Append As ResultFileHandle
'
' Print #ResultFileHandle, EinbauplatzNr & vbTab & Format(m_DurchflussSoll, "0.000") & vbTab & Format(QIstSPS, "0.000") & vbTab & Format(Fehler, "0.00") & vbTab & m_Pruefzeit & vbTab & "MID" & m_Referenzzaehler.Nennweite & "," & m_Pumpe.GetSPSVarname
' Close #ResultFileHandle
' Else
' PrintStatus " GETRZVolumen Fehlfunktion:" & lngReturn
' End If
' Else
' PrintStatus " GETUSVolumen Fehlfunktion:" & lngReturn
' End If
' End If
' Next
' End If ' UltraschallPruefung
'
' ' Durchfluss ändern
' m_DurchflussSoll = CDbl(Format(m_DurchflussSoll * 0.9, "0.000"))
'
' If m_DurchflussSoll < CDbl(txtFlowMin) Then
' blnFertig = True
' End If
'
' Loop While Not blnFertig
'
' PrintStatus "Kontinuierliche Prüfung beendet"
'End Sub
Private Sub KontinuierlichePruefungWaage()
Dim altePumpeNr As Integer
Dim udtPruefdaten_imPP_mitEBP(10) As TypUSPruefdaten
Dim Einbauplatz As CEinbauplatz
Dim EinbauplatzNr As Integer
Dim lngReturn As Long
Dim Pruefzaehler As CPruefzaehler
Dim DurchflussRZ As Double
Dim DurchflussUS As Double
Dim dblVolumenRZ As Double
Dim dblVolumenUS As Double
Dim dblVolumenWaage As Double
Dim blnFertig As Boolean
Dim ResultFileHandle As Long
Dim QIstSPS As Double
Dim QFlow_fp As Double
Dim Fehler As Double
Dim bBetriebNeustart As Boolean
Dim Temperatur As Double
Dim blnPruefungFertig As Boolean
Dim strMsg As String
strMsg = "Die kontinuierliche Prüfung ist kaum getestet und erhebt noch keinen Anspruch auf richtige Ergnisse." & vbCrLf
strMsg = strMsg & "Die Prüfzeiten (und Prüfvolumen) sind abhängig vom Durchfluss und der Nennweite und optimiert für die kontinuerliche Prüfung gegen Referenzzähler!"
strMsg = strMsg & "t = V / Q mit V(NW 50)=100 l,V(NW 65)=160 l, V(NW 80)=250 l,V(NW 100)=400 l, sonst V=500. Mit 60s <= t <= 1100s!"
MsgBox strMsg
PrintStatus strMsg
m_SPS.setBetrieb 0
Sleep 2000
lblGesZeit.Visible = False
Set m_Referenzzaehler = New CRefzaehler
If g_Abbruch Then
Exit Sub
End If
PrintStatus "kontinuierliche Prüfung von FW2 US Zählern gegen " & IIf(m_PruefungsArtWaage, "Waage", "Referenzzähler") & " wurde gestartet."
m_DurchflussSoll = CDbl(txtFlowMax.text)
' Pumpe für den Start auswählen
m_SPS.AllePumpenAbwaehlen
Set m_Pumpe = Pumpenwahl(m_DurchflussSoll, m_ColPumpen)
PrintStatus "zu startende Pumpe: " & m_Pumpe.GetSPSVarname
bBetriebNeustart = True
Set m_Referenzzaehler = New CRefzaehler
Call m_Referenzzaehler.loadForDurchfluss(m_DurchflussSoll, g_App.Settings.getMIDGruppe)
m_SPS.SetQDiff 0 ' m_Referenzzaehler.letzterFehler(m_DurchflussSoll)
Do
PrintStatus "Nächster Durchfluss: " & m_DurchflussSoll
Debug.Print m_ersterPruefzaehler.getIdentNrObj.getNennweite
'geändert am 22.01.2004 AP
Select Case m_ersterPruefzaehler.getIdentNrObj.getNennweite
Case 50
PrintStatus "Prüfvolumen=100 l"
m_Pruefzeit = 100 / m_DurchflussSoll
Case 65
PrintStatus "Prüfvolumen=160 l"
m_Pruefzeit = 160 / m_DurchflussSoll
Case 80
PrintStatus "Prüfvolumen=250 l"
m_Pruefzeit = 250 / m_DurchflussSoll
Case 100
PrintStatus "Prüfvolumen=400 l"
m_Pruefzeit = 400 / m_DurchflussSoll
Case Else
'Falls neue Nennweiten geprüft werden sollten
PrintStatus "Prüfvolumen=500 l"
m_Pruefzeit = 500 / m_DurchflussSoll
End Select
' RH wieder entfernt 22.5.2008
' 'RH 21.5.2008,
' m_Pruefzeit = 900 / m_DurchflussSoll
' 'neu RH 21.5.2008: Die Prüfzeit soll 120 Sekunden nie unterschreiten
' If m_Pruefzeit <= 120 Then
' m_Pruefzeit = 120
' End If
' 'neu UD RH 21.5.2008
' If m_Pruefzeit >= 720 Then
' m_Pruefzeit = 720
' End If
'Die Prüfzeit soll 60 Sekunden nie unterschreiten
If m_Pruefzeit <= 60 Then
m_Pruefzeit = 60
End If
'neu am 21.01.2004 AP die Prüfzeit soll 1100 Sekunden nicht überschreiten
If m_Pruefzeit >= 1100 Then
m_Pruefzeit = 1100
End If
PrintStatus "Prüfzeit: " & m_Pruefzeit
' Ist der Referenzzähler für diesen Durchfluß geeignet ?
If Not m_Referenzzaehler.IstOkFuerDurchfluss(m_DurchflussSoll) Then
' Referenzzaehler wechseln
PrintStatus "Referenzzaehler wechseln"
If Not m_PruefungsArtWaage Then
m_SPS.SetQSoll 0
Sleep 5000
m_SPS.setBetrieb 0
Sleep 2000
End If
Call m_Referenzzaehler.loadForDurchfluss(m_DurchflussSoll, g_App.Settings.getMIDGruppe)
m_SPS.SetQDiff 0 ' m_Referenzzaehler.letzterFehler(m_DurchflussSoll)
PrintStatus "nutze MID " & m_Referenzzaehler.Nennweite
bBetriebNeustart = True
End If
If Not m_Pumpe.IstOkFuerDurchfluss(m_DurchflussSoll) Then
' Pumpe wechseln
PrintStatus "Pumpe wechseln"
If Not m_PruefungsArtWaage Then
m_SPS.SetQSoll 0
Sleep 5000
m_SPS.setBetrieb 0
Sleep 2000
End If
' Pumpenauswahl
m_SPS.AllePumpenAbwaehlen
Set m_Pumpe = Pumpenwahl(m_DurchflussSoll, m_ColPumpen)
PrintStatus "zu startende Pumpe: " & m_Pumpe.GetSPSVarname
bBetriebNeustart = True
End If
' hier gehts los, Pumpe und MID sind eingestellt
If m_PruefungsArtWaage Then
' da WaageVorbereitenFuerPP nicht mehr zuwiegt
Call BeideBehaelterLeeren
' Waage soweit wie nötig füllen und leeren, Grenzwert setzen
If WaageVorbereitenFuerPP() < 0 Then
' Änderung 9.9.2002
GoTo NextDurchfluss
End If
Else
' Durchlauf (kein Beählter) auswählen
m_SPS.setBehaelter 1
m_SPS.SetQSoll m_DurchflussSoll
lblQSoll.caption = m_DurchflussSoll
m_SPS.SetMID m_Referenzzaehler.EinbauplatzNr
m_SPS.SetQSoll m_DurchflussSoll
lblQSoll.caption = m_DurchflussSoll
If bBetriebNeustart = True Then
m_SPS.SetServoStellung lookupFUServoStellwert(m_DurchflussSoll)
' Pumpe starten
m_Pumpe.Anwahl
m_SPS.SetMID m_Referenzzaehler.EinbauplatzNr
m_SPS.setBetrieb 2
bBetriebNeustart = False
End If
' Warten bis Durchfluss erreicht ist
PrintStatus "Warte auf 'Solldurchfluss erreicht'"
Do While Not m_SPS.SolldurchflussErreicht
QIstSPS = CDbl(m_SPS.getQIst)
lblQIst.caption = Format(QIstSPS, "0.000")
Sleep 500, True
If g_Abbruch = True Then
Exit Sub
End If
Loop
'sleep 2000
End If ' keine Waage
' Wenn keine Waage: Wasser läuft
' Wenn Waage: Wasser läuft nicht, Waage tariert
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
EinbauplatzNr = Einbauplatz.getNr
If Not Pruefzaehler Is Nothing Then
' OptoTimer reset
'Call USSetOptoOffTimerMax(Einbauplatz.getNr)
' Pruefdaten setzen für Ultraschallprüfung
udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).SollDurchfluss = m_DurchflussSoll
udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).SollPruefzeit_s = m_Pruefzeit
End If
Next
DoEvents
Temperatur = m_SPS.GetEinlaufTemperatur
If m_PruefungsArtWaage Then
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
EinbauplatzNr = Einbauplatz.getNr
If Not Pruefzaehler Is Nothing Then
If mblnExternalTemperatur Then
lngReturn = FW2_USSetTemperatur(Einbauplatz, Temperatur)
lblTemperatur.caption = Format(Temperatur, "0.0")
If lngReturn = 0 Then
PrintStatus "USSetTemperatur OK"
Else
PrintStatus "USSetTemperatur Fehler" & lngReturn
End If
End If
lngReturn = FW2_StarteUSundRZZaehler(Einbauplatz)
If lngReturn = 0 Then
PrintStatus "RZ-START und NOWA_START OK"
Else
PrintStatus "RZ-START und NOWA_START Fehler:" & lngReturn
End If
End If
Next
' Waage virtuell tarieren
m_Waage.SoftTara
PrintStatus "Soft Taragewicht=" & m_Waage.SoftTaraGewicht & " kg"
PrintStatus "Nettogewicht=" & m_Waage.GetGewicht & " kg (sollte = 0 sein)"
lblGewicht.caption = Format(m_Waage.GetGewicht, "0.00") ' sollte 0 sein
' Prüfung starten
m_SPS.AllePumpenAbwaehlen
m_Pumpe.Anwahl
m_SPS.SetMID m_Referenzzaehler.EinbauplatzNr
m_SPS.SetRegelart m_Pumpe.GetRegelart
m_SPS.SetServoStellung lookupFUServoStellwert(m_DurchflussSoll, m_Pumpe.GetRegelart)
m_SPS.SetQSoll m_DurchflussSoll
m_SPS.setBetrieb 2
m_Tstart = GetTickCount
PrintStatus "Pumpe gestartet"
Do While Not ((m_Pumpe.GetStatus And 4) = 4)
Sleep 500, True
If g_Abbruch = True Then
Exit Sub
End If
Loop
PrintStatus "Pumpe läuft: (PT_P" & m_Pumpe.getNr & "Status=4)"
' Prüfung startet
lblGewicht.caption = m_Waage.GetGewicht
QIstSPS = 0
blnPruefungFertig = False
Do While Not blnPruefungFertig
If m_SPS.GrenzwertWaageErreicht Then
blnPruefungFertig = True
Else
If QIstSPS = 0 And (GetTickCount - m_Tstart) \ 1000 > m_Pruefzeit \ 2 Then
QIstSPS = m_SPS.getQIst
PrintStatus "IstDurchfluss zur halben Prüfzeit: " & Format(QIstSPS, "0.00") & " m³/h"
End If
lblQIst.caption = Format(m_SPS.getQIst, "0.000")
lblGewicht = m_Waage.GetGewicht
Sleep 500
End If
AnzeigeAktualisieren_mit_Waage
Sleep 100
DoEvents
If g_Abbruch Then Exit Sub
Loop
PrintStatus "Waagen-Grenzwert erreicht"
m_SPS.setBetrieb 0
' Prüfzeit messen/stoppen in s
m_Tpruef = (GetTickCount - m_Tstart) \ 1000
m_Waage.SetNettoGrenzwert1 m_Behaelter.m_WaageGrenzwert
PrintStatus "Warte auf Waagenruhe"
m_Behaelter.WarteAufRuhe
PrintStatus "Temperatur=" & Round(Temperatur, 2) & " °C"
PrintStatus "Gewicht=" & m_Waage.GetGewicht & " kg"
PrintStatus "wegen SoftTara sind abzüglich " & m_Waage.SoftTaraGewicht & " kg enthalten."
'm_Waage.WarteAufRuhe
dblVolumenWaage = Errechne_Volumen_Von_Wasser_in_m3(m_Waage.GetGewicht, Temperatur) ' in m³
PrintStatus "VolumenWaage: " & Format(dblVolumenWaage, "0.00000") & " m³"
For Each Einbauplatz In m_colEinbauplatz
EinbauplatzNr = Einbauplatz.getNr
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If (Not Pruefzaehler Is Nothing) Then
lngReturn = FW2_StoppeUSundRZZaehler(Einbauplatz)
If lngReturn = 0 Then
PrintStatus "RZ-STOP und NOWA_STOP OK"
Else
PrintStatus "RZ-STOP und NOWA_STOP Fehler:" & lngReturn
End If
End If ' PZ is nothing and GetActive
Next Einbauplatz
For Each Einbauplatz In m_colEinbauplatz
EinbauplatzNr = Einbauplatz.getNr
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If (Not Pruefzaehler Is Nothing) Then
lngReturn = FW2_GetUSVolumen(Einbauplatz, dblVolumenUS)
PrintStatus "Volumen des US: " & dblVolumenUS & " m³"
PrintStatus "Fehler = (dblVolumenUS - dblVolumenWaage) / dblVolumenWaage * 100"
Fehler = (dblVolumenUS - dblVolumenWaage) / dblVolumenWaage * 100
PrintStatus "ergibt Fehler: " & Format(Fehler, "0.0") & " %"
saveKontPrueffehler Fehler, QIstSPS, dblVolumenUS, dblVolumenRZ, dblVolumenWaage, EinbauplatzNr, Temperatur, m_Tpruef, Einbauplatz.getPruefzaehler.getSerienNr
'auskommentiert am 29.08.02 Pfeiffer
'ResultFileHandle = FreeFile()
'Open ResultFilePath For Append As ResultFileHandle
' Print #ResultFileHandle, EinbauplatzNr & vbTab & Format(m_DurchflussSoll, "0.000") & vbTab & Format(QIstSPS, "0.000") & vbTab & Format(Fehler, "0.00") & vbTab & m_Tpruef & vbTab & "MID" & m_Referenzzaehler.Nennweite & "," & m_Pumpe.GetSPSVarname & vbTab & Format(dblVolumenUS, "0.00000") & vbTab & Format(dblVolumenWaage, "0.00000")
' Close #ResultFileHandle
End If
Next
Else
' keine Waage
Sleep 1000
QIstSPS = Format(m_SPS.getQIst, "0.000")
lngReturn = UltraschallPruefung(udtPruefdaten_imPP_mitEBP)
If g_Abbruch Then
Exit Sub
End If
If lngReturn = 0 Then
' Fehlerermittlung
For Each Einbauplatz In m_colEinbauplatz
Set Pruefzaehler = Einbauplatz.getPruefzaehler
EinbauplatzNr = Einbauplatz.getNr
If Not Pruefzaehler Is Nothing Then
lngReturn = FW2_GetUSVolumen(Einbauplatz, dblVolumenUS) 'And 0
If lngReturn = 0 Then
PrintStatus "Volumen des USZ: " & dblVolumenUS & " m³"
lngReturn = GetRZVolumen(EinbauplatzNr, m_Referenzzaehler, dblVolumenRZ) And 0
If lngReturn = 0 Then
PrintStatus "Volumen des RZ: " & dblVolumenRZ & " m³"
PrintStatus "Fehler des RZ in diesem PP:" & m_Referenzzaehler.letzterFehler(m_DurchflussSoll, m_SPS.GetEinlaufTemperatur)
dblVolumenRZ = dblVolumenRZ / (1 + m_Referenzzaehler.letzterFehler(m_DurchflussSoll, m_SPS.GetEinlaufTemperatur) / 100)
PrintStatus "korrigiertes Volumen:" & dblVolumenRZ & " m³"
' unterschiedliche Prüf-Zeiten elimienieren
DurchflussRZ = dblVolumenRZ / udtPruefdaten_imPP_mitEBP(EinbauplatzNr).RZ_IstPruefzeit_ms
If udtPruefdaten_imPP_mitEBP(EinbauplatzNr).US_IstPruefzeit_ms = 0 Then
PrintStatus ".US_IstPruefzeit_ms = 0, dh. Fehler konnte nicht ermittelt werden"
Else
DurchflussUS = dblVolumenUS / udtPruefdaten_imPP_mitEBP(EinbauplatzNr).US_IstPruefzeit_ms
'Simulation
'DurchflussRZ = m_DurchflussSoll
'DurchflussUS = DurchflussRZ * (1 + (Rnd(1) * 0.1 - 0.05))
PrintStatus "US Durchfluss: " & DurchflussUS
PrintStatus "Ist-Durchfluss: " & DurchflussRZ
Fehler = ((DurchflussUS - DurchflussRZ) / DurchflussRZ) * 100
PrintStatus "ergibt Fehler: " & Format(Fehler, "0.0") & " %"
'Hier werden die Daten für die Prüfung gegen Referenzzähler angespeichert
saveKontPrueffehler Fehler, QIstSPS, dblVolumenUS, dblVolumenRZ, dblVolumenWaage, EinbauplatzNr, Temperatur, m_Tpruef, Einbauplatz.getPruefzaehler.getSerienNr
' ResultFileHandle = FreeFile()
' Open ResultFilePath For Append As ResultFileHandle
'
' Print #ResultFileHandle, EinbauplatzNr & vbTab & Format(m_DurchflussSoll, "0.000") & vbTab & Format(QIstSPS, "0.000") & vbTab & Format(Fehler, "0.00") & vbTab & m_Pruefzeit & vbTab & "MID" & m_Referenzzaehler.Nennweite & "," & m_Pumpe.GetSPSVarname
' Close #ResultFileHandle
End If
Else
PrintStatus " GETRZVolumen Fehlfunktion:" & lngReturn
End If
Else
PrintStatus "FW2_GETUSVolumen Fehlfunktion:" & lngReturn
End If
End If
Next
End If ' UltraschallPruefung
End If ' keine Waage
' Durchfluss ändern
NextDurchfluss:
m_DurchflussSoll = CDbl(Format(m_DurchflussSoll * (100 - CDbl(Left(cmbKontSprung.text, 8))) / 100, "0.000"))
If m_DurchflussSoll < CDbl(txtFlowMin) Then
blnFertig = True
End If
Loop While Not blnFertig
lblGesZeit.Visible = True
PrintStatus "Kontinuierliche Prüfung beendet"
End Sub
Private Sub KontinuierlichePruefungInit()
On Error Resume Next
Kill ResultFilePath
On Error GoTo 0
txtFlowMax = m_colUniqueVorPP.Item(1).getQ
txtFlowMin = m_colUniqueVorPP.Item(m_colUniqueVorPP.Count).getQ
'geändert am 22.01.2004 AP Vorbesetzung der ComboBox mit dem 2.Wert
cmbKontSprung.ListIndex = 2
lblTitle.caption = "kontinuierliche Ultraschall-Zähler Prüfung gegen " & IIf(m_PruefungsArtWaage, "Waage", "Referenzzähler")
End Sub
Public Sub cmdStart_Click()
If Not m_SPS.IstStreckePruefbereit Then
MsgBox "SPS: nicht Prüfbereit!"
Exit Sub
End If
If Not m_SPS.IstAutomatik Then
MsgBox "SPS: Bitte Automatik wählen"
Exit Sub
End If
Dim i As Integer
Dim Ende As Integer
m_Pruefgang.save
lblTitle.caption = "kontinuierliche Ultraschall-Zähler Prüfung"
Ende = CInt(txtKontCount.text)
For i = Ende To 1 Step -1
If g_Abbruch Then Exit Sub
txtKontCount.text = i
PrintStatus "kontinuierlicher Prüfgang " & Ende - i & "/" & Ende
cmdStart.Enabled = False
Call KontinuierlichePruefungWaage
cmdStart.Enabled = True
Set m_Pruefgang = Nothing
Set m_Pruefgang = New CPruefgang
m_Pruefgang.save
If g_Abbruch Then Exit Sub
Next
End Sub
Private Sub ShowUSParameter(udtUSJustageParameter As JustageParameter_Type, udtUSZusatzParameter As US_ZusatzParameter_Typ, sUeberschrift As String, EinbauplatzNr As Integer)
On Error Resume Next
PrintStatus "---------------------------------------------------------"
PrintStatus sUeberschrift
PrintStatus "---------------------------------------------------------"
PrintStatus "Einbauplatz : " & EinbauplatzNr
PrintStatus "---------------------------------------------------------"
If udtUSJustageParameter.Geberkonstante1_IST_m <> 0 Then
PrintStatus "Geberkonstante1_IST_m : " & Format(udtUSJustageParameter.Geberkonstante1_IST_m, "0.00000000000000000") & " m"
Else
PrintStatus "Geberkonstante1_IST_m : " & Format(udtUSJustageParameter.Geberkonstante1_IST_m, "") & " m"
End If
If udtUSJustageParameter.Geberkonstante_Neu1_m <> 0 Then
PrintStatus "Geberkonstante_Neu1_m : " & Format(udtUSJustageParameter.Geberkonstante_Neu1_m, "0.00000000000000000") & " m"
Else
PrintStatus "Geberkonstante_Neu1_m : " & Format(udtUSJustageParameter.Geberkonstante_Neu1_m, "") & " m"
End If
If udtUSJustageParameter.Geberkonstante2_IST_m <> 0 Then
PrintStatus "Geberkonstante2_IST_m : " & Format(udtUSJustageParameter.Geberkonstante2_IST_m, "0.00000000000000000") & " m"
Else
PrintStatus "Geberkonstante2_IST_m : " & Format(udtUSJustageParameter.Geberkonstante2_IST_m, "") & " m"
End If
If udtUSJustageParameter.Geberkonstante_Neu2_m <> 0 Then
PrintStatus "Geberkonstante_Neu2_m : " & Format(udtUSJustageParameter.Geberkonstante_Neu2_m, "0.00000000000000000") & " m"
Else
PrintStatus "Geberkonstante_Neu2_m : " & Format(udtUSJustageParameter.Geberkonstante_Neu2_m, "") & " m"
End If
If udtUSJustageParameter.Offset1_IST_m3ph <> 0 Then
PrintStatus "Offset1_IST_m3ph : " & Format(udtUSJustageParameter.Offset1_IST_m3ph, "0.00000000000000000") & " m³/h"
Else
PrintStatus "Offset1_IST_m3ph : " & Format(udtUSJustageParameter.Offset1_IST_m3ph, "") & " m³/h"
End If
If udtUSJustageParameter.Offset_Neu1_m3ph <> 0 Then
PrintStatus "Offset_Neu1_m3ph : " & Format(udtUSJustageParameter.Offset_Neu1_m3ph, "0.00000000000000000") & " m³/h"
Else
PrintStatus "Offset_Neu1_m3ph : " & Format(udtUSJustageParameter.Offset_Neu1_m3ph, "") & " m³/h"
End If
If udtUSJustageParameter.Offset2_IST_m3ph <> 0 Then
PrintStatus "Offset2_IST_m3ph : " & Format(udtUSJustageParameter.Offset2_IST_m3ph, "0.00000000000000000") & " m³/h"
Else
PrintStatus "Offset2_IST_m3ph : " & Format(udtUSJustageParameter.Offset2_IST_m3ph, "") & " m³/h"
End If
If udtUSJustageParameter.Offset_Neu2_m3ph <> 0 Then
PrintStatus "Offset_Neu2_m3ph : " & Format(udtUSJustageParameter.Offset_Neu2_m3ph, "0.00000000000000000") & " m³/h"
Else
PrintStatus "Offset_Neu2_m3ph : " & Format(udtUSJustageParameter.Offset_Neu2_m3ph, "") & " m³/h"
End If
PrintStatus "---------------------------------------------------------"
If udtUSJustageParameter.Istfluss2_m3ph <> 0 Then
PrintStatus "Istfluss2_m3ph : " & Format(udtUSJustageParameter.Istfluss2_m3ph, "0.00000000000000000") & " m³/h"
Else
PrintStatus "Istfluss2_m3ph : " & Format(udtUSJustageParameter.Istfluss2_m3ph, "") & " m³/h"
End If
If udtUSJustageParameter.Sollfluss2_m3ph <> 0 Then
PrintStatus "Sollfluss2_m3ph : " & Format(udtUSJustageParameter.Sollfluss2_m3ph, "0.00000000000000000") & " m³/h"
Else
PrintStatus "Sollfluss2_m3ph : " & Format(udtUSJustageParameter.Sollfluss2_m3ph, "") & " m³/h"
End If
If udtUSJustageParameter.Istfluss2_m3ph > 0 And udtUSJustageParameter.Sollfluss2_m3ph > 0 Then
PrintStatus "Fehler Qnenn : " & Format((100 - (udtUSJustageParameter.Istfluss2_m3ph / udtUSJustageParameter.Sollfluss2_m3ph * 100)) * (-1), "0.##") & " %"
End If
If udtUSJustageParameter.Temperatur2_°C <> 0 Then
PrintStatus "Temperatur2_°C : " & Format(udtUSJustageParameter.Temperatur2_°C, "0.00000000000000000") & " °C"
Else
PrintStatus "Temperatur2_°C : " & Format(udtUSJustageParameter.Temperatur2_°C, "") & " °C"
End If
PrintStatus "---------------------------------------------------------"
If udtUSJustageParameter.Istfluss1_m3ph <> 0 Then
PrintStatus "Istfluss1_m3ph : " & Format(udtUSJustageParameter.Istfluss1_m3ph, "0.00000000000000000") & " m³/h"
Else
PrintStatus "Istfluss1_m3ph : " & Format(udtUSJustageParameter.Istfluss1_m3ph, "") & " m³/h"
End If
If udtUSJustageParameter.Sollfluss1_m3ph <> 0 Then
PrintStatus "Sollfluss1_m3ph : " & Format(udtUSJustageParameter.Sollfluss1_m3ph, "0.00000000000000000") & " m³/h"
Else
PrintStatus "Sollfluss1_m3ph : " & Format(udtUSJustageParameter.Sollfluss1_m3ph, "") & " m³/h"
End If
If udtUSJustageParameter.Istfluss1_m3ph > 0 And udtUSJustageParameter.Sollfluss1_m3ph > 0 Then
PrintStatus "Fehler Qmin : " & Format((100 - (udtUSJustageParameter.Istfluss1_m3ph / udtUSJustageParameter.Sollfluss1_m3ph * 100)) * (-1), "0.##") & " %"
End If
If udtUSJustageParameter.Temperatur1_°C <> 0 Then
PrintStatus "Temperatur1_°C : " & Format(udtUSJustageParameter.Temperatur1_°C, "0.00000000000000000") & " °C"
Else
PrintStatus "Temperatur1_°C : " & Format(udtUSJustageParameter.Temperatur1_°C, "") & " °C"
End If
PrintStatus "---------------------------------------------------------"
PrintStatus "Bereich_ns : " & udtUSJustageParameter.Bereich_ns
If udtUSJustageParameter.OffsetGeber_ns <> 0 Then
PrintStatus "OffsetGeber_ns : " & Format(udtUSJustageParameter.OffsetGeber_ns, "0.00000000000000000") & " ns"
Else
PrintStatus "OffsetGeber_ns : " & Format(udtUSJustageParameter.OffsetGeber_ns, "") & " ns"
End If
If udtUSJustageParameter.SteilheitGeber_nsp°C <> 0 Then
PrintStatus "SteilheitGeber : " & Format(udtUSJustageParameter.SteilheitGeber_nsp°C, "0.00000000000000000") & " ns/°C"
Else
PrintStatus "SteilheitGeber : " & Format(udtUSJustageParameter.SteilheitGeber_nsp°C, "") & " ns/°C"
End If
If udtUSJustageParameter.Unlinearitaet <> 0 Then
PrintStatus "Unlinearitaet : " & Format(udtUSJustageParameter.Unlinearitaet, "0.00000000000000000") & " %"
Else
PrintStatus "Unlinearitaet : " & Format(udtUSJustageParameter.Unlinearitaet, "") & " %"
End If
PrintStatus "FP_Impulswert. : " & udtUSZusatzParameter.FP_Impulswertigkeit & " m³/Impuls"
PrintStatus "FP_Impulswert.Pruef : " & udtUSZusatzParameter.FP_Impulswertigkeit_Pruef & " m³/Impuls"
PrintStatus "PulseMode : " & udtUSZusatzParameter.PulseMode
PrintStatus "FP_Flow_Min : " & udtUSZusatzParameter.FP_Flow_Min & " das entspricht: " & udtUSZusatzParameter.FP_Flow_Min / 3.6 & " l"
PrintStatus "FP_Flow_Max : " & udtUSZusatzParameter.FP_Flow_Max & " m³/h"
PrintStatus "-----------------------------------------------------"
PrintStatus "Offset_Qmin : " & udtUSJustageParameter.Offset_Qmin & " %"
PrintStatus "Offset_QBereich : " & udtUSJustageParameter.Offset_QBereich & " %"
PrintStatus "Offset_Qmax : " & udtUSJustageParameter.Offset_Qp & " %"
PrintStatus "-----------------------------------------------------"
PrintStatus "----------------- Neu FW2 ---------------------------"
PrintStatus "OGeber_Roh_Neu_ns= " & udtUSJustageParameter.OGeber_Roh_Neu_ns & " ns = " & udtUSJustageParameter.OGeber_Roh_Neu_ns / 10 ^ 9 & " s"
PrintStatus "OGeber=" & udtUSJustageParameter.OGeber
PrintStatus "Fehler1=" & udtUSJustageParameter.Fehler1
PrintStatus "Fehler2=" & udtUSJustageParameter.Fehler2
PrintStatus "DiffTof1_ns = " & udtUSJustageParameter.DiffTof1_ns & " ns = " & udtUSJustageParameter.DiffTof1_ns / 10 ^ 9 & " s"
PrintStatus "DiffTof2_ns = " & udtUSJustageParameter.DiffTof2_ns & " ns = " & udtUSJustageParameter.DiffTof2_ns / 10 ^ 9 & " s"
PrintStatus "Geberkonstante_Neu1_m = " & udtUSJustageParameter.Geberkonstante_Neu1_m & " m"
PrintStatus "Geberkonstante_Neu2_m = " & udtUSJustageParameter.Geberkonstante_Neu2_m & " m"
PrintStatus "OffsetGeber_Neu_ns =" & udtUSJustageParameter.OffsetGeber_Neu_ns & " ns = " & udtUSJustageParameter.OffsetGeber_Neu_ns / 10 ^ 9 & " s"
End Sub
Private Function UltraschallpruefungWaage_() As Double
Dim Einbauplatz As CEinbauplatz
Dim Pruefzaehler As CPruefzaehler
Dim udtPruefdaten_imPP_mitEBP(10) As TypUSPruefdaten
Dim Temperatur As Double
Dim dblVolumenWaage As Double
' Folgende Werte mussen gesetzt sein:
' m_ersterPruefzaehler (QMax bestimmen zum Füllen)
' m_DurchflussSoll
' m_PruefungsartWaage
' m_Pruefzeit
' Waage (m_Waage) vorbereiten
' Call WaageVorbereitenFuerPP
' Referenzzazehler m_Referenzzaehler setzen
' m_SPS.SetMID m_Referenzzaehler.EinbauplatzNr
' SPS.MID, m_Referenzzaehler muss ausgewählt sein
' m_waage muss ausgewählt sein
' For Each Einbauplatz In m_colEinbauplatz
' Set Pruefzaehler = Einbauplatz.getPruefzaehler
' EinbauplatzNr = Einbauplatz.getNr
'
' If Not Pruefzaehler Is Nothing Then
' ' OptoTimer reset
' Call USSetOptoOffTimerMax(Einbauplatz.getNr)
' ' Pruefdaten setzen für Ultraschallprüfung
' udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).SollDurchfluss = m_DurchflussSoll
' udtPruefdaten_imPP_mitEBP(Einbauplatz.getNr).SollPruefzeit_s = m_Pruefzeit
' End If
' Next
' DoEvents
'
' Temperatur = m_SPS.GetEinlaufTemperatur
'
' m_Tstart = GetTickCount ' Startzeitpunkt
'
' For Each Einbauplatz In m_colEinbauplatz
' Set Pruefzaehler = Einbauplatz.getPruefzaehler
' EinbauplatzNr = Einbauplatz.getNr
' If Not Pruefzaehler Is Nothing Then
' lngReturn = StarteUSundRZZaehler(Einbauplatz.getNr, Einbauplatz.getPruefzaehler.getSerienNr)
' If lngReturn = 0 Then
' PrintStatus "RZ-START und NOWA_START OK"
' Else
' PrintStatus "RZ-START und NOWA_START Fehler:" & lngReturn
' End If
' End If
' Next
'
' ' Prüfung starten
'
' m_SPS.setBetrieb 2
' PrintStatus "Pumpe läuft, Ventil ist noch geschlossen"
' Do While Not ((m_Pumpe.GetStatus And 4) = 4)
' sleep 500, True
' Loop
' PrintStatus "Prüfung läuft, Ventil offen."
'
' blnPruefungFertig = False
' Do While Not blnPruefungFertig
' If m_SPS.GrenzwertWaageErreicht Then
' blnPruefungFertig = True
' Else
' sleep 300, True
' End If
' AnzeigeAktualisieren
' sleep 100
' DoEvents
'
' If g_Abbruch Then Exit Function
' Loop
' PrintStatus "Waagen-Grenzwert erreicht"
'
' m_SPS.setBetrieb 0
' PrintStatus "Warte auf Waagenruhe"
' Call m_Waage.WarteAufRuhe
'
' For Each Einbauplatz In m_colEinbauplatz
' EinbauplatzNr = Einbauplatz.getNr
' Set Pruefzaehler = Einbauplatz.getPruefzaehler
' If (Not Pruefzaehler Is Nothing) Then
'
' lngReturn = StoppeUSundRZZaehler(EinbauplatzNr)
' If lngReturn = 0 Then
' PrintStatus "RZ-STOP und NOWA_STOP OK"
' Else
' PrintStatus "RZ-STOP und NOWA_STOP Fehler:" & lngReturn
' End If
' End If ' PZ is nothing
' Next Einbauplatz
'
End Function
Private Sub saveKontPrueffehler(Fehler As Double, QIst As Double, VolumenUS As Double, VolumenRZ As Double, VolumenWaage As Double, EinbauplatzNr As Integer, Temperatur As Double, Pruefzeit As Long, SerienNr As Long)
Dim rs As CRecordset
Set rs = New CRecordset
rs.openRS "KontPrueffehler", False
rs.addNew
Call rs.setValue("PruefgangNr", m_Pruefgang.PruefgangNr)
Call rs.setValue("Datum", Now())
Call rs.setValue("Fehler", Fehler)
Call rs.setValue("Solldurchfluss", m_DurchflussSoll)
Call rs.setValue("DurchflussSPS", QIst)
Call rs.setValue("VolumenUS", VolumenUS)
Call rs.setValue("VolumenRef", VolumenRZ)
Call rs.setValue("VolumenWaage", VolumenWaage)
Call rs.setValue("SerienNr", SerienNr)
If Not m_Pumpe Is Nothing Then
Call rs.setValue("Pumpe", m_Pumpe.GetSPSVarname)
End If
If Not m_Referenzzaehler Is Nothing Then
Call rs.setValue("MID", m_Referenzzaehler.Nennweite)
End If
Call rs.setValue("EinbauplatzNr", EinbauplatzNr)
Call rs.setValue("Temperatur", Temperatur)
Call rs.setValue("Pruefzeit", Pruefzeit)
rs.update
Set rs = Nothing
End Sub
Private Sub Form_Unload(Cancel As Integer)
On Error Resume Next
modMBUS_SMS.IECCOM_CloseCom
If Not m_Waage Is Nothing Then
m_Waage.releaseMScomm
Set m_Waage = Nothing
End If
End Sub
'Private Function SindPruefzeitenOK() As Boolean
'PrintStatus "SIndPruefzeitenOK..."
'
' SindPruefzeitenOK = True
' ' Exit Function
'
'Dim Vorpruefpunkt As CVorpruefpunkt
'Dim Pruefpunkt As CPruefpunkt
'Dim dblSollVolumen As Double
'Dim Behaelter As CBehaelter
'
'
'If m_VorPruefungsArtWaage And mbln_Vorpruefung Then
' For Each Vorpruefpunkt In m_ersterPruefzaehler.getVorpruefpunkte.getPruefpunkte.getCollection
' dblSollVolumen = Vorpruefpunkt.getQ * Vorpruefpunkt.GetTime / 3.6
'
' Set Behaelter = New CBehaelter
' If Behaelter.IstOkFuerVolumen(dblSollVolumen) = True Then
' PrintStatus "Behälter für Prüfpunkt Q=" & Vorpruefpunkt.getQ & ", " & Vorpruefpunkt.GetTime & "s gefunden."
' PrintStatus "Behälter grenzwert:" & Behaelter.m_WaageGrenzwert
' Else
' MsgBox "### kein Behälter mit" & dblSollVolumen & "l für VorPrüfpunkt Q=" & Vorpruefpunkt.getQ & " und Tprüf=" & Vorpruefpunkt.GetTime & "s gefunden."
' PrintStatus "### kein Behälter mit" & dblSollVolumen & "l für VorPrüfpunkt Q=" & Vorpruefpunkt.getQ & " und Tprüf=" & Vorpruefpunkt.GetTime & "s gefunden."
' SindPruefzeitenOK = False
' End If
' Next
'End If
'
'If m_PruefungsArtWaage And mbln_Hauptpruefung Then
' For Each Pruefpunkt In m_ersterPruefzaehler.getPruefpunkte.getPruefpunkte.getCollection
' dblSollVolumen = Pruefpunkt.getQ * Pruefpunkt.GetTime / 3.6
'
' Set Behaelter = New CBehaelter
' If Behaelter.LoadForVolumen(dblSollVolumen) Then
' PrintStatus "Behälter mit " & dblSollVolumen & " l für Prüfpunkt Q=" & Pruefpunkt.getQ & " und Tprüf=" & Pruefpunkt.GetTime & "s gefunden."
' PrintStatus "Behälter grenzwert:" & Behaelter.m_WaageGrenzwert
' Else
' MsgBox "### kein Behälter mit " & dblSollVolumen & " l für Prüfpunkt Q=" & Pruefpunkt.getQ & ", " & Pruefpunkt.GetTime & "s gefunden."
' PrintStatus "### kein Behälter mit " & dblSollVolumen & " l für Prüfpunkt Q=" & Pruefpunkt.getQ & " und Tprüf=" & Pruefpunkt.GetTime & "s gefunden."
' SindPruefzeitenOK = False
' End If
' Next
'End If
'
'End Function
'Function ResetTemperaturTransferLock(intPortNr As Integer, Optional lngIdentNoForVerification As Long = -1) As Long
'Dim lngReturn As Long
'Dim blnResult As Boolean
'
'lngReturn = SetTemperatureTransferLock(intPortNr, False, lngIdentNoForVerification)
' If lngReturn <> 0 Then
' ResetTemperaturTransferLock = lngReturn
' Exit Function
' End If
' 'Überprüfen !
' lngReturn = GetTemperatureTransferLock(intPortNr, blnResult, lngIdentNoForVerification)
' If lngReturn <> 0 Then
' ResetTemperaturTransferLock = lngReturn
' Exit Function
' End If
' If blnResult = True Then 'Temperatur kann nicht gemessen werden -> Zähler darf so nicht ausgeliefert werden !!!
' ResetTemperaturTransferLock = -55
' Exit Function
' End If
'End Function
'Function getVoreinstellwert(dblDurchfluss As Double, Sortierung As Boolean) As Integer
'Dim strSQL As String
'Dim rs As CRecordset
'Dim iNennweite As Integer
'Dim iTyp As String
'Dim SortInfo As String
'Dim dblObererDurchfluss As Double
'Dim dblUntererDurchfluss As Double
'Dim dblObererVoreinstellwert As Double
'Dim dblUntererVoreinstellwert As Double
'
'On Error GoTo Errorhandler
'Set rs = New CRecordset
'iNennweite = m_ersterPruefzaehler.getIdentNrObj.getNennweite
'iTyp = m_ersterPruefzaehler.getIdentNrObj.getTyp
'
''absteigent für ersten Prüfpunkt = False, sonst kleinster zuerst
'If Sortierung = False Then
' 'ersterPrüfpunkt
' SortInfo = "' order by Durchfluss desc"
'Else
' 'letzter Prüfpunkt
' SortInfo = "' order by Durchfluss"
'End If
'strSQL = "SELECT * FROM USVoreinstellwerte where Nennweite = " & iNennweite & " and Pruefstation= " & g_App.PruefstationNr & " and Typ = '" & iTyp & SortInfo
'
'rs.openRS strSQL, True
'
'dblObererDurchfluss = 0
'dblUntererDurchfluss = 0
'
'Do While Not rs.EOF
' Debug.Print "Durchfluss aus DB: " & rs.getDoubleValue("Durchfluss")
' dblObererDurchfluss = rs.getDoubleValue("Durchfluss")
' dblObererVoreinstellwert = rs.getDoubleValue("Voreinstellwert")
'
'
' If dblObererDurchfluss >= dblDurchfluss And dblDurchfluss >= dblUntererDurchfluss Then
' getUSVoreinstellwert = dblObererVoreinstellwert - (dblObererVoreinstellwert - dblUntererVoreinstellwert) * (dblObererDurchfluss - dblDurchfluss) / (dblObererDurchfluss - dblUntererDurchfluss)
' PrintStatus "Aus DB gelesen " & dblObererVoreinstellwert & " bei " & dblObererDurchfluss & " m³/h"
' PrintStatus "USVoreinstellwert (interpoliert)= " & getUSVoreinstellwert
' Exit Function
' End If
'
' dblUntererDurchfluss = dblObererDurchfluss
' dblUntererVoreinstellwert = dblObererVoreinstellwert
'
' rs.MoveNext
'Loop
' ErrorMsg "bitte Tabelle USVoreinstellwert pflegen"
' getUSVoreinstellwert = 50
'Exit Function
'
'Errorhandler:
' ErrorMsg "Fehler " & Err.Number & " in GetUSVoreinstellwert: " & Err.Description
'End Function
'Private Sub Setze_FP_St_GeberKonstanteZeroflow(ByRef SteilheitGeber_nsp() As Double)
' Dim EinbauplatzNr As Integer
' Dim Einbauplatz As CEinbauplatz
' Dim Pruefzaehler As CPruefzaehler
' Dim comport As Integer
' Dim lngReturn As Long
'
' Dim dblFlpDiffTof As Double
' Dim dblFP_Zeroflow_DiffTof As Double
' Dim dblFP_Zeroflow_Temp As Double
' Dim dblFP_ST_Geber As Double
' Dim dblTemperatur As Double
'
' Dim intMessdauer As Integer
' Dim lngStartzeit As Long
' Dim i As Integer
'
' Dim mlngCountMessungenLaufzeit(10) As Long
' Dim mdblLaufzeitMittelSumme(10) As Double
'
' Dim mdblTemperaturMittelSumme(10) As Double
' Dim mlngCountMessungenTemp(10) As Double
'
'
' dblTemperatur = m_SPS.GetEinlaufTemperatur
'
' ' zur Berechnung der Mittelwerte auf Null setzen
' For i = 1 To 10
' mdblLaufzeitMittelSumme(i) = 0
' mdblTemperaturMittelSumme(i) = 0
' mlngCountMessungenLaufzeit(i) = 0
' mlngCountMessungenTemp(i) = 0
' Next
'
' ' Messdauer aus INI Datei holen
' intMessdauer = g_App.Settings.GETUSZeroflowMesszeit
' PrintStatus "Zeroflow Messung gestartet (Dauer " & intMessdauer & " s)"
'
'
' ' durchschnittliche Zeroflow Laufzeit für alle Einbauplätze bestimmen
' lngStartzeit = GetTickCount
' ' für die Dauer der Prüfzeit
' Do While (GetTickCount - lngStartzeit) / 1000 < intMessdauer
' lblZeit.Caption = Format((GetTickCount - lngStartzeit) / 1000, "0") & "/" & intMessdauer
' DoEvents
' ' für jeden Prüfzaehler
' For Each Einbauplatz In m_colEinbauplatz
' EinbauplatzNr = Einbauplatz.getNr
' comport = g_App.Settings.getUSComPort(EinbauplatzNr)
' Set Pruefzaehler = Einbauplatz.getPruefzaehler
' If Not Pruefzaehler Is Nothing Then
' Debug.Print "Einbauplatz " & EinbauplatzNr
' ' Hole die aktuelle Laufzeit im stehenden kalten Wasser für diesen Prüfzähler
' lngReturn = modIECCOM.Get_FLP_DIffTof(comport, dblFlpDiffTof)
' Debug.Print "Get_FLP_DIffTof: " & dblFlpDiffTof
' DoEvents
' If lngReturn = 0 Then
' ' Errechne den Mittelwert
' mlngCountMessungenLaufzeit(EinbauplatzNr) = mlngCountMessungenLaufzeit(EinbauplatzNr) + 1
' Debug.Print "Messung Nr " & mlngCountMessungenLaufzeit(EinbauplatzNr)
' mdblLaufzeitMittelSumme(EinbauplatzNr) = mdblLaufzeitMittelSumme(EinbauplatzNr) + dblFlpDiffTof
' Debug.Print "mdblLaufzeitMittelSumme(" & EinbauplatzNr & "): " & mdblLaufzeitMittelSumme(EinbauplatzNr)
' Else
' PrintStatus "Fehler in Get_FLP_DIffTof " & lngReturn & " für Einbauplatz " & EinbauplatzNr
' End If
' End If
' Next
' Loop
'
'
' For Each Einbauplatz In m_colEinbauplatz
' EinbauplatzNr = Einbauplatz.getNr
' comport = g_App.Settings.getUSComPort(EinbauplatzNr)
' Set Pruefzaehler = Einbauplatz.getPruefzaehler
' If Not Pruefzaehler Is Nothing Then
' ' Hole die im Zähler gespeicherte Temperatur der warmen Zeroflow Messung
' If modIECCOM.Get_FP_Zeroflow_DiffTof(comport, dblFP_Zeroflow_DiffTof) = 0 Then
' ' Hole die im Zähler gespeicherte Laufzeit der warmen Zeroflow Messung
' If modIECCOM.Get_FP_ZeroflowTemperature(comport, dblFP_Zeroflow_Temp) = 0 Then
'
' ' aktuelle kalte Laufzeit - gespeicherte warme Laufzeit
' 'd ns/°C = -----------------------------------------------------------
' ' aktuelle kalte Temperatur - gespeicherte warme Temperatur
'
' dblFP_ST_Geber = (dblFP_Zeroflow_DiffTof - dblFlpDiffTof) / (dblFP_Zeroflow_Temp - dblTemperatur)
' ' Setze den JustageParameter
' SteilheitGeber_nsp(EinbauplatzNr) = dblFP_ST_Geber
' Else
' 'Get_FP_ZeroflowTemperature
' Stop
' End If
' Else
' 'Get_FP_Zeroflow_DiffTof
' Stop
' End If
' End If
' Next
'End Sub
'
Sub UpdateTemperaturInZaehlerFW2(Optional blnForceToSetTemp As Boolean = False)
'zyklische Temperatur Erfassung
'Wenn die aktuelle Temperatur dem vorherigen Wert um 0,5 Grad abweicht,
'muss die neue Temperatur im Zähler aktualisiert werden.
Dim Einbauplatz As CEinbauplatz
Dim EinbauplatzNr As Integer
Dim Pruefzaehler As CPruefzaehler
Dim dblTemperatur As Double
Dim lngRet As Long
Dim Fehler As Boolean
Dim MerkerEinbauplatz As Byte
Dim dblDeltaTemp As Double
dblDeltaTemp = GetDeltaTemp()
If Not g_ohneSPS Then
dblTemperatur = m_SPS.GetEinlaufTemperatur
Else
'dblTemperatur = Val(InputBox("Temperatur", "", 23))
dblTemperatur = 23 + Rnd(1) * 2
End If
mobjMittelwertTemperatur.AddWert dblTemperatur
' Mittelwert bilden
dblTemperatur = mobjMittelwertTemperatur.GetWert
If Abs(m_dblTemperaturVergleich - dblTemperatur) < dblDeltaTemp And blnForceToSetTemp = False Then
' Temperatur weicht nicht mehr als 0,5°C ab und es muss die Temperatur nicht UNBEDINGT in den Zähler geschrieben werden
Exit Sub
Else
PrintStatus "Temperaturdifferenz: " & m_dblTemperaturVergleich - dblTemperatur & " °C >= " & dblDeltaTemp & " °C"
' Temperatur merken
m_dblTemperaturVergleich = dblTemperatur
lblTemperatur.caption = Format(dblTemperatur, "0.0")
End If
'PrintStatus "Stations Temperatur ermittelt =" & Format(dblTemperatur, "0.00") & "Grad"
For Each Einbauplatz In m_colEinbauplatz
DoEvents
If g_Abbruch = True Then Exit Sub
EinbauplatzNr = Einbauplatz.getNr
Set Pruefzaehler = Einbauplatz.getPruefzaehler
If (Not Pruefzaehler Is Nothing) And Einbauplatz.getAktiv Then
' dieser Zähler soll geprüft werden
lngRet = FW2_USSetTemperatur(Einbauplatz, dblTemperatur)
If lngRet = 0 Then
PrintStatus "FW2_USSetTemperatur OK: T=" & Format(dblTemperatur, "0.00") & " Ebp " & EinbauplatzNr
Else
Fehler = True
MerkerEinbauplatz = EinbauplatzNr
PrintStatus "USSetTemperatur Fehler" & lngRet
End If
End If
Next
If Not Fehler Then
'PrintStatus "In alle USZähler übertragen"
Else
PrintStatus "UpdateTemperaturInZaehlerFW2: Übertragungsfehler nach USZähler " & MerkerEinbauplatz
End If
End Sub
Public Function getVoreinstellwert(ByVal dblDurchfluss As Double, ByRef blnWurdeNichtGefunden As Boolean) As Integer
Dim strSQL As String
Dim rs As CRecordset
Dim iNennweite As Integer
Dim sTyp As String
On Error GoTo Errorhandler
Set rs = New CRecordset
iNennweite = m_ersterPruefzaehler.getIdentNrObj.getNennweite
sTyp = m_ersterPruefzaehler.getIdentNrObj.getTyp
strSQL = "SELECT * FROM USVoreinstellwerte where Durchfluss = " & doubleToSQLString(dblDurchfluss) & " and Nennweite = " & iNennweite & " and Pruefstation= " & g_App.PruefstationNr & " and Typ = '" & sTyp & "'"
rs.openRS strSQL, True
If Not rs.EOF Then
getVoreinstellwert = rs.getDoubleValue("Voreinstellwert")
'geändert am 02.03.2005 Andreas Pfeiffer
'Durch "True" wird immer gespeichert und aktualisiert
'blnWurdeNichtGefunden = False
blnWurdeNichtGefunden = True
Else
blnWurdeNichtGefunden = True
getVoreinstellwert = 50
End If
If getVoreinstellwert > 100 Then getVoreinstellwert = 100
Exit Function
Errorhandler:
ErrorMsg "Fehler " & Err.Number & " in GetVoreinstellwert: " & Err.Description
End Function
Public Sub SetVoreinstellwert(dblDurchfluss As Double, Voreinstellwert As Integer)
Dim strSQL As String
Dim rs As CRecordset
Dim iNennweite As Integer
Dim sTyp As String
On Error GoTo Errorhandler
Set rs = New CRecordset
iNennweite = m_ersterPruefzaehler.getIdentNrObj.getNennweite
sTyp = m_ersterPruefzaehler.getIdentNrObj.getTyp
strSQL = "SELECT * FROM USVoreinstellwerte where Durchfluss = " & doubleToSQLString(dblDurchfluss) & " and Nennweite = " & iNennweite & " and Pruefstation= " & g_App.PruefstationNr & " and Typ = '" & sTyp & "'"
rs.openRS strSQL, False
DebugMsg strSQL
If Not rs.EOF Then
PrintStatus "Voreinstellwert für diesen Prüfpunkt ist vorhanden."
'Neu zugefügt, dass bei jeder Änderung auch neu abgespeichert wird
'Andreas Pfeiffer 01.03.2005
rs.setValue "Voreinstellwert", Voreinstellwert
rs.setValue "LetzteAenderung", Now()
rs.setValue "Mitarbeiter", g_App.Mitarbeiter.getNr
rs.update
DebugMsg "Voreinstellwert " & Voreinstellwert & " wurde aktualisiert."
Else
PrintStatus "Voreinstellwert " & Voreinstellwert & " für diesen Prüfpunkt wird neu gespeichert."
rs.addNew
rs.setValue "Voreinstellwert", Voreinstellwert
rs.setValue "Durchfluss", dblDurchfluss
rs.setValue "Nennweite", iNennweite
rs.setValue "Pruefstation", g_App.PruefstationNr
rs.setValue "Typ", sTyp
rs.setValue "LetzteAenderung", Now()
rs.setValue "Mitarbeiter", g_App.Mitarbeiter.getNr
rs.update
End If
Exit Sub
Errorhandler:
ErrorMsg "Fehler " & Err.Number & " in SetVoreinstellwert: " & Err.Description
End Sub
Private Sub gewaehltenBehaelterLeeren()
Dim StartVolumen As Double
Dim Gewicht As Double
Dim letztesGewicht As Double
If g_ohneSPS Then
MsgBox "Bitte Wasser aus " & m_Behaelter.m_OVolumen & "l-Behälter ganz ablassen!"
End If
' Wasser ganz ablassen
StartVolumen = 0
m_SPS.WassserAblassen m_Behaelter.m_AblassAnwahl
Sleep 2000, True
Do
Sleep 500, True
If m_Waage Is Nothing Then Exit Sub
Gewicht = m_Waage.GetGewicht
lblGewicht = Gewicht
If Gewicht = -9999 Then
DebugMsg ("Fehler: Gewicht konnte nicht gelesen werden")
Sleep 200, True
End If
If g_Abbruch = True Then
Exit Sub
End If
If letztesGewicht = Gewicht Then Exit Do
letztesGewicht = Gewicht
Loop While Gewicht > StartVolumen
m_SPS.WassserAblassen 0
'-----------------------------------------
Exit Sub
Errorhaendler:
ErrorMsg "Fehler " & Err.Number & " in gewaehltenBehaelterLeeren(): " & Err.Description
End Sub
Private Sub BeideBehaelterLeeren()
'Todo: hier durch alle Behälter in der INI gehen
Dim i As Integer
On Error GoTo Errorhandler
Dim byteBeideAblassen As Byte
Dim Behaelter As CBehaelter
If Not g_ohneSPS Then
PrintStatus "Beide Behälter ganz leeren"
' byteBeideAblassen bestimmen um beide Behälter leeren
For i = 1 To 4
Set Behaelter = New CBehaelter
Behaelter.LoadFromIni (i)
byteBeideAblassen = byteBeideAblassen Or Behaelter.m_AblassAnwahl
Next
' alle Behälter nacheinander
For i = 1 To 4
Set Behaelter = New CBehaelter
Behaelter.LoadFromIni (i)
''''''''' Ablass auf''''''''''''''''
If g_App.Settings.GetBehaelterAlleinLeeren(i) = True Then
' Es soll nur ein Behälter gleichzeitig geleert werden
' der andere soll warten
Behaelter.LoadFromIni (i)
m_SPS.WassserAblassen Behaelter.m_AblassAnwahl
PrintStatus "Wasser Ablassen aus " & i & ". Behälter mit " & Behaelter.m_OVolumen & " l beginnt"
Else
' beide Behälter gleichzeitig leeren
If i = 1 Then
m_SPS.WassserAblassen byteBeideAblassen
PrintStatus "Wasser Ablassen aus beiden Behältern beginnt"
End If
End If
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''
Sleep 4000, True
''''''''''''''''''''''''''''''''''''''' Warten bis Behälter leer ist ''''''''''''''''''''''''''''''''''''''
If Behaelter.m_OVolumen > 0 Then
Set m_Waage = g_App.getWaage
m_Waage.Initialize (i)
If Behaelter.m_WaageAnwahl > 0 Then
m_Waage.Anwahl Behaelter.m_WaageAnwahl
Debug.Print "Waage " & Behaelter.m_WaageAnwahl
End If
PrintStatus "Warte bis " & Behaelter.m_OVolumen & " l-Behälter ganz leer ist."
'klären: Unnötig?
Behaelter.WarteAufRuhe
End If
Next
' Behälter leeren beenden, Pumpe aus oder Ventil zu
m_SPS.WassserAblassen 0
PrintStatus "Wasser Ablassen beendet."
End If
Exit Sub
Errorhandler:
ErrorMsg "Fehler " & Err.Number & " in Funktion 'BeideBehaelterLeeren': " & Err.Description
End Sub
'Private Sub BeideBehaelterLeeren()
'Dim i As Integer
'On Error GoTo Errorhandler
'Dim byteAblass As Byte
'
' If Not g_ohneSPS Then
' PrintStatus "Beide Behälter ganz leeren."
' For i = 1 To 2
' Set m_Behaelter = New CBehaelter
' m_Behaelter.LoadFromIni (i)
' byteAblass = byteAblass Or m_Behaelter.m_AblassAnwahl
' Next
' ' beide Behälter
' m_SPS.WassserAblassen byteAblass
'
' Sleep 4000, True
' For i = 1 To 2
' If g_App.Settings.GetBehaelterLeeren(i) = 1 Then
' Set m_Behaelter = New CBehaelter
' m_Behaelter.LoadFromIni (i)
' m_Waage.Initialize (i)
' ' Anwahl erfolgt in Behälter.WarteAufRuhe
' PrintStatus "Warte bis " & m_Behaelter.m_OVolumen & " l-Behälter ganz leer ist..."
' m_Behaelter.WarteAufRuhe
' End If
' Next
' m_SPS.WassserAblassen 0
' End If
'Exit Sub
'Errorhandler:
' ErrorMsg "Fehler " & Err.Number & " in Funktion 'BeideBehaelterLeeren': " & Err.Description
'End Sub
'Private Sub Vorjustage(ByRef udtUSParameter As JustageParameter_Type)
'Dim Einbauplatz As CEinbauplatz
'Dim Pruefzaehler As CPruefzaehler
'Dim comport As Integer
'Dim EinbauplatzNr As Integer
'
' ' neu RH 16.1.2006
'
' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' '''''''''''''''''''' Vorjustage Vorjustage bei Qmin solange bis Fehler < 10% '''''''''
' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' load frmVorjustage
' Set frmVorjustage.m_colEinbauplatz = m_colEinbauplatz
' Set frmVorjustage.m_colUniquePP = m_colUniquePP
' Screen.MousePointer = vbNormal
' frmVorjustage.Show vbModal, Me
' Unload frmVorjustage
'
'
' ' von der Vorjustage geänderte Offset Werte wieder aus Zähler lesen
' For Each Einbauplatz In m_colEinbauplatz
' Set Pruefzaehler = Einbauplatz.getPruefzaehler
' If Not Pruefzaehler Is Nothing Then
'
' EinbauplatzNr = Einbauplatz.getNr
' comport = g_App.Settings.getUSComPort(EinbauplatzNr)
' Call modIECCOM.GetOffsetAndGeberAndBereich(comport, udtUSParameter(Einbauplatz.getNr))
'
' ' leider überschreibt GetOffsetAndGeberAndBereich die Offset_Qmin, Offset_QBereich, Offset_Qp, also nochmal aus DB lesen
' udtUSParameter(Einbauplatz.getNr).Offset_Qmin = Pruefzaehler.getVorpruefpunkte.getOffset_Qmin
' udtUSParameter(Einbauplatz.getNr).Offset_QBereich = Pruefzaehler.getVorpruefpunkte.getOffset_QBereich
' udtUSParameter(Einbauplatz.getNr).Offset_Qp = Pruefzaehler.getVorpruefpunkte.getOffset_Qp
'
' ShowUSParameter udtUSParameter(Einbauplatz.getNr), udtUSZusatzParameter(Einbauplatz.getNr), "geänderte Offset Werte nach der Vorjustage", Einbauplatz.getNr
' End If
' Next
' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'End Sub
''''''''''''''''''''''' Bemerkungen
Private Sub MSFlexGrid1_DblClick()
If g_blnVersuch = False Then Exit Sub
Dim row As Integer
Dim SerienNr As Long
Dim strText As String
row = MSFlexGrid1.row
SerienNr = Val(MSFlexGrid1.TextMatrix(row, 0))
If SerienNr > 0 Then
MSFlexGrid1.row = row
MSFlexGrid1.col = 1
txtBemerkung.Left = MSFlexGrid1.CellLeft + MSFlexGrid1.Left + Frame2.Left
txtBemerkung.Top = MSFlexGrid1.CellTop + MSFlexGrid1.Top + Frame2.Top
txtBemerkung.Width = MSFlexGrid1.Width - MSFlexGrid1.CellLeft - 100
txtBemerkung.Visible = True
txtBemerkung.Enabled = True
txtBemerkung.Tag = SerienNr
'' Laden der Bemerkung
LoadPrueffehlerInfo m_Pruefgang.PruefgangNr, SerienNr, strText
txtBemerkung.text = strText
txtBemerkung.SetFocus
End If
End Sub
Private Sub txtBemerkung_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
txtBemerkung.Enabled = False
If txtBemerkung.Visible = True Then
SpeichereBemerkungUndSchliesseEingabe
End If
End If
End Sub
Private Sub txtBemerkung_LostFocus()
txtBemerkung.Enabled = False
If txtBemerkung.Visible = True Then
SpeichereBemerkungUndSchliesseEingabe
End If
End Sub
Private Sub SpeichereBemerkungUndSchliesseEingabe()
Dim SerienNr As Long
Dim strText As String
SerienNr = Val(txtBemerkung.Tag)
strText = txtBemerkung.text
SavePrueffehlerInfo m_Pruefgang.PruefgangNr, SerienNr, strText
txtBemerkung.Tag = ""
txtBemerkung.Visible = False
End Sub
Private Function LeseZusatzParameterAusZaehler(ByRef Einbauplatz As CEinbauplatz, ByRef USZusatzParameter As US_ZusatzParameter_Typ) As Integer
On Error GoTo Errorhandler
LeseZusatzParameterAusZaehler = modMBUS_SMS.fw2_open_comport(Einbauplatz.m_iComport, 2400, Einbauplatz.m_strMapfile, True)
If LeseZusatzParameterAusZaehler <> 0 Then
GoTo Errorhandler
End If
LeseZusatzParameterAusZaehler = modMBUS_SMS.ReadValue("f_fp_flow_min", USZusatzParameter.FP_Flow_Min)
If LeseZusatzParameterAusZaehler <> 0 Then
PrintStatus "f_fp_flow_min konnte nicht gelesen werden."
GoTo Errorhandler
Else
PrintStatus "lese f_fp_flow_min= " & USZusatzParameter.FP_Flow_Min
End If
LeseZusatzParameterAusZaehler = modMBUS_SMS.ReadValue("f_fp_flow_max", USZusatzParameter.FP_Flow_Max)
If LeseZusatzParameterAusZaehler <> 0 Then
PrintStatus "f_fp_flow_max konnte nicht gelesen werden."
GoTo Errorhandler
Else
PrintStatus "lese f_fp_flow_max= " & USZusatzParameter.FP_Flow_Min
End If
modMBUS_SMS.IECCOM_CloseCom
Exit Function
Errorhandler:
If LeseZusatzParameterAusZaehler <> 0 Then
PrintStatus "Fehler in LeseZusatzParameterAusZaehler(): " & modMBUS_SMS.Errorstring(LeseZusatzParameterAusZaehler)
End If
If Err.Number <> 0 Then
PrintStatus "Fehler " & Err.Number & " in LeseZusatzParameterAusZaehler(): " & Err.Description
LeseZusatzParameterAusZaehler = -1
Exit Function
End If
modMBUS_SMS.IECCOM_CloseCom
End Function
Private Function LeseJustageParameterAusZaehler(ByRef Einbauplatz As CEinbauplatz, ByRef USParameter As JustageParameter_Type) As Integer
On Error GoTo Errorhandler
Dim dblTemp As Double
LeseJustageParameterAusZaehler = modMBUS_SMS.fw2_open_comport(Einbauplatz.m_iComport, 2400, Einbauplatz.m_strMapfile, True)
If LeseJustageParameterAusZaehler <> 0 Then
WriteToFW2Logfile Einbauplatz, "modMBUS_SMS.fw2_open_comport" & vbTab & "Fehler " & LeseJustageParameterAusZaehler & ":" & modMBUS_SMS.Errorstring(LeseJustageParameterAusZaehler)
GoTo Errorhandler
End If
'Geberkonstante1_IST_m As Double '---Geberkonstante im unteren Bereich ' Einheit [m]
LeseJustageParameterAusZaehler = modMBUS_SMS.ReadValue("f_fp_k_geber1", USParameter.Geberkonstante1_IST_m)
If LeseJustageParameterAusZaehler <> 0 Then
WriteToFW2Logfile Einbauplatz, "lese f_fp_k_geber1" & vbTab & "Fehler " & LeseJustageParameterAusZaehler & ":" & modMBUS_SMS.Errorstring(LeseJustageParameterAusZaehler)
PrintStatus "f_fp_k_geber1 konnte nicht gelesen werden."
GoTo Errorhandler
Else
WriteToFW2Logfile Einbauplatz, "lese f_fp_k_geber1 [m]=" & vbTab & USParameter.Geberkonstante1_IST_m
' Einheit [m]
PrintStatus "lese f_fp_k_geber1 = Geberkonstante1_IST_m = " & USParameter.Geberkonstante1_IST_m
End If
'Geberkonstante2_IST_m As Double '---Geberkonstante im oberen Bereich
LeseJustageParameterAusZaehler = modMBUS_SMS.ReadValue("f_fp_k_geber2", USParameter.Geberkonstante2_IST_m)
If LeseJustageParameterAusZaehler <> 0 Then
WriteToFW2Logfile Einbauplatz, "lese f_fp_k_geber2=" & vbTab & "Fehler " & LeseJustageParameterAusZaehler & ":" & modMBUS_SMS.Errorstring(LeseJustageParameterAusZaehler)
PrintStatus "f_fp_k_geber2 konnte nicht gelesen werden."
GoTo Errorhandler
Else
WriteToFW2Logfile Einbauplatz, "lese f_fp_k_geber2 [m]=" & vbTab & USParameter.Geberkonstante2_IST_m & vbCrLf
' Einheit [m]
PrintStatus "lese f_fp_k_geber2 = Geberkonstante2_IST_m = " & USParameter.Geberkonstante2_IST_m
End If
' Offset1_IST_m3ph As Double '---Offset im unteren Bereich [m³/h]
LeseJustageParameterAusZaehler = modMBUS_SMS.ReadValue("f_fp_qoffset1", dblTemp)
If LeseJustageParameterAusZaehler <> 0 Then
WriteToFW2Logfile Einbauplatz, "lese f_fp_qoffset1=" & vbTab & "Fehler " & LeseJustageParameterAusZaehler & ":" & modMBUS_SMS.Errorstring(LeseJustageParameterAusZaehler)
PrintStatus "f_fp_qoffset1 konnte nicht gelesen werden."
GoTo Errorhandler
Else
WriteToFW2Logfile Einbauplatz, "lese f_fp_qoffset1 [m³/s]=" & vbTab & dblTemp
' f_fp_qoffset1 ist in m³/s
PrintStatus "lese f_fp_qoffset1 = " & dblTemp & " m³/s"
USParameter.Offset1_IST_m3ph = dblTemp * 3600
PrintStatus " * 3600 s/h = Offset1_IST_m3ph = " & USParameter.Offset1_IST_m3ph & " m³/h"
WriteToFW2Logfile Einbauplatz, "Offset1_IST_m3ph [m³/h]=" & vbTab & USParameter.Offset1_IST_m3ph
End If
'Offset2_IST_m3ph As Double '---Offset im oberen Bereich [m³/h]
LeseJustageParameterAusZaehler = modMBUS_SMS.ReadValue("f_fp_qoffset2", dblTemp)
If LeseJustageParameterAusZaehler <> 0 Then
WriteToFW2Logfile Einbauplatz, "lese f_fp_qoffset2" & vbTab & "Fehler " & LeseJustageParameterAusZaehler & ":" & modMBUS_SMS.Errorstring(LeseJustageParameterAusZaehler)
PrintStatus "f_fp_qoffset2 konnte nicht gelesen werden."
Exit Function
Else
WriteToFW2Logfile Einbauplatz, "lese f_fp_qoffset2 [m³/s]=" & vbTab & dblTemp
PrintStatus "lese f_fp_qoffset2 = " & dblTemp & " m³/s"
USParameter.Offset2_IST_m3ph = dblTemp * 3600
PrintStatus " * 3600 s/h = Offset2_IST_m3ph = " & USParameter.Offset2_IST_m3ph & " m³/h"
WriteToFW2Logfile Einbauplatz, "* 3600 s/h =" & vbCrLf
WriteToFW2Logfile Einbauplatz, "Offset2_IST_m3ph [m³/h]=" & vbTab & USParameter.Offset2_IST_m3ph
End If
'OffsetGeber_ns As Double '---Offset Zeroflow [ns] wie im µC
LeseJustageParameterAusZaehler = modMBUS_SMS.ReadValue("f_fp_o_geber", dblTemp)
If LeseJustageParameterAusZaehler <> 0 Then
WriteToFW2Logfile Einbauplatz, "lese f_fp_o_geber=" & vbTab & "Fehler " & LeseJustageParameterAusZaehler & ":" & modMBUS_SMS.Errorstring(LeseJustageParameterAusZaehler)
PrintStatus "f_fp_o_geber konnte nicht gelesen werden."
GoTo Errorhandler
Else
WriteToFW2Logfile Einbauplatz, "lese f_fp_o_geber [s]=" & vbTab & dblTemp
PrintStatus "lese f_fp_o_geber = " & dblTemp & " s"
USParameter.OffsetGeber_ns = dblTemp * 10 ^ 9
PrintStatus " * 10^9 = OffsetGeber_ns = " & USParameter.OffsetGeber_ns & " ns"
WriteToFW2Logfile Einbauplatz, "* 10^9 =OffsetGeber_ns=" & vbTab & USParameter.OffsetGeber_ns
End If
' f_fp_o_geber_roh
LeseJustageParameterAusZaehler = modMBUS_SMS.ReadValue("f_fp_o_geber_roh", dblTemp)
If LeseJustageParameterAusZaehler <> 0 Then
WriteToFW2Logfile Einbauplatz, "lese f_fp_o_geber_roh=" & vbTab & "Fehler " & LeseJustageParameterAusZaehler & ":" & modMBUS_SMS.Errorstring(LeseJustageParameterAusZaehler)
PrintStatus "f_fp_o_geber_roh konnte nicht gelesen werden."
GoTo Errorhandler
Else
WriteToFW2Logfile Einbauplatz, "lese f_fp_o_geber_roh =" & vbTab & dblTemp
PrintStatus "lese f_fp_o_geber_roh = " & dblTemp & " s"
'USParameter.OGeber_Roh_Neu_ns = dblTemp * 10 ^ 9
' neu RH Leidel 20.8.2013: in OffsetGeber_ns reinschreiben
USParameter.OffsetGeber_ns = dblTemp * 10 ^ 9
PrintStatus " * 10^9 = f_fp_o_geber_roh = " & USParameter.OffsetGeber_ns & " ns"
WriteToFW2Logfile Einbauplatz, "* 10^9 = OffsetGeber_ns =" & vbTab & USParameter.OffsetGeber_ns
End If
' 'Bereich_ns As Double '---Trennpunkt für Bereich oben/unten [ns]
' LeseJustageParameterAusZaehler = modMBUS_SMS.ReadValue("f_fp_bereich", USParameter.Bereich_ns)
' If LeseJustageParameterAusZaehler <> 0 Then
' PrintStatus "f_fp_bereich konnte nicht gelesen werden."
' GoTo Errorhandler
' Else
' PrintStatus "lese f_fp_bereich = " & USParameter.Bereich_ns
' End If
'SteilheitGeber_nsp°C As Double '---Steilheit Zeroflow [ns/°C]
LeseJustageParameterAusZaehler = modMBUS_SMS.ReadValue("f_fp_st_geber", dblTemp)
If LeseJustageParameterAusZaehler <> 0 Then
WriteToFW2Logfile Einbauplatz, "lese f_fp_st_geber=" & vbTab & "Fehler " & LeseJustageParameterAusZaehler & ":" & modMBUS_SMS.Errorstring(LeseJustageParameterAusZaehler)
PrintStatus "f_fp_st_geber konnte nicht gelesen werden: " & modMBUS_SMS.Errorstring(LeseJustageParameterAusZaehler)
GoTo Errorhandler
Else
WriteToFW2Logfile Einbauplatz, "lese f_fp_st_geber=" & vbTab & dblTemp
PrintStatus "lese f_fp_st_geber = " & dblTemp
USParameter.SteilheitGeber_nsp°C = dblTemp * 10 ^ 9
PrintStatus " * 10^9 = SteilheitGeber_nsp°C = " & USParameter.SteilheitGeber_nsp°C
WriteToFW2Logfile Einbauplatz, "*10^9=SteilheitGeber_nsp°C=" & vbTab & USParameter.SteilheitGeber_nsp°C
End If
modMBUS_SMS.IECCOM_CloseCom
Exit Function
Errorhandler:
If LeseJustageParameterAusZaehler <> 0 Then
PrintStatus "Fehler in LeseJustageParameterAusZaehler(): " & modMBUS_SMS.Errorstring(LeseJustageParameterAusZaehler)
WriteToFW2Logfile Einbauplatz, "Fehler " & LeseJustageParameterAusZaehler & ": " & modMBUS_SMS.Errorstring(LeseJustageParameterAusZaehler)
End If
If Err.Number <> 0 Then
PrintStatus "Fehler " & Err.Number & " in LeseJustageParameterAusZaehler(): " & Err.Description
WriteToFW2Logfile Einbauplatz, "Fehler " & Err.Number & ": " & Err.Description
LeseJustageParameterAusZaehler = -1
Exit Function
End If
modMBUS_SMS.IECCOM_CloseCom
End Function
'Private Function Get_FW2_USVolumen(Einbauplatz As CEinbauplatz, ByRef USVolumen As Double, ByRef lngUSPruefZeit_ms As Long) As Integer
'' todo: lngUSPruefzeit als Double wegen vielfaches von 62.5
'On Error GoTo Errorhandler
'
' Get_FW2_USVolumen = modMBUS_SMS.fw2_open_comport(Einbauplatz.m_iComport, 2400, Einbauplatz.m_strMapfile, True)
' If Get_FW2_USVolumen <> 0 Then GoTo Errorhandler
'
' Get_FW2_USVolumen = modMBUS_SMS.ReadValue("f_nowa_volume", USVolumen)
' If Get_FW2_USVolumen <> 0 Then GoTo Errorhandler
' PrintStatus "f_nowa_volume = " & USVolumen
'
'
' Get_FW2_USVolumen = modMBUS_SMS.ReadValue("u16_nowa_timer", lngUSPruefZeit_ms)
' PrintStatus "u16_nowa_timer = " & lngUSPruefZeit_ms
'
' If Get_FW2_USVolumen <> 0 Then GoTo Errorhandler
' lngUSPruefZeit_ms = lngUSPruefZeit_ms * 62.5
' PrintStatus "u16_nowa_timer * 62,5ms = " & lngUSPruefZeit_ms
'
' Exit Function
'Errorhandler:
' modMBUS_SMS.IECCOM_CloseCom
'End Function
Private Function GetDeltaTemp() As Double
Dim strTemp As String
Const DELTATEMP_DEFAULT = "0,40"
strTemp = g_App.Settings.GetOrSetIniWert("USFirmware2", "DeltaTemperatur", DELTATEMP_DEFAULT)
strTemp = Replace(strTemp, ".", ",")
If IsNumeric(strTemp) Then
GetDeltaTemp = CDbl(strTemp)
Else
GetDeltaTemp = CDbl(DELTATEMP_DEFAULT)
End If
End Function
Private Sub chkProtokolldruck_Click()
If chkProtokolldruck.value = vbChecked Then
g_blnPruefprotokoll = True
g_App.Settings.saveStringValue "Vorbelegung", "Protokolldruck", "1"
Else
g_blnPruefprotokoll = False
g_App.Settings.saveStringValue "Vorbelegung", "Protokolldruck", "0"
End If
End Sub
Private Sub MSFlexGrid1_AnzeigeSerienNrFabNr(Pruefzaehler As CPruefzaehler)
''MSFlexGrid1.text = "S:" & FormatSerienNr(Pruefzaehler.getSerienNr) & " F:" & Pruefzaehler.getAuftragPositionSerienNr.getFabNr
MSFlexGrid1.text = "F:" & Pruefzaehler.getAuftragPositionSerienNr.getFabNr & " " & "S:" & FormatSerienNr(Pruefzaehler.getSerienNr)
End Sub