- Подключаем последовательные интерфейсы по IP
- Характеристики
- Виртуальный COM-порт
- Режим RFC 2217
- Режим P2P
- Уведомления о событиях
- Логирование через Syslog
- Первичная настройка
- Заключение
- Виртуальный Serial Port для Linux
- 8 ответов
- Реализация RFC 2217
- Модифицировать драйвер linux serial port
- Используйте два кабеля USB Serial в петле
- Похожие вопросы:
Подключаем последовательные интерфейсы по IP
Последовательные интерфейсы RS-232/422/485 до сих пор очень популярны в промышленности: по ним подключаются диагностические порты, датчики, сканеры штрих-кодов и RFID меток и т.д. Однако последовательные интерфейсы имеют свои ограничения. Иногда возникает необходимость получить доступ к такому интерфейсу по IP-сети, или, например, иметь доступ к одному устройству с RS-232 с нескольких удаленных компьютеров одновременно, или объединить несколько удаленных объектов в одну шину RS-485.
Сервер последовательных интерфейсов конвертирует последовательные физические протоколы в IP-пакеты, и позволяет программно управлять ими — подключать удаленный виртуальный COM-порт к компьютеру по сети так, будто он подключен физически, и прозрачно соединять несколько устройств в режиме P2P, без использования компьютеров.
В статье мы разберем сервер последовательных интерфейсов Advantech EKI-1524, имеющий четыре последовательный порта, каждый из которых поддерживает протоколы RS-232/422/485, и два LAN-порта.
Сервер последовательных интерфейсов EKI-1524 имеет четыре порта DB9 и два LAN-порта.
- Виртуальный COM-порт — позволяет программно эмулировать виртуальный COM-порт удаленного устройства на системе Linux.
- Одновременное подключение нескольких клиентов — в режиме сервера дает возможность использовать один последовательный порт для нескольких устройств одновременно.
- Работа в режиме P2P — одновременная работа в режиме клиента и сервера позволяет объединить несколько EKI-1524 напрямую, без использования серверов и компьютеров.
Характеристики
Дополнительно представлены модели с повышенным уровнем защищенности, для работы в экстремальных условиях, и гальванической развязкой портов, для защиты от высоких напряжений: EKI-1522I, EKI-1524I, и другие.
Все модели поддерживают подключение двух источников питания. Переключение между источниками питания происходит без перезагрузки устройства. Реле индикации обрыва питания замыкается в случае, если на одной из линий отсутствует напряжение.
Виртуальный COM-порт
Сервер последовательных интерфейсов позволяет по TCP/IP получить доступ к удаленным устройствам таким образом, что для прикладного ПО это будет выглядеть так, будто устройства подключены к физическому COM-порту.
Принцип работы виртуального COM-порта по сети Ethernet
Для этого на стороне клиента используется модуль ядра Linux и программа для обмена данными с сервером последовательных интерфейсов. В итоге для пользователя такое подключение выглядит как физический порт (устройство /dev/ttyADV0).
На данный момент Advantech выпускает драйвера виртуального COM-порта только для ОС Linux. Инструкция по сборке модуля ядра VCOM 2.0 на Ubuntu.
Также существуют бинарные пакеты драйвера под разные дистрибутивы: Linux Pseudo TTY
В веб-интерфейсе можно настроить параметры работы в данном режиме:
Дополнительные настройки. Можно вручную задать таймауты и т.д:
Настройки параметров последовательного интерфейса. В этом меню также можно изменить основной протокол (RS-232/422/485), для каждого порта.
Режим RFC 2217
Также доступен открытый протокол перенаправления COM-порта RFC 2217, представляющий собой расширенные команды для протокола Telnet. В этом режиме устройство принимает входящие подключения по TCP, в настройках можно указать порт для входящий соединений.
Режим P2P
Для сложных случаев, когда несколько устройств нельзя соединить напрямую, можно использовать два терминальных сервера в режиме прозрачного моста. Таким образом можно подключить удаленные устройства, используя в качестве транспорта TCP/IP.
Подключение двух удаленных устройств по последовательному протоколу через TCP/IP-транспорт
Таким образом можно программно переключать устройства между собой, соединять удаленные шины по RS-485 и делать много другое, используя все преимущества IP-сетей, включая радиомосты, виртуальные частные сети (VPN) и т.д. Передаваемые данные между двумя серверами можно дополнительно защитить от перехвата, используя шифрование на транспортном уровне.
Уведомления о событиях
Устройство позволяет настроить уведомления о событиях с помощью Email и SNMP Trap. MIB-файл для настройки SNMP-сервера доступен для каждого устройства.
События для уведомлений можно настроить вручную.
Логирование через Syslog
В веб-интерфейсе можно задать адрес удаленного Syslog-сервера для логирования. В лог записываются события подключения клиентов, ошибки аутентификации, статус LAN и последовательных портов и т.д.
Первичная настройка
Первичную конфигурацию сервера последовательных интерфейсов можно выполнить через утилиту EKI Device Configuration Utility. При этом утилита работает через ARP-пакеты и не требует настройки соответствующего IP-адреса на сетевом интерфейсе. Это значит, что можно задать любой IP-адрес устройству, без утраты доступа.
Заключение
Серверы последовательных интерфейсов позволяют обходить ограничения, которые накладывают физические протоколы, и легко масштабировать подключения. Режим P2P позволяет подключать устаревшие устройства, используя интернет в качестве транспорта, при этом обходиться без серверов.
Источник
Виртуальный Serial Port для Linux
Мне нужно протестировать приложение serial port на Linux, однако моя тестовая машина имеет только один serial port.
Есть ли способ добавить виртуальный serial port в Linux и протестировать мое приложение, эмулируя устройство через shell или скрипт?
Примечание: Я не могу переназначить порт, он жестко закодирован на ttys2, и мне нужно протестировать приложение так, как оно написано.
8 ответов
Мне нужно создать приложение Cocoa, которое создаст виртуальный serial port, доступный для других приложений, то есть зарегистрированный в реестре IO Kit. Суть приложения: Создайте виртуальный serial port (перечисленный в /dev и зарегистрированный в реестре IOKit) Инициировать подключение tcp к.
Возможный Дубликат : Имитировал интерфейс RS232 Serial Port Я разрабатываю приложение, которое использует COM serial port. Чтобы проверить логику моего приложения, я думаю, что одним из решений является использование виртуального порта COM вместо канала, например. Знаете ли вы какое-нибудь.
Дополняя ответ @slonik’s.
Вы можете протестировать socat для создания виртуального Serial Port, выполнив следующую процедуру (протестировано на Ubuntu 12.04):
Откройте terminal (назовем его Terminal 0) и выполните его:
Приведенный выше код возвращает:
Откройте другой terminal и напишите (Terminal 1):
имя порта этой команды может быть изменено в зависимости от ПК. это зависит от предыдущего вывода.
вы должны использовать номер, доступный в выделенной области.
Откройте другой terminal и напишите (Terminal 2):
Теперь вернитесь к Terminal 1, и вы увидите строку «Test».
Для этого можно использовать pty («псевдо-телетайп», где a serial port — «реальный телетайп»). С одного конца откройте /dev/ptyp5 , а затем присоедините свою программу к /dev/ttyp5 ; ttyp5 будет действовать точно так же, как serial port, но будет отправлять/получать все, что он делает, через /dev/ptyp5.
Если вам действительно нужно , чтобы он разговаривал с файлом под названием /dev/ttys2 , просто уберите свой старый /dev/ttys2 и сделайте символическую ссылку с ptyp5 на ttys2 .
Конечно, вы можете использовать какое-то другое число, кроме ptyp5 . Возможно, выберите один с большим числом, чтобы избежать дубликатов, так как все ваши терминалы входа в систему также будут использовать ptys.
Используйте socat для этого:
Существует также tty0tty http://sourceforge.net/projects/tty0tty/ , который является настоящим эмулятором модема null для linux.
Это простой модуль kernel — небольшой исходный файл. Я не знаю, почему он получил только большие пальцы на sourceforge, но он хорошо работает для меня. Самое лучшее в нем то, что он также эмулирует аппаратные контакты (RTC/CTS DSR/DTR)., он даже реализует команды TIOCMGET/TIOCMSET и TIOCMIWAIT iotcl!
На недавнем kernel вы можете получить ошибки компиляции. Это легко исправить. Просто вставьте несколько строк в верхней части источника module/tty0tty.c (после включения):
Когда модуль загружен, он создает 4 пары последовательных портов. Устройства от /dev/tnt0 до /dev/tnt7, где tnt0 подключен к tnt1, tnt2 подключен к tnt3 и т. Д. Возможно, вам потребуется исправить права доступа к файлам, чтобы иметь возможность использовать устройства.
Наверное, я немного поторопился со своим энтузиазмом. В то время как водитель выглядит многообещающе, он кажется нестабильным. Я не знаю точно, но думаю, что он разбил машину в офисе, над которым я работал из дома. Я не могу проверить, пока не вернусь в офис в понедельник.
Во-вторых, TIOCMIWAIT не работает. Код, по-видимому, скопирован из некоторого примера кода «tiny tty». Обработка TIOCMIWAIT кажется на месте, но она никогда не просыпается, потому что соответствующий вызов wake_up_interruptible() отсутствует.
Авария в офисе действительно произошла по вине водителя. Отсутствовала инициализация, и полностью непроверенный код TIOCMIWAIT вызвал сбой машины.
Я провел вчера и сегодня, переписывая драйвер. Было много проблем, но теперь это хорошо работает для меня. По-прежнему отсутствует код для управления аппаратным потоком, управляемым драйвером, но он мне не нужен, потому что я сам буду управлять выводами, используя TIOCMGET/TIOCMSET/TIOCMIWAIT из кода пользовательского режима.
Если кого-то заинтересует моя версия кода, отправьте мне сообщение, и я отправлю его вам.
Я ищу простую в использовании C++ librairie для диалога с Serial Port под Linux. Я посмотрел на Boost::Asio, но это выглядит очень сложно для моего небольшого использования. Я просто хочу получить некоторую информацию о Serial Port и записать ее в базу данных. Знаете ли вы простую Serial Port.
Я разрабатываю приложение, которое должно иметь возможность писать на виртуальный serial port и получать данные через тот же порт от удаленных клиентов по сети. Приложение работает на сервере linux. Я новичок в использовании последовательных портов, и у меня есть несколько вопросов по этой теме.
Возможно, вы захотите взглянуть на Tibbo VSPDL для создания linux virtual serial port с использованием драйвера Kernel-он кажется довольно новым и доступен для загрузки прямо сейчас (бета-версия). Не уверен в лицензии на данный момент, или они хотят сделать ее коммерчески доступной только в будущем.
Существуют и другие коммерческие альтернативы, такие как http://www.ttyredirector.com/ .
В открытом исходном коде Remserial (GPL) также может делать то, что вы хотите, используя Unix PTY. Он передает последовательные данные в «raw form» в сетевой сокет; STTY-подобная настройка параметров terminal должна быть выполнена при создании порта, изменение их позже, как описано в RFC 2217, похоже, не поддерживается. Вы должны иметь возможность запустить два экземпляра remserial для создания виртуального nullmodem, такого как com0com, за исключением того, что вам нужно будет заранее настроить скорость порта и т. Д.
Socat (также GPL) похож на расширенный вариант Remserial со многими другими опциями, включая метод «PTY» для перенаправления PTY на что-то другое, что может быть другим экземпляром Socat. Для Unit tets socat, вероятно, лучше, чем remserial, потому что вы можете напрямую загружать файлы cat в PTY. См. Пример PTY на странице руководства. Патч существует под «contrib», чтобы обеспечить поддержку RFC2217 для согласования настроек последовательной линии.
Используя ссылки, опубликованные в предыдущих ответах, я закодировал небольшой пример в C++, используя виртуальный Serial Port. Я ввел код в GitHub: https://github.com/cymait/virtual-serial-port-example .
Код довольно понятен. Во-первых, вы создаете главный процесс, запустив ./main master, и он будет напечатан в stderr, который использует устройство. После этого вы вызываете ./main slave device, где device-это устройство, напечатанное в первой команде.
И это все. У вас есть двунаправленная связь между этими двумя процессами.
Используя этот пример, вы можете протестировать приложение, отправив все виды данных, и посмотреть, правильно ли оно работает.
Кроме того, вы всегда можете создать символическую ссылку на устройство, поэтому вам не нужно повторно компилировать приложение, которое вы тестируете.
Сможете ли вы использовать адаптер USB — >RS232? У меня есть несколько, и они просто используют драйвер FTDI. Затем вы должны иметь возможность переименовать /dev/ttyUSB0 (или то, что будет создано) в /dev/ttyS2 .
Я могу придумать три варианта:
Реализация RFC 2217
RFC 2217 охватывает стандарт com port to TCP/IP, который позволяет клиенту в одной системе эмулировать serial port локальным программам, прозрачно посылая и получая данные и управляющие сигналы на сервер в другой системе, которая фактически имеет serial port. Вот обзор высокого уровня .
Что бы вы сделали, так это нашли или внедрили драйвер клиентского порта com, который реализовал бы клиентскую часть системы на вашем PC — кажущемся реальным serial port, но на самом деле перемещающем все на сервер. Возможно, вы сможете получить этот драйвер бесплатно от Digi, Lantronix и т. д. В поддержку их реальных автономных серверов serial port.
Затем вы реализуете серверную часть соединения локально в другой программе, позволяя клиенту подключаться и выдавать данные и команды управления по мере необходимости.
Это, вероятно, нетривиально, но RFC существует, и вы можете найти проект с открытым исходным кодом, который реализует одну или обе стороны соединения.
Модифицировать драйвер linux serial port
Кроме того, источник драйвера serial port для Linux легко доступен. Возьмите это, выпотрошите аппаратные части управления и заставьте этот один драйвер запустить два порта /dev/ttySx, как простую петлю. Затем подключите вашу реальную программу к ttyS2, а ваш симулятор — к другому ttySx.
Используйте два кабеля USB Serial в петле
Но что проще всего сделать прямо сейчас? Потратьте $40 на два serial port USB устройства, соедините их вместе (модем null) и фактически получите два реальных последовательных порта — один для программы, которую вы тестируете, один для вашего симулятора.
Похожие вопросы:
У меня есть Боб LighBlue, который является совместимым с Arduino Bluetooth LE microcontroller. Я пытаюсь получить доступ к его виртуальному serial port за пределами Arduino IDE. Я могу видеть.
Я хочу реализовать драйвер в Linux, который имеет стек Ethernet, но данные, выходящие на аппаратное обеспечение, будут serial port. В принципе, я хочу зарегистрировать свой serial port в качестве.
Я использую processing lib и хочу создать виртуальный Serial port с его помощью, а с oter read у меня есть много примеров для чтения последовательных портов, но я не нашел, как открыть serial port.
Мне нужно создать приложение Cocoa, которое создаст виртуальный serial port, доступный для других приложений, то есть зарегистрированный в реестре IO Kit. Суть приложения: Создайте виртуальный.
Возможный Дубликат : Имитировал интерфейс RS232 Serial Port Я разрабатываю приложение, которое использует COM serial port. Чтобы проверить логику моего приложения, я думаю, что одним из решений.
Я ищу простую в использовании C++ librairie для диалога с Serial Port под Linux. Я посмотрел на Boost::Asio, но это выглядит очень сложно для моего небольшого использования. Я просто хочу получить.
Я разрабатываю приложение, которое должно иметь возможность писать на виртуальный serial port и получать данные через тот же порт от удаленных клиентов по сети. Приложение работает на сервере linux.
С помощью эмулятора виртуальных последовательных портов я могу Создайте виртуальный соединитель serial port Выберите порт например COM35 для разъема Создать TCP-Сервер Назначьте серверу ранее.
Можно ли использовать 1.5 стоп-битов для serial port в linux? Похоже, что это не поддерживается POSIX. Я заглянул в исходный код pyserial, где 1.5 стоп-битов интерпретируются как 2 стоп-бита в.
У меня есть последовательное устройство, которое я соединяю по сети с помощью socat с коробки linux на коробку WSL, работающую на коробке windows. Со стороны WSL можно ли сделать виртуальный serial.
Источник