직렬 포트가 실제로 장치를 열지 않고 데이터를 전송하고 있는지 어떻게 알 수 있습니까?


10

직렬 회선과 2 개의 이더넷 NIC를 통해 연결된 고 가용성 클러스터 (하트 비트)가 있습니다. 내가 분리 시리얼 라인을 인식 할 수있는 모니터링 스크립트를 설정하고 싶습니다 (기본적으로 같은 질문을했다 SO에 대답 그러나 나는 이러한 일반적인 대답에 만족하고 있지 않다).

직렬 회선이 하트 비트에 의해 열리므로 직렬 장치를 열고 데이터를 직접 읽을 수 없습니다.

그래서 나는 간접적 인 단서를 찾기 시작했습니다. 내가 지금까지 찾은 유일한 차이점은의 내용입니다 /proc/tty/driver/serial. 연결되었을 때의 모습입니다 :

# cat /proc/tty/driver/serial
serinfo:1.0 driver revision:
0: uart:16550A port:000003F8 irq:4 tx:2722759 rx:2718165 brk:1 RTS|CTS|DTR|DSR|CD

연결이 끊어지면

# cat /proc/tty/driver/serial
serinfo:1.0 driver revision:
0: uart:16550A port:000003F8 irq:4 tx:2725233 rx:2720703 brk:1 RTS|DTR

/ proc / tty / driver / serial의 내용에 대한 문서를 찾지 못했기 때문에 라인 끝에 나열된 신호가 연결 / 연결 끊김 케이블의 의미를 갖는 것으로 결정할만큼 확신이 없습니다. 신호의 존재는 주어진 신호가 "지금"(또는 최근에 있었습니까? 또는?)에 있음을 의미한다고 가정 할 수 있습니다. 직렬 HOWTO는 케이블 (CTS 유량 제어 신호, DSR, CD "모뎀은 서로 접속", "I가 통신 할 준비")에 접속 될 때 추가적인 신호들이 "입력"방향에있는 제시 말한다. 따라서 다른 쪽 끝에 누군가 살아 있어야합니다.

신호의 의미가 Serial HOWTO에 설명되어 있다고 가정하면 CD 신호의 존재 여부에 따라 결정을 내릴 수 있습니다. 그러나 나는 확실하지 않다.

그래서 질문은 : 내 방법이 "올바르다"또는 내가 알지 못하는 더 나은 옵션이 있습니까?

편집 : 추가 관찰을하고 동료와 이야기했습니다. 라인의 끝에서 신호의 존재 유무는 직렬 포트 작동의 양을 나타내는 아주 좋은 지표입니다. 그러나 케이블의 물리적 존재를 나타내는 것은 아닙니다. 직렬 포트 출력 신호에 쓰는 프로그램이있을 때마다 (RTS | DTR). 다른 쪽이 글을 쓸 때 들어오는 신호가있었습니다 (CTS | DSR | CD). 어느 쪽도 통신하지 않는 경우 신호가 전혀 없습니다 (케이블이 없음을 의미하지는 않습니다). 정확한 신호 는 케이블배선에 달려 있다는 것을 잊지 마십시오 ( "부분 핸드 쉐이킹 기능이있는 널 모뎀이 있습니다").


reasonabke 시작과 쉽게 테스트되는 것처럼 들립니다. '/ sys / devices / platform / serial8250 / tty / ttyS0 /'또는 시스템에서 비슷한 것을 볼 수도 있습니다.
rickhg12hs

답변:


5

RS232에는 어떤 종류의 "케이블 존재"표시기가 없습니다. 전송 또는 메타 데이터 (제어) 신호를 전달 받거나받지 못합니다. 이것이 전부입니다. 수신 신호 (CTS | DSR | CD)를 수신하면 케이블이 연결된 것입니다. 들어오는 신호를받지 못하면 케이블 상태가 불확실하며 추가 하드웨어 솔루션없이 연결되어 있는지 또는 원격 장치와 어떤 종류의 교환을 수행하는지 여부를 확인할 수있는 방법이 없습니다.

일반적인 접근 방식은 일종의 "keep-alive"전송 ​​(메타 데이터 만-예를 들어 DTR을 설정하고 CTS를 예상 함)을 수행하는 것이지만 케이블의 양쪽 끝에 소프트웨어가 사용하는 프로토콜의 규율이 이러한 유휴 교환을 금지하는 경우 계속 진행하기 위해 납땜 인두를 사용하는 것에 거의 얽매이지 않았습니다.

시도해 볼 것은 파이프를 설정하고 소프트웨어와 물리적 장치 (양쪽 끝)간에 데이터를 전달하고 캡슐화하고 파이프가 유휴 상태 인 경우 "연결 확인"을 수행하는 일종의 추가 "데몬"입니다.

엔드 포인트 장치가 하드웨어 제어를 사용하지 않는 경우 호스트 측 플러그 내부의 CTS로 DTR을 단축하고 호스트 측에서 '하드웨어 제어'를 사용할 수 있습니다. DTR을 생성하면 CTS가 자동으로 구동되어 케이블이 있으면 전송이 가능하므로 전송에 영향을 미치지 않습니다. 한편, 케이블이없는 경우, 시스템은이 이벤트에 적합한 방식으로 CTS가 부족한 것에 반응합니다. 예를 들어 케이블이 연결될 때까지 타임 아웃 또는 전송 중단이 발생합니다.


"데몬"은 영리한 아이디어입니다. 그러나 안정성 버그의 근원이 될까봐 두려워서 구현하지 않을 것입니다. 나는 / proc에서 신호를 읽고 수신 / 수신 싱어의 유무를 표시 할 것이다. 이것으로 충분합니다.
Peter Kovac

슈뢰딩거의 고양이와 같습니다. en.wikipedia.org/wiki/Schr%C3%B6dinger%27s_cat
Ufoguy 2019 년

0

장치가 다른 쪽 끝에 연결되어 있음을 알리는 상태 표시기가 있지만 선택 사항이며 전송은 존재 신호 유무에 관계없이 작동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.