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