hirax.net::inside out::2009年07月26日

最新記事(inside out)へ  |   年と月を指定して記事を読む(クリック!)

2009年6月 を読む << 2009年7月 を読む >> 2009年8月 を読む

2009-07-26[n年前へ]

シリアルポートで受信した内容を最前面アプリにキー送信するRubyスクリプト 

 10年以上前、自分の勉強がてら、シリアル・ポートで受信した内容をエクセルに貼り付けるプログラムをC++で作りました。確か、Windows 98が出た頃で、Windows 2000が出る前だったと思います。

 今日、久しぶりに、Windowsでシリアル・ポートで受信した内容をエクセルに貼り付けるプログラムを作り直したくなりました。そこで、Rubyで「シリアル・ポートで受信した内容を最前面アプリにキー送信するスクリプト」を書いてみました。

 といっても、スレッドを使いシリアル・ポート送受信を行うRubyのクラス"ComThread"は、少し前に書いています。また、Windowsの(キー操作やマウス操作などを扱う)各種APIを使うためのRubyクラス"Win32GuiTest"も、同じように書いてあります。

 ということは、その2つを使うと、こんな風に「シリアル・ポートで受信した内容を最前面アプリにキー送信するRubyスクリプト」を簡単に書くことができます。

require 'comThread'
require 'win32GuiTest'
  
class SendKeyComThread < ComThread
  def receive(data)
    @gui=Win32GuiTest.new
    @gui.sendKeys data.strip+"{ENTER}"
  end
end

skCom=SendKeyComThread.new(1,
        Queue.new,nil,0x1807, 9600) 
skCom.start(:receive=>true)
sleep 60
skCom.stop
 これだけで?という感じですが、これだけです。このスクリプトを走らせれば、COM1に(9600bpsで)受信した内容を最前面ウィンドーに送信することが(60秒間)できます。

 このサンプル・ソースと必要なファイルは、ここに置きました(wincom.rbも必要です)。

 計測器等を使う人であれば、この手のスクリプトは結構便利に感じるのではないでしょうか?こうしたスクリプトを書き、自分が使っている計測器や機器の送出コマンドに合わせたデータ加工正規表現を書き、"receive"メソッドをオーバーライドするのがシェフのお勧めメニューになります。もちろん、RubyScript2exeで、アプリケーション化しておけば、さらに便利だと思います。