1

Тема: Подтормаживание на сложной диаграмме

Делаю достаточно объемную диаграмму для своего автомобиля.
В процессе отладки обнаружилось, что canny 7 "не успевает" обработать некоторые данные при большом количестве элементов в диаграмме. Подробнее:

В файле с окончанием "short" урезанная версия диаграммы (полная, - соответственно, "full"). В урезанной версии все статусы, взятые из шины can (стостояние педали тормоза, состояние положения P на селекторе коробки и пр.) отображаются достаточно быстро, если для наглядности любой из них вывести на  регистр зеленого светодиода.

Но если запустить полную версию, то светодиод отрабатывает с запозданием. Запоздание по времени не фиксировано, от мгновенного срабатывания, до 1 секунды).

Отсюда вопрос. Это естественное следствие невысокой вычислительной мощности устройства, плохая оптимизация диаграммы или откровенные ошибки в диаграмме, тормозящие работу устройства?

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

Иконка вложения c7_project_ECU_plus_1.4.1_full.cfd 47.03 кб, скачивался 355 раз, последний раз 2020-01-23 

Иконка вложения c7_project_ECU_plus_1.4.1_short.cfd 6.39 кб, скачивался 198 раз, последний раз 2020-01-23 

2

Re: Подтормаживание на сложной диаграмме

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

3 (23-01-2020 17:18:50 отредактировано ser9ga)

Re: Подтормаживание на сложной диаграмме

В блоке на изображении ENG_RUN_STATUS - состояние двигателя остановлен/запущен. Т.к. при остановке двигателя последнее сообщение с IDL 0x02C4 содержит данные об оборотаx в момент выключения зажигания, то для достоверности статуса   ENG_RUN_STATUS добавил условие того, что с момента последнего сообщения с IDL 0x02C4 прошло не более 100мс. Период отправки сообщений с данным id около 35мс. Т.е. задержки в 100мс должно хватать с двух кратным запасом. В short диаграмме так и происходит. Зеленый светодиод корректно отображает статус работы двигателя. В full - так же отображает, но "моргает", т.е. постоянно тухнет на ~10-100мс.

4

Re: Подтормаживание на сложной диаграмме

При высоких скоростях обмена данными по CAN, при высокой плотности передаваемых данных, а также при относительно больших диаграммах могут наблюдаться пропуски поступающих CAN-сообщений. В этих случаях рекомендуется использовать фильтры драйвера CAN, которые позволяют контроллеру отбрасывать все сообщения, не удовлетворяющие фильтрам, что снижает нагрузку на драйвер и позволяет получать и обрабатывать только нужные данные.
Длительность цикла выполнения диаграммы short - 0,7мс. Диаграмма full больше и включает в себя отправку данных в CAN, длительность выполнения ее цикла около 4,5мс, что при отсутствии фильтрации CAN наверняка приводило к пропуску сообщений.
Во вложении full-диаграмма с добавленными CAN-фильтрами и конфигурацией каналов ввода-вывода, без которой входы и выходы не будут работать (установку можно изменить в зависимости от требуемых потенциалов на каналах). Попробуйте ее в работе и сообщите пожалуйста результаты.

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

Иконка вложения c7_project_ECU_plus_1.4.1_full_1.cfd 48.55 кб, скачивался 218 раз, последний раз 2020-01-23 

5

Re: Подтормаживание на сложной диаграмме

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

длительность выполнения ее цикла около 4,5мс

А каким образом можно замерить длительность цикла?
Тоже проблема в большой диаграмме, но не со чтением данных а с их отправкой: по мере усложнения диаграммы, не успевает в отведенные периоды все больше и больше. Что то с этим сделать возможно?

6

Re: Подтормаживание на сложной диаграмме

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

длительность выполнения ее цикла около 4,5мс

А каким образом можно замерить длительность цикла?
Тоже проблема в большой диаграмме, но не со чтением данных а с их отправкой: по мере усложнения диаграммы, не успевает в отведенные периоды все больше и больше. Что то с этим сделать возможно?

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

7

Re: Подтормаживание на сложной диаграмме

invite пишет:

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

Не совсем. К сожалению, симулятор не отражает реальной картины, особенно в части работы драйверов, работы контроллера.

Alyans пишет:

А каким образом можно замерить длительность цикла?

Единственный достоверный способ это узнать - отправить значение "Регистра контроля длительности программного цикла, мс" в CAN или UART и отследить его в CAN-мониторе или Терминале ПК.