Прочитать ответ от команды на последовательный порт

Я программирую PHP-приложение, которое использует последовательное устройство для работы с GSM-модемом. Таким образом, вы можете общаться с последовательным портом через screen и вы получите ответ, когда напишете команду.

Я использую PHP для связи с моим последовательным портом и использую sleep ждать между командами, я вижу fopen с w+ флаги и fwrite отправлять команды. Я пытался использовать fread функция, чтобы проверить, есть ли ответ, но это не так. Как это можно сделать в PHP?

0

Решение

концептуально 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;
}

( Как читать последовательный порт RS232 в PHP, как эта программа QBasic )

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]