PDA

Просмотр полной версии : Цикличная запись команды между ПР102-1 (Master) и ПР102-2 (Slave)



shprot
26.04.2021, 07:30
Составил сценарий по управлению светом на взаимодействие 2-х ПР102.
В ПР102-2 есть макрос с автосбросом "виртуальной кнопки" с значения 1 на 0. Такой же макрос записан и в ПР102-1. В режиме выполнения программы из физических входов, то есть с реальных кнопок все работает как и задумывалось.
А вот при отправке команды, например, включить контур света, который подключен к ПР102-2 то ПР102-1 (в режиме Master) отправляет эту команду (в виде единицы) на ПР102-2 (в режиме Slave), затем согласно макроса команда выполняется - свет включается. а "виртуальная кнопка" сбрасывается в состояние 0. После этого ПР102-1 получает ответ, что команда сброшена на 0 и повторяет отправку команды 1, и снова по макросу она сбрасыватся на 0. И так повторяется снова и снова. В результате получается цикличное включение-выключение-включение и т.д. света вместо единоразового включения или выключения.
Вопрос в том, как прервать эту цикличность чтобы работало корректно как через физические кнопки, так и через команды из облака по принципу обычного кнопочного выключателя без фиксации?

Коротко для чего нужен такой сценарий с автосбросом виртуальной кнопки - чтобы в облаке отправлять всего одну команду (с значением 1) на включение или выключение света вместо двух команд - сначала 1, затем 0.
Если есть другие решения этого момента, то буду благодарен в предложенных вариантах

Файлы программы прикладываю

Ревака Юрий
26.04.2021, 09:33
Добрый день. Тут https://youtu.be/alT2Oi_fFho есть похожие примеры, скорее всего "зацикливание" происходит из-за постоянной записи, или не установлен чекбокс "запись в конце цикла".

shprot
28.04.2021, 20:08
Добрый вечер, пересмотрел видео раз 10, не понял для чего нужен каждый элемент в приложенном проекте. Также не понятно как это переработать его под мою задачу. Чекбокс "запись в конце цикла" не нашел в свойствах переменных.

Godlike_S
28.04.2021, 20:52
Наворотили Вы конечно зачётно. Для начала было бы неплохо использовать битовые маски состояний, использовать для передачи состояния один регистр очень расточительно.
Для чего булевое состояние преобразовывать в целочисленное а потом опять в булевое честно говоря не понял))) И тем более не понял зачем делать автосброс переменной, достаточно просто подать импульс (но для этого придется покопаться в настройках мастера сети).

shprot
29.04.2021, 07:34
Автосброс для имитации импульсной кнопки с управления через облако, иначе в облаке чтобы включить/выключить нужно сначала отправлять команду со значением 1, а затем 0. Когда можно всего лишь отправить 1 и он сам сбросится на 0.
Если есть другие варианты этого решения то буду благодарен за подсказку

Ревака Юрий
29.04.2021, 11:21
Добрый вечер, пересмотрел видео раз 10, не понял для чего нужен каждый элемент в приложенном проекте. Также не понятно как это переработать его под мою задачу. Чекбокс "запись в конце цикла" не нашел в свойствах переменных.

Добрый день. Уточнил по проекту, да про "запись в конце цикла" это не в этом проекте, это в проекте мастера появляется, в моем примере режим Slave. Чтобы понять как работает достаточно запустить режим симуляции, под Вашу задачу не факт что подойдет все, но сами механизмы управления из нескольких мест, это как раз и вызывает у всех вопросы. Если кратко, идея в том чтобы везде была актуальная информация о состоянии выхода, независимо от того включен он через облако или через экран прибора или с дискретного входа. "чтобы в облаке отправлять всего одну команду (с значением 1) на включение или выключение света вместо двух команд - сначала 1, затем 0." в моем примере этот момент отображается состоянием, если в сетевом регистре "0", значит выход выключен и для удаленного включения нужно отправить "1", если в регистре "1" значит вход включен и для выключения отправляем "0", не постоянно писать "1" а еще и знать состояние. Так же состояние выхода может измениться по месту через дискретный вход или экран и в облаке эта информация так же должна изменится, в этом кратко идея примера, дальше адаптировать уже под свой пример.

