Can sensor руководство

Итак, все готово)
Устройство предназначено для отображения текущих параметров работы двигателя и коробки передач. Параметры отображаются ТОЛЬКО при заведенном двигателе. Через 5-10сек после того как выключили зажигание устройство выключается, на экране появиться надпись CAN OFF и экран тухнет. Включается автоматически после включения зажигания.
При включении автоматически устройство опрашивает нижеприведённый Основной список параметров. Обновляются один раз в 10-15 милисекунд. На экране значения обновляются 100 милисекунд.
При обновлении фиксируются максимальные значение.
Список параметров:
1. engine trq Nm – расчетный момент двигателя
2. intake air OC – температура воздуха на впуске
3. engine rpm – число оборотов двигателя
4. maf – массовый расход воздуха грамм/сек
5. boost spec. – запрос давления турбины в hPA
6. boost actual. – фактической значение давления турбины bar.
7. ret. c1 – угол отката зажигания по первому цилиндру
8. ret. C2– угол отката зажигания по второму цилиндру
9. ret. C3 – угол отката зажигания по третьему цилиндру
10. ret. C4– угол отката зажигания по четвертому цилиндру
11. ign. tim. cyl1 – угол опережения зажигания по первому цилиндру
12. engine oil OC – температура масла двигателя
13. coolant OC – температура охлаждающей жидкости двигателя
14. EGT OC – температура выпускных газов
15. t. fluid OC – температура масла в коробке
16. t. Speed – скорость автомобиля км/ч в этом режиме возможен замер времени разгона 0-100 с последующей фиксацией результата. Достаточно остановиться и тронуться и в левой части экрана загорится секундомер при достижении 100кмч он зафиксируется.
Для удобного отображения информации сделаны две группы с параметрами
17. Group 1
В левой части экрана – массовый расход воздуха
В правой части экрана – температура на впуске
На шкале фактический наддув турбины (10 светодиодов загораются пропорционально наддуву от 0 до 1,6 бара)
18. Group 2
В левой части экрана – фактическое давление турбины
В правой части экрана – расчетный момент двигателя
На шкале – откаты по зажиганию (слева направо: первый два светодиода – откаты в первом цилиндре, четвертый светодиод – откаты во втором цилиндре, седьмой светодиод – откаты в третьем цилиндре, девятый и десятый светодиод – откаты в четвёртом цилиндре)
На экране есть три кнопки: Левая, Центральная, Правая. Чтобы листать список назад или вперёд нужно нажимать кнопки Правая и Центральная. Для вывода максимального значения нажать и держать Левую кнопку но не более 2.5сек. При удержании Левой кнопки более 2.5 секунды происходит сброс всех максимальных параметров.
При удержании более 2.5 сек Правой кнопки происходит переключение на дополнительный список параметров
1. intake bank1 – растяжение цепи двигателя
2. voltage – напряжение сети автомобиля замер идет через кан шину, а не на разъеме OBDII
3. t. mod. OC – температура плат в коробки передач
4. Launch – количество использованных ланчей (для коробки s-tronic)
Находясь в этом списке параметров Основные параметры не фиксируются и не записываются. Для переключения в Основной список параметров необходимо удерживать Центральную кнопку более 2.5 сек.
Находясь в Основном списке параметров на шкале всегда отображается текущее значение давления турбины (10 светодиодов загораются пропорционально наддуву от 0 до 1,6 бара)
Для корректного отображения максимальных результатов перед каждым заездом рекомендую сбросить все максимальные результаты удерживать более 2.5сек Левую кнопку.
При выключенном зажигании устройсво потребляет от сети 30-40мА, поэтому если оставляете машину надолго то рекомендую отключать разъем от розетки OBDII

пока протестировано на CDNC+S-tronic и CAEB+6hp ZF

видео ИНСТРУКЦИИ по установке

видео по возможностям

видео примера работы при отображении Group 1

Technical Support

Mobileye 6 – Technical Installation Guide_Rev0.3

10 Appendix F

10.1 Mobileye CAN Sensor

The Mobileye CAN-Sensor is a new, non-intrusive

solution for CAN-bus connection.

No more wrong connections, warranty violation

or liability issues. The Mobileye CAN-Sensor will

allow you to better handle a CAN-bus reading by

simply placing the Mobileye CAN-Sensor on the

vehicle CAN-bus wires without any wire cutting

or pinching.

Benefits:

• Non-intrusive installation

