Rubyの魔神 このページをアンテナに追加 RSSフィード

   「Ruby」は宝石の魔神のイメージ(The Jinn of the Ruby)
[DMY] [VB] [VB6] [Python] [C#] [Android] [電子工作] [個人メモ] [仕事メモ] [アイデア] [TstLink] [CE] [LTSA]
[自動化] [Qt] [OCaml] [3Dプリンタ] [TOOLS] [RAA] [Forge]
  [機能別索引] [逆引きRuby] [マニュアル] [るびま] [標準ライブラリ] [るりまサーチ] [Try! Ruby] [PRaggerまとめ] [ピジョン・ブラッド]
   [Rubyコーディング規約] [プログラミングのオキテ] [Rubyist SNS] [TOOLBIS]
   [RubyネットワークProg] [druby] [コードなにがし] [RDocテンプレ] [Ruby/Tkサンプル]
   [WAVE] [Xperia] [github] [twitterなど] [EA] [マクロ]

2008-07-18

連続着信試験用スクリプト

17:04 | 連続着信試験用スクリプト - Rubyの魔神 を含むブックマーク はてなブックマーク - 連続着信試験用スクリプト - Rubyの魔神 連続着信試験用スクリプト - Rubyの魔神 のブックマークコメント

Ruby用シリアル(RS-232C)通信ライブラリ(wincom.rb)(Windows用)

http://www.texcell.co.jp/ruby/wincom/rubywincom.html

とモデムを使った連続着信試験スクリプトです。


xxxxxxxxxxx:かけ先の電話番号


普段はteraTermのマクロでやるのですが、rubyで書いてみました。

動きは単純で電話をかけて、"NO CARRIER"が出ると3分待って(連続発振規制(BLACKLISTED)防止)

再度かけます。

製品が連続着信でも問題が出ないことを確認するのに使います。


require "wincom"
require 'logger'

class Modem
  def initialize
    @logger = Logger.new('logfile.log')
    @logger.level = Logger::DEBUG
    @com1 = Serial.new
    @logger.debug "initialize"
    @counter = 0
  end

  def comOpen
    @com1.open(1,0x1807,9600,8,0,0,256,256)
    @logger.debug "open"
  end

  def comClose
    @com1.close
    @logger.debug "close"
  end

  def modemCall(dial)
    @com1.send("ATD#{dial}\r\n")
    @logger.debug "call #{dial}"
  end

  def modemDisconnect
    @com1.send("ATH\r\n")
    @logger.debug "Disconnect"
  end

  def recvSio
    sr = nil
    while sr == nil
      sr = @com1.receive
    end
    @logger.debug "read #{sr}"
    sr
  end

  def isReceived?(mes)
    rcv = ""
    while 1
      r =  recvSio
      puts r
      rcv = rcv + r
      if rcv =~ /#{mes}/ then
        @logger.debug "[#{mes}] received"
        return
      end
    end
  end

  def callTest(dial)
    @counter = @counter + 1
    @logger.debug "callTest No.#{@counter}"
    modemCall(dial)
    isReceived?("NO CARRIER")
    sleep 3
    modemDisconnect
    isReceived?("ATH")
    sleep 60*3
  end

  def main
    @logger.debug "main"
    comOpen
    while 1
      callTest("xxxxxxxxxxx")
    end
     comClose
  end
end


md = Modem.new
md.main
トラックバック - http://ruby.g.hatena.ne.jp/garyo/20080718