RubyでTheSky6を操る
RubyでTheSky6を通して望遠鏡を制御するには(2009.01.19)
ミードのLX-200R望遠鏡の制御はもっぱらTheSky6で行っているが、TheSky6のHelpにはいくつもの言語からスクリプトによる制御が可能であると書かれてあり、喜んだ。しかし、SoftwareBisqueのユーザーサポートサイトにはVB Scriptによる例がたっぷりと書かれてはあるが、その他の言語の場合がちっとも書かれていない。具体的にその他の言語でどうやったらよいのか。 その後Rubyの勉強をしていて、その方法がやっとわかった。ここでは、RubyとそのWIN32OLEライブラリ (Ruby-1.8以降では標準添付されている)を使って望遠鏡を制御する実例を示す。
要は、TheSky6はWindowsのCOM(OLE)オブジェクトというものを使って望遠鏡を制御していて、そのCOM(OLE)というものは、どんな言語からでも利用できるようになっているようだ。 TheSky6はそのAPIを公開しているので、使いやすくなっているのである。 Rubyでは、Windows用のCOMオブジェクトを使うライブラリWIN32OLEが利用できるので、 それを使ってTheSky6を操作することにする。
なお、WIN32OLEライブラリそのものの使い方については、次のURLや
- http://www.morijp.com/masarl/homepage3.nifty.com/masarl/article/ruby-win32ole.html
- http://jp.rubyist.net/magazine/?0003-Win32OLE
- 書籍 「Rubyist Magazine出張版 Ruby on Windows」
が参考になる。
以下のrubyコードは、望遠鏡をジョグで10分角だけ南または北に移動させる操作を行うプログラムである。 TheSky6の望遠鏡シミュレータで動作を確認した。
#see http://www.morijp.com/masarl/homepage3.nifty.com/masarl/article/ruby-win32ole/excel-1.html
# tested on 20090119 with TheSkyTele6 and the Simulator by O.Ohshima
require 'win32ole'
class WIN32OLE
@const_defined = Hash.new
def WIN32OLE.new_with_const(prog_id, const_name_space)
result = WIN32OLE.new(prog_id)
unless @const_defined[const_name_space] then
WIN32OLE.const_load(result, const_name_space)
@const_defined[const_name_space] = true
end
return result
end
end
module TheSkyTele
def TheSkyTele.new()
theskytele = WIN32OLE.new_with_const('TheSky6.RASCOMTele', TheSkyTele)
# prog_idの前半部"TheSky6."は、オブジェクトブラウザー上では"TheSky6Library"と表示
# されているもの。後半の".RASCOMTele"は、オブジェクトブラウザーのクラス上では
# "TheSkyRASCOMTele"と表示されているものに相当する
return theskytele
end
def TheSkyTele.runDuring(&block)
begin
theskytele = new()
block.call(theskytele)
ensure
theskytele.quit
end
end
end
theskytele = TheSkyTele.new()
#theskytele.jog(10.0, "South")
theskytele.jog(10.0, "North")
COM(OLE)の利用法を知る
使いたいCOMオブジェクトをどのように使うかを知りたい時
(1)Excelを立ち上げる(以下はExcel2000での例)
(2)メニューバーの「ツール」→「マクロ」→「VisualBasicEditor」(以下VBEditor)を起動
(3)VBEditorのメニューバーの「ツール」→「参照設定」で参照可能なライブラリの中から使いたいライブラリを選んでチェックし、「OK」
(4)VBEditorのメニューバーの「表示」→「オブジェクトブラウザ」でオブジェクトブラウザのwindowを表示させる
(5)使いたいライブラリを選ぶと、クラスの一覧が表示されるので、調べたいクラスをマウスで指定するとメソッドやプロパティが右に表示される。
(6)調べたいメソッドやプロパティをマウスで指定すると、最下部に簡単な説明が表示される。
技術的な覚書きへ戻る
2877
Keyword(s):
References:[RubyスクリプトでCCDSoftを操りCCDカメラを操作する] [技術的な覚書き]