Simply install over the CAN-bus wires,

no need to cut, strip, and crimp or connect

physically

• Read the data thru the wires isolation

• Fits most vehicles

• Supports all CAN-bus speeds

• Reliable CAN-bus data reading

• Fast and simple installation

(CANSENSOR1)

How to Install the CAN Sensor:

1. Identify the vehicle CAN-bus wires

2. Untwist the CAN-bus wires over a distance

of about 5cm

3. Simply place the CAN Sensor over the

CAN-bus wires as labeled on the CAN

Sensor module

Note: In some cases (if Er-20 shows on Mobileye EyeWatch display),

you will need to switch between CAN High and CAN Low wires

Mobileye Proprietary and Confidential

support@mobileye.com

Feb, 2016

Page 62 of 65

Если Вы новичок в работе с шиной CAN, обязательно прочтите материал по ссылке.

Выбор и соединение с интерфейсом

  • В верхнем меню программы CARBUS Analyzer выбрать пункт Settings – > Device settings
  • В открывшимся окне, в выпадающем списке Device type выбрать тип Вашего интерфейса.
  • Для интерфейсов с обновленной прошивкой выбрать вариант с индексом CCLCL
    Для интерфейсов с прошивкой версий выпущенных до сентября 2020 года  выбрать вариант без индекса CCLCL

Для двухканальных CAN интерфейсов доступны режимы работы как с шинами CAN и LIN одновременно, так и с CAN и LIN раздельно. Режим выбирается в выпадающем списке Device mode.

Настройка скоростей каналов CAN осуществляется на вкладках Chanel 1: CAN и Chanel 2.
Доступны как предустановленные скорости так и возможность пользовательской настройки.
Выбор предустановленных скоростей осуществляется простым выбором нужной скорости из выпадающего списка Channel baudrate.

Пользовательская скорость задается выбором позиции  Custom baudrate в выпадающем списке Channel baudrate

В появившемся поле ввода Custom baudrate необходимо ввести требуемое значение скорости канала CAN. После ввода скорости автоматически будет произведена попытка расчета делителя тактовой частоты CAN контроллера. Если делитель тактовой будет являться целым числом то введенное значение будет отображаться на белом фоне и после нажатия кнопки ОК, канал CAN будет работать на заданной скорости.

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

В этом случае необходимо установить флаг Low accuracy  и CARBUS Analyzer настроит скорость канала CAN максимально близко к введенному значению. Для того чтобы узнать расчитанное приближенное значение необходимо нажать кнопку “?”

После настройки скоростей CAN нажимаем кнопку ОК, настройки будут переданы в интерфейс и меню Settings  закроется.

После настройки CAN адаптера и CAN каналов в верхнем меню нажать Connect

Прием пакетов

Если CAN-Hacker подключен к одной или двум CAN шинам и скорость CAN определена верно, физическое подключение к шине CAN верно и на шине есть активность, то Вы увидите передаваемые по шине пакеты в окне приема , так как на изображении ниже.

Для удобства анализа данных передаваемых по разным каналам нажмите кнопку Splitter в верхнем меню (отмечена стрелкой на фото выше)  и данные каждого канала будут отображаться в своем окне.

Передача пакетов

Для передачи пакетов в окне Transmit нажмите кнопку Add и сформируйте необходимый пакет. Вы можете выбрать канал передачи, тип ID 11 или 29 бит и период следования пакета при нажатии кнопки Run. Для однократной отправки нажмите Shot. Кроме того, если щелкнуть правой кнопкой мыши по окну Transmit – Вы можете выполнить групповые операции – Run All и Stop All, а так же сохранить и загрузить передаваемые пакеты в файл.
Кнопкой Shot осуществляется однократная отправка выбранного пакета.

Триггеры для автоматической передачи пакетов.

Для автоматической передачи можно настроить триггер для каждого сообщения. В этом случае передача начнется лишь в том случае – если будет принят заданный в настройках триггера пакет. На скриншоте выше триггер настроен следующим образом: Если CAN канал #2 примет пакет с ID=0x123, DLC=8 и массивом данных:
12 34 56 78 12 34 56 78,  то автоматически будет передан пакет с ID=0x321, DLC=8
и массивом данных: 87 65 43 21 87 65 43 21. В данном примере каналы 1 и 2 были объединены физически для наглядности, поэтому автоматически отправленный пакет через канал #2 мы видим принятым в канале #1. Активация триггера происходит при нажатии кнопки RUN для выделенного пакета.

