もう,液晶がうす〜くなってきた.修理できるわけでもないし,そこにお金かけるよりは他にかけたい,ということでやってみた.
PCで制御してもいいけど,わざわざPC使うのもね.計測結果の後処理が大変なわけでもないし.
とりあえず,動けばよいという code です.
TDS-303 は,下記のように設定しておきます.もう,内蔵電池が切れているので電源コード接続して放っておいたあと電源を入れると,Backup errorがでます.
そうなると,設定が初期値に戻ってしまうので,毎度設定しないといけません.
それに対応するメモでもあります.
- チャンネルはもちろん設定しておく
- RS232Cは,プログラム通りに設定する
- SWITCH-Cの初期値から,HeaderをOFF,
#!/usr/bin/perl use strict; use warnings; use Device::SerialPort qw( :PARAM :STAT 0.07 ); use Getopt::Std; use Time::Piece qw/localtime/; use Time::Piece (); my $sendDATA; my $measDATA; #----- Display ----- # Screen = SCR my $deviceSCR = '/dev/ttyUSB0'; my $portSCR = &openSCR; while (1) { $sendDATA = "ST\x0d\x0a"; &sendData($portSCR, $sendDATA); # print $sendDATA; # print "\r\n"; $measDATA = &readData($portSCR, 30); print $measDATA; print "\r\n"; sleep(1); } exit 0; #---------------- #----- sub ------ sub sendData { my ($port, $str) = @_; $port->write( $str ) || die; } sub readData { my ($port, $len, $timeout) = @_; my $i = 0; my $j = 0; my $data = ""; if (! defined $timeout) { $timeout = 10; } while ($data !~ /\x0d/i) { my ($l, $d) = $port->read(1); if ($l > 0) { $data .= $d; $i += $l; $j = 0; } else { $j++; if ($timeout > 0 && $j > $timeout) { print STDERR "TIMEOUT to read $len byte\n"; exit 1; } } } return $data; } #----- SCREEN ------ sub openSCR { my $portSCR = new Device::SerialPort($deviceSCR) || die; $portSCR->user_msg(1); $portSCR->error_msg(1); $portSCR->baudrate(19200); $portSCR->databits(8); $portSCR->parity("none"); $portSCR->stopbits(1); $portSCR->handshake("none"); $portSCR->read_const_time(100); # 0.1 sec $portSCR->read_char_time(5); $portSCR; }