2012年6月22日金曜日

ruby(i386-mingw32) + serialport gem RS-232Cターミナル


RS-232C 9pin D-SUBのSD-RDをLOOPしてテストしてみた。


C:\rubyapi\ci-v>ruby -v
ruby 1.9.3p194 (2012-04-20) [i386-mingw32]

C:\rubyapi\ci-v>gem list

*** LOCAL GEMS ***

archive-tar-minitar (0.5.2)
bigdecimal (1.1.0)
io-console (0.3)
json (1.7.3)
linecache19 (0.5.13)
minitest (3.1.0)
rake (0.9.2.2)
rdoc (3.12)
ruby_core_source (0.1.5)
rubygems-update (1.8.24)
serialport (1.1.0)

C:\rubyapi\ci-v>type civ_com53_20120622.rb
# -*- encoding: Shift_JIS -*-
require 'serialport'
require 'dl/import'
require "thread"

module MSVCRT           #ruby-list:42280 kara
    extend DL::Importer
    dlload "MSVCRT.DLL"
    extern "int _kbhit()"
    extern "int _getch()"
end

sp = SerialPort.new("COM1",115200)
sp.flow_control=0   # NONE:0 HARD:1 SOFT:2
sp.read_timeout=10
sp.write_timeout=0

p sp.get_modem_params
p sp.get_signals
p sp.flow_control
p sp.read_timeout
p sp.write_timeout

tx_data = Queue.new
  tx = Thread.new{
        loop do
      if tx_data.empty? then
                Thread.stop
          else
            sp.write(tx_data.pop)
      end
        end
        }

loop do
        rx_data = sp.read
        unless rx_data.empty?
                print rx_data
                if rx_data == "\r"
                        print "\n"
                end
        end

        if MSVCRT._kbhit != 0
                ch = MSVCRT._getch
                tx_data.push(ch.chr)
                tx.run
        end
  sleep 0.01
end

sp.close

C:\rubyapi\ci-v>ruby civ_com53_20120622.rb
{"baud"=>115200, "data_bits"=>8, "stop_bits"=>1, "parity"=>0}
{"cts"=>0, "dsr"=>0, "dcd"=>0, "ri"=>0}
0
10
0
01234567890
abcdefghijklmnopqrstuvwxyz







0 件のコメント:

コメントを投稿