Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用PySerial从串口读取二进制数据_Python_Qt_Serial Port_Pyqt_Qprocess - Fatal编程技术网

Python 用PySerial从串口读取二进制数据

Python 用PySerial从串口读取二进制数据,python,qt,serial-port,pyqt,qprocess,Python,Qt,Serial Port,Pyqt,Qprocess,PyQT 4.7没有从QIODevice继承的类,该类允许直接与串行端口进行通信(例如QSerialDevice)。因此,我认为使用QProcess类并从另一个进程实现对串行端口的实际读/写会更容易,该进程将使用QProcess接口与我的主QT应用程序接口 现在的问题是,当我使用下面的代码时,发送和接收的字节数是不一样的所以我的问题是如何从串行端口正确读取二进制数据,然后将所有内容转发到标准输出? 这是我创建QProcess的主要QT程序的摘录: self.micromouse_

PyQT 4.7没有从QIODevice继承的类,该类允许直接与串行端口进行通信(例如QSerialDevice)。因此,我认为使用QProcess类并从另一个进程实现对串行端口的实际读/写会更容易,该进程将使用QProcess接口与我的主QT应用程序接口

现在的问题是,当我使用下面的代码时,发送和接收的字节数是不一样的所以我的问题是如何从串行端口正确读取二进制数据,然后将所有内容转发到标准输出?

这是我创建QProcess的主要QT程序的摘录:

        self.micromouse_socket = QProcess()
        self.micromouse_socket.start("/home/ansis/Source/Perforce-pele/Pele/tools/console/comtalker.py", "")
        self.micromouse_socket.started.connect(self.on_micromouse_socket_started)
        self.label_8.setText("Starting COM...")
这是将与串行端口通信的过程(comtalker.py;非阻塞部分尚未完成):


另外,问题可能出在其他地方,而不是PySerial。在另一台计算机上,我用这个命令“/binary\u data\u generator>/dev/ttyS0”向ttyS0写入数据。当我只发送ASCII字符(文本+数字)时,同样的代码似乎工作正常。

我认为默认情况下标准输出不是二进制模式。这就是为什么非ascii字节似乎丢失的原因。看看这个,可能会有帮助

如果我理解正确,您希望使用std I/o作为两个进程之间的通信管道。我建议使用其中一个模块来实现这一点

我希望这有帮助

PySerial(或PySerial所依赖的库)似乎正在将单个“0x0a”(\n)字符转换为两个字符“0x0d 0x0a”(\r\n)。这两个通信端点都是在Linux上运行的,所以我不知道为什么有人甚至想翻译这些行的结尾

此处strace表示发送方仅向ttyS0发送\n:

write(1, "M\n", 2)                      = 2
write(1, "\n", 1)                       = 1
write(1, "M\n", 2)                      = 2
write(1, "\n", 1)                       = 1
调试PySerial输出时,我看到每个\n都有一个前缀\r


在声称这是一个Bug之前,我将做进一步的调查,找出谁以及为什么添加这个回车…

问题不在于STDOUT(至少还没有)。我刚刚验证了pyserial为我提供的字节数比另一端使用以下命令实际写入的字节数要多“/binary\u data\u gen>/dev/ttyS0”。基本上,我发送的信息大小不变。当消息中的某些字节发生变化时,我将开始在另一端接收更多字节。
write(1, "M\n", 2)                      = 2
write(1, "\n", 1)                       = 1
write(1, "M\n", 2)                      = 2
write(1, "\n", 1)                       = 1