Тема: Потеря сообщений при приеме
Добрый день всем! На днях столкнулся с очередной проблемой. Суть такова: требуется отправлять в CAN значение запроса оборотов двигателя, принятое с резистивной педали акселератора, при условии, что оно превышает предустановленное значение оборотов холостого хода, которое можно извлечь из сообщения конфигурации двигателя. (Минимальное значение оборотов хх – 600 об/мин). Схема преобразования значения АЦП и схема приема конфигурации двигателя работают корректно и описанный алгоритм работает, но по какой-то причине конфигурация двигателя (EC1), отправляемая раз в 5 секунд, принимается CANNY раз в десять реже, если не более. Т.е., если, допустим в ЕС1 обороты хх выставлены не 600 об/мин, а 900 об/мин, а с педали выдается, например, 800 об/мин, то в CAN все равно отправляется значение с педали. Отправляемое значение обнуляется лишь изредка, после того, как CANNY все-таки «выловил» EC1 (обнаружение CANNY EC1 детектировал визуально с помощью зеленого светодиода, присоединенного к старшей части идентификатора сообщения).
Как показали наблюдения, с уменьшением периода отправки EC1, частота его приема в CANNY все-таки увеличивается. Но так же рандомно. Перебор значений задержек в схеме не привел к успеху, потому что EC1 может прийти как раз в секунду, так и раз в минуту.
Загрузка шины только сообщениями, которые видны в диаграмме на прием и на отправку.
Ни приоритет, ни периодичность ЕС1 поменять мы не можем.
Я так предполагаю, проблема в том, что буфер CANNY заполняется сообщениями, отправляемыми с большей частотой, а EC1 CANNY просто не успевает обработать. Но почему тогда при установке задержек для удержания принятого значения оборотов вплоть до минуты, отправляемое значение все равно сбрасывается через несколько секунд?
Надеюсь, проблему описал понятно. Диаграмма во вложении. Сабж в самом низу диаграммы и выделен красными рамочками.