LINUX.ORG.RU

Работа с serial-port через usb

 , , ,


0

1

В общем проблема следующая:

Имеется устройство для передачи данных по 485 протоколу, которое подключается к usb. И имеется самописная программа, которая должна этим устройством пользоваться(передавать данные по протоколу modbus).

При подключении устройства в папке dev создаётся папка serial-port с какой-то информацией об устройстве. На этом мои знания линукс заканчиваются.

По идее в программе я должен прописать адрес устройства (что-то типа tty0), но как найти этот адрес,понять не получается. Возможно его ещё как-то надо примонтировать(как с флешкой), но тогда куда?

Прошу подскажите как мне этим устройством пользоваться.

ОС - ubuntu 12.04 программа написана на C++

1) при подключении конвертора usb-485 смотри dmesg. Там будет написано, какое устройство появляется в системе.

2) самописная программа скорее всего модбас-мастер. Поэтому она не передаёт, а опрашивает подчинённое устройство. И ты увидишь какие-то данные на ПК.

3) если программа глючная используй распространённые утилиты вроде modpoll или скаду какую-нибудь.

4) Для опроса устройства ты должен знать его адрес. Иначе оно не ответит никому.

4+) Кстати все прочие параметры (чётность, количество бит и стоповые биты) тоже должны совпадать. Иначе ответа не будет.

4++) и скорость тоже

ziemin ★★
()
Последнее исправление: ziemin (всего исправлений: 3)

Тебе нужна функция для энумерации устройств - всё на 100% аналогично винде. Есть ли она в твоем фреймворке или что там у тебя - не знаю.

Хотя вот в C++/Qt 5.4 например я использую foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) для поиска живых портов.

В C++/boost кажись тоже подобное есть, но не уверен.

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от ziemin

3) если программа глючная используй распространённые утилиты вроде modpoll или скаду какую-нибудь.

Прошу подсказать пример каких-нибудь скад :) Просто самому надо, неужели готовое что-то есть?

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

но как найти этот адрес,понять не получается

имя порта будет /dev/ttyUSB* — но полагаться на это можно только в самописных программах «для себя»

next_time ★★★★★
()

Зачем городить свои кривые велосипеды? Есть отличная библа libmodbus. Так же есть довольно приличная графическая тулза для общения через modbus - qmodbus. Посмотрите как там сделано, а потом сделайте по аналогии или лучше.

yax123 ★★★★★
()
Ответ на: комментарий от yax123

Всем спасибо за то, что откликнулись и помогли.

Я и так использую libmodbus, а проверять кодом какое из устройств соединено с опршиваемыми мною устройствами в сети modbus, мне не надо, поэтому нужен был только адрес устройства usb 485, коим оказался ttyUSB0.

Узнал с помощью dmesg.

За идею с foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) то же спасибо.

kvazar2
() автор топика
Ответ на: комментарий от I-Love-Microsoft

Да полно. Самая простая ScadaBR (web).

OpenSCADA (которая на плюсах), OpenSCADA (которая на яве) - но эти замороченно настраиваются.

http://linuxscada.info/

ziemin ★★
()
Ответ на: комментарий от kuzulis

А где везде я её написал? Разумеется, можно ОТДЕЛЬНО этот QSerialPort собрать из git для Qt 4. По какому поводу предъявы? :)

I-Love-Microsoft ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.