1 (23-09-2017 12:15:18 отредактировано TrialZuki)

Тема: Дублирование значения из входящего CAN ID в два исходящих CAN ID

Прошу помощи- пожалуйста прорвете работоспасобность и правильность схемы. Хочу минимизировать количество поездок до машины на которую это нужно установить ~100км )

Задача такая.
Нужно сделать так чтобы при получении IDL=0xC8 генерировались два новых сообщения IDL=0x0A и IDL=0x0B и при этом чтобы содержимое D5:D4 из входящего сообщения дублировалось в D5:D4 и D7:D6 обоих исходящих.

Вот что сейчас у меня получилось:

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

Иконка вложения дублирование.png 31.25 кб, скачивался 184 раз, последний раз 2017-09-23 

2

Re: Дублирование значения из входящего CAN ID в два исходящих CAN ID

Каких-либо ошибок не обнаружил. Должно правильно работать. Главное, чтобы 2 новых сообщения успевали отправляться в интервалах между приходами ID=0xc8.
Ну и вместо блока №8 "Исключающее или" можно использовать обычное логическое или, но в данном случае это не принципиально.

3 (24-09-2017 09:00:18 отредактировано TrialZuki)

Re: Дублирование значения из входящего CAN ID в два исходящих CAN ID

Спасибо за проверку!

Почитав другие темы я так понял что если интервал между сообщениями IDL=0xc8 больше 5мс(примерное время одного цикла обработки схемы) то они будут успевать обрабатыватся в любом случае?

Если я не буду использовать блок  Триггер D - в таком случае не будет риска что при отправке сообщения я прочитаю D5:D4 из другого IDL?

4

Re: Дублирование значения из входящего CAN ID в два исходящих CAN ID

Относительно небольшие диаграммы выполняются довольно быстро. На длительность цикла выполнения диаграммы влияет размер диаграммы (количество блоков), типы использованных функциональных блоков, использование драйверов контроллера. Ваша диаграмма скорее всего будет выполняться ~1мс.
В данном случае использовать D-триггер необходимо, т.к. полученные на одном цикле выполнения диаграммы данные нужно использовать в последующих циклах. Актуальность данных в регистрах принятого сообщения CAN гарантируется только на проходе диаграммы, в котором в регистре наличия данных CAN установлено значение "1", т.е. в цикле, когда они получены. Обойтись без D-триггера можно только если отправка сообщения в CAN, с данными на основе полученных данных, осуществляется на том же цикле выполнения диаграммы, что и получение сообщения CAN, т.е. пока данные актуальны.

5

Re: Дублирование значения из входящего CAN ID в два исходящих CAN ID

Все понятно - спасибо!
И пожалуйста прошу ответить еще на один вопрос, надеюсь последний:

Блоки детектор переднего и детектор заднего фронта - сработают только по одному разу для каждого IDL=0xc8?

Или IDL=0x0A будет отсылатся каждый цикл пока последнее полученное IDL=0xc8, а сообщение с IDL=0x0B будет отсылатся каждый раз когда в полученном сообщение IDL не равно 0xc8? Я пробывал реализовать схему в которой на одно сообщение полученное IDL=0хс8 будет отправлено одно сообщение с IDL=0x0A и сразу за ним сообщение c IDL=0x0B.

6

Re: Дублирование значения из входящего CAN ID в два исходящих CAN ID

Попробую сам ответить на свой вопрос почитав wiki:
http://wiki.canny.ru/index.php?title=%D … 1%82%D0%B0
и
http://wiki.canny.ru/index.php?title=%D … 1%82%D0%B0

Получается сообщение с IDL=0x0A будет отправлено один раз когда будет получено сообщение с IDL=0xc8, а сообщение с IDL=0x0B будет отправлено один раз как только будет получено любое следующее сообщение у которого IDL не равно 0xc8

это значит что если будет получено подряд несколько сообщений с IDL=0xc8 то будет отправлено несколько сообщений с IDL=0x0A, а сообщение с IDL=0x0B будет отправлено только один раз и только в случае если в схема получит наконец сообщение в котором IDL не равно 0xc8.

Верно?

Как же все таки сделать так чтобы на каждое одно полученное IDL=0xc8 было отправлено одно IDL=0x0A и сразу за ним одно IDL=0x0B?

И спасибо за внимание )

7

Re: Дублирование значения из входящего CAN ID в два исходящих CAN ID

Логика такова...
Если на первом цикле выполнения диаграммы будет получен IDL=0xC8, то на этом же цикле будет отослано сообщение с IDL=0x0A, а на следующем цикле выполнения диаграммы сообщение с IDL=0x0B, при условии, что на этом новом цикле, вдруг, не будет снова получено сообщение с IDL=0xС8.
Детектор переднего фронта сработает когда условия получено IDL=0xC8 и Есть данные CAN выполнится, на следующем цикле должен будет сработать детектор заднего фронта, при условии что на новом цикле эти условия не выполняются.
Для проверки работы алгоритма используйте симулятор, моделируя предпосылки срабатывания условий Вашего алгоритма.

8

Re: Дублирование значения из входящего CAN ID в два исходящих CAN ID

Благодарю разобрался!
Использование симулятора - облегчает понимание )