Подключите два последовательных порта к одному последовательному порту

Я хочу соединить два последовательных порта в один последовательный порт. Предположим, есть три системы A, B и C.

введите описание изображения здесь

A, B и C соединены друг с другом с помощью последовательной связи (порт RS232), как соединение звездой. Итак, вот ситуация. Когда система C отправляет данные в систему A и систему B, она отправляется в обе системы. Но когда система A или система B отправляют данные, они не принимаются системой C.

Поэтому я хочу знать, как общаться с устройством последовательного порта с другим устройством последовательного порта (несколько устройств).


person Rahul Sohlot    schedule 26.10.2016    source источник
comment
Это не сработает. RS-232 - это протокол точка-точка. Вы можете использовать многоточечный протокол, например RS-485. См. embedded.com/design/connectivity/4023975/.   -  person sawdust    schedule 26.10.2016


Ответы (4)


Это просто не может работать. Вам придется соединить две линии TX вместе с одной линией RX, но RS-232 (в отличие, например, от Ethernet) не является протоколом совместно используемой среды и не может обнаруживать коллизии TX (когда два устройства пытаются разговаривать одновременно).

Вам необходимо реализовать устройство посередине, которое пересылает полученные данные другим устройствам. Даже в этом случае ему нужно будет знать протокол, о котором говорят другие устройства, чтобы предотвратить прерывание сообщений (например, остановку только на символах новой строки).

person Jonathon Reinhart    schedule 26.10.2016

Да, это может сработать, по крайней мере, с определенными ограничениями / при четко определенных условиях напряжения.

  • сохраните проводку для C: TX -> A: RX и B: RX

  • для другого направления объедините данные A + B TX в один сигнал для вывода C: RX, используя «полудуплексную» схему подключения с диодом и резистором, как, например, показано в Схема Ламмерта Биса для полудуплексного кабеля RS232 для шпионажа / монитора / отслеживания или в эту схему шпионского кабеля. Оба варианта должны работать нормально, ИМХО, если A и B соответствуют спецификациям напряжения RS232.

  • Ограничение: A и B не могут отправлять данные одновременно, т.е. только «полудуплекс». Если A и B отправляют одновременно, вы получите неопределенные / мусорные данные.

Кстати, есть даже другие сообщения Stackoverflow, подтверждающие, что это работает . Отметьте там второй ответ, получивший два положительных голоса.

person Oliver Heggelbacher    schedule 26.10.2016
comment
решение с диодом / резистором задокументировано и используется даже в таких промышленных устройствах, как это: bb-elec.com/Products/Serial-Connectivity/. Конечно, если у вас есть общее неприятие электроники, соотв. диоды / резисторы, и считайте их изворотливыми, как барни - возможно, держитесь подальше от всей области RS232 / RS422 / RS485 в целом. - person Oliver Heggelbacher; 27.10.2016

Вы можете соединить их в кольцо: Atx-> Brx, Btx-> Crx, Crtx-> Arx, и тогда каждое устройство должно пересылать сообщения не для него. Это не потребовало бы каких-либо изворотливых диодных / сопротивляющихся обманщиков.

Большим преимуществом этого подхода является то, что он не накладывает никаких ограничений на то, чтобы узлы не обменивались данными одновременно :-)

person barny    schedule 26.10.2016

В этой конфигурации он не может работать, потому что последовательная связь (RS232) может обеспечить связь между двумя устройствами и не более!

      TX| -> |RX
device1 |  - | device2
      RX| <- |TX

Чтобы решить эту проблему, вы должны использовать другой протокол, например RS485 или другой.

person Oleksiy Bozhyk    schedule 26.03.2018