Настройка триггеров. Кликабельно

Битовые поля

Принимаемые пакеты можно представлять в виде битового поля, что удобно, например, при поиске бинарных сигналов, таких как: открытыезакрытые двери, включенывыключены фары, и т. д.
Для представления пакета в виде битового поля необходимо кликнуть правой кнопкой мыши по интересующему пакету и в появившемся контекстном меню кликнуть по       View message bit-map

После чего появится окно с битовым полем выбранного пакета

Фильтры пакетов

Программное обеспечение CARBUS Analyzer позволяет работать как с аппаратными фильтрами CAN пакетов, так и с программным фильтром на заданный диапазон ID.
Отличие аппаратных фильтров заключается в том, что они работают непосредственно в CAN контроллере интерфейса и не влияют на быстродействие программы и прошивки.
Программный фильтр работает в самой программе CARBUS Analyzer поэтому в этом случае программа получает от интерфейса весь поток данных с CAN шины и если этот поток плотный, то это может сказаться на быстродействии. Но при этом настройка программного фильтра намного проще., необходимо только задать диапазон ID, которые необходимо принимать.

Аппаратные CAN фильтры имеют приоритет над программным фильтром!

Аппаратные фильтры находятся на вкладке Hardware таблицы фильтров. Программный фильтр на диапазон ID находится на вкладке Range.

Работа с аппаратными CAN фильтрами

Для работы с CAN фильтрами используйте вкладку в правой части CARBUS Analyzer. Если вы используете монитор с узким экраном, то для вызова окна настройки фильтров нажмите иконку в виде воронки в верхнем меню программы.

Для двухканальных CAN интерфейсов  фильтры с 0 по 12 относятся к CAN каналу 1. Фильтры с 13 по 28 относятся к CAN каналу 2.
Для одноканальных интерфейсов (например CH-OBD.M02) все 28 CAN фильтров относятся к одному каналу CAN.
Соответствие фильтров и CAN каналов отражено в колонке CH таблицы фильтров.

Каждый фильтр и маска могут принимать либо 11 битное либо 29 битное значение. Выбирайте нужный тип исходя из того, какой тип ID Вы хотите добавить в таблицу.

Для настройки фильтра дважды щелкните по нему, что вызовет окно настройки выбранного фильтра.
Если Вы хотите использовать 29-битный – установите флаг 29 bit filter
Задав значение маски и кода фильтра установите флаг Enable Filter и нажмите Set. В таблице фильтров активный фильтр будет выделен установленным флагом напротив него.
Быстрое включениеотключение фильтра возможно при помощи ручной установкиснятия флага напротив фильтра.

Занести нужный ID в таблицу фильтров можно и из окна Receive Monitor или окна Stream.
Для этого необходимо кликнуть правой кнопкой мыши по интересующему ID и в появившемся контекстном меню кликнуть по Add message ID to filter

Принцип задания значений аппаратных фильтров

Принцип настройки CAN фильтров заключается в том, что биты маски указывают на то какие биты поступающего в фильтр ID необходимо учитывать, а значение кода фильтра (поле Filter) указывает на то чему эти указанные маской биты должны бить равны.

Пример:

ID = 7E0  HEX        111 1110 0000‬  BIN

Mask = 7FF  HEX        111 1111 1111  BIN‬

В этом примере, мы говорим CAN контроллеру что необходимо учитывать все 11 бит принимаемого ID, и эти биты должны быть равны = 111 1110 0000‬  BIN    или 7E0.
Таким образом фильтр будет настроен на прием только пакетов имеющих ID=7E0.

Если в этом примере в значении маски заменить последние четыре бита на нули,  маска примет вид Mask = 7F0  HEX    111 1111 0000  BIN‬, то мы скажем CAN контроллеру, что нас не интересуют последние четыре бита (половина байта) принятого ID и приниматься будут все пакеты в диапазоне ID от 7E0 до 7EF.

Если задать значение маски и фильтра равным 00000000, то приниматься будут вообще все пакеты. Если хотя бы один фильтр CAN канала сконфигурирован таким образом, то остальные фильтры этого канала не будут иметь эффекта.

Еще примеры:

Пропускать только пакеты с ID =0x7E8
ID
= 7E8  HEX        111 1110 1000‬  BIN

Mask = 7FF  HEX        111 1111 1111  BIN‬

