Jump to content

    
Sign in to follow this  
DIMZAY

Протокол CAN, его варианты и преобразование

Recommended Posts

Добрый день. 

С CAN столкнулся в первый раз.

Год назад выдали задание на сборку и программирование шкафа управления. В процессе работы надо забирать из стороннего оборудования сигнал по шине CAN и заводить в свой ПЛК М221.. Год назад не было никакой другой информации, поэтому купили конвертер I-7530A-MR из CAN в Modbus. Этот конвертер необходимо настраивать как со стороны CAN, так и со стороны Modbus. Причём настройка возможна только при наличии конвертора, а он уехал в собранному шкафу и доступ появился только сейчас.
Сейчас, находясь на объекте, узнаю, что внутри стороннего оборудования используется J1939, а для внешних подключений протокол Canopen. Судя по каталогу производителя конвертеров - для каждого варианта протокола свой отдельный конвертер, а не один для всех.

В итоге вопрос: CAN, Canopen, J1939 - это действительно разные протоколы и для работы с ними нужны разные устройства? Или как?
Вот фото протокола стороннего устройства:

FgdlmmuMCck.thumb.jpg.0ed5302a6fdde24fb058352433f35882.jpg


Протокол - понятен. Скорость - понятно. Размер 11 бит - понятно. CAN ID - не понятно. Точнее я не могу вбить такой адрес при настройке своего конвертора I-7530A-MR. 1Е1 могу, а 0х1Е1 нет. 0х важная составляющая или нет? Или проблема в неправильной модели конвертора?
И как потом этот адрес преобразуется в регистр Модбас?

Share this post


Link to post
Share on other sites

CAN это physical layer и data link layer, а CAN OPEN, J1939 это application layer. В Вашем случае, полагаю, достаточно распатронить CAN ID и данные. 0х1Е1 это и есть CAN ID, 0х это стандартная форма написания чисел в 16-тиричном виде.

Share this post


Link to post
Share on other sites

Кстати, многие устройства, работающие на CanOpen, не требуют полноценного CanOpen. Все от настройки и желания разработчика зависит.

Скажем, у нас на крупных телескопах используются SEW'овские приводы, так там один раз настроили формат PDO, и работаем из самописного софта напрямую, без дурацкой canopen'овской обертки. А вот мне коллеги притащили компактные шаговики с приводами от pusirobot, так я с ними на уровне SDO работаю (лень было писать полноценный конфигуратор для PDO), сделал небольшую софтовую обертку, и при помощи самопального CAN<>USB все работает.

Share this post


Link to post
Share on other sites

Не знаю, как в J1939, но в CANopen есть два варианта обмена данными. Они называются SDO и PDO.

SDO - это сложный вид обмена клиент-сервер с подтверждением и служит для доступа ко всем параметрам устройства, его настройки и т.д. Возможны многопакетные передачи и т.д.После настройки не нужен

PDO - это простой вид обмена, когда устройство просто шлет или принимает сообщения с определенным CAN-ID. Один пакет обычно содержит одну или несколько переменных. Многопакетных сообщений нет. Но его нужно предварительно настроить через SDO.

Судя по инструкции у вас уже все настроено и CAN-Id у вас уже есть - то есть можете принимать данные и использовать и для этого никакой CANopen не нужен.

НО! Есть один нюанс - устройство с CANopen должно перейти в Operational State, чтобы отсылать и принимать PDO. А делает оно только после получения NMT команды (CAN сообщения) от мастера. Иначе оно будет молчать. NMT команда содержит Node-ID этого устройства и тоже может быть сгененрирована вручную, но к сожалению я ее не помню.   

Share this post


Link to post
Share on other sites

J1939 - тоже можно по CAN-ID с масками отлавливать. там ID 27 бит (extended или как там), но в ID там адреса приемника и передатчика, поэтому теоретически маска нужна, но на практике обычно у каждого типа сообщений фиксированый источник и приемник  

также там есть многопакетные сообщения, когда больше 8 байт данных

ну а вообще, там главное PGN - то есть некая таблица идентификаторов (той самой части CAN ID, см выше), но протокол разрешает назначать новые PGN-ы для нестандартных сообщений, поэтому какие-то универсальные J1939 парсеры ничего интересного не показывают (ну или нужно добавлять эти пропиентарные PGN-ы) - по крайней мере всегда с таким сталкивался.

то есть опять же какую-то часть сообщений принять|передать можно, но полностью J1939 поддержать достаточно трудоемко

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this