Projekt riešený na Katedre experimentálnej fyziky FMFI UK
Montáž sa pripája k počítaču pomocou sériovej linky (RS232). Keďže moderné notebooky a PC už nemajú sériový port, na pripojenie treba použiť štandardný prevodník USB->RS232, ktorý po pripojení k počítaču vytvorí sériový port. Z dôvodov kompatibility a na základe odporúčania výrobcu montáže sme sa rozhodli pre prevodník s FTDI čipsetom. Nastavenie sériového portu montáže je:
Kompletná inštrukčná sada je dosť obsiahla, keďže montáž je primárne určená pre snímanie panorám fotoaparátmi. Pre naše účely vystačíme iba s niekoľkými príkazmi pre nasmerovanie montáže a zistenie stavu montáže:
Na ovládanie montáže v jazyku Python sme využili knižnicu pyserial.
Aby užívateľ nemusel zisťovať, na ktorom sériovom porte je montáž pripojená, využili sme funkciu v knižnici "pyserial" na zistenie zoznamu portov. Potom otvoríme každý z portov s parametrami ako vyžaduje iPANO (s timeout-om 1 s) a požiadame zariadenie príkazom ":01INF#" o identifikáciu. Ak odpovie ":10INF3600#", montáž je pripojená k danému portu. Inak komunikácia skončí na timeout-e a skúsime ďalší sériový port:
myportdevice='' ports = serial.tools.list_ports.comports(include_links=False) iPANOfound=False for port in ports : print('Checking '+port.device) ser = serial.Serial(port.device,115200, timeout=1) # open serial port ser.write(b':01INF#') s=ser.read(11) if s==b':10INF3600#': print('iPANO mount found on '+port.device) myportdevice=port.device iPANOfound=True break ser.close() if iPANOfound==False: print('iPANO mount not found') quit() |
Na nasmerovanie montáže použijeme príkaz GOTO (":01SSLnTTTTTZZZZZ#") a na zistenie, či je ešte montáž v pohybe, príkaz ":01GAS#". To, že montáž je v pohybe, sa prejaví číslom 1 na 18 mieste textu odpovede. Po príkaze GOTO treba chvíľu počkať, kým sa montáž nerozbehne, inak by sme mohli dostať odpoveď, že montáž (ešte) stojí. Smer, kam sa má montáž otočiť, je uložený v premenných "azimut" a "výška":
command=':01SSL+%s%s#' % (str((int)(100*azimut)).zfill(5),str((int)(100*vyska)).zfill(5)) command=command.encode() #prerobit na postupnost 8-bit znakov ser.write(command) #presun na novu poziciu ser.read(19) #ignorovať odpoveď time.sleep(0.1) #aby sa montáž stihla rozbehnúť ser.write(b':01GAS#') #načítanie pozície a stavu montáže s=ser.read(19) while s[17]== ord('1'): #kód jednotky = je v pohybe ser.write(b':01GAS#') #načítanie pozície a stavu montáže s=ser.read(19) |
Pri meraní v teréne sa ľahko môže stať, že dôjde k výpadku spojenia medzi notebookom a montážou (napríklad pri neopatrnej manipulácii s USB prepojovacími káblami). Keďže niektoré typy meraní môžu trvať až dve hodiny, je kľúčové zabezpečiť, aby sa pri takejto chybe meranie neskončilo, ale aby bola možnosť v ňom po odstránení chyby pokračovať. Naša koncepcia ošetrenia výnimiek je takáto:
Koncept ošetrenia výnimiek v programe:
... try: príkazy komunikácie s portom; except (serial.serialutil.SerialException,IndexError): print('\a') print("Connection to the iPANO mount is lost. Reconnect and press any key...") input('') zopakovanie príkazov komunikácie s portom; ... |
Testovací program načíta postupnosť meracích bodov (deklinácia, azimut) s pripraveného súboru, nasmeruje postupne montáž do jednotlivých smerov, počká jednu sekundu (simulácia merania) a uloží aktuálny smer do výstupného súboru. Keďž počítame zo zabudovaním programu do GUI, na otvorenie súboru a voľbu mena výstupného súboru sme použili funkcie "filedialog.askopenfilename()" a "filedialog.asksaveasfilename()" z knižnice "tkinter".
Celý testovací program: ipano.py