Скрипт долго выполняется

Работа с панелями оператора Weintek - подключение, программирование, совмещение с ПЛК

Модераторы: kiv, 8bit, VanMo

Скрипт долго выполняется

Сообщение pinguin007 » 07 дек 2021, 09:53

Здраствуйте! Написал скрипт для чтение данных с ПЛК, зависимости от полученных данных скрипт записывает во внутренние регистры данные, которые влияют на цвет объекта. Скрипт очень долго отрабатывает. Имитирую ситуацию на ПЛК, когда объект должен прокрасится в красный, и приходится ждать по 30 сек, чтобы на панельке это увидеть
Код: Выделить всё
short status,result,tmp,statusInt =0
GetData(statusInt, "PLC_MB_TCP", "AI_VU_1.StatWordInt", 1)
GetData(status, "PLC_MB_TCP", "AI_VU_1.StatWord", 1)
// 1 = yellow
// 2 = orang
// 3 = red
// 4 = white
// 5 = white
// 6 = green

if statusInt==-2 or statusInt==3 then
   tmp = 3
   SetData(tmp, "Local HMI", "AI_1.Status", 1)
else if statusInt==-1 or statusInt==1 then
   tmp = 1
   SetData(tmp, "Local HMI", "AI_1.Status", 1)
else if statusInt==2 then
   tmp = 2
   SetData(tmp, "Local HMI", "AI_1.Status", 1)   
else
   tmp = 6
   SetData(tmp, "Local HMI", "AI_1.Status", 1)   
end if   


GETBIT(status, result, 0)

if result==0 then
   tmp = 4
   SetData(tmp, "Local HMI", "AI_1.Status", 1)
end if

GETBIT(status, result, 7)
if result==1 then
   tmp = 5
   SetData(tmp, "Local HMI", "AI_1.Status", 1)
end if


Вот пример кода, этот участок еще 40 раз скопирован в скрипте. Может есть какая нибудь оптимизация или доп. настройка
pinguin007
 
Сообщения: 16
Зарегистрирован: 05 ноя 2020, 09:54

Re: Скрипт долго выполняется

Сообщение 8bit » 07 дек 2021, 15:05

А просто создать 10 картинок объекта нужных цветов (на каждое состояние свой цвет, всего 256 состояний) и добавить их в свою библиотеку, а потом привязать этот объект "Числовой индикатор" к AI_1.Status не работает ?
Хороший вопрос содержит половину ответа - A good question contains half the answer
Аватара пользователя
8bit
 
Сообщения: 1108
Зарегистрирован: 20 апр 2020, 19:07

Re: Скрипт долго выполняется

Сообщение pinguin007 » 07 дек 2021, 15:57

8bit писал(а):А просто создать 10 картинок объекта нужных цветов (на каждое состояние свой цвет, всего 256 состояний) и добавить их в свою библиотеку, а потом привязать этот объект "Числовой индикатор" к AI_1.Status не работает ?

Так и сделано, в скриптах вычисляется значения AI_1.Status по каждому каналу. AI_1.Status привязан к объекту.
pinguin007
 
Сообщения: 16
Зарегистрирован: 05 ноя 2020, 09:54

Re: Скрипт долго выполняется

Сообщение 8bit » 07 дек 2021, 16:10

pinguin007 писал(а):
8bit писал(а):А просто создать 10 картинок объекта нужных цветов (на каждое состояние свой цвет, всего 256 состояний) и добавить их в свою библиотеку, а потом привязать этот объект "Числовой индикатор" к AI_1.Status не работает ?

Так и сделано, в скриптах вычисляется значения AI_1.Status по каждому каналу. AI_1.Status привязан к объекту.


с какой целью используете макрос ?
Хороший вопрос содержит половину ответа - A good question contains half the answer
Аватара пользователя
8bit
 
Сообщения: 1108
Зарегистрирован: 20 апр 2020, 19:07

Re: Скрипт долго выполняется

Сообщение pinguin007 » 07 дек 2021, 16:45

8bit писал(а):
pinguin007 писал(а):
8bit писал(а):А просто создать 10 картинок объекта нужных цветов (на каждое состояние свой цвет, всего 256 состояний) и добавить их в свою библиотеку, а потом привязать этот объект "Числовой индикатор" к AI_1.Status не работает ?

Так и сделано, в скриптах вычисляется значения AI_1.Status по каждому каналу. AI_1.Status привязан к объекту.


с какой целью используете макрос ?



Для определение цвета объекта "Числовой индикатор"
1) Считываем значение с ПЛК
2) Согласно полученному значению, выставляем значение AI_1.Status
3) AI_1.Status привязан к объекту "Числовой индикатор"
4) объекта "Числовой индикатор" меняет цвет согласно AI_1.Status

На прямую соединить регистр из ПЛК к объекту не получится
pinguin007
 
Сообщения: 16
Зарегистрирован: 05 ноя 2020, 09:54

Re: Скрипт долго выполняется

Сообщение 8bit » 07 дек 2021, 16:53

pinguin007 писал(а):
На прямую соединить регистр из ПЛК к объекту не получится


1) по-хорошему все вычисления должны происходить в ПЛК, а панель/SCADA только отображение текущей ситуации и передача команд оператора в ПЛК....
2) можете попробовать разбить один большой макрос на несколько (возможно до 40) работающих параллельно
3) если алгоритм определения цвета для AI_1.Status унифицирован, то можете его упаковать в функцию и в макросе вызывать эту функцию для каждого аргумента
AI_1 , AI_2, AI_3 и т.д. Можно так же раскидать на несколько макросов
4) если входная величина и тип AI_1 одинаковы, то можно в Адресных метках создать метки и задать там преобразование через функцию макроса, в которой формировать номер состояния, годный для прикрепления к цветовой картинке
Хороший вопрос содержит половину ответа - A good question contains half the answer
Аватара пользователя
8bit
 
Сообщения: 1108
Зарегистрирован: 20 апр 2020, 19:07

Re: Скрипт долго выполняется

Сообщение ArtemPM » 07 дек 2021, 17:03

И еще совет. Попробуйте воспользоваться GetDataEx в связке с GetError.
В вашем случае сильно тормозить выполнение скрипта может опрос тегов.

И еще вариант: так как у вас модбас, то если есть возможность, опрашивайте теги пачкой, можно даже все 80 сразу, если это позволяет ПЛК.
ArtemPM
 
Сообщения: 197
Зарегистрирован: 14 апр 2021, 05:16

Re: Скрипт долго выполняется

Сообщение 8bit » 07 дек 2021, 17:08

ArtemPM писал(а):И еще вариант: так как у вас модбас, то если есть возможность, опрашивайте теги пачкой, можно даже все 80 сразу, если это позволяет ПЛК.


Речь о функции GetData(var_in[0], "Local HMI", LW, 501, 100), где 100 - это количество элементов, которые надо считать с устройства "Local HMI", начиная с адреса 501 и поместить в массив var_in[0], начиная с элемента номер 0
Хороший вопрос содержит половину ответа - A good question contains half the answer
Аватара пользователя
8bit
 
Сообщения: 1108
Зарегистрирован: 20 апр 2020, 19:07

Re: Скрипт долго выполняется

Сообщение pinguin007 » 08 дек 2021, 16:49

Спасибо за рекомендации
pinguin007
 
Сообщения: 16
Зарегистрирован: 05 ноя 2020, 09:54


Вернуться в Weintek

Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [Bot] и гости: 2