从串口读取命令的响应

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)

以上是关于从串口读取命令的响应的主要内容,如果未能解决你的问题,请参考以下文章

从 OpenWRT 中的串口读取 Lua 脚本

如何从串口获得多行结果

c#从串口读取数据怎样读一个就清空缓存

在 Linux 上用 C 语言读写串口

阿波罗读取乐观响应的片段

QT:从串口连续读取数据的问题