为何在读取串行端口时未填充我的阵列已确认与串行监视器通信

问题描述

我让此网页运行以下PHP脚本1k0_base.PHP

输出以下内容

enter image description here

代码如下(不包括无关或敏感信息):

include 'PHPSerial.PHP';

$serial = new PHPSerial;
    $serial->deviceSet("COM5");
    $serial->confBaudrate(9600);
    $serial->confParity("none");
    $serial->confCharacterLength(8);
    $serial->confStopBits(1);
    $serial->confFlowControl("none");

$serial->deviceopen();
$readx = $serial->readPortLine(100,"\n");
echo nl2br("\n".$readx."\n\n");
$read0 = $serial->readPortLine(24,"");
echo nl2br("\n".$read0."\n\n");
//$read1 = $serial->readPortLine(24,"");
$serial -> deviceClose();
$readxx = explode(" ",$readx);
print_r($readxx);
echo nl2br("\n".$readxx[0]."\n"); //test
$read00 = explode(" ",$read0);
print_r($read00);
//$read11 = explode(" ",$read1);
$arrCount = count($read00);
for($x=0;$x<$arrCount;$x++){
    $m=1;
    if ($read00[$x]>0){
        $m=$read00[$x];
        break;
    }
}
$massCharNum = $x;
for($x=0;$x<$arrCount;$x++){
    $unit=1;
    if (ctype_alpha($read00[$x])){
        $unit=$read00[$x];
        break;
    }
}

date_default_timezone_set('America/Denver');
echo nl2br("\n\nDebug String: ".$read0."\n");
echo nl2br("Mass: ".$m."\n");
echo nl2br("Unit: ".$unit."\n");
echo nl2br("Time: ".date("n/j/y H:i:s",time())."\n\n");

我正在通过R232> RS232扩展器连接到电子秤,如设备管理器中标识的Prolific USB到串行通信端口(COM5)。

我使用的arduino IDE能够读取COM5端口并与之通信,并且我已确认每5秒打印一次数据。

代码显示可与其他规模的数据监控串行到USB通信配合使用,唯一的区别是使用通过DB9 RS232到此Prolific USB-to-Serial的传输。

以下是我正在使用的秤的串行通讯数据表(与按预期使用代码的其他秤相同)。

enter image description here

下一张图片是我正在使用的PHPSerial.PHP摘要,不确定在读取端口行时为什么我的代码返回空字符串和数组。即使串行监视器正在显示其打印内容。当我强制COM5端口繁忙并断开连接时,代码也会中断。因此,代码知道它已连接,但仍不读取它正在打印的值。

enter image description here

图片在Arduino IDE上验证COM5串行打印语句

enter image description here

解决方法

已解决:事实证明PHP在读取串行数据方面不强壮(见图),经过多次尝试使代码与串行到USB连接上的Prolific驱动程序配合使用后,我放弃了,买了一个串行带有更标准FTDI驱动器芯片组的to-USB电缆。事实证明,这足以使Phpserial.php读取传入的数据。如果有人对为什么会这样更清楚或更详细的解释,我希望能听到反馈和想法。