|
Интерфейс CAN, Принципы обмена по протоколу CAN |
|
|
|
Mar 24 2006, 11:10
|
Группа: Новичок
Сообщений: 2
Регистрация: 21-03-06
Пользователь №: 15 438

|
Здравствуйте уважаемые разработчики!
Прочитал много информации по данной теме: -http://www.microchip.ru/files/d-sheets-rus/an713.pdf -http://www.gaw.ru/html.cgi/txt/interface/can/start.htm -Спецификации CAN 2.0 A и CAN 2.0 B -Документация на AT90CAN128 -http://electronix.ru/forum/index.php?showtopic=12898&hl=CAN -и др. Но к сожалению так и не смог понять логику работы интерфейса! Как например, раздать идентификаторы устройствам (приоритеты данных от этих устройств одинаковые)? Как передать данные конкретному устройству (нужен ли для этого remote frame, и если да, то какой идентификатор передается в этом фрейме)?
Расчитываю на Ваш совет! Спасибо.
|
|
|
|
|
Mar 24 2006, 15:00
|

Странник
   
Группа: Свой
Сообщений: 766
Регистрация: 29-08-05
Из: Екатеринбург
Пользователь №: 8 051

|
Цитата(denwill @ Mar 24 2006, 16:10)  Как например, раздать идентификаторы устройствам (приоритеты данных от этих устройств одинаковые)? Читай доки на протоколы высокого уровня, там все в картинках. Пример на пальцах: В общем виде - все могут передавать всем - узел может иметь несколько CANID Узел 1 -- номер 2: BIN:0010 Узел 2 -- номер 6: BIN:0110 Узел 3 -- номер 7: BIN:0111 Разделим CANID(11бит) на 3 секции : - Команда, номер данных или т.п. 5 бит - Адрес назначения 4 бита - Адрес источника 4 бита CANID при передаче команды 0x00110 от первого узла второму примет вид Код 00110/0110/0010 CANID при передаче команды 0x00110 от второго узла первому примет вид Код 00110/0010/0110 У каждого узла необходимо настроить фильтр, какие биты CANID всех принимаемых кадров с чем сравнивать. Код 00000/1111/0000 Биты (адрес назначения) Код 00000/0010/0000 С чем(узел 1) Будут приняты пакеты от всех блоков, предназначенных первому. Если есть несколько фильтров то можно сделать фильтры на команды: Команда 00110 от всех блоков Код 11111/1111/0000 00110/0010/0000 Команда 01010 от всех блоков Код 11111/1111/0000 01010/0010/0000 Все остальные Код 00000/1111/0000 00000/0010/0000
--------------------
"Как много есть на свете вещей, которые мне не нужны!" Сократ
|
|
|
|
|
Apr 7 2006, 09:21
|
Участник

Группа: Свой
Сообщений: 26
Регистрация: 21-12-05
Пользователь №: 12 486

|
Только начал разбираться с CAN-интерфейсом, что-т не догоняю: обязательно ли использование трансиверов? Или возможно подключение без них?
|
|
|
|
|
Apr 7 2006, 11:03
|
Участник

Группа: Свой
Сообщений: 26
Регистрация: 21-12-05
Пользователь №: 12 486

|
Так насколько я понял, физический уровень не оговорен, т.е. почему бы уровням линии не совпадать с уровнями контроллера?
|
|
|
|
|
Apr 7 2006, 11:10
|

Знающий
   
Группа: Свой
Сообщений: 553
Регистрация: 30-03-05
Из: Санкт Петербург
Пользователь №: 3 793

|
Цитата(shans @ Apr 7 2006, 15:03)  Так насколько я понял, физический уровень не оговорен, т.е. почему бы уровням линии не совпадать с уровнями контроллера? Если в системах на базе RS-232 это может и прокатит но вот в RS-485 и CAN(который использует похожую физическую линию) нет.Во первых потому что это шинные интерфейсы(т.е подразумевается что устройств будет больше двух) а главное то что в обычно используемой физической линии CAN нет состояний 0/1 а есть доминантное и рецесивное. Если кратко то эти состояния неравноценны(как 0 и 1) и когда одно устройство выставляет рецесивное состояние другое устройство может задавить его доминантным чем и достигается контроль передачи и неразрушающий арбитраж.Вот эта фича и обеспечивается драйвером. Как это делается в других физических линиях(оптика и блютуз) мало понятно но скорее всего идет эмуляция привычной CANу физической линии.
|
|
|
|
|
Apr 7 2006, 11:40
|
Участник

