Port Szeregowy w Windows i Python, cz. I i II

Transkrypt

Port Szeregowy w Windows i Python, cz. I i II
Politechnika Rzeszowska
Wydział Budowy Maszyn i Lotnictwa
Katedra Mechaniki i Robotyki Stosowanej
Instrukcja do Laboratorium z KSP:
Port Szeregowy w Windows i Python, cz. I i
II
Autor:
Paweł Penar
1
Cel ćwiczenia
Celem ćwiczenia jest:
• zapoznanie studentów obsługą portu COM w systemie Windows
• zapoznanie studentów z podstawami języka Python
• zapoznanie studentów z obsługą portu COM w języku Python.
2
Zapoznanie z emulatorem połączenia typu null-modem
Celem tego podpunktu jest zapoznanie się z portem COMx, który reprezentuje RS232 z interfejsem UART (o nim na kolejnych ćwiczeniach).
Z pomocą prowadzącego zrealizuj następujące zadania
• Sprawdź w Menadżerze urządzeń
połączona w parę
jaka para portów COMx i COMy jest (wirtualnie)
• Sprawdź czy zainstalowano program putty. Jeśli nie, to zainstaluj go pobierając z: http:
//www.chiark.greenend.org.uk/~sgtatham/putty/download.html
• Z użyciem dwóch instancji programu putty prześlij swoje imię i nazwisko pomiędzy terminalami połączonymi z portami COMxi COMy zidentyfikowanymi w wcześniej.
• Odpowiedz na pytanie: Dlaczego na konsoli, w której wprowadzamy tekst nie jest on widoczny ?
• Do portu COMx podłącz program monitorujący Com Port Monitor (jeśli potrzeba to pobierz (http://www.awavo.com/serial-port-monitor/) i zainstaluj ) a do portu COMy
konsole putty.
• Jak należy interpretować liczby które są widoczne w monitorze, gdy na port COMy (podłączony do putty) wysyłane są informacje ?
3
Wstęp do języka Python
3.1
Python - odnośniki do zasobów internetowych
Należy zapoznać się z następującymi stronami internetowymi
• https://www.python.org/ strona domowa języka Python
• http://winpython.github.io/ Paczka pod system Windows zawierający kompilator Pythona, zbiór pakietów (bibliotek) (m.in numpy, scipy, pyserial) w tym bibliotekę QT z
programem QtDesigner oraz narzędzia do zarządzania pakietami (bibliotekami)
• http://www.learnpython.org/pl/ samouczek Python’a
• http://www.python.rk.edu.pl/w/p/podstawy/ Kurs Python’a
Uwaga: Stosujemy Python w wersji 2.7
1
3.2
Python - Hello World
W tym punkcie należy napisać swój pierwszy skrypt w Pythonie. Jednak nim to zostanie zrobione
należy poczytać o wcięciach w Pythonie, np. tu: http://pl.wikibooks.org/wiki/Zanurkuj_
w_Pythonie
Następnie, używając dowolnego edytora tekstu, w wybranym przez siebie miejscu (jednak najlepiej tam, gdzie umieszczono program WinPython Command Prompt) utworzyć plik
skrypt1.py w którym powinien znaleźć się kod:
x=2
i f x==2:
p r i n t ”To j e s t dwa”
else :
p r i n t ”To n i e j e s t dwa”
By wykonać skrypt zapisany w pliku skrypt.py należy wykorzystać terminal WinPython
Command Prompt i wywołać polecenie python skrypt.py.
Uwaga: Jeśli skrypt jest w innym folderze niż WinPython Command Prompt, należy w konsoli zmienić aktualny folder, korzystając z komendy cd, np. cd c:
Drugim sposobem na utworzenie pliku skrypt1.py jest użycie narzędzia IDLE, które koloruje
składnie i pozwala na łatwe wykonywanie skryptów w nim stworzonych. Po jego uruchomieniu
należy wybrać File → New File by stworzyć nowy plik skryptu. Po jego napisaniu i zapisaniu,
wybierając z menu edytora tekstu Run → Run Module (skrót: F5), wykonamy program w konsoli.
3.3
Zadania do wykonania
Korzystając z zasobów strony http://www.learnpython.org/pl/ napisać:
• Pętle for która wypisze liczby od 0 do 10
• Napisać dwie instrukcje warunkowe wykorzystujące trzy dowolne funkcje logiczne
• Napisać funkcje, która dla podanych współczynników równania kwadratowego wyznaczy
wyróżnik kwadratowy, tj. tzw. Deltę.
4
Pakiet pyserial
Pakiet pyserial oferuje API do Python’a które pozwala na łatwy dostęp do portu szeregowego w różnych systemach operacyjnych. Więcej informacji o pakiecie znajduje się na stronie
domowej projektu, tj. http://pyserial.sourceforge.net/. Co więcej, pakiet jest domyślnie zainstalowany w pakiecie WinPython. Dodatkowo, pod adresem http://pyserial.
sourceforge.net/shortintro.html, znajduje się krótki wstęp do pakietu pokazujący API oraz
podstawowe metody klasy Serial, która odpowiada za połączenie z portem COM.
Korzystanie z pakietu należy rozpocząć od importu pakietu do pliku skryptu, tj.:
import s e r i a l
Następnie do zmiennej port, przypiszemy nową instancje klasy Serial, która zostanie podłączona
do portu COM1.
p o r t=s e r i a l . S e r i a l ( ’COM1’ )
2
Dokładny opis klasy i dokumentacja konstruktora (wraz z domyślnymi parametrami połączenia
z portem COM) znajduje się na stronie http://pyserial.sourceforge.net/pyserial_api.
html
Poprawność połączenia z portem COM można sprawdzić za pomocą metody isOpen, np.:
p r i n t p o r t . isOpen ( )
By wypisać nazwę portu, z którym został połączona instancja klasy Serial, zapisana pod
zmienną port, należy wypisać pole name klasy Serial, tj.:
p r i n t p o r t . name
Jeśli zaś chcemy wysłać ciąg liter na port szeregowy należy skorzystać z metody write
p o r t . w r i t e ( ’KSP’ )
Funkcją odwrotną do funkcji wysyłania, jest funkcja czytania, która występuje z różnymi parametrami. Najprostsza jej wersja jest bezparametrowa, a jej użycie jest następujące:
x=p o r t . r e a d ( )
W tym wypadku metoda read odczytuje jeden bajt danych, który może zostać wypisany przez
print. Należy dodać, że metoda read blokuje program, dlatego często za jej wykonanie odpowiada
osobny wątek.
Zamknięcie połączenia z portem COM jest realizowane przez metodę close
port . c l o s e ()
Podsumowując, prosty skrypt używający pakietu pyserial prezentuje poniższy listing:
import s e r i a l
p o r t = s e r i a l . S e r i a l ( ’COM7’ )
i f p o r t . isOpen ( ) :
port . write ( ’ hello ’ )
x=p o r t . r e a d ( )
print x
port . c l o s e ()
4.1
Przydatne uwagi
Poniżej znajdują się dwie uwagi dotyczące przesyłania za pomocą pakietu pyserial liczb całkowitych w zakresie jednego bajta:
• By wysłać liczbę całkowitą przy pomocy metody write należy zastosować przekształcenia
na tablice bajtów, np. kod opakowuje cyfrę dwa w jednoelementową tablice bajtów. Stąd,
wysłanie cyfry dwa z użyciem pakietu pyserial sprowadza się do następującej linii kodu
port . write ( bytearray ( [ 2 ] ) )
Podobnie można wysyłać cyfry w kodzie szesnastkowym
p o r t . w r i t e ( b y t e a r r a y ( [ 0 x02 ] ) )
3
• By odczytać informacje przesłane na port szeregowy jako liczbę całkowitą, tj. jej typ
danych to int, należy skorzystać z funkcji ord, której opis znajduje się tu:
(https://docs.python.org/2/library/functions.html#ord). Można to zilustrować przykładem
x=p o r t . r e a d ( )
p r i n t ord ( x )
4.2
Zadanie do wykonania, cz. I
Wykonaj następujące zadania
1) Zakładając że porty COMx i COMy tworzą parę, napisać skrypt w języku Python, który podłączy się do portu COMx i wyśle dowolny ciąg znaków do portu COMy (port COMy
podłączyć do putty).
2) Napisz drugi skrypt który odbierze (zamiast puttiego) informacje wysłane na port COMy
a następnie dopisze do niej dwa znaki i odeśle do portu COMx.
3) Zmodyfikuj skrypt z pkt 1 tak, by wyświetlił informacje wysłane przez skrypt z pkt. 2.
4.3
Zadanie do wykonania, cz. II
Zapoznaj się z programem Port Device Emulator i wykonaj polecenia z instrukcji która został
do niego dołączona.
Repozytorium (kod) programu PortDeviceEmulator znajduje w serwisie github: https:
//github.com/ppenar/PortDeviceEmulator.
4

Podobne dokumenty