Are you getting enough sleep?

いつも眠い.これが睡眠負債というやつか.

TDS-303

もう,液晶がうす〜くなってきた.修理できるわけでもないし,そこにお金かけるよりは他にかけたい,ということでやってみた.
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;
}