自動コントロールの仕組み
下図が天文台システムのフローチャートです。一番左側がハードウェアーで、それをコントロールするソフトウェアー、上位のアプリケーションがあります。点線は各機器とドライバーのハード的な結線を示していますが、実線は、COM(*後述)モデルによるやりとりを示しています。基本的にASCOM準拠のドライバーを基本にコントロールされています。面白いのは、Poth(ASCOM)の部分。通常、ハードウェアーとドライバーは一対一に対応しますが、このPothは、ハブのような振る舞いをし、TheSky6とACP、FocusMaxとの同時接続を可能としています。ACPからPothを通して望遠鏡を動かすと、TheSky6の望遠鏡位置を示すマーカーがちゃんと動き、逆に、TheSky6でターゲットを変えると、ACPの赤経赤緯インジケーターの値が変わります。これはとても便利な機能です。
COMについて
COMは、Windowsに備わるオブジェクトモデル(Component Object Model)ですが、プログラム言語を問わずアクセスすることが出来ます。天文機器の統一的なインターフェース規格「ASCOM」もこのCOMモデルを元に開発されています。COMオブジェクトに対しては、以下に示す方法で簡単にコントロールすることができます。
一番簡単なのは、VBS(Visual Basic Script)からアクセスすることです。
VBSの実行ファイルは、テキストエディダーでコードを書いて、”.VBS”の拡張子で保存するだけで作ることができます。そのファイルをダブルクリックすればプログラムを実行することが出来ます。
たとえば、 このように書けば、MeadLXコマンド準拠の架台を、指定した赤経赤緯に向けることが出来ます。
-
‘<架台のコントロール>
-
Set LXP = CreateObject("LXP.Telescope") ‘ "LXP.Telescope"が、ASCOMのMeadLXドライバーを示します
-
LXP.Connected = True ‘ これでドライバーと望遠鏡が接続します
-
LXP.SlewToCoordinates 5.5 , -5.7 ‘ 赤経赤緯値を実数で与えます。赤経は”時”、赤緯は”度”が単位になります
-
Do While Telescope.Slewing ‘ 架台が動いている間、待ちます
-
wscript.sleep 100
-
Loop
次の例では、MaxImDLに接続されたCCDカメラを接続し、1秒のライトフレームをLフィルター(0番目にセットしたフィルター)で撮影し、”M42_L_001Sec.fit”のファイル名で画像を保存出来ます。
-
‘<CCDカメラで撮影を行う>
-
Set cam = CreateObject("MaxIm.CCDCamera") ‘ こんどは、MaxImDLに対してアクセス
-
cam.LinkEnabled = True ‘ MaxImDLとカメラとの接続を行う
-
cam.Expose 1, 1, 0 ’ 露出を行います。露出時間、ライトフレーム、フィルターを示します
-
Do While Not cam.ImageReady ‘ 露出が終わるまで待ちます
-
wscript.sleep 100
-
Loop
-
cam.SaveImage "M42_L_001Sec.fit" ’ ”M42_L_001Sec.fit”のファイル名で画像を保存
これ以外にも、CCDカメラの冷却温度、ローテーターの回転角や、フォーカサーのポジション、クラウドセンサーの情報を取得するなど、さまざまな自動処理が行えるようになります。もちろん、VBやC++などを使って、普通のアプリケーションの形にすることも出来ます。
以上、見ていただいたように、各ドライバーには、固有の識別名( "LXP.Telescope"や "MaxIm.CCDCamera")があり、そのオブジェクトに対して、属性をみたり、操作したりすることでコントロールします。属性のことをプロパティ、操作するコマンドをメソッドといいます。では、このような情報はどこを見ればよいかというと、アプリケーションの場合は、ヘルプに書かれています。MaxImDLの場合は、HelpのScriptingの項目を見ていただければ、そこにどんなプロパティがあり、どんなメソッドがあるか、メソッドのパラメータは何かなど、詳しく書かれています。ASCOMの場合は、ASCOMがインストールされたフォルダー(普通は、C:\Program Files\Common Files\ASCOM)の下のDocというフォルダーにヘルプファイルがあります。ぜひ、ご自身でご覧になって試してみてください。その可能性の大きさに驚かれることと思います。