Группа: Свой
Сообщений: 26
Регистрация: 21-12-05
Пользователь №: 12 486

|
Цитата(ipc @ Apr 7 2006, 15:10)  Цитата(shans @ Apr 7 2006, 15:03)  Так насколько я понял, физический уровень не оговорен, т.е. почему бы уровням линии не совпадать с уровнями контроллера?
Если в системах на базе RS-232 это может и прокатит но вот в RS-485 и CAN(который использует похожую физическую линию) нет.Во первых потому что это шинные интерфейсы(т.е подразумевается что устройств будет больше двух) а главное то что в обычно используемой физической линии CAN нет состояний 0/1 а есть доминантное и рецесивное. Если кратко то эти состояния неравноценны(как 0 и 1) и когда одно устройство выставляет рецесивное состояние другое устройство может задавить его доминантным чем и достигается контроль передачи и неразрушающий арбитраж.Вот эта фича и обеспечивается драйвером. Как это делается в других физических линиях(оптика и блютуз) мало понятно но скорее всего идет эмуляция привычной CANу физической линии. Ну а если объединить по монтажному "И"? Вполне получаем доминантный и рецессивный уровень. А стоимость реализации значительно ниже. Понятно, что с уровнями под стандарт ISO 11898 не попадаем, но это уже другой вопрос. Извиняюсь, если задаю бестолковые вопросы  , просто хочу уяснить преимущества решения с использованием трансиверов.
|
|
|
|
|
Apr 7 2006, 11:50
|

Знающий
   
Группа: Свой
Сообщений: 553
Регистрация: 30-03-05
Из: Санкт Петербург
Пользователь №: 3 793

|
Цитата(shans @ Apr 7 2006, 15:40)  Цитата(ipc @ Apr 7 2006, 15:10)  Цитата(shans @ Apr 7 2006, 15:03)  Так насколько я понял, физический уровень не оговорен, т.е. почему бы уровням линии не совпадать с уровнями контроллера?
Если в системах на базе RS-232 это может и прокатит но вот в RS-485 и CAN(который использует похожую физическую линию) нет.Во первых потому что это шинные интерфейсы(т.е подразумевается что устройств будет больше двух) а главное то что в обычно используемой физической линии CAN нет состояний 0/1 а есть доминантное и рецесивное. Если кратко то эти состояния неравноценны(как 0 и 1) и когда одно устройство выставляет рецесивное состояние другое устройство может задавить его доминантным чем и достигается контроль передачи и неразрушающий арбитраж.Вот эта фича и обеспечивается драйвером. Как это делается в других физических линиях(оптика и блютуз) мало понятно но скорее всего идет эмуляция привычной CANу физической линии. Ну а если объединить по монтажному "И"? Вполне получаем доминантный и рецессивный уровень. А стоимость реализации значительно ниже. Понятно, что с уровнями под стандарт ISO 11898 не попадаем, но это уже другой вопрос. Извиняюсь, если задаю бестолковые вопросы  , просто хочу уяснить преимущества решения с использованием трансиверов. Ну так уж и дешевле.Эти драйверы стоят копейки а вот тянуть на километр такую линию(в моем случае трех вольтовую) будет очень забавно.думаю что фронты завалятся в корягу метра через два.Драйвер кроме всего прочего защищает процессор от помех и буферизирует сигналы да и то каждый имеет ограниченную нагрузочную способность(количество узлов в сети).Кроме того сигнал на выходе парафазный и заточен под длинные линии и эффекты связанные с задержками и переотражениями в сети.
|
|
|
|
|
Apr 7 2006, 11:56
|

Странник
   
Группа: Свой
Сообщений: 766
Регистрация: 29-08-05
Из: Екатеринбург
Пользователь №: 8 051

|
Цитата(shans @ Apr 7 2006, 17:03)  Так насколько я понял, физический уровень не оговорен, т.е. почему бы уровням линии не совпадать с уровнями контроллера? Шина параллельная, поэтому понадобятся как минимум открытые коллекторы(или диоды) в цепях выходов(TX), есть где-то в апликухах подобные примеры. НО! - Скорость под вопросом... - Защиты от помех на линии выводов RX/TX под вопросом...
--------------------
"Как много есть на свете вещей, которые мне не нужны!" Сократ
|
|
|
|
|
Apr 7 2006, 12:06
|

Знающий
   
