Введение в протокол CAN | CAN – технологии
Промышленная сеть реального времени CAN представляет собой сеть с общей средой передачи данных. Это означает, что все узлы сети одновременно принимают сигналы передаваемые по шине. Невозможно послать сообщение какому-либо конкретному узлу. Все узлы сети принимают весь трафик передаваемый по шине. Однако, CAN-контроллеры предоставляют аппаратную возможность фильтрации CAN-сообщений.
Каждый узел состоит из двух составляющих. Это собственно CAN контроллер, который обеспечивает взаимодействие с сетью и реализует протокол, и микропроцессор (CPU).
Рис. 1. Топология сети CAN.CAN контроллеры соединяются с помощью дифференциальной шины, которая имеет две линии – CAN_H (can-high) и CAN_L (can-low), по которым передаются сигналы. Логический ноль регистрируется, когда на линии CAN_H сигнал выше, чем на линии CAN_L. Логическая единица – в случае когда сигналы CAN_H и CAN_L одинаковы (отличаются менее чем на 0.5 В). Использование такой дифференциальной схемы передачи делает возможным работу CAN сети в очень сложных внешних условиях. Логический ноль – называется доминантным битом, а логическая единица – рецессивным. Эти названия отражают приоритет логической единицы и нуля на шине CAN. При одновременной передаче в шину лог. нуля и единицы, на шине будет зарегестрирован только логический ноль (доминантный сигнал), а логическая единица будет подавлена (рецессивный сигнал).
Типы сообщений сети CAN.
Данные в CAN передаются короткими сообщениями-кадрами стандартного формата. В CAN существуют четыре типа сообщений:
- Data Frame
- Remote Frame
- Error Frame
- Overload Frame
Data Frame – это наиболее часто используемый тип сообщения. Он состоит из следующих основных частей:
- поле арбитража (arbitration field) определяет приоритет сообщения в случае, когда два или более узлов одновременно пытаются передать данные в сеть. Поле арбитража состоит в свою очередь из:
- для стандарта CAN-2.0A, 11-битного идентификатора + 1 бит RTR (retransmit)
- для стандарта CAN-2.0B, 29-битного идентификатора + 1 бит RTR (retransmit)
Следует отметить, что поле идентификатора, несмотря на свое название никак не идентифицирует само по себе ни узел в сети, ни содержимое поля данных. Для Data кадра бит RTR всегда выставлен в логический ноль (доминантный сигнал).
- поле данных (data field) содержит от 0 до 8 байт данных
- поле CRC (CRC field) содержит 15-битную контрольную сумму сообщения, которая используется для обнаружения ошибок
- слот подтверждения (Acknowledgement Slot) (1 бит), каждый CAN-контроллер, который правильно принял сообщение посылает бит подтверждения в сеть. Узел, который послал сообщение слушает этот бит, и в случае если подтверждение не пришло, повторяет передачу. В случае приема слота подтверждения передающий узел может быть уверен лишь в том, что хотя бы один из узлов в сети правльно принял его сообщение.
Remote Frame – это Data Frame без поля данных и с выставленным битом RTR (1 – рецессивные бит). Основное предназначение Remote кадра – это инициация одним из узлов сети передачи в сеть данных другим узлом. Такая схема позволяет уменьшить суммарный трафик сети. Однако, на практике Remote Frame сейчас используется редко (например, в DeviceNet Remote Frame вовсе не используется).
Error Frame – это сообщение которое явно нарушает формат солобщения CAN. Передача такого сообщения приводит к тому, что все узлы сети регистрируют ошибку формата CAN-кадра, и в свою очередь автоматически передают в сеть Error Frame. Результатом этого процесса является автоматическая повторная передача данных в сеть передающим узлом. Error Frame состоит из поля Error Flag, которое состоит из 6 бит одинакового значения (и таким образом Error frame нарушает проверку Bit Stuffing, см. ниже), и поля Error Delimiter, состоящее из 8 рецессивных битов. Error Delimiter дает возможность другим узлам сети обнаружив Error Frame послать в сеть свой Error Flag.
Overload Frame – повторяет структуру и логику работы Error кадра, с той разницей, что он используется перегруженным узлом, который в данный момент не может обработать поступающее сообщение, и поэтому просит при помощи Overload-кадра о повторной передаче данных. В настоящее время Overload-кадр практически не используется.
Контроль доступа к среде передачи (побитовый арбитраж).
Поле арбитража CAN-кадра используется в CAN для разрешения коллизий доступа к шине методом не деструктивного арбитража. Суть метода не деструктивного арбитража заключается в следующем. В случае, когда несколько контроллеров начинают одновременную передачу CAN кадра в сеть, каждый из них сравнивает, бит, который собирается передать на шину с битом, который пытается передать на шину конкурирующий контроллер. Если значения этих битов равны, оба контроллера передают следующий бит. И так происходит до тех пор, пока значения передаваемых битов не окажутся различными. Теперь контроллер, который передавал логический ноль (более приоритетный сигнал) будет продолжать передачу, а другой (другие) контроллер прервёт свою передачу до того времени, пока шина вновь не освободится. Конечно, если шина в данный момент занята, то контроллер не начнет передачу до момента её освобождения.
Методы обнаружения ошибок.
CAN протокол определяет пять способов обнаружения ошибок в сети:
- Bit monitoring
- Bit stuffing
- Frame check
- ACKnowledgement Check
- CRC Check
Bit monitoring – каждый узел во время передачи битов в сеть сравнивает значение передаваемого им бита со значением бита которое появляется на шине. Если эти значения не совпадают, то узел генерирует ошибку Bit Error. Естественно, что во время арбитража на шине (передача поля арбитража в шину) этот механизм проверки ошибок отключается.
Bit stuffing – когда узел передает последовательно в шину 5 бит с одинаковым значением, то он добавляет шестой бит с противоположным значением. Принимающие узлы этот дополнительный бит удаляют. Если узел обнаруживает на шине больше 5 последовательных бит с одинаковым значением, то он генерирует ошибку Stuff Error.
Frame Check – некоторые части CAN-сообщения имеют одинаковое значение во всех типах сообщений. Т.е. протокол CAN точно определяет какие уровни напряжения и когда должны появляться на шине. Если формат сообщений нарушается, то узлы генерируют ошибку Form Error.
ACKnowledgement Check – каждый узел получив правильное сообщение по сети посылает в сеть доминантный (0) бит. Если же этого не происходит, то передающий узел регистрирует ошибку Acknowledgement Error.
CRC Check – каждое сообщение CAN содержит CRC сумму, и каждый принимающий узел подсчитывает значение CRC для каждого полученного сообщения. Если подсчитанное значение CRC суммы, не совпадает со значением CRC в теле сообщения, принимающий узел генерирует ошибку CRC Error.
Механизм ограничения ошибок (Error confinement).
Каждый узел сети CAN, во время работы пытается обнаружить одну из пяти возможных ошибок. Если ошибка обнаружена, узел передает в сеть Error Frame, разрушая тем самым весь текущий трафик сети (передачу и прием текущего сообщения). Все остальные узлы обнаруживают Error Frame и принимают соответствующие действия (сбрасывают принятое сообщение). Кроме того, каждый узел ведет два счетчика ошибок: Transmit Error Counter (счетчик ошибок передачи) и Receive Error Counter (счетчик ошибок приема). Эти счетчики увеличиваются или уменьшаются в соответствие с несколькими правилами. Сами правила управления счетчиками ошибок достаточно сложны, но сводятся к простому принципу, ошибка передачи приводит к увеличению Transmit Error счетчика на 8, ошибка приема увеличивает счетчик Receive Error на 1, любая корректная передача/прием сообщения уменшают соответствующий счетчик на 1. Эти правила приводят к тому, что счетчик ошибок передачи передающего узла увеличивается быстрее, чем счетчик ошибок приема принимающих узлов. Это правило соответствует предположению о большой вероятности того, что источником ошибок является передающий узел.
Каждый узел CAN сети может находится в одном из трех состояний. Когда узел стартует он находится в состоянии Error Active. Когда, значение хотя бы одного из двух счетчиков ошибок превышает предел 127, узел переходит в состояние Error Passive. Когда значение хотя бы одного из двух счетчиков превышает предел 255, узел переходит в состояние Bus Off.
Узел находящийся в состоянии Error Active в случае обнаружения ошибки на шине передает в сеть Active Error Flags. Active Error Flags сотстоит из 6 доминантных бит, поэтому все узлы его регистрируют. Узел в состоянии Passive Error передает в сеть Passive Error Flags при обнаружении ошибки в сети. Passive Error Flags состоит из 6 рецессивных бит, поэтому остальные узлы сети его не замечают, и Passive Error Flags лишь приводит к увеличению Error счетчика узла. Узел в состоянии Bus Off ничего не передает в сеть (не только Error кадры, но вообще никакие другие).
Адресация и протоколы высокого уровня
В CAN не существует явной адресации сообщений и узлов. Протокол CAN нигде не указывает что поле арбитража (Identification field + RTR) должно использоваться как идентификатор сообщения или узла. Таким образом, идентификаторы сообщений и адреса узлов могут находится в любом поле сообщения (в поле арбитража или в поле данных, или присутствовать и там, и там). Точно также протокол не запрещает использовать поле арбитража для передачи данных.
Утилизация поля арбитража и поля данных, и распределение адресов узлов, идентификаторов сообщений и приоритетов в сети является предметом рассмотрений так называемых протоколов высокого уровня (HLP – Higher Layer Protocols). Название HLP отражает тот факт, что протокол CAN описывает только два нижних уровня эталонной сетевой модели ISO/OSI, а остальные уровни описываются протоколами HLP.
Рис. 4. Логическая структура протокола CAN.Существует множество таких высокоуровневых протоколов. Наиболее распространенные из них это:
- DeviceNet
- CAL/CANopen
- SDS
- CanKingdom
Физичекий уровень протокола CAN
Физический уровень (Physical Layer) протокола CAN определяет сопротивление кабеля, уровень электрических сигналов в сети и т.п. Существует несколько физических уровней протокола CAN (ISO 11898, ISO 11519, SAE J2411).
В подавляющем большинстве случаев используется физический уровень CAN определенный в стандарте ISO 11898. ISO 11898 в качестве среды передачи определяет двухпроводную дифференциальную линию с импедансом (терминаторы) 120 Ом (допускается колебание импеданса в пределах от 108 Ом до 132 Ом. Физический уровень CAN реализован в специальных чипах – CAN приемо-передатчиках (transceivers), которые преобразуют обычные TTL уровни сигналов используемых CAN-контроллерами в уровни сигналов на шине CAN. Наиболее распространенный CAN приемо-передатчик – Phillips 82C250, который полностью соответствует стандарту ISO 11898.
Махимальная скорость сети CAN в соответствие с протоколом равна 1 Mbit/sec. При скорости в 1 Mbit/sec максимальная длина кабеля равна примерно 40 метрам. Ограничение на длину кабеля связано с конечной скоростью света и механизмом побитового арбитража (во время арбитража все узлы сети должны получать текущий бит передачи одновременно, те сигнал должен успеть распространится по всему кабелю за единичный отсчет времени в сети. Соотношение между скоростью передачи и максимальной длиной кабеля приведено в таблице:
скорость передачи | максимальная длина сети |
1000 Кбит/сек | 40 метров |
500 Кбит/сек | 100 метров |
250 Кбит/сек | 200 метров |
125 Кбит/сек | 500 метров |
10 Кбит/сек | 6 километров |
Разъемы для сети CAN до сих пор НЕ СТАНДАРТИЗОВАНЫ. Каждый протокол высокого уровня обычно определяет свой тип разъемов для CAN-сети.
Этот вопрос мне пришлось задать себе лет десять назад или больше. Работа, которую надо было сделать, заключалась в дарении второй жизни диспетчерскому щиту. Это такая штука во всю стену, состоящая из лампочек и выключателей с переключателями. Думаю, не ошибусь, предположив, что щиты стали делать с тех пор, как появились лампочки, поскольку выключатели к тому времени, наверняка, уже были известны. А тяга к прекрасному, вообще, пришла к людям из далекой древности.
Сейчас многие предпочтут щитам дисплейные панели. Но будут ли любители дисплеев в большинстве, зависит от многого, нам неведомого. Но сейчас речь не об этом.
Каждый, кто может в течение пяти минут поддерживать разговор об электропроводке, сразу скажет мне, что щит состоит из плоских панелей, на которых размещены выключатели и лампочки, а также из ящика со множеством проводов. Ведь лампочка без проводов только для того и годится, чтобы ее или тупо разбить или, если подойти творчески и включить воображение, разместить у самого пытливого во рту и довольно быстро узнать, где находится травмпункт.
Все так и было, куча проводов, уходящих из ящика к выключателям и лампочкам, только лампочки — маленькие. Видимо, внучки знаменитой лампочки Ильича.
И вот, помнится, глянул за окно, а там 21-й век. Стало быть надо все делать заново и по-другому. Вместо лампочек — экономичные светодиоды. Вместо проводов — проводки. Вместо одного ящика — много-много маленьких ящичков, контроллеров, стало быть.
Оказалось, что если каждый контроллер сможет обслуживать четыре светодиода и два переключателя то это будет выглядеть оптимальненько. В смысле, не так ужасающе. А если через все контроллеры будет проходить шина питания и информационная шина, всего четыре провода, то появится некое изящество. Оказалось также, что контроллеров потребуется 104 штуки. По-хорошему, тут надо было бы поставить и решить задачу коммивояжера. И тогда, возможно, контроллеров потратили бы меньше. Но было не до хорошего.
К тому времени я уже знал, что такое CAN и уровень моего уважения к фирме Bosch был много выше, нежели у повара приличного ресторана или аккуратной домохозяйки. А производители автомобилей BMW, я уверен, даже ходили к инженерам Bosch в гости.
Controller Area Network, как сказали бы иностранцы, на мой взгляд, как техническое решение, возникло из желания сделать что-то, наконец, хорошо. Не скрою, все прелести результатов работы инженеров почувствуешь не сразу, как осилишь два тома стандарта, а значительно позже. Когда пообщаешься с очевидцами, опросишь свидетелей. Сейчас томов прибавилось, но, может быть, можно сразу начинать с третьего, поскольку, теперь оно называется CAN_FD. Однако, позвольте продолжить.
Еще до столкновения со щитом мне пришлось столкнуться с чужими инженерными решениями на тему использования CAN, а также наделать и своих ошибок. Ошибки обычно появляются в перерывах между чтением инструкций и изучением описаний. Хорошо, что только со второго раза они выглядят как грабли.
Теперь несколько тысяч слов для читателя, который терпимо относится к занудам и не считает их врагами.
CAN можно установить там, где раньше работал RS485 на витой паре. Витая пара — это не непременное условие, просто удобно сравнивать. Используя витую пару, по CAN, как и по RS485, можно передать сообщения от управляющего контроллера к подчиненному и получить ответ. Сходство бросается в глаза, но, давайте лучше остановимся на отличиях. Кое-какие из отличий могут нести знак минус для некоторых из читателей. Но им бы я посоветовал не огорчаться, а вспомнить закон Ломоносова.
Благодаря синхронной организации протокола разрешение коллизий на шине реализовано аппаратно, на лету, так сказать. Ниже отмечено, к чему это приводит и что это дает непоседливому инженеру.
Можно получить сообщение и без запроса.
Не надо ждать, когда ответ будет готов, можно спросить в это время еще кого-то.
Подчиненный контроллер тоже может спросить и получить ответ.
Из-за синхронной работы длина шины CAN обратно пропорциональна скорости передачи или типа того.
Максимальная скорость составляет 1 Мбод (10 — на подходе).
То, что сообщение не исказилось при передаче отправляющий знает сразу после последнего бита. Точнее, это знают все на шине.
Если сообщение исказилось для одного, попытка не засчитывается всеми.
Если сообщение удалось передать в шину, то абонент не получит его лишь при условии, что сломался.
Количество контроллеров на шине не должно превышать 127.
Сообщения ограничены по длине. Они состоят из идентификатора, указателя длины в байтах и блока данных, именно с таким количеством байт, как указано. Есть еще несколько служебных битов, но о них пока помолчим, поскольку сервис должен быть ненавязчивым. Идентификатор может быть размером 11 или 29 бит. Блок данных может содержать от 0 до 8 байт (64 — на подходе).
Для конкретики приведу немного цифр. Если хочется работать на скорости 1Мбод, то длина шины не должна быть больше 35 метров (некоторые предпочитают 40, то есть, погорячее). Если необходимо передать что-то на расстояние до 8 км, то скорость не должна превышать 5 Кбод. Кстати, читатель вправе спросить, почему килобод, а не килобит? Потому, что не все боды становятся битами. Как-то так.
Как можно распорядиться всеми этими совсем не секретными ингредиентами? Те, кто во всем видят игру в кубики, сразу вспомнят, что есть такая замечательная вещь, как CANopen и еще много красивых сочетаний и аббревиатур и нечего изобретать велосипед. Таким мне часто хочется ответить: «Разве не похожа на велосипед та яичница из двух яиц, которую многие готовят себе на завтрак? Почему бы не сходить в общепит и не взять себе омлет?». Но я лучше промолчу и продолжу, не отвлекаясь на выкрики из зала.
В те времена, когда 29 битовый идентификатора еще не успели придумать, существовал только 11 битовый. Одни его стали использовать, чтобы запихнуть туда название (номер) нужного вида данных. Другие использовали как адрес контроллера, к которому обращаются. И то и другое имело смысл. Например, можно спросить так:
- А подай-ка нам, милейший, шато тринадцатого года в литровой бумажной упаковке.
Или так:
Заверните мне, пожалуйста, то, что спрятано у вас на самой нижней полке справа.
Кстати, в CAN может сработать и такая конструкция:
Всем лежать! А ты быстро складывай все с полок мне в сумку.
Но этой конструкцией часто не попользуешься, поскольку после придется какое-то время ждать.
Ждать пока все ответы не выстроятся один за другим и не поступят в распоряжение запрашивающего контроллера. Мы уже ушли от кино, если что.
Меня в моем случае устроил бы вариант идентификатора в качестве адреса. Из 11 бит требовалось 7 и еще 4 оставалось на то, чтобы сделать одни сообщения более срочными по сравнению с другими, а также пометить часть контроллеров как главные.
Некоторое неудобство перекочевало сюда из RS485, а именно, адреса надо было устанавливать вручную на каждом контроллере. Затем проверять и переустанавливать. И, возможно, вернуться к предыдущему шагу и повторить.
К счастью, к тому времени уже существовали два обстоятельства.
Первое — уже появился 29 битный идентификатор. А второе то, что многие производители микроконтроллеров стали считать хорошим тоном условие, чтобы каждый чип имел свой уникальный и довольно длинный номер.
Теперь в длинном идентификаторе можно было 24 бита смело отвести для уникального адреса. Еще 5 оставалось, для заботы о том, чтобы поезда различались срочностью, направлением (туда, обратно), наличием вагона-ресторана и вагонов с повышенным комфортом.
Если перестать дурачиться и сделаться серьезным, назвать подчиненных контроллеров агентами, а остальных боссами, то можно составить таблицу. Она будет показана немного позже.
Еще немного про адресацию. Уникальный номер чипа, как правило, занимает количество битов значительно превышающее 24, например, 96 у STM32FXXX. Поэтому необходимо как-то получить 24 из 96. Я выбрал операцию XOR. Вы можете выбрать что-то другое, но небольшая проблема останется. Это совпадения адресов после редуцирования.
Вероятность появления этой проблемы крайне мала, но она есть. Она решаема, но добавляет работы наладчикам. Здесь надо вспомнить, что сообщения CAN могут не содержать данных совсем. Это нам и пригодиться при решении. Оно состоит из следующих действий.
Управляющий контроллер (босс) отправляет широковещательный запрос, на который должны ответить все агенты (это запрос с нулевым адресом). Ответные сообщения с нулевой длиной данных и совпадающими адресами не испортят друг-друга, а достигнут босса в виде одного.
Теперь останется подсчитать сколько получено ответов и сколько их должно быть. Если эти два числа совпадают, значит все в порядке. Если ответов меньше чем контроллеров, то налицо совпадение адресов и наладчикам есть работа. А если ответов больше, нежели контроллеров, то надо подумать о диссертации, поскольку, вы — на пороге открытия.
Если изменение длины сообщения рассматривать как некоторые вариации его смысла, то можно получить дополнительные возможности, о которых позже расскажу, если мама не позовет кушать.
Еще из интересного, если использовать и короткие и длинные идентификаторы одновременно, то можно получить, например, адресацию групп или частично широковещательные запросы. Но не будем пока углубляться.
Вернемся к кодированию идентификатора.
Для целей адресации в расширенном идентификаторе отведено 24 бита, а в стандартном – шесть. Адрес со значением 0x000000 является широковещательным для расширенного идентификатора. Для стандартного идентификатора нулевой адрес (6 его бит) также считается широковещательным. Пять начальных (старших) битов в длинном и коротком идентификаторе, называются заголовком, влияют на смысл сообщения и обозначаются буквами NVADR:
Конечно, для диспетчерского щита потребовалось реализовать только часть этой схемы. В первом проекте со щитом (или на щите, как правильно?) использовались чипы Cortex от NXP, а в следующих проектах (были и такие) уже применялись M0 от STMicroelectronics.
Пару слов об использовании коротких идентификаторов. Те шесть бит, которые отводятся для адресации, адресуют не контроллер, а группу. Эта группа при старте сначала у всех нулевая. Далее производится конфигурирование агентов, после которого часть из них или все становятся принадлежащими своей группе. Теперь запросом к группе, мы получаем ответы тех агентов, которые мы собрали в эту группу.
Теперь, немного о том, что добавляется, если по-разному трактовать сообщения с различной длиной данных. Например, запрос с нулевой длиной хорошо помогает при отладке, как уже упоминалось выше. Запрос с длиной 3 обслуживает пространство байтовых переменных размером 16384. Запрос с длиной 4 делает то же самое, но предназначен для агента-шлюза, который обслуживает CAN шину второго уровня. Эта шина может состоять из одного-двух агентов, зато удаленных на пару километров.
Запрос с длиной 5 и 6, аналогично, предназначены для пространства двухбайтовых переменных размером 4194304. Два бита используются не для адресации. Один бит управляет записью-чтением. Другой сигнализирует об ошибке.
Далее 7 и 8 обслуживают четырех байтовые слова. Их тоже 4194304.
Эти пространства являются общими для всех агентов. Каждый из них, в зависимости от предназначения, использует только отрезок пространства переменных. Контроллер для измерения температуры в двух точках представлен на фото. Это для отладки и тестирования.
Соединяются контроллеры плоским шлейфом на 6 жил. На питание идут сдвоенные. Микросхема о двадцати ногах — это STM32F042.
С обратной стороны присутствует MAX3051, формирователь CAN в корпусе SOT23-8.
Ну вот, мама кушать зовет.
Использование сети CAN и стека CANopen / Хабр
Однажды передо мной встала задача разработать встраиваемую систему, в которой бы данные могли передаваться между узлами c максимальной надежностью. Тогда то я впервые и узнал о CAN.В этой статье я хотел бы рассказать вкратце рассказать о том, что такое CAN и о своем опыте работы с ним. Возможно люди, которые занимаются разработкой встраиваемых систем, прочитав мою статью, заинтересуются этим стандартом, если он еще не попадал в их поле зрения. Тем более, что контроллеры CAN в настоящее время присутствуют на многих микроконтроллерах.
CAN (Controller Area Network) — это стандарт, созданный компанией Bosсh для сетей, используемых в автоматизации и промышленности. Стандарт нашел широкое применение в промышленном производстве, технологиях «умного дома», а так же в автомобилестроении. Очень хорошо подходит для связывания различных датчиков и управляющих устройств в единую сеть.
Как правило, CAN-сеть это сеть типа «шина», в которой все узлы могут передавать и принимать данные.
Она обладает небольшой скоростью, но высокой надежностью.
Далее я хочу поверхностно описать стандарт и рассказать об использовании такой сети на практике.
Стандарт
Стандарт описывает канальный уровень и базовые требования к физическому уровню.
Главное в физическом уровне — это требование возможности передачи бита как “доминантного” и “рецессивного“. Доминантный сигнал считается единицей, а рецессивный — нулем. Основное требование — при передаче доминантного и рецессивного сигнала одновременно, всем узлам должен прийти доминантный сигнал. На этом принципе основан механизм арбитража. Из этого следует, что для передачи могут использоваться разные среды, однако на практике чаще всего используют дифференциальную пару.
Передача в сети происходит кадрами. В стандарте существуют два типа кадров: базовый и расширенный.
Базовый кадр содержит 11 битовый идентификатор, а расширенный — 29 битовый. Кадр так же содержит бит запроса на передачу, информацию о длине передаваемых данных и сами данные. Они могут занимать от 0 до 8 байт в кадре. Так же кадр содержит некоторую служебную информацию, но для программиста она не принципиальна, поскольку её добавление реализовано аппаратно в контроллере сети.
Изначально идентификаторы не привязаны к какому либо узлу и характеризуют именно сообщение, а не отправителя и получателя. Идентификаторы так же показывают приоритетность сообщения. Приоритет определяется доминантными битами в идентификаторе. Так 10000000000 приоритетнее чем 01000000000.
Главным достоинством CAN является его надежность. В нём используется механизм разрешения коллизий (в отличие от механизма обнаружения коллизий в Ethernet), что позволяет не терять пропускную способность из-за коллизий.
Его суть заключается в том, что каждый узел слушает сеть и, если она свободна, может начать передачу. При этом, он продолжает слушать сеть. Если при посылке рецессивного бита принимается доминантный, значит одновременно с этим узлом начал передачу другой узел с более высоким приоритетом. В этом случае передача прекращается.
Помимо этого используются механизмы обнаружения ошибок, такие как контроль передачи, дополняющие биты, использование контрольной суммы и проверка значений полей. Разработчики оценивают вероятность невыявления ошибки передачи как 4,7×10-11.
Данный стандарт не описывает протоколы верхнего уровня, поэтому было создано несколько реализаций, как коммерческих, так и открытых.
Наиболее известные из них:
— CANopen
— DeviceNet
— CAN Kingdom
Эту и даже более подробную информацию о стандарте легко найти в интернете, поэтому я наконец приступаю к описанию CANopen.
CANopen
Как я уже писал, однажды мне потребовалось создать надежную сеть из микроконтроллеров. После рассмотрения возможных вариантов было решено остановиться на сети CAN. В качестве протокола верхнего уровня был выбран CANopen и его реализация — CANopenNode, поскольку она является открытой и простой в портировании на нужное мне устройство. CANopenNode лицензирован под LGPL.
Основные моменты протокола CANopen:
— протокол работает со стандартными идентификаторами. Сеть может содержать до 127 узлов.
— каждому узлу выдается уникальный номер в сети.
— протокол не требует обязательного наличия мастера сети (однако существуют возможности, которые доступны только одному узлу в сети, который условно можно назвать мастером)
— OD (Object Dictionary ) — словарь объектов. Содержит отсортированный список переменных, доступ к которым можно получить по сети с помощью SDO.
— SDO (Service Data Objects) — механизм доступа к словарю объектов. Для доступа к объектам узла сети на этом узле должен быть запущен так называемый SDO-сервер. В сети может быть только один SDO-клиент, условно называемый мастером, который может получать данные от любого из серверов.
— PDO (Process Data Objects) — объекты для быстрого взаимодействия между узлами. Могут содержать до 8 байт данных и передаются в одном кадре. Для каждого PDO выделяется свой идентификатор (в определенном диапозоне). PDO условно делятся на входящие (RPDO) и исходящие (TPDO). Изначально предполагается, что каждый узел будет иметь по 4 RPDO и 4 TPDO, однако их можно перераспределить между узлами вплоть до того, что один узел будет иметь возможность принимать и передавать до 512 PDO. Однако в этом случае на другие узлы идентификаторов не хватит.
PDO могут посылаться по таймеру, по наступлению определенного события либо по прямому запросу на посылку из управляющей программы.
— NMT (Network Management) — менеджер сети. Сообщения этого типа могут переводить узлы в разные состояния (инициализация, рабочее, предрабочее, остановленное), а так же с их помощью обеспечивается контроль работы сети — механизм heartbeat.
— Heartbeat — переводится как сердцебиение. Суть механизма заключается в том, что каждый узел передает в сеть определенное сообщение, уникальное для каждого узла (ID получается путем прибавления номера узла в сети к определенному числу). Любой узел, который хочет узнать, по прежнему ли ему доступны узлы с определенными id должен просто принимать и обрабатывать эти сообщения. Сообщения от неинтересных для него узлов могут игнорироваться.
— Emergency message — в протоколе предусмотрена посылка сообщений об аварийных ситуациях.
— EDS (Electronic Data Sheets) — специальные текстовые файлы, позволяющие настроить словарь объектов. Существуют программы, помогающие в генерации таких файлов.
CANopenNode
CANopenNode — открытая реализация протокола CANopen, написанная на чистом С для использования в микроконтроллерах.
Теперь я опишу особенности, с которыми мне пришлось столкнуться при работе с CANopenNode.
1. Я использовал 32-битный контроллер, а CANopenNode изначально написан для 8/16 битных. Из-за этого в одном месте таймер сходил с ума, поскольку вместо того, чтобы переполниться и, как следствие, обнулиться, он продолжал расти и в механизме хартбита выдавалась ошибка о том, что поголовно все узлы превысили время ожидания нового хартбита.
2. Моя задача предполагала, что я могу передавать большие объемы данных. При этом несколько контроллеров могли передавать эти данные, а остальные — получать. Пришлось отказаться от механизма SDO (поскольку в нем только один контроллер имел бы возможность посылать данные с размером больше чем 8 байт) и написать свою собтвенную надстройку, которая использовала первые два байта PDO в виде управляющей информации.
3. Решение из пункта два привело к тому, что мне потребовалось однозначно определять участников взаимодействия, что возможно сделать только с помощью идентификаторов.
Это был, пожалуй, самый тонкий момент в работе. Было решено ограничить количество «мастеров» четырьмя штуками. Эти четыре узла получали 127 PDO на вход и на выход. А остальные узлы работали с 4 входящими и исходящими PDO. При чем, идентификаторы PDO были распределены так, что узлы-«ведомые» имели по одному исходящему сообщению, каждое из которых читал только определенный «мастер» и по одному входящему сообщению от каждого «мастера». Мастера же соответственно имели по одному каналу для обращения лично к любому из «ведомых» и точно знали, кто из них обращается к нему.
Эта концепция была сложнее всего, так как даже на форумах, где люди работают с CAN, бытует мнение, будто CANopen нельзя настроить подобным образом.
4. Настройка идентификаторов в данном протоколе происходит в коде. Более того, от неё зависят id узлов, которые будет читать и принимать конкретный узел. Поэтому смена id на ходу представляется сложной для данного протокола и требует дополнительных усилий.
В виде заключения
В конце концов, я пришел к выводу, что данный протокол не совсем хорошо ложится на мою задачу и что мне придется написать свою реализацию. Однако, за время, которое я провел, разбираясь с этим протоколом, я намного лучше понял принципы работы с сетью CAN. Если Вам нужно быстро получить работающее приложение, использующее все преимущества надежной доставки, если Вы хотите, чтобы Ваше приложение было совместимо со многими уже существующими системами, если Вам нужны готовые средства отладки CAN-сети, то CANopen — это очень хороший выбор.
Я с удовольствием отвечу на любые вопросы, принимаю критику и дополнения, а так же могу подробнее остановиться на каких-либо моментах, если кому-нибудь это будет интересно.
Спасибо Вам за внимание!
Ссылки на некоторые ресурсы, связанные с CAN
www.can-cia.org — (англ.) международная организация CAN in Automation.
sourceforge.net/projects/canopennode — (англ.) проект CANopenNode
UPD:
Забыл добавить еще один интересный момент, который некоторое время вводил меня в заблуждение. Я отлаживал свою сеть на двух контроллерах, которые я соединил напрямую.
1. Когда я перепрошивал один из контроллеров, сеть на втором начинала выдавать ошибки (начинали часто-часто мигать лампочки — поведение, определенное в стеке CANopen). При обычной перезагрузке контроллера такого не происходило. Возможно, это специфика конкретного контроллера, но на всякий случай это стоит иметь в виду.
2. Протокол CANopen спроектирован таким образом, что если сообщение с определенным id не было отправлено до того момента, как оно должно быть отправлено еще раз, то это тоже вызывает ошибку. При том, каждый узел сети каждую секунду посылает хартбит-сообщение. Поэтому даже если вы ничего не отправляете, то всё равно можете получить ошибку сети.
Приветствую всех на нашем сайте! Сегодняшняя статья будет целиком и полностью посвящена обзору протокола CAN. А в одной из следующих статей мы реализуем обмен данными по CAN на практике. Но не буду забегать вперед…
CAN (Controller Area Network) – это промышленный стандарт, позволяющий осуществить объединение в единую сеть различных узлов, механизмов, датчиков и т. п. Протокол является широковещательным, это значит, что все устройства в CAN-сети принимают все передаваемые по шине сигналы. Режим передачи данных – последовательный, при этом байты сообщений формируют кадры определенного вида. Структуру этих кадров данных мы также обязательно разберем в этой статье.
Основные характеристики протокола CAN:
- очень высокая надежность и защищенность
- каждое сообщение имеет свой собственный приоритет
- реализован механизм обнаружения ошибок
- автоматическая повторная отправка сообщений, которые были доставлены с ошибкой
- уже упомянутый широковещательный характер передачи данных
- возможность присутствия нескольких ведущих (master) устройств в одной сети
- широкий диапазон скоростей работы
- высокая устойчивость интерфейса к помехам
- кроме того, есть механизм обнаружения “сбойных” узлов с последующим удалением таких узлов из сети.
Первоначально стандарт был разработан для автомобильной промышленности. И занималась этим компания Bosch в 1980-х годах. Основная идея заключалась в том, чтобы уйти от использования огромного количества проводов, соединяющих многочисленные узлы автомобиля. И протокол CAN позволил этого достичь! С тех пор CAN является основным механизмом соединения устройств, узлов и датчиков автомобиля между собой. Помимо этого, интерфейс CAN активно используется в промышленной автоматизации, а также в системах “умного дома”.
Давайте перейдем к физическому уровню протокола. В интернете можно найти много противоречивой информации на этот счет, но истина тут одна 🙂 Стандарт CAN компании Bosch не регламентирует физический уровень передачи данных, поэтому могут использоваться абсолютно разные варианты, например, оптоволокно. На практике же чаще всего используется соединение посредством двухпроводной дифференциальной линии (витой пары). Ориентировочная максимальная длина линии для разных скоростей передачи данных составляет:
Скорость | Длина линии |
---|---|
1 Мбит/с | 50 м |
500 кбит/с | 100 м |
125 кбит/с | 500 м |
10 кбит/с | 5 км |
Важным условием работоспособности шины является наличие на концах витой пары согласующих резисторов, которые также называют терминаторами, с сопротивлением 120 Ом:
В отличие от многих других протоколов в CAN не рекомендуется описание битов данных как “логического нуля” и “логической единицы”. Здесь используются понятия доминантный и рецессивный бит.
Важнейшим свойством является то, что если один из узлов сети хочет выставить на линии рецессивный бит, а другой доминантный, то в итоге на линии окажется доминантный бит. В общем-то отсюда и следует его название, от слова “доминировать” 🙂 Очень хорошо этот процесс иллюстрирует пример с оптоволоконной линией. Как вы помните, в оптоволокне для передачи данных используется “свет”, либо он есть (единица), либо его нет (ноль). При использовании в CAN-сети “свет” – доминантный бит, соответственно, отсутствие света или “темнота” – рецессивный. Вспоминаем про важнейшее свойство передачи данных в сети…
Пусть один узел выставляет на линии рецессивный бит, то есть “темноту”. Второй узел, напротив, выставляет доминантный бит – “свет”. В итоге на линии будет “свет”, то есть доминантный бит, что в точности соответствует требованиям сети!
При использовании электрического сигнала устройство, желающее передать в линию доминантный бит, может подтянуть линию к земле. Это и приведет к тому, что на линии будет доминантный бит независимо от того, что выдают на линию другие участники коммуникации.
Это свойство используется для арбитража в сети CAN. Пусть несколько устройств хотят передать данные. Каждый из этих передатчиков сравнивает значение, которое он передает, со значением, фактически присутствующим на линии. В том случае, если передаваемое значение совпадает со считанным, устройство продолжает высылать свои данные. Если значения совпали у нескольких устройств, то все они продолжают передачу как ни в чем не бывало.
Продолжается это до того момента, когда значения станут различными. Если несколько устройств хотят передать рецессивный бит, а одно – доминантный, то в соответствии с правилом, которое мы обсудили выше, на линии окажется доминантный бит. В таком случае отправленные и считанные значения для устройств, пытающихся выдать на линию рецессивное состояние, не совпадут. В этом случае они должны прекратить передачу. А тот узел, который в этот момент передавал доминантный бит, продолжит свою работу. Доминирование в чистом виде 🙂
Сигналы, которые передаются по витой паре, получили название CAN_H и CAN_L (High и Low). Доминантное состояние соответствует случаю, когда потенциал сигнала CAN_H выше потенциала CAN_L. Рецессивное – когда потенциалы равны (разница потенциалов не превышает допустимого отклонения, 0.5 В).
С этим вроде бы разобрались, давайте двигаться дальше!
Пришло время определить, как биты объединяются в кадры. Протокол CAN определяет 4 вида кадров:
- Кадр данных (data frame)
- Кадр удаленного запроса (remote frame)
- Кадр перегрузки (overload frame)
- Кадр ошибки (error frame)
Для кадра данных возможны два варианта – базовый формат и расширенный. Вот так выглядит структура базового формата:
Поле | Длина | Описание |
---|---|---|
Начало кадра (SOF) | 1 бит | Начало передачи кадра |
Идентификатор (ID) | 11 бит | Идентификатор сообщения |
Запрос на передачу (RTR) | 1 бит | Доминантный бит |
Бит расширения идентификатора (IDE) | 1 бит | Бит определяет длину идентификатора, для базового формата – доминантный бит |
Зарезервированный бит | 1 бит | Зарезервировано |
Длина данных (DLC) | 4 бита | Количество байт данных |
Данные | 0 – 8 байт | Данные |
Контрольная сумма (CRC) | 15 бит | Контрольная сумма |
Разграничитель контрольной суммы | 1 бит | Рецессивный бит |
Промежуток подтверждения (ACK) | 1 бит | Для приемника – доминантный бит, для передатчика – рецессивный |
Разграничитель подтверждения | 1 бит | Рецессивный бит |
Конец кадра (EOF) | 7 бит | Все биты рецессивные |
А это структура расширенного:
Поле | Длина | Описание |
---|---|---|
Начало кадра (SOF) | 1 бит | Начало передачи кадра |
Идентификатор A (ID A) | 11 бит | Первая часть идентификатора |
Подмена запроса на передачу (SRR) | 1 бит | Рецессивный бит |
Бит расширения идентификатора (IDE) | 1 бит | Бит определяет длину идентификатора, для расширенного формата – рецессивный бит |
Идентификатор B (ID B) | 18 бит | Вторая часть идентификатора |
Запрос на передачу (RTR) | 1 бит | Доминантный бит |
Бит расширения идентификатора (IDE) | 1 бит | Бит определяет длину идентификатора, для базового формата – доминантный бит |
Зарезервированные биты | 2 бита | Зарезервировано |
Длина данных (DLC) | 4 бита | Количество байт данных |
Данные | 0 – 8 байт | Данные |
Контрольная сумма (CRC) | 15 бит | Контрольная сумма |
Разграничитель контрольной суммы | 1 бит | Рецессивный бит |
Промежуток подтверждения (ACK) | 1 бит | Для приемника – доминантный бит, для передатчика – рецессивный |
Разграничитель подтверждения | 1 бит | Рецессивный бит |
Конец кадра (EOF) | 7 бит | Все биты рецессивные |
Результирующий идентификатор получается в результате объединения полей “Идентификатор A” и “Идентификатор B“.
Кадр удаленного запроса (remote frame) представляет из себя кадр данных, описанный выше, но без поля данных и с рецессивным битом RTR. Он используется в случае, когда один узел хочет запросить данные у другого узла.
Кадр ошибки (error frame) передает устройство, обнаружившее ошибку в сети. Фрейм ошибки имеет наивысший приоритет и принимается всеми устройствами сети в обязательном порядке.
Кадр перегрузки (overload frame) используется очень редко… Его идея и назначение заключается в том, что с его помощью устройство, которое в данный момент не может принять данные, запрашивает повторную передачу этих же данных.
А давайте вернемся чуть назад, к арбитражу данных, и рассмотрим, что это может означать на практике! Итак, несколько устройств начинают передачу сообщения, а точнее кадра данных. Передается бит начала кадра и затем начинается передача идентификатора сообщения. Как вы помните, приоритет будет у того устройства, которое будет передавать доминантный бит, в тот момент, когда все остальные будут передавать рецессивный. То есть чем “позже” среди битов идентификатора появится “рецессивный бит”, тем выше будет его приоритет! Другими словами: более высокий приоритет при использовании интерфейса CAN имеют сообщения с меньшим значением идентификатора.
Первые два типа кадров – кадр данных и кадр удаленного запроса – отделяются от других кадров специальным межкадровым промежутком (паузой). А для фреймов ошибки и перегрузки предусмотрена передача без пауз, чтобы обеспечить их скорейшую обработку узлами сети.
Итак, что у нас на очереди теперь? Конечно же контроль ошибок – важнейший аспект работы протокола CAN! Стандарт предусматривает несколько механизмов контроля ошибок.
- Во-первых, это контроль передачи битов – уровень сигнала в сети сравнивается с передаваемым для каждого бита.
- Второй механизм заключается в использовании дополнительных битов (stuffing bit). После передачи любых пяти одинаковых битов автоматически добавляется передача бита противоположного значения. Таким образом, при передаче шести одинаковых битов диагностируется ошибка stuffing’а. Этот механизм используется для кодирования всех полей фреймов данных и запроса. Исключением являются только поля промежутка подтверждения, разграничителя контрольной суммы и EOF.
- Стандартная процедура проверки контрольной суммы. Передатчик вычисляет контрольную сумму для текущего кадра и передает ее в линию. В свою очередь, приемник также вычисляет контрольную сумму для принимаемых данных и сравнивает ее с тем значением, которое было отправлено передатчиком. В случае не совпадения значений диагностируется ошибка CRC.
- Также выполняется контроль битов фрейма, которые должны иметь заранее определенное значение. В случае, если реальное значение не совпадает с тем, которое ожидается, возникает ошибка.
Благодаря всем этим механизмам, вероятность необнаружения ошибки является очень низкой, что, конечно же, не может не радовать 🙂
Кроме того, если один из узлов обнаружил ошибку в сообщении, он сообщает об этом в сеть CAN при помощи фрейма ошибки. А поскольку сеть у нас широковещательная, то о возникновении ошибки становится известно всем участникам коммуникации. И если в сообщении была обнаружена ошибка, его передача будет осуществлена еще раз.
И на этом еще не все! Каждый узел может находиться в одном из трех состояний:
- Error Active
- Error Passive
- Bus Off
Протокол CAN предусматривает, что изначально, после старта, узел находится в первом из этих состояний – Error Active. Каждое устройство имеет два счетчика ошибок:
- Счетчик ошибок передачи
- Счетчик ошибок приема
Существуют определенные правила обслуживания этих счетчиков, которые сводятся к следующему. Передатчик, обнаруживший ошибку, увеличивает свой счетчик ошибок передачи быстрее, чем приемники увеличивают свои счетчики ошибок приема. Это связано с предположением, что при ошибке, вероятность того, что сбой произошел именно в передатчике, а не в приемнике, достаточно велика. На практике ошибка передачи увеличивает соответствующий счетчик на 8, а ошибка приема лишь на 1. При приеме или передаче корректного сообщения как счетчик ошибок передачи, так и счетчики ошибок приема уменьшаются на 1.
Если значение любого из этих двух счетчиков узла превысит значение 127, то узел переходит в состояние Error Passive. А если величина одного из счетчиков превысит 255, то узел перейдет в состояние Bus Off.
Разница между этими состояниями заключается в действиях узла при диагностировании ошибки:
- Узел в состоянии Error Active при обнаружении ошибки передает в шину Active Error Flags – 6 доминантных бит. Поскольку биты доминантные, то это сообщение нарушает обычную работу шины и поэтому все устройства сети также фиксируют возникновение ошибки.
- Узел в состоянии Error Passive при обнаружении ошибки передает в шину Passive Error Flags – 6 рецессивных бит, которые игнорируются всеми другими участниками обмена. Поэтому увеличивается только величина счетчика ошибок одного конкретного узла.
- И, наконец, узел в состоянии Bus Off ничего не передает в сеть – ни фреймы ошибок, ни фреймы данных, никакие другие.
Как видите, протокол CAN крайне интересен для изучения, надежен, безопасен, и удобен в использовании 🙂
И на этой позитивной ноте на сегодня заканчиваем, скоро займемся практической реализацией протокола, также поговорим о микросхемах и устройствах, обеспечивающих работу с CAN. Так что подписывайтесь на обновления, буду рад снова видеть вас на нашем сайте!
Побеждаем шину CAN. Часть 1. Технология / Хабр
Сегодня я хочу познакомить вас с интересной микроконтроллерной платформой CANNY. Это обзорная статья в которой вы узнаете о технологии, а в последующих статьях я расскажу вам о работе с сообщениями CAN, интеграции CANNY c Arduino Mega Server и о тех возможностях, которые предоставляет эта связка.
Почему CANNY? От названия шины CAN, которая широко используется на транспорте и, в частности, во всех современных автомобилях в качестве бортовой сети. Итак, что же можно сделать, имея специализированный контроллер, подключённый к CAN шине вашего автомобиля?
Шина CAN
Образно говоря, шина CAN это нервная система вашего автомобиля. По ней передаётся вся информация о состоянии блоков и систем, а также управляющие команды, которые во многом определяют поведение автомобиля. Зажигание фар, открывание и закрывание дверей, управление проигрыванием музыки в салоне машины, срабатывание сигнализации и т. д. — всё это работает и управляется по этой шине.
Физически, шина CAN представляет собой два перевитых провода и очень проста в монтаже и подключении. Несмотря на свою простоту, она, благодаря своей дифференциальной природе, хорошо защищена от различных наводок и помех. Высокая надежность и большая допустимая длина сети, до 1000 метров, помогла CAN завоевать широкую популярность у производителей различного, не только автомобильного оборудования.
Контроллеры CANNY
Это целое семейство специализированных контроллеров, имеющих встроенную «родную» поддержку работы с шиной CAN. Это касается как «железной» части, так и поддержки на уровне «софта».
Флагманом линейки является контроллер CANNY 7, наиболее мощный и имеющий максимум возможностей. Большое количество памяти, мощные выходы, позволяющие напрямую управлять реле автомобиля, интеллектуальная система защиты от коротких замыканий, защита от бросков тока и напряжения в бортовой сети автомобиля — всё это делает этот контроллер отличным решением для воплощения любых ваших идей и проектов.
Кроме CANNY 7 в линейке контроллеров присутствует ещё несколько моделей, мы будем проводить свои эксперименты с более простой встраиваемой моделью CANNY 5 Nano. Она также поддерживает работу с CAN шиной, но при этом похожа на уже знакомую нам Arduino Nano.
Визуальное программирование
Развитая поддержка шины CAN это не единственная особенность этих контроллеров, кроме этого CANNY имеют свою собственную среду программирования, CannyLab, но не «обычную», а визуальную, где весь процесс написания программ сводится к манипулированию готовыми структурными блоками, заданию их параметров и соединению входов и выходов этих блоков в определённой последовательности, в соответствии с алгоритмом решаемой задачи.
Ни одной строчки кода!
Хорошо это или плохо? На мой взгляд, это дело привычки. Мне, как человеку привыкшему к «традиционному» программированию, было непривычно манипулировать блоками, вместо написания строк кода. С другой стороны, существует множество приверженцев именно такого подхода к составлению алгоритмов и считается, что для инженеров и «не программистов» это наиболее простой и доступный метод программирования микроконтроллеров.
Мне, как минимум, было «прикольно» составлять программы таким образом и через некоторое время мне это стало даже нравиться. Возможно, что если продолжить этим заниматься, то через некоторое время уже написание кода покажется неудобным.
CannyLab является бесплатной средой разработки и вы можете свободно скачать её с сайта разработчиков, она также не требует специальной процедуры инсталляции — достаточно распаковать файл с архивом — и вы можете начинать работу.
Подключение
Подключение CANNY 5 Nano к компьютеру мало чем отличается от подключения контроллеров Arduino. При наличии в системе драйвера Silicon Labs CP210x, либо после его установки из скаченного дистрибутива CannyLab, Windows создаёт виртуальный COM порт и CANNY готов к работе. В моём случае понадобилось ещё перезагрузить компьютер, но возможно это особенность моей системы.
Практические примеры
Давайте на простых примерах разберём, как в CannyLab выполнять действия, привычные нам в Arduino IDE. Начнём с традиционного мигания светодиодом.
В контроллере CANNY 5 на выводе С4 (Channel 4) присутствует тестовый светодиод (аналог светодиода, находящегося на 13 выводе в Arduino). И его тоже можно использовать для индикации и экспериментов, чем мы и воспользуемся.
Что же нужно, чтобы помигать светодиодом в контроллере CANNY? Нужно сделать всего две вещи — сконфигурировать пин четвертого канала как выход и подать на этот выход сигнал с ШИМ генератора. Все эти действия мы уже не раз проделывали в Arduino IDE, посмотрим как это выглядит в CannyLab.
Итак, конфигурируем пин четвертого канала как выход
Настраиваем генератор ШИМ. Задаём период 500 миллисекунд, заполнение — 250 миллисекунд (то есть 50 %) и 1 (true) на входе генератора «Старт» и… всё! Больше ничего делать не нужно — программа готова, осталось только залить её в контроллер.
Режим симуляции
Тут нужно сказать пару слов о процессе симуляции на компьютере работы контроллера и заливке разработанной программы в память «железного» контроллера.
Среда разработки CannyLab позволяет запускать и отлаживать программу, не записывая её в память контроллера. В режиме симуляции вы можете видеть результат работы программы прямо в реальном времени и даже вмешиваться в её работу.
Заливка в контроллер
Для работы контроллеров CANNY, перед заливкой программы (в терминологии разработчиков «диаграммы») нужно сначала залить операционную систему «Устройство/Системное ПО/Записать». Это нужно сделать только один раз, для этого нужно выбрать соответствующий вашему контроллеру файл с расширением .ccx.
После того, как программа написана и отлажена, её можно загрузить в ваш контроллер. Это делается просто — в меню выбираете пункт «Устройство/Диаграмма/Записать» и через несколько секунд программа оказывается записанной в контроллер.
Далее нужно отключить контроллер от USB порта компьютера, снять перемычку на плате и можно включать запрограммированный контроллер, который после включения будет работать по вашей программе.
Аналоговые входы
Для того, чтобы лучше понять принцип программирования контроллеров CANNY в среде разработке CannyLab, давайте ещё разберём пример работы с аналоговым входом в этой системе.
Мы будем отслеживать уровень напряжения на 10 пине контроллера и если он находится в диапазоне 2,5 В ± 20%, будем зажигать встроенный в плату светодиод.
Как и в предыдущем примере, конфигурируем 4-й пин как выход для того, чтобы иметь возможность управлять работой светодиода.
Включаем АЦП на 10-м канале.
Далее пользуемся двумя логическими блоками, которые выдают 1 на выход, если напряжение находится в заданном диапазоне. Полный диапазон от 0 до 4095.
Блок «Логическое И» довершает работу и со своего выхода управляет работой светодиода на плате.
Вот и всё. То, что мы привычно делали на Arduino, мы легко сделали в CannyLab. Осталось только освоиться в этой среде программирования и вы сможете легко и непринуждённо создавать свои проекты на этой платформе.
Эти простые примеры составления программ даны для того, чтобы вы могли понять принцип визуального программирования микроконтроллеров CANNY. В дальнейшей работе вам поможет отличная справочная документация и поддержка разработчиков на сайте и форуме системы.
Заключение по вводной статье цикла
Подключив контроллер CANNY к своему автомобилю вы сможете реализовать множество интересных и уникальных идей, например, нестандартную сигнализацию, которую не так то легко будет вскрыть (в силу её нестандартности) или добавите новые функции, о которых мечтали, но не надеялись, что это возможно реализовать на практике.
Если вам нравится визуальное программирование в стиле CannyLab, то контроллеры CANNY могут стать для вас интересной альтернативой Arduino или работать в связке с контроллерами Arduino. Об этом мы поговорим во второй статье цикла, в которой я расскажу вам об интеграции контроллеров CANNY с системой Arduino Mega Server.
Напомню, что AMS теперь работает не только на платах Arduino, но и на беспроводных Wi-Fi модулях ESP8266 и именно о такой связке пойдёт речь в следующий раз.
И как обычно, оставайтесь с нами, будет интересно!
Управление автомобилем по CAN / Хабр
Введение
Беспилотный автомобиль StarLine на платформе Lexus RX 450h — научно-исследовательский проект, стартовавший в 2018 году. Проект открыт для амбициозных специалистов из Open Source Community. Мы предлагаем всем желающим поучаствовать в процессе разработки на уровне кода, опробовать свои алгоритмы на реальном автомобиле, оснащенном дорогостоящим оборудованием. Для управления автомобилем было решено использовать Apollo, открытый фреймворк. Для работы Apollo нам необходимо было подключить набор модулей. Эти модули помогают программе получать информацию об автомобиле и управлять им по заданным алгоритмам.
К таким модулям относятся:
- модуль позиционирования автомобиля в пространстве с помощью GPS-координат;
- модуль управления рулем, ускорением и торможением авто;
- модуль состояния систем автомобиля: скорость, ускорение, положение руля, нажатие на педали и т.д.;
- модуль получения информации об окружении автомобиля. С этим справятся ультразвуковые датчики, камеры, радары и лидары.
Прежде всего перед нашей командой стояла задача научиться управлять рулем, ускорением и торможением автомобиля. А также получать информацию о состоянии систем автомобиля. Для этого была проведена большая работу по изучению CAN-шины Lexus.
Теоретическая часть
Что такое CAN-шина
В современных автомобилях управление всеми системами взяли на себя электронные блоки (Рис. 1.). Электронные блоки — это специализированные компьютеры, каждый из которых имеет все необходимые интерфейсы для интеграции с автомобилем. С помощью цифровых интерфейсов связи, блоки объединяются в сеть для обмена информацией друг с другом. Самые распространенные цифровые интерфейсы в автомобилях — CAN, LIN, FLEXRay. Из них наибольшее распространение получил именно CAN.
CAN (Controller Area Network) шина — это промышленный стандарт сети. В 1986 году этот стандарт разработали в компании Bosch. А первым автомобилем с CAN-шиной стал Mercedes-Benz W140, выпущенный в 1991 году. Стандарт разрабатывался для возможности устройствам общаться друг с другом без хоста. Обмен информацией осуществляется с помощью специальных сообщений, которые состоят из полей ID, длины сообщения и данных. Каждый блок имеет свой набор ID. При этом приоритет на шине имеет сообщение с меньшим ID. Поле данных может нести информацию, например, о состоянии систем и датчиков, команды управления механизмами и т.д.
Рис. 1. Шина CAN автомобиля.
На физическом уровне шина представляет собой витую пару из медных проводников. Сигнал передается дифференциально, за счет чего достигается высокая помехоустойчивость.
Рис. 2. Физическое представление сигнала в CAN шине
Посредством CAN шины можно получать информацию о состоянии различных датчиков и системах автомобиля. Также по CAN можно управлять узлами автомобиля. Именно эти возможности мы и используем для своего проекта.
Мы выбрали Lexus RX, потому что знали, что сможем управлять всеми необходимыми узлами по CAN. Так как самое сложное при исследовании автомобиля — это закрытые протоколы. Поэтому одной из причин выбора именно этой модели авто стало наличие описания части протокола CAN-шины в opensource-проекте Openpilot.
Правильно управлять автомобилем — означает понимать, как работают механические части систем автомобиля. Нам было необходимо хорошо понимать, как правильно работать с электроусилителем или управлять замедлением автомобиля. Ведь, например, при повороте колеса создают сопротивление на рулевое управление, что вносит свои ограничения на управление при повороте. Некоторые системы невозможно использовать без ввода авто в специальные рабочие режимы. Эти и другие детали нам пришлось изучать в процессе работы.
Электроусилитель руля
Электроусилитель руля EPS (Electric Power Steering) — система, предназначенная снизить усилие на руль при повороте (Рис. 3). Приставка «электро» говорит о типе системы — электрическая. Управление рулем с этой системой становится комфортным, водитель поворачивает руль в нужном направлении, а электродвигатель помогает довернуть его до необходимого угла.
Электроусилитель устанавливается на рулевой вал автомобиля, части которого соединены между собой торсионным валом. На торсионный вал устанавливается датчик величины крутящего момента (Torque Sensor). При вращении руля происходит скручивание торсионного вала, которое регистрируется датчиком момента. Данные, полученные от датчика момента, датчиков скорости и оборотов коленвала, поступают в электронный блок управления ECU. А ECU, в свою очередь, уже вычисляет необходимое компенсационное усилие и подает команду на электродвигатель усилителя.
Рис. 3. Схематичное изображение системы электроусилителя руля
Видео: cистема LKA рулит автомобилем с помощью системы EPS.
Электронная педаль газа
Дроссельная заслонка — это механизм регулировки количества топливной смеси, которая попадет в двигатель. Чем больше смеси попадет, тем быстрее едет автомобиль.
Электронная педаль газа — это система, которая задействует работу нескольких электронных узлов. Сигнал о положении педали, при ее нажатии, поступает в блок управления двигателем ECM (Engine Control Module). ECM, на основе этого сигнала, рассчитывает необходимое количество топлива, которое нужно подать в двигатель. В зависимости от необходимого количества топлива, ECM регулирует угол открытия дроссельной заслонки.
Рис. 4. Система электронной педали газа.
Видео: Для работы круиз-контроля используется управление электронной педалью газа.
Электронные системы помощи водителю
Мы купили автомобиль, который оборудован множеством цифровых блоков и систем помощи водителю (ADAS). В нашем проекте мы используем LKA, ACC и PCS.
LKA (Lane Keep Assist) — это система удержания в полосе, которая состоит из фронтальной камеры и вычислительного блока. LKA удерживает автомобиль в полосе движения, когда водитель, например, отвлекся. Алгоритмы в вычислительном блоке получают данные от камеры и на их основе принимают решение о состоянии автомобиля на дороге. Система способна понимать, что автомобиль неконтролируемо движется к правой или левой полосе. В таких случаях подается звуковой сигнал для привлечения внимания водителя. При пересечении полосы система сама скорректирует угол поворота колес так, чтобы автомобиль остался в полосе движения. Система должна вмешиваться только в том случае, если осознает, что маневр между полосами движения не был вызван действием водителя.
ACC (Adaptive Cruise Control) — система адаптивного круиз-контроля, который позволяет выставить заданную скорость следования. Автомобиль сам ускоряется и притормаживает для поддержания нужной скорости, при этом водитель может убрать ногу с педалей газа и тормоза. Этот режим удобно использовать при езде по скоростным магистралям и автострадам. Адаптивный круиз контроль способен видеть препятствия впереди автомобиля и притормаживать для избежания столкновения с ними. Если впереди автомобиля едет другое транспортное средство с меньшей скоростью, ACC сбавит скорость и будет следовать за ним. При обнаружении статичного объекта, ACC сбавит скорость до полной остановки. Для обнаружения объектов перед автомобилем такая система использует радар с миллиметровым диапазоном длин волн. Обычно такие радары работают на частоте 24-72 ГГц и способны уверенно видеть объекты на расстоянии до 300 метров. Радар обычно установлен за передним значком на решетке радиатора.
PCS (Pre-Collision System) — система предотвращения столкновения. Система призвана предотвратить столкновение с автомобилем, который движется впереди. При неизбежности столкновения, система минимизирует урон от столкновения. Здесь так же используются радар для оценки расстояния до объекта и фронтальная камера для его распознавания. Фронт PCS прогнозирует вероятность столкновения на основе скорости автомобиля, расстояния до объекта и его скорости. Обычно у системы есть два этапа срабатывания. Первый этап — система звуком и индикацией на приборной панели оповещает об опасности водителя. Второй этап — активируется экстренное торможение с помощью системы ABS, и включаются преднатяжители ремней безопасности.
Практическая часть
Управление рулем
Первое, что захотелось сделать нашей команде, — это научиться рулить. Рулем в автомобиле могут управлять две системы: парковочный ассистент IPAS (Intelligent Park Assist) и LKA.
IPAS позволяет задавать напрямую угол поворота рулевого колеса в градусах. Так как в нашем автомобиле нет данной системы, проверить и освоить рулевое управление таким способом нельзя.
Поэтому мы изучили электрические схемы автомобиля и поняли, какие CAN-шины могут быть полезны. Мы подключили анализатор CAN-шины. Лог содержит файл записей сообщений в шине в хронологической последовательности. Наша задача была найти команды управления электроусилителем руля EPS (Electric Power Steering). Мы сняли лог поворота рулевого колеса из стороны в сторону, в логе смогли найти показания угла поворота и скорость вращения рулевого колеса. Ниже пример изменения данных в шине CAN. Интересующие нас данные выделены маркером.
Поворот руля влево на 360 градусов
Поворот руля вправо на 270 градусов
Следующим этапом мы исследовали систему удержания в полосе. Для этого мы выехали на тихую улицу и записали логи обмена между блоком удержания в полосе и DSU (Driving Support ECU). С помощью анализатора шины CAN нам удалось вычислить сообщения от системы LKA. На рисунке 6 изображена команда управления EPS.
Рис. 5. Команда управления рулем с помощью системы LKA
LKA управляет рулем путем задания значения момента на валу (STEER_TORQUE_CMD) рулевого колеса. Команду принимает модуль EPS. Каждое сообщение содержит в заголовке значение счетчика (COUNTER), которое инкрементируется при каждой отправке. Поле LKA_STATE содержит информацию о состоянии LKA. Для захвата управления необходимо выставлять бит STEER_REQUEST.
Сообщения, которые отвечают за работу важных систем авто, защищаются контрольной суммой (CHECKSUM) для минимизации рисков ложного срабатывания. Автомобиль проигнорирует такую команду, если сообщение содержит некорректную контрольную сумму или значение счетчика. Это встроенная производителем защита от вмешательств сторонних систем и помех в линии связи.
На графике (Рис. 6.) представлена диаграмма работы LKA. Torque Sensor — значение с датчика момента на торсионном валу. Torque Cmd — команда от LKA для управления рулем. Из картинки видно, как происходит подруливание LKA для удержания автомобиля в полосе. При переходе через ноль меняется направление поворота руля. Т.е. отрицательное значение сигнала говорит о повороте вправо, положительное — влево. Удержание команды в нуле говорит об отсутствии управления со стороны LKA. При вмешательстве водителя, система перестает выдавать управление. О вмешательстве водителя LKA узнает с помощью второго датчика момента на валу со стороны рулевого колеса.
Рис. 6. График работы системы LKA
Нам предстояло проверить работу команды управления рулем. С помощью модуля StarLine Сигма 10 мы подготовили прошивку для проверки управления. StarLine Сигма 10 должен выдавать в CAN-шину команды на поворот руля влево или вправо. На тот момент у нас не было графического интерфейса для управления модулем, поэтому пришлось использовать штатные средства автомобиля. Мы нашли в CAN-шине статус положения рычага круиз-контроля и запрограммировали модуль таким образом, что верхнее положение рычага приводило к повороту руля вправо, нижнее положение — к повороту влево (Рис. 7).
Рис. 7. Первые попытки рулить
На видео видно, что управление осуществляется короткими секциями. Это возникает по нескольким причинам.
Первая из причин — это отсутствие обратной связи. Если расхождение между сигналом Torque Cmd и Torque Sensor превышает определенное значение Δ, система автоматически перестает воспринимать команды (Рис. 8). Мы настроили алгоритм на корректировку выдаваемой команды (Torque CMD) в зависимости от значения момента на валу (Torque Sensor).
Рис. 8. Расхождение сигнала приводит к ошибке работы системы
Следующее ограничение связано с системой защиты встроенной в EPS. Система EPS не позволяет командами от LKA рулить в широком диапазоне. Что вполне логично, т.к. при езде по дороге резкое маневрирование не безопасно. Таким образом, при превышении порогового значения момента на валу, система LKA выдает ошибку и отключается (Рис. 9).
Рис. 9. Превышение порогового значения регулировки момента на валу
Независимо от того, активирована система LKA или нет, сообщения с командами от нее присутствуют в шине постоянно. Мы посылаем модулю EPS команду повернуть колеса с конкретным усилием влево или вправо. А в это время LKA перебивает наши посылки «пустыми» сообщениями. После нашей команды со значением момента, приходит штатная с нулевым (Рис. 10).
Рис. 10. Штатные сообщения приходят с нулевыми значениями момента и перебивают наше управление
Тогда мы, с помощью модуля StarLine Сигма 10, смогли фильтровать весь трафик от LKA и блокировать сообщения с ID 2E4, когда нам это было нужно. Это решило проблему, а нам удалось получить плавное управления рулем (Рис. 11).
Рис. 11. Плавная регулировка поворота руля без ошибок
Управление газом
Система адаптивного круиз-контроля ACC управляет ускорением и торможением программно по CAN-шине. Блок управления двигателем ECU принимает команды DSU, если необходимо ускориться — активирует электронную педаль газа. Для торможения автомобиля используется рекуперативное торможение. При этом на торможение и ускорение используется одна команда, отличаются только значения.
Команда управления ускорением или замедлением представлена на рисунке 12. Она состоит из величины ускорения ACCEL_CMD, пары служебных бит и контрольной сумма Checksum. Для ускорения автомобилем значение ACCEL_CMD положительное, для замедления — отрицательное. Ускорение задается в диапазоне от 0 до 3 м/с^2, замедление аналогично, но со знаком минус. Для отправки данных в шину необходимо пересчитать желаемое ускорение или замедление с коэффициентом 0,001. Например, для ускорения 1 м/с^2, ACCEL_CMD = 1000 (0x03E8).
Рис. 12. Команда управления ускорения/замедления автомобиля
Мы сняли логи со штатной системы ACC и проанализировали команды. Сравнили с имеющимся у нас описанием команд и приступили к тестированию.
Рис. 13. Лог управления ускорением/замедлением системы адаптивного круиз-контроля ACC (выделено маркером)
Здесь не обошлось без трудностей. Мы выехали на дорогу с оживленным трафиком для тестирования команды ускорения. Команды управления ускорением или замедлением автомобиля работают только при активированном круиз контроле, не достаточно активировать его кнопкой. Необходимо найти движущийся впереди автомобиль и включить режим следования за ним.
Рис. 14. Активация круиз контроля происходит при наличии впереди другого траснпортного средства
С помощью модуля StarLine Сигма 10 посылаем команду ускорения, и автомобиль начинает набирать скорость. К этому моменту мы подключили графический интерфейс для управления модулем StarLine Сигма 10. Теперь мы управляем рулем, ускорением и торможением с помощью кнопок в приложении.
Команды работали до тех пор, пока не потеряли автомобиль впереди. Система круиз-контроля отключилась, а следовательно, и команды ускорения перестали работать.
Мы приступили к исследованию возможности использовать команды без активного круиз-контроля. Пришлось много времени потратить на анализ данных в шине CAN, чтобы понять как создать условия для работы команд. Нас интересовало, в первую очередь, какой блок блокирует выполнение команд ACC на ускорение или замедление. Пришлось изучить какие ID идут от DSU, LKA, радара и камеры, подсовывая липовые данные различных датчиков.
Решение пришло спустя 3 недели. К тому времени мы представляли как происходит взаимодействие блоков автомобиля, провели исследование трафика сообщений и выделили группы сообщений, посылаемых каждым блоком. За работу адаптивного круиз-контроля ACC отвечает блок Driving Support ECU (DSU). DSU выдает команды на ускорение и замедление автомобиля, и именно этот блок получает данные от радара миллиметрового диапазона. Радар сообщает DSU на каком расстоянии от машины движется объект, с какой относительной скоростью и определяет его положение по горизонтали (левее, правее или по центру).
Наша идея заключалась в подмене данных радара. Мы сняли лог следования за автомобилем, вытащили из него данные радара в момент следования. Теперь, после включения круиз-контроля, мы посылаем фейковые данные о наличии впереди идущего авто. Получается обманывать наш автомобиль, говоря что впереди движется другое авто на конкретном расстоянии.
a) б)
Рис. 15. Активация круиза: a) попытка активировать без подмены данных радара; б) активация при подмене данных от радара.
Когда запускаем нашу обманку, на приборной панели загорается значок наличия впереди идущего автомобиля. Теперь мы можем тестировать наше управление. Запускаем команду на ускорение, и автомобиль начинает быстро ускоряться.
Как мы уже узнали, команда на ускорение и замедление одна. Поэтому тут же проверили и замедление. Поехали на на скорости с активным круиз-контролем, запустили команду на торможение, и авто сразу же замедлилось.
В итоге сейчас получается разгонять и замедлять автомобиль именно так, как нам было нужно.
Цель достигнута.
Что еще мы используем
Для создания беспилотника необходимо управление вспомогательными системами: поворотниками, стоп-сигналами, аварийной сигнализацией, клаксоном и пр. Всем этим так же можно управлять по CAN шине.
Оборудование и ПО
Для работ с автомобилем сегодня мы используем набор различного оборудования:
- Анализатор шины Marathon позволяет подключать и читать данные с двух шин одновременно. На сайте производителя анализатора есть бесплатное ПО для анализа логов. Но мы используем ПО, написанное в нашей компании для внутреннего пользования.
- Модуль StarLine Сигма 10 мы используем как платформу для работы с цифровыми интерфейсами. Модуль поддерживает CAN и LIN интерфейсы. При исследовании автомобиля пишем программы на C, зашиваем их в модуль и проверяем работу. Из модуля можем сделать сниффер трафика CAN-шины. Сниффер нам помогает понять, какие ID идут от блока или блокировать сообщения от штатных систем.
- Диагностическое оборудование Toyota/Lexus. С помощью этого оборудования можно найти команды управления системами автомобиля: поворотниками, стоп-сигналами, клаксоном, индикацией приборки.
Сегодня ведется активная работа по разработке беспилотного автомобиля, в ближайших планах реализация экстренного торможения перед препятствиями, их объезда и перестраивание маршрута автомобиля в зависимости от дорожной ситуации и указаний водителя.
Беспилотный автомобиль StarLine — это открытая площадка для объединения лучших инженерных умов России и мира с целью создания прогрессивных технологий беспилотного вождения, которые сделают наше будущее безопасным и комфортным.
GitLab проекта
Краткий обзор протокола CAN. Часть II
Вернуться к статьям По материалам компании Kvaser
Продолжение статьи I части.
Эта статья не претендует на полноту и абсолютную точность сведений, указанных в ней, и предназначена для ознакомления с протоколом CAN.
Содержание статьи
• Шина CAN – Введение.
• Сообщения CAN.
• Физические уровни CAN.
• Разъемы CAN.
• Тактовая синхронизация CAN.
• Обработка ошибок CAN.
Разъемы CAN
Для разъемов CAN стандартов не существует! Обычно, каждый (!) протокол более высокого уровня (Higher Layer Protocol) описывает один или несколько предпочтительных типов разъемов. Основные типы:
• 9–контактный DSUB, предложен CiA;
• 5–контактный Mini–C и/или Micro–C, используется DeviceNet и SDS;
• 6–контактный Deutsch разъем, предложенный CANHUG для транспортных гидравлических систем.
Разъемы CAN
Данное назначение контактов разъема рекомендовано CiA и фактически является промышленным стандартом.
1 | - | Резерв |
2 | CAN_L | Линия шины CAN_L (доминантная низкая) |
3 | CAN_GND | Заземление CAN |
4 | - | Резерв |
5 | (CAN_SHLD) | Опционально: экран CAN |
6 | (GND) | Опционально: заземление CAN |
7 | CAN_H | Линия шины CAN_H (доминантная высокая) |
8 | - | Резерв (линия ошибок) |
9 | CAN_V+ | Опционально: питание |
Для пользователей продукции KVASER: Пожалуйста заметьте, что специфическое употребление этих контактов в кабелях KVASER DRVcan описано в документе LAPcan Hardware Guide, который можно скачать на сайте компании.
Если питание подается, оно должно быть в диапазоне +7..+13 В, 100 мA. Модули оснащены разъемом типа «папа» и должны соединять внутри контакты 3 и 6.
Нумерация контактов действительна для разъема типа «папа„, при взгляде со стороны разъема, или для разъема типа “мама», при взгляде со стороны распайки. – Чтобы запомнить расположение контактов, заметьте, что контакт CAN_LOW имеет МЕНЬШИЙ (LOW) номер, а CAN_HIGH – БОЛЬШИЙ (HIGH).
5-контактный Mini–C
Используется как DeviceNet , так и SDS , и является совместимым для этих двух протоколов.
Контакт | Функция | Цвет DeviceNet |
1 | Экран | Неизолированный |
2 | V+ | Красный |
3 | V- | Черный |
4 | CAN_H | Белый |
5 | CAN_L | Синий |
Модули оснащены разъемами типа «папа». Подаваемое напряжение 24 В ±1%
6-контактный Deutsch DT04-6P
Рекомендован CANHUG для использования в транспортных гидравлических системах
Разъемы на модулях типа «папа», разъемы шины – «мама». На данный момент нет никаких рекомендаций по вопросу подачи питания.
Контакт |
Функция |
Рекомендованный цвет кабеля |
1 | «Минус» питания |
Черный |
2 | CAN_H | Белый |
3 | Опционально: заземление сигнала | Желтый |
4 | Опционально: запуск | Серый |
5 | «Плюс» питания | Красный |
6 | CAN_L | Синий |
Тактовая синхронизация CAN
Схема бита
Каждый бит, передаваемый по шине CAN, разделяется, для нужд тактовой синхронизации, как минимум на 4 части (кванта). Часть логически делится на 4 группы или сегмента:
• сегмент синхронизации
• сегмент воспроизведения
• сегмент фазы 1
• сегмент фазы 2
Схема бита данных шины CAN:
Сегмент синхронизации, который всегда имеет длину в один квант, используется для синхронизации тактовых частот. Ожидается, что край бита появится здесь при смене данных на шине.
Сегмент воспроизведения нужен для компенсации задержки на линиях шины.
Сегменты фазы могут быть сокращены (сегмент фазы 1) или удлинены (сегмент фазы 2), если это потребуется для сохранения синхронизованности тактовых частот.
Уровни шины замеряются на границе между сегментом фазы 1 и сегментом фазы 2.
Большинство контроллеров CAN также обеспечивают возможность трехкратного замера на протяжении одного бита. В таком случае, замер происходит на границах двух квантов, предшествующих точке замера и результат зависит от мажоритарного декодирования (это верно как минимум в случае 82527).
Тактовая синхронизация
Для того, чтобы регулировать встроенный в чип генератор тактовых частот шины, контроллер CAN может сократить или удлинить бит на целое число квантов. Максимальное количество таких временных поправок бита определяется параметром «ширина скачка синхронизации» (Synchronization Jump Width, SJW).
Жесткая синхронизация происходит при переходе стартового бита от рецессивного к доминантному. Отсчет времени прохождения бита начинается заново с этой границы.
Повторная синхронизация происходит когда край бита не попадает в сегмент синхронизации сообщения. Один из сегментов фазы укорачивается или удлиняется на некоторое количество квантов, зависящее от ошибки фазы сигнала; максимальное количество используемых квантов определяется параметром «ширина скачка синхронизации» (Synchronization Jump Width, SJW).
Вычисление регистра тактовой синхронизации
Большинство контроллеров CAN позволяют программисту осуществлять настройку тактовой синхронизации используя следующие параметры:
• Значение предварительного делителя тактовой частоты
• Количество квантов перед точкой замера
• Количество квантов после точки замера
• Количество квантов в «ширина скачка синхронизации» (Synchronization Jump Width, SJW)
Обычно для этих целей выделяется два регистра: btr0 и btr1. Однако они могут слегка различаться у разных контроллеров, поэтому внимательно читайте инструкцию.
В контроллерах 82c200 и SJA1000, производства NXP (ранее Philips), раскладка регистра выглядит приблизительно так:
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
btr0 | SJW1 | SJW0 | BRP5 | BRP4 | BRP3 | BRP2 | BRP1 | BRP0 |
btr1 | SAM | TSEG22 | TSEG21 | TSEG20 | TSEG13 | TSEG12 | TSEG11 |
TSEG10 |
• BRP0..BRP5 устанавливают значение предварительного делителя тактовой частоты
• SJW0..SJW1 устанавливают длину SJW
• TSEG10..TSEG13 устанавливают количество квантов перед точкой замера (стартовый бит не включен)
• TSEG20..TSEG22 устанавливают количество квантов после точки замера
• SAM при установке значения 1 производится три замера, при установке значения 0 – один замер
Примечание: реальные значения этих параметров несколько отличаются от значений, вписанных в регистр.
Пример: если сигнал генератора, подаваемый на SJA1000, имеет частоту 16 МГц, и мы желаем получить скорость передачи 250 кбит/с, с точкой замера в районе 62% всего бита, и SJW равным 2 квантам, мы можем установить –
BRP = 4, что дает продолжительность кванта 2 × 4 / 16000000 с = 500 нс, и
TSEG1 = 5, что дает 5 квантов перед точкой замера, и
TSEG2 = 3, что дает 3 кванта после точки замера.
Каждый бит будет содержать 5 + 3 = 8 квантов, что даст нам желаемую скорость передачи 1 / (8 × 500 нс) = 250 кбит/с. Значения регистра должны быть следующими:
btr0= |
(SJW – 1) * 64 + (BRP -1) = (2-1)*64 + (4-1) = 67 = 0×43 |
btr1= |
SAM * 128 + (TSEG2 – 1)* 16 + (TSEG1 – 1) = 0×128 + (3-1)*16 + (4-1) = («4» потому, что стартовый бит не включен) 35 = 0×23 |
Точка замера в районе 5/8 = 62.5% бита.
Обработка ошибок CAN
Как CAN обрабатывает ошибки
Обработка ошибок встроена в протокол CAN и очень важна для производительности системы CAN. Обработка ошибок нацелена на обнаружение ошибок в сообщениях, передающихся по шине CAN, чтобы передатчик мог повторно выслать неверно принятое сообщение. Каждый CAN–контроллер на шине будет пытаться обнаружить ошибку в сообщении. Если ошибка найдётся, обнаруживший её узел будет передавать флаг ошибки, таким образом разрушая трафик шины. Другие узлы обнаружат ошибку, вызванную флагом ошибки (если еще не обнаружили оригинальную ошибку) и предпримут соответствующие действия, т.е. отбракуют текущее сообщение.
Каждый узел обслуживается двумя счетчиками ошибок: счетчиком ошибок передачи (Transmit Error Counter) и счетчиком ошибок приёма (Receive Error Counter). Существуют правила, регламентирующие повышение и/или понижение значения этих счетчиков. По существу, передатчик определяет повышение числа сбоев в счетчике ошибок передачи быстрее, нежели слушающие узлы увеличат значения своих счетчиков ошибок передачи. Это потому, что есть немалая вероятность, что сбой именно в передатчике! Когда значение любого счетчика ошибок превышает определенную величину, узел сначала становится Error Passive – это значит, что он не будет активно разрушать трафик шины при обнаружении ошибки; а затем Bus Off – это значит, что узел вообще не будет принимать участия в передаче данных по шине.
При помощи счетчиков ошибок узел CAN может не только обнаруживать сбои, но и ограничивать ошибки.
Механизмы обнаружения ошибок
Протокол CAN описывает не менее пяти различных способов обнаружения ошибок. Два из них работают на уровне бита, а остальные три – на уровне сообщения.
1.Мониторинг битов (Bit Monitoring).
2.Вставка битов (Bit Stuffing).
3.Проверка кадра (Frame Check).
4.Проверка распознавания (Acknowledgement Check).
5.Проверка циклической избыточности (Cyclic Redundancy Check).
Мониторинг бита
Каждый передатчик шины CAN осуществляет мониторинг (т.е. повторное прочтение) переданного уровня сигнала. Если уровень прочитанного бита отличается от уровня переданного, подае
Основы сети: Понимание протоколов – манекены
- Программирование
- Сеть
- Основы сети: Понимание протоколов
Протоколы и стандарты – это то, что заставляет сети работать вместе. Протоколы позволяют различным компонентам сети взаимодействовать друг с другом. Стандарты также позволяют сетевым компонентам, производимым различными компаниями, работать вместе.
Протокол – это набор правил, которые обеспечивают эффективную связь.Вы сталкиваетесь с протоколами каждый день.
Например, когда вы оплачиваете продукты с помощью дебетовой карты, продавец сначала сообщает вам, сколько стоят продукты. Затем вы проводите свою дебетовую карту в кард-ридере, вводите свой защитный код, указываете, хотите ли вы вернуть деньги, вводите сумму возврата, если вы это указали, а затем проверяете общую сумму. Если сумма утверждена, аппарат распечатает квитанцию.
Обмены, такие как использование дебетовых карт, следуют тем же правилам каждый раз, когда они происходят.
Компьютерные сети зависят от множества различных типов жестко определенных протоколов для работы. Сетевые карты должны знать, как общаться с другими сетевыми картами для обмена информацией, операционные системы должны знать, как общаться с сетевыми картами для отправки и получения данных в сети, а прикладные программы должны знать, как общаться с операционными системами в Чтобы узнать, как получить файл с сетевого сервера.
Протоколыбывают разных типов. На самом низком уровне протоколы точно определяют, какой тип электрического сигнала представляет единицу, а какой тип сигнала представляет ноль.На самом высоком уровне протоколы позволяют пользователю компьютера в Соединенных Штатах отправлять электронную почту другому пользователю компьютера в Новой Зеландии.
Различные протоколы, как правило, используются вместе в соответствующих наборах, называемых наборами протоколов . Двумя наиболее популярными наборами протоколов для сетей являются TCP / IP и Ethernet. TCP / IP был изначально разработан для сетей Unix и является протоколом Интернета и большинства локальных сетей. Ethernet – это протокол низкого уровня, в котором изложены электрические характеристики сетевого оборудования, используемого большинством локальных сетей.
Третий важный протокол – это IPX / SPX, , который является альтернативой TCP / IP, который был первоначально разработан для сетей NetWare. В первые дни работы в сети IPX / SPX широко использовался в локальных сетях, но TCP / IP сейчас является предпочтительным протоколом.
,Создание протокола связи для всей компании
- Бизнес
- Работа с персоналом
- Вовлеченность сотрудников
- Создание протокола связи для всей компании
Боб Келлехер
Большинство, если не все, менеджеры говорят, что они должны открыто и часто общаться со своими сотрудниками, но часто они этого не делают. Видите ли, для многих менеджеров общение относится к категории «должен делать», а не «должен делать».И когда мы заняты, «должен делать», козыри «должны делать» каждый раз.
Вот где вступает в действие протокол связи. Протокол связи – это формальный процесс, в котором описываются типы информации, которая должна быть передана в организацию, а также определяются лица, ответственные за передачу конкретных тем. Протокол также обрисовывает в общих чертах аудиторию, частоту и предлагаемые средства связи.
Коммуникационный протокол, который должен отображаться во всех общих зонах, таких как вестибюли и конференц-залы, и распространяться среди всех новых сотрудников, обеспечивает соответствие коммуникаций основным стратегическим приоритетам компании, независимо от того, связаны ли они с взаимодействием или какой-либо другой инициативой.Важно отметить, что протокол представляет собой набор обязательств компании перед сотрудниками. К ним относятся следующие:
Лидеры будут нести ответственность за выполнение своих обязанностей по общению, и будут оцениваться на эффективность и своевременность их общения.
Сотрудники будут получать регулярные обновления о прогрессе, инициативах и изменениях, которые их затрагивают.
Самое важное с точки зрения взаимодействия, каждый этап коммуникаций предоставляет сотрудникам возможность задавать вопросы, предлагать идеи, а также давать или получать отзывы.
В свою очередь ожидания сотрудников очевидны. Все сотрудники несут ответственность за обмен информацией и предоставление обратной связи, чтобы помочь компании достичь своих целей, тем самым усиливая стремление сотрудников к общению и поддерживая взаимную приверженность, разделяемую работодателем и работником.
Есть несколько преимуществ для реализации протокола связи. Протокол связи делает все следующее:
Определяет коммуникационные ожидания как для сотрудников, так и для руководителей.
Обеспечивает последовательность в сообщении миссии, видения, ценностей и стратегии фирмы.
Создает согласование с сотрудниками на всех уровнях.
Строит в круговой связи. Круговое общение включает в себя общение между людьми в традиционной иерархии, такими как начальник и подчиненный, а также общение между бизнес-единицами и отделами и общение, в котором задействованы целевые группы и фокус-группы.В здоровой культуре кругового общения вы также включаете 360 оценок обратной связи, отзывы клиентов и обратную связь в матричные отношения.
Обеспечивает совместную ответственность сверху донизу.
Помогает гарантировать, что сообщения передаются 13 раз, а это, по мнению некоторых экспертов, сотруднику необходимо услышать что-то, чтобы это воспринять.
Помогает использовать различные коммуникационные площадки и инструменты – например, встречи в мэрии, электронную почту, видеоблоги (видеоблоги), встречи в департаментах и т. Д.(Вы можете узнать больше об этих местах и инструментах позже в этой главе.)
Помогает связать все уровни вашей организации с вашим брендом.
Чтобы построить протокол связи, вам нужна группа руководителей в поперечном сечении (желательно с «топ-догом») вместе с группой ключевых факторов влияния, или соединителей. Первое, что должна сделать эта команда, это собрать проект протокола связи. (Это займет группу от двух до восьми часов.) На этом рисунке показан шаблон для команд на этом этапе, чтобы помочь им в их усилиях.
При составлении протокола команда должна учитывать следующее:
Как мы можем построить обмен метриками, которые являются ключевыми для нашего стратегического плана (например, рост, прибыль, вовлеченность сотрудников, обслуживание клиентов, качество и т. Д.)?
Как мы можем гарантировать, что персоналу предоставляется возможность общаться?
Как мы можем создать избыточность в обмене сообщениями между уровнями?
Когда черновик готов, его следует отправить тем, кто сообщает через генерального директора (и, возможно, также и свои прямые отчеты), чтобы получить дополнительную информацию.Этот ключевой шаг также поможет вам получить бай-ин. Как только входные данные получены и присвоены, протокол может быть завершен (см. Рисунок).
С готовым протоколом в руках, следующим шагом команды будет разработка плана развертывания протокола. Это развертывание должно включать значительную фанфару, чтобы вызвать волнение.
Запуск протокола связи – это отличная новость, и сотрудники будут воспринимать его, как, по словам Марты Стюарт, «хорошая вещь». При этом вы, скорее всего, встретите сопротивление со стороны среднего звена, который, скорее всего, будет рассматривать протокол как «еще одну вещь, которая требует времени.
Чтобы преодолеть это препятствие, расскажите им о преимуществах протокола, а также о том, как быть вовлеченным участником протокола. Со временем они увидят, что административные усилия, связанные с поддержанием надежного протокола связи, будут компенсированы выигрышем в согласованности и вовлеченности своих сотрудников.
Об авторе книги
Боб Келлехер является основателем The Employee Engagement Group, глобальной консалтинговой фирмы, которая работает с руководящими группами для реализации лучших в своем классе программ лидерства и вовлечения сотрудников.Он является автором «Громче слов», и «Творчество», , а также мыслительным лидером, основным докладчиком и консультантом.
,TCP / IP для чайников Шпаргалка
Из TCP / IP для чайников, 6-е издание
Кэндис Лейден, Маршалл Виленский
Как сетевой администратор, вы знаете, что TCP / IP является связующим звеном, объединяющим Интернет и Интернет. Помимо того, что вы знакомы с терминами безопасности и общими определениями, вам необходимо обратить внимание на RFC (запросы на комментарии), опубликованные Internet Engineering Task Force. Вы можете комментировать, учиться и представлять RFC самостоятельно.
Определения TCP / IP
Важно знать, как работать с TCP / IP, если вы хотите успешно управлять сетью. Определения в следующем списке объясняют основы, такие как IP-адрес, а также разъясняют различные сети, с которыми вы имеете дело – экстрасети, интрасети и подсети, а также другие ключевые термины.
CIDR (бесклассовая междоменная маршрутизация): Способ экономии на IP-адресах. Конструкция IP-адресации, которая заменяет традиционную структуру классов A, B, C, CIDR позволяет одному IP-адресу представлять множество IP-адресов.Адрес CIDR выглядит как обычный IP-адрес с «суффиксом» на конце, например 192.200.0.0/12. Суффикс представляет собой IP-префикс .
extranet: Частная / общедоступная гибридная сеть, использующая TCP / IP для совместного использования части интрасети с внешней организацией. Экстранет – это часть внутренней сети, доступ к которой через Интернет могут получить посторонние. Обязательно соблюдайте правила безопасности, если у вас есть экстрасеть.
Интранет: Частная сеть организации.Если ваша интрасеть построена на протоколах, приложениях и сервисах TCP / IP, это также Интернет.
IP-адрес: 32-разрядный (IPv4) или 128-разрядный (IPv6) цифровой адрес для компьютера. У вас должен быть IP-адрес для подключения к Интернету. IP-адрес состоит из двух частей: части сети и части хоста. Пример IPv4: 127.0.0.1; пример IPv6: 0: 0: 0: 0: 0: 0: 0: 1 (для краткости :: 1).
Адрес петли : IP-адрес для вас – на самом деле, для вашего компьютера.Обратная петля – это специальный IP-адрес (127.0.0.1), который физически не связан ни с одним сетевым оборудованием. Вы используете его для тестирования служб и приложений TCP / IP, не беспокоясь о проблемах с оборудованием.
Трансляция сетевых адресов (NAT): Помогает Интернету не исчерпать IP-адреса путем преобразования IP-адреса (возможно, не уникального) в одной сети в другой IP-адрес в другой сети – обычно это Интернет. IPv6 устраняет необходимость в помощи адреса NAT, но непреднамеренно NAT также обеспечивает безопасность брандмауэра.
подсетей: Разделение одного большого Интернета на более мелкие сети (подсети), в которых все они используют одну и ту же сетевую часть IP-адреса.
TCP / IP (Протокол управления передачей / Интернет-протокол): Хитрости и правила Интернета и Всемирной паутины. Набор протоколов, сервисов и приложений для связи компьютеров всех видов.
Виртуальная частная сеть (VPN): Частная сеть, работающая через общедоступный Интернет.Вы можете создать VPN по низкой цене, используя Интернет (а не собственную систему частных и дорогих линий) со специальными проверками безопасности и протоколом туннелирования. Компании начинают использовать частную виртуальную сеть как для экстрасетей, так и для глобальных интрасетей.
Протокол передачи голоса через Интернет (VoIP): Вы слишком много тратите на телефонные звонки? Избавьтесь от своего телефонного обслуживания. Вы можете совершать телефонные звонки из любой точки мира, где есть компьютер, бесплатное программное обеспечение VoIP и быстрое подключение к Интернету.Еще лучше, это бесплатно. Вы можете позвонить из Буэнос-Айреса в Найроби бесплатно с VoIP. Это не обязательно должен быть компьютер к компьютеру. Вы также можете использовать VoIP для вызова обычного телефонного номера.
У вас есть акроним? Если вы не знаете, что означает конкретная аббревиатура, посетите раздел Что такое? где вы можете найти тысячи определений аббревиатур Интернета и безопасности.
Термины и советы по безопасности в Интернете для использования с TCP / IP
Вы являетесь сетевым администратором, поэтому вы знаете, что обеспечение безопасности вашего веб-сайта является постоянной проблемой.Вам не нужно знать, что TCP / IP означает Протокол управления передачей / Интернет-протокол для его эффективного использования, но знание условий в следующем списке поможет вам лучше справляться с проблемами безопасности.
Advanced Encryption Standard : Шифр с секретным ключом, используемый для шифрования.
Аутентификация : Доказательство того, кто вы говорите. Самая простая форма аутентификации – незашифрованный запрос имени пользователя и пароля («Кто ты?» «Джеймс Бонд.«Хорошо, я вам верю»), часто не достаточно надежно для Интернета. В Интернете, где хакеры и взломщики могут подделать или украсть больше, чем ваше имя пользователя и пароль, не доверяйте никому. Требовать аутентификацию пользователей, компьютеров и IP-адресов для обеспечения безопасности.
, шифр : средство, используемое для шифрования данных. Шифр преобразует обычный текст в зашифрованный зашифрованный текст. Вы не можете расшифровать закодированный зашифрованный текст обратно в обычный текст, не используя какой-либо ключ. Например, AES и DES являются примерами блочных шифров с секретным ключом.Полный алгоритм шифрования – это шифр плюс техника.
Ресурсный центр по компьютерной безопасности : Веб-сайт, на котором публикуются публикации, предупреждения и новости по безопасности, включая документы Министерства обороны США об архитектуре безопасности и надежных системах. Расположен в Национальном институте стандартов и технологий США. Центр обмена информацией по компьютерной безопасности.
Цифровой сертификат : Специальный безопасный файл, который гарантирует вашу личность в Интернете.Цифровой сертификат содержит информацию о безопасности, включая ваше имя и адрес электронной почты, ваш ключ шифрования, название центра сертификации и срок действия сертификата. («Кто вы?» «Джеймс Бонд». «Вы можете подтвердить свое удостоверение личности?»). Цифровой сертификат – это популярный способ проверки подлинности в Интернете.
шифрование : Скремблирование ваших данных с применением секретного кода, чтобы никто не мог прочитать их без использования ключа.
IP Security (IPSec): Набор протоколов TCP / IP, которые предоставляют услуги аутентификации и шифрования, но на более низком уровне, чем TLS.
открытый ключ / закрытый ключ: Схема шифрования обмена ключами, которая использует два ключа для шифрования и дешифрования данных. Любой может использовать открытый ключ для шифрования данных, прежде чем они попадут в Интернет. Только у получателя есть закрытый ключ, необходимый для чтения данных. Pretty Good Privacy (PGP) использует методы шифрования с открытым ключом / закрытым ключом.
Безопасность транспортного уровня (TLS), Secure Socket Layer (SSL): протоколов TCP / IP, которые гарантируют конфиденциальность в сети, обеспечивая аутентификацию и шифрование.TLS и его нестандартный сопутствующий протокол SSL обеспечивают безопасность данных вашей кредитной карты, когда вы совершаете покупки или совершаете покупки. TLS является более новым и стандартным. SSL все еще используется больше.
Известные запросы на комментарии, представляющие интерес для пользователей TCP / IP
Как сетевой администратор, вы знакомы с некоторыми вещами – TCP / IP, угрозами безопасности и запросами на комментарии или RFC. Публикуемые Инженерной рабочей группой по Интернету, RFC дают возможность профессионалам обмениваться информацией, представлять документы для рецензирования и в целом общаться между собой.Некоторые RFC в конечном итоге становятся стандартами Интернета.
Следующий список содержит RFC, которые особенно интересны и / или полезны:
RFC 3271, «Интернет для всех», В. Серф
RFC 2664, «К вашему сведению: вопросы и ответы – ответы на часто задаваемые вопросы новых пользователей Интернета», Р. Плзак, А. Уэллс, Э. Крол
RFC 2151, «Учебник по Интернету и инструментам и утилитам TCP / IP», Г. Кесслер, С.Шепард
RFC 2504, «Руководство по безопасности пользователей», Э. Гутман, Л. Леонг, Г. Малкин
RFC 1244, «Руководство по безопасности сайта» (все еще полезно через много лет), Дж. П. Холбрук, Дж. К. Рейнольдс
RFC 5485, «Цифровые подписи в интернет-проектах документов»
Для смеха отсканируйте эти RFC Дня Первоапрельского Дня:
RFC 3251, «Электричество по IP», Б. Раджагопалан
RFC 1925, «Двенадцать сетевых истин», R.Callon, редактор
RFC 2100, «Называние хозяев» (люблю поэзию!), Дж. Эшворт
RFC 2549, «IP через птичьих перевозчиков с качеством обслуживания», Д. Вайтцман
Об авторе книги
Candace Leiden консультирует по вопросам производительности систем и баз данных, а также учебного дизайна для международных учебных программ.Маршалл Виленский был консультантом и сетевым менеджером многопротокольных сетей в Высшей школе делового администрирования Гарвардского университета.Оба являются всемирно известными спикерами.
Основы сетевого протокола IS-IS – манекены
- Программирование
- Работа в сети
- Juniper
- Основы сетевого протокола IS-IS
Вальтер Дж. Горальски, Кэти Гадеки, Майкл Бушонг
IS-IS – это протокол внутренней маршрутизации межсетевого интерфейса. Как и OSPF, IS-IS запускает алгоритм Dijkstra по кратчайшему пути в первую очередь (SPF) для создания базы данных топологии сети и, исходя из этой базы данных, для определения наилучшего (то есть кратчайшего) пути к месту назначения.
В отличие от OSPF, который был разработан и стандартизован Инженерной рабочей группой по Интернету (IETF), IS-IS является протоколом ANSI ISO и первоначально был основан на сетевой технологии DECNET Phase V Network Technology Corporation.
IS-IS использует немного другую терминологию, чем OSPF для именования своих протокольных пакетов. Пакеты, которые маршрутизаторы IS-IS отправляют друг другу с описанием топологии сети, называются блоками данных протокола состояния канала (PDU состояния канала или LSP).В дополнение к описанию топологии сети, о которой знает маршрутизатор, PDU состояния канала включают в себя IP-маршруты, контрольные суммы и другую информацию.
Подобно OSPF, все маршрутизаторы IS-IS помещают информацию в принятых PDU с указанием канала связи в свою базу данных состояния канала, и все маршрутизаторы имеют одинаковое представление о топологии сети. IS-IS запускает алгоритм SPF для информации в базе данных состояний каналов, чтобы определить кратчайший путь к каждому пункту назначения в сети, помещая пары пункт назначения / следующий переход, полученные в результате вычисления SPF, в базу данных маршрутизации IS-IS.
В отличие от других протоколов IP-маршрутизации, которые обычно работают на TCP, UDP или IP, которые являются протоколами OSI уровня 3 или уровня 4, IS-IS работает непосредственно на канальном уровне (уровень 2).
В результате интерфейсу, на котором работает IS-IS, не требуется IP-адрес для обмена информацией IS-IS, и вам не нужно настраивать семейство inet на интерфейсах, работающих на IS-IS. Вместо этого только маршрутизатор нуждается в IP-адресе, что упрощает настройку маршрутизатора (но не обязательно улучшает).
Поскольку он был разработан как часть сетевых протоколов OSI, а не как часть TCP / IP, IS-IS не использует IP-адреса.Адреса IS-IS называются NET или названиями сетевых объектов. Несмотря на то, что IP-адреса имеют длину 32 бита и обычно записываются в четырехточечной нотации (например, 192.168.1.2), NET может иметь длину от 8 до 20 байтов, но обычно имеет длину 10 байтов и записывается, как показано в этом примере:
49,0001,19,6800,1002,00
Адрес IS-IS состоит из трех частей:
Идентификатор области: Первые три байта являются идентификатором области. Первый байт этого примера – 49 – это идентификатор семейства адресов (AFI) органа, который эквивалентен пространству IP-адресов, которое назначено автономной системе.Значение 49 AFI – это то, что IS-IS использует для частной адресации, что эквивалентно адресному пространству RFC 1918 для протоколов IP.
Вторые два байта идентификатора зоны – 0001 – представляют номер зоны IS-IS. В этом примере номер области равен 1.
Системный идентификатор: Следующие шесть байтов идентифицируют узел (то есть маршрутизатор) в сети. Системный идентификатор эквивалентен части хоста или адреса на IP-адресе.
Несмотря на то, что вы можете выбрать любое значение для системного идентификатора, обычно используется метод десятичного двоичного кода (BCD), который включает в себя получение IP-адреса маршрутизатора (адрес, который вы присвоили интерфейсу обратной связи lo0), заполняя все ведущие нулями, а затем переставить десятичные точки, чтобы сформировать три двухбайтовых числа.
В этом примере, если вы дополнили IP-адрес 192.168.1.2 нулями, результат будет 192.168.001.002. Перестановка десятичных знаков дает вам 1921.6800.1002.
Другой распространенный способ присвоения системного идентификатора – начать с адреса управления доступом к среде (MAC) маршрутизатора, который является шестибайтовым адресом, и переставить десятичные точки для создания трех двухбайтовых чисел. Так, например, для MAC-адреса маршрутизатора 00: 1B: 63: 31: 86: BE системный идентификатор IS-IS равен 001b.6331.86be.
Селектор NET: Последние два байта являются селектором NET (NSEL). Для IS-IS они всегда должны быть 00, чтобы указать «эту систему».
Об авторе книги
Вальтер Горальски – старший штатный инженер и технический писатель Juniper Networks. Он работал в области сетевых технологий более 40 лет.Кэти Гадеки является соавтором первого издания Junos For Dummies .
Майкл Бушонг – старший директор по стратегии продукта в Juniper Networks, занимающийся разработкой стратегии программного обеспечения Junos.
,