Godlike_S
29.04.2021, 11:45
Автосброс для имитации импульсной кнопки с управления через облако, иначе в облаке чтобы включить/выключить нужно сначала отправлять команду со значением 1, а затем 0. Когда можно всего лишь отправить 1 и он сам сбросится на 0.
Если есть другие варианты этого решения то буду благодарен за подсказку

Так в мастере и реализуйте, зачем это в слейв тащить?
Состояние самого исполнительного устройства в облаке надо отражать?

shprot
29.04.2021, 12:13
Так в мастере и реализуйте, зачем это в слейв тащить?
Состояние самого исполнительного устройства в облаке надо отражать?

Если я правильно понял то дописать программу в мастере и выгружать в сетевые переменные, а затем эти сетевые переменные выгрузить в слейве?

shprot
29.04.2021, 12:15
Добрый день. Уточнил по проекту, да про "запись в конце цикла" это не в этом проекте, это в проекте мастера появляется, в моем примере режим Slave. Чтобы понять как работает достаточно запустить режим симуляции, под Вашу задачу не факт что подойдет все, но сами механизмы управления из нескольких мест, это как раз и вызывает у всех вопросы. Если кратко, идея в том чтобы везде была актуальная информация о состоянии выхода, независимо от того включен он через облако или через экран прибора или с дискретного входа. "чтобы в облаке отправлять всего одну команду (с значением 1) на включение или выключение света вместо двух команд - сначала 1, затем 0." в моем примере этот момент отображается состоянием, если в сетевом регистре "0", значит выход выключен и для удаленного включения нужно отправить "1", если в регистре "1" значит вход включен и для выключения отправляем "0", не постоянно писать "1" а еще и знать состояние. Так же состояние выхода может измениться по месту через дискретный вход или экран и в облаке эта информация так же должна изменится, в этом кратко идея примера, дальше адаптировать уже под свой пример.

Кажется понял, попробую приспособить к своей задаче

shprot
02.05.2021, 06:24
Внедрил ваш макрос и проблему с цикличной записью решил, но как сделать отображение статуса света в облаке? То есть включаю свет отправкой с облака команды 1, он включается, затем хочу отключить физическим выключателем - приходится нажимать 2 раза, только после этого свет выключается, но статус виртуальной кнопки в облаке не меняется на 0 и чтобы повторно включить свет через облако, нужно отправить сначала 0, затем 1. Как это исправить?
Измененный макрос прикладываю
54931

И можете подсказать какой блок в схеме управления из 3-х мест за что отвечает, также не понятны для чего служат переменные com, com_rs, com_LCD, write to FB.
Также момент по используемому приложению на телефоне, в видео не увидел как называется

Godlike_S
02.05.2021, 11:45
Внедрил ваш макрос и проблему с цикличной записью решил, но как сделать отображение статуса света в облаке? То есть включаю свет отправкой с облака команды 1, он включается, затем хочу отключить физическим выключателем - приходится нажимать 2 раза, только после этого свет выключается, но статус виртуальной кнопки в облаке не меняется на 0 и чтобы повторно включить свет через облако, нужно отправить сначала 0, затем 1. Как это исправить?
Измененный макрос прикладываю
54931

И можете подсказать какой блок в схеме управления из 3-х мест за что отвечает, также не понятны для чего служат переменные com, com_rs, com_LCD, write to FB.
Также момент по используемому приложению на телефоне, в видео не увидел как называется

Опять не в ту сторону копаете!

