Tools


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

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

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

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

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

Аватара пользователя
Mef
Сообщения: 9
Зарегистрирован: 18 апр 2018, 09:28

Сообщение Mef » 14 авг 2020, 10:03

ComBat писал(а):
14 авг 2020, 08:39
...
Так что ? Придётся делать в PLC что-то такое периодически-импульсное, т.е. какой-то битовый тэг с нужной
частотой изменения, потом передавать его в панель, к нему привязвать соотв-щий "панельный" тэг и последний исп-ть в качестве триггера ?

Если для оператора не критично изменение параметра в малом диапазоне, то можно сделать 'dead band' на 'PLC' и передавать/логировать, уже "отфильтрованный", сигнал на 'HMI'.

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

Сообщение ComBat » 14 авг 2020, 13:32

Mef писал(а):
14 авг 2020, 10:03
Если для оператора не критично изменение параметра в малом диапазоне, то можно сделать 'dead band' на 'PLC' и передавать/логировать, уже "отфильтрованный", сигнал на 'HMI'.
Да, и такой вариант тоже держу про запас.
Но пока хочу это сделать в панели на VBS, т.к. TIA-проект делался взамен старой панели и проект был для "старого" PLC S7-300 и STEP7. Не хочется пока возиться с конвертацией и добавлением кучей новых тэгов.
Проектные изменения я гружу в CPU со старого программатора, на который TIA-портал ну никак не поставить. Поэтому "контроллерная" часть - у меня в STEP7 v.5.5 , а "панельная" часть - в TIA.
Последний раз редактировалось ComBat 14 авг 2020, 13:39, всего редактировалось 1 раз.

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

Сообщение ComBat » 14 авг 2020, 13:34

Таким образом возникает следующий вопрос.

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

Нужно написать 30 одинаковых скриптов для 30 групп тегов. Каждая группа тегов состоит из 3-х уникальных внутренних тегов панели и относится к соответствующему тегу ПЛК, который будет для скрипта «входным». В скрипте необходимо производить простые арифметические и сравнительные действия.
Можно сделать 30 разных скриптов с прямой адресацией.

Но можно ли сделать только один VBS-скрипт, в котором можно было бы применить непрямую адресацию и «цикл», чтобы минимизировать размер кода.
Думаю, что тогда эти 30 групп тегов можно было бы по очереди вызывать и вставлять в сценарий как «входы» / «выходы».

Если кому не трудно, покажите, пожалуйста, как будет выглядеть конструкция такого «универсального» VBS-скрипта, или где можно найти пример.

Тэги такие :

"VAR_1_IN" ; "VAR_1.1" ; "VAR_1.2" ; "VAR_1_OUT"
"VAR_2_IN" ; "VAR_2.1" ; "VAR_2.2" ; "VAR_2_OUT"
"VAR_3_IN" ; "VAR_3.1" ; "VAR_3.2" ; "VAR_3_OUT"
………………………………………………………………
"VAR_30_IN" ; "VAR_30.1" ; "VAR_30.2" ; "VAR_30_OUT"

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

Сообщение ComBat » 17 авг 2020, 08:11

......
Последний раз редактировалось ComBat 17 авг 2020, 10:12, всего редактировалось 1 раз.

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

Сообщение ComBat » 17 авг 2020, 10:11

Если поконкретнее, то оставил 3 тэга и написал, что должны делать скрипты.

Тут ниже 30 раз значение тэга "VAR_*_IN" переписывается в тэг "VAR_*_OUT", только если тэг VAR_*.1 = «1»

Temp1 = SmartTags("VAR_1_IN")
If SmartTags("VAR_1.1") = 1
then SmartTags("VAR_1_OUT") = Temp1

Temp2 = SmartTags("VAR_2_IN")
If SmartTags("VAR_2.1") = 1
then SmartTags("VAR_2_OUT") = Temp2

…………………………….……….
…………………………….……….

Temp30 = SmartTags("VAR_30_IN")
If SmartTags("VAR_30.1") = 1
then SmartTags("VAR_30_OUT") = Temp30


Теперь как сделать один универсальный скрипт со счётчиком циклов и подстановкой тэгов "VAR_*_IN" ; "VAR_*_OUT" ; «VAR_*.1», чтобы код был максимально компактным ?

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

Сообщение ComBat » 28 авг 2020, 07:43

Заработало, но нарвался ещё на одну засаду.
Надеюсь, на последнюю. :)
Для "компактизации", на экране сделал поле "I\O field" в которое, в зависимости от выбранного датчика, вывожу соответствующие значения мультиплексированного тэга VAROUT. Отдельные VAR_**_OUT я вычисляю с помощью VBS-скрипта.
Т.е., если я выбрал датчик 5, то в это "I\O field" должно выводиться значение обычного тэга VAR_5_OUT .
Но в это «мультиплексированное» "I\O field" это значение VAR_5_OUT выводится только тогда, когда на том же экране дополнительно будет присутствовать обычное (не «мультиплексированное») "I\O field" тэга VAR_5_OUT .
То же самое и в отношении всех остальных тэгов VAR_1_OUT… VAR_4_OUT, VAR_6_OUT… VAR_30_OUT .

Получается, что работать будет только так ?
Т.е. на экране, например, в другом слое, надо делать эти дополнительные поля обычных (не «мультиплексированных») тэгов ?
Ну и потом делать их все невидимыми, чтоб глаз не «мозолили».

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

Сообщение ComBat » 28 авг 2020, 12:16

Бывалые советуют скрипт сделать такой, чтобы он работал только с тегами, которые НЕ привязаны ни к каким графическим элементам на экранах. Скрипт должен циклически запускаться от какого-нибудь битового контроллерного тэга.

Единственное неудобство при проверке - на самой панели нельзя будет увидеть работу скрипта.
Но, думаю можно сделать так : можно "выходные" тэги скрипта временно настроить на пересылку в PLC, в какой-нибудь временный DB, а потом используя PLCSIM совместно с симулятором WinCC RT , смотреть их в этом DB.

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

Сообщение ComBat » 31 авг 2020, 07:10

Что-то пока не очень получается.

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

Можно ли сделать так, чтобы скрипты работали "за экраном", т.е. без привязки тэгов, участвующих в скрипте, к графическим объектам активного экрана ?

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

Сообщение Eugene1974 » 31 авг 2020, 13:45

У HMI-тега в свойствах есть вкладка "Settings". Там есть "Acquisition mode". По умолчанию установлено "Cyclic in operation", а в Вашем случае надо "Cyclic continuous".

If you select the "Cyclic in operation" acquisition mode, the tag is updated in Runtime while it is displayed in a screen or is logged. The acquisition cycle determines the update cycle for tag value updates on the HMI device. You can either choose a default acquisition cycle or define a user-specific cycle.
If you select the "Cyclic continuous" acquisition mode, the tag will be updated continuously in Runtime, even if it is not in the currently-open screen. This setting is activated for tags that are configured to trigger a function list when their value changes, for example.

Only use the "Cyclic continuous" setting for tags that must truly be updated. Frequent read operations increase communication load.

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

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

........
см. далее .....
Последний раз редактировалось ComBat 01 сен 2020, 10:44, всего редактировалось 3 раза.

cron