Простые вычисления в C ++ . Как же всё-таки ?

Панели оператора PP/OP/TP/TD/MP.
Программные пакеты ProTool/WinCC flexible, SCADA система WinCC
Post Reply
Alex3110
Posts: 159
Joined: Mon Sep 27, 2010 7:17 pm

Простые вычисления в C ++ . Как же всё-таки ?

Post by Alex3110 » Fri Nov 23, 2018 8:09 am

ЦЕЛЬ БЫЛА :
Изменить (обратить, вертухнуть, перевернуть) шкалу внешнего тэга (ПЛК-шного) для вывода его в 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»


Как написать код скрипта ?

Заранее благодарен.
Last edited by Alex3110 on Fri Nov 30, 2018 7:30 am, edited 2 times in total.

Usver
Posts: 191
Joined: Fri Feb 24, 2012 8:28 am

Re: Простые вычисления в C ++ . Как же всё-таки ?

Post by Usver » Fri Nov 23, 2018 12:56 pm

Code: Select all

SetTagFloat("TAG_PLC", 100.0 - GetTagFloat("TAG_internal");
SetTagFloat("TAG_internal", 100.0 - GetTagFloat("TAG_PLC");
ЗЫ
Я правильно понял, что нужно просто сделать линейное преобразование значения тега? Если так, то в свойствах тега (внешнего конечно) есть такая возможность, т.е. ставится галочка и пределы. 0 будет 100, а 100 будет 0.

Usver
Posts: 191
Joined: Fri Feb 24, 2012 8:28 am

Re: Простые вычисления в C ++ . Как же всё-таки ?

Post by Usver » Fri Nov 23, 2018 1:40 pm

Alex3110 wrote:Простые вычисления в C ++
Опа! Так это надо на C ++ или WinCC C-script? Если именно на C++, то примеры есть в документации по ODK. Там написано какие используются винсисишные API функции и какие заголовочные файлы подключаются для работы с тегами.

Alex3110
Posts: 159
Joined: Mon Sep 27, 2010 7:17 pm

Re: Простые вычисления в C ++ . Как же всё-таки ?

Post by Alex3110 » Fri Nov 30, 2018 6:18 am

Спасибо за ответ !
Да, корректнее было бы указать не 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 , например.

УРА ! (suc)
Проверено, всё так и есть. Всё "вертухается" с помощью настроек в свойствах ПЛК-шного тэга : вкладка "General" - "Linear Scaling". Слева колонка для шкалы внешнего тэга, справа - унутреннего. И не ндо никаких выкрутасов со скриптами
(tyou)

Dfcz
Posts: 875
Joined: Tue Dec 26, 2006 5:21 am
Location: Russia

Re: Простые вычисления в C ++ . Как же всё-таки ?

Post by Dfcz » Fri Nov 30, 2018 7:53 am

Блин, а С++ ? Как же теперь без него-то?

Usver
Posts: 191
Joined: Fri Feb 24, 2012 8:28 am

Re: Простые вычисления в C ++ . Как же всё-таки ?

Post by Usver » Sat Dec 01, 2018 2:42 pm

Usver wrote: Может быть это действительно можно сделать как-то проще, в свойствах поля I\O Field , например.
конечно можно

Code: Select all

 return (100.0 - GetTagFloat("TAG_PLC"));
для ио филд
Вообще, конечно такие действия должен обеспечивать контроллер. А ВинСиСи, которая является СКАДА системой, должна обеспечивать удобный интерфейс для пользователя по настройке системы (особенно для регуляторов). А иначе это будет немножко неправильно и неконцептуально.

Alex3110
Posts: 159
Joined: Mon Sep 27, 2010 7:17 pm

Re: Простые вычисления в C ++ . Как же всё-таки ?

Post by Alex3110 » Sat Dec 01, 2018 2:46 pm

Вообще, конечно, вопрос интересный.
С этим надо бы всё равно разобраться :

SetTagFloat("TAG_PLC", 100.0 - GetTagFloat("TAG_internal");
SetTagFloat("TAG_internal", 100.0 - GetTagFloat("TAG_PLC");

Куда, например, запишется то, что вычислится в () - ках, .т.е. как воспользоваться результатом вычисления, т.е. разностью .

А, ну вот и ответ, любезно предоставленный Usver , пока я писал первую часть этого поста :)
return (100.0 - GetTagFloat("TAG_PLC"))

Usver
Posts: 191
Joined: Fri Feb 24, 2012 8:28 am

Re: Простые вычисления в C ++ . Как же всё-таки ?

Post by Usver » Sat Dec 01, 2018 3:28 pm

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");
это интерпритация написаного Вами

Alex3110
Posts: 159
Joined: Mon Sep 27, 2010 7:17 pm

Re: Простые вычисления в C ++ . Как же всё-таки ?

Post by Alex3110 » Mon Dec 03, 2018 5:29 am

Да эт я догадался :wink:
Просто формула типа "куча мала" и я не сразу догнал, что в ней "100" - само по себе, а не относится к "TAG_PLC" или к "TAG_internal"

Post Reply