Gerenciamento de Instâncias de Modelos

Modelo de Dados

../_images/model_inst.jpg

obs

As funções marcadas com _kernel_only_ são específicas do aplicativo Kernel.

Funções de Acesso a Instâncias e Modelos

list = Instances.ListModels()

Descrição:

  • Lista todos os nomes de modelos existentes no contexto da aplicação.

Parâmetros de saída:

  • Tabela Lua cujos valores são as strings contendo os nomes de modelos.

Exemplo de utilização:

list_models = Instances.ListModels() -- lista todos os modelos instanciados
for i,model_name in pairs(list_models) do
  print(i .. " - " .. model_name)
end

list = Instances.ListGroups()

Descrição:

  • Lista todos os nomes de grupos de instâncias no contexto da aplicação.

Parâmetros de saída:

  • Tabela Lua cujos valores são as strings contendo os nomes dos grupos.

Exemplo de utilização:

list_groups = Instances.ListGroups() -- lista todos os grupos de instâncias
for i in pairs(list_groups) do
  print(i .. " - " .. list_groups[i])
end

list = Instances.ListInGroup(string GroupName)

Descrição:

  • Lista todos os nomes de instâncias habilitadas de um grupo.

Parâmetros de entrada:

  • GroupName - nome de um grupo de instâncias.

Parâmetros de saída:

  • Tabela Lua (indexada por inteiros) cujos valores são as strings contendo os nomes das instâncias.

Exemplo de utilização:

-- Imprime todos os grupos e suas instâncias
list = Instances.ListGroups() -- lista todos os modelos instanciados
for i,group_name in pairs(list) do
  print("Grupo: " .. group_name)
  instances = Instances.ListInGroup(group_name)
  for j in pairs(instances) do
    print("\t " .. instances[j])
  end
end

list = Instances.ListInModel(string ModelName)

Descrição:

  • Lista todos os nomes de instâncias de modelo associadas ao modelo parametrizado por ModelName

Parâmetros de entrada:

  • ModelName - nome de um modelo.

Parâmetros de saída:

  • Tabela Lua (indexada por inteiros) cujos valores são as strings contendo os nomes de instâncias (prefixadas pelo respectivo grupo). Ex.: ‘Group_XXX.Instance_YYY’

Exemplo de utilização:

print("Imprime todos modelos e suas instâncias")
list = Instances.ListModels() -- lista todos os modelos instanciados
for i, model_name in pairs(list) do
  print("Modelo: " .. model_name)
  instances = Instances.ListInModel(model_name)
  for j in pairs(instances) do
    print("\t " .. instances[j])
  end
end

object = Instances.Get(string ModelInstPath)

Descrição:

  • Retorna uma nova instância de Modelo.

Parâmetros de entrada:

  • ModelInstPath - string com o caminho da instância a ser obtida.

Parâmetros de saída:

  • Objeto que encapsula instância de modelo ou nil caso o caminho da instância de modelo não tenha sido encontrado.

Exemplo de utilização:

-- Obter uma instância de modelo
function printInstance(inst)
    print("\tInstance Ref: " .. inst.Ref)
    print("\tInstance ItemID: " .. inst.ItemID)
    print("\tInstance Name: " .. inst.Name)
    print("\tInstance Group: " .. inst.Group)
    print("\tInstance Model: " .. inst.Model)
    print("\tInstance ModelID: " .. inst.ModelID)
    print("\tInstance Habilitação: " .. inst.Enabled)
end

print("Instância obtida diretamente")
local inst = Instances.Get("xInstanceGroupBM.xPocoBM2")
printInstance(inst)

Outros Exemplos

-- exemplo de chamada de abertura de tela utilizando modelos
local x = Screens.Open("ModeloXY1","Viewers.Screens.grupo1.xTela_ModeloXY1",{xRefBM1 = "AR147", xRefGLI1 = "MG012"})

-- exemplo de acesso a Tags definidos no modelo
inst_BM  = Instances.Get("InstanceGroup_001.Instance_001")

