ฉันจะรู้ได้อย่างไรว่าพอร์ตอนุกรมกำลังส่งข้อมูลโดยไม่ต้องเปิดอุปกรณ์หรือไม่


10

ฉันมีคลัสเตอร์ที่มีความพร้อมใช้งานสูง (Heartbeat) เชื่อมต่อผ่านสายอนุกรมและอีเธอร์เน็ต NIC สองตัว ฉันต้องการตั้งค่าสคริปต์การตรวจสอบความสามารถในการรับรู้ถึงการเชื่อมต่อสายอนุกรม (โดยทั่วไปแล้วคำถามเดียวกันตอบที่ SOแต่ฉันไม่พอใจกับคำตอบทั่วไปดังกล่าว)

ฉันไม่สามารถเปิดอุปกรณ์อนุกรมและอ่านข้อมูลด้วยตัวเองได้เนื่องจาก Heartbeat เปิดบรรทัดอนุกรม

ดังนั้นฉันจึงเริ่มมองหาเบาะแสทางอ้อม /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 / ซีเรียล ฉันสามารถสันนิษฐานได้ว่าการมีอยู่ของสัญญาณหมายความว่าสัญญาณที่ให้นั้นอยู่ที่ "ตอนนี้" (หรือเมื่อไม่นานมานี้? หรือ? HOWTO อนุกรมกล่าวว่าสัญญาณที่เพิ่มนำเสนอเมื่อสายเคเบิลเชื่อมต่อ (CTS สัญญาณควบคุมการไหล DSR "ผมพร้อมที่จะสื่อสาร" ซีดี "Modem เชื่อมต่อไปยังอีก") ที่มีอยู่ทั้งหมดใน "ป้อนข้อมูล" ทิศทาง ดังนั้นจะต้องมีใครบางคนที่มีชีวิตอยู่ที่ปลายอีกด้าน

สมมติว่าความหมายของสัญญาณเป็นไปตามที่อธิบายไว้ใน Serial HOWTO ฉันสามารถตัดสินใจโดยมีสัญญาณซีดีพูด อย่างไรก็ตามฉันไม่แน่ใจจริงๆ

ดังนั้นคำถามคือ: วิธีการของฉัน "ถูกต้อง" หรือฉันมีตัวเลือกที่ดีกว่าที่ฉันไม่ทราบหรือไม่?

แก้ไข: ฉันได้สังเกตเพิ่มเติมและได้คุยกับเพื่อนร่วมงานของฉัน ปรากฎว่ามีหรือไม่มีสัญญาณในตอนท้ายของบรรทัดเป็นตัวบ่งชี้ที่ดีของกิจกรรมพอร์ตอนุกรมทั้งสองด้าน อย่างไรก็ตามมันไม่ใช่ตัวบ่งชี้การมีอยู่จริงของสายเคเบิล เมื่อใดก็ตามที่มีการเขียนโปรแกรมไปยังสัญญาณขาออกพอร์ตอนุกรมจะมีอยู่ (RTS | DTR) เมื่ออีกด้านหนึ่งกำลังเขียนสัญญาณขาเข้ามีอยู่ (CTS | DSR | CD) เมื่อด้านใดด้านหนึ่งสื่อสารไม่มีสัญญาณเลย (นั่นไม่ได้แปลว่าไม่มีสายเคเบิลอยู่) อย่าลืมว่าสัญญาณที่แน่นอนขึ้นอยู่กับการเดินสายเคเบิล (ฉันมี "โมเด็มโมฆะพร้อมการจับมือบางส่วน")


เสียงเหมือนเริ่มต้นเหตุผลและเป็นหนึ่งในการทดสอบได้อย่างง่ายดาย คุณอาจดูที่ '/ sys / อุปกรณ์ / platform / serial8250 / tty / ttyS0 /' หรือสิ่งที่คล้ายกันในระบบของคุณ
rickhg12hs

คำตอบ:


5

RS232 ไม่มีไฟแสดงสถานะ "เคเบิล" ใด ๆ คุณเพิ่งได้รับการส่งสัญญาณหรือข้อมูลเมตา (ควบคุม) หรือไม่ - นั่นคือทั้งหมดที่คุณรู้ หากคุณได้รับสัญญาณเข้า (CTS | DSR | CD) แสดงว่าคุณได้เชื่อมต่อสายเคเบิลแล้ว หากคุณไม่ได้รับสัญญาณใด ๆ สถานะของสายเคเบิลจะไม่สามารถระบุได้และไม่มีวิธีการตรวจสอบว่าได้เสียบปลั๊กโดยไม่มีการแก้ไขปัญหาฮาร์ดแวร์เพิ่มเติมหรือทำการแลกเปลี่ยนบางอย่างกับอุปกรณ์ระยะไกล

วิธีการปกติกำลังทำการส่งสัญญาณ "Keep-alive" (แม้จะเป็นแค่ข้อมูลเมตาเช่นตั้งค่า DTR ชั่วขณะและคาดว่า CTS) แต่ถ้าระเบียบวินัยของโปรโตคอลที่ใช้โดยซอฟต์แวร์ที่ปลายทั้งสองของสายเคเบิลห้ามการแลกเปลี่ยนที่ไม่ได้ใช้งาน ติดสวยมากโดยใช้หัวแร้งเพื่อดำเนินการต่อ

สิ่งที่คุณอาจลองคือ "ปีศาจ" เพิ่มเติมบางอย่างที่ตั้งค่าไปป์ส่งต่อข้อมูลระหว่างซอฟต์แวร์ของคุณและอุปกรณ์ทางกายภาพ (ทั้งสองด้าน) ห่อหุ้มมัน - และทำการ "ตรวจสอบการเชื่อมต่อ" หากท่อไม่ได้ทำงาน

ให้ฉันเพิ่มวิธีแก้ปัญหาที่พบได้ทั่วไป: หากอุปกรณ์ปลายทางของคุณไม่ได้ใช้การควบคุมฮาร์ดแวร์คุณสามารถย่อ DTR ด้วย CTS ภายในปลั๊กฝั่งโฮสต์และใช้ 'การควบคุมฮาร์ดแวร์' ที่ด้านโฮสต์ การสร้าง DTR จะขับเคลื่อน CTS โดยอัตโนมัติทำให้สามารถส่งสัญญาณได้หากมีสายเคเบิลดังนั้นการส่งสัญญาณจึงไม่ได้รับผลกระทบ ในขณะเดียวกันหากขาดสายเคเบิลระบบจะตอบสนองต่อการขาด CTS ในลักษณะที่เหมาะสมกับเหตุการณ์นี้เช่นสร้างการหมดเวลาหรือหยุดการส่งสัญญาณจนกว่าจะต่อสายเคเบิล


สิ่งที่ "ภูต" เป็นความคิดที่ฉลาด อย่างไรก็ตามฉันจะไม่ใช้มันเพราะฉันกลัวว่ามันจะกลายเป็นแหล่งที่มาของความมั่นคง ฉันจะอ่านสัญญาณจาก / proc และเพียงแค่ระบุว่ามีหรือไม่มีผู้ร้องเข้า / ออก นั่นก็เพียงพอแล้วสำหรับฉัน
Peter Kovac

มันเหมือนกับแมวของ Schrodinger en.wikipedia.org/wiki/Schr%C3%B6dinger%27s_cat
Ufoguy

0

มีตัวบ่งชี้การแสดงตนเพื่อบอกคุณว่าคุณมีอุปกรณ์ที่เชื่อมต่อกับปลายอีกด้านหนึ่ง แต่มันก็เป็นทางเลือกการส่งสัญญาณจะทำงานโดยมีหรือไม่มีสัญญาณการแสดงตน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.