Группа: Свой
Сообщений: 553
Регистрация: 30-03-05
Из: Санкт Петербург
Пользователь №: 3 793

|
Цитата(=AK= @ Apr 7 2006, 15:58)  Цитата(ipc @ Apr 7 2006, 21:20)  думаю что фронты завалятся в корягу метра через два.
LIN работает при помощи открытых коллекторов, т.е. по монтажному ИЛИ. При 20 кбод на 40 м работает. Далласовский 1-wire тоже использует открытые коллекторы. Даллас пишет - то 700 м. Ну 20 кбод это несерьезно.CAN вобщем довольно быстрый интерфейс и использовать его меньше чем на 125Кбод кощунство.Я например вобще использую 500Кбод.
|
|
|
|
|
Apr 7 2006, 12:07
|

Странник
   
Группа: Свой
Сообщений: 766
Регистрация: 29-08-05
Из: Екатеринбург
Пользователь №: 8 051

|
Цитата(=AK= @ Apr 7 2006, 17:58)  Цитата(ipc @ Apr 7 2006, 21:20)  думаю что фронты завалятся в корягу метра через два. LIN работает при помощи открытых коллекторов, т.е. по монтажному ИЛИ. При 20 кбод на 40 м работает. CAN на 40 метрах может работать в полный рост - 1Мбод при родном драйвере, это в _50_ раз быстрее...
--------------------
"Как много есть на свете вещей, которые мне не нужны!" Сократ
|
|
|
|
|
Apr 7 2006, 12:18
|

Знающий
   
Группа: Свой
Сообщений: 553
Регистрация: 30-03-05
Из: Санкт Петербург
Пользователь №: 3 793

|
Цитата(spf @ Apr 7 2006, 16:07)  Цитата(=AK= @ Apr 7 2006, 17:58)  Цитата(ipc @ Apr 7 2006, 21:20)  думаю что фронты завалятся в корягу метра через два. LIN работает при помощи открытых коллекторов, т.е. по монтажному ИЛИ. При 20 кбод на 40 м работает. CAN на 40 метрах может работать в полный рост - 1Мбод при родном драйвере, это в _50_ раз быстрее... Кстати где то читал что есть драйверы позволяющие тянуть CAN более чем на километр(если незапамятовал то до пяти) и работать на скорости более мегабита правда при уж совсем децких расстояниях. Цитата(shans @ Apr 7 2006, 16:12)  Ну не такие уж копейки, а на километр мне тянуть не нужно, всего несколько метров. Собственно я сам за использование драйверов, дабы не создавать себе же лишние проблемы. Однако, как водится, на любой дополнительный корпус смотрят косо, и его использование нужно мотивировать  Ну тогда неправильно выбран интерфейс.CAN это полевая шина(название говорит само за себя) и предназначен для распределения девайсов в пространстве.Тут подошел бы ethеrnet(благо он сильно подешевел и в виде XPortа нетребует вобще никакой разработки) или вобще чтонибудь децкое типа SPI,I2c или нахудой конец проверенный веками RS-485.
|
|
|
|
|
Apr 7 2006, 12:23
|

pontificator
     
Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483

|
Цитата(spf @ Apr 7 2006, 21:37)  CAN на 40 метрах может работать в полный рост - 1Мбод при родном драйвере, это в _50_ раз быстрее... Вопрос был как дешевле реализовать, а не как быстрее. Еще DALI можно помянуть, тоже открытый коллектор. 1200 бод на 300м, зато на любом кабеле и при любой топологии, без терминаторов. C-Bus 5 кбод на 1 км, свободная топология на любой неэкранированной витой паре. А эти "50 раз быстрее", небось, требуют экранированный кабель с контролируемым волновым сопротивлением, терминаторы с обоих концов и малое кол-во узлов с макс. отводами сантиметров по 10?
|
|
|
|
|
Apr 7 2006, 12:27
|

Знающий
   
Группа: Свой
Сообщений: 553
Регистрация: 30-03-05
Из: Санкт Петербург
Пользователь №: 3 793

