Kommunikation mit externen Gerätenknoll/python/material/SommerkursPython... · Kommunikation mit...

25
Kommunikation mit externen Geräten Carsten Knoll TU Dresden, Institut für Regelungs- und Steuerungstheorie Interdisziplinärer Python "Sommerkurs" 27. Juni 2011 Carsten Knoll, 1/24

Transcript of Kommunikation mit externen Gerätenknoll/python/material/SommerkursPython... · Kommunikation mit...

Page 1: Kommunikation mit externen Gerätenknoll/python/material/SommerkursPython... · Kommunikation mit externen Geräten Carsten Knoll TU Dresden, Institut für Regelungs- und Steuerungstheorie

Kommunikation mit externen Geräten

Carsten Knoll

TU Dresden, Institut für Regelungs- und Steuerungstheorie

Interdisziplinärer Python "Sommerkurs"

27. Juni 2011

Carsten Knoll, 1/24

Page 2: Kommunikation mit externen Gerätenknoll/python/material/SommerkursPython... · Kommunikation mit externen Geräten Carsten Knoll TU Dresden, Institut für Regelungs- und Steuerungstheorie

Vorbemerkungen

Ziel:

Schnittstellen ↔ ModuleEmpfehlungen

Aufbau:

EinleitungSchnittstellen

Serielle Schnittstelleparallele SchnittstelleGPIBEthernet

DLL-Treiber nutzenAnwendungsbeispiele

USB Missile LauncherMobiler Roboter (Arduino-Plattform)

Umsetzungshinweise

Carsten Knoll, Vorbemerkungen 2/24

Page 3: Kommunikation mit externen Gerätenknoll/python/material/SommerkursPython... · Kommunikation mit externen Geräten Carsten Knoll TU Dresden, Institut für Regelungs- und Steuerungstheorie

Gliederung

1 Vorbemerkungen

2 Einleitung

3 Schnittstellen

4 Fertige Treiber Nutzen (DLLs)

5 Anwendungsbeispiele

6 Umsetzungshinweise

Carsten Knoll, Einleitung 3/24

Page 4: Kommunikation mit externen Gerätenknoll/python/material/SommerkursPython... · Kommunikation mit externen Geräten Carsten Knoll TU Dresden, Institut für Regelungs- und Steuerungstheorie

Kommunikation womit?

Messgeräte

Funktionsgeneratoren

Steuerungen für Positioniertische

Optische Komponenten (Lampen, Laser, Filter, ...)

Temperaturregler

Mikrocontroller („µC“)

Anderer Rechner

...

Hintergrund: Eigenen Erfahrungen ( , )

Carsten Knoll, Einleitung 4/24

Page 5: Kommunikation mit externen Gerätenknoll/python/material/SommerkursPython... · Kommunikation mit externen Geräten Carsten Knoll TU Dresden, Institut für Regelungs- und Steuerungstheorie

Kommunikation womit?

Messgeräte

Funktionsgeneratoren

Steuerungen für Positioniertische

Optische Komponenten (Lampen, Laser, Filter, ...)

Temperaturregler

Mikrocontroller („µC“)

Anderer Rechner

...

Hintergrund: Eigenen Erfahrungen ( , )

Carsten Knoll, Einleitung 4/24

Page 6: Kommunikation mit externen Gerätenknoll/python/material/SommerkursPython... · Kommunikation mit externen Geräten Carsten Knoll TU Dresden, Institut für Regelungs- und Steuerungstheorie

Python im Labor? (I)

Platzhirsch: LabVIEW (National Instruments)

Umfangreiche (Treiber-)Bibliothek

Datenfluss orientiert → grafisches Programmieren

Intuitive Parallelisierung, sehr einfaches Erzeugen von GUIs

Nachteile (persönliche Meinung!)

Haupteingabe per Maus (=Informations-Nadelör verglichen mitTastatur)

Modularisierung/Kapselung aufwendiger

Tendiert schnell zu Unübersichtlichkeit

Permanente Platzprobleme → Sparzwang auch bei Kommentaren

Wartbarkeit ↘, Erweiterbarkeit ↘...

Carsten Knoll, Einleitung 5/24

Page 7: Kommunikation mit externen Gerätenknoll/python/material/SommerkursPython... · Kommunikation mit externen Geräten Carsten Knoll TU Dresden, Institut für Regelungs- und Steuerungstheorie

