Matlab-steuerung externer Komponenten (zB. Schrittmotoren) mit RS232

Aus Physik
Version vom 15. September 2009, 11:20 Uhr von Nikbal (Diskussion | Beiträge) (New page: F"ur die Anlage wurde ein Softwarepaket entwickelt mithilfe dessen s"amtliche Schrittmotoren gesteuert, und die Messergebnisse erfasst werden k"onnen. Als Enwicklungsumgebung wurden Matlab...)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

F"ur die Anlage wurde ein Softwarepaket entwickelt mithilfe dessen s"amtliche Schrittmotoren gesteuert, und die Messergebnisse erfasst werden k"onnen. Als Enwicklungsumgebung wurden Matlab und Ocatve gew"ahlt. Der Vorteil dieser Programmiersprachen liegt darin, dass Matlab und Octave mit kleinen Ausnahmen kompatibel, und in der Technik weit verbreitet sind. \\ Weiters wird als Messrechner ein Linux-PC verwendet. Linux erlaubt problemlosen Zugriff auf Schnittstellen, wodurch sich der Datenaustausch mit der Anlage sehr einfach gestaltet. Ausserdem kann der Messrechner mit jedem Linux oder Mac-Rechner "uber eine SSH (secureshell) Verbindung gesteuert werden. Dadurch kann der Anlagenzustand mittels Webcam und Druck- oder Positionsdaten "uberwacht, und Messungen weltweit gestartet werden.\\

\subsection{Frankensteincontrol} Zentrales Element der Anlagensteuerung ist die modular aufgebaute Steuereinheit 'Frankensteincontrol'. Sie verbindet die Hardware der Anlage mit der Software. Dieses Elektronikmodul wurde in mehrmonatiger Entwicklungszeit am Institut von Reinhard D"amon entwickelt. Die Parameter f"ur die Kommunikation "uber die RS232 Schnittstelle sind: 115200 baud, N,8,1, no handshake. \\Ein Mastermodul sendet "uber ein internes Bussystem gesendete Befehle an die einzelnen Module weiter. Je nach Anfangsziffern wird der Befehl vom jeweiligen Prozessorboard akzeptiert und interpretiert.\\ Ein Befehl kann zB. 04rv00 lauten. Dieses 'Befehlswort' wird "uber die RS232 Schnittstelle gesendet. 04 steht f"ur Modul 4, das Spannungsmessmodul. rv steht f"ur 'read voltage'. 00 heisst, dass Spannungskanal 00 gelesen werden soll. Das Modul antwortet mit der entsprechenden Spannung. "Uber die Linux Konsole kann die Spannung also wie folgt ausgelesen werden:\\ \\ cat $/dev/ttyS0$ $>>$ $/home/user/antwortfile.txt$ $\&$ \\ echo $"04rv00"$ $>$ $/dev/ttyS0$ \\ killall cat\\ \\ Zeile 1:\\ cat steht f"ur concatenate. Dieses Programm h"angt textfiles zusammen. $>>$ heisst, dass cat den Text an den bestehenden Text in der Zieldatei anh"angen soll. Will man nur die aktuelle Spannung in der Datei stehen haben schreibt man stattdessen $>$. Im Beispiel h"angt es den Text, der im File $/dev/ttyS0$ liegt an das File $/home/user/antwortfile.txt$ an. Unter Linux werden Schnittstellen wie Dateien behandelt. Deshalb spielt es keine Rolle, dass $/dev/ttyS0$ keine Datei, sondern die RS232 Schnittstelle ist. Das \& am Ende der Zeile bedeutet, dass das Programm im Hintergrund weiterlaufen soll. \\ Zeile 2:\\ Der Befehl echo schreibt beliebigen Text in eine Datei oder auf eine Schnittstelle. $"04rv00"$ ist das Befehlswort, das an das Modul "ubertragen werden soll. $/dev/ttyS0$ ist wieder die RS232-Schnittstelle an die das Befehlswort "ubertragen werden soll.\\ Zeile 3: \\ killall cat beendet den Befehl cat, der bis zu diesem Zeitpunkt im Hintergrund weitergelaufen ist.\\ \\ Unter Matlab kann dieselbe Prozedur mit der Funktion serwrite ausgef"uhrt werden.\\ \\ $!$cat $/dev/ttyS0$ $>>$ $/home/user/antwortfile.txt$ $\&$ \\ serwrite($'04rv00'$)\\ $!$killall cat\\ \\ Die Rufzeichen am Anfang der Zeilen 1 und 3 bedeuten, dass die Befehle in der Konsole ausgef"uhrt werden sollen. Die Syntax von serwrite ist eigentlich serwrite(string,port). Vollst"andig lautet der Befehl also serwrite($'04rv00'$,$'/dev/ttyS0'$), der Standardwert f"ur Port ist allerdings $/dev/ttyS0$, die Eingabe ist also unn"otig.