OBD-II или CANopen
Я новичок в CAN-шине и изучаю новую систему, которую нам предстоит разработать для мониторинга мобильного компрессора. Этот компрессор буксируется грузовиком или иногда остаётся на строительной площадке. Поскольку я новичок в CAN-шине, я пытаюсь понять, какой стандарт CAN лучше всего подходит для решения этой задачи — OBD-II или CANopen? Данные с (мобильного) компрессора необходимо регистрировать и отправлять в облако. На борту мобильного компрессора есть ЭБУ. За последние пару дней, изучая шину CAN, я немного разобрался в стандартах SAE J1939, OBD-II и CANopen. Первый предназначен специально для тяжёлой техники, автобусов, грузовиков и т. д. OBD-II используется в основном в автомобильной промышленности. А CANopen — в промышленности. Я всё ещё пытаюсь выбрать между OBD-II и CANopen. Данных, которые собирает компрессор/электронный блок управления, не так много — в основном это показания температуры, давления и уровня масла. Вероятно, они отправляются раз в несколько секунд, за исключением случаев, когда необходимо быстрее сообщить о неисправности компрессора. Любые подсказки будут очень полезны. CAN v2.0 A/B со скоростью 125 Кбит/с или что-то в этом роде? Я изучаю вопрос со всех возможных сторон, прежде чем принять решение, и несколько слов от человека с опытом могут мне очень помочь. Ещё раз спасибо. Пожалуйста, дайте мне знать, если потребуется дополнительная информация.
Перевод вопроса с Mechanics Stack Exchange
Лицензия: CC BY-SA (2.5–4.0)
Оригинальный вопрос: https://mechanics.stackexchange.com/questions/51727/obd-ii-or-canopen
На мой взгляд, вы слишком много об этом думаете.
В целом RS232, CAN и LIN — это просто интерфейсы, позволяющие передавать байты между устройствами, но они не определяют, как интерпретировать эти байты. Здесь в игру вступают OBD-II, CANopen и т. д. Это стандарты с большим количеством спецификаций, которые требуют обширных знаний и времени на программирование с обеих сторон. Таким образом, их внедрение также сопряжено с расходами. (И я не уверен, что вам нужны лицензии для разработки программного обеспечения CANopen/ODB-II)
Как вы написали, ЭБУ пока не поддерживает CAN, у него есть только аппаратное обеспечение, и его нужно запрограммировать. И в вашем устройстве пока не реализована функция CAN.
Также сомнительно, что вам действительно нужен CAN и вы не можете переключиться на RS232. Да, ему не хватает надёжности дифференциальных сигнальных линий, но если ваше устройство находится рядом с ЭБУ, это не имеет значения. И ему не хватает высокого качества данных из-за встроенной контрольной суммы, но вы можете реализовать собственную контрольную сумму и передавать её как обычные данные. Да, и RS232 предназначен только для двух устройств, это не шина. Но вам ведь не нужна эта функция, не так ли?
Одно из главных преимуществ заключается в том, что интерфейс RS232 для ПК стоит несколько долларов по сравнению с интерфейсом CAN, и вы можете легко написать программное обеспечение для эмуляции вашего устройства или ЭБУ без использования каких-либо специальных библиотек.
Итак, я бы реализовал свой собственный простой протокол, что-то вроде этого:
Вы отправляете
T<CR><LF>
запрос на определение температуры, и ЭБУ отвечаетT<temperatureHighbyte><temperatureLowbyte><CRC-checksum><CR><LF>
.Вы считываете данные до
<CR><LF>
, самостоятельно вычисляете контрольную сумму и сравниваете ее с отправленной. Если они совпадают, значит, вы правильно получили сообщение и можете передать полученное значение температуры.Таким образом, у вас будет работающее решение ещё до того, как вы начнёте глубже разбираться в CANopen и подобных системах.