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

Возможна ли непрямая адресация в VBS ?

Модератор: Глоб.модераторы

Ответить

SMax
не первый раз у нас
не первый раз у нас
Сообщения: 325
Зарегистрирован: 17 июн 2016, 14:18
Имя: Максим
Благодарил (а): 7 раз
Поблагодарили: 118 раз

Возможна ли непрямая адресация в VBS ?

Сообщение SMax »

Скрипты работают только с активным экраном, если у вас данные сохраняются в тегах, будь то теги ПЛК или внутренние теги WinCC, то все должно работать. Другое дело если мультиплексировать свойства OutputValue различных I/O field, тогда да, их присутствие будет необходимо на активном экране.
Еще вариант, откуда вызывается скрипт заполняющий не «мультиплексированные» теги? Он тоже должен работать с экраном на котором «мультиплексированное» "I\O field", иначе в тегах будут либо пустые либо старые значения.

Автор темы
alex3110
освоился
освоился
Сообщения: 289
Зарегистрирован: 02 апр 2015, 18:16
Имя: Симонов Игорь Валерьевич
Благодарил (а): 27 раз
Поблагодарили: 9 раз

Возможна ли непрямая адресация в VBS ?

Сообщение alex3110 »

stesl писал(а): 28 авг 2020, 07:56 Если нужно, что бы в одном и том же I/O отображались разные теги - велкам в скрипты опять же.
Может так и можно. Пока так не разу не делал. А делал так, что с помощью "Symbol I\O field" выбирал нужный мне датчик. При этом в тэг "Index" записывал признак этого датчика (1...30), затем этот индекс использовал для вывода в "универсальное" поле "I\O field" значение (например, выходное) того датчика, который я выбрал с помощью "Symbol I\O field".
А как это в скриптах сделать даже и "have no idea". Да вроде как и непонятно зачем. Ведь есть же стандартный и удобный для оперов метод который я описал. Т.е. метод выпадающего списка (датчиков), а не необходимость вручную вводить в какое-нить поле "I\O field" номер нужного датчика, чтобы потом VB-script смог его распознать и в "общее" поле вывести результат расчёта именно для выбранного датчика.

Отправлено спустя 15 минут 51 секунду:
SMax писал(а): 28 авг 2020, 08:44 Скрипты работают только с активным экраном,
Опаньки :ges_slap:
Мой скрипт запускается "меандровым" импульсом "0"-"1"-"0"-"1" и т.д., который панель получает от PLC.
Так что, мой скрипт будет работать и, самое главное - изменять выходные значения, только в том случае, если открыт экран, на котором есть графические элементы (ну в данном случае поля "I\O field") к которым привязаны все "обычные" тэги, которые я задействовал в своём скрипте ?
А переключись я в другой экран - и всё, в "выходных" тэгах уже ничего обновляться не будет ?

stesl
эксперт
эксперт
Сообщения: 1035
Зарегистрирован: 31 мар 2018, 12:05
Имя: Вячеслав
Благодарил (а): 100 раз
Поблагодарили: 141 раз

Возможна ли непрямая адресация в VBS ?

Сообщение stesl »

alex3110, сейчас как раз сел - панельку нарисовать, и да, увидел там опцию multiplexing, но
alex3110 писал(а): 28 авг 2020, 09:08 Пока так не разу не делал
)))
alex3110 писал(а): 28 авг 2020, 09:08 Мой скрипт запускается "меандровым" импульсом "0"-"1"-"0"-"1" и т.д., который панель получает от PLC
Если этот тег выведен на экран, и экран активен, и привязка, например - к изменению значения - будет выполняться.
Далее не совсем понятно... Если вы в скрипте обращаетесь к тегам так

Код: Выделить всё

SmartTags("Tag_" & index) = 0
то на экране они не нужны. Если же обращаться к свойствам I/O где они выводятся, то соответственно нужны.
Тут кстати снова можно поднять тему, а что такое глобальный скрипт ) Скрипт, на то он и скрипт, что обрабатывает событие, к которому он "привязан". Глобальный же можно просто настроить на какой то промежуток. Скажем раз в секунду.

Поймите наверное главное. Допустим Вы привязали скрипт к изменению тега в I/O. Пока этот I/O на экране, все работает, как только его нет - ничего же не изменяется. Скрипт то работает с полем I/O, а не с самим тегом.

