Модераторы: PILOT, ManiaK, Mazzi
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> CANOpen сети, давным-давно обещанная статейка 
:(
    Опции темы
ManiaK
Дата 12.3.2006, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Homo Sapience
***


Профиль
Группа: Комодератор
Сообщений: 1145
Регистрация: 3.8.2004
Где: ИУ5-93

Репутация: 2
Всего: 29



ВСТУПЛЕНИЕ

Всё понятно только тогда, когда ничего не знаешь. Так, я считал, что достаточно хорошо разбираюсь в CANOpen, но только до самого того момента, пока месяц назад не начал писать статью. Точнее попытался это сделать. Вот тут-то я оценил реальный уровень своих знаний или, если точнее, его полное отсутствие. Пришлось подождать до окончания разработки первой рабочей версии микроконтроллерного устройства с CAN-контроллером. Не думаю, что смогу сказать что-то умное в этой статье, настолько умное, что нельзя было бы понять самому, но всё же как-то принято у нас читать чужое, а не думать самому. Итак, приступим?..

Замечу сразу, что в этой статье я касаюсь лишь программного уровня. Я не дам вам каких-либо схемотехнических решений или даже программно-технических (вроде процедур посылки CAN-сообщений, настройки контроллера и пр.). Я освещаю лишь протокол, а потому сразу стоит оговориться, что должно быть в распоряжении программиста до начала реализации этого самого протокола. Во-первых, необходимо иметь возможность передавать/принимать сообщения с любым набором данных, любым идентификатором и любого типа (например CAN Remote Frame). Неправда ли неожиданно?.. Во-вторых, необходимо иметь хранилище достаточно большого объёма (от 1 кб) и функции записи/чтения для него. Хранилище это необходимо очень интересной и одновременно очень сложной концепции CANOpen - объектному словарю. Что это такое мы узнаем позже, а пока лишь имейте ввиду. Да, кстати оперативной памяти для CAN-узла тоже надо никак не меньше 100-200 байт. Ну вот, собственно больше ничего и не нужно.

ЭТО ЗАГАДОЧНОЕ СЛОВО - ФРЕЙМ

Фреймами в CANOpen называют.. просто пакет данных, стандартизованный ещё CAN-ом. Иначе говоря, любая информация в сети может передаваться только в определённом "пакете" и пакеты эти называются фреймами. Среди прочего фрейм содержит служебные флаги, т.н. идентификатор объекта (CobID) и данные. Остальное нас волновать не должно - остальным занимается CAN-контроллер; если вы вдруг вздумаете самостоятельно реализовать CAN-протокол, выйдите на улицу, прогуляйтесь по свежему воздуху и подумайте над чем-нибудь более умным.

ВТОРОЕ ЗАГАДОЧНОЕ СЛОВО - CAN-Object

Объектами в CANOpen называют.. фреймы! Нет, крыша у разработчиков сети на самом что ни на есть нужном месте (хорошая такая крыша, кстати). Просто фрейм - понятие общее. Фрейм - это просто пакет данных. А объект - это пакет данных определённого назначения. Разница между фреймом и объектом лексически такая же как между thing и the thing. Фрейм извещающий об ошибке - просто фрейм и одновременно Emergency Object. Фрейм команды исполнительному устройству - просто фрейм и одновременно PDO (Process Data Object).. Вот ещё пара полезных объектов, которые мы будет рассматривать и пытаться применить на практике: NMT (Network Managment T..), SDO (Service Data Object), BootUp Object и Sync Object. Без реализации этих объектов сеть можно считать бесполезной и не соответствующей стандарту CANOpen. Это - базис.

ТИПЫ CANOpen-СОЕДИНЕНИЙ МЕЖДУ УЗЛАМИ

Допустим у нас есть в сети два CANOpen узла. Кстати, из вредности я буду называть узлами - модули обработки определённых объектов в устройстве, а не сами устройства в сети; так, любое грамотное устройство будет содержать по крайней мере 5-6 узлов: PDO узел, SDO узел, NMT узел, Emergency узел и т.д. Так вот, есть у нас два узла одного объекта на разных устройствах в сети (это я сказал?..); нам нужно организовать общение между ними. Но как определить кто должен начинать говорить - а кто отвечать. Или может они оба могут когда хотят болтать? На самом деле существует определённый набор схем общения и почти за каждым объектом закреплена своя схема.

Первой схемой рассмотрим самое простое - модель Client/Server. Всем знакома эта модель, но на всякий случай повторим. Основная информация находится на сервере. Только клиент может начинать диалог и всё, что он может делать - это обращаться к определённым данным на сервере (читать/записывать). Как видите для PDO эта схема уже не пройдёт - команды посылать мы не можем, а реализовывать их через какую-нибудь ячейку памяти на сервере могут только извращенцы. Зато, как мы потом увидим, эта модель общения идеально подходит для SDO, который и предназначен для работы с таблицами данных. Отличительной особенностью модели является обязательный ответ сервера на любой объект клиента (не зависимо от того, нужен этот сам ответ или нет).

Вторая схема - Master/Slave. Здесь уже всё несколько туманнее. Модель ничего не говорит об типе передаваемых данных. Это могут быть и команды, операции над таблицами данных как в Client/Server, и всё что вам заблогорассудится. Основное условие - передачу инициирует только мастер. Slave может только отвечать (или вообще под дурика косить - молчать). Если мастеру нужно передать какую-нибудь информацию в slave, то он просто посылает объект с 0-8 байтами данных; при этом slave не имеет право орать что бы то ни было в ответ. Если же ему нужно что-то получить от slave'а, то он посылает Remote Frame, о котором будет сказано ниже. Вот тут уж slave'у дают слово и он может высказать всё, что хочет. Даже не может - обязан.

Третьей и последней моделью общения в сети является модель Producer/Consumer. Здесь всё точ-в-точ как в Master/Slave модели (в роли мастера выступает, разумеется, producer) лишь с одной отличительной особенностью: Remote Frame имеет право посылать не producer, а consumer. То есть, поставщик информации ничего не может получить от потребителя (он о нём ничего и знать не будет кроме самого факта существования), зато инициировать передачу информации (повторюсь: исключительно от поставщика к потребителю) может и тот и другой.

Вот собственно и все модели общения.

Продолжение следует...
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)"
PILOT ManiaK
UniBomb Mazzi

На данный раздел помимо Правил форума распространяются текже следующие правила:


  • Прежде чем создать тему воспользуйтесь поиском или посмотрите в faq. Возможно на форуме уже есть ответ на ваш или близкий к вашему вопрос.
  • В заголовке темы в квадратных скобках обозначьте используемое семейство микроконтроллера: [avr],[pic],[arm].
  • При создании темы с вопросом указывайте участок кода с ошибкой, версию компилятора, схемы подключения, fuse биты и прочие данные, которые помогут найти правильный ответ. Для форматирования текста программ используйте кнопку код.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Для флуда, просьб выполнить задание, поиска партнёров или исполнителей существуют свои разделы.
  • Если вы заметили несовместимое с правилами сообщение, то можете уведомить об этом модератора раздела нажав кнопку Репорт у соответствующего сообщения.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема »


 




[ Время генерации скрипта: 0.0401 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.