|
Цитата(=AK= @ Apr 7 2006, 16:23)  Цитата(spf @ Apr 7 2006, 21:37)  CAN на 40 метрах может работать в полный рост - 1Мбод при родном драйвере, это в _50_ раз быстрее...
Вопрос был как дешевле реализовать, а не как быстрее. Еще DALI можно помянуть, тоже открытый коллектор. 1200 бод на 300м, зато на любом кабеле и при любой топологии, без терминаторов. C-Bus 5 кбод на 1 км, свободная топология на любой неэкранированной витой паре. А эти "50 раз быстрее", небось, требуют экранированный кабель с контролируемым волновым сопротивлением, терминаторы с обоих концов и малое кол-во узлов с макс. отводами сантиметров по 10? Да действительно нужны терминаторы(120 ом) и 60 ом сопротивление линии,хотя на нескольких метрах можно себе позволить на это забить.Но вот то что короткие отводы и экранированный кабель тут уж ничего неподелаеш.Вон то же Modbus+ так вобще еще и тапы(тройники) требует на каждый узел а уж кабель скока стоит это вобще караул.
|
|
|
|
|
Apr 7 2006, 13:22
|
Участник

Группа: Свой
Сообщений: 26
Регистрация: 21-12-05
Пользователь №: 12 486

|
Цитата(ipc @ Apr 7 2006, 16:18)  Цитата(spf @ Apr 7 2006, 16:07)  Цитата(=AK= @ Apr 7 2006, 17:58)  Цитата(ipc @ Apr 7 2006, 21:20)  думаю что фронты завалятся в корягу метра через два. LIN работает при помощи открытых коллекторов, т.е. по монтажному ИЛИ. При 20 кбод на 40 м работает. CAN на 40 метрах может работать в полный рост - 1Мбод при родном драйвере, это в _50_ раз быстрее... Кстати где то читал что есть драйверы позволяющие тянуть CAN более чем на километр(если незапамятовал то до пяти) и работать на скорости более мегабита правда при уж совсем децких расстояниях. Цитата(shans @ Apr 7 2006, 16:12)  Ну не такие уж копейки, а на километр мне тянуть не нужно, всего несколько метров. Собственно я сам за использование драйверов, дабы не создавать себе же лишние проблемы. Однако, как водится, на любой дополнительный корпус смотрят косо, и его использование нужно мотивировать  Ну тогда неправильно выбран интерфейс.CAN это полевая шина(название говорит само за себя) и предназначен для распределения девайсов в пространстве.Тут подошел бы ethеrnet(благо он сильно подешевел и в виде XPortа нетребует вобще никакой разработки) или вобще чтонибудь децкое типа SPI,I2c или нахудой конец проверенный веками RS-485. SPI, I2C не катят однозначно, а вот RS-485 тоже рассматривается как один из вариантов. Насчет полевой шины: интерфейс был изначально разработан для автомобильных дел. Сомневаюсь, что там километры шины
|
|
|
|
|
Apr 9 2006, 11:55
|

Странник
   
Группа: Свой
Сообщений: 766
Регистрация: 29-08-05
Из: Екатеринбург
Пользователь №: 8 051

|
Цитата(shans @ Apr 7 2006, 19:22)  SPI, I2C не катят однозначно, а вот RS-485 тоже рассматривается как один из вариантов. Яйцо с курицей не сравнивайте RS485 - физический уровень. CAN - два уровня OSI.(аппаратный арбитраж, фильтрация пакетов и т.п.)
--------------------
"Как много есть на свете вещей, которые мне не нужны!" Сократ
|
|
|
|
|
Apr 11 2006, 10:33
|
Участник

Группа: Свой
Сообщений: 26
Регистрация: 21-12-05
Пользователь №: 12 486

|
Цитата(spf @ Apr 9 2006, 15:55)  Цитата(shans @ Apr 7 2006, 19:22)  SPI, I2C не катят однозначно, а вот RS-485 тоже рассматривается как один из вариантов. Яйцо с курицей не сравнивайте RS485 - физический уровень. CAN - два уровня OSI.(аппаратный арбитраж, фильтрация пакетов и т.п.) А вот так и сравниваю. CAN в любом случае нужно привязывать к физическому уровню, а RS485 к программной реализации. Да и не только это. Вот и смотрю, во что выльется решение в целом в том и другом случае. Предложите свой подход - рассмотрю и его.
|
|
|
|
|
Apr 11 2006, 10:44
|

Знающий
   
Группа: Свой
Сообщений: 553
Регистрация: 30-03-05
Из: Санкт Петербург
Пользователь №: 3 793

