![]() |
|
Модераторы: feodorv |
![]()
|
|
| avmartugin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 17.6.2012 Репутация: нет Всего: нет |
В исходном состоянии лазерный сканер настроен для работы в сети с DHCP-
сервером. Данную настройку можно отключить и настроить параметры сканера (описание параметров см. ниже) для работы с определённым IP-адресом, маской сети. Предполага- ется функционирование сканера с двумя типами протоколов, а именно, UDP и TCP/IP. UDP протокол. UDP протокол используется для: 1) обнаружения сканера в сети. При подключении к сети и включении питания сканер с периодичностью раз в 2 се- кунды рассылает широковещательный информационный пакет с порта 6000 на порт 6001. Поиск устройства осуществляется посредством библиотечной функции RF_Search (см. ниже). 2) передачи измеренных значений При передаче измеренных значений UDP пакет, состоящий из 4098 байт, передается с порта 6002 на заданный порт хоста и IP адрес хоста. TCP/IP протокол Данный протокол используется для конфигурирования и проверки основных функ- ций сканера. При активном TCP/IP соединении UDP пакеты не передаются. Добавлено @ 14:16
не получается реализовать функцию поиска датчика, которая состоит в том чтобы отлавливать пакеты пришедшие на порт 6001 со всех датчиков в течении короткого промежутка времени и записать все адреса датчиков в сети в массив. далее их использовать. пробую передать на порт 6001 пакеты и ничего не происходит (на стандартном выводе нет массива символов которые я передаю) информация на сайте производителя по сканеру http://www.riftek.com/pages/2d.htm Это сообщение отредактировал(а) avmartugin - 17.6.2012, 14:28 |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 13 Всего: 110 |
попробуй так:
и покажи вывод. |
|||
|
||||
| avmartugin |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 17.6.2012 Репутация: нет Всего: нет |
error: system:234 1111111111 нашел: написано что еще есть данные, исправил отправляемое мной сообщение и ошибка исчезла! но программа сразу после получения 1 сообщения закрывается. буду копать дальше Это сообщение отредактировал(а) avmartugin - 17.6.2012, 15:36 |
||||
|
|||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 13 Всего: 110 |
согласно приведенному коду - так и должно быть ;) Добавлено через 1 минуту и 46 секунд на какой ОСи проверяешь? |
|||
|
||||
| avmartugin |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 17.6.2012 Репутация: нет Всего: нет |
на винде. boost выбрал чтобы драйвер мог работать в любой ОС (использование драйвера в будущем планируется на linux RT, будет ведь работать?) я в курсе, сейчас работаю над тем чтобы он прослушивал сообщения в течении 5 сек и потом закрывал сокет кстати, есть ли возможность передать в качестве буфера свою собственную структуру с определенными полями
Это сообщение отредактировал(а) avmartugin - 17.6.2012, 16:11 |
||||
|
|||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 13 Всего: 110 |
тут смотри. на linux RT я asio не юзал.
на-прямую - нет. напиши свою перегрузку для async_receive_from() принимающую твою структуру. |
|||
|
||||
| avmartugin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 17.6.2012 Репутация: нет Всего: нет |
это работает 5 сек и вырубается. но принимает только 1 сообщение (при приеме не вырубается). где ошибка я чет не пойму Это сообщение отредактировал(а) avmartugin - 17.6.2012, 16:44 |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 13 Всего: 110 |
в двух словах объясни задачу, я что-то запутался...
в топике написано одно, а в коде ты делаешь другое... |
|||
|
||||
| avmartugin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 17.6.2012 Репутация: нет Всего: нет |
хочу на время (допустим 5 сек) открыть udp сокет на хосте порт 6001. принять все пакеты с различных адресов (этих датчиков будет 8 штук, они в локалке с компом организующим их работу), затем составить список этих адресов (реализую потом) и дальше с ними работать по инструкции. вообще говоря io_service должен работать всегда я его выключаю чтобы программа завершилась просто чтобы отследить истечение 5 сек мне сейчас хотелось бы увидеть что он принимает сколько угодно определенных структур (пока это char[10] для теста) и выводит все на экран чтобы быть уверенным что этот кусок кода адекватно работает. датчики и сам комп находятся в цеху, куда лишний идти нет совершенно никакого желания |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 13 Всего: 110 |
зачем на время? почему не держать сокет открытым? и как этот код узнает что получил пакеты от всех датчиков? разве один датчик не может дважды отправить сообщение, а твой код его дважды поймать? задача не полностью сформулирована. (мне не интересно что будет происходит с полученными пакетами.) Это сообщение отредактировал(а) boostcoder - 17.6.2012, 17:14 |
|||
|
||||
| avmartugin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 17.6.2012 Репутация: нет Всего: нет |
датчики посылают пакет раз в 2 сек (широковещательный как я понял), сокет открытым держать конечно можно, но это будет заставлять комп лишний раз обрабатывать ненужные пакеты (поиск датчиков осуществляется 1 лишь раз за все время работы программы). мой код должен поймать лишь уникальные адреса датчиков (это я надеюсь реализовать на основе std::set, который соберет только уникальные адреса датчиков) |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 13 Всего: 110 |
из всего описанного, я задачу понял так: раз в пять секунд выполнять прием пакетов. прием пакетов продолжается до тех пор, пока не будут приняты пакеты от N устройств.
я все правильно понял? |
|||
|
||||
| avmartugin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 17.6.2012 Репутация: нет Всего: нет |
будет большой проект где драйвер устройств будет лишь средством получения данных с датчиков будет описан класс sensor_manager реализующий функцию sensors_search(...:ptime& expiered_time) внутри sensor_manager будет std::set со всеми датчиками (количество датчиков заранее неизвестно!!! но все датчики неприменно будут идентифицированы т.к. каждый из них независимо от других посылает раз в 2 сек пакет с инфой о себе, главное чтобы expiered_time был больше 2 сек, для примера используется 5 сек). мне сейчас на данном этапе нужно реализовать такой sensor_manager, которым бы можно было пользоваться в любом проекте и на любой платформе. он всего лишь должен управлять датчиками (запись/чтение параметров, получение карты с точками и т.д.) sensor_manager должен через функцию sensors_search найти все датчики сколько бы их не было. sensor_manager::sensors_search(...:ptime& expiered_time) будет вызван заранее неизвестное количество раз (зависит от пользователя системы, например рабочий может отключить от сети питания один/несколько датчиков и затем включить или не включать их, затем нажав кнопку "обновить поиск датчиков" найти все датчики которые доступны в данный момент) так что алгоритм такой: 1. используя всегда работающий сервис io_service открыть сокет на порте 6001 2. принимать пакеты от датчиков 3. с приходом пакета добавлять к std::set<sensor> sensors вновь созданный объект класса sensor (содержит адрес и настройки датчика, настройки приходят в пакете который передает датчик в широковещательном пакете) 4. перейти к пункту (2) цикл 2-4 должен повторяться пока не будет истечен таймер в указанное количество секунд |
|||
|
||||
| avmartugin |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 17.6.2012 Репутация: нет Всего: нет |
ЕСТЬ ОТВЕТ!
код. 3 файла. openRF620.cpp
sensormanager.h
sensormanager.cpp
буст рулит |
||||||
|
|||||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Сети | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |