CANopen PDO с использованием последовательного порта
Я пытаюсь понять протокол CANopen.
На данный момент у меня нет ни CAN оборудования, ни стека CANopen для экспериментов.
Я хотел бы знать, как написать программу на Java, чтобы просто интерпретировать сообщения CANopen, полученные на порт RS-232.
- Есть ли интерфейсы CAN, которые установлены как последовательный порт?
- Смогу ли я написать программу для обработки сообщений CANopen? Я хочу только иметь возможность получать и интерпретировать сообщения. Это так же просто, как создать буфер для входного потока, а затем разбить передачу на отдельные сообщения в соответствии с SOF и EOF? Как мне узнать, что такое SOF/EOF, поскольку он имеет длину всего 1 бит?
- Почему существует ограничение на количество PDO узла CAN?
- Как мне обработать PDO, чтобы определить узел, с которого он отправляется, а также тип и значение данных? PDO - это стандартная рама CAN?
2 ответа
Я не знаю ни одного интерфейса CAN, который подключается к последовательному порту (было бы не сложно создать интерфейс на основе микроконтроллера с CAN и последовательными портами). Однако стандартные последовательные порты будут слишком медленными, чтобы поддерживать более высокие скорости, доступные в CAN.
Как правило, при использовании API для интерфейса CAN вы сможете читать сообщения, состоящие из идентификатора, длины и до восьми байтов данных. Вам не нужно заботиться о SOF/EOF. Даже если непосредственно на низком уровне интерфейс сопрягается с контроллером CAN (то есть, если у вас есть интерфейс CAN, для которого вам нужно самостоятельно написать драйвер /API), вам все равно не нужно заботиться об этих деталях. И вы не хотите пытаться получить доступ к шине CAN без использования контроллера CAN вообще...
Если вы хотите притвориться, что у вас есть интерфейс CAN, вы можете создать функцию-заглушку, которая возвращает эти три элемента: идентификатор, длину данных и 64-битный буфер данных. Это в основном то, что дадут вам все API-интерфейсы CAN. А при передаче CAN-сообщений вы будете использовать те же параметры (ID, длина данных).
PDO определяются их использованием поля CAN ID. Теоретически, количество PDO для устройства на самом деле не так ограничено, но предопределенный набор соединений выделил только небольшое количество (четыре) PDO для каждого узла.
PDO - это стандартные кадры CAN. Как уже упоминалось, CAN ID идентифицирует PDO. В предопределенном наборе соединений (которым следует большинство устройств) CAN ID всех сообщений состоит из функциональной части и части ID модуля (идентификатор модуля может быть жестко закодирован для устройства или настраиваться, например, с помощью DIP-переключателей). Биты 10-7 CAN ID - это код функции, а бит 6-0 - это номер модуля. Например, TxPDO1 от устройства с идентификатором модуля 0x10 будет иметь идентификатор CAN 0x190. Старшие четыре бита 11-битного CAN ID, ((CAN_ID & 0x780) >> 7)
, дает вам код функции (TxPDO1 = 3) и остальные биты,(CAN_ID & 0x7f)
, дает идентификатор модуля (который в этом примере был 0x10). Поэтому, если вы прочитаете сообщение на шине CAN с идентификатором CAN 0x190, вы будете знать, что это был PDO от устройства с идентификатором модуля 0x10.
(Проще говоря, можно сказать, что TxPDO1 имеет CAN ID, установленный в 0x180 +<module ID>
, TxPDO2 имеет CAN ID, установленный в 0x280 +<module ID>
, так далее.)
Как вы должны интерпретировать данные в PDO, зависит от вашего устройства.
Я предлагаю вам найти хороший учебник по CANopen. К сожалению, большинство из них заставляют все звучать намного сложнее, чем на самом деле. Так что смотрите вокруг, пока не найдете тот, который кажется понятным.
Существует много интерфейсов CAN, которые могут работать через последовательный порт - VSCOM, Vector и многие другие. Существуют также бесплатные программы, которые позволяют отправлять и получать необработанные кадры CAN - CANhacker и т. Д. Google для некоторых из них.
Чего я не нашел, так это бесплатной программы, которая может интерпретировать CANopen - большинство из них платные. Исключением является Wireshark для Linux - он использует SocketCAN для извлечения пакетов и может анализировать все кадры CANopen.
Я запускаю свою шину CAN со скоростью 1 Мбит / с и использую интерфейс VSCOM для мониторинга на последовательном порту.
CANFestival - это хороший стек с открытым исходным кодом, который легко портируется как на Linux, так и на пустые машины.