Пропускать все пакеты  у ID которых девятый бит=1
(1xx, 3xx,5xx, 7xx, где xx—любое число от 0 до FF)
ID
= 100  HEX

Mask = 100  HEX

Для 29-битных ID логика та же самая, при этом длина значения фильтра и маски становятся 29-битными.

Например:
Пропускать только пакеты имеющий 29-битный ID = 0x00000333:
ID = 0x00000333

Mask = 1FFFFFFF

При этом важно понимать, что тип фильтра (11 или 29 бит) зависит не от величины значения фильтра или маски, а зависит от специального флага устанавливаемого CAN контроллером, поэтом ID могут быть:
0x00000333 – 29 бит
0x333 – 11 бит

ВАЖНО: Если все фильтры отключены, то первые фильтры каждого CAN канала настроены на пропускание всех входящих пакетов.

Работа с программным фильтром на диапазон ID

Для того чтобы настроить программный фильтр на диапазон ID необходимо зайти на вкладку Range таблицы фильтров.
Двойной щелчок правой кнопки мыши по фильтру выбранного канала откроет окно настройки.
Диапазон идентификаторов которые будут ПРИНЯТЫ задается в полях From – начальный ID диапазона и To – конечная точка диапазона. Все пакеты имеющие ID из заданного диапазона будут приняты.

В поле Exclude задаются ID которые НЕ НУЖНО принимать в заданном выше диапазоне.
На скриншоте выше задан диапазон ID от 0x100 до 0x200. При этом пакеты с ID равными 0x101,0x102,0x103 – пропускаться не будут.

После завершения настройки фильтра необходимо нажать кнопку SET и фильтр будет активирован.

В примере ниже канал CAN-1 принимает пакеты передаваемые каналом CAN-2 согласно настроенному программному фильтру.

ВАЖНО: Программный Range фильтр не различает 11 битные и 29 битные ID. Поэтому если вы зададите диапазон 0x222….0x333, то пакеты имеющие ID в диапазоне  0x00000222,,, 0x00000333 так же будут приняты.

Работа с логамтрейсами

Для записи потока (Трейса) нажмите в верхнем меню Stream

В открывшимся окне вы сможете записывать поток CAN пакетов последовательно. Для начала записи необходимо нажать кнопку – красный круг. Для остановки кнопки – синий квадрат. (красный круг принимает вид синего квадрата после начала записи и наоборот)
Для сохранения и загрузки трейсов служат крайне праве кнопки в верхнем меню, они отмечены красным прямоугольником на фото выше. Для переключение в режим CAN монитора нажмите кнопку Monitor в верхнем меню.

Для воспроизведение сохраненного потока (трейса) нажмите верхнем меню кнопку Tracer

В открывшимся окне загрузите сохраненный файл потока (трейс) и выберите в списке Only for Channel канал данные которого будут использоваться в работе. Это необходимо для того в случае если поток писался одновременно с двух каналов.

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

Кнопками PlayStop, Step и Repeat, которые имеют соответствующие графические изображения в верхнем меню, Вы сможете управлять воспроизведением потока.

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

Для управления скоростью воспроизведения трейса необходимо нажать иконку таймера задержек, как на изображении ниже, и выбрать необходимую задержку между пакетами.

Режим CAN шлюза

Режим CAN шлюза (CAN Gateway) доступен для двухканальный CAN интерфейсов. Настройки CAN шлюза находятся на вкладке настройки CAN фильтров.
Флаг Transmit CAN1=>CAN2 включает проброс пакетов из канала 1  в канал 2.
Флаг Transmit CAN2=>CAN1 включает проброс пакетов из канала 2  в канал 1.

CAN Bomber

CAN Bomber – это встроенный инструмент который позволяет передавать пакеты в CAN шину с перебором ID и данных. Для перехода в режим Bomber необходимо кликнуть по соответствующей вкладке в нижней части формы программы.

В полях ID from и To задается диапазон перебора ID. Для перебора 29 битных ID необходимо установить флаг 29 bit, находящийся чуть ниже под выпадающим списком Channel.
Режим работы Bomber задается в выпадающем списке Mode. Доступны следующие режимы:
– ID Counter – перебор ID c инкрементом +1
– ID List – перебор ID по списку
– Data counter – перебор байтов данных с фиксированным ID
– Data counter with shift – перебор данных с переносом влево.

