このウィキの読者になる
更新情報がメールで届きます。
このウィキの読者になる
カテゴリー
最近更新したページ
最新コメント
Synergy by stunning seo guys
RedHat9でyum by stunning seo guys
MRTG by stunning seo guys
rpmbuild by stunning seo guys
WevDAV by awesome things!
ubuntuメモ by check it out
mingplotの導入 by check it out
ServerIron設定メモ by awesome things!
mount by stunning seo guys
FrontPage by check it out
Menu
ここは自由に編集できるエリアです。

信号灯制御プログラム

このプログラムについて

このプログラムはRS232-C接続の信号灯「PHE-3FB」(パトライト社製)を制御するプログラムです。

環境

動作確認OS

WindowsXP SP2
WIndows2003 R2

動作確認rubyバージョン

ruby 1.8.5 (2006-08-25) [i386-mswin32]

動作確認信号灯

PHE-3FB
通信プロトコル等の仕様は以下のURL参照
http://www.patlite.co.jp/product/sensor/phe.html

動作確認はしていませんが、同じ通信プロトコルで制御できるリレーユニットでも使用可能なはずです。
http://www.patlite.co.jp/product/03network/phc.htm...

※注意 パトライト社純正の信号灯では動作しますが、他社のオーダーメイド製品では通信プロトコルが異なるため使用できません。私自身罠にはまりました。

使用ライブラリ

COMポートとの通信は以下のwincom.rbライブラリを使用させて頂いております。

Rubyシリアル通信ライブラリ(Windwos用)
http://www.texcell.co.jp/ruby/wincom/rubywincom.ht...


使い方

コマンドプロンプトから
# ruby patlite.rb -c [on|off] -d [R Y G P p r y g]

-v バージョン表示
-h ヘルプ Usage
-c ランプ/ブザーのON,OFF
-d 動作
R 赤ランプの点灯
Y 黄ランプの点灯
G 緑ランプの点灯
P ブザー(ピピピピピ)
p ブザー(ピーピー)
r 赤ランプの点滅
y 黄ランプの点滅
g 緑ランプの点滅

  • 例1 赤ランプを点灯させる
# ruby patlite.rb -c on -d R

  • 例2 黄ランプを点滅させる+ブザー(ピーピー)
# ruby patlite.rb -c on -d yp

  • 例3 すべてのランプを消す
# ruby patlite.rb -c off -d RYG

[-d]オプションは重複していても一つとして扱われます。
Gを何個書いてもG1個としてのみ扱われます。
  • 例4 緑ランプを点灯させる [-d G]と同じ動作
# ruby patlite.rb -c on -d GGGGG

[-d]オプションの要素はどのような順序でも構いません。
ランプの優先度は 点灯>点滅 です。
ブザーの優先度は ・・・忘れました。

プログラム本体 patlite.rb [version0.1]

require 'optparse'
require "wincom.rb"

######################
flg_header  = '@'
flg_ID1     = '?'
flg_ID2     = '?'
flg_command = 0
flg_data1   = 48  # ASCIIcode 48(30H) = 0
flg_data2   = 48  # ASCIIcode 48(30H) = 0
flg_footer  = '!'


OPTS = {}

############ 引数処理
####	-c on/off 
####	-d R Y G P p r y g 点灯色,ブザー指定
OptionParser.new do |opt|

	Version = "0.1"
	opt.on('-c [value]','switch on/off light') {|v| OPTS[:c] = v }
	opt.on('-d [value]','light-color or BEEP') {|v| OPTS[:d] = v.split(//).uniq }
	
	opt.parse!(ARGV)
end


#### -c -d そのものがない エラー
if ( !(OPTS.key?(:c)) or !(OPTS.key?(:d)) ) then
	print "エラー:オプションが足りないよ\n"
	exit
end

#### -c -d の引数がない = nilの場合 エラー
if ( !(OPTS[:c]) or !(OPTS[:d]) ) then
	print "エラー:引数がないよ\n"
	exit
end

#### -c の中身判別 コマンドデータを更新 on = 1 , off = 0
case OPTS[:c]
when 'on'
	flg_command = 1
when 'off'
	flg_command = 0
else
	print "エラー:-cの中身がおかしいよ\n"
	exit
end


#### -d の中身判別 データ1, データ2を更新
OPTS[:d].each {|input_data|
	case input_data
	when 'R'
		flg_data2+=1
	when 'Y'
		flg_data2+=2
	when 'G'
		flg_data2+=4
	when 'P'
		flg_data2+=8
	when 'p'
		flg_data1+=1
	when 'r'
		flg_data1+=2
	when 'y'
		flg_data1+=4
	when 'g'
		flg_data1+=8
	else
		print "エラー:-dの中身がおかしいよ\n"
		exit
	end
}

#### 送信ASCIIコード決定
send_msg = flg_header + flg_ID1 + flg_ID2 + flg_command.to_s + flg_data1.chr + flg_data2.chr + flg_footer

#### RS232Cコネクト
com1=Serial.new
com1.open(1,0,9600,8,0,0,64,64)
com1.send(send_msg)

com1.close
2007年04月18日(水) 17:09:03 Modified by glass57




スマートフォン版で見る