• Keine Ergebnisse gefunden

Programm für die Regelung und Messung von FIS- FIS-Reiz (Interferogramm) und Reaktion (ERG)

116 13 Anhang Pr ogr am me in Visual Basic

13 Anhang Pr ogr am me in Visual Basic 117

Dim Range%

Dim M emHandle&, ChanTags%( )

' define a variable to contain the handle for

' memor y allocated by Windows thr ough cbWinBufAlloc%( ) Dim D As String

Dim Zeichen As String Dim ext As String Dim Speiname As String Dim Gepr Namen As String

Dim Nameneingegeben As Boolean Const Zeichenmin = 3

Const Zeichenmax = 15 Dim Or dner As Str ing

Dim fso As New FileSystem Object Dim tstr eam As TextStr eam Dim filnam As String Dim K As Integer

Dim gespeicher t As Boolean Dim Endknopfgedr ückt As Boolean Dim Erfassen As Boolean

Dim Ger egeltErfassen As Boolean Dim Laser par amgeholt As Boolean Dim TextM eldung As Str ing ' Aus M odul FFT

Const Pi = 3.1415926535897 Dim Inver se As Boolean Dim Daten( ) As Double Dim Amplituden( ) As Double Dim Samples As Long

Dim RealDaten( ) As Double, ImagDaten( ) As Double Dim RealFT( ) As Double, ImagFT( ) As Double Dim M in As Double, M ax As Double

Dim MWERT As Double Dim aufab As Boolean

Dim laser marke_dur chlaufen As Boolean Dim Aufhör en As Boolean

Diese Routine wird als erstes beim Start des Programmes ausgeführt. Sie initiert die Variablenanfangswerte und die PCMCIA-Karte

Pr ivate Sub Form_Load( ) ger egeltStar t.Enabled = False lasermar ke_dur chlaufen = False Ger egeltErfassen = False Nameneingegeben = False Laser par amgeholt = False

Anfangswerte für Regelung im Tierpark 'RPPP = Val( EingRPPP.Text)

'RIncAnfang = - 0.002480064 'RIncVolt = RIncAnfang 'Faktor Reg.Value = 18858

Piezo macht bei Steiner-OM IF=Tierpark maximal 85 Laserperioden bei 0-5Volt

Anfangswerte für Regelung im Labor: September 2006 RG

RPPP = Val( EingRPPP.Text) Regelungspunkte pro Periode RIncAnfang = - 0.001477 Increment der Spannung am Anfang RIncVolt = RIncAnfang

Faktor Reg.Value = 16501 Faktor bei der Regelungberechnung

des nächsten Schrittes

M PPP = Val( MPunkte.Text) Messpunkte pro Periode

118 13 Anhang Pr ogr am me in Visual Basic

HzLas = Val( HzLaser .Text) Frequenz des Lasers bei der

Messung, hieraus berechnet sich das dt für den Timer

Inver se = False normale FFT, bei True Inverse FFT

gespeicher t = False Eins = 1

Vorlauf = Val( VorlaufEingabe.Text)

If Speicher e.Value = Tr ue Then

NamenBilden Namen zur Speicherung: Datum und

Zeit wird angehängt End If

Alles an Timern ausgeschaltet Endknopfgedr ückt = False Zeittrigger Einzel.Enabled = False

Zeittrigger Einzel.Interval = Val( Abtastr ate.Text) Zeittrigger Eauf_ab.Enabled = False

Zeittrigger Eauf_ab.Interval = Val( Abtastr ate.Text) laser Timer .Enabled = False

RegelungTimer .Enabled = False M essungTimer.Enabled = False Dr iftTimer .Enabled = False ger egeltTim er .Enabled = False Dr uck.Enabled = False

PCMCIA Initialisierungen

' declar e r evision level of Univer sal Libr ar y

UlStat% = cbDeclar eRevision( CURRENTREVNUM ) ' Initiate er r or handling

' activating er r or handling will tr ap er r or s like

' bad channel number s and non- configur ed conditions ' Par ameter s:

' PRINTALL:all war nings and er r or s encounter ed will be pr inted ' DONTSTOP:if an er r or is encounter ed, the pr ogr am will not stop, ' er r or s must be handled locally

UlStat% = cbEr r Handling( PRINTALL, DONTSTOP) If UlStat% <> 0 Then Stop

' If cbEr r Handling% is set for STOPALL or STOPFATAL dur ing the pr ogr am ' design stage, Visual Basic will be unloaded when an er r or is encounter ed ' We suggest tr apping er r or s locally until the pr ogr am is r eady for compiling ' to avoid losing unsaved data during pr ogr am design. This can be done by ' setting cbEr r Handling options as above and checking the value of ULStat%

' after a call to the libr ar y. If it is not equal to 0, an er ror has occur r ed ADCStop.Visible = False

Chan% = 0 DAC Ausgabekanal

RAVolt! = Val( Rampeanfang.Text) %) RAVolt umwandeln

UlStat% = cbFr omEngUnits( Boar dNum%, Range%, RAVolt!, DAWert%) If UlStat% <> 0 Then Stop