So soll es aussehen

Page 8: Kommunikation mit externen Gerätenknoll/python/material/SommerkursPython... · Kommunikation mit externen Geräten Carsten Knoll TU Dresden, Institut für Regelungs- und Steuerungstheorie

„LabVIEW Horror“

Page 9: Kommunikation mit externen Gerätenknoll/python/material/SommerkursPython... · Kommunikation mit externen Geräten Carsten Knoll TU Dresden, Institut für Regelungs- und Steuerungstheorie

Python im Labor? (II)

Wann ist Python eine mögliche Alternative?

@ (fast) fertige LabVIEW-Lösung

Keine speziellen LabVIEW-Features benötigt (FPGA, harteEchtzeit)

Aufwendige Algorithmen zu implementieren (nicht nur Datenverschieben)

Lizenzkosten spielen eine Rolle

Carsten Knoll, Einleitung 8/24

Page 10: Kommunikation mit externen Gerätenknoll/python/material/SommerkursPython... · Kommunikation mit externen Geräten Carsten Knoll TU Dresden, Institut für Regelungs- und Steuerungstheorie

Echtzeitfähigkeit

∃ „harte“ und „weiche“ Echtzeitbedingungen

Hart: Verletzung nicht hinehmbar (Steuerung derFlugzeughydraulik)

Weich: Verletzung unschön aber nicht tragisch (DVD-Player)

Ca. 95% der Anwendungen: weich

Hauptkriterium: Determiniertheit

Python nicht-deterministisch (autom. Garbage-Collector)→ nur weiche Echtzeit

Ausreichend schnell? → abhängig von Aufgabe

Carsten Knoll, Einleitung 9/24

Page 11: Kommunikation mit externen Gerätenknoll/python/material/SommerkursPython... · Kommunikation mit externen Geräten Carsten Knoll TU Dresden, Institut für Regelungs- und Steuerungstheorie

Gliederung

1 Vorbemerkungen

2 Einleitung

3 Schnittstellen

4 Fertige Treiber Nutzen (DLLs)

5 Anwendungsbeispiele

6 Umsetzungshinweise

Carsten Knoll, Schnittstellen 10/24

Page 12: Kommunikation mit externen Gerätenknoll/python/material/SommerkursPython... · Kommunikation mit externen Geräten Carsten Knoll TU Dresden, Institut für Regelungs- und Steuerungstheorie

Serielle Schnittstelle

„Seriell“: Daten (Bitfolge) werden hintereinander übertragen

Meist RS-232 gemeint

Heute oft über USB emuliert

Windows: COM1, ... Unix: /dev/ttyS1...

Viele (Mess-)Geräte damit ausgestattet

Paket serial (Projekt „pySerial“)

import serialser = serial.Serial(0, 19200, timeout=2.5) # open first serial portprint ser.portstr # check which port was really usedser.write("hello") # write a stringresponse = ser.readline() # wait for responseser.close()

Carsten Knoll, Schnittstellen 11/24

Page 13: Kommunikation mit externen Gerätenknoll/python/material/SommerkursPython... · Kommunikation mit externen Geräten Carsten Knoll TU Dresden, Institut für Regelungs- und Steuerungstheorie

Parallele Schnittstelle

„Parallel“: Mehrere Bitfolgen gleichzeitig über parallele Leitungenübertragen

Auch als „Druckerausgang“ bekannt

Einfachste Möglichkeit für digitale E/A

Heute kaum noch vorhanden

Empfindlich gegen Überspannungund Kurzschluss

Paket parallel (Projekt „pySerial“)

import parallelp = parallel.Parallel() # open LPT1p.setData(0x57) # write 0101 0111responseBit = p.getInPaperOut()

Carsten Knoll, Schnittstellen 12/24

Page 14: Kommunikation mit externen Gerätenknoll/python/material/SommerkursPython... · Kommunikation mit externen Geräten Carsten Knoll TU Dresden, Institut für Regelungs- und Steuerungstheorie

GPIB

General Purpose Interface Bus(auch:HP-IB, IEC-625-Bus,... )

Bis zu 15 Geräte parallel

Paket visa (Projekt „pyvisa“)

import visakeithley = visa.instrument("GPIB::12")ident = keithley.ask("*IDN?")assert ident.startswith('KEITHLEY INSTRUMENTS INC.') # Konsistenztestkeithley.write(':CONF:VOLT:DC')v = keithley.ask(':READ?')print float(v)

