スクリプトで通信
Windows上のスクリプト系言語でシリアル通信ができないか考え中。
まずはWSH(VBS)で挑戦。
当然ながらActiveXを使用しないと通信できません。
MSComm.ocxの開発ライセンスが入っているパソコンなら、MSCommもありかなとか思いつつテスト。
| 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のFAQによると、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をインストール。
使い方をWebで検索していたら、シリアル通信用のWin32::SerialPortという素敵な物が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がなくてガックリ。渋々手動でインストール。
| 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の方が良いかな。