Страница 1 из 1

макрос на выполнение

СообщениеДобавлено: 25 фев 2018, 22:09
vnloginov
Доброго вечера друзья!

панель MT8070iH

Помогите с макросом, я в макросах не очень силен.

Что есть: время в самой панели LW-9012 (часы) и LW-9011 (минуты), переменные датчика движения: М40 и М43 и RGB модуль с адресами R - 1#1, G-1#2, B-1#3.
что нужно: с 10-00 на модуль RGB в адреса RGB записалось значение 0 на датчики движения не реагируем. С 18-00 при срабатывании датчика движения пишем в адреса R G B значение 255 (белый свет) при отсутствии движения пишем в R G B значение 0, и так до 23-00 с этого времени при срабатывании датчиков движения пишем значение в RGB равное 150 и так работаем до 10-00. и далее по кругу.

Помогите кому не сложно.

Re: макрос на выполнение

СообщениеДобавлено: 26 фев 2018, 07:00
Владимир_Я
vnloginov писал(а):RGB модуль с адресами R - 1#1, G-1#2, B-1#3

Не указали какой протокол, допустил что Modbus.
Получается:
Код: Выделить всё
macro_command main()
short hours, RGB[3]

GetData(hours, "Local HMI", LW, 9012, 1)


if hours>=10 and hours<18 then
RGB[0]=0
RGB[1]=0
RGB[2]=0
end if

if hours>=18 and hours<23 then
RGB[0]=255
RGB[1]=255
RGB[2]=255
end if

if hours>=23 and hours<10 then
RGB[0]=150
RGB[1]=150
RGB[2]=150
end if

SetData(RGB[0], "RGB", 4x, 1, 3)

end macro_command


Выполнять макрос по "триггерам ПЛК", когда M40 или M43 включаются (режим OFF->ON).

Код: Выделить всё
macro_command main()
short  RGB[3], M40, M43

GetData(M40, "ПЛК", M, 40, 1)
GetData(M43, "ПЛК", M, 43, 1)

if M40==0 and M43==0 then

RGB[0]=0
RGB[1]=0
RGB[2]=0
SetData(RGB[0], "RGB", 4x, 1, 3)

end if



end macro_command


Выполнять макрос по "триггерам ПЛК", когда M40 или M43 выключаются (режим ON->OFF).

Re: макрос на выполнение

СообщениеДобавлено: 26 фев 2018, 22:50
vnloginov
Владимир_Я писал(а):
vnloginov писал(а):RGB модуль с адресами R - 1#1, G-1#2, B-1#3

Не указали какой протокол, допустил что Modbus.
Получается:
Код: Выделить всё
macro_command main()
short hours, RGB[3]

GetData(hours, "Local HMI", LW, 9012, 1)


if hours>=10 and hours<18 then
RGB[0]=0
RGB[1]=0
RGB[2]=0
end if

if hours>=18 and hours<23 then
RGB[0]=255
RGB[1]=255
RGB[2]=255
end if

if hours>=23 and hours<10 then
RGB[0]=150
RGB[1]=150
RGB[2]=150
end if

SetData(RGB[0], "RGB", 4x, 1, 3)

end macro_command


Выполнять макрос по "триггерам ПЛК", когда M40 или M43 включаются (режим OFF->ON).

Код: Выделить всё
macro_command main()
short  RGB[3], M40, M43

GetData(M40, "ПЛК", M, 40, 1)
GetData(M43, "ПЛК", M, 43, 1)

if M40==0 and M43==0 then

RGB[0]=0
RGB[1]=0
RGB[2]=0
SetData(RGB[0], "RGB", 4x, 1, 3)

end if



end macro_command


Выполнять макрос по "триггерам ПЛК", когда M40 или M43 выключаются (режим ON->OFF).


Да Вы верно подметили, протокол модбас, есть у меня пробный скрипт который включает голубой свет
Код: Выделить всё
macro_command main()

short a, b, c

a = 0 //R
b = 0 //G
c = 255 //B

SetData(a, "Arduino", 4x, 1#1, 1)
SetData(b, "Arduino", 4x, 1#2, 1)
SetData(c, "Arduino", 4x, 1#3, 1)

end macro_command


пробую сейчас с вашим скриптом, пока что то не выходит...

Re: макрос на выполнение

СообщениеДобавлено: 27 фев 2018, 20:11
vnloginov
Все работает, спасибо.

вот если бы еще подсказочку....

в скрипте сделал поправочку что бы ребенок днем радовался, и добавил delay для смены цвета. а можно как то сделать что бы циклично выполнялся данный код? или будет конфликт?

Код: Выделить всё
if hours>=18 and hours<23 then
RGB[0]=255
RGB[1]=255
RGB[2]=255
SetData(RGB[0], "Arduino", 4x, 1, 3)
DELAY (1000)
RGB[0]=255
RGB[1]=0
RGB[2]=0
SetData(RGB[0], "Arduino", 4x, 1, 3)
DELAY (1000)
RGB[0]=0
RGB[1]=0
RGB[2]=255
SetData(RGB[0], "Arduino", 4x, 1, 3)
DELAY (1000)
RGB[0]=0
RGB[1]=255
RGB[2]=0
SetData(RGB[0], "Arduino", 4x, 1, 3)
end if


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

Re: макрос на выполнение

СообщениеДобавлено: 28 фев 2018, 05:35
Владимир_Я
Заведите где-нибудь в настройках переменную для отключения/включения режима мигания. В примере это переменная LB-0.
Код: Выделить всё
macro_command main()
bool flashing
short m40, m43,hours, RGB[3]

GetData(hours, "Local HMI", LW, 9012, 1)
GetData(flashing, "Local HMI", LB, 0, 1)

if hours>=18 and hours<23 then
   
   if flashing then // если разрешён режим моргания
   
      while  M40<>0 or M43<>0 // Пока хотя бы один из датчиков активен
      
      RGB[0]=255
      RGB[1]=255
      RGB[2]=255
      SetData(RGB[0], "Arduino", 4x, 1, 3)
      DELAY (1000)
      RGB[0]=255
      RGB[1]=0
      RGB[2]=0
      SetData(RGB[0], "Arduino", 4x, 1, 3)
      DELAY (1000)
      RGB[0]=0
      RGB[1]=0
      RGB[2]=255
      SetData(RGB[0], "Arduino", 4x, 1, 3)
      DELAY (1000)
      RGB[0]=0
      RGB[1]=255
      RGB[2]=0
      SetData(RGB[0], "Arduino", 4x, 1, 3)
   
      GetData(M40, "ПЛК", M, 40, 1)
      GetData(M43, "ПЛК", M, 43, 1)
   
      wend
       //датчик отключился - выключаем свет
      RGB[0]=0 
      RGB[1]=0
      RGB[2]=0
      SetData(RGB[0], "Arduino", 4x, 1, 3)
      
   else // если запрещён режим морагния
      RGB[0]=255
      RGB[1]=255
      RGB[2]=255
      SetData(RGB[0], "Arduino", 4x, 1, 3)
   end if
end if
end macro_command