понедельник, 11 июня 2012 г.

Инвертирование тега при нажатии на кнопку в WinCC

Для изменения значения тега на противоположное при нажатии на кнопку в WinCC придется использовать скрипт. Так как выполнять это действие в рамках проекта может понадобиться неоднократно, создадим Global Script, который будет вызываться из обработчика событий нажатия кнопки.

С-скрипт

Вызываем 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





1 комментарий:

  1. Доброго времени суток, уважаемый OSC!
    У меня возник вот такой вопрос: в программе Siemens PCS7 используется кнопка, которая при нажатии "мышкой" меняет свое название с "Пуск" на "Стоп" и меняет тэг согласно описанной Вами выше функции InvertTag. После второго нажатия меняет обратно на "Пуск" и тэг возвращается в исходное состояние. Теперь надо сделать так, чтобы после пуска механизма ("Пуск" --> "Стоп") при появлении определенного бита аварии кнопка автоматически сбрасывалась в первоначальное состояние "Пуск" и тэг возвращался в исходное состояние, как при повторном нажатии "мышкой". Причем повторный запуск механизма в работу не должен зависеть от того остался ли бит аварии или исчез.
    Дело срочное, буду премного благодарен за ответ на aivenergy@mail.ru или на vk.com/aivenergy.
    С уважением, Андреев Иван.

    ОтветитьУдалить