UlStat% = cbAOut( Boar dNum%, 0, Gain, DAWer t End Sub

Ungeregeltes Erfassen

Die ADC- Star t und Stop Taste er lauben die Erfassung der ver schiedenen Kanäle Dam it ist eine optimale Justage der Signale möglich, indem am OM - Ver stär ker

13 Anhang Pr ogr am me in Visual Basic 119

im Fenster erfolgt.

Pr ivate Sub ADCStar t_Click( ) M esszähler = 0

If auf_ab.Value = Tr ue Then aufab = Tr ue

Else

aufab = False End If

Auf_Ab_M essen Hier wird erfasst und dargestellt

End Sub

Pr ivate Sub ADCStop_Click( ) ADCStart.Visible = Tr ue ADCStop.Visible = False

Zeittrigger Einzel.Enabled = False Zeittrigger Eauf_ab.Enabled = False End Sub

Pr ivate Sub Auf_Ab_M essen( ) ReDim Daten( 2, Anzahl) ReDim Amplituden( 2, Anzahl) ReDim RealDaten( Anzahl) ReDim Im agDaten( Anzahl) ReDim RealFT( Anzahl) ReDim Im agFT( Anzahl)

M axWer te = ( Anzahl + 2 * Vor lauf) - 1

If Einzelerfassung( 0) .Value = Tr ue And AnzahlWer te = M axWer te Then GoTo Ende

AnzahlWerte = 0 Eins = 1

If Speicher e.Value = Tr ue And Nameneingegeben = False Then NamenBilden

Nameneingegeben = Tr ue End If

If Vorlauf = 0 Then Erfassen = Tr ue Else Erfassen = False RAVolt! = Val( Rampeanfang.Text)

REVolt! = Val( Rampenende.Text)

Umrechnung von Volt in DAC Werte für +/-10V -10 = 4094, 0 = 2048, +10 = 0

If aufab = Tr ue Then

If M esszähler M od 2 = 0 Then auf.Value = Tr ue

Else

ab.Value = Tr ue End If

End If

If ( auf.Value = Tr ue) Then

RIncVolt! = ( REVolt! - RAVolt!) / ( ( Anzahl - 1) + Vorlauf) End If

If ab.Value = Tr ue Then RZwi! = REVolt!

REVolt! = RAVolt!

RAVolt! = RZwi!

RIncVolt! = ( REVolt! - RAVolt!) / ( ( Anzahl - 1) + 2 * Vor lauf) End If

120 13 Anhang Pr ogr am me in Visual Basic

UlStat% = cbFr om EngUnits( Boar dNum%, Range%, RAVolt!, DAWer t%) If UlStat% <> 0 Then Stop

ADCStart.Visible = False ADCStop.Visible = Tr ue Punktinit

'If ( AnzahlWerte = 0 And ab.Value = Tr ue) = Tr ue Then SchnellAuf

If ( ab.Value Or auf.Value) = Tr ue Then

l = 0 Nur einmal eine Ausgabe

Zeittr igger Einzel.Enabled = Tr ue

End If Damit beginnt die Datenerfassung

auf oder ab

Ende: Ausgabe.Text = Ausgabe.Text + "Ende Auf_Ab_Justage "

End Sub

Pr ivate Sub Zeittrigger Einzel_Timer( )

If l = 0 Then Ausgabe.Text = Ausgabe.Text + "Zeittrigger Einzel_Timer "

l = 1

ADCConvert Erfassung zum Triggerzeitpunkt, mit

0 beginnend RAVolt! = RAVolt! + RIncVolt!

UlStat% = cbFr om EngUnits( Boar dNum%, Range%, RAVolt!, DAWert%) If UlStat% <> 0 Then Stop

‘ohne Gr afik

If ohneGr afik = Tr ue Then GoTo DAnz:

‚m it Gr afik

If Erfassen = False Then GoTo DAnz:

PunktZeichnung ( AnzahlWer te - Vorlauf) DAnz: AnzahlWer te = AnzahlWer te + 1

Erfassen = ( AnzahlWer te >= Vor lauf) And (AnzahlWer te <= M axWer te - Vorlauf) If AnzahlWer te = M axWer te Then

Zeittrigger Einzel.Enabled = False 'Stop der M essung

Auf oder ab, einzel oder dauernd

If aufab = False And auf.Value = Tr ue Then SchnellAb If aufab = False And ab.Value = Tr ue Then SchnellAuf

Schneller Rück- oder Vorlauf

M esszähler = M esszähler + 1 ADCStart.Visible = Tr ue ADCStop.Visible = False Auf_Ab_M essen

End If Maxwerte erreicht

End Sub

Auf_Ab_Messen wird vom ZeittriggerEinzel_Timer über ADC-Start aufgerufen Aufruf LaserTimer_Timer

Pr ivate Sub ADCConvert( )

Ausgabe.Text = Ausgabe.Text + "ADCConver t"

Hier erfolgt die Erfassung eines Wertes UlStat% = cbAIn( Boar dNum%, 0, Gain, Kan0%) UlStat% = cbAIn( Boar dNum%, 1, Gain, Kan1%) UlStat% = cbAIn( Boar dNum%, 2, Gain, Kan2%)

Während des Vorlaufs wird nur die Rampe ausgegeben und nicht erfasst If Erfassen = False Then GoTo DA:

Daten( 0, AnzahlWerte - Vorlauf) = Kan0%

13 Anhang Pr ogr am me in Visual Basic 121

Daten( 2, AnzahlWerte - Vorlauf) = Kan2%

'Debug.Print Kan0%, Kan1%, Kan2%

DAC-Ausgabe

DA: UlStat% = cbAOut( Boar dNum%, 0, Gain, DAWer t%) End Sub

Aufruf von ZeittriggerEinzel_Timer und LaserTimer_Timer, Auf_Ab_geregelt2 Pr ivate Sub Punktinit()

Sizex = Pictur e1.ScaleWidth sizey = Pictur e1.ScaleHeight deltax = Sizex / ( Anzahl - 1) deltay = sizey / 4095 End Sub

Pr ivate Sub PunktZeichnung(v As Integer ) If auf.Value = Tr ue Then

If v >= 1 Then v = v - 1

'Ausgabe.Text = Str (v) + " " + Str ( deltay)

Pictur e1.Line ( deltax * v, deltay * ( 4096 - Daten( 0, v) )) - ( deltax * (v + 1) , deltay * ( 4096 - Daten( 0, v + 1) ) )

Pictur e1.For eColor = RGB( 256, 0, 0)

Pictur e1.Line ( deltax * v, deltay * ( 4096 - Daten( 1, v) )) - ( deltax * (v + 1) , deltay * ( 4096 - Daten( 1, v + 1) ) )

Pictur e1.For eColor = RGB( 0, 0, 0)

Pictur e1.Line ( deltax * v, deltay * ( 4096 - Daten( 2, v) )) - ( deltax * (v + 1) , deltay * ( 4096 - Daten( 2, v + 1) ) )

Pictur e1.For eColor = RGB( 0, 0, 256) End If

End If

If ab.Value = Tr ue Then

Abwärtslaufende Werte laufen von rechts in das Diagramm ein If v >= 1 Then

v = v - 1

'Ausgabe.Text = Str (v) + " " + Str ( deltay)

Pictur e1.Line ( deltax * (Anzahl - v), deltay * ( 4096 - Daten( 0, v)) ) - ( deltax * ( Anzahl - (v + 1) ) , deltay * ( 4096 - Daten( 0, v + 1) ))

Pictur e1.For eColor = RGB( 256, 0, 0)

Pictur e1.Line ( deltax * (Anzahl - v), deltay * ( 4096 - Daten( 1, v)) ) - ( deltax * ( Anzahl - (v + 1) ) , deltay * ( 4096 - Daten( 1, v + 1) ))

Pictur e1.For eColor = RGB( 0, 0, 0)

Pictur e1.Line ( deltax * (Anzahl - v), deltay * ( 4096 - Daten( 2, v)) ) - ( deltax * ( Anzahl - (v + 1) ) , deltay * ( 4096 - Daten( 2, v + 1) ))

Pictur e1.For eColor = RGB( 0, 0, 256) End If

End If End Sub

Ende aller bei ADC-Start verwendeten Sub-Routinen

122 13 Anhang Pr ogr am me in Visual Basic

Regelung

Zuerst müssen die Parameter initiert werden. Die Laserparameter Amplitude und Offset werden ermittelt. Daraus wird der Referenzsinus berechnet. Anschließend wird geregelt gefahren und das Ergebnis angezeigt

Pr ivate Sub Regelunginit_Click( ) ReDim Amplituden( 2, Anzahl) ReDim Daten( 2, Anzahl) ReDim RealDaten( Anzahl) ReDim Im agDaten( Anzahl) ReDim RealFT( Anzahl) ReDim Im agFT( Anzahl)

RPPP = Val( EingRPPP.Text) HzLas = Val( HzLaser .Text) M PPP = Val(M Punkte.Text) dt = 1000# / ( HzLas * RPPP)

Ausgabe.Text = Ausgabe.Text + "dt= " + Str ( dt) laser Timer.Interval = dt

RegelungTimer .Interval = dt M essungTimer.Interval = dt ger egeltTimer .Interval = dt

Ausgabe.Text = Ausgabe.Text + " Laser par ameter holen für Ger egeltDatenerfassung "

AnzahlWerte = 0

If Vorlauf = 0 Then Erfassen = Tr ue Else Erfassen = False M axWer te = ( Anzahl + 2 * Vor lauf) - 1

RAVolt! = Val( Rampeanfang.Text) REVolt! = Val( Rampenende.Text)

'Umr echnung von Volt in DAC Wer te für +/- 10V '- 10=4094, 0=2048, +10=0

RIncVolt! = RIncAnfang

UlStat% = cbFr omEngUnits( Boar dNum%, Range%, RAVolt!, DAWert%) If UlStat% <> 0 Then Stop

Punktinit

laser Timer.Enabled = Tr ue Die Laserparameter Amplitude und Offset werden ermittelt. Damit wird der Referenzsinus aufgerufen End Sub

Pr ivate Sub Laser Timer _Timer ( )

ADCConvert Erfassung zum Triggerzeitpunkt, mit

0 beginnen und Daten(x,N) speichern

RAVolt! = RAVolt! + RIncVolt!

UlStat% = cbFr om EngUnits( Boar dNum%, Range%, RAVolt!, DAWert%) If UlStat% <> 0 Then

Ausgabe.Text = "STOP"

Stop End If 'ohne Gr afik

If ohneGr afik = Tr ue Then GoTo DAnz:

'm it Gr afik

If Erfassen = False Then GoTo DAnz:

PunktZeichnung ( AnzahlWer te - Vorlauf) DAnz: AnzahlWer te = AnzahlWer te + 1

13 Anhang Pr ogr am me in Visual Basic 123

Erfassen = ( AnzahlWer te >= Vor lauf) And (AnzahlWer te <= M axWer te + 1 – Vor lauf)

If AnzahlWer te = M axWerte + 1 Then

laser Timer .Enabled = False 'Stop der M essung 'Ausgabe.Text = Ausgabe.Text + "Laser _Timer aus ! "

If auf.Value = Tr ue Then SchnellAb

If ohneGr afik = Tr ue Then DatenZeichnung

If FFT.Value = Tr ue Then FFT_Ausführ en ( 2) 'Laser Ermitteln von Laseramplitude, Min, Max und Offset

LMin = Daten( 2, 0) LM ax = Daten( 2, 0)

'Debug.Pr int "Laser par am erm itteln"

For i = 0 To Anzahl - 1

If Daten( 2, i) > LM ax Then LM ax = Daten( 2, i) If Daten( 2, i) < LMin Then LMin = Daten( 2, i) Next i

LAmplitude = ( LM ax - LM in) / 2 LOffset = ( LM ax + LMin) / 2

Ausgabe.Text = Ausgabe.Text + "LM ax " + Str (LM ax) + " LMin " + Str( LM in) + "LAm litude " + Str ( LAmplitude) + " LOffset " + Str ( LOffset)

Referenzsinus für Regelung berechnen Refer enzsinus

Laser par amgeholt = Tr ue ger egeltStart.Enabled = Tr ue End If

End Sub

Pr ivate Sub Refer enzsinus( ) Dim m As Integer

Dim Vor lauflänge As Integer m = RPPP / MPPP

M axWerteReg = ( M axWer te + 1) * m Vor lauflänge = Vorlauf * m

ReDim RefS( 2, M axWer teReg) For i = 0 To M axWerteReg - 1

RefS( 0, i) = LAmplitude * Sin( 2 * Pi * i / RPPP) + LOffset

If (i M od m = 0) And (i > Vor lauflänge - 1) And (i < MaxWer teReg - Vor lauflänge) Then

RefS( 1, i) = 1 Else

RefS( 1, i) = 0 End If

'Debug.Pr int i, RefS( 0, i) , RefS( 1, i) Next i

Ausgabe.Text = Ausgabe.Text + " RefSinus Regelungsmessung ber echnet, nun zur M essung"

Auf_Ab_ger egelt2 End If

End Sub

Pr ivate Sub Auf_Ab_ger egelt2( )

Maxwerte im Referenzsinus definiert Dir ection = 1

Eins = 1 'bestim m t auf oder - 1 ab RAVolt! = Val( Rampeanfang.Text) REVolt! = Val( Rampenende.Text)

UlStat% = cbFr omEngUnits( Boar dNum%, Range%, RAVolt!, DAWert%) If UlStat% <> 0 Then Stop

124 13 Anhang Pr ogr am me in Visual Basic

NullstelleSinusanfahr enGer egelt N wird bis 2000 gezählt Pictur e1.Refr esh

Spektr en.Refr esh Punktinit

AnzahlWerte = 0 N = 0

If aufab = Tr ue Then

If M esszähler M od 2 = 0 Then auf.Value = Tr ue

Else

ab.Value = Tr ue End If

End If

RIncVolt = RIncAnfang If ab.Value = Tr ue Then RIncVolt = - RIncVolt RZwi! = REVolt!

REVolt! = RAVolt!

RAVolt! = RZwi!

End If

ger egeltTimer .Enabled = Tr ue Damit beginnt die Datenerfassung

Ausgabe.Text = Ausgabe.Text + " ger egeltTimer beginnt"

End Sub

Pr ivate Sub NullstelleSinusanfahr enGer egelt( ) Dim AlterWer t As Integer , NeuerWer t As Integer

Ausgabe.Text = Ausgabe.Text + " Nullstellenanfahr en Beginn"

Erfassen = False N = 0

Richtung = 1 Do

N = N + 1

AlterWert = Kan2%

ADCConver t Erfassung und Vergleich mit RefS

NeuerWert = Kan2%

If NeuerWer t - AlterWert > 0 Then Richtung = 1 Else Richtung = - 1

Rinc berücksichtigt bei Berechnung die Anzahl der Regelungspunkte und Messpunkte

RAVolt! = RAVolt! + RIncVolt! / 40

UlStat% = cbFr om EngUnits( Boar dNum%, Range%, RAVolt!, DAWert%) If UlStat% <> 0 Then Stop

Loop Until ( Kan2% > RefS( 0, 0) - 20 And Kan2% < RefS( 0, 0) + 20 And Richtung = 1) Or N = 2000

'Debug.Print Kan2%, RefS( 0, 0), N, Richtung 'wenn N=3000 then nochmals Ausgabe.Text = Ausgabe.Text + "- ENDE"

End Sub

Pr ivate Sub ger egeltTimer _Timer( ) Dim Lastlaser As Single

Dim aktlaser As Single Dim steig As Integer

Lastlaser = Kan2%

13 Anhang Pr ogr am me in Visual Basic 125

ADCM essungConvert Erfassung zum Triggerzeitpunkt,

mit 0 beginnend und speichern bei RefS(1,i)=1 in Daten(N)

aktlaser = Kan2%

If aktlaser > Lastlaser Then steig = Dir ection

Else

steig = - Dir ection End If

Diffalt = Diff

Diff = ( aktlaser - RefS( 0, AnzahlWer te) ) * steig * Faktor RAVolt! = RAVolt! + RIncVolt! + Diff

UlStat% = cbFr omEngUnits( Boar dNum%, Range%, RAVolt!, DAWert%) If UlStat% <> 0 Then Stop

'ohne Gr afik

If ohneGr afik = Tr ue Then GoTo DAnz:

'm it Gr afik

If RefS( 1, AnzahlWer te) = 0 Or Eins = - 1 Then GoTo DAnz:

'PunktM essZeichnung ( N - 1) PunktZeichnung ( N - 1)

DAnz: AnzahlWer te = AnzahlWer te + Eins If AnzahlWer te = M axWerteReg Then

ger egeltTim er .Enabled = False 'Stop der M essung Ausgabe.Text = Ausgabe.Text + " ger egeltTimer Stop"

M esszähler = M esszähler + 1 Ger egeltErfassen = False 'auf oder ab, einzel oder dauer nd

If aufab = False And auf.Value = Tr ue Then SchnellAb If aufab = False And ab.Value = Tr ue Then SchnellAuf ' schneller Rück- oder Vorlauf

If ohneGr afik = Tr ue Then DatenZeichnung

If FFT.Value = Tr ue Then FFT_Ausführ en ( 2) 'Laser If Speicher e.Value = Tr ue Then

NeueZeitBilden Allesspeicher n End If

If EmpfJa.Value = Tr ue Then FFT_Ausführ en ( 0)

FFT_Ausführ en ( 1) Empfindlichkeit End If

If Aufhör en = Tr ue Then GoTo Ende Auf_Ab_ger egelt

End If Ende:

End Sub

Pr ivate Sub ADCM essungConver t( ) 'Hier erfolgt die Erfassung eines Wer tes

UlStat% = cbAIn(Boar dNum%, 0, Gain, Kan0%) UlStat% = cbAIn(Boar dNum%, 1, Gain, Kan1%) UlStat% = cbAIn(Boar dNum%, 2, Gain, Kan2%)

'Währ end des Vor laufs wir d nur die Rampe ausgegeben und nicht erfasst If RefS( 1, AnzahlWerte) = 0 Then GoTo DA:

Daten( 0, N) = Kan0%

Daten( 1, N) = Kan1%

Daten( 2, N) = Kan2%

126 13 Anhang Pr ogr am me in Visual Basic

'Debug.Pr int Tab, N

'DAC- Ausgabe

DA: UlStat% = cbAOut( Boar dNum%, 0, Gain, DAWer t%)

End Sub

Ende der Initierung der Regelparamter

Die Parameter wurden initiert, die Laserparameter Amplitude und Offset ermittelt, daraus der Referenzsinus berechnet. Anschließend wurde geregelt gefahren und das Ergebnis angezeigt

Geregelt MESSEN

Pr ivate Sub ger egeltStart_Click( ) ReDim Daten( 2, Anzahl) ReDim Amplituden( 2, Anzahl) ReDim RealDaten( Anzahl) ReDim Im agDaten( Anzahl) ReDim RealFT( Anzahl) ReDim Im agFT( Anzahl)

RPPP = EingRPPP.Text HzLas = HzLaser .Text M PPP = M Punkte.Text RIncVolt = RIncAnfang M esszähler = 0

If auf_ab.Value = Tr ue Then aufab = Tr ue

Else

aufab = False End If

Auf_Ab_ger egelt End Sub

Pr ivate Sub Auf_Ab_ger egelt( ) Ger egeltErfassen = Tr ue

If Dauer erfassung.Value = False Then

If aufab = False And M esszähler <> 0 Then GoTo Ende If aufab = Tr ue And M esszähler > 1 Then GoTo Ende End If

If Speicher e.Value = Tr ue And Nameneingegeben = False Then NamenBilden

Nameneingegeben = Tr ue End If

AnzahlWer te = 0

If Vorlauf = 0 Then Erfassen = Tr ue Else Erfassen = False M axWer te = ( Anzahl + 2 * Vor lauf) - 1

RAVolt! = Val( Rampeanfang.Text) REVolt! = Val( Rampenende.Text) If aufab = Tr ue Then

If M esszähler M od 2 = 0 Then

13 Anhang Pr ogr am me in Visual Basic 127

Else

ab.Value = Tr ue End If

End If

RIncVolt = RIncAnfang If ab.Value = Tr ue Then RIncVolt = - RIncVolt RZwi! = REVolt!

REVolt! = RAVolt!

RAVolt! = RZwi!

End If

UlStat% = cbFr omEngUnits( Boar dNum%, Range%, RAVolt!, DAWert%) If UlStat% <> 0 Then Stop

Punktinit

Auf_Ab_ger egelt2 Bei Regelungsparameter initieren

Ende:

End Sub

ENDE

Allgemein

Pr ivate Sub RIncV_Change( )

RIncVolt! = RIncAnfang * ( RIncV.Value / 16000) Ausgabe.Text = Ausgabe.Text + RIncVolt!

End Sub

Pr ivate Sub Dr uck_Tim er ( )

Ausgabe.Text = Ausgabe.Text + ADDaten%( N) N = N + 1

If N = NumPoints& + 1 Then Dr uck.Enabled = False End Sub

Pr ivate Sub Löschknop_Spektr en_Click( ) Spektr en.Refr esh

End Sub

Pr ivate Sub AusgabeLöschen_Click( ) Ausgabe.Text = ""

End Sub

Pr ivate Sub Löschknopf_Click( ) Pictur e1.Refr esh

Ausgabe.Text = Ausgabe.Text + "Gr afik wur de gelöscht"

End Sub

Pr ivate Sub meldung( ) Dim M ldg, Stil, Titel, Antwor t

M ldg = "M öchten Sie die Daten speicher n ?" ' M eldung definier en.

Stil = vbYesNo + vbCritical + vbDefaultButton2 ' Schaltflächen definier en.

Titel = "Speicher n" ' Titel definier en.

Antwor t = M sgBox( Mldg, Stil, Titel) ' M eldung anzeigen.

If Antwor t = vbYes Then TextM eldung = "Ja" Else TextM eldung = "Nein"

End Sub

128 13 Anhang Pr ogr am me in Visual Basic

Endknopfgedr ückt = Tr ue

If gespeicher t = False Then meldung

If TextM eldung = "Ja" Then NamenBilden

Allesspeicher n Else

gespeicher t = False End

End If End Sub

Regelungskontroll-Zeichnung

Pr ivate Sub PunktRegZeichnung(v As Integer ) Dim m As Integer

Dim m 1 As Integer m = v M od RPPP m1 = (v + 1) M od RPPP If v >= 1 Then

v = v - 1

'Ausgabe.Text = v

'REFERENZSINUS ( blau)

Pictur e1.Line ( deltax * v, deltay * ( 4096 - RefS( 0, m)) ) - ( deltax * (v + 1), deltay * ( 4096 - RefS( 0, m1) ))

Pictur e1.For eColor = RGB( 256, 0, 0) 'Differ enz ( r ot)

Pictur e1.Line ( deltax * v, deltay * ( 3400 - 100000 * Diffalt) ) - ( deltax * (v + 1) , deltay * ( 3400 - 100000 * Diff) )

Pictur e1.For eColor = RGB( 0, 0, 0) 'Laser ( sw)

Pictur e1.Line ( deltax * v, deltay * ( 4096 - Daten( 2, v) )) - ( deltax * (v + 1) , deltay * ( 4096 - Daten( 2, v + 1) ) )

Pictur e1.For eColor = RGB( 0, 0, 256) End If

End Sub

Pr ivate Sub PunktM essZeichnung(v As Integer ) Dim m As Integer

m = RPPP / M PPP If v >= 1 Then v = v - 1

'Ausgabe.Text = v

'REFERENZSINUS ( blau)

Pictur e1.Line ( deltax * v, deltay * ( 4096 - RefS( 0, v * m) ) ) -( deltax * (v + 1) , deltay * ( 4096 - RefS( 0, (v + 1) * m) ))

Pictur e1.For eColor = RGB( 256, 0, 0) 'Differ enz ( r ot)

Pictur e1.Line ( deltax * v, deltay * ( 3700 - 200000 * Diffalt) ) - ( deltax * (v + 1) , deltay * ( 3700 - 200000 * Diff) )

Pictur e1.For eColor = RGB( 0, 0, 0) 'Laser ( sw)

Pictur e1.Line ( deltax * v, deltay * ( 4096 - Daten( 2, v) )) - ( deltax * (v + 1) , deltay * ( 4096 - Daten( 2, v + 1) ) )

Pictur e1.For eColor = RGB( 0, 0, 256) End If

End Sub

13 Anhang Pr ogr am me in Visual Basic 129

Daten komplett zeichnen Pr ivate Sub DatenZeichnung( ) Punktinit

' Null- Volt Linie

Pictur e1.Line ( deltax * 0, sizey / 2)- ( deltax * ( Anzahl) , sizey / 2) For i = 0 To ( Anzahl - 1)

Pictur e1.Line ( deltax * i, deltay * ( 4096 - Daten( 0, i) ) ) - ( deltax * (i + 1), deltay * ( 4096 - Daten( 0, i + 1) ))

Pictur e1.For eColor = RGB( 256, 0, 0)

Pictur e1.Line ( deltax * i, deltay * ( 4096 - Daten( 1, i) ) ) - ( deltax * (i + 1), deltay * ( 4096 - Daten( 1, i + 1) ))

Pictur e1.For eColor = RGB( 0, 0, 0)

Pictur e1.Line ( deltax * i, deltay * ( 4096 - Daten( 2, i) ) ) - ( deltax * (i + 1), deltay * ( 4096 - Daten( 2, i + 1) ))

Pictur e1.For eColor = RGB( 0, 0, 256) Next i

Ausgabe.Text = Ausgabe.Text + "Daten wur den gezeichnet"

End Sub

Pr ivate Sub Spektr enZeichnung( DS, R, G, B) Dim deltays As Integer

Dim deltaxs As Integer Dim Amplitude As Double Sizex = Spektr en.ScaleWidth sizey = Spektr en.ScaleHeight deltaxs = Sizex / ( Anzahl / 2 - 1) Amplitude = (M ax - Min)

deltays = sizey '/ Amplitude For i = 0 To ( Anzahl / 2 - 1)

Spektr en.For eColor = RGB( R, G, B)

' Spektr en.Line ( deltaxs * i, deltays * ( Amplitude - DS( i) ) )- ( deltaxs * (i + 1) , deltays * ( Am plitude - DS(i + 1)) )

Spektr en.Line ( deltaxs * i, deltays * ( 1 - DS(i) / Amplitude) ) - ( deltaxs * (i + 1) , deltays * ( 1 - DS( i + 1) / Amplitude) )

Next i

Ausgabe.Text = Ausgabe.Text + "Spektr um wur de gezeichnet" + vbCr Lf End Sub

Pr ivate Sub Empfindlichkeitzeichnen( DS) Sizex = Spektr en.ScaleWidth

sizey = Spektr en.ScaleHeight deltax = Sizex / 51

M in = 0 M ax = 0

For i = 51 To 101 '796 - 402 nm If DS(i) > M ax Then M ax = DS( i) Next i

Debug.Pr int M ax deltay = sizey / M ax

Spektr en.For eColor = RGB( 255, 255, 0) For i = 51 To 101 '796 - 402 nm

Spektr en.Line ( deltax * (i - 50) , deltay * (M ax - DS(i) ) ) - ( deltax * (i - 50 + 1) , deltay * ( M ax - DS( i + 1) ) )

Next i

Ausgabe.Text = Ausgabe.Text + "Empfindlichkeit gezeichnet" + vbCr Lf End Sub

130 13 Anhang Pr ogr am me in Visual Basic

If ohneGr afik = Tr ue Then DatenZeichnung

If FFT.Value = Tr ue Then FFT_Ausführ en ( 2) 'Laser If Speicher e.Value = Tr ue Then

NeueZeitBilden Allesspeicher n End If

End Sub

'ger egelt testen

Private Sub r egM essung_Click( ) Dir ection = 1

Ausgabe.Text = "ger egelt Testen"

ReDim Daten( 2, Anzahl)

Gesamtpunkte = Anzahl * RPPP / M PPP AnzahlWerte = 0

N = 0

If Vorlauf = 0 Then Erfassen = Tr ue Else Erfassen = False M axWer te = ( Anzahl + 2 * Vor lauf) - 1

RAVolt! = Val( Rampeanfang.Text) REVolt! = Val( Rampenende.Text)

UlStat% = cbFr omEngUnits( Boar dNum%, Range%, RAVolt!, DAWert%) If UlStat% <> 0 Then Stop

Faktor = Faktor Reg.Value * 0.0000000001 Punktinit

NullstelleSinusanfahr en

RAVolt = RAVolt + RIncVolt RegelungTimer.Interval = dt RegelungTimer.Enabled = Tr ue 'ger egeltTimer .Interval = dt 'ger egeltTimer .Enabled = Tr ue

'Dam it beginnt die Datenerfassung End Sub

Pr ivate Sub NullstelleSinusanfahr en( )

Dim AlterWer t As Integer , NeuerWer t As Integer Erfassen = False

N = 0 Richtung = 1 Do

N = N + 1

AlterWert = Kan2%

ADCConver t 'Erfasse und ver gleiche m it RefS NeuerWert = Kan2%

If NeuerWer t - AlterWert > 0 Then Richtung = 1 Else Richtung = - 1

'Rinc m uss bei Ber echnung ber ücksichtigen wieviele Regelpunkte und wie viele M esspunkte !!!

RAVolt! = RAVolt! + RIncVolt! / 20

UlStat% = cbFr om EngUnits( Boar dNum%, Range%, RAVolt!, DAWert%) If UlStat% <> 0 Then Stop

Loop Until ( Kan2% > RefS( 0, 0) - 10 And Kan2% < RefS( 0, 0) + 10 And Richtung = 1) Or N = 2000

'Debug.Print Kan2%, RefS( 0,0) , N, Richtung 'wenn N=3000 then nochmals End Sub

13 Anhang Pr ogr am me in Visual Basic 131

Pr ivate Sub RegelungTimer _Tim er ( )

Ausgabe.Text = Ausgabe.Text + "Regelung_Timer "

Dim r s As Integer

Dim Lastlaser As Single, aktlaser As Single Dim steig As Integer

r s = ( AnzahlWerte + 1) M od RPPP Lastlaser = Kan2%

ADCConver t aktlaser = Kan2%

If aktlaser > Lastlaser Then steig = Dir ection

Else

steig = - Dir ection End If

Diffalt = Diff

Diff = ( aktlaser - RefS( 0, r s) ) * ( steig) * Faktor RAVolt = RAVolt + RIncVolt + Diff

'ohne Gr afik

If ohneGr afik = Tr ue Then GoTo DAnz:

'm it Gr afik

If Erfassen = False Then GoTo DAnz:

'PunktZeichnung ( AnzahlWer te - Vorlauf) PunktRegZeichnung ( AnzahlWer te - Vorlauf) DAnz: AnzahlWer te = AnzahlWer te + 1

Erfassen = ( AnzahlWerte >= Vorlauf) And ( AnzahlWerte <= M axWer te + 1 – Vor lauf)

UlStat% = cbFr om EngUnits( Boar dNum%, Range%, RAVolt!, DAWert%) If UlStat% <> 0 Then Stop

If AnzahlWer te = M axWerte - 1 Then

RegelungTimer .Enabled = False 'Stop der M essung 'Debug.Pr int RIncVolt, Diff

If auf.Value = Tr ue Then SchnellAb

If ohneGr afik = Tr ue Then DatenZeichnung

If FFT.Value = Tr ue Then FFT_Ausführ en ( 2) 'Laser End If

End Sub

Pr ivate Sub DriftabNull_Click( ) DriftTimer .Interval = dt Punktinit

AnzahlWerte = Vorlauf NullstelleSinusanfahr en Erfassen = Tr ue

DriftTimer .Enabled = Tr ue End Sub

Pr ivate Sub Drift_Click() DriftTimer .Interval = dt DriftTimer .Enabled = Tr ue Punktinit

AnzahlWerte = Vorlauf Erfassen = Tr ue End Sub

132 13 Anhang Pr ogr am me in Visual Basic

Pr ivate Sub DriftTimer _Tim er ( ) ADCConvert

PunktZeichnung ( AnzahlWerte - Vor lauf) AnzahlWer te = AnzahlWer te + 1

If AnzahlWerte = Anzahl Then DriftTimer.Enabled = False End If

End Sub

Pr ivate Sub SchnellAb( ) Do

For j = 1 To 20000 Next j

RAVolt! = RAVolt! + 0.002

UlStat% = cbFr om EngUnits( Boar dNum%, Range%, RAVolt!, DAWer t%) If UlStat% <> 0 Then Stop

UlStat% = cbAOut( Boar dNum%, 0, Gain, DAWert%) Loop Until RAVolt! > Val( Rampeanfang.Text)

End Sub

Pr ivate Sub SchnellAuf( )

For i = 1 To Anzahl + 2 * Vorlauf For j = 1 To 20000

Next j

'Debug.Print REVolt!, i, Anzahl, Vor lauf, RIncVolt REVolt! = REVolt! - RIncVolt!

UlStat% = cbFr omEngUnits( Boar dNum%, Range%, REVolt!, DAWert%) If UlStat% <> 0 Then Stop

UlStat% = cbAOut( Boar dNum%, 0, Gain, DAWert%) Next i

End Sub

Click und Change-Routinen

Pr ivate Sub cmd_Stop_Dauer _Click( ) Aufhör en = Tr ue

Einzelerfassung( 0) .Value = Tr ue End Sub

Pr ivate Sub Faktor Reg_Change( )

Faktor = Faktor Reg.Value * 0.0000000001

Ausgabe.Text = Ausgabe.Text + "Faktor=" + Str ( Faktor ) End Sub

Pr ivate Sub Anzahl_Change( ) Anzahl = Val( Anzahl.Text)

Ausgabe.Text = Ausgabe.Text + Anzahl.Text Wegpr üfung

End Sub

Pr ivate Sub Abtastr ate_Change( )

Zeittrigger Einzel.Interval = Val( Abtastr ate.Text) Zeittrigger Eauf_ab.Interval = Val( Abtastr ate.Text) Ausgabe.Text = Ausgabe.Text + Abtastr ate.Text End Sub

Pr ivate Sub Rampeanfang_Change( )

Ausgabe.Text = Ausgabe.Text + Rampeanfang.Text