ASCOM to bardzo poręczna platforma zapewniająca ustandaryzowaną obsługę sprzętu astronomicznego. Producenci sprzętu dostarczają sterowniki, a aplikacje końcowe jak PHD, czy Nebulosity mogą od razu je obsługiwać. Dla programistów chcących pisać sterowniki albo wykorzystywać API w aplikacjach końcowych czeka sporo grzebania w surowej dokumentacji. Dodatkowo nieco pomocna może okazać się lista dyskusyjna. Daleko ASCOMowi do np. dokumentacji Django, ale mimo to - da się tego używać.
Na dzień dobry oprócz samej platformy instalujemy dodatkowe komponenty dla programistów dostarczające potrzebne biblioteki jak i dokumentację. ASCOM wykorzystuje platformę .NET, ale można tworzyć aplikacje końcowe w wielu innych językach wykorzystując technologię COM.
Dokumentację znajdziemy w Program Files/ASCOM/Platform 6 Developer Components/Developer Documentation (lub "Program Files (x86)" w 64-bitowych Windowsach). Najbardziej interesujący jest manual PlatformDeveloperHelp.chm - zawiera on kilka przykładów oraz całą przestrzeń nazw biblioteka ASCOMa.
API dla aplikacji końcowych
Aplikacje końcowe (użytkowe) - czyli te, co chcą kontrolować sprzęt astronomiczny poprzez ASCOM - np. kamerę, czy montaż. W takich przypadkach wykorzystujemy ASCOM.DriverAccess oferujące API do obsługi kopuł, kamer, kół filtrowych. focuserów, rotatorów, czy montaży. W PlatformDeveloperHelp.chm znajdziemy całą przestrzeń nazw ładnie "opisaną".
Python i COM
Dla języków spoza rodziny .NET udostępniono API poprzez COM. Oto przykładowy skrypt Pythona, który nakazuje montażowi skierować teleskop na podane koordynaty:
Za pomocą win32com.client.Dispatch ładujemy bibliotekę, lub jak w tym przypadku sterownik-urządzenie. Jako "Celestron.Telescope" przedstawia się sterownik Celestrona do montaży (swoich i SkyWatchera). Sterownik ten ma API dokładnie takie jak ASCOM.DriverAccess.Telescope. Na początku trzeba "połączyć" się z urządzeniem ustawiając właściwość "Connected" na True. Własność Tracking włącza śledzenie (domyślnie Sideral). Metoda "SlewToCoordinates" ustawi montaż tak by teleskop celował w podane koordynaty (RightAscension, Declination).
Żeby obsługiwać sprzęt, który użytkownik chce trzeba dać mu opcję wyboru. W powyższym przykładzie użyłem "Celestron.Telescope". Identyfikator sprzętu, który użytkownik wybrał zwraca ASCOM.Utilities.Chooser.
Chooser potrafi wybierać każdy typ sprzętu obsługiwany przez ASCOM. Metoda Choose wyświetli okno dialogowe i po jego zamknięciu zwróci identyfikator sterownika-sprzętu. Ustawienia zmienione w oknie dialogowym zostaną zapisane w tle.


IronPython
IronPython to implementacja Pythona na platformie .NET. Implementacja ta może wykorzystywać biblioteki .NET
API jest to samo, tylko inaczej się importuje. W katalogu ze skryptem umieściłem także bibliotekę ASCOM.DriverAccess.dll z Program Files/ASCOM/Platform 6 Developer Components/Components/Platform6. Skrypt wykonujemy interpreterem IronPythona - ipy.exe.
W przypadku np. kamer wygląda to podobnie:"Zdjęcie" otrzymujemy w postaci tablicy, którą następnie należy zapisać. Na chwilę obecną nie mam gotowego rozwiązania. W przypadku .NET może to być biblioteka CSharpFITS, a w przypadku Pythona pyFITS. W przypadku CSharpFITS potrzebna będzie także biblioteka nunit - trzeba będzie dołączyć nunit.framework.dll by CSharpFITS mógł się poprawnie załadować.