Автор темы
alex3110
освоился
освоился
Сообщения: 289
Зарегистрирован: 02 апр 2015, 18:16
Имя: Симонов Игорь Валерьевич
Благодарил (а): 27 раз
Поблагодарили: 9 раз

Возможна ли непрямая адресация в VBS ?

Сообщение alex3110 »

stesl писал(а): 28 авг 2020, 09:38 Поймите наверное главное. Допустим Вы привязали скрипт к изменению тега в I/O. Пока этот I/O на экране, все работает, как только его нет - ничего же не изменяется. Скрипт то работает с полем I/O, а не с самим тегом.
:thankyou:
Теперь уже понял. Практически. :-)
Сейчас поэкспериментировал и самые худшие мои опасения подтвердились, хотя я, конечно, слышал и ранее про такие подлости VBS-скриптов. Ну чтобы так, когда у меня почти всё было готово и заработало :shock: .
В сложившейся ситуации просматривается только один выход.

1. Найти экран, который наиболее часто используется операми. Как правило, это «стартовый» экран.
2. Разместить на каком-нибудь из слоёв этого экрана поля "I\O field" со всеми тэгами, которые нужны в скрипте для расчёта выходных значений по каждому датчику. Потом скрыть их, и при необходимости делать их видимыми по кнопке.
3. На другом экране, где буду задавать константы и биты управления для каждого датчика, которые будут участвовать в расчётах VBS-скрипта, сделать то же, что и в п.2
4. Требовать от оперов, чтобы они, уходя, всегда оставляли на панели нужный мне «стартовый» экран. Иначе скрипты бесполезны.

В связи с п.4 возникает ещё вопрос, положительный ответ на который может п.4 исключить вообще, а именно :
Можно ли, с помощью какой-нибудь из системных функций панели, по истечении определённого времени «не нажатия на экран панели» (ну или по «планировщику задач» раз в 5 мин.), принудительно переключать панель на «стартовый» экран, на котором, в «невидимом» виде, будут находиться поля "I\O field" со всеми тэгами, которые нужны в скрипте для расчёта выходных значений по каждому датчику и где будут реально обновляться.
В сложившейся ситуации просматривается только один выход.
А есть ли ещё другие варианты «выходов» ?
Ну, кроме того, как всё это делать в STEP7.
Последний раз редактировалось alex3110 28 авг 2020, 11:44, всего редактировалось 1 раз.

Автор темы
alex3110
освоился
освоился
Сообщения: 289
Зарегистрирован: 02 апр 2015, 18:16
Имя: Симонов Игорь Валерьевич
Благодарил (а): 27 раз
Поблагодарили: 9 раз

Возможна ли непрямая адресация в VBS ?

Сообщение alex3110 »

stesl писал(а): 28 авг 2020, 09:38 Если вы в скрипте обращаетесь к тегам так
КОД: ВЫДЕЛИТЬ ВСЁ
SmartTags("Tag_" & index) = 0
то на экране они не нужны. Если же обращаться к свойствам I/O где они выводятся, то соответственно нужны.
По большому счёту, для каждого из 30-датчиков для скрипта я хотел бы указывать только 2 параметра :
1. Индивидуальный бит активации/деактивации расчёта для этого датчика.
2. Индивидуальное значение "DeadBand" в "UInt" для этого датчика.

В крайнем случае, чтобы избежать вышеописанных проблем, я могу эти 2 параметра в скрипте задать жёстко и не предоставлять "операм" возможность их выбора.
Тогда не придётся создавать поля "I\O field" на экране и привязывать к ним тэги, участвующие в скрипте.
Единственным неудобством будет то, что я в симуляции не смогу просмотреть работает ли скрипт и работает ли он правильно. Понять это можно будет только по факту, т.е. загрузив в панель новый вариант проекта с добавленным скриптом и потом, через время, считать файлы "логов" из USB-флэшки, которые туда панель их будет записывать.

Хотя, наверное можно "выходные" тэги временно настроить на пересылку в PLC, а потом используя PLCSIM совместно с симулятором WInCC RT , посмотреть их уже в PLC, в каком-нибудь временном DB
Последний раз редактировалось alex3110 28 авг 2020, 11:47, всего редактировалось 2 раза.

