[英]Read response from command on serial port
我正在編寫一個PHP應用程序,該程序使用串行設備通過GSM調制解調器進行處理。 因此,您可以通過screen
與串行端口通信,並且在編寫命令時會得到響應。
我使用PHP與串行端口通信,並使用sleep
在命令之間等待,我使用帶有w+
標志的fopen
和fwrite
發送命令。 我嘗試使用fread
函數檢查響應是否存在,但實際上不是。 用PHP怎么做?
從概念f_read
如果端口配置正確,則f_read
應該可以工作。 在https://github.com/Xowap/PHP-Serial上有一個庫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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.