Связь с пользовательским модулем j1939

Я занимаюсь созданием специального модуля ввода-вывода Canbus на базе чипа Atmega2560. Модуль будет иметь 10 сильноточных выходов с ШИМ-управлением и обратной связью по току, 20 цифровых входов, 5 аналоговых входов и 4 аналоговых выхода 0-5 В. Я работал над выяснением структуры сообщений J1939, которую я буду использовать. Эти модули будут подчиненными устройствами, управляемыми главным ЭБУ. Поскольку в одной сети может находиться более одного из этих модулей, я добавил переключатель адреса CAN для каждого модуля, чтобы пользователь мог выбрать CAN ID 1-255 для каждого модуля. План состоял в том, чтобы каждый модуль транслировал состояние всех цифровых входов в одном сообщении CAN. Если я выберу 0xFF00 в качестве идентификатора PGN, а затем использую 8 байтов для представления состояния в битовой форме для статуса входа для этого конкретного модуля, тогда как мастер узнает, из какого модуля пришло сообщение? Адрес модуля указан в сообщении CANbus?

Я смотрел примеры CANBUS для arduino, и похоже, что вы можете фильтровать на основе PGN, но я не вижу ничего, что можно было бы фильтровать на основе адреса источника или адреса назначения.

Может кто-нибудь пояснить, как я могу это сделать?


person jonfarrugia    schedule 15.04.2017    source источник
comment
J1939 кодирует адрес источника как 8 младших битов расширенного идентификатора CAN. Вы должны иметь возможность запрограммировать свой CAN-интерфейс для фильтрации этой части, хотя я бы придерживался программной фильтрации, если у вас нет проблем с производительностью. Я подозреваю, что вам может быть лучше выбрать MCU со встроенным периферийным устройством CAN вместо ATmega2560.   -  person doynax    schedule 15.04.2017
comment
Итак, я могу отправить сообщение, добавив приоритет, PGN, а затем источник? например, если я отправлю 0x0CFF00FE, это означает: приоритет 3 PGN 65280 адрес источника 254 это правильно?   -  person jonfarrugia    schedule 16.04.2017
comment
@jonfarrugia Вы правы. Обратите внимание, что все проприетарные PGN (65280-65535) являются широковещательными сообщениями, что означает, что их адрес назначения всегда 255.   -  person LaneL    schedule 12.06.2017


Ответы (1)


Да, как упоминалось в doynax, 8 младших битов всегда зарезервированы для исходного адреса узла. Если вы будете размещать эту сеть на шине CAN транспортного средства, важно отметить, что если вы не запрашиваете адрес источника на шине транспортного средства, вы можете получать NAK от главного ЭБУ всякий раз, когда вы пытаетесь разместить чужую информацию на шине транспортного средства. автобус.

Чтобы предотвратить эту проблему, вам, возможно, придется выполнить процедуру запроса адреса для каждого настраиваемого узла в вашей сети. Здесь вы отправляете PGN 60928 в виде широковещательной рассылки (адрес назначения 0xFF), и каждый узел в сети должен отвечать на этот PGN своим собственным адресом источника (при условии, что все узлы соответствуют этой спецификации, но не все). Если в ответах указан общий адрес источника, значит, вы знаете, что он недоступен.

См. Следующее слайд-шоу для получения дополнительной информации, начиная со стр. 39 J1939

person LaneL    schedule 12.06.2017