SMax
не первый раз у нас
не первый раз у нас
Сообщения: 325
Зарегистрирован: 17 июн 2016, 14:18
Имя: Максим
Благодарил (а): 7 раз
Поблагодарили: 118 раз

Возможна ли непрямая адресация в VBS ?

Сообщение SMax »

alex3110 писал(а): 28 авг 2020, 11:09 А есть ли ещё другие варианты «выходов» ?
Если преобразуете скрипт так чтобы он работал только с тегами, без опроса графических элементов, и будет вызываться глобально по тегу (как у Вас и сделано), то все должно работать независимо от экранов.

Автор темы
alex3110
освоился
освоился
Сообщения: 289
Зарегистрирован: 02 апр 2015, 18:16
Имя: Симонов Игорь Валерьевич
Благодарил (а): 27 раз
Поблагодарили: 9 раз

Возможна ли непрямая адресация в VBS ?

Сообщение alex3110 »

:thankyou: , SMax !
Я видимо о том и писал, когда Вы послали своё сообщение :-)
Попробую.

SMax
не первый раз у нас
не первый раз у нас
Сообщения: 325
Зарегистрирован: 17 июн 2016, 14:18
Имя: Максим
Благодарил (а): 7 раз
Поблагодарили: 118 раз

Возможна ли непрямая адресация в VBS ?

Сообщение SMax »

alex3110 писал(а): 28 авг 2020, 11:26 я могу эти 2 параметра в скрипте задать жёстко и не предоставлять "операм" возможность их выбора
Вы можете сделать их тегами PLC (DB) и привязать необходимые графические элементы к этим тегам для их изменения. Ну и предоставить операторам возможность выбора, а из скрипта нужно будет обращаться именно к этим тегам (хранящимся в DB), а не к графическим элементам.

Автор темы
alex3110
освоился
освоился
Сообщения: 289
Зарегистрирован: 02 апр 2015, 18:16
Имя: Симонов Игорь Валерьевич
Благодарил (а): 27 раз
Поблагодарили: 9 раз

Возможна ли непрямая адресация в VBS ?

Сообщение alex3110 »

Похоже, начинаю ходить кругами. :crazy0to:
SMax писал(а): 28 авг 2020, 11:26 Если преобразуете скрипт так чтобы он работал только с тегами, без опроса графических элементов, и будет вызываться глобально по тегу (как у Вас и сделано), то все должно работать независимо от экранов.
Сейчас вот и хочется сделать «независимо от экранов», т.е. чтобы на экранах не присутствовали бы поля "I\O field", к которым бы были привязаны соответствующие «обычные» (не «мультиплексированные» тэги).

Давайте пока исключим с экрана :
- все «мультиплексированные» тэги ;
- все графические объекты (ГО), которые предоставляют оперу доступ к на-стройкам моих фильтров для каждого датчика.

Как я уже писал, мой скрипт запускается "меандровым" импульсом "0"-"1"-"0"-"1" и т.д., который панель получает от PLC.
Помещаю на стартовый «активный» экран поле "I\O field", к которому в качестве «VALUE» привязывают этот «импульсный» тэг.
В принципе я могу потом скопировать это поле "I\O field" и на другой экран, где к примеру, я хочу разместить уставки.

Разместил там же, на стартовом экране, пока 2 группы полей "I\O field" (для 2-х датчиков), к которым привязаны значения соответствующих групп тэгов, к которым скрипт обращается при своей работе.

Вот скрипты :

Код: Выделить всё

Sub Filters()

Dim i, FilterEnbl, LogIN, LogOUTprev, DeadBand
For i = 1 To 30
FilterEnbl = SmartTags("Filter_" & i & "_Enbl")
LogIN = SmartTags("Log_" & i & "_IN")
LogOUTprev = SmartTags("LogOUT_" & i & "_prev")
DeadBand = SmartTags("Dead_" & i & "_Band")
If DeadBand = 0 Then DeadBand = 3 Else DeadBand = DeadBand
SmartTags("Dead_" & i & "_Band") = DeadBand
If LogOUTprev = 0 Then LogOUTprev = LogIN Else LogOUTprev = LogOUTprev
SmartTags("LogOUT_" & i & "_prev") = LogOUTprev
If LogOUTprev < DeadBand And LogIN > 8 Then LogOUTprev = LogIN Else LogOUTprev = LogOUTprev
SmartTags("LogOUT_" & i & "_prev") = LogOUTprev
If FilterEnbl <> 0 And LogOUTprev > DeadBand Then SmartTags("Log_" & i & "_OUT") = LogOUT (i)