-- lista todos os modelos instanciados
list_models = Instances.ListModels()

-- recuperação de Tag de Instância do Modelo
local scr = Screens.Get("ModeloXY1")

-- obtém o objeto da instância de modelo associado à tela corrente
local scr_inst_BM = scr.GetInstance("BM1")
inst_path = inst_BM.Group .. "." .. inst_BM.Name
pressao_fundo = Tags.Get("Instances." .. inst_path .. ".Tags.Local.group1.pressão_fundo")

Funções para Gerenciamento Dinâmico de Instâncias

Esta API para criação dinâmica de instâncias é valida apenas para os scripts do Kernel.

object,err = Instances.Create(model_name, instance_path)

Descrição:

  • Este método ira criar a árvore associada às instâncias baseada no modelo corrente. O método persiste esta base no arquivo de instâncias do projeto. A instância é criada desabilitada. Os Tags Locais retentivos são criados no banco do projeto.

Parâmetros de entrada:

  • model_name - string com o “<nome do modelo>” a partir do qual a instância será criada.

  • instance_path - string com caminho até a instância.

Parâmetros de saída:

  • Objeto que encapsula instância de modelo ou nil caso algum erro tenha acontecido. String com mensagem de erro ou nil se criação da Instância de modelo obteve sucesso.

Exemplo de utilização:

instObj, err = Instances.Create("ModelBCP", "Group001.Instance001")
if (err) then
  print(err)
end
-- Instância foi criada com sucesso.
-- Imprime informações de uma instância de modelo
function print_Instance(erro, inst)
    print(" ")
    print("Erro criação : " .. erro)
    if (erro == 0) then
      print("\tInstance Ref: "     .. inst.Ref)
      print("\tInstance ItemID: "  .. inst.ItemID)
      print("\tInstance Name: "    .. inst.Name)
      print("\tInstance Group: "   .. inst.Group)
      print("\tInstance Model: "   .. inst.Model)
      print("\tInstance ModelID: " .. inst.ModelID)
      print("\tInstance Habilitação: " .. inst.Enabled)
    end
end

-- Cria instâncias de modelo dinamicamente
my_instanceA, errA = Instances.Create("Model_001", "InstanceGroup_001.InstanceA")
print_Instance(errA, my_instanceA)

my_instanceB, errB = Instances.Create("Model_001", "InstanceGroup_001.InstanceB")
print_Instance(errB, my_instanceB)

my_instanceC, errC = Instances.Create("Model_001", "InstanceGroup_001.InstanceC")
print_Instance(errC, my_instanceC)

err = Instances.Remove(instance_path)

Descrição:

  • Este método irá eliminar a árvore associada à instância especificada. O método não persiste esta base no arquivo de instâncias do projeto. Os Tags associados são removidos da base.

Parâmetros de entrada:

  • instance_path - string com caminho até a instância.

Parâmetros de saída:

  • String com mensagem de erro ou nil se remoção da Instância de modelo obteve sucesso.

Exemplo de utilização:

Instances.Remove("Group001.Instance001")
  -- Imprime informações de uma instância de modelo
function print_Instance(erro, inst)
    print(" ")
    print("Codigo acesso a instancia: " .. erro)
    if (erro == 0) then
      print("\tInstance Ref: "     .. inst.Ref)
      print("\tInstance ItemID: "  .. inst.ItemID)
      print("\tInstance Name: "    .. inst.Name)
      print("\tInstance Group: "   .. inst.Group)
      print("\tInstance Model: "   .. inst.Model)
      print("\tInstance ModelID: " .. inst.ModelID)
      print("\tInstance Habilitação: " .. inst.Enabled)
    end
end

local my_intance_path = "InstanceGroup_001.Instance_001"

-- obtém a instância diretamente pelo seu path
print("Obtém instância ...")
local my_instance = Instances.Get(my_intance_path)
print_Instance(0, my_instance)

-- remove instância de modelo
ret_code = Instances.Remove(my_intance_path)
print("Código retorno remoção : " .. ret_code)

Exemplo de saída de execução:

Código acesso à instância: 0
  Instance Ref:
  Instance ItemID: 402653197
  Instance Name: Instance_001
  Instance Group: InstanceGroup_001
  Instance Model: Model_001
  Instance ModelID: 201326624
  Instance Habilitacao: 1
Código retorno remoção: 0

err = instObj:SetGroupConfig(group_path, cfg_group)

Descrição:

  • Define os parâmetros do grupo OPC especificado. Válido apenas para Tags OPC da instância.

Parâmetros de entrada:

  • group_path - string com “OPC.<nome do grupo>”

  • cfg_group - configuração do grupo OPC na forma de tabela Lua.

Parâmetros de saída:

  • código de retorno (0 se sucesso).

Exemplo de utilização (HIscada Pro):

values_table = { UpdateRate = 1000, ServerName = "HITecnologia.SOS.DA", HostName = "localhost", AddressPrefix = "Server_1.Driver_1000.DEV1." }
someInstance:SetGroupConfig ("Opc.GroupXXX", values_table)
-- Imprime tabela de configuração do grupo OPC de uma intância de modelo
function print_CfgOpcInstance(msg, table_cfg)
        print(" ")
        print(msg)
        print("     Taxa de atualização do grupo OPC => " .. table_cfg["UpdateRate"])
        print("        Nome do servidor OPC do grupo => " .. table_cfg["ServerName"])
        print("          Localização do servidor OPC => " .. table_cfg["HostName"])
        print("Prefixo endereçamento do servidor OPC => " .. table_cfg["AddressPrefix"])
end

print("Obtém instância ...")
local my_instance = Instances.Get("InstanceGroup_001.Instance_001")

-- lê a configuração do grupo OPC desta instância
get_table_cfg_opc_group, ret_cde = my_instance:GetGroupConfig("Opc.TagOpcGroup_001")
-- imprime a configuração corrente do grupo OPC desta instância
print_CfgOpcInstance("Configuração original:", get_table_cfg_opc_group)

   -- prepara novos parâmetros de configuração para este grupo OPC
set_table_cfg_opc_group = { }
-- parâmetro: Taxa de atualização do grupo OPC"
set_table_cfg_opc_group["UpdateRate"] = 10001
-- parâmetro: Nome do servidor OPC do grupo"
set_table_cfg_opc_group["ServerName"] = "HITecnologia.SOS.DAX"
-- parâmetro: Localização do servidor OPC"
set_table_cfg_opc_group["HostName"] = "localhostX"
-- parâmetro: Prefixo endereçamento do servidor OPC"
set_table_cfg_opc_group["AddressPrefix"] = "Server_1.Driver_1000.DEV1.X"
-- imprime a configuração a ser enviada para o grupo OPC desta instãncia
print_CfgOpcInstance("Nova configuração do grupo OPC:", set_table_cfg_opc_group)

-- seta configuração do grupo OPC desta instância
ret_code = my_instance:SetGroupConfig("Opc.TagOpcGroup_001", set_table_cfg_opc_group)

-- lê a configuração do grupo OPC desta instância
get_table_cfg_opc_group, ret_cde = my_instance:GetGroupConfig("Opc.TagOpcGroup_001")
-- imprime a configuração do grupo OPC desta instância
print_CfgOpcInstance("Configuração atual:", get_table_cfg_opc_group)

Exemplo de saída de execução (HIscada Pro):

Obtém instância ...

Configuração original:
  Taxa de atualização do grupo OPC => 10000
      Nome do servidor OPC do grupo => HITecnologia.SOS.DA
        Localização do servidor OPC => localhost
Prefixo endereçamento do servidor OPC => Server_1.Driver_1000.DEV1.

Nova configuração do grupo OPC:
  Taxa de atualização do grupo OPC => 10001
      Nome do servidor OPC do grupo => HITecnologia.SOS.DAX
        Localização do servidor OPC => localhostX
Prefixo endereçamento do servidor OPC => Server_1.Driver_1000.DEV1.X

Configuração atual:
  Taxa de atualização do grupo OPC => 10001
     Nome do servidor OPC do grupo => HITecnologia.SOS.DAX
       Localização do servidor OPC => localhostX
Prefixo endereçamento do servidor OPC => Server_1.Driver_1000.DEV1.X

group_cfg,err = instObj:GetGroupConfig(group_path)

Descrição:

  • Obtém uma tabela Lua com os parâmetros de configuração do grupo OPC da instância em que o método foi invocado.

Parâmetros de entrada:

  • group_path - string com “OPC.<nome do grupo>”

Parâmetros de saída:

  • Configuração do grupo OPC na forma de tabela Lua. String com mensagem de erro ou nil se remoção da Instância de modelo obteve sucesso.

Exemplo de utilização (HIscada Pro):

-- Imprime informações de uma instância de modelo
function print_Instance(inst)
    print("\tInstance Ref: " .. inst.Ref)
    print("\tInstance ItemID: " .. inst.ItemID)
    print("\tInstance Name: " .. inst.Name)
    print("\tInstance Group: " .. inst.Group)
    print("\tInstance Model: " .. inst.Model)
    print("\tInstance ModelID: " .. inst.ModelID)
end

-- Imprime tabela de configuração do grupo OPC de uma intãncia de modelo
function print_CfgOpcInstance(table_cfg)
  print("     Taxa de atualização do grupo OPC => " .. table_cfg["UpdateRate"])
  print("        Nome do servidor OPC do grupo => " .. table_cfg["ServerName"])
  print("          Localização do servidor OPC => " .. table_cfg["HostName"])
  print("Prefixo endereçamento do servidor OPC => " .. table_cfg["AddressPrefix"])
end

print("Obtém instância ...")
local my_instance = Instances.Get("InstanceGroup_001.Instance_001")
print_Instance(my_instance)

print("Obtém configrução de um grupo OPC desta instância ...")
table_cfg_opc_group, ret_cde = my_instance:GetGroupConfig("Opc.TagOpcGroup_001")
print_CfgOpcInstance(table_cfg_opc_group)

Exemplo de saída de execução (HIscada Pro):

Obtém instância ...
Instance Ref:
Instance ItemID: 402653186
Instance Name: Instance_001
Instance Group: InstanceGroup_001
Instance Model: Model_001
Instance ModelID: 201326624
Obtém configrução de um grupo OPC desta instância ...
    Taxa de atualização do grupo OPC => 10000
        Nome do servidor OPC do grupo => HITecnologia.SOS.DA
        Localização do servidor OPC => localhost
Prefixo endereçamento do servidor OPC => Server_1.Driver_1000.DEV1.

err = InstObj:Enable()

Descrição:

  • Este método é chamado sobre um objeto lua que corresponde a um item de instância. A invocação deste método marca na instância o estado de habilitação da mesma, que implica na habilitação de todos os Tags da instância OPC. Inicializa os valores, obtendo do banco os valores correntes dos Tags Locais retentivos. O método persiste esta base no arquivo de instâncias do projeto.

Parâmetros de saída:

  • String com mensagem de erro ou nil

Exemplo de utilização:

local ret = InstObj:Enable()
-- Imprime informações de uma instância de modelo
function print_Instance(inst)
    print("\tInstance Ref: " .. inst.Ref)
    print("\tInstance ItemID: " .. inst.ItemID)
    print("\tInstance Name: " .. inst.Name)
    print("\tInstance Group: " .. inst.Group)
    print("\tInstance Model: " .. inst.Model)
    print("\tInstance ModelID: " .. inst.ModelID)
end


print("Obtém instância ...")
local my_instance = Instances.Get("InstanceGroup_001.Instance_001")
print_Instance(my_instance)

-- habilita instância
ret_code = my_instance:Enable()
print("codigo retorno = " .. ret_code)

Exemplo de saída de execução:

Obtém instância ...
  Instance Ref:
  Instance ItemID: 402653197
  Instance Name: Instance_001
  Instance Group: InstanceGroup_001
  Instance Model: Model_001
  Instance ModelID: 201326624
código retorno = 0

err = InstObj:Disable()

Descrição:

  • Este método é chamado sobre um objeto lua que corresponde a um item de instância. A invocação deste método marca na instância o estado de desabilitação da mesma, que implica na desabilitação de todos os Tags da instância OPC. Antes de desativar, preserva no banco os valores correntes aos Tags Locais retentivos. O método persiste esta base no arquivo de instâncias do projeto.

Parâmetros de saída:

  • String com mensagem de erro ou nil

Exemplo de utilização:

local ret = InstObj:Disable()
  -- Imprime informações de uma instância de modelo
function print_Instance(inst)
    print("\tInstance Ref: " .. inst.Ref)
    print("\tInstance ItemID: " .. inst.ItemID)
    print("\tInstance Name: " .. inst.Name)
    print("\tInstance Group: " .. inst.Group)
    print("\tInstance Model: " .. inst.Model)
    print("\tInstance ModelID: " .. inst.ModelID)
end

print("Obtém instância ...")
local my_instance = Instances.Get("InstanceGroup_001.Instance_001")
print_Instance(my_instance)

-- desabilita instância
ret_code = my_instance:Disable()
print("código retorno = " .. ret_code)

Exemplo de saída de execução:

Obtém instância ...
  Instance Ref:
  Instance ItemID: 402653197
  Instance Name: Instance_001
  Instance Group: InstanceGroup_001
  Instance Model: Model_001
  Instance ModelID: 201326624

código retorno = 0

err = InstObj:EnableComm()

obs

Compatível a partir da versão 1.3.04

Descrição:

  • Este método é chamado sobre um objeto lua que corresponde a um item de instância. A invocação deste método marca na instância o estado de habilitação da comunicação, que implica na ativação de todos os grupos OPC da instância. Um grupo OPC ativado permitirá que Tags habilitados sejam atualizados de acordo com a taxa de atualização e que chamadas de leitura (função ReadDevice) e escrita (função WriteValue) dos tags sejam chamados.O método persiste esta base no arquivo de instâncias do projeto.

Parâmetros de saída:

  • Código numérico do erro ou 0 se sucesso.

Exemplo de utilização:

local ret = InstObj:EnableComm()
print("Obtém instância ...")
local my_instance = Instances.Get("InstanceGroup_001.Instance_001")

-- habilita  comunicação da instância
ret_code = my_instance:EnableComm()
print("codigo retorno = " .. ret_code)

Exemplo de saída de execução:

Código retorno = 0

err = InstObj:DisableComm()

obs

Compatível a partir da versão 1.3.04

Descrição:

  • Este método é chamado sobre um objeto lua que corresponde a um item de instância. A invocação deste método marca na instância o estado de desabilitação da comunicação, que implica na desativação de todos os grupos OPC da instância. Um grupo OPC desativado poderá evitar que o servidor OPC comunique com o equipamento e, além disso, não permitirá chamadas de leitura (função ReadDevice) e escrita (função WriteValue) dos tags. O método persiste esta base no arquivo de instâncias do projeto.

Parâmetros de saída:

  • código numérico do erro ou 0 se sucesso.

Exemplo de utilização:

local ret = InstObj:DisableComm()
print("Obtém instância ...")
local my_instance = Instances.Get("InstanceGroup_001.Instance_001")

-- habilita  comunicação da instância
ret_code = my_instance:DisableComm()
print("codigo retorno = " .. ret_code)

Exemplo de saída de execução:

código retorno = 0

Exemplos de scripts para criação dinâmica de instâncias de modelos

-- Imprime informações de uma instância de modelo
function print_Instance(erro, inst)
    print(" ")
    print("Codigo acesso a instancia: " .. erro)
    if (erro == 0) then
      print("\tInstance Ref: "     .. inst.Ref)
      print("\tInstance ItemID: "  .. inst.ItemID)
      print("\tInstance Name: "    .. inst.Name)
      print("\tInstance Group: "   .. inst.Group)
      print("\tInstance Model: "   .. inst.Model)
      print("\tInstance ModelID: " .. inst.ModelID)
      print("\tInstance Habilitação: " .. inst.Enabled)
    end
end

-- Imprime tabela de configuração do grupo OPC de uma intância de modelo
function print_CfgOpcInstance(msg, table_cfg)
  print(" ")
  print(msg)
  print("     Taxa de atualização do grupo OPC => " .. table_cfg["UpdateRate"])
  print("        Nome do servidor OPC do grupo => " .. table_cfg["ServerName"])
  print("          Localização do servidor OPC => " .. table_cfg["HostName"])
  print("Prefixo endereçamento do servidor OPC => " .. table_cfg["AddressPrefix"])
end

-- Cria instâncias de modelo dinamicamente
my_instanceA, errA = Instances.Create("Model_001", "InstanceGroup_001.InstanceA001")
print_Instance(errA, my_instanceA)

-- le a configuração do grupo OPC desta instância
get_table_cfg_opc_group, ret_code = my_instanceA:GetGroupConfig("Opc.TagOpcGroup_001")
print_CfgOpcInstance("Configuração original:", get_table_cfg_opc_group)

-- prepara novos parâmetros de configuração para este grupo OPC
set_table_cfg_opc_group = { }
set_table_cfg_opc_group["UpdateRate"] = 5000
set_table_cfg_opc_group["ServerName"] = "HITecnologia.SOS.DAXX"
set_table_cfg_opc_group["HostName"] = "localhostXX"
set_table_cfg_opc_group["AddressPrefix"] = "Server_1.Driver_1000.DEV1.XX"
print_CfgOpcInstance("Nova configuração do grupo OPC:", set_table_cfg_opc_group)

-- seta configuração de um grupo OPC desta instância
ret_code = my_instanceA:SetGroupConfig("Opc.TagOpcGroup_001", set_table_cfg_opc_group)
print("codigo retorno GroupConfig = " .. ret_code)

-- habilta a instância
ret_code = my_instanceA:Enable()
print("codigo retorno Enable = " .. ret_code)

-- obtém a instância que foi criada dinamicamente diretamente pelo seu path
print("Obtém instância ...")
local my_dynamic_instance = Instances.Get("InstanceGroup_001.InstanceA001")
print_Instance(0, my_dynamic_instance)

Exemplo de saída de execução:

Código de acesso à instância: 0
Instance Ref: InstanceGroup_001.InstanceA001
Instance ItemID: 402653216
Instance Name: InstanceA001
Instance Group: InstanceGroup_001
Instance Model: Model_001
Instance ModelID: 201326624
Instance Habilitação: 0

Configuração original:
    Taxa de atualização do grupo OPC => 10000
      Nome do servidor OPC do grupo => HITecnologia.SOS.DA
        Localização do servidor OPC => localhost
Prefixo endereçamento do servidor OPC => Server_1.Driver_1000.DEV1.

Nova configuração do grupo OPC:
  Taxa de atualização do grupo OPC => 5000
     Nome do servidor OPC do grupo => HITecnologia.SOS.DAXX
        Localização do servidor OPC => localhostXX
Prefixo endereçamento do servidor OPC => Server_1.Driver_1000.DEV1.XX
código retorno GroupConfig = 0
código retorno Enable = 0

Obtém instância ...

Código acesso à instância: 0

Instance Ref:
Instance ItemID: 402653216
Instance Name: InstanceA001
Instance Group: InstanceGroup_001
Instance Model: Model_001
Instance ModelID: 201326624
Instance Habilitação: 1