スーの道具箱/
気まぐれ日記/2003-08-04
の編集
[
ホーム
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
Top
>
気まぐれ日記
> 2003-08-04
***スクリプトで通信 Windows上のスクリプト系言語でシリアル通信ができないか考え中。~ まずはWSH(VBS)で挑戦。~ 当然ながらActiveXを使用しないと通信できません。~ MSComm.ocxの開発ライセンスが入っているパソコンなら、MSCommもありかなとか思いつつテスト。~ #code(vb){{ Set MSComm1 = CreateObject("MSCOMMLib.MSComm.1") MSComm1.CommPort = 1 MSComm1.Settings = "9600,n,8,1" MSComm1.Handshaking = 0 MSComm1.PortOpen = True strNew = MSComm1.Input '******** 中略 ******** MSComm1.PortOpen = False Set MSComm1 = Nothing }} 開発ライセンスが入っててもVisualStudio以外で使用できるかわからないので没。~ ExcelでMSCommを使っているサンプルをたまに見かけるけど、ライセンスはどうなってるんだろう...~ 次はperlで挑戦。~ [[ActivePerl:http://www.activestate.com/Solutions/Programmer/Perl.plex]]の[[FAQ:http://aspn.activestate.com/ASPN/docs/ActivePerl/faq/Windows/ActivePerl-Winfaq8.html]]によると、perlでも普通にファイルとしてオープンすれば良いらしい。~ #code(perl){{ open(PORT, "+>COM1") || die "Can't open COM1: $!"; for(;;){ if(read(PORT, $new, 1)){ last if($new eq "\n"); $line .= $new; }else{ sleep 1; } } print $line . "\n"; close PORT; }} お手軽だけど、ボーレート等のAPIを使わないとダメみたい。~ PPM> install Win32-API でWin32::[[API:http://dada.perl.it/]]をインストール。~ 使い方をWebで検索していたら、シリアル通信用のWin32::[[SerialPort:http://members.aol.com/Bbirthisel/]]という素敵な物がHit。~ 早速、~ PPM> install Win32-SerialPort '''Error installing package 'Win32-SerialPort': Read a PPD for 'Win32-SerialPort', ''' '''but it is not intended for this build of Perl (MSWin32-x86-multi-thread)''' このバージョン用のppmがなくてガックリ。渋々手動でインストール。~ #code(perl){{ use Win32::SerialPort; $PortObj = new Win32::SerialPort("COM1") || die "Can't open COM1: $^E\n"; $PortObj->databits(8); $PortObj->baudrate(9600); $PortObj->parity("none"); $PortObj->stopbits(1); $PortObj->handshake("none"); $PortObj->buffers(4096, 4096); $PortObj->write_settings; do{ select(undef, undef, undef, 0.1); $line = $PortObj->streamline; }until(length($line) > 0); print $line . "\n"; $PortObj->close; undef $PortObj; }} まだ蛇は使ってないです。Rubyの方が良いかな。~
タイムスタンプを変更しない
***スクリプトで通信 Windows上のスクリプト系言語でシリアル通信ができないか考え中。~ まずはWSH(VBS)で挑戦。~ 当然ながらActiveXを使用しないと通信できません。~ MSComm.ocxの開発ライセンスが入っているパソコンなら、MSCommもありかなとか思いつつテスト。~ #code(vb){{ Set MSComm1 = CreateObject("MSCOMMLib.MSComm.1") MSComm1.CommPort = 1 MSComm1.Settings = "9600,n,8,1" MSComm1.Handshaking = 0 MSComm1.PortOpen = True strNew = MSComm1.Input '******** 中略 ******** MSComm1.PortOpen = False Set MSComm1 = Nothing }} 開発ライセンスが入っててもVisualStudio以外で使用できるかわからないので没。~ ExcelでMSCommを使っているサンプルをたまに見かけるけど、ライセンスはどうなってるんだろう...~ 次はperlで挑戦。~ [[ActivePerl:http://www.activestate.com/Solutions/Programmer/Perl.plex]]の[[FAQ:http://aspn.activestate.com/ASPN/docs/ActivePerl/faq/Windows/ActivePerl-Winfaq8.html]]によると、perlでも普通にファイルとしてオープンすれば良いらしい。~ #code(perl){{ open(PORT, "+>COM1") || die "Can't open COM1: $!"; for(;;){ if(read(PORT, $new, 1)){ last if($new eq "\n"); $line .= $new; }else{ sleep 1; } } print $line . "\n"; close PORT; }} お手軽だけど、ボーレート等のAPIを使わないとダメみたい。~ PPM> install Win32-API でWin32::[[API:http://dada.perl.it/]]をインストール。~ 使い方をWebで検索していたら、シリアル通信用のWin32::[[SerialPort:http://members.aol.com/Bbirthisel/]]という素敵な物がHit。~ 早速、~ PPM> install Win32-SerialPort '''Error installing package 'Win32-SerialPort': Read a PPD for 'Win32-SerialPort', ''' '''but it is not intended for this build of Perl (MSWin32-x86-multi-thread)''' このバージョン用のppmがなくてガックリ。渋々手動でインストール。~ #code(perl){{ use Win32::SerialPort; $PortObj = new Win32::SerialPort("COM1") || die "Can't open COM1: $^E\n"; $PortObj->databits(8); $PortObj->baudrate(9600); $PortObj->parity("none"); $PortObj->stopbits(1); $PortObj->handshake("none"); $PortObj->buffers(4096, 4096); $PortObj->write_settings; do{ select(undef, undef, undef, 0.1); $line = $PortObj->streamline; }until(length($line) > 0); print $line . "\n"; $PortObj->close; undef $PortObj; }} まだ蛇は使ってないです。Rubyの方が良いかな。~
テキスト整形のルールを表示する