Next
End Sub
Вот функция LogOUT, которая вызывается в предыдущем коде :

Код: Выделить всё

Function LogOUT(ByVal id)

Dim LogIN, DeadBand, LogOUTprev, HLDB, LLDB
LogIN = SmartTags("Log_" & id & "_IN")
DeadBand = SmartTags("Dead_" & id & "_Band")
LogOUTprev = SmartTags("LogOUT_" & id & "_prev")
LLDB = LogOUTprev - DeadBand
HLDB = LogOUTprev + DeadBand
If LogIN > HLDB Or LogIN < LLDB Then LogOUT = LogIN Else LogOUT = LogOUTprev
SmartTags("Log_" & id & "_OUT") = LogOUT  
SmartTags("LogOUT_" & id & "_prev") = LogOUT

End Function
При таком раскладе всё работает до тех пор, пока на экране присутствуют поля "I\O field" с «обычными» тэгами :
Log_1_IN ; LogOUT_1_prev ; Log_1_OUT
Log_2_IN ; LogOUT_2_prev ; Log_2_OUT

Если я удалю, например,"I\O field" с тэгом «LogOUT_2_prev» , то выходное значение Log_2_OUT уже в своём поле "I\O field" меняться не будет. Т.е. скрипты вычислять его уже не будут.

Пробовал создавать DB в PLC и к нему привязать по паре тэгов Lo-gOUT_1_prev ; Log_1_OUT и LogOUT_2_prev ; Log_2_OUT . Тоже работает, но тоже до определённого момента, пока не удалю все поля "I\O field" этих 2-х датчиков.
К тому же, создавая дополнительные тэги в PLC я приду к тому, от чего хотел уйти. Т.е. хотел вообще не трогать PLC и фильтрацию сделать только средствами панели и VBS-скриптами.

Что теперь надо сделать, чтобы скрипты стали «независимы от экранов» ?
Последний раз редактировалось alex3110 31 авг 2020, 06:46, всего редактировалось 1 раз.
Аватара пользователя

petr2off
эксперт
эксперт
Сообщения: 1735
Зарегистрирован: 06 янв 2016, 19:45
Имя: Петров В.Л.
Страна: Россия
город/регион: Красноярск
Благодарил (а): 78 раз
Поблагодарили: 235 раз

Возможна ли непрямая адресация в VBS ?

Сообщение petr2off »

alex3110 писал(а): 30 авг 2020, 17:51 Что теперь надо сделать, чтобы скрипты стали «независимы от экранов» ?
По всей видимости не привязывать их к экранным элементам. Насколько помню, скрипт можно посадить на событие изменения значения ТЭГа

Автор темы
alex3110
освоился
освоился
Сообщения: 289
Зарегистрирован: 02 апр 2015, 18:16
Имя: Симонов Игорь Валерьевич
Благодарил (а): 27 раз
Поблагодарили: 9 раз

Возможна ли непрямая адресация в VBS ?

Сообщение alex3110 »

В свойствах того "импульсного" тэга я указал - запускать скрипт "Filters". Если я этот "импульсный" тэг не привяжу к какому-нибудь экранному ГО, то скрипт не работает.

stesl
эксперт
эксперт
Сообщения: 1035
Зарегистрирован: 31 мар 2018, 12:05
Имя: Вячеслав
Благодарил (а): 100 раз
Поблагодарили: 141 раз

Возможна ли непрямая адресация в VBS ?

Сообщение stesl »

petr2off писал(а): 30 авг 2020, 18:43 скрипт можно посадить на событие изменения значения ТЭГа
Если он отображается на экране. Где и как отреагировать на изменение тега по другому - пока не знаю.
alex3110 писал(а): 30 авг 2020, 21:08 Если я этот "импульсный" тэг не привяжу к какому-нибудь экранному ГО, то скрипт не работает.
Предыдущий пост осилить не могу ) Но призвал бы изучить все таки что такое глобальный скрипт. Который можно запускать по таймеру. Зачем этот искусственный меандр?

