RS-232Cの制御


ruby-serialportを使って
RS-232Cの信号線としては、TxD,RxD以外に、出力としてRTS,DTRが、入力としてCTS,DSR,DCD,RIがある。これらをLinuxから制御する方法として、ioctlを使うこともできるが、rubyのserialportを使うと簡単であることが分かった。 まず、インストールをする。

aptitude install ruby-serialport

使い方は、以下のような感じである。

require 'serialport'
sp=SerialPort.new('/dev/ttyUSB0',9600,8,1,SerialPort::NONE)
sp.flow_control = SerialPort::NONE
sp.close

ソースを見ると、methodとしては、以下のものがある。

get_modem_params
set_modem_params
modem_params
modem_params=
baud
baud=
data_bits
data_bits=
stop_bits
stop_bits=
parity
parity=
flow_control=
flow_control
read_timeout
read_timeout=
write_timeout
write_timeout=
break
signals
get_signals
rts
rts=
dtr
dtr=
cts
dsr
dcd
ri
flush_input
flush_output

rtsとdtrは0または1を入れると、出力ができる。入力は、それぞれの信号線の名前と同じ名前のmethodで読むことができる。 出力の数は少ないが、簡単なICの制御などには使えそうである。汎用性も高いし。