Здравствуйте! Нужна помощь в написании программы
У меня имеется два поля ввода, в одно вводится верхнее пороговое значение, в другое нижнее. Нужно написать программу чтобы при вводе в поле верхнего порогового значения числа меньшего чем есть в поле нижнего порогового значения, числа менялись местами.(иными словами защита от дурака) Я написала вот такую программу, она написана правильно, но не работает, так как надо, а в чем проблема понять не могу. Да и по сути если она заработает, то как сделать чтоб значения полей менялись не до конца понятно.
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;
}
- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
Поменять местами числа
-
- здесь недавно
- Сообщения: 7
- Зарегистрирован: 22 фев 2023, 04:32
- Имя: Анастасия
- Страна: Россия
- город/регион: Красноярск
-
- корифей
- Сообщения: 768
- Зарегистрирован: 12 авг 2008, 11:05
- Имя: Патрушев Олег Валерьевич
- Страна: Россия
- город/регион: г. Н.Новгород
- Благодарил (а): 105 раз
- Поблагодарили: 146 раз
Поменять местами числа
А просто привязать соответствующие теги к границам ввода, как везде принято, нельзя?
Думаете, когда у пользователя значения туда-сюда прыгать будут, он вам спасибо скажет?
Думаете, когда у пользователя значения туда-сюда прыгать будут, он вам спасибо скажет?
-
- эксперт
- Сообщения: 1254
- Зарегистрирован: 29 май 2009, 21:40
- Имя: Александр
- Страна: Россия
- город/регион: Курган
- Благодарил (а): 77 раз
- Поблагодарили: 159 раз
-
- авторитет
- Сообщения: 817
- Зарегистрирован: 16 ноя 2016, 11:33
- Имя: Максим Владимирович
- Страна: Россия
- город/регион: Магнитогорск
- Благодарил (а): 16 раз
- Поблагодарили: 211 раз
Поменять местами числа
Как говорил нам преподаватель по программированию: "если программа делает то, что нужно, значит она написана правильно", обратное утверждение, я подозреваю, тоже верно )
Что-то мне подсказывает, то надо после оператора 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" каким был, таким и остаётся )
-
- осмотрелся
- Сообщения: 194
- Зарегистрирован: 19 сен 2019, 10:09
- Имя: Макс
- Страна: Россия
- город/регион: Славянск-на-Кубани
- Благодарил (а): 5 раз
- Поблагодарили: 34 раза
Поменять местами числа
В I/O Field есть поле Limits, в котором есть Low Limit Value(LLV) и High Limit Value(HLV).
К Tag5 LLV привязываете Tag6, а к Tag6 HLV привязываете Tag5.
Так оператор просто не сможет ошибиться, если он только не вобьет одинаковые цифры в tag5 и tag6.
Надо не поощрять и исправлять ошибки дураков, а не давать им возможность ошибиться и сообщить об их ошибке.
К Tag5 LLV привязываете Tag6, а к Tag6 HLV привязываете Tag5.
Так оператор просто не сможет ошибиться, если он только не вобьет одинаковые цифры в tag5 и tag6.
Надо не поощрять и исправлять ошибки дураков, а не давать им возможность ошибиться и сообщить об их ошибке.
WinCC 7.4 SP1 Upd15, Step5.6