Есть ли что-то нестабильное в 38400 бод?
Я пишу проект на Python для управления устройством с помощью PyVisa через USB-кабель. У меня большой успех. Я заметил, что данные устройства поддерживают скорости 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))
Этот код сокращен от реального кода, но идея та же. Просто выполните цикл, отправьте команду и прослушайте ответ. Прибор не будет отправлять ответ через ком-порт, если сообщение отправлено с неправильной скоростью передачи или команда непонятна. Этот метод обнаружения ВСЕГДА терпел неудачу на 38400 и никогда не терпит неудачу на любой другой скорости передачи. Единственный способ, которым этот метод может потерпеть неудачу, состоит в том, что он никогда не получает ответ на ЛЮБОЙ бод, что в точности и делает. Это заставляет меня думать, что, возможно, существует несоответствие тактовой частоты только при такой скорости передачи данных или аналогичной. Мне было любопытно узнать, имеют ли некоторые боды более высокий уровень ошибок, чем другие.
1 ответ
Нет.
В 38400 бод нет ничего особенного, что делает его менее стабильным, чем другие скорости передачи. Возможно, что определенные устройства или способы передачи могут возникать проблемы чаще или исключительно с такой (или любой другой) скоростью из-за аппаратных, программных или физических ограничений, но это будут ограничения, специфичные для устройства и / или метода, и не присуще 38400 бодовой связи в целом.