RS-485 통신 문제 해결

RS-485 통신 문제 해결

나는ND-6021 아날로그 입력 모듈. 수신된 명령에 따라 가변 출력 전압을 설정할 수 있는 RS-485 장치입니다. Linux Debian Stretch에서 작동시키려고 합니다. 나는 minicom이 제대로 작동하는지 확인하기 위해 사용하고 있었기 때문에 read config 명령을 실행했습니다: $012<CR>. 장치는 명령을 올바르게 수신했음을 나타내는 메시지로 응답 !01320600하고 !나머지 메시지에서는 장치 구성 방법을 설명합니다. 제가 이해한 바로는 이는 연결이 올바르게 설정되었으며 통신을 차단하는 하드웨어 문제가 없음을 의미합니다.

다음 단계는 원하는 출력 전압 레벨을 설정하는 것입니다. 출력 전압을 볼 수 있도록 디지털 전압계를 장치에 연결했습니다. 다음 명령을 실행합니다. #0108.467<CR>전압계에서 8.467V를 읽어야 하고 장치가 로 응답해야 >하지만 전압은 0으로 유지되고 장치가 응답하지 않습니다.

몇시간동안 명령어 구문을 확인해봤는데 정확해서 다시 테스트해봤습니다. 장치를 Windows 노트북에 연결하고 흰개미를 사용하여 똑같은 명령을 실행했습니다. read config 명령( $012<CR>)이 작동하고 Linux에서와 동일한 응답을 얻었습니다. 이제 set 전압 명령도 작동합니다. >장치에서 응답을 얻었고 출력 전압이 올바르게 설정되었습니다.

테스트 결과 통신 및 하드웨어 설정은 양호한 것으로 나타났으나 분명히 뭔가 작동하지 않는 것으로 나타났기 때문에 혼란스럽습니다. 그런데 무엇입니까?

답변1

일반적으로 이는 전송 속도 또는 개행 해석 문제입니다. (명령이 부분적으로 유효한 경우에도)

소캇네트워크 및 직렬 연결을 설정하고 문제를 해결하는 데 탁월한 도구입니다.

socat - /dev/ttySX[,params]

빈 매개변수가 작동하지 않으면 매개변수를 사용하여 명시적인 전송 속도를 추가해 볼 수 있습니다: b9600/b19200/b57600/b115200...all list retrievalsocat -?? | grep 'b[1-9]'

그런 다음 개행 설명 문제에 초점을 맞추고 매개변수 조합을 시도합니다: cr, crnlecho=0raw

...일부 모듈은 cr+lf(\r\n) 줄 끝을 요구하고 일부는 '\n'만 요구하기 때문에 때로는 에코가 혼란스러울 수 있습니다... 반면에 귀하의 경우 모듈에는 캐리지 리턴(\r)만 필요합니다 ), echo '#0108.467' | socat - /dev/ttySX,cr정상적으로 작동할 것입니다.

관련 정보