Форум русскоязычного сообщества Ubuntu


За новостями русскоязычного сообщества и Ubuntu в целом можно следить на нашей страничке в Google+

Автор Тема: Qt-передача данных по последовательному порту  (Прочитано 5338 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Axe16

  • Автор темы
  • Новичок
  • *
  • Сообщений: 13
  • Ubuntu 10.04
    • Просмотр профиля
"echo test> /dev/ttyS1" -в консоли это передает "test" на ttyS1 А как тоакую штуку реализовать на Qt?  :D

Оффлайн VestniK

  • Активист
  • *
  • Сообщений: 594
    • Просмотр профиля
Ну можно и точно так же, открыть /dev/ttyS1 на запись используя класс QFile и записать то что нужно. Но это будет не очень платформенно независимо. Можно ещё получать оповещения о прибытии данных используя QSocketNotifier

Если нужна платформеннонезависимая обёртка, то нужно написать класс отнаследованный от QIODevice (в доках по этому абстрактному классу водилось описание того как это сделать правильно), сделав под каждую платформу, которую ты хочешь использовать, свою реализацию. Хотя может это уже кто-нибудь сделал и можно найти код под более мение свободной лицензией. Попробуй погуглить.
« Последнее редактирование: 17 Май 2010, 12:54:19 от VestniK »

Оффлайн Axe16

  • Автор темы
  • Новичок
  • *
  • Сообщений: 13
  • Ubuntu 10.04
    • Просмотр профиля
Спасибо, покопаю. А читать из ком так же?

Оффлайн VestniK

  • Активист
  • *
  • Сообщений: 594
    • Просмотр профиля
По идее да. По крайней мере если не нужно делать хитрых ioctl() вызовов над файловым дескриптором, то ты можешь QFile'ом просто читать всё как файл, ведь у нас всё есть файл :) А вот если ioctl() нужно и без него никак, то возможно придётся идти по длинному пути, по созданию своего наследника QIODevice. Хотя можно простой и не очень тривиально переносимый способ использовать: int QFile::handle() возвращает файловый дескриптор, который ты можешь использовать с любыми POSIX вызовами работающими с файловыми дескрипторами.

Оффлайн truegeek

  • FPGA Designer
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 4214
  • аЦкий схемотехник
    • Просмотр профиля
вы для себя разбираетесь, или хотите какую-то задачу реализовать?
передо мной когда-то аналогичная задача стояла, и я решил не изобретать велосипед и нашел великолепную реализацию своей цели.
может есть смысл погуглить?

Оффлайн Axe16

  • Автор темы
  • Новичок
  • *
  • Сообщений: 13
  • Ubuntu 10.04
    • Просмотр профиля
мне выпала задача писать программу управления прибором через rs-232, нужно отсылать на него значение (цифры от 1 до 16 через консоль делаю "echo 1 > /dev/ttyS0/" на прибор приходит 1) как это сделать в qt c gui не знаю, нужно чтоб при нажатии на графическую кнопку "1" на порт отсылалось "1" и т.д.

И нужно принимать сигналы с порта от прибора, он посылает потоком числа с точкой нужно записывать их в файл чтобы позже из этого файла можно было построить график с помощью qwt,  а так же просто просмотреть значения столбиком (чтоб удобно было).  :D

Изначально нужно справиться с задачей побыстрей, а заодно и сам разбираюсь ибо интересно и хочу разобраться в Qt и Cи, но с английским не очень, а опыт программирования, на уровне Hello World. :D Гугл мой друг :D только вот что-то тяжко.  :idiot2: Посему и спрашиваю. :D
з.ы. Раз вы реализовывали такой похожий проект может у вас остались исходники? Было бы полезно на них посмотреть если вам не сложно.  :D
Заранее спасибо.  :D

Оффлайн truegeek

  • FPGA Designer
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 4214
  • аЦкий схемотехник
    • Просмотр профиля
ну если у вас получается работать с прибором через консоль, типа
"echo 1 > /dev/ttyS0/"
значит и слушать его через
cat /dev/ttyS0/ > text_file
тоже должно получаться
дальше вы можете все автоматизировать любым языком программирования

исходников дать вам не могу, тк они потерялись в небытие, да и сырые они были
я работал с промышленным GSM/GPRS модемом, так что вряд ли это бы вам помогло

если у вас получится конфигурировать текстовый файл со значениями, то обрабатывать его можно вообще черти как, дело только за вашей фантазией

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2540
    • Просмотр профиля
Я поддерживаю Владимира Николаевича.
Правильнее такие программы делать 2-х или 3-х процессными.
1 - пишет любыми средствами в файл, лучше типа fifo.
2 - раскидывает по буферным файлам (лучше переключающимся текущим)
3 - визуализация из текущего файла любым способом (веб или Тк или gtk или qt - графическая среда отображения, язык любой из набора - питон, перл, php, C/C++, C#, Java).
ЗЫ. Что за мода пошла - делать все в одном флаконе. Это мода от M$.
А это уже прошлый век.
« Последнее редактирование: 17 Май 2010, 14:52:53 от alexander.pronin »

Оффлайн Axe16

  • Автор темы
  • Новичок
  • *
  • Сообщений: 13
  • Ubuntu 10.04
    • Просмотр профиля
cat /dev/ttyS0/ > text_file cпасибо, не знал, мое знакомство с никсами началось с убунты 9.10, а могу я это строчку приписать к кнопке в qt или нужно пользоваться qfile? А еще нашел

QextSerialPort
QSerialDevice

Это дополнительные библиотеки для работы с портами? Они мне нужны? :D

Дык я и хочу читать с порта в текстовый файл, а из него уже в окне программы выводить все в абличке, и график qwt чтоб строил из файла.  ;D
Просто все усложняется тем что я дебил это раз и должно это все работать на системе МСВС, где qt3.3 и ядро 2.4 вроде, сейчас за ноутом и нет возможности проверить. хД

Пользователь решил продолжить мысль 17 Май 2010, 15:11:10:
а можно мне про фифо разжевать? хД нашел только это-http://skif.bas-net.by/bsuir/ipcbook/node17.html
« Последнее редактирование: 17 Май 2010, 15:11:10 от Axe16 »

Оффлайн VestniK

  • Активист
  • *
  • Сообщений: 594
    • Просмотр профиля
что за система МСВС? Надеюсь не Microsoft VisualStudio а то советы в этом треде сыграют над тобой очень злуй шутку. Хотя если взглянуть на требование: qt3.3 То тебе ухе сразу нужно приготовиться к тому, что то, что я говорил про Qt это не правда. Ибо между 3ей и 4ой веткой Qt достаточно много различий. Сторонние библиотеки в духе названных тебе с вероятностью 80% с такой старой версией работать скорей всего не смогут. А версия эта уже давно не поддерживается ибо 4.6 на дворе и бетта релиз 4.7 вышел в мастер бранче их гита уже версию на 4.8 правят.

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2540
    • Просмотр профиля
В двух словах, подробнее к гуглу.
Fifo - это труба по принципу первый вошел - первый вышел.

Создание фифо - man mkfifo
mkfifo F1

Удаление фифо - man rm
rm F1

Запись в фифо
cat /dev/ttyS0 > F1

Чтение фифо - man cat
cat F1

что за система МСВС?
Это армейский линукс. ;D

Оффлайн truegeek

  • FPGA Designer
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 4214
  • аЦкий схемотехник
    • Просмотр профиля
cat /dev/ttyS0/ > text_file
а могу я это строчку приписать к кнопке в qt или нужно пользоваться qfile?
к сожалению с qt не работал, но думаю что можно...
вам не обязательно конфигурировать данные с помощью qt
bash вполне подойдет для обращения к порту, только не забывайте о специфике работы своего устройства, подключенного к com порту, может придется где-то задержечку поставить, где-то сбросить командой
нужно тестировать, разбираться, читать маны к устройству

Оффлайн VestniK

  • Активист
  • *
  • Сообщений: 594
    • Просмотр профиля
Цитировать
cat /dev/ttyS0/ > text_file
а могу я это строчку приписать к кнопке в qt или нужно пользоваться qfile?
Можно используя QProcess, но вот анализировать запустился ли процесс, отработал ли с корректным кодом возврата, а так же ждать когда он отработает несколько менее удобно чем просто прочитать данные из файла. Это однозначно.

Оффлайн Axe16

  • Автор темы
  • Новичок
  • *
  • Сообщений: 13
  • Ubuntu 10.04
    • Просмотр профиля
Да, МСВС http://ru.wikipedia.org/wiki/Мобильная_система_Вооружённых_Сил

Буду разбираться пока, заодно позже и вопросы добавятся. хД
« Последнее редактирование: 17 Май 2010, 17:07:23 от Axe16 »

 

Страница сгенерирована за 0.061 секунд. Запросов: 24.