Здравствуйте вот такая программа, она выполняется как цикл, а мне нужно, чтобы она выполнялась только 1 раз, подскажите пожалуйста как это сделать? Насколько я помню это делается командой END, но не в этой программе.
float tag1;
float tag3;
float tag5;
tag1=GetTagByte("tag1"); //Return-Type: BYTE
tag3=GetTagByte("tag3"); //Return-Type: BYTE
tag5=GetTagByte("tag5"); //Return-Type: BYTE
{if (tag5>tag3) SetTagByte("tag1",tag1*((tag3/tag5)+1));} //Return-Type: BOOL
- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
Как в WinCC сделать так, чтобы программа выполнялась только 1 раз?
Модератор: Глоб.модераторы
-
- здесь недавно
- Сообщения: 7
- Зарегистрирован: 22 фев 2023, 04:32
- Имя: Анастасия
- Страна: Россия
- город/регион: Красноярск
-
- специалист
- Сообщения: 642
- Зарегистрирован: 02 дек 2015, 06:57
- Имя: Огородников Сергей
- Страна: РФ
- Благодарил (а): 136 раз
- Поблагодарили: 111 раз
Как в WinCC сделать так, чтобы программа выполнялась только 1 раз?
Добрый день!
Один из вариантов (синтаксис уточните):
BOOL First_scan;
If not First_scan then
// ваши операторы
SET(First_scan);
End_if;
Один из вариантов (синтаксис уточните):
BOOL First_scan;
If not First_scan then
// ваши операторы
SET(First_scan);
End_if;
СВ
-
- не первый раз у нас
- Сообщения: 325
- Зарегистрирован: 17 июн 2016, 14:18
- Имя: Максим
- Благодарил (а): 7 раз
- Поблагодарили: 118 раз
Как в WinCC сделать так, чтобы программа выполнялась только 1 раз?
А 1 раз это когда? Вызову функции должно предшествовать какое-то событие, конечно будет циклически если вызывается по триггеру вместе с обновлением картинки. И вообще где именно располагается эта функция? В глобальных скриптах или на одном из элементов картинки?
Можно и так как вам уже подсказали, это при первом вызове функции и навсегда, до следующего перезапуска WinCC
Только синтаксис немного другой:
BOOL First_scan;
If (!First_scan)
{
// ваши операторы
First_scan = 1;
}
-
- здесь недавно
- Сообщения: 7
- Зарегистрирован: 22 фев 2023, 04:32
- Имя: Анастасия
- Страна: Россия
- город/регион: Красноярск
Как в WinCC сделать так, чтобы программа выполнялась только 1 раз?
Точно, я забыла написать верхушку, это С-скрипт, end_if здесь не работает к сожалению
#include "apdefap.h"
void OnPropertyChanged(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, double value)
{
float tag1;
float tag3;
float tag5;
tag1=GetTagByte("tag1"); //Return-Type: BYTE
tag3=GetTagByte("tag3"); //Return-Type: BYTE
tag5=GetTagByte("tag5"); //Return-Type: BYTE
{if (tag5>tag3) SetTagByte("tag1",tag1*((tag3/tag5)+1));
}
}
Отправлено спустя 6 минут 38 секунд:
Точно, я забыла написать верхушку, это С-скрипт, он находится в поле ввода: настройки: Events-Output/Input-Output Value-Change, end_if здесь не работает к сожалению. У меня там еще два поля ввода tag3 и tag5, и когда значение в tag5>tag3, tag1 увеличивается на ту величину в процентном соотношение, насколько tag5>tag3, и это событие должно только один раз произойти.SMax писал(а): ↑06 май 2023, 16:11А 1 раз это когда? Вызову функции должно предшествовать какое-то событие, конечно будет циклически если вызывается по триггеру вместе с обновлением картинки. И вообще где именно располагается эта функция? В глобальных скриптах или на одном из элементов картинки?
Можно и так как вам уже подсказали, это при первом вызове функции и навсегда, до следующего перезапуска WinCC
Только синтаксис немного другой:
BOOL First_scan;
If (!First_scan)
{
// ваши операторы
First_scan = 1;
}
#include "apdefap.h"
void OnPropertyChanged(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, double value)
{
float tag1;
float tag3;
float tag5;
tag1=GetTagByte("tag1"); //Return-Type: BYTE
tag3=GetTagByte("tag3"); //Return-Type: BYTE
tag5=GetTagByte("tag5"); //Return-Type: BYTE
{if (tag5>tag3) SetTagByte("tag1",tag1*((tag3/tag5)+1));
}
}
-
- здесь недавно
- Сообщения: 7
- Зарегистрирован: 22 фев 2023, 04:32
- Имя: Анастасия
- Страна: Россия
- город/регион: Красноярск
Как в WinCC сделать так, чтобы программа выполнялась только 1 раз?
Этот вариант работает, ну то есть он несколько раз уменьшает пока тег5 больше тега 6, а мне нужно именно, чтобы он только 1 раз уменьшился и больше не уменьшался.SMax писал(а): ↑06 май 2023, 16:11А 1 раз это когда? Вызову функции должно предшествовать какое-то событие, конечно будет циклически если вызывается по триггеру вместе с обновлением картинки. И вообще где именно располагается эта функция? В глобальных скриптах или на одном из элементов картинки?
Можно и так как вам уже подсказали, это при первом вызове функции и навсегда, до следующего перезапуска WinCC
Только синтаксис немного другой:
BOOL First_scan;
If (!First_scan)
{
// ваши операторы
First_scan = 1;
}
-
- специалист
- Сообщения: 642
- Зарегистрирован: 02 дек 2015, 06:57
- Имя: Огородников Сергей
- Страна: РФ
- Благодарил (а): 136 раз
- Поблагодарили: 111 раз
Как в WinCC сделать так, чтобы программа выполнялась только 1 раз?
float delta;
float delta_old;
delta = tag5 - tag3;
if delta > delta_old then //в зависимости от того, что проверяете, может быть и delta <> delta_old
tag1 = (tag3/tag5)+1;
delta_old := delta;
end_if;
float delta_old;
delta = tag5 - tag3;
if delta > delta_old then //в зависимости от того, что проверяете, может быть и delta <> delta_old
tag1 = (tag3/tag5)+1;
delta_old := delta;
end_if;
СВ
-
- эксперт
- Сообщения: 1035
- Зарегистрирован: 31 мар 2018, 12:05
- Имя: Вячеслав
- Благодарил (а): 100 раз
- Поблагодарили: 141 раз
Как в WinCC сделать так, чтобы программа выполнялась только 1 раз?
Nute 1993,
В WinCC нет программ, есть скрипты. В первом топике текст линейного алгоритма с условным ветвлением. Какие циклы?... У Вас серъёзный провал в программировании. Помочь в формате форума трудно. Читайте литературу, или хотя бы ролики смотрите.
В WinCC нет программ, есть скрипты. В первом топике текст линейного алгоритма с условным ветвлением. Какие циклы?... У Вас серъёзный провал в программировании. Помочь в формате форума трудно. Читайте литературу, или хотя бы ролики смотрите.