Russian Qt Forum
Май 04, 2024, 12:12 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 ... 14 15 [16] 17 18 ... 88   Вниз
  Печать  
Автор Тема: Создаю библиотеку для работы с последовательными портами. [УШЕЛ ИЗ ПРОЕКТА].  (Прочитано 752739 раз)
Aibalit
Гость
« Ответ #225 : Август 05, 2010, 22:46 »

Доброго времени суток. Мне нужно написать программу для управления устройством через COM порт. Для связи с устройством используется CP210x USB to UART Bridge Controller. Необходимо выполнять стандартные операции (запись/считывание). Решил выбрать для реализации библиотеку QSerialDevice.
Использование примеров желаемого результата не дало (например writer): порт открывается, но то ли запись не происходит, то ли устройство не реагирует. Однако, когда пробую произвести запись через стандартный HyperTerminal в Windows, то устройство реагирует (при записи например "KEY=R"  в устройстве происходит переход по меню вправо).
Подскажите пожалуйста, что я не так делаю? Ато уже мозг себе сломал....
Записан
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« Ответ #226 : Август 05, 2010, 23:36 »

Установить какой-нибудь снифер COM порта и сравнить трафик гипертерминала и своей программы.
Записан
labview
Гость
« Ответ #227 : Август 05, 2010, 23:39 »

Подслушай с помощью Free Serial Port Monitor на самом ли деле ты отправляешь то же самое, что и через Hyper Terminal. Причин может быть много - настройки порта, терминаторный символ (ы), или Hardware Handshake. Так же некоторые USB адаптеры (я знаю, что их всего два типа FTDI и Prolific) не одинаково хорошо/плохо поддерживаются разными библиотеками.

ЗЫ пока писал уже ответили  Веселый
« Последнее редактирование: Август 05, 2010, 23:44 от labview » Записан
eugene
Гость
« Ответ #228 : Август 06, 2010, 07:07 »

Доброго времени суток. Мне нужно написать программу для управления устройством через COM порт. Для связи с устройством используется CP210x USB to UART Bridge Controller. Необходимо выполнять стандартные операции (запись/считывание). Решил выбрать для реализации библиотеку QSerialDevice.
Использование примеров желаемого результата не дало (например writer): порт открывается, но то ли запись не происходит, то ли устройство не реагирует. Однако, когда пробую произвести запись через стандартный HyperTerminal в Windows, то устройство реагирует (при записи например "KEY=R"  в устройстве происходит переход по меню вправо).
Подскажите пожалуйста, что я не так делаю? Ато уже мозг себе сломал....
Проверь настройки порта. Я работаю с этой библиотекой и c переходником сделаным на CP210x USB to UART. Всё работает отлично.
Записан
Aibalit
Гость
« Ответ #229 : Август 06, 2010, 08:00 »

Настройки проверил - все правильные... сейчас буду пробовать со снифером.
to: eugene
А можно посмотреть работающую программу, если не затруднит?
Записан
Aibalit
Гость
« Ответ #230 : Август 06, 2010, 12:36 »

Ура  Улыбающийся спасибо за снифер. С его помощью определил, что был неправильный формат пакета - нужно было в конце добавлять символ возврата коретки (а в гипертерминале это происходит после нажатия enter).
Записан
Aibalit
Гость
« Ответ #231 : Август 11, 2010, 12:32 »

Подскажите пожалуйста как прикрутить библиотеку к своему проекту... по аналогии с примерами не получилось. При сборке выскакивает ошибка:
c:/qt/4.6.2/mingw/bin/../lib/gcc/mingw32/4.4.0/../../../../mingw32/bin/ld.exe: cannot find -lqserialdevice.
Пути вроде все прописывал правильно. Если можно, то по-подробнее...
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #232 : Август 11, 2010, 13:48 »

Aibalit,

Чтобы не "заморачиваться" - проще прикрутить либу, прикрутив *.pri !!!
Это при условии, что Вам требуется ее статически слинковать с вашим проектом (это тоже самое что и делается в примерах,
только в примерах используется уже скомпиленная библиотека, но Вы можете использовать сорцы *.pri не компиля библиотеку - а компиля
сразу ваш проект).