Отправлено спустя 7 минут 12 секунд:
PS Как вариант, сделайте в подложке I/O время (если еще не сделано) и запускайтесь с изменения содержимого этого I/O. Под подложкой имею ввиду Template

Автор темы
alex3110
освоился
освоился
Сообщения: 289
Зарегистрирован: 02 апр 2015, 18:16
Имя: Симонов Игорь Валерьевич
Благодарил (а): 27 раз
Поблагодарили: 9 раз

Возможна ли непрямая адресация в VBS ?

Сообщение alex3110 »

stesl писал(а): 31 авг 2020, 04:41 Зачем этот искусственный меандр?
А где ж тогда взять было ? ))
Про поле "I/O время" как-то раньше и не думалось. Тем более там изменяется секундами.
А за секунду боюсь, что вряд ли скрипт успеет отработать по всем датчикам. Их 30 штук.
А меандр у меня с периодом 8 сек. Т.е. 4 сек. "1", и 4 сек "0". Думаю, что вполне хватит.
Если брать "минутный" интервал (который я мог бы взять и из планировщика задач), то это многовато. Так как есть датчики, сигналы которых, в определённых режимах (например - "запуск агрегата и выход на рабочий режим") нужно отслеживать ну хотя бы не реже 1 раз/5 сек.
Пожалуй, придётся почитать про "глобальный скрипт" ))
stesl писал(а): 31 авг 2020, 04:41 Предыдущий пост осилить не могу )
Если Вы о назначении моих скриптов, то задача состоит в том, чтобы отфильтровать изменяющиеся входные значения. Фильтр запоминает предыдущее выходное значение и держит его на своём выходе. Он изменит это значение только тогда, когда входное значение станет больше или меньше этого запомненного фильтром значение на величину "Dead Band". Новым запомненный выходным значением станет текущее на этот момент входное.

stesl
эксперт
эксперт
Сообщения: 1035
Зарегистрирован: 31 мар 2018, 12:05
Имя: Вячеслав
Благодарил (а): 100 раз
Поблагодарили: 141 раз

Возможна ли непрямая адресация в VBS ?

Сообщение stesl »

alex3110 писал(а): 31 авг 2020, 06:37 А за секунду боюсь, что вряд ли скрипт успеет отработать по всем датчикам. Их 30 штук.
Прикалываетесь? ) Напишите код, который генерирует от 10000 случайных чисел, и отсортирует список. И самое долгое, что он будет выполнять - вывод ответа ;) Ну конечно от алгоритма зависит. Но не беру в расчет какие то нелепые решения.
Если Вы о назначении моих скриптов
Нет, я о том, что текста много и кода )

LexSL
освоился
освоился
Сообщения: 208
Зарегистрирован: 16 дек 2011, 15:13
Имя: Алексей
Страна: Россия
Благодарил (а): 67 раз
Поблагодарили: 53 раза

Возможна ли непрямая адресация в VBS ?

Сообщение LexSL »

Уже писал неоднократно, если в панели теги нигде не используются (экран, логгинг или прямое использование в скриптах), то индиректное обращение по составному имени, например так:

Код: Выделить всё

"Main_" & i & "_OUT"
к чтению из тега/записи в тег ни к чему не приведет.
Это если речь о панелях Siemens (читайте мануалы). Если расположить невидимые I\O Field-ы с привязкой ко всем тегам на каком нибудь экране, то работать скрипты будут.

Автор темы
alex3110
освоился
освоился
Сообщения: 289
Зарегистрирован: 02 апр 2015, 18:16
Имя: Симонов Игорь Валерьевич
Благодарил (а): 27 раз
Поблагодарили: 9 раз

Возможна ли непрямая адресация в VBS ?

Сообщение alex3110 »

А всё ли мне даст глобальный скрипт, что хочу ?

Думаю, что даже если я и перенастрою свои скрипты на «глобальные» наподобие этого

Option Explicit
Function action

Dim objLogOUTprevTag1
Set objLogOUTprevTag1 = HMIRuntime.Screens("<MyScreenName>").ScreenItems("<MyTag1>")
objLogOUTprevTag1.Value = HMIRuntime.Tags("<MyTag1>").Read
……………………
…………………..
End Function


то это мне даст только то, что мой скрипт будет выполняться независимо от того, какой экран будет активен в данный момент.
Но на каком-то из экранов мне всё равно придётся создать все 30 групп (по 2 или 3 тэга) полей "I\O field" и привязать к ним все тэги, к которым будет обращаться скрипт при своих вычислениях.

Глобальный скрипт позволит мне обойтись всего лишь одним экраном с указанными полями "I\O field", а не двумя (как я ранее планировал) и не писать дополнительно ещё один скрипт (или не задействовать системную функцию) для возврата на тот экран, где будут эти поля "I\O field", чтобы локальный скрипт выполнялся.
Просто он отличается от «локального» скрипта тем, что в глобальном надо создать объекты VBS-языка (в данном случае «тэговые»), к которым при этом будут прописаны «пути», и которые глобальный скрипт будет находить при его вызове и соответственно выполнять то, что от него требуется.

Правильно я понял ?

Отправлено спустя 6 минут 34 секунды:
LexSL писал(а): 31 авг 2020, 09:25 Если расположить невидимые I\O Field-ы с привязкой ко всем тегам на каком нибудь экране, то работать скрипты будут.
О, похоже это "финальная вишенка на торте" :-)
Так всё-таки "...расположить...на каком нибудь экране", и конечно, I\O Field-ы "лучше невидимые".
Ну чтоб не закрывали другие и более нужные для обзора ГО экрана.

Ясно, спасибо !

stesl
эксперт
эксперт
Сообщения: 1035
Зарегистрирован: 31 мар 2018, 12:05
Имя: Вячеслав
Благодарил (а): 100 раз
Поблагодарили: 141 раз

Возможна ли непрямая адресация в VBS ?

Сообщение stesl »

alex3110 писал(а): 31 авг 2020, 10:29 А всё ли мне даст глобальный скрипт, что хочу ?
Либо я чего то не понимаю, либо я высказываюсь криво.
Мысль такая - пишите скрипт в области - глобальные. Триггером ставите таймер. В нем обращаетесь НЕ к I/O, а непосредственно к тегам из Вашего списка. Я подозреваю, что речь о WinCC Portal. Не пишу там скрипты. В WinCC "чистой", обращаясь HMIRuntimeTag, обращаешься непосредственно к значению тега. И пофиг, что на экране.

Глобальный, значит исполняется во всем "поле зрения Runtime". Локальный - привязан к какому то ГО, экрану и т.п.

SMax
не первый раз у нас
не первый раз у нас
Сообщения: 325
Зарегистрирован: 17 июн 2016, 14:18
Имя: Максим
Благодарил (а): 7 раз
Поблагодарили: 118 раз

Возможна ли непрямая адресация в VBS ?

Сообщение SMax »

1. Создайте все необходимые внутренние теги (Filter_1_Enbl ... Filter_30_Enbl, Dead_1_Band ... Dead_30_Band и т.д.)
0001.png

2. Создайте тег PLC для запуска скриптов ("меандровый" импульс). Установите в свойствах Acquisition mode: Cyclic continuous.

TIA Portal Help:
If you want to update the tag at regular intervals as long as it is being displayed on the screen or logged, select “Cyclic in operation” as the acquisition mode.
Or:
If you want to update the tag at regular intervals even though it is not being displayed on the screen or logged, select “Cyclic continuous” as the acquisition mode.
The “Cyclic continuous” setting is selected for a tag, for example, that has a function list configured for a change of its value and that is not directly visible in a screen.

Если вы хотите обновлять тег через равные промежутки времени, пока он отображается на экране или регистрируется, выберите в Acquisition mode «Cyclic in operation».
Или:
Если вы хотите обновлять тег через равные промежутки времени, даже если он не отображается на экране или не регистрируется, выберите в Acquisition mode «Cyclic continuous».
Параметр «Cyclic continuous» выбирается, например, для тега, у которого есть список функций, настроенный на изменение его значения, и который не отображается непосредственно на экране.
0002.png

3. Создайте функцию «Filters» именно функцию, а также функции вызываемые из неё.
0003.png

