Для изменения значения тега на противоположное при нажатии на кнопку в WinCC придется использовать скрипт. Так как выполнять это действие в рамках проекта может понадобиться неоднократно, создадим Global Script, который будет вызываться из обработчика событий нажатия кнопки.
Теперь при необходимости инвертировать значение тега в обработчике события OnClick кнопки добавляем вызов функции InvertTag:
К сожалению, тип переменной, возвращаемой функцией Read, не Boolean, поэтому использовать оператор Not для инвертирования значения тега не получается.
Обработчик события нажатия кнопки в VB будет выглядеть так:
Первые три строчки в теле функции необходимы для работы системы перекрестных ссылок WinCC.
WinCC V7.0+SP3
С-скрипт
Вызываем Global Script C-Editor и в меню File выбираем New Project Function (Alt-P). Наша функция будет принимать в качестве аргумента имя тега, который необходимо инвертировать, и выглядит достаточно просто:void InvertTag(char* tagName) { SetTagBit(tagName, !GetTagBit(tagName)); }
Теперь при необходимости инвертировать значение тега в обработчике события OnClick кнопки добавляем вызов функции InvertTag:
VBS
Открываем VBS-Editor, в новом (File -> New -> Project Module) или существующем модуле определяем подпрограмму:Sub InvertTag(Byval tagName) Dim tagObj Set tagObj = HMIRuntime.Tags(tagName) If tagObj.Read = 0 Then tagObj.Write 1 Else tagObj.Write 0 End If End Sub
К сожалению, тип переменной, возвращаемой функцией Read, не Boolean, поэтому использовать оператор Not для инвертирования значения тега не получается.
Обработчик события нажатия кнопки в VB будет выглядеть так:
Sub OnClick(Byval Item) ' WINCC:TAGNAME_SECTION_START Const tagName = "_tag1" ' WINCC:TAGNAME_SECTION_END InvertTag(tagName) End Sub
Первые три строчки в теле функции необходимы для работы системы перекрестных ссылок WinCC.
WinCC V7.0+SP3
Доброго времени суток, уважаемый OSC!
ОтветитьУдалитьУ меня возник вот такой вопрос: в программе Siemens PCS7 используется кнопка, которая при нажатии "мышкой" меняет свое название с "Пуск" на "Стоп" и меняет тэг согласно описанной Вами выше функции InvertTag. После второго нажатия меняет обратно на "Пуск" и тэг возвращается в исходное состояние. Теперь надо сделать так, чтобы после пуска механизма ("Пуск" --> "Стоп") при появлении определенного бита аварии кнопка автоматически сбрасывалась в первоначальное состояние "Пуск" и тэг возвращался в исходное состояние, как при повторном нажатии "мышкой". Причем повторный запуск механизма в работу не должен зависеть от того остался ли бит аварии или исчез.
Дело срочное, буду премного благодарен за ответ на aivenergy@mail.ru или на vk.com/aivenergy.
С уважением, Андреев Иван.