QT&ZigBee |
Здравствуйте, гость ( Вход | Регистрация )
QT&ZigBee |
Stoptyssin |
20.1.2012, 17:00
Сообщение
#1
|
Студент Группа: Участник Сообщений: 20 Регистрация: 20.1.2012 Пользователь №: 3145 Спасибо сказали: 0 раз(а) Репутация: 0 |
Здравствуйте! Заранее извиниясь за ламерство. Пишу диплом. Надо написать программу которая получает данные от нескольких ZigBee устройст и заносит их в базу данных (MySql). В принципе все устройства соеденены с ПК через ZigBee коллектор который работает как виртуальный COM-порт. Ни с мускулем ни QT особо дел не имел. Подскажите в каком направлении двигаться, если можно то с примерами (можно и на WiFi и на Bluetouth там я сам разберусь). И последний вопрос (самый ламерский), как лучше - принимать данные : буфер -> файл ->бд, или же буфер ->бд (временная таблица)-> файл. Заранее спасибо за ответы.
|
|
|
Abesh |
21.1.2012, 9:02
Сообщение
#2
|
Студент Группа: Новичок Сообщений: 13 Регистрация: 4.6.2010 Пользователь №: 1780 Спасибо сказали: 2 раз(а) Репутация: 0 |
Библиотека по работе с Com -портом:
QSerialDevice БД это ничто иное как набор файлов + обвязка для них. Если нужно по данным осуществлять какой-то особый поиск и причем это надо делать постоянно, то выбирается Бд, если нет, то файл и в обоих случаях нафиг промежуточное звено, т.е в зависимости от того, что нужно буфер -> файл буфер -> БД |
|
|
zloiia |
21.1.2012, 11:20
Сообщение
#3
|
Студент Группа: Участник Сообщений: 25 Регистрация: 5.5.2011 Пользователь №: 2655 Спасибо сказали: 5 раз(а) Репутация: 0 |
Ну насчет последовательного порта я бы все-таки порекомендовал qextserialport. Ну если будет использоваться MinGW и Винда, то ТУТ у меня есть все библиотеки которые в данном случае понадобятся уже собранные.
PS: я бы лучше использовал не буфер а очередь. Если задача собрать данные с порта, то кинуть отдельным потоком работу с портом, который будет просто общаться с девайсом и набивать очередь данных, которые нужно записать в базу. А в основном потоке повесить обработчик очереди, который будет ее аккуратно спихивать в базу по мере поступления данных. |
|
|
kuzulis |
21.1.2012, 14:09
Сообщение
#4
|
Активный участник Группа: Участник Сообщений: 393 Регистрация: 29.6.2009 Пользователь №: 862 Спасибо сказали: 36 раз(а) Репутация: 7 |
Ну насчет последовательного порта я бы все-таки порекомендовал qextserialport. Чем аргументируешь? Чем оно лучше? |
|
|
Stoptyssin |
21.1.2012, 15:52
Сообщение
#5
|
Студент Группа: Участник Сообщений: 20 Регистрация: 20.1.2012 Пользователь №: 3145 Спасибо сказали: 0 раз(а) Репутация: 0 |
PS: я бы лучше использовал не буфер а очередь. Если задача собрать данные с порта, то кинуть отдельным потоком работу с портом, который будет просто общаться с девайсом и набивать очередь данных, которые нужно записать в базу. А в основном потоке повесить обработчик очереди, который будет ее аккуратно спихивать в базу по мере поступления данных. А можно пару примеров как это делается, дело в том что данные полученные с устройства должны сохранятся в архиве, а БД уже обработанные. При этом всем может одновременно идти инфармация от нескольких устройств, заранее спасибо |
|
|
zloiia |
21.1.2012, 17:29
Сообщение
#6
|
Студент Группа: Участник Сообщений: 25 Регистрация: 5.5.2011 Пользователь №: 2655 Спасибо сказали: 5 раз(а) Репутация: 0 |
Чем аргументируешь? Чем оно лучше? Все равно все от него пляшут данные полученные с устройства должны сохранятся в архиве, а БД уже обработанные. А можно сразу нескромный вопрос - "А чем БД плоха в качестве архива?" Вы же, если я не ошибаюсь, MySQL использовать собрались, а там есть такой замечательный тип как Archive. И вообще часть обработки (если не всю) можно положить непосредственно на базу данных. Почитайте про триггеры При этом всем может одновременно идти инфармация от нескольких устройств Вы что-то там упоминали про ZigBee коллектор, что-то не могу понять как он работает. Он принимает данные с устройств и какает в порт сообщениями типа "Такой-то девайс послал то-то" ? Или он на одно устройство рассчитан? |
|
|
Stoptyssin |
21.1.2012, 17:51
Сообщение
#7
|
Студент Группа: Участник Сообщений: 20 Регистрация: 20.1.2012 Пользователь №: 3145 Спасибо сказали: 0 раз(а) Репутация: 0 |
|
|
|
kuzulis |
21.1.2012, 17:58
Сообщение
#8
|
Активный участник Группа: Участник Сообщений: 393 Регистрация: 29.6.2009 Пользователь №: 862 Спасибо сказали: 36 раз(а) Репутация: 7 |
Все равно все от него пляшут LOL Кто эти все? Сейчас идет процесс интеграции QSerialDevice 2.0 в Qt (как аддон). Nokia дала добро и в скором времени начнется интеграция репозитория и т.п. Так что про QextSerialPort можно забыть, тем более, он по многим параметрам уступает как в кривом архитектурном плане, возможностях, также оно уже "мертво" и не развивается вообще. Так что вывод делайте сами. Цитата(Stoptyssin) Он принимает данные с устройств и какает в порт сообщениями типа "Такой-то девайс послал то-то" - именно так Я не распарсил, что имеется ввиду? Сообщение отредактировал kuzulis - 21.1.2012, 18:00 |
|
|
Stoptyssin |
21.1.2012, 18:18
Сообщение
#9
|
Студент Группа: Участник Сообщений: 20 Регистрация: 20.1.2012 Пользователь №: 3145 Спасибо сказали: 0 раз(а) Репутация: 0 |
Будет строиться сеть (звезда) на интерфейсе ZigBee, вся игфа со всех устройств сливается в один ПК. В Пк вставляется следующая херотень http://www.telegesis.com/products/etrx2_usb.htm
|
|
|
zloiia |
22.1.2012, 13:55
Сообщение
#10
|
Студент Группа: Участник Сообщений: 25 Регистрация: 5.5.2011 Пользователь №: 2655 Спасибо сказали: 5 раз(а) Репутация: 0 |
Stoptyssin, а примеры... Может поможет. Кусок из моего давнего проекта. У нас было самопальное устройство, у которого сообщения с устройства были просты как валенки
Цитата <CommandValue> Где Command и Value были целыми числами. Данные капали где-то 5 раз в секунду и лень было заморачиваться с оптимизацией, поэтому сделал так. (писал с использованием QextSerialPort но разницы никакой). Унаследовался от QextSerialPort , завел слот, который связал с сигналом readyRead() (то есть в этом слоте читал данные, которые пришли с порта). В нем все что приходило забивал в свойство этого класса типа QByteArray (то есть создавал буфер на случай если у меня не вся команда придет сразу) и затем в этом буфере искал целую команду. Когда находил команду, высылал сигнал, который сообщал что за команда пришла и ее параметр
Затем создал обычный класс, унаследованный от QObject, к котором принимал этот сигнал и просто забивал очередь QQueue. В этом-же классе переопределил свойство void timerEvent(QTimerEvent *); и в нем смотрел, если очередь не пустая, то писал в базу одно первое сообщение очереди и успокаивался. Пришлось извратиться с таймером так, потому что в качестве базы выступала xml таблица на удаленной машине, подключенная через ODBC |
|
|
Текстовая версия | Сейчас: 27.11.2024, 16:18 |