Ethernet сеть

использование и разработка плат расширения

Ethernet сеть

Сообщение alchi » 25 апр 2012, 15:35

Здравствуйте!

Описание проекта в целом:

У меня есть 4 объекта управления. Посердством цифровых и аналоговых входов/выходов я подключил их к arduino uno. Используя ethernet shield на базе w5100 я их объединил в сеть через коммутатор. В который также подключены и компьютеры. На компьюторе будет программа для управления объектом испытания. Один объект управления может работать только с одним компьтером. Это выбирается в программе.

Как работать с цифровыми входами/выходами это я понял из раздела программирования. Я умею небольшие познания работы на Delphi, поэтому программу на компьюторе мне будет понятней попытаься написать на ней. Еще поставил качать LabView, почитал вроде несложно. Посмотреть хотябы для общего развития;)

Почему я за это взялся, у меня скоро диплом, сделать удобным для людей управление оборудованием, заняться чем-нибудь путнем и полезным;)

Почему ethernet - объекты управления находятся достаточно далековато от компьютеров.

Начнем с малого

Вопрос:

Как организовать обмен между компьютером и arduino посредством ethernet? Хотябы включать-выключать светодиод? Примеры в оболочке я посмотрел, но там в основном вебинтерфейс. В делфи использовать компонет tcp клиент, слать запрос на включение? А в arduino ждать запроса? Протом включать и отправлять ответ, что включил светодиод?

Как в arduino можно управлять сокетами?
Аватара пользователя
alchi
 
Сообщения: 6
Зарегистрирован: 25 апр 2012, 15:33
Откуда: Железногорск, Красноярский край

Re: Ethernet сеть

Сообщение noonv » 27 апр 2012, 06:35

alchi писал(а):Как организовать обмен между компьютером и arduino посредством ethernet? Хотябы включать-выключать светодиод? Примеры в оболочке я посмотрел, но там в основном вебинтерфейс. В делфи использовать компонет tcp клиент, слать запрос на включение? А в arduino ждать запроса? Протом включать и отправлять ответ, что включил светодиод?

да, но никто не мешает использовать вместо веб-интерфейса свой "протокол" взаимодействия.
внимательно изучите пример работы через веб-интерфейс. Всё что там делается - это на ардуине открывается 80-й порт, который слушается в loop() и при подключении клиента (в данном случае - браузера, но так же это может быть клиентская программа на любом ЯП) проверяется сообщение от него, а ему отправляется "веб-морда".
Так что, вы можете просто взять этот пример за основу, выкинуть отправку "веб-части" и приделать свои команды. Например, их можно оформить в виде пакетов с контрольной суммой - как здесь

alchi писал(а):Как в arduino можно управлять сокетами?

в Arduino работать с сетью проще всего через штатную библиотеку Ethernet library
(тут нужно обратить внимание, что в Arduino IDE 1.0 вместо Server нужно писать EthernetServer, а вместо Client - EthernetClient).
Аватара пользователя
noonv
Администратор
 
Сообщения: 557
Зарегистрирован: 05 май 2011, 15:44
Откуда: Калининград
programming: С++

Re: Ethernet сеть

Сообщение alchi » 10 май 2012, 18:01

Добрый вечер всем!
Спасибо за подсказки!
В общем я на основе ВЕБ сервера начал все делать:
Посмотрите пожалуйста, в общем плане:

//Процедура устанвоки соединения между сервером и клиентом
Код: Выделить всё
// Ждем подключение клиента
  EthernetClient client = server.available();
  //Если есть клиент, то
  if (client)
    {
      //Если севрер свободен, то сервер занимается клиентом
      if (busy == false)
        {
          //Бит занятости устанавливаем в истину
          busy=true;
          //Отправляем клиенту команду успешного подключения
          client.write ('busy_ok');
        }
      else
        {
          //Отправляем клиенту команду о невозможноcти подключения         
          client.write ('busy_not');
        } 
    } 

//Конец процедуры установки соединения между сервером и клиентом

//Процедура включения оборудование
Код: Выделить всё
if (client.available())
  {
  //Если от клиент получена команда 'work', то
    if (client.read() == 'work')
      {
        //Включаем оборудование устанавливая цифровой пин 3  в HIGH
        digitalWrite(3,HIGH); 
        //Задержка 0,5 с для включения оборудования
        delay(500);
        //Если на пине 4 LOW, т.е. оотсутствуют блокировки
        if (digitalRead(4)==LOW)
          {
            //Передаем клиенту noterror, т.е. можно работать
            client.write('noterror');
          }
        else
          {
            //Выключаем оборудование устанавливая цифровой пин 3  в LOW
            digitalWrite(3,LOW);
            //Передача клиенту информации о срабатывании блокировки
            client.write('error');
          } 
      }   
  }   