Сергей0308
02.05.2021, 17:22
Внедрил ваш макрос и проблему с цикличной записью решил, но как сделать отображение статуса света в облаке? То есть включаю свет отправкой с облака команды 1, он включается, затем хочу отключить физическим выключателем - приходится нажимать 2 раза, только после этого свет выключается, но статус виртуальной кнопки в облаке не меняется на 0 и чтобы повторно включить свет через облако, нужно отправить сначала 0, затем 1. Как это исправить?
Измененный макрос прикладываю
54931

И можете подсказать какой блок в схеме управления из 3-х мест за что отвечает, также не понятны для чего служат переменные com, com_rs, com_LCD, write to FB.
Также момент по используемому приложению на телефоне, в видео не увидел как называется

Как-то расточительно для одной дискретной команды отдавать целый регистр, может битовую маску дискретных сигналов сделать, в 16 раз меньше регистров потребуется:

54936

54937

shprot
02.05.2021, 19:55
Как-то расточительно для одной дискретной команды отдавать целый регистр, может битовую маску дискретных сигналов сделать, в 16 раз меньше регистров потребуется:

54936

54937

Попробовал вашу схему, но функции Extract и Putbit у меня имеют другие входы/выходы, отличные от скриншота у вас. Возможно это у вас измененные макросы этих функций?

Сергей0308
02.05.2021, 20:04
Попробовал вашу схему, но функции Extract и Putbit у меня имеют другие входы/выходы, отличные от скриншота у вас. Возможно это у вас измененные макросы этих функций?

Так я же и проект выложил, непонятно в чём проблема, можно любой макрос создать, какой сочтёте нужным?!

shprot
02.05.2021, 20:06
Так я же и проект выложил, непонятно в чём проблема, можно любой макрос создать, какой сочтёте нужным?!

Прошу прощения, не увидел, смотрел только на приложенный скриншот

Ревака Юрий
03.05.2021, 12:08
Внедрил ваш макрос и проблему с цикличной записью решил, но как сделать отображение статуса света в облаке? То есть включаю свет отправкой с облака команды 1, он включается, затем хочу отключить физическим выключателем - приходится нажимать 2 раза, только после этого свет выключается, но статус виртуальной кнопки в облаке не меняется на 0 и чтобы повторно включить свет через облако, нужно отправить сначала 0, затем 1. Как это исправить?
Измененный макрос прикладываю
54931

И можете подсказать какой блок в схеме управления из 3-х мест за что отвечает, также не понятны для чего служат переменные com, com_rs, com_LCD, write to FB.
Также момент по используемому приложению на телефоне, в видео не увидел как называется

Вроде в видео все показал и рассказал, пришлось самому пересмотреть и вспомнить:
com-общая команда поступающая на реле
com_rs-команда управления постопающая через интерфейс (панель оператора, облако и т.д)
com_LCD-команда управления с экрана
com_DI-команда управления через дискретный вход
write to FB-записывает уставку для задержки выключения по таймеру, задается с экрана
Приложение на смартфоне Virtuino, работает в паре с сетевой платой wi-fi, там или mqtt или Modbus TCP протокол.
Ну и конечно если дискретных каналов много, логично объединить их в один регистр до 16 бит и читать/писать только одну сетевую переменную, а уже по месту распаковывать/упаковывать биты.

shprot
03.05.2021, 13:59
Опять не в ту сторону копаете!

Попробовал вашу схему, при отправки команды через облако сохраняется такая же цикличность

Godlike_S
04.05.2021, 09:17
Попробовал вашу схему, при отправки команды через облако сохраняется такая же цикличность

А какая у Вас скорость обмена?

shprot
04.05.2021, 11:23
А какая у Вас скорость обмена?

115200 в обоих устройствах (ПР1 и ПР2)

shprot
10.05.2021, 11:33
Немного подправил программы, цикличного включения/выключения теперь нет, зато если включить свет через облако, то при отключении с кнопки, свет снова включается. Будто у облака приоритет на управление - если там стоит значение 0, то хоть сколько включай через кнопку, свет все равно отключается, также и наоборот.
И перестало работать центральное отключение света (I2 в ПР1)