Carsten Knoll, Schnittstellen 13/24

Page 15: Kommunikation mit externen Gerätenknoll/python/material/SommerkursPython... · Kommunikation mit externen Geräten Carsten Knoll TU Dresden, Institut für Regelungs- und Steuerungstheorie

Ethernet (Netzwerk, Sockets) beispiel01_*.py

Modernere Geräte mit NetzwerkanschlussInterner Webserver für die KommunikationSocket (engl. für „Sockel“):A socket object represents one endpointof a network connection.→ Client-Server-ArchitekturPaket socket (python standard libray)

# Echo client programimport socket

HOST = '141.30.61.152' # The remote hostPORT = 50007 # The same port as used by the servers = socket.socket()s.connect((HOST, PORT))s.send('Hello, world')data = s.recv(1024)s.close()print 'Received', repr(data)

Carsten Knoll, Schnittstellen 14/24

Page 16: Kommunikation mit externen Gerätenknoll/python/material/SommerkursPython... · Kommunikation mit externen Geräten Carsten Knoll TU Dresden, Institut für Regelungs- und Steuerungstheorie

Gliederung

1 Vorbemerkungen

2 Einleitung

3 Schnittstellen

4 Fertige Treiber Nutzen (DLLs)

5 Anwendungsbeispiele

6 Umsetzungshinweise

Carsten Knoll, Fertige Treiber Nutzen (DLLs) 15/24

Page 17: Kommunikation mit externen Gerätenknoll/python/material/SommerkursPython... · Kommunikation mit externen Geräten Carsten Knoll TU Dresden, Institut für Regelungs- und Steuerungstheorie

DLL Treiber

Gerätetreiber vom Hersteller oft als kompilierter Code mitgeliefert(.dll („Dynamic Link Libray“) oder .so; „Shared Object“)Paket ctypes (python standard libray)Benötigt: Kenntnis über Namen u. Signatur der FunktionenBeachtung der Datentypen erforderlich

# Optischen Zeilen-Sensor (Linien-Kamera) auslesen# (Kommunikation ber USB mit unbekanntem Protokoll)

import ctypes

camdll = ctypes.windll.LoadLibrary('D:/devices/cam123.dll')camdll.setIntegrationTime(5) # 5ms

valuearray_type = ctypes.c_ushort * 512valuearray = valuearray_type()pixels = camdll.ReadData( ctypes.byref(valuearray) )assert pixels == 512 # Konsistenztestvalues = list(valuearray) # ctypes array -> python list

Carsten Knoll, Fertige Treiber Nutzen (DLLs) 16/24

Page 18: Kommunikation mit externen Gerätenknoll/python/material/SommerkursPython... · Kommunikation mit externen Geräten Carsten Knoll TU Dresden, Institut für Regelungs- und Steuerungstheorie

Gliederung

1 Vorbemerkungen

2 Einleitung

3 Schnittstellen

4 Fertige Treiber Nutzen (DLLs)

5 Anwendungsbeispiele

6 Umsetzungshinweise

Carsten Knoll, Anwendungsbeispiele 17/24

Page 19: Kommunikation mit externen Gerätenknoll/python/material/SommerkursPython... · Kommunikation mit externen Geräten Carsten Knoll TU Dresden, Institut für Regelungs- und Steuerungstheorie

USB Missile Launcher als optischer Strahl-Shutter

Aufgabe: Lichtstrahl abschatten (ohne zeitliche Anforderungen)Professionelles Equipment: >500CIdee: Zweckentfremden von ... Spielzeug→ Zweiachsig einstellbarer RaketenwerferSteuerung vom PC aus mittels Windows-GUI-Programm→ egal∃ DLL ⇒ ∃ python-wrapperAufgabe gelöst

Carsten Knoll, Anwendungsbeispiele 18/24

Page 20: Kommunikation mit externen Gerätenknoll/python/material/SommerkursPython... · Kommunikation mit externen Geräten Carsten Knoll TU Dresden, Institut für Regelungs- und Steuerungstheorie

Mobiler Roboter mit Arduino µC

Projekt für Schülerpraktikum (7./8. Klasse)

Kann: Fahren, Blinken, Hupen, „Sehen“(optische Entfernungssensoren),kommunizieren (Display, RS-232)

