in reply to Virtual COM port write

Please wrap your text in <p> and your code in <c> tags so it's readable.

A few things to try:

1. Check the return value of write_settings(): $PortObj->write_settings or die "failed to write_settings";

2. Turn off handshake: $PortObj->handshake("none");

3. Check the return value of write():

my $count_out = $PortObj->write($sendData); warn "write incomplete\n" if $count_out != length($sendData);

4. Wait a little while before closing the port - add a sleep(3); before $PortObj->close(). (Note: Although this may not be needed, a quick skim of the module's docs don't make it clear whether write() is blocking or not.)

Replies are listed 'Best First'.
Re^2: Virtual COM port write
by jismake (Initiate) on Apr 20, 2014 at 12:00 UTC

    Not so lucky yet. I got following error Use of uninitialized value $count_out in numeric ne (!=) at test2.pl line 22. write incomplete

      That means write() returned undef, which means the write failed entirely. Try checking if $^E contains a useful error message: my $count_out = $PortObj->write($sendData) or die "write failed: $^E";

      Try $PortObj->error_msg(1); $PortObj->user_msg(1); right after new() as shown in the module's docs.

      Make sure that your handshake really is none, that depends on how the other side of the serial connection is configured.

        use Win32::SerialPort; use strict; use warnings; $| = 1; #enable autoflush my $PortName = "COM3"; my $sendData = "12345678"; ### SERIAL PORT SETUP ### my $PortObj = new Win32::SerialPort($PortName) or die "Can't open $Por +tName: $^E\n"; $PortObj->error_msg(1); # prints hardware messages like "Framing Err +or" $PortObj->user_msg(1); # prints function messages like "Waiting fo +r CTS" $PortObj->baudrate(57600); $PortObj->parity("none"); $PortObj->databits(8); $PortObj->stopbits(1); $PortObj->handshake("none"); $PortObj->write_settings or die "failed to write_settings"; my $count_out = $PortObj->write($sendData) or die "write failed: $^E"; sleep(3); $PortObj->close() || warn "\nClose failed\n";
        now i have the following error "write failed:the handle is invalid at test2.pl line 23." Other info : iam using Virtual serial port driver 7.2 by eltima software. i use a tool called teraterm where i can send data on one port and receive on other port without any issues. but perl gives the problem :( thanks for your prompt response. jis

        the issue is resolved. iuninstalled strawberry 64 bit on windows 7 - 64 bit. and installed strawbettry 32 bit on windows 7-64 bit it worked then.. strange! <\p> thanks jis