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

Поменять местами числа

Ответить

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

Поменять местами числа

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

Здравствуйте! Нужна помощь в написании программы
У меня имеется два поля ввода, в одно вводится верхнее пороговое значение, в другое нижнее. Нужно написать программу чтобы при вводе в поле верхнего порогового значения числа меньшего чем есть в поле нижнего порогового значения, числа менялись местами.(иными словами защита от дурака) Я написала вот такую программу, она написана правильно, но не работает, так как надо, а в чем проблема понять не могу. Да и по сути если она заработает, то как сделать чтоб значения полей менялись не до конца понятно.
tag5 - привязан к полю верхнего порогового значения
tag6 - привязан к полю нижнего порогового значения
Программа привязана через настройки поля верхнего порогового значения Events-Output/Input Value-Change:

#include "apdefap.h"
void OnPropertyChanged(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, double value)
{
int tag5;
int tag6;

tag5=GetTagByte("tag5"); //Return-Type: BOOL
tag6=GetTagByte("tag6"); //Return-Type: BOOL


if (tag5<tag6) tag5=tag6; //Return-Type: BOOL
else tag5=tag5;
}

POV
корифей
корифей
Сообщения: 768
Зарегистрирован: 12 авг 2008, 11:05
Имя: Патрушев Олег Валерьевич
Страна: Россия
город/регион: г. Н.Новгород
Благодарил (а): 105 раз
Поблагодарили: 146 раз

Поменять местами числа

Сообщение POV »

А просто привязать соответствующие теги к границам ввода, как везде принято, нельзя?
Думаете, когда у пользователя значения туда-сюда прыгать будут, он вам спасибо скажет?

olexsa
эксперт
эксперт
Сообщения: 1254
Зарегистрирован: 29 май 2009, 21:40
Имя: Александр
Страна: Россия
город/регион: Курган
Благодарил (а): 77 раз
Поблагодарили: 159 раз

Поменять местами числа

Сообщение olexsa »

Nute 1993 писал(а): 29 мар 2023, 20:24 Нужно написать программу чтобы при вводе в поле верхнего порогового значения числа меньшего чем есть в поле нижнего порогового значения, числа менялись местами
А зачем?
Nute 1993 писал(а): 29 мар 2023, 20:24 (иными словами защита от дурака)
В чем именно защита?

Parliament74
авторитет
авторитет
Сообщения: 817
Зарегистрирован: 16 ноя 2016, 11:33
Имя: Максим Владимирович
Страна: Россия
город/регион: Магнитогорск
Благодарил (а): 16 раз
Поблагодарили: 211 раз

Поменять местами числа

Сообщение Parliament74 »

Nute 1993 писал(а): 29 мар 2023, 20:24 Я написала вот такую программу, она написана правильно, но не работает, так как надо, а в чем проблема понять не могу.
Как говорил нам преподаватель по программированию: "если программа делает то, что нужно, значит она написана правильно", обратное утверждение, я подозреваю, тоже верно )
Nute 1993 писал(а): 29 мар 2023, 20:24 {
int tag5;
int tag6;

tag5=GetTagByte("tag5"); //Return-Type: BOOL
tag6=GetTagByte("tag6"); //Return-Type: BOOL

if (tag5<tag6) tag5=tag6; //Return-Type: BOOL
else tag5=tag5;
}
Что-то мне подсказывает, то надо после оператора if then else (или в само then/else) добавить что-то в стиле: SetTagByte("tag5",tag5). А то непосредственно в тэг, связанный с окном ввода, никакое значение и не записывается, с внутренними переменными только какие-то операции присвоения происходят.

В C-скриптах на WinCC, ЕМНИП, можно вообще без объявления дополнительных переменных это сделать:
if (GetTagByte("tag5")<GetTagByte("tag6")) SetTagByte("tag5",GetTagByte("tag6"));
else SetTagByte("tag5",GetTagByte("tag5");

по-моему, даже после else можно ничего не указывать, "tag5" каким был, таким и остаётся )

makesstr
осмотрелся
осмотрелся
Сообщения: 194
Зарегистрирован: 19 сен 2019, 10:09
Имя: Макс
Страна: Россия
город/регион: Славянск-на-Кубани
Благодарил (а): 5 раз
Поблагодарили: 34 раза

Поменять местами числа

Сообщение makesstr »

В I/O Field есть поле Limits, в котором есть Low Limit Value(LLV) и High Limit Value(HLV).
К Tag5 LLV привязываете Tag6, а к Tag6 HLV привязываете Tag5.
Так оператор просто не сможет ошибиться, если он только не вобьет одинаковые цифры в tag5 и tag6.
Надо не поощрять и исправлять ошибки дураков, а не давать им возможность ошибиться и сообщить об их ошибке. :ges_slap:
WinCC 7.4 SP1 Upd15, Step5.6
Ответить

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