Проблемы с передачей на серийный порт в perl (бяда...)

Модератор: Модераторы разделов

Аватара пользователя
antd
Сообщения: 39

Проблемы с передачей на серийный порт в perl

Сообщение antd »

По роду деятельности нужно периодически программировать одну железяку терминалом через обычный асинхронный порт. Программирование - штука очень муторная, занимает до нескольких дней, неизбежны ошибки и тд. Все данные уже есть в электронном виде, можно привести их к общему знаменателю и вбить скриптом... казалось бы :)
Сочинил такую хрень:

Код: Выделить всё

#!/usr/bin/perl -w

use Device::SerialPort;
use strict;

my $port=Device::SerialPort->new("/dev/ttyUSB0");

my $pass;
my $return;
my $count;
my $inflow;

# Port settings

$port->baudrate (9600) || die "Cannot set baudrate";
$port->parity ("none") || die "Cannot set parity";
$port->databits (8) || die "Cannot set databits";
$port->stopbits (1) || die "Cannot set stopbits";
$port->handshake ("none") || die "Cannot set handshake";
$port->dtr_active (1) || die "Cannot set dtr";
#$port->write_char_time(300) || die "NO WCT";

$port->write_settings;

sleep 1;

# Main

$pass = $port->write("\n");  # Даем пинка, чтоб железка очухалась

sleep 1;  # Даем время чтоб сообразила с ответом
($count, $inflow)=$port->read(4096); #Читаем ответ

print "$inflow";  #Убеждаемся что очухалась

$pass = $port->write("0\n");  #Даем команду

sleep 1;
($count, $inflow)=$port->read(4096);  # Читаем ответ

print "$inflow";  # Убеждаемся что дошло

$port->close;



Дык вот... Не доходит. На любую команду (одно- или многосимвольную) железка реагирует как на LF.
Причем $pass возвращает нормальное количество переданных байт.
Если кто сталкивался - поможите, плз, или хотя бы киньте ссылку на внятный пример программирования асинхронного порта.

PS. Менять LF на CR/LF не предлагать - пробовал :(
Спасибо сказали: