Eventos: OnTagChange e OnTagWrite

Descrição do evento

Estes eventos estão associados a Tags do Kernel e do Viewer.

Variáveis sempre registradas neste tratador:

  • Tag (table) : objeto que representa o Tag que disparou o script (consultar Lua Tags para informações sobre o objeto Tag).

Como utilizar

Seja para OnTagWrite ou OnTagChange, o nome desses eventos indicam quando a ativação de um Script associado a um Tag será executado. Os trechos de código abaixo devem ser inseridos nos Scripts que serão executados. Abaixo estão alguns exemplos básicos de como mostrar informações de diferentes tipos de Tags associados a um evento, na ativação do script. Você pode definir comportamentos totalmente diferentes dos descritos abaixo para serem executados via script. Para isso, acesse a seção Scripts LUA para conhecer mais sobre os recursos e a linguagem de programação utilizada.

Exemplo de uso em um script associado a um evento “OnChange” de um “Tag” :

-- Objeto tag está disponível, é possível inspecionar qual foi o Tag que disparou o evento,

print("Tick " .. os.date())

function printTag(tag)
  print("Id " .. tag.Id)
  print("Name " .. tag.Name)
  print("Value " .. tostring(tag.Value))
  print("Quality " .. tag.Quality)
  print("Type " .. tag.Type)
  print("DateTime " .. tostring(tag.DateTime))

end

if (Tag) then
  printTag(Tag)
end

-- Faça aqui o que o tratador do TagChange deveria fazer

Exemplo de uso, em um script associado ao evento “OnTagChange”, de um Tag de um item do tipo “TagMonitor” :

-- Objeto tag está disponível, é possível inspecionar qual foi o Tag que disparou o evento,

function printTag(tag)
  print("TAG.Id       = " .. tag.Id)
  print("TAG.Name     = " .. tag.Name)
  print("TAG.Value    = " .. tostring(tag.Value))
  print("TAG.Quality  = " .. tag.Quality)
  print("TAG.Type     = " .. tag.Type)
  print("TAG.DateTime = " .. tostring(tag.DateTime))

end

print ("Tag Monitor Change")
print("Tick = " .. os.date())
print("Nome do objeto Sender desta alteracao do Tag = " .. Sender.Name)

local scr = Sender.Screen    -- obtem o objeto associado a tela corrente
if scr then
  print ("   Nome da Tela : " .. scr.Name)
  print ("Caption da Tela : " .. scr.Caption)
end

if (Tag) then
  printTag(Tag)
end

 ......

Exemplo de saida da execução do script acima :

Tag Monitor Change
Tick = 06/17/11 14:18:44
Nome do objeto Sender desta alteracao do Tag = Tela_Teste_TagMonitor
   Nome da Tela : Tela_Teste_TagMonitor
Caption da Tela : Teste de Tags Monitor para Registro de Tags
TAG.Id       = 201326640
TAG.Name     = TagOpc_Monitor_M102
TAG.Value    = 456
TAG.Quality  = 192
TAG.Type     = 2
TAG.DateTime = 17/06/2011 14:18:42

Exemplo de uso, em um script associado ao evento “OnTagChange”, de um tag de um item do tipo “ObjAnimation” :

-- Objeto tag está disponível, é possível inspecionar qual foi o Tag que disparou o evento,

function printTag(tag)
  print("TAG.Id       = " .. tag.Id)
  print("TAG.Name     = " .. tag.Name)
  print("TAG.Value    = " .. tostring(tag.Value))
  print("TAG.Quality  = " .. tag.Quality)
  print("TAG.Type     = " .. tag.Type)
  print("TAG.DateTime = " .. tostring(tag.DateTime))
end

function printObject(object)
  print("Object.Name     = " .. object.Name)
  print("Object.Left     = " .. object.Left)
  print("Object.Top      = " .. object.Top)
  print("Object.Width    = " .. object.Width)
  print("Object.Height   = " .. object.Height)
  print("Object.Visible  = " .. tostring(object.Visible))
  print("Object.Enabled  = " .. tostring(object.Enabled)
end

print ("Obj Animation Tag Change")
print("Tick = " .. os.date())

if (Tag) then
  printTag(Tag)
end

if (Object) then
  printObject(Object)
end

Exemplo de saida da execução do script acima:

Obj Animation Tag Change
Tick = 01/29/13 14:38:50
TAG.Id       = 201326649
TAG.Name     = ViewerTag_001
TAG.Value    = 0
TAG.Quality  = 192
TAG.Type     = 2
TAG.DateTime = 29/01/2013 14:38:50
Object.Name     = Edit_001
Object.Left     = 10
Object.Top      = 10
Object.Width    = 100
Object.Height   = 20
Object.Visible  = true
Object.Enabled  = true

Exemplo com tag de instancia

-- Objeto tag está disponível, é possível inspecionar qual foi o Tag que disparou o evento,

print("Tick " .. os.date())

function printTag(tag)
  print("Id " .. tag.Id)
  print("Name " .. tag.Name)
  print("Value " .. tostring(tag.Value))
  print("Quality " .. tag.Quality)
  print("Type " .. tag.Type)
  print("DateTime " .. tostring(tag.DateTime))

end

if (Tag) then
  printTag(Tag)
end

-- obtem instancia
local inst = Tag:GetInstance()

--obtem outro tag a partir das informacoes da instancia
local tag_aux = Tags.Get('Instances.' .. inst.Group .. '.' .. inst.Name .. '.Tags.Local.Grupo1.Tag1')
printTag(tag_aux)

Nota

Os scripts apresentados foram testados para o evento OnTagChange, mas também são válidos para OnTagWrite.