TeachIn-Rob

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

 

TeachIn für die Industry Robots : ganz einfach

Schöne, komplizierte und große Programme finden sich mehrere auf der Site, aber ein ganz einfaches mit Pfiff fehlte noch, hier die Visual Basic Version - Schritt für Schritt.
  1. Was man dazu braucht :
    + Visual Basic 6.
    + Einen fischertechnik Industry Robot : Rob3 Säulenrobot oder Rob4 Knickarmrobot
    + Ein fischertechnik Interface (Parallel (Unversal) oder Seriell (Intelligent))
    + Einen einfachen analogen JoyStick mit X- und Y-Achse und vier Knöpfen.
    oder einfach mit Maus und num. Tastatur.
    + Das neue FishFa50.OCX (enthält auch die Beispiele).
  2. Beginnen des VB6 Projektes
    + Anlegen eines Standard-Projektes mit einer einfachen Form
    + Markieren von FishFace Control 5.0 (FishFa50.OCX) in Projekt | Komponenten. Wenn es nicht zu finden ist auf Durchsuchen Klicken und in der Fileliste markieren (sollte bei der Installation von FishFa50.ZIP in \Windows\System bzw. \WinNT\System32 gelandet sein.
    + Die Controls FishFace und FishJoy / FishKey auf die Form ziehen und ft bzw. jy /ky taufen.
    + Und dann (Hinweise später) noch einige Buttons und Labels plazieren.
  3. Die globalen Daten
    Option Explicit
    Dim PortName$
    Dim Takte(1 To 100, 1 To 4) As Long, TaktAnz&
    Die Tabelle Takte enthält die während des TeachIn aufgezeichneten Robot-Positionen, TaktAnz die Anzahl der Positionen, die in Takte eingetragen wurden.
  4. Initialisieren
    Private Sub Form_Load()
    With ft.MotCntl
    .Name(1) = "Säule"
    .EndPosition(1) = 240
    .Name(2) = "ArmHorizontal"
    .EndPosition(2) = 140
    .Name(3) = "ArmVertikal"
    .EndPosition(3) = 112
    .Name(4) = "Greifer"
    .EndPosition(4) = 26
    End With
    TaktClear
    End Sub
    Das FishFace Objekt ft.MotCntl (Bestandteil des FishFace Controls) enthält eine kompakte Beschreibung des Robots. Aufgeführt wurden nur die von den Defaults abweichenden Werte Name der Robot-Komponente und die Anzahl der Impulse, die sich die Komponente vom Endtaster wegbewegen darf, hier die Werte für Rob3. Die Ende(Taster) sind 1, 3, 5, 7 und die Impuls(Taster) 2, 4, 6, 8, die Motoren 1 - 4. Sie (die Motoren) sollten so gepolt sein, dass sie beim Klicken auf "L" im InterfacePanel (ft.ShowPanel) in Richtung Endtaster laufen. TaktClear setzt die Tabelle Takte auf Anfangswerte.
  5. Starten des Interface
    Dazu Button comAction (Caption : START) anlegen und in cmdAction_Click dann :
    If ft.OpenInterface("COM1") = ftifehler Then
    MsgBox "Interface-Problem", vbCritical + vbOKOnly, App.ProductName
    Exit Sub
    End If
    Öffnen der Verbindung zum Interface ("COM1" ggf. entsprechend Interface und Anschluß ändern), wenn das Open nicht klappt wird die Sub mit einer Meldung verlassen.
    Ab hier wird nur noch die JoyStick-Variante beschrieben, die Maus/Keyboard-Variante funktioniert ganz ähnlich und ist in FishKeyTest.VBP zu finden.
  6. Verbindung zum JoyStick
    Set jy.FishFaceControl = ft
    Damit sind die beiden Controls FishFace und FishJoy miteinander verbunden und die JoyStick-Positionen führen zum Fahren der Robot-Komponenten (immer eine Komponente zur einer Zeit).
  7. Fahren zur Home-Position
    ft.MoveHome
    D.h. der Robot fährt mit allen seinen Komponenten bis zum Erreichen der jeweiligen Endtaster. Im Beispiel werden noch Buttons Enabled ... das ist sinnvoll, aber nicht unbedingt erforderlich.
  8. Aktivieren des JoySticks
    jy.StartJoy
    Damit wird intern ein Timer gestartet, der regelmäßig (ft.ControlInterval) die JoyStick-Positionen abfragt und ggf. Motoren des Robots startet oder stoppt. Nun läuft das Programm und man kann mal (vorsichtig) den JoyStick bewegen um mal zu sehen, was sich so tut (der Robot sollte dem JoyStick folgen).
  9. Speichern von Robot-Positionen
    Private Sub cmdAdd_Click()
    TaktAdd
    End Sub
    Mit dem neuen Button Speichern (cmdAdd_Click). Die Routine TaktAdd fügt die aktuelle Robot-Position in die Tabelle Takte ein und zwar in die Zeile TaktAnz (das wird gleichzeitig hochgezählt)
    Private Sub TaktAdd()
    If TaktAnz > UBound(Takte) Then Exit Sub
    TaktAnz = TaktAnz + 1
    Takte(TaktAnz, 1) = ft.MotCntl.Position(1)
    Takte(TaktAnz, 2) = ft.MotCntl.Position(2)
    Takte(TaktAnz, 3) = ft.MotCntl.Position(3)
    Takte(TaktAnz, 4) = ft.MotCntl.Position(4)
    lblTaktAkt = TaktAnz
    End Sub
    Die aktuelle TaktAnz wird im Label lblTakAkt angezeigt. Es ist nur möglich Takte (Positionen) "hinten" anzufügen oder alles zu löschen. Das ist einfach und reicht fürs erste.
  10. Löschen der Takte-Tabelle
    Private Sub TaktClear()
    TaktAnz = 1
    Takte(1, 1) = 0
    Takte(1, 2) = 0
    Takte(1, 3) = 0
    Takte(1, 4) = 0
    lblTaktAkt = TaktAnz
    End Sub
    Das ist gleichzeitig ein Eintrag zum Anfahren der Home-Position.
    Aufruf über den neuen Button Löschen (cmdClear_Click)
    Private Sub cmdClear_Click()
    TaktClear
    End Sub
  11. Abfahren der gelernten Positionen mit dem Robot
    Private Sub cmdRun_Click()
    Dim i&
    ft.NotHalt = False
    For i = 1 To TaktAnz
    If ft.MoveTo(Takte(i, 1), Takte(i, 2), Takte(i, 3), Takte(i, 4)) _
    = ftifehler Then Exit Sub
    lblTaktAkt = i
    Next i
    End Sub
    Aufruf über den neuen Button Run (cmdRun_Click). ft.NotHalt wird hier auf False gesetzt um die Abbruchbedingung von ft.MoveTo zurückzusetzten. Die Positionen werden in einer For Next Schleife abgefahren. Dazu wird die Methode ft.MoveTo genutzt, die die benötigten Werte aus der Takte-Tabelle erhält. Tritt ein Fehler auf oder wird manuell abgebrochen (zB. mit der Escape-Taste), wird die Sub beendet. Das wars eigentlich schon
  12. Das Ende
    Private Sub cmdHalt_Click()
    jy.StopJoy
    ft.NotHalt = True
    cmdHalt.Enabled = False
    cmdEnde.Enabled = True
    End Sub
    Der neue Button HALT beendet den JoyStick-Betrieb, das Abfahren der Takte-Tabelle und dann die Verbindung zum Interface.

    Private Sub cmdEnde_Click()
    jy.StopJoy
    ft.CloseInterface
    Unload Me
    End Sub
    Der neue Button ENDE beendet das Programm. In der Beispiel-Source wird noch mit Enabled ... gearbeitet um Fehlbedienungen einzuschränken. Man sollte darauf achten, daß immer eine laufende Abfahren-Schleife beendet wird, bevor das Programm ganz beendet werden soll, sonst wird nur die Form gelöscht, aber nicht die Schleife.
  13. Noch mehr Anzeigen
    Private Sub PositionAkt()
    lblPos(0) = ft.MotCntl.Position(1)
    lblPos(1) = ft.MotCntl.Position(2)
    lblPos(2) = ft.MotCntl.Position(3)
    lblPos(3) = ft.MotCntl.Position(4)
    End Sub

    Private Sub ft_OnFishPosition()
    PositionAkt
    End Sub

    Private Sub jy_OnJoyPosition()
    PositionAkt
    End Sub

    Die Sub PositionenAkt zeigt die aktuelle Position der Robot-Komponenten in Impulsen ab Endtaster in den Labels lblPos() an. Sie wird von den Ereigniss-Routinen ft_OnFishPosition (FishFace) und jy_OnJoyPosition (FishJoy) aufgerufen.

Das war schon alles und soll gleichzeitig der Ausgangspunkt für ein viel schöneres, größeres und komplizierteres eigenes Programm sein.

Stand : 18.01.2008