#!/usr/bin/perl use warnings; use strict; use Win32::SerialPort; my $serial_port = new Win32::SerialPort('COM3'); $serial_port->handshake('none'); $serial_port->baudrate(9600); $serial_port->parity('odd'); $serial_port->databits(7); $serial_port->stopbits(1); $serial_port->buffers(256, 256); $serial_port->read_interval(0); #RI $serial_port->read_const_time(20); #RC $serial_port->write_char_time(1); #WM $serial_port->write_const_time(100); #WC $serial_port->write_settings || undef $serial_port; $serial_port->save('pump.cfg') if $serial_port; #### #!/usr/bin/perl use strict; use warnings; use Win32::SerialPort; use Data::Dumper; my $serial_port = start Win32::SerialPort('pump.cfg'); $serial_port->write_settings; $serial_port->write("aU\n"); # Asks pump 'a' for its version information my $response = $serial_port->input; print Dumper($response); # Expected response: CV02.00.A #### #!/usr/bin/perl use strict; use warnings; use Win32::SerialPort; use Data::Dumper; my $serial_port = start Win32::SerialPort('pump.cfg'); $serial_port->write_settings; $serial_port->write("aU\n"); # Asks pump 'a' for its version information sleep(1); my $response = $serial_port->input; print Dumper($response); # Expected response: CV02.00.A #### my $serial_port = tie (*FH, 'Win32::SerialPort', 'pump.cfg') || die "Can't tie: $^E\n"; print FH "aU\n"; sleep(1); # Same result w/ and w/o the sleep here my @response = ; print join "\n", @response; #### my $serial_port = start Win32::SerialPort('pump.cfg'); $serial_port->write_settings; $serial_port->write("aU\n"); sleep(1); # Same result w/ and w/o sleep here too while (1) { my ($rb, $byte) = $serial_port->read(1); if ($rb > 0) { print $byte; } else { last; } }