问题描述
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的传输。
以下是我正在使用的秤的串行通讯数据表(与按预期使用代码的其他秤相同)。
下一张图片是我正在使用的PHPSerial.PHP的摘要,不确定在读取端口行时为什么我的代码返回空字符串和数组。即使串行监视器正在显示其打印内容。当我强制COM5端口繁忙并断开连接时,代码也会中断。因此,代码知道它已连接,但仍不读取它正在打印的值。
图片在Arduino IDE上验证COM5串行打印语句
解决方法
已解决:事实证明PHP在读取串行数据方面不强壮(见图),经过多次尝试使代码与串行到USB连接上的Prolific驱动程序配合使用后,我放弃了,买了一个串行带有更标准FTDI驱动器芯片组的to-USB电缆。事实证明,这足以使Phpserial.php读取传入的数据。如果有人对为什么会这样更清楚或更详细的解释,我希望能听到反馈和想法。