Добрый день. Нужна помощь. Имеется IOField в сойство OutputValue я прописал скрипт ВБА типа считывать тег и в зависимости от значения тега выводить тот или иной тег
Dim Num, tag
Set num = HMIRuntime.ActiveScreen.ScreenItems("IOField1")
tag = SmartTags("agzu.RealCodePSM").Value
If tag = 1 Then nUM.OutputValue = SmartTags("agzu.Well1_GeoNum").Value
Но скрипт срабатывает только когда я нажимаю на это поле. Как сделать чтоб срабатывал скрипт при открытии окна
- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
Скрипт
-
- осмотрелся
- Сообщения: 194
- Зарегистрирован: 19 сен 2019, 10:09
- Имя: Макс
- Страна: Россия
- город/регион: Славянск-на-Кубани
- Благодарил (а): 5 раз
- Поблагодарили: 34 раза
Скрипт
В таких случаях лучше обходиться без скрипта. Создаете два IOField, на Visible первого назначаете agzu.RealCodePSM, Value - agzu.Well1_GeoNum, второй видим всегда value - иной тег. Первый располагаете по слоям выше второго.
WinCC 7.4 SP1 Upd15, Step5.6
-
- осмотрелся
- Сообщения: 194
- Зарегистрирован: 19 сен 2019, 10:09
- Имя: Макс
- Страна: Россия
- город/регион: Славянск-на-Кубани
- Благодарил (а): 5 раз
- Поблагодарили: 34 раза
Скрипт
Тогда лучше использовать не VBS а C-Script, потому что в Си есть функция привязки связи IOField и тега.
То есть в VBSе вы можете только прочитать значение тега и положить значение в поле IOFieldа. И это надо делать периодически, будете повторять ежесекундно скрипт - будет ежесекундно обновляться ИОфилд. В общем чтобы это работало нормально надо чтобы скрипт постоянно висел в фоне и выполнялся.
В Си можно один раз при открытии выполнить скрипт по привязке тега к ИОфилд как мы делаем это руками в ГрафикДизайнере один раз и оно будет работать.
Функция называется SetLink Но если честно я не вижу преимуществ в писании скрипта на 14 условий чем добавлений 14ИОфилдов с назначением условий на Visible.
То есть в VBSе вы можете только прочитать значение тега и положить значение в поле IOFieldа. И это надо делать периодически, будете повторять ежесекундно скрипт - будет ежесекундно обновляться ИОфилд. В общем чтобы это работало нормально надо чтобы скрипт постоянно висел в фоне и выполнялся.
В Си можно один раз при открытии выполнить скрипт по привязке тега к ИОфилд как мы делаем это руками в ГрафикДизайнере один раз и оно будет работать.
Функция называется SetLink Но если честно я не вижу преимуществ в писании скрипта на 14 условий чем добавлений 14ИОфилдов с назначением условий на Visible.
WinCC 7.4 SP1 Upd15, Step5.6
-
- здесь недавно
- Сообщения: 7
- Зарегистрирован: 20 ноя 2023, 23:33
- Имя: Владимир
- Поблагодарили: 1 раз
Скрипт
Здравствуйте,
постарайтесь не использовать
HMIRuntime.ActiveScreen
Чтобы ActiveScreen правильно работал, фокус должен находиться на правильном окне. Во время загрузки окна, фокус может находиться в другом окне и скипт не сработает.
Если вы написали скрипт в свойстве OutputValue можете полюзоваться объектом Item , в данном случае это будет ваш I/O-Field
Далее SmartTags использутся только в TIA WinCC Professional/Advanced или в Faceplates в WinCC V7.x/8.0, но в faceplates не работает HMIRuntime.
В вашем случае можно сделать так:
С уважением
Fess
постарайтесь не использовать
HMIRuntime.ActiveScreen
Чтобы ActiveScreen правильно работал, фокус должен находиться на правильном окне. Во время загрузки окна, фокус может находиться в другом окне и скипт не сработает.
Если вы написали скрипт в свойстве OutputValue можете полюзоваться объектом Item , в данном случае это будет ваш I/O-Field
Далее SmartTags использутся только в TIA WinCC Professional/Advanced или в Faceplates в WinCC V7.x/8.0, но в faceplates не работает HMIRuntime.
В вашем случае можно сделать так:
Код: Выделить всё
tag = HMIRuntime.Tags("agzu.RealCodePSM").Read
If tag = 1 Then Item.OutputValue = HMIRuntime.Tags("agzu.Well1_GeoNum").Read
Fess