38400波特有什么不稳定的地方吗?

Is there something unstable about 38400 baud?

我正在编写一个 python 项目来通过 USB 电缆使用 PyVisa 控制设备。我取得了很大的成功。我注意到设备数据表支持 9600、19200、38400、57600、115200、230400、460800 波特率,因此我创建了一些用于更改波特率的函数。

但我想要一种巧妙的方法来检测设备设置的波特率,这样我就可以自动连接到它而无需神奇地知道设备的波特率。设备 "remembers" 您设置的最后一个波特率 - 它不会在断电时重置为默认波特率。如果波特率设置错误,设备似乎根本没有响应。因此,给定一个随机波特率,我循环浏览所有支持的波特率并发送一个短命令。如果设备应答,那就是当前设置的波特率,我用它与设备进行更多通信。

但是,在压力测试期间,我注意到当设备随机设置为 38400 波特并且我去检测它时,我的程序将无法检测到该波特率。 (该设备不会在此波特率下接听电话。)当我将其从支持的波特率列表中删除时,该设备工作正常。

是不是38400波特率比其他波特率更不稳定?

我还认为这个用例很有趣。如果您遇到这样的问题,请尝试放弃对某些波特率的支持,看看是否能解决您的错误。希望对你有帮助。

编辑:代码真的无关紧要,但有一个请求所以...

import visa
BAUDRATES = [
    9600,
    19200,
    38400,
    57600,
    115200,
    230400,
    460800,
]
rm = visa.ResourceManager('@py')
dev = rm.open_resource('ASRLCOM7:INSTR')
for i in range(1, 101): # run 100 tests
    # select a random baud rate from the list
    rand_baud = BAUDRATES[randrange(0,len(BAUDRATES))]
    dev.write('SETBAUD' + str(rand_baud)) # Device response with 'OK'
    print('The random baud was {0}'.format(rand_baud))

# now detect the random baud by sending commands to the instrument and looking for a response
detected_baud = None
for baudrate in BAUDRATES:
    dev.baud_rate = baudrate # sets the com port baud rate
    resp = dev.query('GETINFO')
    if resp != '':
        detected_baud = baudrate
        break
print('The detected baud was {0}'.format(detected_baud))

这段代码是真实代码的缩写,但思路是一样的。只需循环,发送命令,然后收听响应。如果发送的消息波特率不正确或命令难以理解,则仪器不会通过 com 端口发送响应。这种检测方法在 38400 上总是失败,并且在任何其他波特率上都不会失败。此方法可能失败的唯一方式是它永远不会收到任何波特率的响应,这正是它正在做的事情。这让我觉得也许只有在那个波特率或类似的情况下才会出现时钟不匹配。我很想知道某些波特率是否比其他波特率更高。

没有。

38400 波特没有什么特别之处,所以它不如其他传输速率稳定。由于硬件、软件或物理限制,特定设备或传输方法可能更频繁地或专门以这种(或任何其他)速率遇到问题,但这些将是设备- and/or 方法特定的限制并且不是'一般固有的38400波特率通信。