Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.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 38400波特有什么不稳定的地方吗?_Python_Python 3.x_Baud Rate_Pyvisa - Fatal编程技术网

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

Python 38400波特有什么不稳定的地方吗?,python,python-3.x,baud-rate,pyvisa,Python,Python 3.x,Baud Rate,Pyvisa,我正在编写一个python项目,通过USB电缆使用PyVisa控制设备。我取得了很大的成功。我注意到设备数据表支持9600、19200、38400、57600、115200、230400、460800波特率,因此我创建了一些更改波特率的函数 但是我想要一种巧妙的方法来检测设备设置的波特率,这样我就可以自动连接到它,而不用神奇地知道设备的波特率。设备“记住”您最后设置的波特率-断电时不会重置为默认波特率。如果您设置了错误的波特率,设备似乎根本没有响应。因此,给定一个随机波特率,我循环遍历所有支持的

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

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

然而,在压力测试期间,我注意到当设备被随机设置为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波特并没有什么特别的地方使它比其他传输速率更不稳定。由于硬件、软件或物理限制,特定设备或传输方法可能更经常或仅在此(或任何其他)速率下遇到问题,但这些将是特定于设备和/或方法的限制,通常不是38400波特通信固有的。


38400波特并没有什么特别的地方使它比其他传输速率更不稳定。由于硬件、软件或物理限制,特定设备或传输方法可能更经常或仅在此(或任何其他)速率下遇到问题,但这些都是特定于设备和/或方法的限制,通常不是38400波特通信固有的。

如果不知道您所说的是什么设备,没有人能够告诉您该设备是否存在38400 bps串行通信的已知问题。并不是说“我的设备的串行芯片中是否有某种缺陷?”是一个编程问题……我可能建议以相反的顺序尝试速率。@kind我所有的问题都不是关于设备的。这是关于波特率的。我很难相信,一台能在460800波特下正常工作的设备会在38400上出现问题。但即使如此,我也可以询问设备制造商,他们是否知道以这种速度出现任何问题。另外,我正在从支持的列表中随机设置波特率,然后断开连接并再次检测。所以秩序似乎也不重要。但总是在将波特率设置为38400,然后尝试检测之后。您如何设置波特率?你用来检测波特率的代码在哪里?@Chris H,否是可以接受的答案。如果不知道你在说什么设备,没有人能告诉你该设备是否存在38400 bps串行通信的已知问题。并不是说“我的设备的串行芯片中是否有某种缺陷?”是一个编程问题……我可能建议以相反的顺序尝试速率。@kind我所有的问题都不是关于设备的。这是关于波特率的。我很难相信,一台能在460800波特下正常工作的设备会在38400上出现问题。但即使如此,我也可以询问设备制造商,他们是否知道以这种速度出现任何问题。另外,我正在从支持的列表中随机设置波特率,然后断开连接并再次检测。所以秩序似乎也不重要。但总是在将波特率设置为38400,然后尝试检测之后。您如何设置波特率?您用于检测波特率的代码在哪里?@Chris H,否是一个可接受的答案。事实上,38400曾经非常流行于调制解调器(一旦我们超过300/1200/2400/9600/14400)。38.4 kbps是9600 bps或19.2 kbps压缩调制解调器的良好端口速度!事实上,38400曾经非常流行于调制解调器(一旦我们超过300/1200/2400/9600/14400)。38.4 kbps是9600 bps或19.2 kbps压缩调制解调器的良好端口速度!