我在Linux上从串行设备读取时遇到了问题。这个问题很奇怪,我无法确定原因。
我用PHP打开/dev/ttyUSB0文件,并按照该设备的协议开始与该设备通信。很多时候,我遇到了PHP脚本等待设备响应的情况。当我并行运行Perl脚本,打算向同一设备发送请求时,它退出而没有得到响应。然后我发现PHP脚本收到了响应(只有Perl脚本发送了请求后)。
我尝试用PHP读取Arduino时也遇到了类似的问题。PHP未从端口获得响应,但Arduino IDE的串行监视器打印了响应。
我认为我在这里忽略了有关Linux文件和USB端口的重要信息。可能出了什么问题?我如何确定哪些程序使用该端口/文件?
我用PHP打开/dev/ttyUSB0文件,并按照该设备的协议开始与该设备通信。很多时候,我遇到了PHP脚本等待设备响应的情况。当我并行运行Perl脚本,打算向同一设备发送请求时,它退出而没有得到响应。然后我发现PHP脚本收到了响应(只有Perl脚本发送了请求后)。
我尝试用PHP读取Arduino时也遇到了类似的问题。PHP未从端口获得响应,但Arduino IDE的串行监视器打印了响应。
我认为我在这里忽略了有关Linux文件和USB端口的重要信息。可能出了什么问题?我如何确定哪些程序使用该端口/文件?
$usb = 'ttyUSB0';
`stty -F /dev/$usb 9600`;
`stty -F /dev/$usb -parity`;
`stty -F /dev/$usb cs8`;
`stty -F /dev/$usb -cstopb`;
$f = fopen("/dev/$usb", "r+");
if(!$f) {
echo "error opening file\n";
exit;
}
statusRequest($f);
sleep(1);
$c = readPort($f);
echo "$c\n";
function statusRequest($port) {
$data = "request";
fwrite($port, $data);
fflush($port);
}
function readPort($port) {
$read = 1;
$c = '';
while($read > 0) {
$bytesr = unpack("h*", fread($port, 1));
$c .= $bytesr[1];
//echo $bytesr[1];
if($bytesr[1] == 'ff') {
$read = 0;
}
}
return $c;
}