KurvenSchreiber

ftComputing : Programme für die fischertechnik-Interfaces und -konstruktionskästen
  
ftComputing.de
Home
Back
Sitemap
Index
Links
Impressum
Mail
 

Erfassen von Meßwerten als Kurven

Erfassen von MesßwertenAufgabe

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.

  1. Im ersten Teil werden die Variablen lastX ...definiert, die später beim Zeichnen verwendet werden.
  2. Verwendet wird das FishFa50.OCX Control, das auf der Form platziert wurde. Name : ft.
  3. 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.
  4. 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.
  5. 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).
  6. 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).
  7. Mit actY = ft.GetAnalog(0) wird der aktuelle Meßwert bestimmt und mit If actY ... auf den Bereich 1 ... 1000 begrenzt.
  8. 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.
  9. Anschließend sind die aktuellen Werte schon veraltet und werden als lastX, lastY gespeichert.
  10. 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.
  11. 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

  1. Strichbreite picPlot.Drawidth = 1
  2. Senkrechte Striche
  3. 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