- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
Возможна ли непрямая адресация в VBS ?
Модератор: Глоб.модераторы
-
- не первый раз у нас
- Сообщения: 325
- Зарегистрирован: 17 июн 2016, 14:18
- Имя: Максим
- Благодарил (а): 7 раз
- Поблагодарили: 118 раз
Возможна ли непрямая адресация в VBS ?
Скрипты работают только с активным экраном, если у вас данные сохраняются в тегах, будь то теги ПЛК или внутренние теги WinCC, то все должно работать. Другое дело если мультиплексировать свойства OutputValue различных I/O field, тогда да, их присутствие будет необходимо на активном экране.
Еще вариант, откуда вызывается скрипт заполняющий не «мультиплексированные» теги? Он тоже должен работать с экраном на котором «мультиплексированное» "I\O field", иначе в тегах будут либо пустые либо старые значения.
Еще вариант, откуда вызывается скрипт заполняющий не «мультиплексированные» теги? Он тоже должен работать с экраном на котором «мультиплексированное» "I\O field", иначе в тегах будут либо пустые либо старые значения.
-
- освоился
- Сообщения: 289
- Зарегистрирован: 02 апр 2015, 18:16
- Имя: Симонов Игорь Валерьевич
- Благодарил (а): 27 раз
- Поблагодарили: 9 раз
Возможна ли непрямая адресация в VBS ?
Может так и можно. Пока так не разу не делал. А делал так, что с помощью "Symbol I\O field" выбирал нужный мне датчик. При этом в тэг "Index" записывал признак этого датчика (1...30), затем этот индекс использовал для вывода в "универсальное" поле "I\O field" значение (например, выходное) того датчика, который я выбрал с помощью "Symbol I\O field".
А как это в скриптах сделать даже и "have no idea". Да вроде как и непонятно зачем. Ведь есть же стандартный и удобный для оперов метод который я описал. Т.е. метод выпадающего списка (датчиков), а не необходимость вручную вводить в какое-нить поле "I\O field" номер нужного датчика, чтобы потом VB-script смог его распознать и в "общее" поле вывести результат расчёта именно для выбранного датчика.
Отправлено спустя 15 минут 51 секунду:
Опаньки
Мой скрипт запускается "меандровым" импульсом "0"-"1"-"0"-"1" и т.д., который панель получает от PLC.
Так что, мой скрипт будет работать и, самое главное - изменять выходные значения, только в том случае, если открыт экран, на котором есть графические элементы (ну в данном случае поля "I\O field") к которым привязаны все "обычные" тэги, которые я задействовал в своём скрипте ?
А переключись я в другой экран - и всё, в "выходных" тэгах уже ничего обновляться не будет ?
-
- эксперт
- Сообщения: 1035
- Зарегистрирован: 31 мар 2018, 12:05
- Имя: Вячеслав
- Благодарил (а): 100 раз
- Поблагодарили: 141 раз
Возможна ли непрямая адресация в VBS ?
alex3110, сейчас как раз сел - панельку нарисовать, и да, увидел там опцию multiplexing, но
Далее не совсем понятно... Если вы в скрипте обращаетесь к тегам так
то на экране они не нужны. Если же обращаться к свойствам I/O где они выводятся, то соответственно нужны.
Тут кстати снова можно поднять тему, а что такое глобальный скрипт ) Скрипт, на то он и скрипт, что обрабатывает событие, к которому он "привязан". Глобальный же можно просто настроить на какой то промежуток. Скажем раз в секунду.
Поймите наверное главное. Допустим Вы привязали скрипт к изменению тега в I/O. Пока этот I/O на экране, все работает, как только его нет - ничего же не изменяется. Скрипт то работает с полем I/O, а не с самим тегом.
)))
Если этот тег выведен на экран, и экран активен, и привязка, например - к изменению значения - будет выполняться.
Далее не совсем понятно... Если вы в скрипте обращаетесь к тегам так
Код: Выделить всё
SmartTags("Tag_" & index) = 0
Тут кстати снова можно поднять тему, а что такое глобальный скрипт ) Скрипт, на то он и скрипт, что обрабатывает событие, к которому он "привязан". Глобальный же можно просто настроить на какой то промежуток. Скажем раз в секунду.
Поймите наверное главное. Допустим Вы привязали скрипт к изменению тега в I/O. Пока этот I/O на экране, все работает, как только его нет - ничего же не изменяется. Скрипт то работает с полем I/O, а не с самим тегом.
-
- освоился
- Сообщения: 289
- Зарегистрирован: 02 апр 2015, 18:16
- Имя: Симонов Игорь Валерьевич
- Благодарил (а): 27 раз
- Поблагодарили: 9 раз
Возможна ли непрямая адресация в VBS ?
Теперь уже понял. Практически. :-)
Сейчас поэкспериментировал и самые худшие мои опасения подтвердились, хотя я, конечно, слышал и ранее про такие подлости VBS-скриптов. Ну чтобы так, когда у меня почти всё было готово и заработало .
В сложившейся ситуации просматривается только один выход.
1. Найти экран, который наиболее часто используется операми. Как правило, это «стартовый» экран.
2. Разместить на каком-нибудь из слоёв этого экрана поля "I\O field" со всеми тэгами, которые нужны в скрипте для расчёта выходных значений по каждому датчику. Потом скрыть их, и при необходимости делать их видимыми по кнопке.
3. На другом экране, где буду задавать константы и биты управления для каждого датчика, которые будут участвовать в расчётах VBS-скрипта, сделать то же, что и в п.2
4. Требовать от оперов, чтобы они, уходя, всегда оставляли на панели нужный мне «стартовый» экран. Иначе скрипты бесполезны.
В связи с п.4 возникает ещё вопрос, положительный ответ на который может п.4 исключить вообще, а именно :
Можно ли, с помощью какой-нибудь из системных функций панели, по истечении определённого времени «не нажатия на экран панели» (ну или по «планировщику задач» раз в 5 мин.), принудительно переключать панель на «стартовый» экран, на котором, в «невидимом» виде, будут находиться поля "I\O field" со всеми тэгами, которые нужны в скрипте для расчёта выходных значений по каждому датчику и где будут реально обновляться.
А есть ли ещё другие варианты «выходов» ?В сложившейся ситуации просматривается только один выход.
Ну, кроме того, как всё это делать в STEP7.
Последний раз редактировалось alex3110 28 авг 2020, 11:44, всего редактировалось 1 раз.
-
- освоился
- Сообщения: 289
- Зарегистрирован: 02 апр 2015, 18:16
- Имя: Симонов Игорь Валерьевич
- Благодарил (а): 27 раз
- Поблагодарили: 9 раз
Возможна ли непрямая адресация в VBS ?
По большому счёту, для каждого из 30-датчиков для скрипта я хотел бы указывать только 2 параметра :
1. Индивидуальный бит активации/деактивации расчёта для этого датчика.
2. Индивидуальное значение "DeadBand" в "UInt" для этого датчика.
В крайнем случае, чтобы избежать вышеописанных проблем, я могу эти 2 параметра в скрипте задать жёстко и не предоставлять "операм" возможность их выбора.
Тогда не придётся создавать поля "I\O field" на экране и привязывать к ним тэги, участвующие в скрипте.
Единственным неудобством будет то, что я в симуляции не смогу просмотреть работает ли скрипт и работает ли он правильно. Понять это можно будет только по факту, т.е. загрузив в панель новый вариант проекта с добавленным скриптом и потом, через время, считать файлы "логов" из USB-флэшки, которые туда панель их будет записывать.
Хотя, наверное можно "выходные" тэги временно настроить на пересылку в PLC, а потом используя PLCSIM совместно с симулятором WInCC RT , посмотреть их уже в PLC, в каком-нибудь временном DB
Последний раз редактировалось alex3110 28 авг 2020, 11:47, всего редактировалось 2 раза.
-
- не первый раз у нас
- Сообщения: 325
- Зарегистрирован: 17 июн 2016, 14:18
- Имя: Максим
- Благодарил (а): 7 раз
- Поблагодарили: 118 раз
Возможна ли непрямая адресация в VBS ?
Если преобразуете скрипт так чтобы он работал только с тегами, без опроса графических элементов, и будет вызываться глобально по тегу (как у Вас и сделано), то все должно работать независимо от экранов.
-
- освоился
- Сообщения: 289
- Зарегистрирован: 02 апр 2015, 18:16
- Имя: Симонов Игорь Валерьевич
- Благодарил (а): 27 раз
- Поблагодарили: 9 раз
Возможна ли непрямая адресация в VBS ?
, SMax !
Я видимо о том и писал, когда Вы послали своё сообщение :-)
Попробую.
Я видимо о том и писал, когда Вы послали своё сообщение :-)
Попробую.
-
- не первый раз у нас
- Сообщения: 325
- Зарегистрирован: 17 июн 2016, 14:18
- Имя: Максим
- Благодарил (а): 7 раз
- Поблагодарили: 118 раз
Возможна ли непрямая адресация в VBS ?
Вы можете сделать их тегами PLC (DB) и привязать необходимые графические элементы к этим тегам для их изменения. Ну и предоставить операторам возможность выбора, а из скрипта нужно будет обращаться именно к этим тегам (хранящимся в DB), а не к графическим элементам.
-
- освоился
- Сообщения: 289
- Зарегистрирован: 02 апр 2015, 18:16
- Имя: Симонов Игорь Валерьевич
- Благодарил (а): 27 раз
- Поблагодарили: 9 раз
Возможна ли непрямая адресация в VBS ?
Похоже, начинаю ходить кругами.
Давайте пока исключим с экрана :
- все «мультиплексированные» тэги ;
- все графические объекты (ГО), которые предоставляют оперу доступ к на-стройкам моих фильтров для каждого датчика.
Как я уже писал, мой скрипт запускается "меандровым" импульсом "0"-"1"-"0"-"1" и т.д., который панель получает от PLC.
Помещаю на стартовый «активный» экран поле "I\O field", к которому в качестве «VALUE» привязывают этот «импульсный» тэг.
В принципе я могу потом скопировать это поле "I\O field" и на другой экран, где к примеру, я хочу разместить уставки.
Разместил там же, на стартовом экране, пока 2 группы полей "I\O field" (для 2-х датчиков), к которым привязаны значения соответствующих групп тэгов, к которым скрипт обращается при своей работе.
Вот скрипты :
Вот функция LogOUT, которая вызывается в предыдущем коде :
При таком раскладе всё работает до тех пор, пока на экране присутствуют поля "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-скриптами.
Что теперь надо сделать, чтобы скрипты стали «независимы от экранов» ?
Сейчас вот и хочется сделать «независимо от экранов», т.е. чтобы на экранах не присутствовали бы поля "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
Код: Выделить всё
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
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 раз.
-
- эксперт
- Сообщения: 1737
- Зарегистрирован: 06 янв 2016, 19:45
- Имя: Петров В.Л.
- Страна: Россия
- город/регион: Красноярск
- Благодарил (а): 78 раз
- Поблагодарили: 235 раз
Возможна ли непрямая адресация в VBS ?
По всей видимости не привязывать их к экранным элементам. Насколько помню, скрипт можно посадить на событие изменения значения ТЭГа
-
- освоился
- Сообщения: 289
- Зарегистрирован: 02 апр 2015, 18:16
- Имя: Симонов Игорь Валерьевич
- Благодарил (а): 27 раз
- Поблагодарили: 9 раз
Возможна ли непрямая адресация в VBS ?
В свойствах того "импульсного" тэга я указал - запускать скрипт "Filters". Если я этот "импульсный" тэг не привяжу к какому-нибудь экранному ГО, то скрипт не работает.
-
- эксперт
- Сообщения: 1035
- Зарегистрирован: 31 мар 2018, 12:05
- Имя: Вячеслав
- Благодарил (а): 100 раз
- Поблагодарили: 141 раз
Возможна ли непрямая адресация в VBS ?
Если он отображается на экране. Где и как отреагировать на изменение тега по другому - пока не знаю.
Предыдущий пост осилить не могу ) Но призвал бы изучить все таки что такое глобальный скрипт. Который можно запускать по таймеру. Зачем этот искусственный меандр?
Отправлено спустя 7 минут 12 секунд:
PS Как вариант, сделайте в подложке I/O время (если еще не сделано) и запускайтесь с изменения содержимого этого I/O. Под подложкой имею ввиду Template
-
- освоился
- Сообщения: 289
- Зарегистрирован: 02 апр 2015, 18:16
- Имя: Симонов Игорь Валерьевич
- Благодарил (а): 27 раз
- Поблагодарили: 9 раз
Возможна ли непрямая адресация в VBS ?
А где ж тогда взять было ? ))
Про поле "I/O время" как-то раньше и не думалось. Тем более там изменяется секундами.
А за секунду боюсь, что вряд ли скрипт успеет отработать по всем датчикам. Их 30 штук.
А меандр у меня с периодом 8 сек. Т.е. 4 сек. "1", и 4 сек "0". Думаю, что вполне хватит.
Если брать "минутный" интервал (который я мог бы взять и из планировщика задач), то это многовато. Так как есть датчики, сигналы которых, в определённых режимах (например - "запуск агрегата и выход на рабочий режим") нужно отслеживать ну хотя бы не реже 1 раз/5 сек.
Пожалуй, придётся почитать про "глобальный скрипт" ))
Если Вы о назначении моих скриптов, то задача состоит в том, чтобы отфильтровать изменяющиеся входные значения. Фильтр запоминает предыдущее выходное значение и держит его на своём выходе. Он изменит это значение только тогда, когда входное значение станет больше или меньше этого запомненного фильтром значение на величину "Dead Band". Новым запомненный выходным значением станет текущее на этот момент входное.
-
- эксперт
- Сообщения: 1035
- Зарегистрирован: 31 мар 2018, 12:05
- Имя: Вячеслав
- Благодарил (а): 100 раз
- Поблагодарили: 141 раз
Возможна ли непрямая адресация в VBS ?
Прикалываетесь? ) Напишите код, который генерирует от 10000 случайных чисел, и отсортирует список. И самое долгое, что он будет выполнять - вывод ответа ;) Ну конечно от алгоритма зависит. Но не беру в расчет какие то нелепые решения.
Нет, я о том, что текста много и кода )Если Вы о назначении моих скриптов
-
- освоился
- Сообщения: 208
- Зарегистрирован: 16 дек 2011, 15:13
- Имя: Алексей
- Страна: Россия
- Благодарил (а): 67 раз
- Поблагодарили: 53 раза
Возможна ли непрямая адресация в VBS ?
Уже писал неоднократно, если в панели теги нигде не используются (экран, логгинг или прямое использование в скриптах), то индиректное обращение по составному имени, например так: к чтению из тега/записи в тег ни к чему не приведет.
Это если речь о панелях Siemens (читайте мануалы). Если расположить невидимые I\O Field-ы с привязкой ко всем тегам на каком нибудь экране, то работать скрипты будут.
Код: Выделить всё
"Main_" & i & "_OUT"
Это если речь о панелях Siemens (читайте мануалы). Если расположить невидимые I\O Field-ы с привязкой ко всем тегам на каком нибудь экране, то работать скрипты будут.
-
- освоился
- Сообщения: 289
- Зарегистрирован: 02 апр 2015, 18:16
- Имя: Симонов Игорь Валерьевич
- Благодарил (а): 27 раз
- Поблагодарили: 9 раз
Возможна ли непрямая адресация в VBS ?
А всё ли мне даст глобальный скрипт, что хочу ?
Думаю, что даже если я и перенастрою свои скрипты на «глобальные» наподобие этого
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 секунды:
Так всё-таки "...расположить...на каком нибудь экране", и конечно, I\O Field-ы "лучше невидимые".
Ну чтоб не закрывали другие и более нужные для обзора ГО экрана.
Ясно, спасибо !
Думаю, что даже если я и перенастрою свои скрипты на «глобальные» наподобие этого
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 секунды:
О, похоже это "финальная вишенка на торте" :-)
Так всё-таки "...расположить...на каком нибудь экране", и конечно, I\O Field-ы "лучше невидимые".
Ну чтоб не закрывали другие и более нужные для обзора ГО экрана.
Ясно, спасибо !
-
- эксперт
- Сообщения: 1035
- Зарегистрирован: 31 мар 2018, 12:05
- Имя: Вячеслав
- Благодарил (а): 100 раз
- Поблагодарили: 141 раз
Возможна ли непрямая адресация в VBS ?
Либо я чего то не понимаю, либо я высказываюсь криво.
Мысль такая - пишите скрипт в области - глобальные. Триггером ставите таймер. В нем обращаетесь НЕ к I/O, а непосредственно к тегам из Вашего списка. Я подозреваю, что речь о WinCC Portal. Не пишу там скрипты. В WinCC "чистой", обращаясь HMIRuntimeTag, обращаешься непосредственно к значению тега. И пофиг, что на экране.
Глобальный, значит исполняется во всем "поле зрения Runtime". Локальный - привязан к какому то ГО, экрану и т.п.
-
- не первый раз у нас
- Сообщения: 325
- Зарегистрирован: 17 июн 2016, 14:18
- Имя: Максим
- Благодарил (а): 7 раз
- Поблагодарили: 118 раз
Возможна ли непрямая адресация в VBS ?
1. Создайте все необходимые внутренние теги (Filter_1_Enbl ... Filter_30_Enbl, Dead_1_Band ... Dead_30_Band и т.д.)
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» выбирается, например, для тега, у которого есть список функций, настроенный на изменение его значения, и который не отображается непосредственно на экране.
3. Создайте функцию «Filters» именно функцию, а также функции вызываемые из неё.
4. Задайте в событиях, тегу для запусков скриптов ("меандровый" импульс), запуск функции «Filters» по изменению значения. Отправлено спустя 15 минут 27 секунд:
Можете также предоставить операторам возможность выбора, задействовав необходимые графические элементы и привязав их к внутренним тегам. Оператор откроет нужный экран, введет значение, оно запишется во внутренний тег и оператор может переключить экран, значение то в теге останется и вы можете считывать его скриптом.
Можете использовать и теги PLC (DB), но ставьте у них свойство Acquisition mode: Cyclic continuous.
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» выбирается, например, для тега, у которого есть список функций, настроенный на изменение его значения, и который не отображается непосредственно на экране.
3. Создайте функцию «Filters» именно функцию, а также функции вызываемые из неё.
4. Задайте в событиях, тегу для запусков скриптов ("меандровый" импульс), запуск функции «Filters» по изменению значения. Отправлено спустя 15 минут 27 секунд:
Можете также предоставить операторам возможность выбора, задействовав необходимые графические элементы и привязав их к внутренним тегам. Оператор откроет нужный экран, введет значение, оно запишется во внутренний тег и оператор может переключить экран, значение то в теге останется и вы можете считывать его скриптом.
Можете использовать и теги PLC (DB), но ставьте у них свойство Acquisition mode: Cyclic continuous.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- освоился
- Сообщения: 289
- Зарегистрирован: 02 апр 2015, 18:16
- Имя: Симонов Игорь Валерьевич
- Благодарил (а): 27 раз
- Поблагодарили: 9 раз
Возможна ли непрямая адресация в VBS ?
Да, действительно TIA v.15.1 и проект для панели ТР1500 Comfort.
Может надо было сразу указать, но полагал, что не должно было быть разницы по сравнению с WinCC Flex, т.к. речь о "панельном" проекте.
Всем спасибо, попробую оптимизировать.
-
- освоился
- Сообщения: 289
- Зарегистрирован: 02 апр 2015, 18:16
- Имя: Симонов Игорь Валерьевич
- Благодарил (а): 27 раз
- Поблагодарили: 9 раз
Возможна ли непрямая адресация в VBS ?
Пока не работает.
Половина из п.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.
Половина из п.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.
-
- не первый раз у нас
- Сообщения: 325
- Зарегистрирован: 17 июн 2016, 14:18
- Имя: Максим
- Благодарил (а): 7 раз
- Поблагодарили: 118 раз
Возможна ли непрямая адресация в VBS ?
У Вас это внутренний тег или тег ПЛК?
Если внутренний, то какие условия в ПЛК его меняют? Эти условия должны быть связаны с какими-то тегами ПЛК.
Все теги ПЛК участвующие в скриптах должны быть Acquisition mode: Cyclic continuous.
Функция вернет вам LogOUT30
-
- освоился
- Сообщения: 289
- Зарегистрирован: 02 апр 2015, 18:16
- Имя: Симонов Игорь Валерьевич
- Благодарил (а): 27 раз
- Поблагодарили: 9 раз
Возможна ли непрямая адресация в VBS ?
1. Вот она, самая большая вишенка на торте :-)
Я б даже сказал : "клубничка".
А я ж сначала только "меандровый" тэг-триггер сделал Acquisition mode: Cyclic continuous.
Все тэги Log_**_IN - привязаны к контроллерным. Все остальные - внутренние.
2. Кстати заработало и при типе скрипта "Filters" = Sub
Думаю, что и с "Function" тоже будет работать.
Только в этом случае что указать в качестве "Return VALUE" вместо Filters = LogOUT (i) ?
3. Хайли лайкли, что мультиплексированные тэги, о которых говорилось ранее, работают тоже и без дополнительного размещения на том же экране полей "I/O Filed" с "обычными" тэгами. Вроде как работали, на 95%. Чтоб сказать, что на 100% - это сейчас надо снова запускать тиапортал, грузить туда PLCSIM - вобщем долго, а пора уже домой ))
-
- не первый раз у нас
- Сообщения: 325
- Зарегистрирован: 17 июн 2016, 14:18
- Имя: Максим
- Благодарил (а): 7 раз
- Поблагодарили: 118 раз
Возможна ли непрямая адресация в VBS ?
Ну работает - так работает, поздравляю с победой!
Вернуть из функции можете все что пожелаете, например:
Код: Выделить всё
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
-
- освоился
- Сообщения: 289
- Зарегистрирован: 02 апр 2015, 18:16
- Имя: Симонов Игорь Валерьевич
- Благодарил (а): 27 раз
- Поблагодарили: 9 раз
Возможна ли непрямая адресация в VBS ?
Да, всё подтверждаю, что мультиплексированные тэги, о которых говорилось ранее, работают и работают без дополнительного размещения на том же экране полей "I/O Filed" с "обычными" тэгами.alex3110 писал(а): ↑01 сен 2020, 14:37 3. Хайли лайкли, что мультиплексированные тэги, о которых говорилось ранее, работают тоже и без дополнительного размещения на том же экране полей "I/O Filed" с "обычными" тэгами. Вроде как работали, на 95%. Чтоб сказать, что на 100% - это сейчас надо снова запускать тиапортал, грузить туда PLCSIM - вобщем долго, а пора уже домой ))
Спасибо.
Как пели ранее дифтёнки-арабески (точнее мужик там "проречитативел"). Но дифтёнки, думаю, тоже не возражали.
We should be thinking about some drinking.
Шо по-русски означает :"А не послать ли нам гонца в магазин - купить винца"
Ну а потом, как водицца
-
- эксперт
- Сообщения: 1035
- Зарегистрирован: 31 мар 2018, 12:05
- Имя: Вячеслав
- Благодарил (а): 100 раз
- Поблагодарили: 141 раз
Возможна ли непрямая адресация в VBS ?
Не рекомендую ) Лучше книжицу почитать. Провал размером с добрый ВУЗ чувствуется. Извините, если задел ;)