Самый просто режим это ID Counter. В этом режиме осуществляется передача пакета с фиксированными данными и перебором ID в заданном диапазоне с инкрементом +1.
Более сложный режим – это ID List.  В этом режиме передача пакета с фиксированными данными осуществляется с ID находящимися в таблице Unique ID List – это список ID для перебора. Добавить ID в таблицу можно вручную, из файла или скопировать все ID из окна Receive Monitor. Выбор способа добавления доступен если кликнуть правой кнопкой мыши по таблице Unique ID List

Для ручного добавления ID нажимаем Add ID. Для удаления – Delete ID

Для добавления ВСЕХ ID из окна принятых пакетов в выпадающем меню выбираем     From receive monitor

Перебор начинается после нажатия кнопки Run. Перебор идет с периодом заданным в поле Period. С каждым ID передается количество пакетов заданное в поле Msg per step.

Для перебора данных выбирается режим  Data counter или Data counter with shift.
В режиме Data counter осуществляется отправка пакета с фиксированным ID и с инкрементом отмеченных флагами байт данных. Инкремент осуществляется на величину указанную в строке Increment=>, индивидуально для каждого байта данных.

В режиме Data counter with shift осуществляется инкремент на заданное значение отмеченных байтов данных. При этом если более правый отмеченный байт переходит через FF, то инкрементируется на +1 отмеченный байт находящийся левее. Так можно перебрать все возможные комбинации байт данных в пакете.

В режиме Bomber присутствует возможность расчета контрольной суммы пакета – CRC. Контрольная сумма применяется на многих автомобилях, и в случае если она не верная, то передаваемые пакеты игнорируются. На автомобилях разных производителей алгоритмы расчета CRC могут отличаться. В Bomber доступно два алгоритма расчета: Toyota (универсальный) и ISO J1850. Режим CRC задается в меню левее Unique ID list.

В режиме Toyota CRC осуществляется сложение по модуля 2 всех отмеченных элементов пакета. А полученное значение вставляется в байт данных выбранный в выпадающем списке Insert CRC to.

В режиме ISO J1850 расчет осуществляется автоматически и полученное значение передается в восьмой байт данных передаваемого пакета.

ВНИМАНИЕ !

Пользуясь программным обеспечением CARBUS Analyzer пользователь безоговорочно принимает правила оказания технической поддержки.

Время на прочтение
9 мин

Количество просмотров 64K

Непосредственно сама CAN шина используется уже много где, мне интересно её использование в автомобиле, хотя этой сферой можно и не ограничиваться. Тем более пару лет назад подвернулась такая возможность. Я посмотрел на общие спецификации — вроде бы ничего особо сложного нет. Посмотрел на программы, которые встречаются в интернете — и ни одна мне не приглянулась, у каждой не хватало чего-то такого, что казалось мне нужным на тот момент. Буду изобретать свой велосипед. Делаю свой CAN sniffer далее под катом.

CAN шина

Описывать технические подробности CAN шины в деталях — удел документации. В данной статье достаточно знать, что она:

  • имеет двухпроводное физическое подключение
  • бывают различные скорости передачи данных
  • для подключения уже имеются готовые микросхемы и даже готовые платы с распаянными деталями

Полистав странички одного известного интернет магазина из поднебесной, я заказал несколько различных вариантов шилдов и пошёл изучать особенности электрических сигналов в автомобиле. Подопытным автомобилем выступил LADA Kalina Cross с 127-ым мотором и электронным блоком управления ИТЭЛМА М74.5 CAN.

Подключаюсь в диагностический разъём OBD (контакты 6 и 14) и смотрю осциллографом, что там имеется. После поворота ключа зажигания начинают бегать пакеты с амплитудой до 2,5 В. Ставлю паузу на осциллографе и смотрю на пакет.

Заметны стартовые и стоповые биты, какие-то данные в пакете. На тот момент я уже знал, что скорость передачи данных ожидается 500 кбит/с, как наиболее частая для моторной CAN шины. Длительность пакета получается около 230 мкс и перед пакетом наблюдается довольно большая пауза в передаче данных. Масштабирую время и вижу три пакета и паузы между ними.

Если сложить длительность передачи данных и паузу между пакетам получается, что передача одной порции данных занимает около 1 мс.

К чему я это всё вывожу? А вопрос чисто практический: хватит ли скорости последовательного порта для передачи всех данных? И исходя из увиденного, можно сделать вывод, что скорость 500 кбит/с развивается внутри пакета, который занимает примерно четверть времени на передачу. Значит средняя скорость передачи будет вчетверо меньшей. На тот момент я ещё не располагал тестами скорости последовательного интерфейса Arduino и забегая вперёд скажу, что даже с самым распространённым преобразователем Serial to USB CH340 стабильно работает скорость в 2 Мбит/с.

