Я планирую использовать шину CAN в приложении промышленной автоматизации, однако мне трудно решить, как реализовать сетевой уровень. Есть ли у кого-нибудь здесь какие-либо рекомендации по протоколу более высокого уровня для использования через CAN, который содержит рекомендации о том, как назначать идентификаторы сообщений и как форматировать пакеты данных? Должен ли я разработать свой собственный сетевой уровень или внедрить существующий стандарт, такой как CANopen?
Вы определенно захотите выбрать стандартный сетевой слой. Я видел несколько случаев, когда люди сворачивали свои собственные, и часто протокол был неэффективным, и в конце концов это была пустая трата времени. Проверенный сетевой уровень обеспечивает базовую функциональность для решения большинства проблем, с которыми вы, вероятно, столкнетесь при работе в сети со встроенным устройством, и в конечном итоге это сэкономит вам драгоценное время и деньги.
Я знаком с CANopen, поэтому я приведу здесь небольшое пояснение, и оно может помочь вам решить, хотите ли вы идти по этому пути. Если это не соответствует тому, что вам нужно сделать, я бы посмотрел на что-то другое.
CANopen очень ориентирован на данные. Все подчиненные узлы CANopen (вещи, которыми вы управляете с главного узла, такие как датчики или драйверы двигателей) предоставляют словарь, который содержит все данные конфигурации, управления и сбора данных, которые вам необходимо читать/записывать для выполнения вашей работы. Затем вы можете читать/записывать эти объекты по отдельности с помощью механизма SDO (сервисный объект данных) или периодически читать/записывать эти объекты в синхронизированных передачах сообщений CAN через механизм PDO (объект данных производителя). Запуск, завершение работы и сброс, а также обнаружение сердцебиения/неисправности узла обеспечиваются службами NMT, а также службой назначения идентификатора узла (если вы хотите ее использовать). Чтобы реализовать устройство с использованием встроенной библиотеки CANOpen, вы в основном настраиваете словарь объектов, настраиваете PDO для периодической отправки/получения обновлений данных и пишете пользовательский код, который ведет себя на основе этих записей данных.Прочтите эту книгу для получения дополнительной информации.
Я пишу код для доступа к шине CAN на автомобилях GM, который использует в основном проприетарный сетевой уровень. Вы изучали OpenCAN? Я бы выбрал открытый стандарт, такой как CANOpen или даже OpenCAN. Это действительно зависит от уровня контроля и гибкости, которые вы хотите получить в своей среде автоматизации.
Были отличные ответы. Я не знаю, какую микросхему вы используете, но вот ссылки на некоторую информацию от микрочипа.
Прошивка подчиненного устройства DeviceNet™ Group 2 для PIC18 с CAN
У каждого из них есть код и базовое техническое описание, в котором вы узнаете, что вам нужно для их реализации.
mjh2007
Дж. Полфер
Питер Мортенсен