从串口读取命令的响应
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从串口读取命令的响应相关的知识,希望对你有一定的参考价值。
我正在编写一个php应用程序,它使用串行设备来处理GSM调制解调器。因此,您可以通过screen
与串行端口进行通信,并在编写命令时获得响应。
我使用PHP与我的串口通信,并使用sleep
在命令之间等待,我用fopen
标志w+
和fwrite
发送命令。我尝试使用fread
函数检查响应是否存在,但事实并非如此。怎么可以在PHP中完成?
答案
从概念上讲,如果端口配置正确,f_read
应该可以工作。在php-serial
上有一个图书馆https://github.com/Xowap/PHP-Serial
这是readPort()
功能:
public function readPort($count = 0)
{
if ($this->_dState !== SERIAL_DEVICE_OPENED) {
trigger_error("Device must be opened to read it", E_USER_WARNING);
return false;
}
if ($this->_os === "linux" || $this->_os === "osx") {
// Behavior in OSX isn't to wait for new data to recover, but just
// grabs what's there!
// Doesn't always work perfectly for me in OSX
$content = ""; $i = 0;
if ($count !== 0) {
do {
if ($i > $count) {
$content .= fread($this->_dHandle, ($count - $i));
} else {
$content .= fread($this->_dHandle, 128);
}
} while (($i += 128) === strlen($content));
} else {
do {
$content .= fread($this->_dHandle, 128);
} while (($i += 128) === strlen($content));
}
return $content;
} elseif ($this->_os === "windows") {
// Windows port reading procedures still buggy
$content = ""; $i = 0;
if ($count !== 0) {
do {
if ($i > $count) {
$content .= fread($this->_dHandle, ($count - $i));
} else {
$content .= fread($this->_dHandle, 128);
}
} while (($i += 128) === strlen($content));
} else {
do {
$content .= fread($this->_dHandle, 128);
} while (($i
+= 128) === strlen($content));
}
return $content;
}
return false;
}
(Qazxswpoi)
以上是关于从串口读取命令的响应的主要内容,如果未能解决你的问题,请参考以下文章