| | Erfassen von Meßwerten als Kurven
Aufgabe
Erfassen von 1000 Werten des Analogeinganges EX und deren Darstellung als
Kurve in Abhängigkeit von der Zeit. Verwendet wurde ein Photowiderstand.
Hinweis : Die Erfassung der Werte erfolgt in einer For ... Next-Schleife.
Gezeichnet wird in eine PictureBox. Das Zeichnen des Gitters geschieht in einem
separaten Unterprogramm. Interface und Interfaceanschluß werden über eine
ComboListe eingestellt.
Die Quellen
sind in Curve.ZIP zu finden. Zusätzlich ist noch vbFish20Setup.EXE
erforderlich.
Die HauptRoutine : cmdAction_Click
Private Sub cmdAction_Click()
Dim i&, lastY&, lastX&, actX&, actY&
ft.AnalogScan = True
If ft.OpenInterface(cboPortName.Text) = ftiFehler Then
MsgBox "InterfaceProblem"
Exit Sub
End If
' --- Festlegen Maßstab : linke obere Ecke 0,0
' --- Ende X/Y, rechte untere Ecke : 1000,1000
picPlot.Scale (0, 0)-(1000, 1000)
picPlot.Cls
Gitter
lastY = 0
lastX = 0
picPlot.DrawWidth = 2
picPlot.Line (lastX, lastY)-(lastX, lastY)
' --- Schleife zur Anzeige von 1000 Werten in 32
' --- MilliSekunden Abstand ---
For i = 0 To 1000 Step 1
actY = ft.GetAnalog(0)
If actY > 1000 Or actY < 1 Then actY = 1000
picPlot.Line (lastX, lastY)-(i, actY), QBColor(2)
lastX = i
lastY = actY
ft.Pause 32
Next i
ft.CloseInterface
cmdEnde.SetFocus
End Sub
Fast das gesamte Programm spielt sich in der Sub cmdAction_Click ab.
- Im ersten Teil werden die Variablen lastX ...definiert, die später
beim Zeichnen verwendet werden.
- Verwendet wird das FishFa50.OCX Control, das auf der Form platziert
wurde. Name : ft.
- OpenInterface stellt die Verbindung zum Interface her. Der PortName
wird dabei der ComboListe cboPortName entnommen. Schlägt die Verbindung
fehl, wird eine entsprechende Nachricht ausgegeben und die Sub abgebrochen.
Vor dem OpenInterface muß noch ft.AnalogScan = True gesetzt werden
um das (interne) AnalogScannen zu aktivieren.
- Gezeichnet wird in die PictureBox picPlot. Als Vorbereitung dazu
wird mit picPlot.Scale der Zeichenmaßstab gesetzt. Etwas ungewohnt :
Werte für die linke obere und rechte untere Ecke. Anschließend wird noch
die Zeichenfläche gelöscht : picPlot.Cls.
- Das Gitter wird dann in einer separaten Sub gezeichnet. Hier werden
noch die Startpunkte für die Kurve (lastX = 0, lastY = 0), die
Linienstärke festgelegt (picPlot.DrawWidth = 2) und der Startpunkt
gezeichnet (picPlot.Line).
- Dann wird die Schleife For i = 0 To 1000 Step 1 gestartet (Ende
Next i). Step 1 sagt, dass i in 1-Schritten hochgezählt wird (mit 16er
Schritten geht es viel schneller).
- Mit actY = ft.GetAnalog(0) wird der aktuelle Meßwert bestimmt und
mit If actY ... auf den Bereich 1 ... 1000 begrenzt.
- Das eigentliche Zeichnen erfolgt mit picPlot.Line (lastX,
lasty)-(i, actY), QBColor(2). D. h. der jeweils zuletzt gezeichnete Punkt
(lastX, lastY) wird mit dem aktuellen verbunden. Als X-Wert wird der
Schleifenzähler genommen, in der Y-Richtung wird der aktuelle Meßwert
aufgetragen.
- Anschließend sind die aktuellen Werte schon veraltet und werden als lastX,
lastY gespeichert.
- Dann kommt noch eine Pause, damits nicht zu schnell geht. Hier eine
Pause für Ungeduldige 32 MilliSekunden. Eine Sekunde (1000) oder eine
Minute (60000) gehen aber auch.
- Nach Schleifen-Ende folgt nur noch ein CloseInterface und ein
Setzen des Fokus auf den Ende-Button um den Abschluß des Plottens
anzuzeigen.
Das war auch schon die Hauptarbeit. Jetzt noch die Routine zum Zeichnen des
Gitters :
Das Zeichnen des Gitters : Gitter
Private Sub Gitter()
' --- Zeichnen Gitter ----------------------
Dim i&
picPlot.DrawWidth = 1 ' --- Strichbreite
For i = 200 To 800 Step 200 ' --- Senkrecht
picPlot.Line (i, 0)-(i, 1000), QBColor(2)
Next i
For i = 200 To 800 Step 200 ' --- Waagerecht
picPlot.Line (0, i)-(1000, i), QBColor(2)
Next i
End Sub
- Strichbreite picPlot.Drawidth = 1
- Senkrechte Striche
- Waagerechte Striche jeweils in einer For ... Next-Schleife
Fertig
Mögliche Erweiterungen
Eher dringend :
Eine Verriegelung der Buttons während das Programm läuft, sonst kann es
sich durch wiederholtes Drücken "aufhängen".
Eher spannend :
Kontinuierliche Anzeige der Werte in einer Endlos-Schleife. Dazu müssen die
anzuzeigenden Werte in einer Tabelle zwischengespeichert werden. Der jeweils
aktuell gemessene Wert überschreibt dabei einen alten. Ein entsprechendes
Beispielprogramm ist im Download-Päckchen enthalten.
Und natürlich : Umrechnen in Maßeinheiten, die den Meßungen entsprechen.
Hier werden nur die Original-Meßwerte 1:1 durch gereicht.
Und wem das noch nicht reicht : einen Motor unter den Photowiderstand setzen
und die Umgebung abtasten.
Eher was für Spezialisten :
Umwandlung in ein OCX-Control. Eher etwas für Spezialisten.
Siehe auch :
Das fischertechnik Modell Kennlinienschreiber
|