rubyでRS232C


LinuxとWindowsの違い
RS232CのないPCも増えてきたが、装置の制御にはまだまだ使える。個人的にはGPIBの方が好きだが、今回はボードなどが見つからなかったので、RS232Cを使うことになった。 普段ならLinuxから制御するのだが、今回はWindowsを使わざるを得なかった。まあ、それほど違わないだろうと思っていたが、LinuxとWindowsでかなりやり方が違った。 Linuxでは、

r=open("/dev/ttyS0","r+")
system("stty raw -echo -crtscts 9600 -parenb cs8 -ctsopb < /dev/ttyS0")
r.write("read\n")
print r.gets("\x0d\x0a")

という感じでやっている。Windowsでは、いろいろと調べたり試したりした結果、

system("mode com1 baud=9600 parity=N data=8 stop=1")
r=open("com1","r+")
r.write("read\n")
s=""
s<<r.sysread(1) until s[-1]==10
print s

というようになった。本当はsyswriteにすべきかも知れないが、writeでもとりあえずは動いている。しかし、readでは動かなくてしばらく悪戦苦闘していた。自分でLFを探さなければならないのも少し面倒だ。 まあ、苦労したおかげで、実験が多少楽にできるようになった。