Выбор сетевого уровня по шине CAN

Я планирую использовать шину CAN в приложении промышленной автоматизации, однако мне трудно решить, как реализовать сетевой уровень. Есть ли у кого-нибудь здесь какие-либо рекомендации по протоколу более высокого уровня для использования через CAN, который содержит рекомендации о том, как назначать идентификаторы сообщений и как форматировать пакеты данных? Должен ли я разработать свой собственный сетевой уровень или внедрить существующий стандарт, такой как CANopen?

Ответы (3)

Вы определенно захотите выбрать стандартный сетевой слой. Я видел несколько случаев, когда люди сворачивали свои собственные, и часто протокол был неэффективным, и в конце концов это была пустая трата времени. Проверенный сетевой уровень обеспечивает базовую функциональность для решения большинства проблем, с которыми вы, вероятно, столкнетесь при работе в сети со встроенным устройством, и в конечном итоге это сэкономит вам драгоценное время и деньги.

Я знаком с CANopen, поэтому я приведу здесь небольшое пояснение, и оно может помочь вам решить, хотите ли вы идти по этому пути. Если это не соответствует тому, что вам нужно сделать, я бы посмотрел на что-то другое.

CANopen очень ориентирован на данные. Все подчиненные узлы CANopen (вещи, которыми вы управляете с главного узла, такие как датчики или драйверы двигателей) предоставляют словарь, который содержит все данные конфигурации, управления и сбора данных, которые вам необходимо читать/записывать для выполнения вашей работы. Затем вы можете читать/записывать эти объекты по отдельности с помощью механизма SDO (сервисный объект данных) или периодически читать/записывать эти объекты в синхронизированных передачах сообщений CAN через механизм PDO (объект данных производителя). Запуск, завершение работы и сброс, а также обнаружение сердцебиения/неисправности узла обеспечиваются службами NMT, а также службой назначения идентификатора узла (если вы хотите ее использовать). Чтобы реализовать устройство с использованием встроенной библиотеки CANOpen, вы в основном настраиваете словарь объектов, настраиваете PDO для периодической отправки/получения обновлений данных и пишете пользовательский код, который ведет себя на основе этих записей данных.Прочтите эту книгу для получения дополнительной информации.

В книге рассказывается о реализации CANopen под названием MicroCANopen. Какую реализацию CANopen вы используете?
@mjh2007 mjh2007 - Мы развернули свой собственный, так как его нужно было использовать в сочетании с другим протоколом.
"CANOpen" -> "CANopen"

Я пишу код для доступа к шине CAN на автомобилях GM, который использует в основном проприетарный сетевой уровень. Вы изучали OpenCAN? Я бы выбрал открытый стандарт, такой как CANOpen или даже OpenCAN. Это действительно зависит от уровня контроля и гибкости, которые вы хотите получить в своей среде автоматизации.

есть OpenCAN, а также CANOpen? эй! ужасное название.
@ Джейсон, я виню Microsoft.

Были отличные ответы. Я не знаю, какую микросхему вы используете, но вот ссылки на некоторую информацию от микрочипа.

Библиотека J1939

Прошивка подчиненного устройства DeviceNet™ Group 2 для PIC18 с CAN

CANopen

У каждого из них есть код и базовое техническое описание, в котором вы узнаете, что вам нужно для их реализации.

На самом деле я использую Microchip, так что это очень полезно. Спасибо!
Это все для pic18. Кажется, с CANopen у вас есть мастер, который изменяет настройки других, для большей части того, что включает в себя мое использование canbus, это идеально подходит.
Используете ли вы библиотеку Microchip для реализации CANopen?
В процессе его реализации это медленный процесс, потому что для внесения изменений в систему требуется много разных людей. Я сообщу вам, когда это будет реализовано, если это поможет.
@ mjh2007, я перестал работать над процессором, и студенты решили, как и многие раньше, не использовать предыдущее оборудование и купить то, что им было удобнее. И снова никакого прогресса в этом профессорском проекте, но это происходит, когда профессор не знает, что происходит, и просто позволяет людям все менять раз в год.