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