Чтение последовательного порта в Perl

Я немного устал читать последовательный порт, используя Perl прежде всего Perl не мой основной инструмент разработки, я из PHP фон.
Поэтому, пожалуйста, ведите меня правильно. Я собираюсь прочитать данные с весов на веб-страницу, я уже провел много исследований по этой теме.

Приложение браузера не может читать данные последовательного порта напрямую, поэтому я выбираю, чтобы пользовательский компьютер мог быть установлен с сервером (Apache), и выполняю задачу с помощью PHP, а веб-приложение может прочитать результат, используя вызов Ajax для localhost url Идея прекрасно работает на машинах с Linux, но на Windows PC она застряла.

Я понимаю, что PHP не может читать данные из последовательного порта в окнах, таких как Linux, поэтому я выбираю Perl для этого. Я провел поиск и получил несколько кодов, и последние 8 часов я борюсь с этим 🙁

#!E:\xampp\perl\bin\perl.exe
# The above line is perl execution path in xampp
# The below line tells the browser, that this script will send html content.
# If you miss this line then it will show "malformed header from script" error.

print "Content-type: text/plain\n\n";
# use strict; use warnings;
use Win32;
require 5.003;
use Win32::SerialPort qw( :STAT 0.19 );
print "here";
$PortObj = new Win32::SerialPort ("COM3") || die "Can't open COM3: $^E\n";
print "here";
$PortObj->user_msg(ON);
$PortObj->databits(8);
$PortObj->baudrate(9600);
$PortObj->parity("none");
$PortObj->stopbits(1);
$PortObj->handshake("rts");
$PortObj->buffers(4096, 4096);

$PortObj->error_msg(1);  # prints major messages like "Framing Error"$PortObj->user_msg(1);

$PortObj->write_settings || undef $PortObj;print "here";
# $PortObj->save($Configuration_File_Name);
$PortObj->read_interval(100);    # max time between read char (milliseconds)
$PortObj->read_char_time(5);     # avg time between read char
$PortObj->read_const_time(100);

print "here";
$string_in = $PortObj->read("200");

print $string_in
# $PortObj->baudrate(300);
# $PortObj->restart($Configuration_File_Name);  # back to 9600 baud

$PortObj->close || die "failed to close";
undef $PortObj;

Код не работает, но на форуме и во многих других местах написано, что работает как Вот , Вот, этот а также этот.

Я не могу найти, что это значит «использовать Win32 :: SerialPort qw (: STAT 0.19);» это что-то вроде импорта этой библиотеки с номером версии. ?

Я уже установил Xampp с Perl и activePerl Win32::serialport 0.22 и его API, но когда я запускаю код, он возвращает ошибку вроде

Error message:
End of script output before headers: serial.pl

Ошибка 500

Любая идея ??

решаемая

Для чтения раздела я использую код ниже.

# warn "here";
my ($ser) = @_;
my ($numChars, $c);
my $line = '';
do {
do {
($numChars, $c) = $PortObj->read(1);
#print "$numChars read=$c\n";
} while ($numChars < 1);
# print $c;
$line .= $c;
} while ($c ne "\n");
print $line;

Код отлично работает из CLI, поэтому я просто поместил PHP-файл, чтобы прочитать сценарий Perl и вернуть данные.

0

Решение

use Win32::SerialPort qw( :STAT 0.19 );

Это так же, как

use Win32::SerialPort ':STAT', '0.19';

:STAT импортирует ряд полезных констант статуса и объясняет под экспорт в документации к модулю

0.19 является частью Perl, и настаивает на том, что версия Win32::SerialPort должно быть 0,19 или позже. Текущая версия 0.22. Если вы измените 0.19 в 0.23 тогда вы увидите эффект, который он имеет

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]