|
Цитата(shans @ Apr 11 2006, 14:33)  Цитата(spf @ Apr 9 2006, 15:55)  Цитата(shans @ Apr 7 2006, 19:22)  SPI, I2C не катят однозначно, а вот RS-485 тоже рассматривается как один из вариантов. Яйцо с курицей не сравнивайте RS485 - физический уровень. CAN - два уровня OSI.(аппаратный арбитраж, фильтрация пакетов и т.п.) А вот так и сравниваю. CAN в любом случае нужно привязывать к физическому уровню, а RS485 к программной реализации. Да и не только это. Вот и смотрю, во что выльется решение в целом в том и другом случае. Предложите свой подход - рассмотрю и его. Ну CAN положим тоже надо привязывать к программной реализации и это будет посложнее чем протоколы базирующиеся на RS-485. Я думаю что его использование обосновано только если присутствует один или больше из нижеперечисленных факторов. 1.Нужны сравнительно большие скорости 2.Нужно тащить данные на расстояние првышающее 10 метров 3.В сети нужна мультимастерность 4.Выбранные аппаратные средства имеют его(CAN) на борту бесплатно 5.Существует проблема с помехами 6.Есть желание(установка руководства) неиспользовать малоперспективные(нерасширяемые,слабомасштабируемые или просто подходящие впритык) и уходящие в прошлое программно аппаратные средства.
|
|
|
|
|
Apr 12 2006, 18:40
|
Участник

Группа: Свой
Сообщений: 22
Регистрация: 1-03-05
Из: Москва
Пользователь №: 2 980

|
"Если сравнивать RS-485 c CAN" - то это на самом деле сравнения яйца с курицей. Сравнение возможно только поле того, как разберёшься в том, что такое "CAN"... После этого пункта само слово "сравнение" будет трактоваться уже иначе. Важно понять, что RS-485 без использования MODBUS или чего-то подобного есть просто "три проводка", которые соединяют аппаратные UART на двух (или более) MCU. Отличие только в несравнимо больших расстояниях и помехозащищённости. Ничего нового это не добавляет в плане качества связи, гарантированности доставки или чего-либо ещё. Это только ХОРОШИЙ способ растянуть три проводка на N метров. С CAN ситуация обратная всвязи с добавлением второго уровня OSI - для программы это такой же "чёрный ящик", как и UART: 1. MSG-> bbox 2. bbox->[по шине]->bbox1, bbox2...bboxN 3. у bbox2 во время приёма возникла ошибка (он засомневался) => опять на шаг 2 *Обращаем внимание, что не на шаг 1!* 4. [раз здесь, то послали, или знаем, что не послали] UART принципиально имеет MSG=1байт, при этом у него НЕТ средств для аппаратной реализации шагов 2 и 3. !! Уже писал в свой топик. Сюда же дублирую: ---------------------------------------------------------------- Atmel сделала шаг вперёд к gcc и CAN. Конкретно: только что выложили новую версию библиотеки для At90CANxxx для gcc! Качаем, разбираемся. Похоже, что внутри уже имеются примеры работчего "скелета" программ hello world для работы с шиной. http://www.atmel.com/dyn/products/product_...sp?part_id=3780----------------------------------------------------------------- !!
|
|
|
|
|
Apr 13 2006, 14:28
|
Участник

Группа: Свой
Сообщений: 22
Регистрация: 1-03-05
Из: Москва
Пользователь №: 2 980

|
Все-таки решительно надо иметь земляной провод в идеологии RS-485. Это не вполне очевидно, поскольку есть много примеров дифф. линий, в которых нет "земляного" провода. В 4-х проводном варианте земля тоже одна. Если продолжать "правильный идеологически" разговор, то RS-485 привязан к конкретной физической реализации. CAN оперирует понятием "доминантного и рецессивного" битов, что без проблем имплементируется оптоволокном ("один проводок"). Сигнал (световой импульс) либо есть = "доминантный", либо нет. Использование электрического способа передачи данных для CAN - это одна из многих (гипотетически) реализаций, не являющаяся "единственно правильной" или "плохой, но работающей"....
to: spf. Прочёл внимательно первый пост в этой теме. Еёсли речь идёт о CAN 2.0A, то получается интересная арифметика: "Разделим CANID(11бит) на 3 секции : 5+4+4" =13 в сумме, как я понимаю? . Пока не довёл до конца изучение CiA 301, но уже подчерпнул много полезного. Раздел с определением полей внутри CANID пока не смотрел, поэтому не могу говорить на тему реализованного количества поддерживаемых устройств. Спасибо за указание на стандарт.
|
|
|
|
|
Apr 13 2006, 16:54
|

Странник
   
Группа: Свой
Сообщений: 766
Регистрация: 29-08-05
Из: Екатеринбург
Пользователь №: 8 051

