V 24453 I -717 CE -23571 SOC 835 TTG 4559 Alarm OFF Relay OFF AR 0 BMV 600S FW 212 Checksum � 4: H1 -27277 H2 -27277 H3 0 H4 0 H5 0 H6 -48242 H7 17697 H8 28750 H9 140703 H10 1 H11 0 H12 0 Checksum #### #!/usr/bin/perl use warnings; use strict; use Device::SerialPort; my $ccnt; my $string; my $port = '/dev/ttyUSB0'; my $conf = '~/.conf'; my $ob = Device::SerialPort->new($port, 1) || die "Can't open $port: $!"; my $STALL_DEFAULT = 10; my $timeout = $STALL_DEFAULT; my $arb = $ob->can_arbitrary_baud; my $data = $ob->databits(8); my $baud = $ob->baudrate(19200); my $parity = $ob->parity("none"); my $hshake = $ob->handshake("rts"); my $stop = $ob->can_stopbits; my $rs = $ob->is_rs232; my $total = $ob->can_total_timeout; $ob->stopbits(1); $ob->buffers( 4096, 4096 ); $ob->can_baud; $ob->can_databits; $ob->can_dtrdsr; $ob->can_handshake; $ob->can_parity_check; $ob->can_parity_config; $ob->can_parity_enable; $ob->can_rtscts; $ob->can_xonxoff; $ob->can_xon_char; $ob->can_spec_char; $ob->can_interval_timeout; $ob->can_ioctl; $ob->can_status; $ob->can_write_done; $ob->can_modemlines; $ob->can_wait_modemlines; $ob->can_intr_count; $ob->write_settings; print "A = $arb\n", "B = $baud\n", "D = $data\n", "S = $stop\n", "P = $parity\n", "H = $hshake\n", "R = $rs\n", "T = $total"; my ($count, $string); while(1) { $ccnt++; $ob->are_match("Checksum", "\n"); ($count, $string) = $ob->read(500); #read 500 bytes #print "$ccnt: count=$count string=$string\n\n" if ($string); #$string =~ m/(.*?)V\t(\d*)\n\rI\t(\d*)\n\rCE\t(\d*)\n\rSOC\t(\d*)\n\rTTG\t(\d*)\n\r(.*?)/; #my ($v, $i, $ce, $soc, $ttg, $more) = ($1,$2,$3,$4,$5,$6); #print "$ccnt: ($v, $i, $ce, $soc, $ttg, $more)\\n"; $string =~ m/V\t\d*\n/; print "$ccnt: $string\n"; sleep(1); } $ob->write_drain; $ob->close; undef $ob #### ($count, $string) = $ob->read(500); #read 500 bytes