Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
1 / 1 / 0
Регистрация: 03.07.2010
Сообщений: 6
1

Не могу справиться с реализацией задачи

17.07.2012, 03:01. Показов 949. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Сам занимаюсь программированием контроллеров. Но шеф поставил задачу и её решения я не смог найти. Вобщем, есть 30 плат с Ethernet и 2 пк, один ПК как сервер, с него идёт рассылка, приём и обработка информации всё завязано на коммутатор. Необходимо с 1 пк передать 3 int числа, сам он информации не принимает, на пк-сервере обрабатывается полученная информация и на определённую плату передаётся 24 бита, а с платы может приходить 3 бита.
Будет использоваться статические IP.
Для разработки графического интерфейса использую библиотеку MFC.

Прошу любой помощи (сроки поджимают) с реализацией отправки и приёма пакетов на ПК
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.07.2012, 03:01
Ответы с готовыми решениями:

Не могу справиться с 3 задачами из курсовой. Напишите, если не сложно
№13,94,53.

Затруднения с реализацией простой задачи
Здравствуйте! Нужно написать простейшую программу на мобильное устройство. С привязкой к неделям....

Не могу справиться с ДУ
Не могу победить ДУ Y’-(1/X+1)*Y=E^X*(X+1)

Не могу справиться с if!
Вот код: #include <iostream.h> #include <stdio.h> int main() { using namespace std; ...

9
Модератор
3387 / 2159 / 352
Регистрация: 13.01.2012
Сообщений: 8,378
17.07.2012, 09:24 2
эти числа и биты - это вообще что? просто данные или какой-то протокол? TCP, UDP, Modbus поверх TCP или вообще нечто третье? а вообще - можно сделать на неблокирующих сокетах или UDP что бы система не загнулась если один из каналов накроется.
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
17.07.2012, 12:47 3
Пока из твоего описания "Вобщем, есть 30 плат..." мало что понятно о том, как должна работать вся система в целом.
Шеф поставил тебе задачу устно? (типа "сделай мне красиво".) Или же есть хотя бы какое-то формальное ТЗ? Потому что если все устно, то подсказать тебе путь правильного решения будет затруднительно, - мы тут не телепаты и залезть в черепушку твоего шефа и угадать, чего он на самом деле хочет, вряд ли сможем....
1
Эксперт С++
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
17.07.2012, 13:02 4
Цитата Сообщение от CheshireCat Посмотреть сообщение
залезть в черепушку твоего шефа и угадать, чего он на самом деле хочет, вряд ли сможем
а я-то думал =)
0
9 / 9 / 1
Регистрация: 16.11.2010
Сообщений: 33
17.07.2012, 18:52 5
kokobill, ну с платами и битами я понял, скажи конкретно что не получается?
реализация передачи данных? какой протокол используешь?