Arduino:Open-Source µC-Entwicklungsplattformeinfach ∪ leistungsfähig

Atmel AVR-Mikrocontroller + Platine

USB, Spannungsversorg., LEDs, Reset-Knopf

Plug’nPlay

Digital + Analog I/O (AO = PWM),

Software: IDE + Bibliotheken + Beispiele

→ Stark vereinfachte C++-Programmierung

Carsten Knoll, Anwendungsbeispiele 19/24

Page 21: Kommunikation mit externen Gerätenknoll/python/material/SommerkursPython... · Kommunikation mit externen Geräten Carsten Knoll TU Dresden, Institut für Regelungs- und Steuerungstheorie

Python-Anwendung: Fernsteuerung beispiel02.py

Ziel:

Vom PC aus den Roboter steuern

Umsetzung:

C++-Programm auf µC wartet auf Befehleund führt dann bestimmte Aktionen aus

Python Programm um die Befehle zu sendenJeder Befehl besteht aus zwei Byte:

Kommando (’F’=Forward, ’B’=Backward, ...)Argument (numerischer Wert des Bytes, [0, 255])

Einbindung von ipython⇒ interaktives Ausprobieren

Carsten Knoll, Anwendungsbeispiele 20/24

Page 22: Kommunikation mit externen Gerätenknoll/python/material/SommerkursPython... · Kommunikation mit externen Geräten Carsten Knoll TU Dresden, Institut für Regelungs- und Steuerungstheorie

Gliederung

1 Vorbemerkungen

2 Einleitung

3 Schnittstellen

4 Fertige Treiber Nutzen (DLLs)

5 Anwendungsbeispiele

6 Umsetzungshinweise

Carsten Knoll, Umsetzungshinweise 21/24

Page 23: Kommunikation mit externen Gerätenknoll/python/material/SommerkursPython... · Kommunikation mit externen Geräten Carsten Knoll TU Dresden, Institut für Regelungs- und Steuerungstheorie

Umsetzungshinweise

Automatisierungsaufgabe schriftlich durchdenken

Möglichst viel bestehendes nutzen

Objektorientierung: ein Gerät ↔ eine Klasse (↔ eine Datei)

Modularisierung: Eigenes Paket („devices“)

Initialisierungsphase und ggf. ordnungsgemäßes Abschalten

Simulationsmodus vorsehen (Programmtest ohne angeschlosseneGeräte)

Konsistenztest (Überprüfen eigentlich bekannter Informationen)

Überprüfung zulässiger Wertebereiche

Logging-Funktionalität

Carsten Knoll, Umsetzungshinweise 22/24

Page 24: Kommunikation mit externen Gerätenknoll/python/material/SommerkursPython... · Kommunikation mit externen Geräten Carsten Knoll TU Dresden, Institut für Regelungs- und Steuerungstheorie

Vorschläge für Übungsaufgaben

1 Eine Funktion schreiben, die die Docstrings folgenderbuiltin-Funktionen auf dem Bildschirm ausgibt: bin, hex, oct,ord, chr, int

Hinweis: Jeweils das .__doc__-Attribut nutzen.2 Eine Funktion schreiben, die 8 Bit in ein entsprechendes Byte

umwandelt und auf dem Bildschirm ausgibt (Dezimal, Hex-Code,und als ASCII-Zeichen)

3 Ein Programm schreiben welches die Bit-Folge (1,0,1,1,0,0) auf BitNr. 3 der parallelen Schnittstelle wiederholt ausgibt. Taktfrequenz:0,5Hz.Hinweis: time-Modul

Carsten Knoll, Umsetzungshinweise 23/24

Page 25: Kommunikation mit externen Gerätenknoll/python/material/SommerkursPython... · Kommunikation mit externen Geräten Carsten Knoll TU Dresden, Institut für Regelungs- und Steuerungstheorie

Links

http://pyserial.sourceforge.net

http://pyserial.sourceforge.net/pyparallel.html

http://pyvisa.sourceforge.net/

http://docs.python.org/library/socket.html

http://docs.python.org/library/ctypes.html

http://www.arduino.cc

http://www.arduino.cc/playground/Interfacing/Python

http://wiki.python.org/moin/BitwiseOperators

Carsten Knoll, Umsetzungshinweise 24/24