关闭mac上的串行连接时确保刷新数据

时间:2014-05-07 00:14:33

标签: python macos serial-port

我正在尝试在Mac OS上连接Agilent 54622D示波器,而我正在使用ftdi usb-serial电缆。我观察到以下行为:如果我在写入命令后立即关闭串行连接的文件描述符(我不希望设备有任何响应,只是发送命令),连接将立即关闭这导致并非所有数据都发送到设备。这似乎有点合乎逻辑,但我从未见过有人在关闭串行连接之前添加任何特殊延迟。

我可以在这里找到什么?

这是一个简单的python脚本来说明问题:

import serial
port=serial.Serial(port="/dev/cu.usbserial-A603PQBN",baudrate=57600,timeout=1, rtscts=True, dsrdtr=False, stopbits=serial.STOPBITS_ONE)
port.write(":RUN\n")
port.close()

更新

我在运行Linux的VirtualBox中尝试了相同的脚本,但我没有注意到这些问题。现在我想知道这是Mac的UART驱动程序还是FTDI驱动程序问题。

2 个答案:

答案 0 :(得分:0)

看起来你很快就关闭了连接,然后真正处理了数据,即使你的连接速度相当高(我已经习惯了9600)。

那么为什么不尝试使用文档中描述的flush()

"像对象一样刷新文件。在这种情况下,请等待所有数据写入。"

import serial
port=serial.Serial(port="/dev/cu.usbserial-A603PQBN",baudrate=57600,timeout=1, rtscts=True, dsrdtr=False, stopbits=serial.STOPBITS_ONE)
port.write(":RUN\n")
port.flush() # this might help
port.close()

答案 1 :(得分:0)

我尝试过官方的FTDI驱动程序,问题就消失了。这可能是Mavericks FTDI驱动程序实现中的一个错误(提交了一个错误)。