2) Step 7 + WinCC: как связать кнопку на панели оператора с соответствующим тэгом в контроллере? Необходимо, чтобы при нажатии кнопки тэг включался, а при отпускании кнопки - выключался (как кнопка с пружинным возвратом).
В событии Press ("нажата") кнопки имеется специальная функция SetBitWhileKeyPressed ("ВключитьБитПокаКнопкаНажата"), которая реализует задуманное.
SetBitWhileKeyPressed.png
Некоторые по незнанию используют два события - Press и Release ("нажата" и "отпущена") и соответственно функции SetBit ("включить бит") и ResetBit ("сбросить бит"). Это в принципе почти одно и то же, только требует больше телодвижений при программировании.
Имеются примечания:
1. Если используется функция SetBitWhileKeyPressed, при нажатой кнопке и переключении экрана соответствующий тэг кнопки автоматически сбросится (как будто кнопка отпущена). При этом автоматически будут выполнены функции в событии Release ("отпущена").
2. Если используется функция SetBitWhileKeyPressed, тэг кнопки нельзя сбрасывать или устанавливать в программе ПЛК, так как этот тэг является read-only. Если требуется доступ к тэгу, используйте SetBit/ResetBit.
3. Если связь панели с контроллером перегружена по траффику, то при кратковременном нажатии кнопки установление соответствующего тэга в ПЛК может не произойти. В этом случае для важных кнопок типа "СТОП" рекомендуется использовать функцию SetBit, а сбрасывать тэг кнопки в программе ПЛК функцией сброса бита ---(R)
после реагирования на нажатие кнопки.
4. В справке ТИА Портала про функцию SetBitWhileKeyPressed написано следующее интересное примечание:
If the PLC supports BOOL tags, do not use this system function. Use the "SetBit" system function instead.
Если ПЛК поддерживает тэги типа BOOL, не используйте эту функцию. Используйте лучше системную функцию "SetBit".
Странное примечание, ведь еще есть функция "SetBitInTag". Возможно рекомендация дана для уменьшения траффика между ПЛК и панелью.
Я использую SetBitWhileKeyPressed и еще ничего не сломалось.