Stichpunkte zum Vortrag 'comedi' zum 3. Braunschweiger Linux Tag Why measureing under linux? - processing, not only registration possible - familiar environment (e.g. home dir) - network facilities while measureing - RT features (not in detail) Hierarchical concept with comedi - kernel modul - userspace application with comedilib System setup - compilation and installation - module loading - configuring device for - analog, digital, both - ISA ISApnp PCI Presentation: very simple application, that measures from the parallel port (calliper, sensing device) and (!) switching LEDs on and off in dependency of the input lines. Short (!) explanation of the code without talking about details. ------------------------ Messen unter Linux ------------------------------------ Michael Renner Max-Planck-Institut für biologische Kybernetik Fragestellung der Kybernetik: Psychophysik slide00.html Kurze Übersicht über Vortragsthemen 1.) Messgrössen, Digitalisierung. 2.) Unsere Anforderungen in der Forschung mit Beispiel 3.) Installation von Comedi mit Kernelmodulen, Libraries und Hilfsprogrammen 4.) Schichten (Verzahnung) eines Comedisystems 5.) Inbetriebnahme beim Rechnerstart bei SysV 6.) unterstützte Bussysteme und Kartentypen 7.) Kartenparameter mit Hilfe von comedi herausfinden 8.) Wichtige Funktionen der Library (keine Angst, nicht im Detail) 9.) Ein kleines einfaches Beispielprogramm von wenigen Zeilen für Datenaufnahme und -ausgabe 10.)URLs zum Aufschreiben Was kann man messen? - analoge Grössen wie Spannung Was kann in analoge Grössen gewandelt werden? - Türklingel - Temperatur - Tastendrücke - Lenkrad- und Gas/Brems/Kupplungspedal Daten ausgeben: - Bewegung auf Türöffner - Licht von Lampen - Spannung auf Motor Messprinzip: - analoge Grösse in Spannung gewandeln - analoge Spannung in digitalen Wert wandeln (z.B. 12 Bit Auflösung des ADC) - digitalen Wert aus Karte auslesen und weiterverarbeiten - digitalen Wert in Karte schreiben - digitalen Wert in analoge Spannung wandeln (mit DAC) - analoge Spannung in gebrauchte physikalische Grösse wandeln Zum Aufbau einer virtuellen Umgebung für wissenschaftliche Zwecke: Grafikrechner: SGI ONYX2 zur Projektion mit drei Videobeamern Linuxrechner mit HMD (LCDisplay Brille) Messwerterfassung mit dezidiertem Rechner, denn: -- Messkarten nicht oder nur schwer verfügbar -- lange Leitungen für analoge Daten -- zusätzliche Prozessorlast auf einem voll ausgelasteten Grafikrechner -- Unabhängigkeit der Systeme für Lenkradsicherheit Anforderungen und Wunschvorstellungen an das Messystem: ++ Verarbeitung der gemessenen Daten während des Messens, um 'closed loop' Bedingungen zu erreichen (Force Feedback genau erklären) ++ Netzwerkkommunikation mit Projektionsrechner + Remotezugriff zum programmieren, starten und stoppen + Gewohnte Entwicklungsumgebung mit emacs und dem per NFS gemounteden HOME, Druckdiensten etc. Arbeitsteilung: - Grafikrechner: Projektion Bildberechnung - PC Datenaufnahme Vorverarbeitung (Rauschfilter des Lenkrads) u.U. beabsichtige Datenveränderung (Delay) TCP/IP zum Grafikrechner PC: preisgünstig, erweiterbar Linux: vertraute Entwicklungsumgebung, Netzwerk comedi: Zugriff auf Messkarten Alternativen wären: Matlab und Lab-View Diese Vorstellungen konnten alle verwirklicht werden, dazu noch: + Verwendung von 'preiswerten' I/O-Karten ohne eigenes OS (DAP) + Verwendung mehrerer I/O-Karten gleichzeitig, gut für spätere Erweiterungen auf weitere Inputs wie Gas- Brems- und Kupplungspedal. slide_03.html: Installation: - Quellen entpacken - Kernelquellen müssen installiert sein - Module erstellen und Installieren - Libs installieren - Devices erstellen slide_02.html: Messprinzip im PC - Lenkrad und Motor - I/O-Karte - TCP/IP-Verbindung slide_01.html: Schichten des Messystems: - Kartenmodul - Comedi-Modul - Comedi-Device - Anwendungsprogramm im Userspace slide_05.html: Rechnerstart über /etc/init.d/: - Module laden - Konfiguration mit /usr/sbin/comedi_config Unterstützte Bussysteme: - ISA - ISApnp (slide_08.html: isapnp verwenden) - PCI Unterstützete Messkarten: - Karten mit analogen Eingängen (meist wenige) - Karten mit analogen Ausgängen (meist einige) - Karten mit digitalen Kanälen (als Input oder Output zu verwenden) - Multikarten die sowohl analoge Ein- und Ausgänge, als auch digitale Kanäle besitzen - Besonderheit: Parallelport, der als digitale Karte mit In- und Outputs fungiert info in comedilib für Messkarteneigenschaften - Anzahl Subdevices - Anzahl Kanäle - Art des Kanals (analog, digital) - Auflösung (analog) Anwendungsprogramm läuft im Userspace Funktionen der comedilib greifen auf Devicefile zu Beispiel für comedilib: - Device öffnen - Daten auslesen, verarbeiten - Daten verarbeitet ausgeben wesentlichste Funktionsgruppen: Konfiguration: - öffnen und schliessen von Devices: comedi_open, comedi_close - Abfragen von Karten- und Channeleigenschaften: comedi_get_n_subdevices, comedi_get_subdevice_type - Digitale Kanäle als IN- oder OUTPUT- Kanal schalten: comedi_dio_config Datenverarbeitung: - lesen und schreiben vom analogen Device: comedi_data_read, comedi_data_write - lesen und schreiben vom digitalen Device: comedi_dio_read, comedi_dio_write - Triggerkommandos: comedi_trigger - Timerkommandos: comedi_get_timer - Wandlung digitale Werte zu analogen Grössen: comedi_to_phys slide_07.html: Beispielprogramm - Headerdatei includen - Device öffnen - Zustand auslesen - Zustand verarbeiten - Daten ausgeben Zusammenfassung: Kartenzugriff über /dev/comedi Messen von analogen Spannungen und digitalen Zuständen Lesen und schreiben mit comedi_read() und comedi_write() Kosten von 0 DM (Parport-Lösung) bis zu mehreren kDM ------------------------ Messen unter Linux ------------------------------------