1

Тема: Kalina2 прием и отправка в CAN

Добрый день. Помогите пожалуйста реализовать следующий алгоритм работы.
Для чего:
Установил сигнализацию, состояние дверей она читает по CAN, и часто не видит что последняя дверь закрылась, и при постановке на охрану срабатывает что дверь (любая какая закрывалась последней) открыта.
Так же стоит Canny и в зависимости какая дверь открыта там включается подсветка.
Добавил программу "Аварийка", и когда закрывается последняя дверь, моргает аварийка (канал 7). Блок (штатный) посылает сообщение с  id481 и тогда сигнализация считывает что двери закрыты.
Канал 7 последний, и хочется его использовать для других целей.
Какой нужен алгоритм:
При изменении id481 XX XX 00 00 00 00 00 00, послать это же сообщение (без изменения). D2 - D7 могут быть любые, их пересылать без изменений.
Если XX в  D1 или D0 меняли своё состояние биты 5, 7 и 12 (отвечают за состояние дверей), (любой из них или все), но посылать сообщение один раз когда эти биты равны 0.

Заранее спасибо.

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

Иконка вложения Двери450.cfd 5.5 кб, скачивался 344 раз, последний раз 2018-12-24 

2

Re: Kalina2 прием и отправка в CAN

Павел78 пишет:

Какой нужен алгоритм:
При изменении id481 XX XX 00 00 00 00 00 00, послать это же сообщение (без изменения). D2 - D7 могут быть любые, их пересылать без изменений.
Если XX в  D1 или D0 меняли своё состояние биты 5, 7 и 12 (отвечают за состояние дверей), (любой из них или все), но посылать сообщение один раз когда эти биты равны 0.

Не совсем понятно, требуется ли обнулять указанные биты по отдельности или все сразу.
Во вложении вариант решения с обнулением всех нужных бит разом. При получении сообщения с положением установленных бит, отличным от полученных ранее (любой из них или все сразу), 1 раз отправляется сообщение, в котором все эти биты установлены в 0.

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

Иконка вложения Двери450_1.cfd 6.64 кб, скачивался 342 раз, последний раз 2018-12-24 

3

Re: Kalina2 прием и отправка в CAN

Добрый день. Спасибо за быстрый ответ.
Сообщение с id481 посылается ЦБКЭ, обнулять эти биты не нужно, а отправлять сообщение (продублировать) если эти биты (5, 7 и 12) равны 0 (в данный момент), но перед этим хоть один (или все) из битов менял своё состояния. ( Если эти биты равны 0 значит все двери закрыты, а если перед этим бит (ы) менял своё состояние значит дверь открывались. Другие биты в D1 и D0 могут меняться но это не имеет отношения к дверям, и при этих изменениях ни должно происходить ни каких действий. Как то так.
У меня в диаграмме используется два адреса id481 и id551, просто вторая часть диаграммы работает и я её убрал.
В добавленной части где "Рег.чтен.CAN D3:D2 и т.д. D7:D6" нужно как то обозначить откуда прочитать?
И ещё один вопрос, пробовал отправлять контроллер в режим пониженного энергопотребления, но тогда диаграмма плохо работает, не всегда видит статус дверей, приходится несколько раз подряд открывать - закрывать дверь. Так и должно быть?

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

Иконка вложения Двери450_2.cfd 5.24 кб, скачивался 343 раз, последний раз 2018-12-25 

4

Re: Kalina2 прием и отправка в CAN

Говоря об обнулении бит я имел в виду именно обнуление только в случае выполнения нужного условия, т.е. получено сообщение 0x481 и в нем изменилось состояние бит. Таким образом, предложенное мной решение отвечает описанному алгоритму.
Работа в диаграмме с несколькими ID не повлияет на работу предложенного решения, при условии что отправка сообщений должна выполняться только по получении одного ID=0x481. Важна не запись значений регистров принятого сообщения в регистры сообщения передачи, а момент начала передачи, т.е. записи "1" в соответствующий регистр.
В представленном примере это случается только при одновременном выполнении ряда условий, а именно: получено сообщение с нужным ID (ID=0x481 и регистр наличия принятых данных CAN не равен 0), произошло изменение значений нужных бит этого сообщения. Если эти условия выполнены, то на данном проходе диаграммы регистры приема сообщения CAN содержат данные последнего полученного сообщения, т.е. сообщения с ID=0x481, и на этом же цикле будет дана команда на отправку сообщения CAN, т.е. отправятся корректные данные.
Кстати, по описанному алгоритму, если произойдет изменение значения бит с 0 на 1, т.е. если сообщение с ID=0x481 отправляется ЦБКЭ и при открытии двери, контроллером также будет отправляться сообщение с обнулением этих бит. Возможно требуется провести дополнительные исследования этого вопроса и подкорректировать алгоритм.
По вопросу использования режима пониженного энергопотребления. Пришлите фрагмент диаграммы своей реализации перехода в спящий режим.

5

Re: Kalina2 прием и отправка в CAN

Денис спасибо.
Сегодня проверил, работает, но алгоритм немного не такой как хотелось.
Сообщения дублируются при любом изменении битов, а нужно только при изменении битов с 1 на 0, любого из трёх, но равняться должны все три (значит все двери закрылись).
На картинке верхняя часть с canny, все сообщения дублируются, а в нижней при отключенной canny.
И добавил спящий режим.

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

Двери2.png, 15.26 кб, 321 x 532
Двери2.png 15.26 кб, скачивался 346 раз, последний раз 2018-12-26 

Иконка вложения Двери450_4.cfd 11.32 кб, скачивался 341 раз, последний раз 2018-12-26 

6

Re: Kalina2 прием и отправка в CAN

Т.е. на картинке сверху работа лог при работе контроллера с диаграммой Двери450_4.cfd.
Во вложении доработанный алгоритм отправки сообщений при изменнии любого из нужных бит с 1 на 0.
Добавлена индикация режима работы зеленым светодиодом контроллера: пока не спит - коротко моргает с периодичностью 2 раза в секунду, при отправке сообщения в CAN - включается на 2 секунды (как было в исходной диаграмме).
Режим сна сделан в общем правильно. Активность интерфейсов будет присутствовать при активности на шине, не смотря на использование фильтров. Нужно более детально изучать условия возникновения пропуска сообщений. Можно попробовать увеличить задержку перехода в сон, например до 1 минуты, и посмотреть на результат.

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

Иконка вложения Двери450_4a.cfd 11.97 кб, скачивался 346 раз, последний раз 2018-12-27 

7

Re: Kalina2 прием и отправка в CAN

Спасибо, диаграмма с can работает.
Со спящим режимом проблема.
Можно реализовать алгоритм, при появлении импульса на 10 канале (постановка на сигнализацию) модуль погружается в сон, а при повторном появлении импульса (снятие с охраны) выходит из сна. И больше ни какие события не влияли на сон.
Как задаётся длительность сна?

8

Re: Kalina2 прием и отправка в CAN

Длительность фазы "сна" CANNY7 задается с помощью специального регистра.
По умолчанию длительность фазы сна составляет приблизительно 1000мс.

9

Re: Kalina2 прием и отправка в CAN

Спасибо за помощь. Всё что хотел, реализовал.