для отправки WSASend http://msdn.microsoft.com/en-u... s.85).aspx, там же и пример, для приема WSARecv http://msdn.microsoft.com/en-u... s.85).aspx
у тебя на платах поддержка сети реализована?
графический интерфейс что отображает?
0
1 / 1 / 0
Регистрация: 03.07.2010
Сообщений: 6
17.07.2012, 23:44  [ТС] 6
Уточню, ТЗ как такового нет, есть заказ. Одна гос организация захотела себе поставить электронную очередь, но так как это гос организация деньги они экономят. В чём заключается суть. Есть 30 окошек,над каждым из них стоит табло из 3-х семисигментных индикаторов, которые отображают номер клиента. Когда клиент приходит в учереждение, при входе он отвечает на 3 вопросса, програмка на первом ПК их обрабатывает и посылает 3 числа на ПК-сервер, а он в свою очередь решает на какое окошко отправить человека и отсылает на плату над этим окошком номер человека, а после окончания приёма работник в окошке нажимает кнопку и на ПК-сервер отправляеться сообщение, что окошко свободно. В платах используеться контроллер ATmega32u4, а к сети он подключается через чип ENC28J60 Ethernet.
Реализация может быть любой, главное что б всё работало.
0
9 / 9 / 1
Регистрация: 16.11.2010
Сообщений: 33
18.07.2012, 01:15 7
давай обозначимся, прошивать атмел я тебе не помогу, хотя есть у меня книга,
как реализовать обмен по сети на основе микроконтроллеров, но скачал не давно
и добратся не успел еще. Если надо могу выслать.
А по ПК то тут все просто:
сервер слушает, принимает пакет от 1-го ПК, определяет номер окна и шлет на IP,
закрепленный за платой, котороя примет число в "двойке" и отобразит на индикатор.
По обмену с пк справшивай, чем помоч-то?
0
1 / 1 / 0
Регистрация: 03.07.2010
Сообщений: 6
20.07.2012, 00:20  [ТС] 8
По поводу контроллеров я и сам)). Ну я настроил плату (покамись одну), задал ip 192.168.0.10 маску 255.255.255.0 ну и мак устройства. на ПК, ip 192.168.0.1 теперь мне надо передать на плату последовательность бит 111011101110111011101110, я знаю что должно теоретически получиться при получении этой последовательности на контроллере(у меня будут загораться определённый диоды, вся информация которую я принимаю разбивается на блоки по 8 бит и открывает ножки).

Теперь вопросс, как мне передать эти 24 бита.
Хотя бы подскажите какую библиотеку использовать, или где почитать, потому что когда гуглишь, получаешь кучу вариантов WinSocket, Boost.Asio, а так как с ООП я вообще знаком только Java и то написано пару програмок по примеру и прочитано 4 главы книги, то я просто не понимаю что мне нужно использовать для реализации моей задачи.
0
9 / 9 / 1
Регистрация: 16.11.2010
Сообщений: 33
20.07.2012, 10:19 9
kokobill, я ж тебе предлагал, WSASend - оправка данных в сокет
http://msdn.microsoft.com/en-u... s.85).aspx
там и пример, как поднять сервер, не совсем для конечной реализации, но для тестирования и понимания что где куда и откуда - подходит.
WSARecv - получение данных из сокета, и пример тривиального клиента.
что бы отправить "111011101110111011101110", то надо согласовать то, как ты будешь принимать ети данные на плате.
по мойму, на сервере (как и на любом ПК) можно попробовать преобразовать "111011101110111011101110" в десятичное число и оправить на плату
если орентироватся на предложенный выше пример, то код следующий
C++
1
2
3
4
DWORD dwCode = 15658734;  // 111011101110111011101110
DataBuf.buf = (CHAR FAR *)&dwCode;
DataBuf.len = sizeof(dwCode);
WSASend(Socket, &DataBuf, 1, &SendBytes, 0, &SendOverlapped, NULL);
плата у тебя всеравно будет данные в двоичной обрабатывать, значит ты получишь нужную последовательность бит = 111011101110111011101110. (хотя возможно я ошибся, если у тебя на плате прием по паралельной шине а не по последовательным регистрам)
можешь и Boost.Asio использовать, библиотека меняется, а принцип приема - передачи остается.
при любой библиотека ты сам должен понимать что ты отправляешь и как ты принимешь.
если все правильно организовано то и работает правильно.
1
1 / 1 / 0
Регистрация: 03.07.2010
Сообщений: 6
22.07.2012, 16:40  [ТС] 10
Во, такого ответа я и ждал в принципе, спасибо, будем изучать
0
22.07.2012, 16:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.07.2012, 16:40
Помогаю со студенческими работами здесь

Не могу справиться

Не могу справиться
Я понимаю что таких много, но все же. Помогите с решением. Раз иначе вам невдомек, то говорю...

Не могу справиться с переменной
суть: последний кусок кода, комментарием выделена строка (83) переменная не желает принимать...

не могу справиться с вирусом...
здравствуйте,уважаемые... помогите... касперский пропустил видимо вирус и он теперь постоянно сидит...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru