Вызов скриптов в TIA V13

Панели оператора PP/OP/TP/TD/MP.
Программные пакеты ProTool/WinCC flexible, SCADA система WinCC
John41
Posts: 11
Joined: Mon Jan 19, 2015 3:48 pm

Вызов скриптов в TIA V13

Post by John41 »

Имеется скрипт: Sub IncrementValue( Variable , Offset , Limit )
Его тело:

Dim val
val = HmiRuntime.SmartTags(Variable) + Offset
If val > Limit Then
val = Limit
End If
HmiRuntime.SmartTags(Variable) = val

В WinCC flexible 2008SP3 прекрасно работает. В TIA V13 Comfort при вызове возникает ошибка: "tag lookup only by name". Вопрос к знатокам VB: в чём косяк?
Oll Bell
Posts: 118
Joined: Sun Apr 17, 2011 9:49 pm

Re: Вызов скриптов в TIA V13

Post by Oll Bell »

1. на немецком форуме речь ведут о свойствах переменных, не все доступны для изменений, в свойствах только чтение.
2. SmartTags не обновлен не актуализирован
и о неверном применении имен внутренних переменных для внешних

не, если бы я знал сей продукт, перевел бы точнее. а то мне этр не о чем не говорит
Draco Malfoy
Posts: 94
Joined: Mon Sep 23, 2013 10:41 pm

Re: Вызов скриптов в TIA V13

Post by Draco Malfoy »

John, косяк как я понимаю в том, что вы пытаетесь произвести абсолютный вызов переменной, а в проэкте у вас наверняка по умолчанию в панели установлен символический вызов.
И ошибка поступает профильная.
John41
Posts: 11
Joined: Mon Jan 19, 2015 3:48 pm

Re: Вызов скриптов в TIA V13

Post by John41 »

В проекте через параметр передаётся имя внутреннего тега. Во flexible это работает.
Draco Malfoy
Posts: 94
Joined: Mon Sep 23, 2013 10:41 pm

Re: Вызов скриптов в TIA V13

Post by Draco Malfoy »

Внутреннюю значит.

- 1. Внутренняя переменная "Variable" подвержена циклической актуализации, или только "в процессе обработки" ?
- 2. Вызвать какую нибудь из этих переменных без динамизации, т.е. HmiRuntime.SmartTags(конкретная переменная) в скрипте получается ?

Как выглядет триггер, который ответственен за вызов скрипта ?
John41
Posts: 11
Joined: Mon Jan 19, 2015 3:48 pm

Re: Вызов скриптов в TIA V13

Post by John41 »

Проверку синтаксиса скрипт проходит, при компиляции ошибки не возникает. Вызывается по клику кнопки на экране и должен делать приращение переменной на некоторую величину. Другой кнопкой значение этого тега передаётся внешнему тегу. Ошибка возникает в строке: val = HmiRuntime.SmartTags(Variable) + Offset. И только в TIA Portal (см. первый пост). Отладчик показывает, что проблема как раз в выражении HmiRuntime.SmartTags(Variable).
Draco Malfoy
Posts: 94
Joined: Mon Sep 23, 2013 10:41 pm

Re: Вызов скриптов в TIA V13

Post by Draco Malfoy »

Джон, я понял что в Flexible всё работает - ответьте на поставленный вопрос.

Что с переменными ? Как они актуализируются в их свойствах, циклически или "по затребованию" ?
Можно вызвать эти переменные из того же скрипта SmartTag статическим вызовом ?
John41
Posts: 11
Joined: Mon Jan 19, 2015 3:48 pm

Re: Вызов скриптов в TIA V13

Post by John41 »

Есть небольшое количество уставок(как внешние теги real для HMI). Для их редактирования использую такое же кол-во буферных (внутренних)тегов. Инкремент, декремент, и присвоение делаю скриптами. Первоначально было 3 скрипта. Имена тегов передавались в скрипт как параметры при вызове по кликах экранных кнопок. Для флексибела это работает. При переносе в ТИА Портал возникла проблема с передачей имени тега в скрипт. Прямая ссылка на тег SmartTags("rTMP1") работает. Не получается передать имя тега через параметр скрипта при его вызове т.е. теперь на каждую пару уставка-буфер надо создавать отдельные 3 скрипта чтоб сделать аналогичный функционал. (хух!... ;))
Draco Malfoy
Posts: 94
Joined: Mon Sep 23, 2013 10:41 pm

Re: Вызов скриптов в TIA V13

Post by Draco Malfoy »

Может я не так выражаюсь, что-ли.
В ТИАП для переменных в визуализации есть две возможности (в свойствах переменных, если вызвать закладку "все переменные"):
- 1. Актуализируется циклически (всегда);
- 2. Актуализируется циклически (при необходимости / по затребованию);

Какая из этих двух возможностей у вас установлена на вашу внутреннюю "Variable" ??
John41
Posts: 11
Joined: Mon Jan 19, 2015 3:48 pm

Re: Вызов скриптов в TIA V13

Post by John41 »

Variable - это параметр скрипта, через который передаются теги в скрипт. Все теги "Cyclic in operatoon", но для внутренних переменных это не имеет значения, т.к. это режим синхронизации тегов контроллера и панели.
Draco Malfoy
Posts: 94
Joined: Mon Sep 23, 2013 10:41 pm

Re: Вызов скриптов в TIA V13

Post by Draco Malfoy »

Вот тут вы уважаемый в лужу попали, поскольку сгласно единому мнению моих коллег, как раз это имеет решающее значение. И к режиму синхронизации переменных с контроллером в случае с внутренними переменными это никак не может относится, уже потому, что в этом случае такой возможности выбора для них бы не было, поскольку они внутренние.
John41
Posts: 11
Joined: Mon Jan 19, 2015 3:48 pm

Re: Вызов скриптов в TIA V13

Post by John41 »

Я, так понимаю, Ваша цель(и Ваших коллег) была загнать меня в лужу. :D . А по сути вопроса у Вас есть что сказать? Повторю вопрос: "Почему скрипт (см. первый пост) в WinCCflexible выполняется, а в TIA V13 Comfort - нет". Проект в Портале - клон проекта из флексибла.
Draco Malfoy
Posts: 94
Joined: Mon Sep 23, 2013 10:41 pm

Re: Вызов скриптов в TIA V13

Post by Draco Malfoy »

Мне кажется что вы плохо понимаете суть нашего с вами обсуждения. Вы заинтересованы в том, чтобы ваш скрипт заработал или нет ?

Я не знаю, там вроде баг какой-то конретно в ТИАП, или ещё какой-то задвиг и заёб, но люди говорят, что "ТАК работает" а "ТАК НЕ работает", и у меня нет оснований им не верить. Если вам это интересно, решить насущную проблему, то испробуйте мой совет, если нет, ну и Бог с вами, а захрена тогда пишете ?

Вы по пятому разу пишете, вот во Флекс всё работало, всё работало. Ну и оставайтесь во Флекс, зачем вам ТИАП если вы не ходитет под него подстраиваться ? Это ещё полусырой неотработанный продукт, там много всяких необяснимых задвигов.
sania
Site Admin
Posts: 1387
Joined: Sat Aug 13, 2005 6:15 am

Re: Вызов скриптов в TIA V13

Post by sania »

чёт я не въеду а что мешает:
val = Variable + Offset ?

при компиляции пишется что поверяется базовый синтаксис, т.е. на соответствие базовым командам, а будет работать или нет - никто не гарантирует (oo)
Rex2701
Posts: 374
Joined: Wed Oct 13, 2010 8:44 am
Location: Russian Federation

Re: Вызов скриптов в TIA V13

Post by Rex2701 »

Попробуй так:
val = HmiRuntime.SmartTags(Variable).Value + Offset

Я тоже столкнулся с тем, что во Flexible объект HmiRuntime.SmartTags(TagName) явно отождествляется со значением тэга. Его можно читать и присваивать значение как обычной переменной.
Потом начал переписывать некоторые скрипты в WinCC 7.0 c ANSI-C на VBScript. И оказалось, что такой подход больше не работает. При попытке прочитать значение тэга всегда возвращался ноль, а при попытке записи нового - ничего не происходило.

Опытным путём пришёл к таким конструкциям:

Code: Select all

Dim val
Dim var = HmiRuntime.SmartTags(TagName)
var.Read()              ; читаем тэг из WinCC
val = var.Value         ; получаем значение
...
...
var.Value = val         ; сохраняем новое значение
var.Write()             ; записываем тэг
Только так скрипт гарантированно получает, обрабатывает и записывает значения тэгов.