1 (27-05-2021 15:15:29 отредактировано Deavil)

Тема: первое сообщение висит в памяти

Добрый день.
Есть три ID: 123 00 00 00 10 00 00 00 00 - ДВС запущен
                   123 00 00 00 20 00 00 00 00 - ДВС заглушен.
                   
                   234 37 38 - зарядка есть
                   234 39 38 - зарядки нет

               от 345 00 00 01 00 00 00 00 00 до 345 00 00 07 00 00 00 00 00 - степень заряда АКБ.

Необходимо двумя выходами коммутировать нагрузку, при условии что ДВС запущен + зарядка есть, при степени заряда от 1 до 2 первый выход (на диаграмме зеленый светодиод) от 3 до 7 второй  выход (на диаграмме красный светодиод).
На столе канхакером посылаю пакеты в Canny и не могу решить две проблемы:
1. Когда все три условия совпадают, светодиод загорается. Но меняю в ID 234 первый байт с 37 на 39 (имитирую отсутствие зарядки) и выход не отключается. Так же и с состоянием ДВС. На выключение выходов влияет лишь смена байтов ID345. Пробовал ставить на первые два ID детекторы передних фронтов, но тогда вообще ничего не работает.
2. Не могу понять как отфильтровать именно третий байт в ID345 для переключения выходов по заданным условиям. У меня переключение выходов идёт уже по смене 00 на 01.

Спасибо!

Вложений в сообщении

Иконка вложения диаграмма.png 165.27 кб, скачивался 53 раз, последний раз 2021-05-27 

Иконка вложения для форума.cfd 4.71 кб, скачивался 124 раз, последний раз 2021-05-27 

2

Re: первое сообщение висит в памяти

1. Режим фильтрации можно не включать
2. Сдвиг там не нужно использовать (блок 4 и 14). Вместо них надо делать маску отбора

Это то что прям с ходу по палось

3 (27-05-2021 16:27:19 отредактировано Deavil)

Re: первое сообщение висит в памяти

По фильтрации я так понимаю это вообще желательно, снизит нагрузку на ЦП. Там в реальной машине почти по 80 адресам пакеты идут, смысл их грузить.

По маске можно поподробнее? Нигде не встречал в примерах такое. Она вроде применяется при ретрансляции сообщений, в обработке внутри диаграммы не видел ещё.

4 (27-05-2021 16:32:12 отредактировано wertyh2003)

Re: первое сообщение висит в памяти

В примере отбирается D2 и потом только это значение сравнивается с 0010.
Для отбора D3 меняется маска на FF00 и потом уже сравниваем например с 1000

Вложений в сообщении

Иконка вложения для форума1.cfd 980 б, скачивался 124 раз, последний раз 2021-05-27 

5

Re: первое сообщение висит в памяти

Мне кажется, лучше было сделать так (см.вложение).
Основная проблема это выделение байта D2 из ID=0x345 и использование D-триггера.

Вложений в сообщении

Иконка вложения c7_для форума.cfd 5.37 кб, скачивался 133 раз, последний раз 2021-05-27 

6

Re: первое сообщение висит в памяти

Денис, CANNY пишет:

Мне кажется, лучше было сделать так (см.вложение).
Основная проблема это выделение байта D2 из ID=0x345 и использование D-триггера.

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

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

7

Re: первое сообщение висит в памяти

Deavil пишет:

По фильтрации я так понимаю это вообще желательно, снизит нагрузку на ЦП.

Правильно. Более того, отсутствие фильтрации на практике зачастую приводит к пропуску/потере контроллером сообщений CAN.