Schweiss Rob

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

Lösungen für das Modell Schweißroboter des Computing Starter

Aufbau : M1 mit Säulenmotor und I1 Endtaster, I2 Impulstaster, M4 mit Schweißlampe.
Bei mir war das eine Abwandlung des Hanoi-Roboters bei dem zusätzlich auf dem Arm eine Birne(M4) montiert wurde.

Vorgestellt werden verschiedene Lösungsmöglichkeiten, beginnend auf Level 2 mit einer einfachen sequentiellen Lösung bis hin zu einer komplexeren, listengesteuerten Lösung auf Level 3.
Auf der nächsten Seite wirds dann richtig schön : es kommt noch eine TeachIn-Lösung hinzu.

Schweissroboter1L2

Sieht beinahe wie ein LLWin-Programm aus. Es geht hier alles schön der Reihe nach :

- Anfahren der Home-Position (bis Pause)
- Anfahren Position 56 und Schweißen
- Anfahren Position 94 (56 + 38)
- Anfahren Position 144 (94 + 50)

und das in einer Endlosschleife.

Neu (gegenüber LLWin) ist hier : 

- die gelbe 1 : Warten auf Taster an I1 = true
   man spart also den bei LLWin üblichen Abfragekringel
- die gelben Pfeile : Zählen von Impulsen am angegebenen
   Eingang, hier werden alle gezählt (nur fallende, steigende
   sind auch möglich). Hier wird gegenüber LLWin konsequent
   der Gebrauch von externen Variablen vermieden.

Das Schweißen

Interessant ist hier das Zählschleifenkonstrukt :

Hier wird eine Schleife 12 mal durchlaufen. Beim Start (Eingang =1) wird der interne Zähler auf 1 gesetzt, bei den weiteren Schleifendurchläufen jeweils um (+1) 1 erhöht. 

Auch hier werden externe Variable vermieden. Die Konstruktion ist einfacher als die bei LLWin übliche Variablenabfrage und Incrementierung.

Schweißroboter2L3

Sequentieller Ablauf wie gehabt, aber :

- Auslagerung der Positionierung in ein Unterprogramm
   Das Unterprogramm bekommt die anzufahrende
   Position über einen Parameter mitgeteilt.

- Ebenso wurde das Anfahren der Home-Position in ein
   Unterprogramm verlagert.

- neues Element Konstanten, die über gelbe Linien mit
   dem Zielelement verbunden werden.

- Level 3 bringt eine Trennung von Kontrollfluß 
   (schwarze Linien) und Datenfluß (gelbe Linien, sie
   werden in den weiteren Programmteilen vermehrt
   auftreten).

- Damit verbunden ist die Einführung von Konstanten,
   globalen und lokalen Variablen.

- Ebenso wird jetzt zwischen Befehlen (im Kontrollfluß)
   und Ein- und Ausgängen (z.B. Interface M1 - M4 und
   I1 - I8) sowie Operatoren (im Datenfluß) unter-
   schieden.

- Level 1/2 Symbole können mit Level 3 Symbolen gemischt verwendet. Ob mans dann tut, ist Geschmackssache (und eine der Bequemlichkeit, siehe nachfolgende Routine Schweissen).

 

Das renovierte Schweißen

Der Ablauf ist wie in Level 1.

Die Schweißbirne wird jetzt aber über Level 3-Elemente angesteuert. Mit dem grünen Kreis geht es mit voller Helligkeit (8) los, warten und aus. Diese Befehle befinden sich im Kontrollfluß und senden über den Datenfluß (gelb) entsprechende Nachrichten an die Birne.

Das Zählelement wurde (faulheitshalber) beibehalten. Es wäre sonst eine Zählvariable, ein Additionbefehl und eine Abfrage fällig gewesen (mit gelben und schwarzen Linien). Das kann man dann weiter unten bewundern.

Anfahren der Home-Position

Hier mit dem gelben "J" die gelbe "1" von Level 1 in neuem Gewand : Warten auf I1 = true. Die Varianten Warten auf false oder steigende (0->1), fallende(1->0) Flanke sind ebenfalls möglich

Der Säulenmotor an M1 wird jetzt durch separate Befehle angesteuert (roter Linksdreh, Fullspeed und STOP).

Neu sind hier auch der "=" Befehl, der die Nachricht 0 an die (globale) Variable ActPos sendet. D.h. die Säule steht auf Position 0 gerechnet ab Endtaster an I1.

Mit dem Wert 0 (bei ActPos) wird die Variable bei Programmstart auf 0 initialisiert. Das =0 ist hier erforderlich, das Home mehrfach aufgerufen wird (und natürlich der Ordnung halber).

Anfahren einer vorgegebenen Position

Ist schon etwas vertrackter.

Die anzufahrende Position wird über den Parameter ZielPos vorgegeben (immer gerechnet ab Endtaster). Die aktuelle Position (auch ab Endtaster) wird in der globalen Variablen ActPos gehalten (im Hauptprogramm tritt sie gar nicht in Erscheinung, sie hier und in Home genutzt).

Zentraler Befehl ist die Abfrage A?B mit der ZielPos und ActPos verglichen werden. Bei Gleichheit ist zu Ende, Motor Aus.

Ist ZielPos > ActPos gehts nach rechts mit M1, die bei I2 auftretenden Impulse werden gezählt ("Pfeil"-Befehl) und ActPos wird jeweils um 1 erhöht bis es dann gleich ist.

Bei ZielPos < ActPos gehts nach links in Richtung Endtaster, ansonsten sinngemäß.

Man könnte hier natürlich (vorsichtshalber) auch noch den Endtaster an I1 abfragen und die maximal mögliche Fahrstrecke. Das kriegen wir  später.

 

Schweißroboter3L3

Ist schon beinahe eine Luxusausführung. Hier werden die anzufahrenden Positionen in der Tabelle (oder Liste) Positionen gespeichert. In diesem Beispiel schon bei der Programmerstellung.

Die Tabelle erhält über den I-Eingang die Nummer (Index, ab 0) des Tabellenelementes das über den R-Ausgang auszugeben ist. Hier landet es dann als Parameter bei DriveTo.

Der I-Ausgang gibt bei einem Indexwert kleiner der Anzahl Tabellenelemente (hier 3) die aktuelle Anzahl der Tabellenelemente (hier also 3) aus, bei Index 3 oder größer wird 0 ausgegeben. Das wird zur Schleifensteuerung bei A>0 genutzt.

Die verwendeten Unterprogramme entsprechen denen vom vorhergehenden Beispiel.

Der aktuelle Index wird in einer Variablen gehalten (augenscheinlich erforderlich, da der +1 Befehl sonst nicht ankommt, der =0 tuts).

 

 

Stand : 05.10.2009