Подключение ENC28J60 + PIC к локальной сети ЧАСТЬ III

Автор: Николай Викторов Просмотров: 4879

 

 

Я не ставил целью сделать полноценное устройство и хотел показать алгоритм работы и пример на асм.  Тем не менее устройство работает и работает стабильно. Код открытый , по этому  кому будет интересно может доработать устройство под свои задачи.

     Сам по себе UDP протокол , является не надежным , он отправляет сообщения без подтверждения  и что оно дошло до адресата нет ни какой гарантии.  Но это во первых не всегда и нужно , во вторых не требует предварительного соединения , а в третьих можно реализовать обмен программно , как и сделано   в этом устройстве. При получении UDP пакета микроконтроллер в ответ передает  сообщение о не правильном запросе (команда с ошибкой ) или сообщит состояние  порта «D» , при условии правильно указанного пароля , который вводится перед каждой командой . Если пароль введен не правильно от устройства не придет ни какого ответа, т.к. он посчитает этот пакет «ложным».

Протокол описывать нет смысла в интернете достаточно информации , начнем с программное реализации.

   В этом примере реализован UDP server (он отвечает на запросы) . Хочу напомнить , что каждый принятый пакет в конечном итоге располагается в ОЗУ микроконтроллера , начиная с адреса 0200h . При получении пакета от ПК микроконтроллер анализирует что за протокол , если это UDP то переходим к его обработке.

 

alt

 

 

          Не каждый протокол UDP обрабатывается , а только тот , который приходит на определенный порт . Еще иногда говорят: «Программа слушает такой то порт» … Здесь так же , мы будем «слушать» только порт  1422 . Выбрал просто так  , при желании можно поменять на любой другой. Ниже как это реализовано:

 

alt

           Теперь  нам  стало  понятно   что это пакет ,  предназначенный для нас  , но перед тем как его обрабатывать необходимо проверить его на ошибки .Для этого нужно подсчитать контрольную сумму  пакета и в случае совпадения с контрольной суммой указанной в самом пакете переходим к обработке .        ( ПП       call       Prov_paketa ; )  Для начала проверяем пароль , я указал 1234 .(соответственно можно изменить на любой 4-ч значный).

 

alt

 

 

            При любом не правильном значении поднимаем флаг Flag_ch,1 сигнализирующий о не правильности пароля . При выходе из ПП  пакет «сбрасывается»  и дальше не обрабатывается  , ответ на ПК не приходит. Если пароль правильный переходим к анализу  полученной команды. Алгоритм  «расшифровки» команды такой же , только проверяем не все слова,  а всего два знака  в слове выключить и включить проверяем на соответствие вторые знаки , следующий  знак в команде это номер нагрузки  №2.  Вот так выглядит команда на включение 2-й нагрузки -1234 включить №2 , после получения  которой мы формируем один из двух ответов. Если  команда  расшифрована и выполнена , то ПК получит следующий вот такой ответ :

 

alt

 

 

          Можно просто ввести пароль и отправить сообщение (в нашем случае 1234)  , в ответ получим то же такое сообщение , что дает нам возможность проверки состояние  порта.  Если команда  передана не правильно (с ошибкой ) то она не будет выполнена , если  не верно указан пароль получим  ответ :  « Не правильный запрос» . Как формируется сам ответ можно посмотреть в программе , ни чего сложного нет , остановимся на том , как собрать все это в пакет UDP и отправить на ПК.  Вот так выглядит UDP пакет , выделенная область это наш текстовый ответ о состоянии порта.

 

alt

 

 

     Пакет  ограничен 255 байтами  - это достаточно для ответа, (можно увеличить , доработав немного программный код) . Ответ записываем в ОЗУ начиная с адреса 0x022E, по окончании записи для расчета длины пакета считывается адрес последнего записанного знака из регистра FSR0L . На основании полученных данных рассчитываются  количество байт для расчета контрольной суммы, количество байт для отправки , записи длины IP пакета и длины самого UDP пакета.  Данные длины записываются в пакет , рассчитывается контрольная сумма  и отправляем пакет адресату.  При необходимости изменения текстовых сообщений (ответов ) следует учитывать ограничение  - не более 210 знаков . После выполнения команды состояние порта записывается в EEPROM , что дает возможность запоминать состояние включенных / выключенных нагрузок при пропадании питания. При повторении конструкции необходимо указать IP адрес из диапазона вашей сети . По умалчиванию прописан 192.168.1.4

  В следующей статье мы рассмотрим реализацию на asm протокола TCP и будем  управлять этими же нагрузками по WEB интерфейсу  при помощи стандартного браузера.

Ссылки:

Задать вопросы можно на форуме.

Скачать программу, прошивку, проект MPLAB asm.   

Ссылка для скачивания доступна только авторизованным пользователям сайта !


Все права принадлежат ChipMK.ru. При копировании материала ссылка обязательна. 2011-2017 © ChipMK.ru

ChipMk.ru Яндекс.Метрика
PRCY.ru