1999-04-10[n年前へ]
■シリアルデータをExelへ転送したい
計測器のデータを簡単に入力しよう
計測を行って、解析処理を行いたい時にどうにも入力が面倒なことが多い。処理はExcelなどで行うことが多いのだが、計測したら即座にExcelのワークシートに入力されたら便利である。膨大なデータを計測して、そのデータからどれだけ意味ある情報を抽出することが簡単にできたらいい。そう考えて、シリアルデータ出力を持つ計測器の出力データをExcelへ自動的に送信するソフトを作成した。現在、対応しているソフトは画像関係の計測器の6種類だ。 Tool++はシリアル出力を行うことができる計測器のデータをExcelのシートへ自動入力するソフトウェア。計測すると同時にデータがExcelのシートに取り込まれる。画像出力結果のデータ処理などを簡単に行うことが出来る。
現在、対応している計測器は
- Macbeth社製 RD-1151PB 濃度計
- Macbeth社製 RD-1255 濃度計
- Macbeth社製 RD-914 濃度計
- Macbeth社製 RD-918 濃度計
- X-Rite社製 X-Rite404 濃度計
- 東京電色 かぶり測定器 TC-6DS(I/Fをつくる必要がある。といってもとても簡単なものだ)
ソフトのダウンロード
Tool++の画面
さて、本家「できるかな」のゴン太くんにならい、本サイトでもサブキャラを登場させることにした。称して「ちび太」くんである。今回は、ちび太はせっせと計測しているところだ。MacromediaFlashをいじってみたかったので、Flashのプラグインをインストールしていない人は見えないだろう。内容は大したしたものではない。
計測すると、データはExcelへ自動入力される
2008-06-02[n年前へ]
■騒音メータ「きんりんくん」
町の中を歩いていると、横にきりんが立っていた。黄色くて、首が長い、あの「きりん」だ。動物園の柵の中でぽつんと立っている、あの「きりん」である。そんなきりんが柵の向こうで立っていた。
正確に書けば、町角に騒音監視ロボット「きんりんくん」が置いてあった。「JIS C 1510 」に沿って、20Hzから8kHzまでの30~120dBの範囲を、分解能0.1dBで計ってくれる高性能の黄色いロボットである。
「きんりんくん」というメーカ的なネーミングセンス、それどころか、そのネーミングそのままの形に作ってしまう、という辺りが楽しい。それに、何より、結構かわいい。
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で、アプリケーション化しておけば、さらに便利だと思います。
2009-11-11[n年前へ]
■Rubyシリアル通信用スレッドクラスで簡単なバイナリ受信処理をしてみよう
以前、Rubyでシリアルポート通信(いわゆるRS-232C)を楽に行うためのクラス"ComThread"を作りました(ここが関連ファイルの置き場です)。そのcomThread.rbを使えば、たとえば、COM3で受信した内容をコンソールに出力するだけであれば、このようなコードで動く、というようなものです。
require 'comThread' receiveComThread=ComThread.new({:icomno=>3}) receiveComThread.start({:receive=>true, :receiveMonitor=>true}) sleep 60 receiveComThread.stopこれは、「シリアルポートを使って簡単に各種機器からの情報を取得したり、あるいは操作したりするためのクラス」です。もうひとつ例を挙げれば、「シリアルポートで受信した内容を最前面アプリにキー送信するアプリケーション」くらいであれば、以前書いたように十行程度のコードを書けば「はい、できあがり」という具合に(少なくとも私が良く見るシチュエーションにおいては)割に使いやすいクラスです。
ところで、シリアルポートで送受信を行う機器は多いですが、ものによってはASCII(アスキー)コードでなく、バイナリでデータを送ってくるものもあります。小型の計測器などでは、そんな風にシリアルポート(見かけ上はUSB接続で)経由で出力をバイナリ送信するものも多いかもしれません(もちろん、テキスト送信するものも多いです)。そんな場合でも、簡単なものであれば、comThread.rb でも普通に処理を行うことができます(データが頻繁に大量に送られてくるようなものは扱えません)。
そこで、バイナリデータをシリアルポートに送りつけてくる機器に対応するスクリプトを書いてみましょう。それは、たとえばこんな具合です。
require 'comThread' class Comport def receive(size) rcv=@com.receive ret=nil if rcv!=nil if rcv.length==size aHigh=rcv[0] & 0b00001111 aLow=rcv[1] re+=(aHigh*255+aLow).to_s end end ret end end period=ARGV[0] # time(seconds) Waint 10 # waint to activate teraterm receiveComThread=ComThread.new( {:icomno=>4, :ibaud=>57600}) receiveComThread.start( {:receive=>true, :receiveMonitor=>true, :delimeter=>4}) sleep period receiveComThread.stopこれは「4バイトのデータ列を定期的に出力する機器のデータを(COM4に57600bpsで受信し)パース処理した上で、その結果をテキストに変換しコンソール出力する」というスクリプト例です。
バイナリデータとしては、1バイト目のがハイバイトで、2バイト目がローバイトからなるデータ構成になっていて、さらに、ハイバイトは下位4ビットのみが使われる、というような処理がなされています。
サンプル用に書いたので、本来なら書くべき処理をはしょっています。それでも、数バイト程度のデータが、数秒の時間間隔で送信されるような機器のデータ加工程度の用途であれば、(たまにデータを処理しないで無視してしまうこともあるでしょうが)こんなものでも、(プロトタイピング用途としては)十分使うことができることもあるのではないでしょうか。
ところで、comThread.rbを少し手直ししました。そのため、(今日段階で置いてある)zipファイルは以前作ったものとサンプルソース類となっていて、comThread.rbの方は、今日少し作りなおしたものとなっています。異なるのは、ComThread.start の部分に、delimeter指定が入っていること・メンテナンスがしやすいように内部で使う関数の引数をHash(ハッシュ)で渡すようにした、ということくらいです。とはいえ、そのまま上位互換で使うことができるのではないか、(多分)と思います。動かない場合があれば、メールして頂ければ、時間を作って直しておきます。
ふと気付くと、最近Perlを触っていないような気がします。来週あたりは、Perlでも使って何かしてみることにしましょうか。
2010-09-13[n年前へ]
■シリアルポートからエクセルにデータを張り付けるソフトウェア
十年以上前に作ったソフト、計測器から(かつてRS-232Cと呼ばれていた)シリアルポート経由でデータを受け取りMicrosoft Excelに貼り付けて行くソフトをアップデートしてみました。ずっと昔に作ったソフトウェアですが、もしかしたら、今でも使っていたりする人もいるかもしれませんので、ファイルをここに置いておきます。名前の日付が一番新しいものが最新のファイルになります。
書き直したのは、カーソル移動のためのキー送出部分です。Excel内のVBAを用いていた箇所を、VBAのSendKeysのバグ回避を目的としてAPI使用に書き換えました。