Tools


«Сименс» в России

«Сименс» в России

Скрипты в панели ТР1500 Comfort

Панели оператора PP/OP/TP/TD/MP, программные пакеты ProTool/WinCC flexible, SCADA система WinCC

Модераторы: nikanorov_vladimir, kosmin_aleksandr, yurchenko_vladimir

ComBat
Сообщения: 163
Зарегистрирован: 22 апр 2018, 08:55

Сообщение ComBat » 01 сен 2020, 10:19

Забыл написать, что это проект в ТИА портале 15 для панели ТР1500 Комфорт


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

Скрипт работает (т.е., например, для конкретного датчика №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.

Хотелось бы, чтобы скрипты работали независимо от того, какой экран в данный момент активен.


Вот скрипты :

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

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, которая вызывается в предыдущем коде (перед NEXT ) :

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

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  

Eugene1974
Сообщения: 175
Зарегистрирован: 22 апр 2018, 10:41

Сообщение Eugene1974 » 01 сен 2020, 11:09

Так у всех тегов, которые используются скриптами надо установить “Cyclic continuous”, а не только у тега-триггера.

ComBat
Сообщения: 163
Зарегистрирован: 22 апр 2018, 08:55

Сообщение ComBat » 01 сен 2020, 14:57

+100 500 :D
Заработало !!!
Только небольшое уточнение - у всех HMI-тэгов, созданных на базе "контроллерных", участвующих в скрипте.
Хотя в общем-то для внутренних тэгов тиапортал и не даст такой возможности. Там всё серо и неактивно в этой опции.