//Конец процедуры включения оборудования

Появились вопросы:
1) int socket = EthernetClient();
в переменной socket окажется номер теукущего сокета, который подключен?
2) командой client.stop(); отключаются все клиенты по инициативе сервера?
3)client.stop(1); - оотключается клиент от сокета 1 ?
4) client.write ('busy_ok'); - этой командой я могу передать клиенту данные - в скобочках?
Аватара пользователя
alchi
 
Сообщения: 6
Зарегистрирован: 25 апр 2012, 15:33
Откуда: Железногорск, Красноярский край

Re: Ethernet сеть

Сообщение alchi » 10 май 2012, 18:05

А еще вопросики:
Как оформить процедуры, что бы их потом вызывать в процессе основной программы?
Данные буду передаваться в моем случае через протокол TCP? или просто протокол ETHERNET, в котором будет мой протокол?
Аватара пользователя
alchi
 
Сообщения: 6
Зарегистрирован: 25 апр 2012, 15:33
Откуда: Железногорск, Красноярский край

Re: Ethernet сеть

Сообщение alchi » 14 май 2012, 15:21

Получилось :dan_ser:
Написал программу в Delphi: TCP клиент, кнопки и метка. Все работает отлично. Программа простая, установили соединения и опрашиваем сервер :)
Сделал еще так: крутишь патенциометр и в реальном масштабе времени в прогресбар передаются значение из АЦП (бегающая полосочка :hi_hi_hi: ).

Буду дальше пробовать;))

Вопрос про управления сокетами в ардуино остается открытым, это реально?
Аватара пользователя
alchi
 
Сообщения: 6
Зарегистрирован: 25 апр 2012, 15:33
Откуда: Железногорск, Красноярский край

Re: Ethernet сеть

Сообщение Plankin » 18 окт 2012, 19:16

alchi писал(а):Получилось :dan_ser:
Написал программу в Delphi: TCP клиент, кнопки и метка. Все работает отлично. Программа простая, установили соединения и опрашиваем сервер :)
Сделал еще так: крутишь патенциометр и в реальном масштабе времени в прогресбар передаются значение из АЦП (бегающая полосочка :hi_hi_hi: ).

Буду дальше пробовать;))

Вопрос про управления сокетами в ардуино остается открытым, это реально?


Если не сложно, выложи исходники, а то я с такойже фигней мучаюсь, или кинь на ящик [email protected]
Plankin
 
Сообщения: 5
Зарегистрирован: 08 фев 2012, 22:44
Откуда: Касимов Ряз. обл.
programming: Delphi 7

Re: Ethernet сеть

Сообщение PolzovatelPC » 19 окт 2012, 12:18

Plankin писал(а):... выложи исходники ...

Тоже буду благодарен, файлообменник или расшареный дропбокс (письмом как то read only one =)
PolzovatelPC
 
Сообщения: 3
Зарегистрирован: 17 окт 2012, 14:38
programming: СИ++

Re: Ethernet сеть

Сообщение JaDim » 07 мар 2013, 16:04

Plankin писал(а):
alchi писал(а):Получилось :dan_ser:
Написал программу в Delphi: TCP клиент, кнопки и метка. Все работает отлично. Программа простая, установили соединения и опрашиваем сервер :)
Сделал еще так: крутишь патенциометр и в реальном масштабе времени в прогресбар передаются значение из АЦП (бегающая полосочка :hi_hi_hi: ).

Буду дальше пробовать;))

Вопрос про управления сокетами в ардуино остается открытым, это реально?


Если не сложно, выложи исходники, а то я с такойже фигней мучаюсь, или кинь на ящик [email protected]


Если Вы все ещё имеете исходники :du_ma_et: , буду так же благодарен если сможете скинуть :)
ящик [email protected] или ЛС, или ссылка на файлообменник :)
JaDim
 
Сообщения: 3
Зарегистрирован: 28 янв 2013, 12:44
programming: C/C++/Delphi/Java


Вернуться в Шилды (Shields)

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron
© 2009-2021 |  Top.Mail.Ru О проекте  |  Политика Конфиденциальности  |