14.11.2012 Aufrufe

Projekt Micarpet Projektbericht - artecLab - Universität Bremen

Projekt Micarpet Projektbericht - artecLab - Universität Bremen

Projekt Micarpet Projektbericht - artecLab - Universität Bremen

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

<strong>Projekt</strong> MiCarpet <strong>Projekt</strong>bericht<br />

Diese theoretische Beschreibung hat das Gerät mit allen seinen Werkzeugen für die Programmierung<br />

vorgestellt. Jedoch nicht konkret gezeigt, wie man überhaupt einen Befehl in einer bestimmten Programmiersprache<br />

senden, oder eine Antwort einer Abfrage an SIOS bekommen kann. Nichtdestotrotz<br />

genügten für unser <strong>Projekt</strong> die Informationen über die Befehlsätze und die Konfigurationselemente, um<br />

die SIOS mit unserer selbst geschriebenen Software zu steuern. Wir haben mit diesen Informationen ein<br />

Programm in C/C++ entwickelt, um das Gerät anzusteuern und werden es in folgenden Zeilen in dem<br />

Abschnitt Programmierung im Detail vorstellen.<br />

14.2.2 Programmierung<br />

Für unser <strong>Projekt</strong> war es die Aufgabe der SIOS-Schnittstelle, einen Informationsaustauchen zwischen<br />

dem virtuellen Teppich in der Welt und der Motion-Platform zu ermöglichen. Aus den Aktivitäten der<br />

Komponenten sowohl in der realen Welt (wie die Sensoren, die Geschwindigkeitsschalter, die Lüfter und<br />

die Relais der Plattform) als auch in der virtuellen Welt (wie den virtuellen Teppich durch die Engine)<br />

ergeben sich die Parameter für die Kommunikation, die über das Interface abläuft. Das Programm sollte<br />

folgendes tun: über die SIOS die Werte der Sensoren lesen und dadurch die Winkelneigung des Teppichs<br />

bestimmen, anschließend die Kollisionseffekte und die Windsimulation in die virtuellen Welt übertragen.<br />

1. Zugriff auf die SIOS:<br />

Der Zugriff erfolgte durch den seriellen Port des PCs. Jeder angesprochene Port muss mit allen Informationen<br />

über die Konfiguration der SIOS, dem Namen des PC-Ports und den auszuführenden<br />

Aktionen geöffnet werden. Dafür wird die Variable HANDLE-File unter Windows (unter Linux<br />

eine Variable Filedescriptor) hergestellt, indem alle diese Informationen aufgebaut werden. Damit<br />

der Zugriff auf mindestens zwei Ports möglich ist, existieren die drei Methoden OpenPort,<br />

setConfigurationPort und setCommunicatioTimeouts, deren Parameter eben diesen<br />

Informationen entsprechen.<br />

(a) openPort()<br />

Diese Methode versucht einen PC-PORT zu öffnen. Wenn die Aktion erfolgreich abschließt,<br />

wird “der PC-PORT ist erfolgreich geöffnet” auf die Konsole geschrieben<br />

und TRUE als Rückgabewerte der Methode zurückgeliefert; ansonsten FALSE mit der Fehlermeldung<br />

“FEHLER: Portöffnung fehlgeschlagen”.<br />

Das Erzeugen einer File-Descriptor-Struktur vom Typ HANDLE (Windows API) wird für den<br />

seriellen Port und die auszuführenden Aktionen mittels CreateFile() konfiguriert.<br />

HANDLE CreateFile(<br />

LPCTSTR lpFileName, // pointer to name of the file<br />

DWORD dwDesiredAccess, // access (read-write) mode<br />

DWORD dwShareMode, // share mode<br />

LPSECURITY_ATTRIBUTES lpSecurityAttributes,<br />

// pointer to security attributes<br />

DWORD dwCreationDisposition, // how to create<br />

DWORD dwFlagsAndAttributes, // file attributes<br />

HANDLE hTemplateFile // handle to file with attributes to<br />

// copy<br />

);<br />

Parametererklärungen:<br />

lpFileName: ist ein Pointer auf einen leeren String, der von Objekten wie Datei, Pipe,<br />

Mailhost, Kommunikationsressourcen, Diskgeräte, Konsole oder Verzeichnisse spezifiziert<br />

wird. Für das Programm zeigt es auf Kommunikationsressourcen ( COM1 für die erste SIOS,<br />

COM2 für die zweite SIOS).<br />

6. Januar 2005 Seite 180

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!