1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

Как в WinCC сделать так, чтобы программа выполнялась только 1 раз?

Модератор: Глоб.модераторы

Ответить

Автор темы
Nute 1993
здесь недавно
здесь недавно
Сообщения: 7
Зарегистрирован: 22 фев 2023, 04:32
Имя: Анастасия
Страна: Россия
город/регион: Красноярск

Как в WinCC сделать так, чтобы программа выполнялась только 1 раз?

Сообщение Nute 1993 »

Здравствуйте вот такая программа, она выполняется как цикл, а мне нужно, чтобы она выполнялась только 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

ogorsv
специалист
специалист
Сообщения: 642
Зарегистрирован: 02 дек 2015, 06:57
Имя: Огородников Сергей
Страна: РФ
Благодарил (а): 136 раз
Поблагодарили: 111 раз

Как в WinCC сделать так, чтобы программа выполнялась только 1 раз?

Сообщение ogorsv »

Добрый день!

Один из вариантов (синтаксис уточните):

BOOL First_scan;

If not First_scan then
// ваши операторы
SET(First_scan);
End_if;
СВ

SMax
не первый раз у нас
не первый раз у нас
Сообщения: 325
Зарегистрирован: 17 июн 2016, 14:18
Имя: Максим
Благодарил (а): 7 раз
Поблагодарили: 118 раз

Как в WinCC сделать так, чтобы программа выполнялась только 1 раз?

Сообщение SMax »

Nute 1993 писал(а): 06 май 2023, 12:58 а мне нужно, чтобы она выполнялась только 1 раз
А 1 раз это когда? Вызову функции должно предшествовать какое-то событие, конечно будет циклически если вызывается по триггеру вместе с обновлением картинки. И вообще где именно располагается эта функция? В глобальных скриптах или на одном из элементов картинки?

Можно и так как вам уже подсказали, это при первом вызове функции и навсегда, до следующего перезапуска WinCC
Только синтаксис немного другой:

BOOL First_scan;

If (!First_scan)
{
// ваши операторы
First_scan = 1;
}

Автор темы
Nute 1993
здесь недавно
здесь недавно
Сообщения: 7
Зарегистрирован: 22 фев 2023, 04:32
Имя: Анастасия
Страна: Россия
город/регион: Красноярск

Как в WinCC сделать так, чтобы программа выполнялась только 1 раз?

Сообщение Nute 1993 »

ogorsv писал(а): 06 май 2023, 14:10 Добрый день!

Один из вариантов (синтаксис уточните):

BOOL First_scan;

If not First_scan then
// ваши операторы
SET(First_scan);
End_if;
Точно, я забыла написать верхушку, это С-скрипт, 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 секунд:
SMax писал(а): 06 май 2023, 16:11
Nute 1993 писал(а): 06 май 2023, 12:58 а мне нужно, чтобы она выполнялась только 1 раз
А 1 раз это когда? Вызову функции должно предшествовать какое-то событие, конечно будет циклически если вызывается по триггеру вместе с обновлением картинки. И вообще где именно располагается эта функция? В глобальных скриптах или на одном из элементов картинки?

Можно и так как вам уже подсказали, это при первом вызове функции и навсегда, до следующего перезапуска WinCC
Только синтаксис немного другой:

BOOL First_scan;

If (!First_scan)
{
// ваши операторы
First_scan = 1;
}
Точно, я забыла написать верхушку, это С-скрипт, он находится в поле ввода: настройки: Events-Output/Input-Output Value-Change, end_if здесь не работает к сожалению. У меня там еще два поля ввода tag3 и tag5, и когда значение в tag5>tag3, tag1 увеличивается на ту величину в процентном соотношение, насколько tag5>tag3, и это событие должно только один раз произойти.

#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));
}
}

Автор темы
Nute 1993
здесь недавно
здесь недавно
Сообщения: 7
Зарегистрирован: 22 фев 2023, 04:32
Имя: Анастасия
Страна: Россия
город/регион: Красноярск

Как в WinCC сделать так, чтобы программа выполнялась только 1 раз?

Сообщение Nute 1993 »

SMax писал(а): 06 май 2023, 16:11
Nute 1993 писал(а): 06 май 2023, 12:58 а мне нужно, чтобы она выполнялась только 1 раз
А 1 раз это когда? Вызову функции должно предшествовать какое-то событие, конечно будет циклически если вызывается по триггеру вместе с обновлением картинки. И вообще где именно располагается эта функция? В глобальных скриптах или на одном из элементов картинки?

Можно и так как вам уже подсказали, это при первом вызове функции и навсегда, до следующего перезапуска WinCC
Только синтаксис немного другой:

BOOL First_scan;

If (!First_scan)
{
// ваши операторы
First_scan = 1;
}
Этот вариант работает, ну то есть он несколько раз уменьшает пока тег5 больше тега 6, а мне нужно именно, чтобы он только 1 раз уменьшился и больше не уменьшался.

ogorsv
специалист
специалист
Сообщения: 642
Зарегистрирован: 02 дек 2015, 06:57
Имя: Огородников Сергей
Страна: РФ
Благодарил (а): 136 раз
Поблагодарили: 111 раз

Как в WinCC сделать так, чтобы программа выполнялась только 1 раз?

Сообщение ogorsv »

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;
СВ

stesl
эксперт
эксперт
Сообщения: 1035
Зарегистрирован: 31 мар 2018, 12:05
Имя: Вячеслав
Благодарил (а): 100 раз
Поблагодарили: 141 раз

Как в WinCC сделать так, чтобы программа выполнялась только 1 раз?

Сообщение stesl »

Nute 1993,
В WinCC нет программ, есть скрипты. В первом топике текст линейного алгоритма с условным ветвлением. Какие циклы?... У Вас серъёзный провал в программировании. Помочь в формате форума трудно. Читайте литературу, или хотя бы ролики смотрите.
Ответить

Вернуться в «WinCC»