Làm thế nào để tôi biết nếu một cổng nối tiếp thực sự truyền dữ liệu mà không cần mở thiết bị?


10

Tôi có một cụm khả dụng cao (Heartbeat) được kết nối thông qua đường nối tiếp và hai NIC ethernet. Tôi muốn thiết lập một tập lệnh giám sát có khả năng nhận ra dòng nối tiếp bị ngắt kết nối (về cơ bản câu hỏi tương tự đã được trả lời tại SO , tuy nhiên tôi không hài lòng với câu trả lời chung như vậy).

Tôi không thể đơn giản mở thiết bị nối tiếp và tự đọc dữ liệu, vì dòng nối tiếp được mở bởi Heartbeat.

Vì vậy, tôi bắt đầu tìm kiếm một số manh mối gián tiếp. Sự khác biệt duy nhất tôi tìm thấy cho đến nay là trong nội dung của /proc/tty/driver/serial. Đây là giao diện của nó khi được kết nối:

# 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

Và khi bị ngắt kết nối:

# 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

Tôi không đủ tự tin để quyết định rằng các tín hiệu được liệt kê ở cuối dòng có ý nghĩa của cáp được kết nối / ngắt kết nối vì tôi không tìm thấy bất kỳ tài liệu nào về nội dung của / Proc / tty / driver / serial. Tôi chỉ có thể giả sử rằng sự hiện diện của tín hiệu có nghĩa là tín hiệu đã cho là "ngay bây giờ" (hoặc là trong quá khứ gần đây? Hoặc?). Các HOWTO nối tiếp nói rằng tín hiệu bổ sung trình bày khi cáp được kết nối (CTS tín hiệu điều khiển dòng chảy, DSR "Tôi đã sẵn sàng để giao tiếp", CD "Modem kết nối với nhau") là tất cả trong "đầu vào" hướng. Vì vậy, phải có ai đó còn sống ở đầu kia.

Giả sử rằng ý nghĩa của các tín hiệu được mô tả trong Nối tiếp HOWTO, tôi có thể dựa vào quyết định của mình về sự hiện diện của tín hiệu CD. Tuy nhiên tôi không thực sự chắc chắn.

Vì vậy, câu hỏi là: phương pháp của tôi là "đúng" hay tôi có bất kỳ lựa chọn nào tốt hơn mà tôi không biết?

EDIT: Tôi đã thực hiện một số quan sát bổ sung và nói chuyện với đồng nghiệp của tôi. Hóa ra sự hiện diện hay vắng mặt của các tín hiệu ở cuối dòng là chỉ báo khá tốt về hoạt động của cổng nối tiếp, ở cả hai đầu. Tuy nhiên, nó không phải là một chỉ số về sự hiện diện vật lý của cáp. Bất cứ khi nào có một chương trình ghi vào tín hiệu ra cổng nối tiếp đều có mặt (RTS | DTR). Khi phía bên kia đang viết tín hiệu đến (CTS | DSR | CD). Khi không có bên nào giao tiếp, không có tín hiệu nào cả (điều đó không nhất thiết có nghĩa là không có cáp). Đừng quên rằng các tín hiệu chính xác phụ thuộc vào hệ thống dây cáp (Tôi có "modem null với bắt tay một phần").


Âm thanh như một lý do bắt đầu và một thử nghiệm dễ dàng. Bạn cũng có thể xem '/ sys / thiết bị / nền tảng / serial8250 / tty / ttyS0 /' hoặc một cái gì đó tương tự trên hệ thống của bạn.
rickhg12hs

Câu trả lời:


5

RS232 không có chỉ báo "hiện diện cáp". Bạn chỉ nhận được tín hiệu truyền hoặc siêu dữ liệu (điều khiển) hoặc bạn không - đó là tất cả những gì bạn biết. Nếu bạn nhận được tín hiệu đến (CTS | DSR | CD), bạn biết cáp được kết nối. Nếu bạn không nhận được bất kỳ tín hiệu đến nào, trạng thái của cáp là không xác định và không có cách nào để xác định xem nó có được cắm mà không có giải pháp phần cứng bổ sung hay không hoặc thực hiện một số loại trao đổi với thiết bị từ xa.

Cách tiếp cận thông thường là thực hiện một số loại truyền "duy trì" (thậm chí chỉ là siêu dữ liệu - ví dụ: đặt DTR trong giây lát và mong đợi CTS) nhưng nếu kỷ luật giao thức được sử dụng bởi phần mềm ở hai đầu cáp sẽ cấm trao đổi nhàn rỗi như vậy, bạn ' re khá nhiều bị mắc kẹt với việc sử dụng một sắt hàn để tiến hành.

Những gì bạn có thể thử, là một loại "con quỷ" bổ sung nào đó thiết lập một đường ống, chuyển tiếp dữ liệu giữa phần mềm của bạn và thiết bị vật lý (ở cả hai đầu), đóng gói nó - và thực hiện "kiểm tra kết nối" nếu đường ống không hoạt động.

Hãy để tôi thêm một giải pháp khá phổ biến: nếu thiết bị đầu cuối của bạn không sử dụng điều khiển phần cứng, bạn có thể rút ngắn DTR với CTS bên trong phích cắm ở phía máy chủ và sử dụng 'điều khiển phần cứng' ở phía máy chủ. Tạo DTR tự động điều khiển CTS, cho phép truyền, nếu có cáp, do đó việc truyền không bị ảnh hưởng. Trong khi đó, khi không có cáp, hệ thống sẽ phản ứng với việc thiếu CTS theo cách phù hợp với sự kiện này, ví dụ như tạo ra thời gian chờ hoặc tạm dừng truyền cho đến khi cáp được cắm.


Điều "daemon" là một ý tưởng thông minh. Tuy nhiên, tôi sẽ không thực hiện nó vì tôi sợ nó sẽ trở thành một nguồn gây ra lỗi ổn định. Tôi sẽ bám vào đọc tín hiệu từ / Proc và chỉ cho biết sự hiện diện hay vắng mặt của các ca sĩ đến / đi. Thế là quá đủ với tôi.
Peter Kovac

Nó giống như con mèo của Schrodinger. vi.wikipedia.org/wiki/Schr%C3%B6dinger%27s_cat
Ufoguy

0

Có một chỉ báo hiện diện để cho bạn biết rằng bạn có một thiết bị được kết nối với đầu kia, nhưng nó là tùy chọn, truyền dẫn hoạt động có hoặc không có tín hiệu hiện diện.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.