|
Цитата(dormouse @ Apr 13 2006, 20:28)  to: spf. Прочёл внимательно первый пост в этой теме. Еёсли речь идёт о CAN 2.0A, то получается интересная арифметика: "Разделим CANID(11бит) на 3 секции : 5+4+4" =13 в сумме, как я понимаю? Правильно подмечено, просчитался, так сказать на ходу сочинял вариант попроще, пользую только 2.0B. PS: Дуплексные оптоволоконные элементы слишком дороги, чаще недоступны. Поэтому CAN практически реализуется на двух волокнах -- "два проводка"  .
--------------------
"Как много есть на свете вещей, которые мне не нужны!" Сократ
|
|
|
|
|
Apr 13 2006, 20:39
|
Участник

Группа: Свой
Сообщений: 22
Регистрация: 1-03-05
Из: Москва
Пользователь №: 2 980

|
Продолжаю разбираться с CiA 301. Меня смутил порядок следования полей. Основные варианты: либо A: 1. P бит - ID посылающего => уже работает арбитраж 2. дальше уже неважно, поскольку один может "за раз" послать только 1 сообщение либо B: 1. Код сообщения => первичный арбитраж по "важности" сообщения 2. ID посылающего => вторичный арбитраж по приоритету источника 3. ID приёмника - уже только для фильтрации на стороне приёмника, не участвует в арбитраже, как и п. А.2.
либо С: (для неравновесной системы [в смысле 3 мастера, 10 слейвов]) 1. Указание мастер/слейв (или большее число групп) 2. Код 3. Оставшаяся часть ID посылающего 4. ID приёмника
Похоже, что реализован вариант B, поскольку предполагается, что сами по себе функциональные коды делятся на коды, возможные для 1 мастера и на коды, общие для группы слейвов (B = C при 1 мастере).
Я правильно понял суть?
Если действовать в рамках стандарта CANOpen, фактически надо реализовать часть обязательных функций от CANOpen slave, а работу на PC в качестве мастера исполняет купленная за деньги .dll на их аппаратной платформе?
|
|
|
|
|
Apr 14 2006, 03:08
|

Странник
   
Группа: Свой
Сообщений: 766
Регистрация: 29-08-05
Из: Екатеринбург
Пользователь №: 8 051

|
Цитата(dormouse @ Apr 14 2006, 02:39)  либо B: 1. Код сообщения => первичный арбитраж по "важности" сообщения 2. ID посылающего => вторичный арбитраж по приоритету источника 3. ID приёмника - уже только для фильтрации на стороне приёмника, не участвует в арбитраже, как и п. А.2. Не надо подменять понятия, в арбитраже учавствуют все биты CAN-ID, другое дело что при нормальной работе приведенного протокола до их разбора дело не дойдет. Цитата Похоже, что реализован вариант B, поскольку предполагается, что сами по себе функциональные коды делятся на коды, возможные для 1 мастера и на коды, общие для группы слейвов (B = C при 1 мастере). Я правильно понял суть? Речь про мой набросок? Если да, то суть верна. Цитата Если действовать в рамках стандарта CANOpen, фактически надо реализовать часть обязательных функций от CANOpen slave, а работу на PC в качестве мастера исполняет купленная за деньги .dll на их аппаратной платформе? С CANOpen дел не имел, но уверен что мастер может быть реализован не только на PC. Если нет жесткого требования применения CANOpen, то можно посмотреть на открытый стандарт CANkindom и т.п.
--------------------
"Как много есть на свете вещей, которые мне не нужны!" Сократ
|
|
|
|
|
Apr 14 2006, 05:07
|

Знающий
   
Группа: Свой
Сообщений: 553
Регистрация: 30-03-05
Из: Санкт Петербург
Пользователь №: 3 793

