Grundbefehle

 

Die Softwarebefehle werden anhand der AppleScript Syntax beschrieben. Die Werte für deviceID und timeout sind der Einfachheit halber weggelassen.

 

set SERVICE output value X

Setzt den digitalen Ausgang auf den Wert von X, wobei 0 ≤ X ≤ 65535.

 

get SERVICE input value

Liefert den Zustand der digitalen Eingänge als Dezimalwert (0-65535) zurück.

 

get SERVICE EX value

Liefert den Zustand des Analogeingangs EX als Dezimalwert (0-65535) zurück.
Bei Service USB Plus 0-4095
Bei Service USB classic 0-1023

 

get SERVICE EY value

Liefert den Zustand des Analogeingangs EY als Dezimalwert (0-65535) zurück.
Bei Service USB Plus 0-4095
Bei Service USB classic 0-1023

 

get SERVICE output value

Liefert den Zustand des digitalen Ausgangs als Dezimalwert (0-65535) zurück. Der zurückgelieferte Wert entspricht dem zuvor mit „set SERVICE output value" gesetzten Wert. Dies kann nach einem Programmstart hilfreich sein, wenn das Service USB schon in Betrieb war und der Zustand der Ausgänge rekonstruiert werden muss.

 

set SERVICE output value by mask "TXTXTXTX"

Setzt den Digitalausgang gemäß der in dem Textstring angegebenen Maske. Die Buchstaben beziehen sich von links nach rechts auf das höchstwertigste bis niederwertigste Bit.

I bedeutet „High" oder logisch 1, das Bit wird gesetzt.
O bedeutet „Low" oder logisch 0, das Bit wird gelöscht.
T bedeutet invertieren (toggle) gegenüber dem vorherigen Zustand.
X lässt den Wert unverändert.

Groß- und Kleinschreibung wird in dem Textstring nicht unterschieden. Der String soll eine Länge von acht oder sechzehn Zeichen aufweisen. In einigen Programmierumgebungen findet keine automatische Längenprüfung statt. Dann heißt der Befehl ...by8BitMask oder ...by16BitMask bzw. ...mask8 oder ...mask16.

 

set SERVICE output value bit "T" bit 0

Beeinflusst ein bestimmtes Bit des Digitalausgangs. Der Wert für bit ist im Bereich 15-0 und bezieht sich auf die einzelnen Bits innerhalb des Ausgangs. Der Buchstabe gibt an, wie das Bit beeinflusst werden soll.
I bedeutet „High" oder logisch 1, das Bit wird gesetzt.
O bedeutet „Low" oder logisch 0, das Bit wird gelöscht.
T bedeutet invertieren gegenüber dem vorherigen Zustand.
X lässt den Wert unverändert.

 

get SERVICE input value as mask

Liest den Digitaleingang und gibt das Ergebnis als Textstring zurück.
I bedeutet „High" oder logisch 1, das Bit ist gesetzt.
O bedeutet „Low" oder logisch 0, das Bit ist gelöscht.

 

get SERVICE input value bit n

Liest Bit n (15-0) des Digitaleingangs.
Liefert "I" oder "O" zurück.

 

test SERVICE input value bit n

Liest Bit n (15-0) des Digitaleingangs.
Liefert TRUE oder FALSE zurück. FALSE entspricht 0. TRUE ist ein von 0 verschiedener Wert.

 

compare SERVICE input value mask "IOOOOOOO"

Vergleicht den Digitaleingang mit der Textmaske.
I bedeutet „High" oder logisch 1. Das Bit ist gesetzt.
O bedeutet „Low" oder logisch 0. Das Bit ist gelöscht.
X gibt an, das Bit zu ignorieren.
Bei Übereinstimmung wird False oder True zurückgeliefert.

 

pulse SERVICE engine {M1, M2, M3, M4} input value bits {T1,T2, T3, T4}

Dieser Befehl wird meistens für die Motorsteuerung bestimmter fischertechnik®-Modelle verwendet. Zur Verwendung müssen die Motoren M1 bis M4 an je zwei Ausgänge und pro Motor je ein Taster für die Rückmelde-Impulse angeschlossen sein. M1 zwischen O0 und O1 (Motor 1 an Ausgang 0 und Ausgang 1), M2 zwischen O2 und O3, M3 zwischen O4 und O5 und M4 zwischen O6 und O7.

Der Motor wird nach Absenden des Befehls so lange gedreht, bis eine bestimmte Anzahl an Rückmelde-Impulsen erkannt wurde. Zur Rückmeldung dienen die Eingänge I7 bis I0, an welche in der Regel Taster angeschlossen werden, die bei der Motordrehung Pulse abgeben z.B. durch eine Nockenwelle oder eine Gabellichtschranke. Hierdurch kann z.B. ein Getriebe an eine bestimmte Stelle gefahren werden, ohne teure Schrittmotoren zu verwenden.

Es kann der Befehl aber auch eingesetzt werden, um einen Motor in eine Endposition zu einem Endschalter zu fahren. Die Variablen M1 bis M4 können positiv, Null oder negativ sein und geben die Drehrichtung des Motors und die Anzahl der Impulse an. Negative Zahl: Motor dreht links. Positive Zahl: Motor dreht rechts. Null: Zustand des Motors wird nicht verändert .

Die input value bits T1 bis T4 geben für die Motoren 1 bis 4 die zugehörigen Tastereingänge an. Die Werte liegen zwischen 0 und 7 und beziehen sich auf die Eingänge I0 bis I7. Bei allen fischertechnik®-Modellen werden die Bits 1, 3, 5, 7 als Rückmelde-Impulse für die Motoren 1-4 benutzt.

Beispiel: Der Motor 1 soll so lange links drehen, bis Taster I7 500 Impulse empfangen hat:
pulse SERVICE engine {-500, 0, 0, 0} input value bits {7, 0, 0, 0}

Ein Puls ist ein Wechsel zwischen logisch 0 und logisch 1 oder zwischen logisch 1 und logisch 0. Wenn ein Taster einmal gedrückt und dann wieder losgelassen wird, handelt es sich also um zwei Pulse. Es wird sowohl die positive Flanke als auch die negative Flanke gezählt.

 

pulse SERVICE engine while mouse down {M1,M2,M3,M4} input value bits {T1,T2,T3,T4}

Mit diesem Befehl wird die Anzahl der benötigten Pulse für den vorhergehenden Befehl von Hand herausgefunden. Bei den fischertechnik®-Modellen gibt es einen Lernmodus, bei dem eine Modellachse so lange bewegt wird, wie der Benutzer die Maustaste gedrückt hält. Dieser Befehl zählt die Pulse während sich der Motor dreht. Der Motor dreht sich solange die Maustaste gedrückt ist.

Beispiel:
pulse SERVICE engine while mouse down {1, 0, 0, 0} input value bits {3,0, 0, 0}
Dreht den Motor 1 rechts herum und gibt nach dem Loslassen des Mausknopfes die Anzahl der von E3 gezählten Pulse zurück.

 

get SERVICE device count

Gibt die Anzahl der zur Zeit angeschlossenen Service USB zurück. Dieser Befehl wird im Zusammenhang mit der automatischen DeviceID-Ermittlung verwendet.

 

get next SERVICE device id

Liefert die Device ID des nächsten Service USB zurück. Zur Ermittlung der Device IDs sämtlicher Service USB wird dieser Befehl zunächst mit der Device ID 0 ausgeführt. Anschließend wird der Befehl für jedes angeschlossene Interface mit der soeben zurückgelieferten Device ID ausgeführt. Auf diese Weise erhält man sämtliche Device IDs der angeschlossenen Service USB.

 

get SERVICE device ROM version

Liefert die Versionsnummer der im Service USB tätigen Firmware zurück. Ab Firmware Version 3 ist es möglich, einzelne Ausführungen von Service USB an Hand der Firmware zu unterscheiden. Die letzte Ziffer gibt das Modell an
3.0.1 = Service USB Plus
3.0.2 = Service USB Core
3.0.3 = Service USB Drawer = Service USB opener
3.0.4 = Service USB Classic (Fischertechnik)

 

get SERVICE device driver version

Liefert die Versionsnummer des Macintosh Treibers (Framework) zurück.

 

get SERVICE device serialnr

Liefert die Seriennummer eines bestimmten Service USB als Zeichenkette in hexadezimaler Schreibweise zurück. Die Seriennummer in dezimaler Schreibweise ist auf dem Interface angegeben und entspricht immer der Device ID.

 

register SERVICE device notification notification type

Dieser Befehl dient dazu, eine bestimmte Programmroutine auszuführen, wenn die angegebene Bedingung erfüllt ist. Anstatt eine Bedingung, z.B. den Druck auf einen Taster ständig abzufragen (polling), ist es hiermit möglich, eine Programmroutine aufrufen zu lassen wenn z.B. der Taster gedrückt wird. Dies spart gegenüber der Methode des ständigen Abfragens viel Rechenzeit und bietet sich immer dann an, wenn lange Zeit auf ein Ereignis gewartet werden soll, um daraufhin möglichst schnell auf dieses Ereignis zu reagieren. Dieser Befehl funktioniert nur im Frameworks und in AppleScript. Unter AppleScript ist der Name der auszuführenden Funktion fest vergeben und lautet
on «event SerUNoRe» (theNotificationType)
end «event SerUNoRe»

In der Framework Version kann die auszuführende Routine selbst bestimmt werden. Es kann immer nur ein Ereignis überwacht werden. Mehrfaches Aufrufen dieses Befehls überschreibt die Bedingungen des vorhergehenden Aufrufes.
Die abfragbaren Bedingungen lauten:
- notification type input value mask "XXXXXXIX"
Die Buchstaben beziehen sich von links nach rechts auf das höchstwertigste bis niederwertigste Bit.
I bedeutet „High" oder logisch 1.
O bedeutet „Low" oder logisch 0.
T bedeutet „Toggle". Die Bedingung ist erfüllt, wenn sich der Zustand des Bits ändert.
X bedeutet, dass der Zustand des Bits nicht ausgewertet wird.
Die obige Bedingung ist wahr, wenn Bit 1 auf logisch 1 ist, also wenn der Taster am Eingang E2 gedrückt ist.
Beispiel in AppleScript:
register SERVICE device notification notification type input
value mask notification value "XXXXXXIX"

- notification type ex value greater X
- notification type ex value less X
- notification type ey value greater X
- notification type ey value less X

Diese Abfragebedingungen beziehen sich auf die Analogeingänge.
Der Wert für X muss bei Service USB Plus zwischen 0 und 4095 und bei Service USB classic zwischen 0 und 1023 liegen.

Beispiel in AppleScript:
register SERVICE device notification notification type ex value greater notification value 500

 

- notification type no notification

Meistens ist die auslösende Bedingung noch wahr, wenn die benachrichtigte Programmroutine schon wieder verlassen wurde. In diesem Fall wird die Programmroutine sofort wieder ausgeführt, was zu einem dauerhaften und in der Regel unerwünschten Ausführen der Routine führt. Um dies zu vermeiden, sollte als erstes dieser Benachrichtigungsmechanismus abgestellt werden, wenn die Programmroutine ausgeführt wird.

Beispiel AppleScript:
on «event SerUNoRe» (theNotificationType)
register SERVICE device notification notification type no
notification
-- weitere Programmbefehle
end «event SerUNoRe»

 

 

send SERVICE vendor request xx wValue yy wIndex zz

Mit diesem Befehl werden Parameter innerhalb des Interfaces verändert. Dies kann z.B die Baudrate der RS232 Schnittstelle, Auflösung der Pulsbreitenmodulation, die Belegung von EX,EY mit Analogeingängen oder ein spezieller Befehl für Sonderanfertigungen sein.

Es werden drei Parameter übergeben, wobei der request immer 0 ist und die Funktion nur durch wValue und wIndex bestimmt wird. wValue und wIndex sind im Bereich von 0 bis 65535. Allerdings ist es bei einigen Befehlen einfacher, sich wValue im Hexadezimalsystem zu denken, also im Bereich von 0000 bis FFFF. Ist in der Tabelle wValue nicht angegeben, so hat der Wert keinen Einfluß auf die Funktion.

 

Zusatzfunktionen über vendor request

Eine ausführliche, nach Funktionen geordnete Beschreibung folgt in den nächsten Kapiteln.

 

wIndex wValue Funktion
0 Baudrate gemäß Tabelle setzt Baudrate
1 HSKi auf Dezimal an
2 HSKi auf Dezimal aus (Normalzustand)
3 [Original][Ersatz] RS232 Zeichen ersetzen
9 Frequenz Pulsbreitenmodulation pro Ausgang verschieden
10 Pulsbreite Pulsbreitenmodulation für alle Ausgänge gleich
11 Digitaleingänge als Ausgänge nutzen
12 Digitaleingänge als Eingänge nutzen (Normalzustand)
13 Eingang Analogeingang für EX setzen
14 Eingang Analogeingang für EY setzen