CAN scanner на Arduino

Первый прибыл шилд для классической Arduino UNO. Да он стоит значительно дороже своих более мелких собратьев, но он имеет на борту всё необходимое и даже две кнопки.

Именно с ним я и начал все эксперименты. Собрал простую схему с этим шилдом и жидкокристаллическим двухстрочным экраном. Цель была — вывести на экран хоть какие-то данные. Перебирал различные библиотеки для работы с CAN шиной на Arduino (сразу скажу, что правильная и рабочая библиотека называется CAN-BUS Shield by Seeed Studio с заголовочным файлом mcp_can.h, находится по запросу: CAN_BUS_Shield), поменял кварцевый резонатор на шилде на 16 МГц (изначально стоял 8 МГц) — данных не было.

На шилде установлены две микросхемы: контроллер CAN шины MCP2515 и драйвер CAN шины TJA1050. Почитав документацию и различные форумы, решил поменять TJA1050 на более каноничный драйвер MCP2551 и данные появились. Возможно TJA1050 была изначально неисправна, так как с её подключением двумя проводками ошибиться было очень сложно, к тому же я использовал OBD и DB9 разъёмы для подключения.

За пару часов был написан простой CAN scanner, который выводил на жидкокристаллический дисплей номер захваченного пакета, его ID и до 8 байтов данных этого пакета.

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

Про кнопочки

Вообще, эти кнопочки потом много для чего пригодились. Именно с ними я начинал тестирование управления некоторыми устройствами автомобиля.

Начало было положено, надо переходить к более интересной реализации.

CAN sniffer на Arduino

Задача стояла достаточно простая:

  • принимаем пакет из CAN шины
  • укладываем полученные данные в свою структуру
  • отправляем структуру через последовательный порт

С первыми двумя задачами я вообще не видел никаких проблем. Библиотека предоставляла прерывание при приёме очередного пакета данных и удобные функции для получения данных. А вот отправку данных в сторону компьютера решил сделать через библиотеку CyberLib, которая устраняет некоторые накладные расходы всей платформы Arduino, за счёт чего можно немного разгрузить процессор для обработки данных. Позже от этой библиотеки пришлось отказаться.

Для того, чтобы отправляемые данные корректно обрабатывались на стороне компьютера, перед каждой очередной порцией данных в поток вставляется префикс из четырёх байтов 0xAA55AA55 (почему-то вспомнились эти байты по последним двум байтам загрузочного сектора DOS, только они там были в другом порядке). Логика такая:

  • компьютер читает весь поток из последовательного порта и находит в нём искомую последовательность префикса 0xAA55AA55
  • сразу после префикса будут 4 байта идентификатора пакета
  • далее длина данных этого пакета, по ней контролируется длина всего пакета
  • до 8 байтов данных

На этом программная часть в Arduino, на тот момент, была завершена. Позже она была значительно переделана, но общая концепция не поменялась.

Так же я написал простой генератор пакетов данных для отладки, чтобы отлаживаться дома — он просто отправляет в последовательный порт пакеты со случайными данными, что позволяет отлаживать приложение на компьютере в комфортных условиях.

Примерно в это же время прибыли более миниатюрные компоненты Arduino Nano и Mini CAN shield.

Я спроектировал небольшой корпус, распечатал его и разместил внутри все компоненты.

Снаружи с одной стороны OBD разъём, с другой — Mini USB. Внутри имеется переключатель для терминирующего резистора.

CAN sniffer на PC с использованием wxWidgets

Набросал простую заготовку программы на C#, которая выводит в Grid получаемые данные. И пошёл проверять в автомобиль. Только пошёл не со своим ноутбуком, так как у него батарея давно приказала долго жить и использовался он как стационарный компьютер, а взял нетбук с очень слабым процессором. То что я увидел… Я ничего не увидел. Оба ядра загружены на 100%, интерфейс приложения не реагирует. Но на моём компьютере, который всё-таки значительно шустрее нетбука, с генератором случайных пакетов приложение нормально работало и отображало данные. Из этого я сделал вывод, что платформа .NET на слабых компьютерах мне не подойдёт, так как отлаживаться в полевых условиях я мог на тот момент только с тем нетбуком.

