gpt4 book ai didi

php - 在 Perl 中读取串口

转载 作者:太空宇宙 更新时间:2023-11-04 10:35:57 24 4
gpt4 key购买 nike

我有点厌倦了读取串口,首先使用Perl Perl 不是我的主要开发工具,我来自PHP背景。所以请以正确的方式指导我。我的目的是从体重机读取数据到网页,我已经对这个主题做了很多研究。

浏览器应用程序无法直接读取串行端口数据,所以我选择用户端机器可以安装服务器 (Apache) 并使用 PHP 完成任务,Web 应用程序可以使用 Ajax 调用 localhost 来读取结果url 这个想法在 Linux 机器上运行良好,但在 Windows PC 上却卡住了。

我知道 PHP 无法在像 Linux 这样的 Windows 中从串行端口读取数据,所以我选择 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;

该代码无法正常工作,但在论坛和许多其他地方它说它像 here 一样工作, here , thisthis .

我找不到这是什么意思“使用 Win32::SerialPort qw(:STAT 0.19);”是不是有点像用版本号导入那个库。 ?

我已经安装了带有 Perl 和 activePerl Win32::serialport 0.22 及其 API 的 Xampp,但是当我运行代码时,它会返回类似这样的错误

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 脚本并返回数据。

最佳答案

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

这是一样的

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

:STAT 导入了一些有用的状态常量,并进行了解释 under Exports在模块的文档中

0.19 是 Perl 的一部分,并且坚持 Win32::SerialPort 的版本必须是 0.19 或更高版本。当前版本为 0.22。如果将 0.19 更改为 0.23 那么您将看到它的效果

关于php - 在 Perl 中读取串口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37498648/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com