从串口读取命令的响应

问题描述 投票:1回答:1

我正在编写一个PHP应用程序,它使用串行设备来处理GSM调制解调器。因此,您可以通过screen与串行端口进行通信,并在编写命令时获得响应。

我使用PHP与我的串口通信,并使用sleep在命令之间等待,我用fopen标志w+fwrite发送命令。我尝试使用fread函数检查响应是否存在,但事实并非如此。怎么可以在PHP中完成?

php serial-port usb hardware
1个回答
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;
}

(Qazxswpoi)

© www.soinside.com 2019 - 2024. All rights reserved.