Ранее я в нескольких проектах использовал библиотеку wxWidgets и о ней у меня только приятные впечатления. Она легковесная, нет необходимости тащить с собой различные библиотеки и даже кросс-платформенная, что вселяет надежду, что интерфейсную часть кода можно перенести без значительных переделок на другие платформы. В конце статьи будет ссылка на скомпилированную программу, если возиться со всем этим не будет желания.

Как установить и скомпилировать wxWidgets для Visual Studio

Можно скачать и посмотреть видео (менее восьми минут), а можно выполнить 6 шагов по описанию ниже.

Установка и компиляция wxWidgets:

1. Скачать и установить wxWidgets если это установщик, либо распаковать, если это архив

2. Создать переменную окружения WXWIN указывающую на папку, куда установили или распаковали (например C:wxWidgets):

    Свойства системы -> Дополнительные параметры системы -> Переменные среды -> Создать
    WXWIN = C:wxWidgets

3. Из папки C:wxWidgetsbuildmsw открыть файл решения под соответствующую Visual Studio (wx_vc16.sln для Visual Studio 2019)

4. В Solution Expolorer, с помощью клавиши Shift, выделить все проекты, кроме _custom_build и зайти в Properties проектов.

5. В разделе C/C++ -> Code Generation изменить параметр Runtime Library:

    Для конфигурации Debug выбрать /MTd
    Для конфигурации Release выбрать /MT

6. Скомпилировать библиотеки wxWidgets по очереди для Debug и Release конфигураций.

Пробное приложение и настройка проекта в Visual Studio (для проверки)

1. В Visual Studio создать Empty Project с указанием типа приложения Desktop Application (.exe)

2. В окне View -> Property Manager для своего проекта правой кнопкой выбрать меню Add existing property sheet… и выбрать файл:

    C:wxWidgetswxwidgets.props

3. Создать файл main.cpp и скопировать в него содержимое файла:

    C:wxWidgetssamplesminimalminimal.cpp

4. В настройках проекта C/C++ -> Code Generation изменить (если пункт не появился — сделать пробную сборку):

    Runtime Library для конфигурации Debug: /MTd
    Runtime Library для конфигурации Release: /MT

5. Дополнительно, если необходимы привилегии UAC, в разделе Linker -> Manifest File:

    UAC Execution Level: requireAdministrator

6. Для добавления иконки exe-файлу надо добавить ресурсный файл со следующим содержимым:

    #include «wxmswwx.rc»
    wxicon icon app_icon.ico

Первый реализованный прототип на C++ и wxWidgets показал, что даже нетбук справляется с отображением данных в таблице и я приступил к разработке задуманного.

Архитектурно программа состоит из двух потоков: интерфейсный и поток работы с последовательным портом. Никаких невероятно интересных алгоритмов не применялось. Код обильно снабжён комментариями и должен быть довольно понятен. Ссылка на исходники будет в конце статьи.

Первое что было сделано — раскраска ячеек данных в таблице по давности получения этих данных. Уже в первом прототипе, глядя на 17 строк данных меняющихся непрерывно значений, я понял, что надо как-то различать свежие данные и данные, которые не изменяются или меняется редко. Сделал раскраску в два этапа:

  • впервые пришедшие данные выделяются зелёным цветом фона ячеек
  • данные пришедшие повторно и далее — выделяются красным фоном, который постепенно выцветает до белого если больше эти данные не меняются

Сразу же стало наглядно видно, какие ячейки вообще не используются, какие содержат сигналы счётчиков. Поиск же интересующих изменяющихся значений значительно упрощается. Здесь и далее все изображения анимированные. Если анимация не работает в статье (на некоторых мобильных браузерах) — кликайте по изображению для открытия полной версии анимации.

Далее мне захотелось всё-таки проверить, справляется ли последовательный порт с потоком данных. Для этого я на стороне Arduino добавил счётчики количества принятых пакетов и счетчик байтов в пакете. Эти счётчики отправляются на компьютер в пакете с идентификатором 0x000. Программа при получении этих данных не выводит их в таблицу, а отображает в отдельных информационных полях сверху. Полученные результаты даже весьма понравились. В среднем принимается до 750 пакетов/с со скоростью до 9,5 кБ/с, а это где в районе до 80 кбит/с, что вполне по силам последовательному порту. Но всё равно, обмен данными настроен по умолчанию на 500 кбит/с, пусть лучше будет запас.

