ЦЕЛЬ БЫЛА :
Изменить (обратить, вертухнуть, перевернуть) шкалу внешнего тэга (ПЛК-шного) для вывода его в I\O Field в WinCC RT.
РЕШЕНО :
Всё "вертухается" с помощью настроек в свойствах ПЛК-шного тэга : вкладка "General" - "Linear Scaling". Слева колонка для шкалы внешнего тэга, справа - унутреннего. И не надо никаких выкрутасов со скриптами
И вроде как ДАЖЕ не нужно перезапускать WinCC RT, чтобы изменения вступили в силу. Просто ОК нажать. Хотя проверял пока только в симуляторе.
Всем привет !
Сорри, я не настолько продвинут в C ++ (работал с ним лет 5 назад последний раз), чтобы сходу мог решить даже вобщем-то простую задачу. Но надо решить побыстрее. Поэтому и вопрос. Может кто и ответит быстрее, чем я сам найду нужный пример.
Можно указать ссылку.
В WinCC есть 2 тега :
- «TAG_internal» внутренний, формат «“Floating-point number 32-bit IEEE»
- «TAG_PLC» внешний, формат «“Floating-point number 32-bit IEEE»
Нужно создать скрипт C ++, который должен выполнять следующие простые действия :
100 (целое значение) - «TAG_internal» = «TAG_PLC»
100 (целое значение) - «TAG_PLC» = «TAG_internal»
Как написать код скрипта ?
Заранее благодарен.
Простые вычисления в C ++ . Как же всё-таки ?
-
- Posts: 159
- Joined: Mon Sep 27, 2010 7:17 pm
Простые вычисления в C ++ . Как же всё-таки ?
Last edited by Alex3110 on Fri Nov 30, 2018 7:30 am, edited 2 times in total.
-
- Posts: 193
- Joined: Fri Feb 24, 2012 8:28 am
Re: Простые вычисления в C ++ . Как же всё-таки ?
Code: Select all
SetTagFloat("TAG_PLC", 100.0 - GetTagFloat("TAG_internal");
SetTagFloat("TAG_internal", 100.0 - GetTagFloat("TAG_PLC");
Я правильно понял, что нужно просто сделать линейное преобразование значения тега? Если так, то в свойствах тега (внешнего конечно) есть такая возможность, т.е. ставится галочка и пределы. 0 будет 100, а 100 будет 0.
-
- Posts: 193
- Joined: Fri Feb 24, 2012 8:28 am
Re: Простые вычисления в C ++ . Как же всё-таки ?
Опа! Так это надо на C ++ или WinCC C-script? Если именно на C++, то примеры есть в документации по ODK. Там написано какие используются винсисишные API функции и какие заголовочные файлы подключаются для работы с тегами.Alex3110 wrote:Простые вычисления в C ++
-
- Posts: 159
- Joined: Mon Sep 27, 2010 7:17 pm
Re: Простые вычисления в C ++ . Как же всё-таки ?
Спасибо за ответ !
Да, корректнее было бы указать не C++ , а ANSI-C.
Всё время путаю
Т.е., нужен код для скрипта ANSI-C, чтобы применить его конкретно в WinCC v.7.0 .
Ну я так думаю, что он сгодится и для любой версии WinCC
А под "простые вычисления" я имел ввиду простое арифметическое действие, т.е. вычитание из 100 значения какого-то WinCC тэга (как внешнего, так и внутреннего)
А вообще говоря, мне действительно нужно сделать "обратное преобразование".
Т.е. сейчас в поле I\O Field выводится значение внешнего тэга «TAG_PLC» .
Нужно в это поле вывести значение «TAG_internal», который надо рассчитать по формуле :
100 (integer value) - «TAG_PLC» = «TAG_internal»
Может быть это действительно можно сделать как-то проще, в свойствах поля I\O Field , например.
УРА !
Проверено, всё так и есть. Всё "вертухается" с помощью настроек в свойствах ПЛК-шного тэга : вкладка "General" - "Linear Scaling". Слева колонка для шкалы внешнего тэга, справа - унутреннего. И не ндо никаких выкрутасов со скриптами
Да, корректнее было бы указать не C++ , а ANSI-C.
Всё время путаю
Т.е., нужен код для скрипта ANSI-C, чтобы применить его конкретно в WinCC v.7.0 .
Ну я так думаю, что он сгодится и для любой версии WinCC
А под "простые вычисления" я имел ввиду простое арифметическое действие, т.е. вычитание из 100 значения какого-то WinCC тэга (как внешнего, так и внутреннего)
А вообще говоря, мне действительно нужно сделать "обратное преобразование".
Т.е. сейчас в поле I\O Field выводится значение внешнего тэга «TAG_PLC» .
Нужно в это поле вывести значение «TAG_internal», который надо рассчитать по формуле :
100 (integer value) - «TAG_PLC» = «TAG_internal»
Может быть это действительно можно сделать как-то проще, в свойствах поля I\O Field , например.
УРА !
Проверено, всё так и есть. Всё "вертухается" с помощью настроек в свойствах ПЛК-шного тэга : вкладка "General" - "Linear Scaling". Слева колонка для шкалы внешнего тэга, справа - унутреннего. И не ндо никаких выкрутасов со скриптами
-
- Posts: 878
- Joined: Tue Dec 26, 2006 5:21 am
- Location: Russia
Re: Простые вычисления в C ++ . Как же всё-таки ?
Блин, а С++ ? Как же теперь без него-то?
-
- Posts: 193
- Joined: Fri Feb 24, 2012 8:28 am
Re: Простые вычисления в C ++ . Как же всё-таки ?
конечно можноUsver wrote: Может быть это действительно можно сделать как-то проще, в свойствах поля I\O Field , например.
Code: Select all
return (100.0 - GetTagFloat("TAG_PLC"));
Вообще, конечно такие действия должен обеспечивать контроллер. А ВинСиСи, которая является СКАДА системой, должна обеспечивать удобный интерфейс для пользователя по настройке системы (особенно для регуляторов). А иначе это будет немножко неправильно и неконцептуально.
-
- Posts: 159
- Joined: Mon Sep 27, 2010 7:17 pm
Re: Простые вычисления в C ++ . Как же всё-таки ?
Вообще, конечно, вопрос интересный.
С этим надо бы всё равно разобраться :
SetTagFloat("TAG_PLC", 100.0 - GetTagFloat("TAG_internal");
SetTagFloat("TAG_internal", 100.0 - GetTagFloat("TAG_PLC");
Куда, например, запишется то, что вычислится в () - ках, .т.е. как воспользоваться результатом вычисления, т.е. разностью .
А, ну вот и ответ, любезно предоставленный Usver , пока я писал первую часть этого поста
return (100.0 - GetTagFloat("TAG_PLC"))
С этим надо бы всё равно разобраться :
SetTagFloat("TAG_PLC", 100.0 - GetTagFloat("TAG_internal");
SetTagFloat("TAG_internal", 100.0 - GetTagFloat("TAG_PLC");
Куда, например, запишется то, что вычислится в () - ках, .т.е. как воспользоваться результатом вычисления, т.е. разностью .
А, ну вот и ответ, любезно предоставленный Usver , пока я писал первую часть этого поста
return (100.0 - GetTagFloat("TAG_PLC"))
-
- Posts: 193
- Joined: Fri Feb 24, 2012 8:28 am
Re: Простые вычисления в C ++ . Как же всё-таки ?
равноAlex3110 wrote: 100 (целое значение) - «TAG_internal» = «TAG_PLC»
100 (целое значение) - «TAG_PLC» = «TAG_internal»
Code: Select all
SetTagFloat("TAG_PLC", 100.0 - GetTagFloat("TAG_internal");
SetTagFloat("TAG_internal", 100.0 - GetTagFloat("TAG_PLC");
-
- Posts: 159
- Joined: Mon Sep 27, 2010 7:17 pm
Re: Простые вычисления в C ++ . Как же всё-таки ?
Да эт я догадался
Просто формула типа "куча мала" и я не сразу догнал, что в ней "100" - само по себе, а не относится к "TAG_PLC" или к "TAG_internal"
Просто формула типа "куча мала" и я не сразу догнал, что в ней "100" - само по себе, а не относится к "TAG_PLC" или к "TAG_internal"