4. Задайте в событиях, тегу для запусков скриптов ("меандровый" импульс), запуск функции «Filters» по изменению значения.
0004.png
Отправлено спустя 15 минут 27 секунд:
Можете также предоставить операторам возможность выбора, задействовав необходимые графические элементы и привязав их к внутренним тегам. Оператор откроет нужный экран, введет значение, оно запишется во внутренний тег и оператор может переключить экран, значение то в теге останется и вы можете считывать его скриптом.
Можете использовать и теги PLC (DB), но ставьте у них свойство Acquisition mode: Cyclic continuous.
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Автор темы
alex3110
освоился
освоился
Сообщения: 289
Зарегистрирован: 02 апр 2015, 18:16
Имя: Симонов Игорь Валерьевич
Благодарил (а): 27 раз
Поблагодарили: 9 раз

Возможна ли непрямая адресация в VBS ?

Сообщение alex3110 »

stesl писал(а): 31 авг 2020, 11:49 Я подозреваю, что речь о WinCC Portal.
Да, действительно TIA v.15.1 и проект для панели ТР1500 Comfort.
Может надо было сразу указать, но полагал, что не должно было быть разницы по сравнению с WinCC Flex, т.к. речь о "панельном" проекте.

Всем спасибо, попробую оптимизировать.

Автор темы
alex3110
освоился
освоился
Сообщения: 289
Зарегистрирован: 02 апр 2015, 18:16
Имя: Симонов Игорь Валерьевич
Благодарил (а): 27 раз
Поблагодарили: 9 раз

Возможна ли непрямая адресация в VBS ?

Сообщение alex3110 »

Пока не работает.

Половина из п.1…п.4 уже было сделано, а именно :
п.1 – Созданы все необходимые внутренние теги (Filter_1_Enbl ... Filter_30_Enbl, Dead_1_Band ... Dead_30_Band и т.д.)
п.4 – "меандровый" тэг, в качестве триггера, по изменению, запускал скрипт «Filters»

Что изменил :
п.2 Для "меандрового" тэга-триггера изменил “Cyclic in operation” → “Cyclic continuous” – 500 мс.

п.3 Переделал Sub Filters() в Function Filters() .

Function Filters()
……………
……………
Next
End Function

После этого VBS-редактор начал ругаться, что скрипт не возвращает значение, хоть объявлен как Function.

Дописал такое :
……………

Next
Filters = LogOUT (i)
End Function

Ругаться перестал, RT рантайм запустился, но изменений не последовало.

Скрипт работает (т.е., например, для конкретного датчика №5 меняется его Log_5_OUT) только на том экране, где присутствуют поля "I\O field", к которым привязаны все соответствующие тэги этого датчика №5, которые использует скрипт, т.е.
Filter_5_Enbl, Log_5_IN, Dead_5_Band, LogOUT_5_prev, Log_5_OUT

Перехожу на экран №2, где я разместил только одно поле "I\O field", а именно с тэгом Log_5_OUT. Это поле я сделал с целью проверить, работает ли скрипт независимо от экрана.
Создаю в "PLCSIM" слайдером условия, чтобы Log_5_OUT заведомо изменилось, но оно не меняется. Не трогая слайдер, перехожу назад, на экран №1, и значение в поле, где привязан Log_5_OUT тут же изменяется.

Таким образом скрипт всё ещё "привязан" к экрану №1.

SMax
не первый раз у нас
не первый раз у нас
Сообщения: 325
Зарегистрирован: 17 июн 2016, 14:18
Имя: Максим
Благодарил (а): 7 раз
Поблагодарили: 118 раз

Возможна ли непрямая адресация в VBS ?

Сообщение SMax »

alex3110 писал(а): 01 сен 2020, 09:57Создаю в "PLCSIM" слайдером условия, чтобы Log_5_OUT заведомо изменилось
У Вас это внутренний тег или тег ПЛК?
Если внутренний, то какие условия в ПЛК его меняют? Эти условия должны быть связаны с какими-то тегами ПЛК.
Все теги ПЛК участвующие в скриптах должны быть Acquisition mode: Cyclic continuous.
alex3110 писал(а): 01 сен 2020, 09:57Filters = LogOUT (i)
Функция вернет вам LogOUT30

Автор темы
alex3110
освоился
освоился
Сообщения: 289
Зарегистрирован: 02 апр 2015, 18:16
Имя: Симонов Игорь Валерьевич
Благодарил (а): 27 раз
Поблагодарили: 9 раз

Возможна ли непрямая адресация в VBS ?

Сообщение alex3110 »