Добавление возможности записи данных в журнал появилось после того, как подключил параллельно к OBD интерфейсу диагностический адаптер ELM327 и связав его с телефоном, попробовал читать различные данные. Данные пробегали настолько быстро, что увидеть их невозможно. Записав всё это в журнал, можно потом спокойно сесть и посмотреть передаваемые данные. Для этого в журнал могут записываться даже ASCII текстовые данные. Так же можно выбирать тип файла, символ разделитель и настроить фильтр пакетов кликом в таблице по указанному идентификатору пакета и нажатию кнопки «Добавить ID в фильтр» (по умолчанию записываются все данные), если запись всех данных избыточна.

Именно тогда пришло осознание, что все приложения для телефона, которые производят всякую «диагностику» через связку ELM327 и телефон, не общаются напрямую с CAN шиной автомобиля. Они всего лишь используют функционал диагностики OBD через CAN шину посредством обращения к CAN ID 0x7E0. Обычно это адрес контроллера мотора (ЭБУ), ответ же от него приходит в пакете с идентификатором 0x7E8. А вот все остальные пакеты данных — это так называемый Vendor Specific и ни один производитель так просто их не раскроет (хотя есть пример: Ford выпустил SDK для своих автомобилей).

Продолжая изучать что же передаётся в этих пакетах пришёл к ещё одной идее: при клике на ячейку в таблице, в окне программы справа выводить двоичное и десятичное значение этого байта, а так же брать следующий байт и дополнять до слова. Далее это слово умножать на некий коэффициент и получить десятичный результат. Звучит не очень понятно, но вот в связи с чем это делалось: обороты мотора приходят в пакете CAN ID 0x180, в первых двух байтах. Эти два байта дают некое слово, которое пропорционально оборотам. Если значение этого слова разделить на 8, то получатся текущие обороты. Поэтому указывается множитель 0,125, как обратная величина от 8. Далее это слово визуализируется в графике с динамической подстройкой по амплитуде. В принципе, множитель можно искать в обратной последовательности: нашёл ячейки, которые по графику очень похожи на обороты мотора или ещё что-то искомое, после чего подгоняется множитель для получения действительных значений.

Ну а двоичное представление позволяет искать различные битовые индикаторы. Например поиск индикаторов указателей поворота сводится к тому, чтобы включить их и наблюдать какая ячейка начинает изменяться, в примере ниже это CAN ID 0x481 байт 2. После чего клик по ячейке приводит к отображению её двоичного значения в соответствующем поле, где уже видны переключающиеся младшие два бита (левый, правый и если вместе — аварийная сигнализация).

И напоследок мне понадобилось сделать отправку некоторых управляющих данных в CAN шину и посмотреть реакцию на эти команды. В программу на Arduino был добавлен код, который принимает данные со стороны компьютера и передаёт в CAN шину. Именно на этом этапе пришлось отказаться от CyberLib, так как у неё не было поддержки прерывания поступления данных в буфер последовательного порта. В программе на компьютере добавил несколько текстовых полей, в которые можно ввести различные параметры и таблицу для просмотра ответа исполнительного устройства. В примере ниже показаны команды управления включить/отключить первую скорость вентилятора охлаждения (0x0A) и включить/отключить муфту кондиционера (0x0B).

Итог

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

Ниже даны ссылки на все исходники и приложение для Windows. Поддерживаются микроконтроллеры Arduino (передача данных через последовательный порт) и ESP8266 (передача данных через последовательный порт или Wi-Fi). Приложение для Windows содержит две ветки кода, самые свежие изменения в ветке develop.

  • Исходники CAN Sniffer (Arduino/ESP side)
  • Исходники wxCAN Sniffer
  • Приложение wxCAN Sniffer

Надеюсь, что всё это будет полезно не только мне.

  1. Manuals
  2. Brands
  3. Victron energy Manuals
  4. Temperature Controller
  5. CAN-bus Temp sensor

Manuals and User Guides for Victron energy CAN-bus Temp sensor. We have 1 Victron energy CAN-bus Temp sensor manual available for free PDF download: Manual

Понравилась статья? Поделить с друзьями:
  • Должностная инструкция единственного бухгалтера малого предприятия
  • Нурофен экспресс 200 мг инструкция по применению для детей
  • Служба судебных приставов москвы руководство
  • Цитиколин инструкция по применению цена в ампулах 500мг
  • Асд 2 фракция инструкция по применению для птицы бройлеров