OTO-Ohshima Tamashima Observatory-  Index  Search  Changes  Login

OTO - Ohshima Tamashima Observatory- - RubyでTheSky6・CCDSoftを操り、望遠鏡とCCDを制御する Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

!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」|http://www.amazon.co.jp/Rubyist-Magazine%E5%87%BA%E5%BC%B5%E7%89%88-Ruby-Windows-cuzic/dp/4839926689]]
をご覧くださいが参考になる

以下の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)調べたいメソッドやプロパティをマウスで指定すると、最下部に簡単な説明が表示される。



----
[[技術的な覚書き]]へ戻る

[[OTO-Ohshima Tamashima Observatory-]]トップへ戻る

{{counter}}