SMax писал(а): 01 сен 2020, 11:31 Все теги ПЛК участвующие в скриптах должны быть Acquisition mode: Cyclic continuous.
1. Вот она, самая большая вишенка на торте :-)
Я б даже сказал : "клубничка".
А я ж сначала только "меандровый" тэг-триггер сделал Acquisition mode: Cyclic continuous.
Все тэги Log_**_IN - привязаны к контроллерным. Все остальные - внутренние.

2. Кстати заработало и при типе скрипта "Filters" = Sub
Думаю, что и с "Function" тоже будет работать.
Только в этом случае что указать в качестве "Return VALUE" вместо Filters = LogOUT (i) ?
SMax писал(а): 01 сен 2020, 11:31 alex3110 писал(а): ↑Сегодня, 09:57
Filters = LogOUT (i)
Функция вернет вам LogOUT30
3. Хайли лайкли, что мультиплексированные тэги, о которых говорилось ранее, работают тоже и без дополнительного размещения на том же экране полей "I/O Filed" с "обычными" тэгами. Вроде как работали, на 95%. Чтоб сказать, что на 100% - это сейчас надо снова запускать тиапортал, грузить туда PLCSIM - вобщем долго, а пора уже домой ))

SMax
не первый раз у нас
не первый раз у нас
Сообщения: 325
Зарегистрирован: 17 июн 2016, 14:18
Имя: Максим
Благодарил (а): 7 раз
Поблагодарили: 118 раз

Возможна ли непрямая адресация в VBS ?

Сообщение SMax »

alex3110 писал(а): 01 сен 2020, 14:37Кстати заработало и при типе скрипта "Filters" = Sub
Ну работает - так работает, поздравляю с победой!
alex3110 писал(а): 01 сен 2020, 14:37Только в этом случае что указать в качестве "Return VALUE" вместо Filters = LogOUT (i) ?
Вернуть из функции можете все что пожелаете, например:

Код: Выделить всё

Dim i, FilterEnbl, LogIN, LogOUTprev, DeadBand, RetVal
RetVal = 0
For i = 1 To 30
...

If FilterEnbl <> 0 And LogOUTprev > DeadBand Then 
     SmartTags("Log_" & i & "_OUT") = LogOUT (i)
     RetVal = RetVal + 1
End If
Next

Filters = RetVal   'Количество вызовов функции LogOUT в цикле

End Function

Автор темы
alex3110
освоился
освоился
Сообщения: 289
Зарегистрирован: 02 апр 2015, 18:16
Имя: Симонов Игорь Валерьевич
Благодарил (а): 27 раз
Поблагодарили: 9 раз

Возможна ли непрямая адресация в VBS ?

Сообщение alex3110 »

alex3110 писал(а): 01 сен 2020, 14:37 3. Хайли лайкли, что мультиплексированные тэги, о которых говорилось ранее, работают тоже и без дополнительного размещения на том же экране полей "I/O Filed" с "обычными" тэгами. Вроде как работали, на 95%. Чтоб сказать, что на 100% - это сейчас надо снова запускать тиапортал, грузить туда PLCSIM - вобщем долго, а пора уже домой ))
Да, всё подтверждаю, что мультиплексированные тэги, о которых говорилось ранее, работают и работают без дополнительного размещения на том же экране полей "I/O Filed" с "обычными" тэгами.
SMax писал(а): 01 сен 2020, 15:18 Ну работает - так работает, поздравляю с победой!
Спасибо. :thankyou: :ext_hooray:
Как пели ранее дифтёнки-арабески (точнее мужик там "проречитативел"). Но дифтёнки, думаю, тоже не возражали.
We should be thinking about some drinking.
Шо по-русски означает :"А не послать ли нам гонца в магазин - купить винца" :ext_beer2: :lol:
Ну а потом, как водицца :bayan: :ges_up:

stesl
эксперт
эксперт
Сообщения: 1035
Зарегистрирован: 31 мар 2018, 12:05
Имя: Вячеслав
Благодарил (а): 100 раз
Поблагодарили: 141 раз

Возможна ли непрямая адресация в VBS ?

Сообщение stesl »

alex3110 писал(а): 03 сен 2020, 12:26 Ну а потом, как водицца :bayan:
Не рекомендую ) Лучше книжицу почитать. Провал размером с добрый ВУЗ чувствуется. Извините, если задел ;)
Ответить

Вернуться в «Общие вопросы»