2

我有一个小循环,应该从串行端口读取一些多行和未指定长度(有时相当大)的文本数据,并将其写入文件:

while True:
    data = port.readline()
    file.write(data)
    if not data:
    break

我正确设置了端口,整个程序在 Windows 机器上运行良好。当我在 Linux 机器上运行它时,它仍然会接收数据,但软件流控制无法工作 - 而是实际上将XONXOFF(\S 和 \Q) 的控制代码写入文件。导致溢出错误并破坏我的数据。我已经阅读并尝试了所有我能想到的东西——似乎大多数这样的例子只需要几个字节并且没有使用任何流控制。我也尝试过miniterm包含的内容pySerial,它给出了相同的结果。

有任何想法吗?

为文件和端口添加了行:

file = open('temp.txt', 'ab') #Open the temporary file to append the incoming data to.
port = serial.Serial('/dev/ttyAMA0', baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=1, xonxoff=1, rtscts=0, dsrdtr=0)

除了我将一个字符串写入另一个设备以开始发送之外,没有什么比这更多的了,因为我看到了带有数据的响应,所以这很有效。我也尝试过打印到控制台而不是写入文件。同样的事情 - 溢出和打印控制代码。

更新:我也尝试过一次读取一个字节而不是整行,并尝试了其他波特率——所有这些都没有变化。

更新#2:一直在做一些阅读和测试。用 minicom 测试。结果相同。手动验证端口是否已使用“stty -a”正确设置(尽管我不相信这一点,因为它可能会根据我阅读的内容保存和恢复设置)。这可能是termios的问题?

4

2 回答 2

0

也许您可以尝试使用此串行捕获代码。它也有一个 Pyserial 方法,但它被简化了。换行符有一个拆分公式,如果您更改它以满足您的需要,它可能有助于流量控制。

https://github.com/DaDaDadeo/Batch-Capture/blob/master/serial_to_tcp.py

于 2014-02-01T13:28:07.600 回答
0

尝试从收到的数据中删除不可打印的字符。

data = data.rstrip()
于 2013-10-24T20:46:09.540 回答