2017-03-13 19 views
0

저는 Python 프로젝트를 작성하여 USB 케이블을 통해 PyVisa가있는 장치를 제어합니다. 나는 많은 성공을 거두고있다. 디바이스 데이터 시트가 9600, 19200, 38400, 57600, 115200, 230400, 460800 전송 속도를 지원하므로 전송 속도를 변경하기위한 몇 가지 기능을 만들었습니다.38400 baud에 대해 불안정한 부분이 있습니까?

하지만 장치가 어떤 보오율로 설정되어 있는지 감지 할 수있는 멋진 방법을 원했기 때문에 장치가 어떤 보오를 가지고 있는지 마술처럼 알지 못해도 자동으로 연결할 수 있습니다. 장치는 사용자가 설정 한 마지막 보오를 "기억"합니다 - 전원 손실시 기본 보오로 재설정되지 않습니다. 잘못된 보드 속도가 설정되어 있으면 장치가 전혀 응답하지 않는 것처럼 보입니다. 그래서, 임의의 보오율이 주어지면, 지원되는 것들을 모두 순환시키고 짧은 명령을 보냅니다. 장치가 응답하면 현재 설정된 보오율이 그 장치와 더 많이 통화하는 데 사용됩니다.

그러나 스트레스 테스트 중에 장치가 무작위로 38400 보오에 설정되고이를 감지하면 프로그램이 보오율을 감지하지 못하는 것으로 나타났습니다. (장치가이 보드에서 호출에 응답하지 않습니다.) 지원되는 보드 목록에서 장치를 제거하면 장치가 정상적으로 작동합니다.

382400 보드 속도로 인해 다른 보드보다 불안정한 부분이 있습니까?

또한이 유스 케이스가 재미 있다고 생각했습니다. 이와 같은 문제가 발생하면 특정 보드에 대한 지원을 중단하고 오류가 수정되었는지 확인하십시오. 희망이 도움이됩니다.

편집 : 코드는 정말 중요하지 않습니다하지만이 코드는 실제 코드에서 생략되어 있지만 아이디어는 동일하므로에 대한 요청 ...

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에서 실패했으며 다른 전송 속도에서는 실패하지 않습니다. 이 방법이 실패 할 수있는 유일한 방법은 ANY 보 (baud)에 대한 응답을 수신하지 않는 것입니다. 이것은 저 보율이나 이와 유사한 경우에만 클럭이 일치하지 않는다고 생각하게 만듭니다. 어떤 baud가 다른 baud보다 에러율이 더 높은지 궁금했다.

+1

무슨 장치에 대해 알지 못해도 그 장치에 38,400 bps 직렬 통신에 대해 알려진 문제가 있는지 알려주지 못합니다. "내 장치가 직렬 칩에 어떤 종류의 버그가 있습니까?" 어쨌든 프로그래밍 질문입니다 ... – kindall

+0

나는 반대 순서로 요금을 시도하는 것이 좋습니다. – kindall

+0

@kindall 내 질문에 대한 장치가 아니었다. 의도적으로 전송 속도에 관한 것입니다. 나는 460800 baud로 잘 작동하는 장치가 38400에 문제가 있다고 믿는 것이 어렵다고 느낄 것입니다.하지만 여전히 장치 제조업체에게 그 속도로 문제가 있는지 물어볼 수는 있습니다. 또한, 나는 무작위로 지원되는 것들의 목록에서 baud를 설정하고 연결을 끊고 다시 감지합니다. 그래서 질서도 중요하지 않은 것 같습니다. 그러나 항상 baud를 38400으로 설정 한 다음 탐지를 시도한 후에. – boymeetscode

답변

1

번호

다른 전송 속도에 비해 덜 안정하게 약 38,400 전송 특별한 아무것도 없습니다. 하드웨어, 소프트웨어 또는 물리적 제한으로 인해 특정 장치 또는 전송 방법이이 (또는 다른) 속도로 더 자주 또는 독점적으로 문제를 경험할 수 있지만 이러한 것은 장치 및/또는 방법에 특정한 제한 일 수 있으며 일반적으로 38400 보 통신에 내재되어 있습니다.

+0

실제로, 38400은 한때 ** 매우 대중적이었습니다 (일단 우리가 300/1200/2400/9600/14400을 넘었 으면). –

+0

압축시 9600bps 또는 19.2Kbps 모뎀의 경우 38.4kbps는 좋은 포트 속도입니다! – kindall