Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Givoi от Январь 18, 2012, 11:37



Название: Имитатор устройства и связь по com-порту
Отправлено: Givoi от Январь 18, 2012, 11:37
Здравствуйте.
Дали задание - написать имитатор устройства,  которое общается с компьютером по com-порту.
В работе использую ноут с Debian.
Физических com портов нету.
Для создания виртуальных портов думаю использовать socat,  в имитаторе QSerialDevice.
подскажите с чего вообще начать?


Название: Re: Имитатор устройства и связь по com-порту
Отправлено: Bepec от Январь 18, 2012, 17:09
С разработки протокола передачи :)
Чётко поставить себе цели, описать возможности, реализовать в протоколе.
А потом уже и об устройстве думать ;)


Название: Re: Имитатор устройства и связь по com-порту
Отправлено: Givoi от Январь 18, 2012, 18:28
ммм, отличный ответ, ну собственно дело пошло =) спасибо. вот ток закрался один вопрос, если у меня есть один порт, я в него буду посылать данные одной программой, а другой программой его слушать, это будет работать?


Название: Re: Имитатор устройства и связь по com-порту
Отправлено: kuzulis от Январь 18, 2012, 19:42
1. Под линукс, если использовать самодельный голый POSIX код, да - будет.
В линуксе возможен одновременный доступ к ресурсу (порту) из нескольких приложений.
Но я б не стал так делать.

2. QSerialDevice использует порт в монопольном режиме, т.е. не даст открыть уже открытый порт (читай документацию).

Если оч надо два порта - то в линухе есть утилиты, которые делают как бы виртуальную связь между у-вами типа /dev/pts.
И в своей программе-симуляторе открывай не порты, а эти /dev/pts ...

Погугли.


Название: Re: Имитатор устройства и связь по com-порту
Отправлено: Bepec от Январь 18, 2012, 20:00
Можно так делать, но для этого нужна сторонняя библиотека.

Та, которой я пользуюсь, является коммерческой(разработкой моей же фирмы) и соответственно никому её не дам.

А проблема монопольного доступа решается 2 потоками, которые получают указатели на порт (открытый ужо). Соответственно чтение/запись одновременная будет доступна.


Название: Re: Имитатор устройства и связь по com-порту
Отправлено: Givoi от Январь 20, 2012, 08:04
использую виртуалку,  ком порт имитирую средствами виртуалки, сохранение данных отправленных в порт осуществляется в файл на хосте,  при чтении из порта,  должен читать из того же файла,  но этого не происходит. код использую тот что в примерах qserialdevice,  программа говорит что время ожидания истекло,  в чем накосячил?  =(


Название: Re: Имитатор устройства и связь по com-порту
Отправлено: Bepec от Январь 20, 2012, 08:24
А давайте напишем как вы это делаете, чем вы это делаете и определён ли COM порт в системе?

А так же, ради удовлетворения своего же, установите что нить типа "HDD Free Serial Monitor", и будете точно знать, что у вас уходит и что приходит.


Название: Re: Имитатор устройства и связь по com-порту
Отправлено: Givoi от Январь 20, 2012, 08:47
семерка хост,  виртуалка виртуал бокс,  гостевая убунту 11.10, в настройках виртуалки определил ком порт,  режим порта- перенаправление в файл на хосте. код проги взят из примеров qserialdevice для записи в ком порт использую пример writer,  запись проходит, в файл coхраняется,  для чтения использую пример reader,  который постоянно выдает timeout read data.


Название: Re: Имитатор устройства и связь по com-порту
Отправлено: kuzulis от Январь 20, 2012, 09:58
Цитировать
семерка хост,
Поставь на свой хост ПО для создания виртуальных портов, типа:
1. Eltima Virtual Serial Port Driver (что предпочтительнее, но нужен кряк)
2. com0com (свободное ПО, бесплатно)

И разрабатывай проект на хосте (Win7) и не мучайся с виртуалками,
потом, когда приобретешь реальные переходники USB/Serial - переедешь на Ubuntu
и проверишь на реальном железе.


ЗЫ:
Кстати, я планирую создать универсальный кросс-платформенный набор утилит (https://gitorious.org/qt-serial-port-monitor-tools/qt-serial-port-monitor-tools) на Qt для создания виртуальных портов, их трассировки и т.п.
Чтобы не было такого рода проблем в разных ОС.

Но пока дальше чем создание MainWindow я не продвинулся (оказалось, что все намного сложнее чем я думал) ::).