Цитировать
Пути вроде все прописывал правильно. Если можно, то по-подробнее...

Если все-таки не передумали, то:
1. Покажите *.pro вашего проекта.
2. Приведите структуру каталогов где лежит либа и где лежит ваш проект

Записан

ArchLinux x86_64 / Win10 64 bit
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #233 : Август 12, 2010, 19:59 »

Сегодня добавил новый класс SerialDeviceEnumerator который в будущем должен заменить два класса: SerialDeviceWatcher+SerialDeviceInfo (т.е. я их планирую удалить вообще).  В новом классе по идее должны работать любые девайсы.. Прошу потестить.
Записан

ArchLinux x86_64 / Win10 64 bit
Aibalit
Гость
« Ответ #234 : Август 13, 2010, 13:34 »

kuzulis,

1) *.pro
TARGET = Proga
TEMPLATE = app


OBJECTS_DIR     = ../../build/obj
MOC_DIR         = ../../build/moc

DEPENDDIR       = .
INCLUDEDIR      = .

DEPENDPATH      += .
INCLUDEPATH     += ../../qserialdevice

QMAKE_LIBDIR    += ../../qintegratedserialdevice/release

HEADERS  += dialog.h\

SOURCES += main.cpp \
        dialog.cpp\


LIBS       += -lqserialdevice

FORMS    += dialog.ui
 

2) Соответственно в корневой директории лежит папка qserialdevice и qintegratedserialdevice (их внутренняя структура  аналогична примерам).
Записан
ufna
Гость
« Ответ #235 : Август 13, 2010, 13:35 »

а у меня вопрос - для WinCE планируется или вообще когда нибудь ожидается? Улыбающийся
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #236 : Август 13, 2010, 14:21 »

2 Aibalit,

И?

2 ufna,

Цитировать
а у меня вопрос - для WinCE планируется или вообще когда нибудь ожидается? Улыбающийся

Я делать это не собираюсь. Сами сделайте, раз у вас есть девайсы с Win CE
Записан

ArchLinux x86_64 / Win10 64 bit
ufna
Гость
« Ответ #237 : Август 13, 2010, 14:47 »

ну я для WinCE ручками WinAPI юзаю. Хотел в твоей библиотеке класс унаследовать, а поковырялся - там в первичном классе для WinCE "невозможно" сделано. Просто очень много людей меня спрашиваю как с COM на WinCE работать, мучаются пытаясь заставить либы работать, но толку то - там другой тип чтения данных. Мое дело спросить, спасибо.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #238 : Август 13, 2010, 15:47 »

Цитировать
ну я для WinCE ручками WinAPI юзаю.

Ну так поделился бы кодом бы., если б хотел бы чтобы WinCE пподдерживалось. А то шото хотите - а взамен ничо не даете! Улыбающийся
Записан

ArchLinux x86_64 / Win10 64 bit
ufna
Гость
« Ответ #239 : Август 13, 2010, 16:37 »

Дак тут все просто.

Подключение к COM порту:

Код
C++ (Qt)
   hComm = CreateFile( "COM1:",
       GENERIC_READ | GENERIC_WRITE,
       0,
       0,
       OPEN_EXISTING,
       FILE_FLAG_OVERLAPPED,
       0);
 
   if (INVALID_HANDLE_VALUE == hComm) {
       qDebug("Unable to open the port");
       return false;
   }
 
   GetCommState(hComm, &PortDCB);
   PortDCB.BaudRate = m_baudRate;
 
   if (FALSE == SetCommState(hComm, &PortDCB)) {
       qDebug("Unable to configure the serial port");
       return false;
   }

Чтение:

Код
C++ (Qt)
   DWORD lpNumberOfBytesRead;
   char* lpBuffer = new char[m_readBufferLength];
 
   ReadFile(
       hComm,
       lpBuffer,
       m_readBufferLength,
       &lpNumberOfBytesRead,
       NULL);

Просто на WinCE читать получается только так.
Записан
Страниц: 1 ... 14 15 [16] 17 18 ... 88   Вверх
  Печать  
 
Перейти в:  


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