|
Цитата Все-таки решительно надо иметь земляной провод в идеологии RS-485. Это не вполне очевидно, поскольку есть много примеров дифф. линий, в которых нет "земляного" провода. В 4-х проводном варианте земля тоже одна. Ну незнаю.Сколько раз делал системы на RS-485 никогда с землей особо незаморачивался.Может быть в устройствах без опторазвязки это и критично но теже айсипиконы имеют развязаное питание и драйвер запитывается через преобразователь посему про землю поданую снаружи ничего незнает. Цитата Пока не довёл до конца изучение CiA 301, но уже подчерпнул много полезного. Раздел с определением полей внутри CANID пока не смотрел, поэтому не могу говорить на тему реализованного количества поддерживаемых устройств. Спасибо за указание на стандарт. Там все просто но непутайте NID(node ID) и COBID.Все поле идентификатора в соответствии со стандартом можно делить как угодно.Допустим обычно в CANOpen сети может быть до 127 устройств те под NID нужно выделить 7 бит.Остается 4 бита.Т.е прибор сможет иметь 16 разных видов пакетов с уникальными COBID. Если сократить количество устройств до 63 то типов пакетов будет в 2 раза больше итд. Цитата Правильно подмечено, просчитался, так сказать на ходу сочинял вариант попроще, пользую только 2.0B. К сожалению 2.0в пока нельзя использовать в CANOpen.Но организация которая занимается его стандартизацией(CIA) что то бубнила по поводу того что работы над новыми стандартами ведутся. Надо помнить что аппаратный приоритет оперирует со всем полем идентификатора.И COBID выбираются таким образом чтообы более важные сообщения передавались лучше независимо от источника и получателя.Хотя конечно к примеру пакет EMERGENCY имеющий код 0x80 отправленный прибором с NID=1(COBID получится 0x80+1=0x81) будет более приоритетным чем у устройства с NID=2(COBID=0x82).Потому как в сети нет двух одинаковых приоритетов на самом деле их 2^11 штук.
|
|
|
|
|
Aug 22 2006, 11:48
|

Группа: Участник
Сообщений: 13
Регистрация: 14-08-06
Из: Санкт-Петербург
Пользователь №: 19 540

|
Цитата(ipc @ Apr 14 2006, 09:07)  К сожалению 2.0в пока нельзя использовать в CANOpen.Но организация которая занимается его стандартизацией(CIA) что то бубнила по поводу того что работы над новыми стандартами ведутся. А можно по-подробнее? Почему нельзя? Я не могу разве, имея контроллер с 2.0B, реализовать нужные функции CANopen программно? Сетевой уровень разве не единый?
|
|
|
|
|
Aug 22 2006, 11:57
|

Знающий
   
Группа: Свой
Сообщений: 553
Регистрация: 30-03-05
Из: Санкт Петербург
Пользователь №: 3 793

|
Цитата(ДДН @ Aug 22 2006, 15:48)  Цитата(ipc @ Apr 14 2006, 09:07)  К сожалению 2.0в пока нельзя использовать в CANOpen.Но организация которая занимается его стандартизацией(CIA) что то бубнила по поводу того что работы над новыми стандартами ведутся.
А можно по-подробнее? Почему нельзя? Я не могу разве, имея контроллер с 2.0B, реализовать нужные функции CANopen программно? Сетевой уровень разве не единый? Сейчас проблематично найти контроллер который неподдерживает 2.0в но я консультировался с представителями CAN-CIA и мне было ясно сказано что выпущеные на сегодняшний день спецификации касающиеся формата идентификатора(COBID) рассматривают только его 11 битное представление. Конечно можно сделать свою 29 битную реализацию CANOpen но она непройдет сертификацию(CANOpen Conformance Test) и небудет совместима с современными программно-аппаратными средствами.Если это небеспокоит то можно делать все что угодно только называть это CANopen будет нельзя.
|
|
|
|
|
Aug 22 2006, 14:32
|
Местный
  
Группа: Свой
Сообщений: 421
Регистрация: 25-12-04
Пользователь №: 1 675

|
Цитата(ipc @ Aug 22 2006, 15:57)  Цитата(ДДН @ Aug 22 2006, 15:48)  Цитата(ipc @ Apr 14 2006, 09:07)  К сожалению 2.0в пока нельзя использовать в CANOpen....
А можно по-подробнее? Почему нельзя? Я не могу разве, имея контроллер с 2.0B, реализовать нужные функции CANopen программно? Сетевой уровень разве не единый? Сейчас проблематично найти контроллер который неподдерживает 2.0в но я консультировался с представителями CAN-CIA и мне было ясно сказано что выпущеные на сегодняшний день спецификации касающиеся формата идентификатора(COBID) рассматривают только его 11 битное представление. Конечно можно сделать свою 29 битную реализацию CANOpen но она непройдет сертификацию(CANOpen Conformance Test) и небудет совместима с современными программно-аппаратными средствами. А это не Вы писали: " Все поле идентификатора в соответствии со стандартом можно делить как угодно.Допустим обычно в CANOpen сети может быть до 127 устройств те под NID нужно выделить 7 бит.Остается 4 бита.Т.е прибор сможет иметь 16 разных видов пакетов с уникальными COBID. Если сократить количество устройств до 63 то типов пакетов будет в 2 раза больше итд. " А вот если это "итд." растянуть на 29 бит? И что, это уже не CanOpen? Я не говорю про профиль I/O, и то - младшие входы/выходы я буду передавать со стандартными ID, а если мое устройство поддерживает много больше входов/выходов? Я что, не могу присвоить им (например, динамически) ID с применением 29-бит идентификаторов? А если я создам свой собственный профиль? А если у меня "Programmable CANopen Devices", т.е. смотрим DSP302. Да во всех COB-ID бит 29 говорит: 0 == 11-bit ID (CAN 2.0A), 1 == 29-bit ID (CAN 2.0B) Я, конечно, ничего не сертифицировал... Или под сертификацие имеется ввиду только соответствие одному из профилей, которыз раз, два, и ...
|
|
|
|
|
Aug 23 2006, 04:37
|

