在Perl中读取串口

时间:2016-05-28 11:52:45

标签: php linux perl serial-port

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

浏览器应用程序无法直接读取串口数据,因此我选择用户端机器可以安装服务器(Apache)并使用PHP执行任务,Web应用程序可以使用对{{1}的Ajax调用来读取结果这个想法在Linux机器上运行得很好,但在Windows PC上却停滞不前。

我知道PHP无法从像Linux这样的Windows中的串口读取数据,所以我选择Perl来做这些事情。我做了一些搜索,得到了一些代码,并且持续了8个小时我与之抗争:(

localhost url

代码无法正常运行,但在论坛和许多其他地方,它的工作方式如hereherethisthis

我无法找到这意味着什么"使用Win32 :: SerialPort qw(:STAT 0.19);" 就像导入具有版本号的库一样。 ?

我已经安装了带有Perl和#!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; 的Xampp及其API,但是当我运行代码时,它会返回错误,如

activePerl Win32::serialport 0.22

500错误

任何想法?

解决

对于阅读部分,我使用下面的代码。

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

代码在CLI中工作正常,所以我只是放了一个PHP文件来读取perl脚本并返回数据。

1 个答案:

答案 0 :(得分:1)

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,那么您将看到它具有的效果