Знающий
   
Группа: Свой
Сообщений: 553
Регистрация: 30-03-05
Из: Санкт Петербург
Пользователь №: 3 793

|
Цитата(Andrew2000 @ Aug 22 2006, 18:32)  Цитата(ipc @ Aug 22 2006, 15:57)  Цитата(ДДН @ Aug 22 2006, 15:48)  Цитата(ipc @ Apr 14 2006, 09:07)  К сожалению 2.0в пока нельзя использовать в CANOpen....
А можно по-подробнее? Почему нельзя? Я не могу разве, имея контроллер с 2.0B, реализовать нужные функции CANopen программно? Сетевой уровень разве не единый? Сейчас проблематично найти контроллер который неподдерживает 2.0в но я консультировался с представителями CAN-CIA и мне было ясно сказано что выпущеные на сегодняшний день спецификации касающиеся формата идентификатора(COBID) рассматривают только его 11 битное представление. Конечно можно сделать свою 29 битную реализацию CANOpen но она непройдет сертификацию(CANOpen Conformance Test) и небудет совместима с современными программно-аппаратными средствами. А это не Вы писали: " Все поле идентификатора в соответствии со стандартом можно делить как угодно.Допустим обычно в CANOpen сети может быть до 127 устройств те под NID нужно выделить 7 бит.Остается 4 бита.Т.е прибор сможет иметь 16 разных видов пакетов с уникальными COBID. Если сократить количество устройств до 63 то типов пакетов будет в 2 раза больше итд. " А вот если это "итд." растянуть на 29 бит? И что, это уже не CanOpen? Я не говорю про профиль I/O, и то - младшие входы/выходы я буду передавать со стандартными ID, а если мое устройство поддерживает много больше входов/выходов? Я что, не могу присвоить им (например, динамически) ID с применением 29-бит идентификаторов? А если я создам свой собственный профиль? А если у меня "Programmable CANopen Devices", т.е. смотрим DSP302. Да во всех COB-ID бит 29 говорит: 0 == 11-bit ID (CAN 2.0A), 1 == 29-bit ID (CAN 2.0B) Я, конечно, ничего не сертифицировал... Или под сертификацие имеется ввиду только соответствие одному из профилей, которыз раз, два, и ... Под стандартом CANOpen в первую очередь подразумевается соответствие профилю DS301 а под сертификацией прохождение теста устройства прогой CANOpen Conformance Test в сертификационной организации CAN-CIA и получения уникального Vendor ID(который кстати используется в LSS).Оба этих критерия и определяют можно ли на фронт панели своего девайса поставить логотип CANOpen и гордица этим до пенсии.
|
|
|
|
|
Aug 23 2006, 07:26
|

Группа: Участник
Сообщений: 13
Регистрация: 14-08-06
Из: Санкт-Петербург
Пользователь №: 19 540

|
Цитата(ipc @ Aug 22 2006, 15:57)  Сейчас проблематично найти контроллер который неподдерживает 2.0в но я консультировался с представителями CAN-CIA и мне было ясно сказано что выпущеные на сегодняшний день спецификации касающиеся формата идентификатора(COBID) рассматривают только его 11 битное представление. Конечно можно сделать свою 29 битную реализацию CANOpen но она непройдет сертификацию(CANOpen Conformance Test) и небудет совместима с современными программно-аппаратными средствами.Если это небеспокоит то можно делать все что угодно только называть это CANopen будет нельзя. Всё понял, спасибо. Вы меня успокоили
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|