Baixe o app para aproveitar ainda mais
Prévia do material em texto
Versão 6.1.90 (26/04/2022) Manual de Referência e Scripts do E3 Copyright © 1999 - 2022 Elipse Software Ltda. Todos os direitos reservados. I Sumário 1 Introdução ................................................................................................................................................... 1 1.1 Objetos ................................................................................................................................................... 1 1.2 Scripts .................................................................................................................................................... 1 1.3 Picks ....................................................................................................................................................... 4 1.4 Eventos Definidos pelo Usuário ....................................................................................................... 10 2 Programando no E3 ................................................................................................................................. 14 2.1 Ambiente de Programação ............................................................................................................... 14 2.2 Declarando Variáveis ......................................................................................................................... 14 2.3 Obtendo Referências aos Objetos .................................................................................................... 15 2.4 Acessando Objetos ............................................................................................................................. 25 2.5 Trabalhando com Coleções ............................................................................................................... 25 2.6 Comando Set ....................................................................................................................................... 26 2.7 E3Globals ............................................................................................................................................. 26 2.8 Eventos, Métodos e Propriedades Gerais dos Objetos .................................................................. 34 3 Bibliotecas do Usuário ............................................................................................................................. 53 3.1 ElipseX ................................................................................................................................................. 53 4 Visualização .............................................................................................................................................. 58 4.1 Viewer .................................................................................................................................................. 58 4.2 Quadros e Divisores ........................................................................................................................... 82 4.3 Telas e Objetos de Tela ...................................................................................................................... 87 4.4 E3Alarm ............................................................................................................................................. 169 4.5 E3Browser ......................................................................................................................................... 190 4.6 E3Chart .............................................................................................................................................. 196 4.7 E3Playback ........................................................................................................................................ 226 4.8 Relatórios .......................................................................................................................................... 227 4.9 TrendAnalysis ................................................................................................................................... 251 5 Objetos de Servidor ............................................................................................................................... 255 5.1 Propriedades Comuns ..................................................................................................................... 255 5.2 Alarmes ............................................................................................................................................. 257 5.3 Banco de Dados ................................................................................................................................ 275 5.4 Coleção de Campos de Usuário de Alarmes ................................................................................. 278 5.5 Drivers ............................................................................................................................................... 280 5.6 Fórmulas ........................................................................................................................................... 332 5.7 Históricos .......................................................................................................................................... 334 5.8 Informações do Servidor ................................................................................................................. 341 5.9 Objetos em Tempo de Configuração ............................................................................................. 347 5.10 Objetos em Tempo de Execução do Servidor ............................................................................. 350 5.11 Servidor de Dados .......................................................................................................................... 353 5.12 Storage ............................................................................................................................................ 376 6 Dúvidas Mais Frequentes ...................................................................................................................... 383 1 Introdução 1 Introdução CAPÍTULO Os Scripts são módulos de linguagem de programação nos quais se pode criar procedimentos associados a eventos específicos, permitindo uma maior flexibilidade no desenvolvimento de aplicações. Cada objeto (item de um aplicativo) do E3 possui uma lista de eventos previamente definidos, mas também é possível definir novos eventos próprios do usuário. 1.1 Objetos Os Objetos são componentes de software reutilizáveis que permitem maximizar o uso e aumentar a qualidade e produtividade em seus aplicativos. Um objeto no E3 encapsula ou contém três diferentes partes (propriedades, métodos e eventos) que podem ser manipuladas para a utilização das vantagens de sua funcionalidade na aplicação. Propriedades definem atributos de um objeto, como a aparência de um objeto de Tela ou o valor inicial de um objeto quando o aplicativo é iniciado. Métodos são funções que realizam uma ação específica dentro ou com um objeto. Eventos são notificações geradas por um objeto em resposta a alguma ocorrência em particular, como um clique de mouse ou uma mudança no valor de um Tag, entre outros. Uma das principais características dos objetos e das linguagens orientadas a objeto é a capacidade de herança entre eles, ou seja, estes podem herdar as características de um ou mais objetos, tendo as mesmas funcionalidades específicas. Assim, pode se ter vários objetos trabalhando em conjunto para prover características de um outro objeto derivado. Tome como exemplo o objeto E3Chart. Ele é composto internamente de vários objetos, como títulos, legendas, escalas, divisões, consultase penas. Note que cada objeto contribui para a funcionalidade do todo: as escalas ajudam a localizar os valores dos pontos no E3Chart, as legendas ajudam a identificar a pena e seus valores e a pena realiza o desenho dos valores no E3Chart. Através da manipulação de objetos dentro do E3Chart, pode-se criar duas instâncias deste objeto bastante diferentes entre si. Para se manipular um objeto específico, deve-se acessá-lo através de uma hierarquia. Se os dois objetos E3Chart estiverem na mesma Tela, deve-se acessar primeiro a Tela, depois o E3Chart desejado, depois uma de suas propriedades ou objetos filhos. Quando há vários objetos de um mesmo tipo, geralmente eles podem ser acessados através de uma coleção (collection). Uma coleção é um objeto especial que gerencia um conjunto de objetos semelhantes. Um exemplo no objeto E3Chart é a coleção Pens, que permite o acesso a todas as penas do E3Chart. 1.2 Scripts A linguagem que o E3 Studio usa em seus scripts é o VBScript, um subconjunto da linguagem Visual Basic desenvolvida pela Microsoft. O VBScript possui um interpretador rápido, leve e portável, desenvolvido para uso em navegadores para a Internet e outras aplicações que usam ActiveX Controls, Automation Servers e Java Applets. Conforme visto anteriormente, os scripts são associados a eventos de um objeto. Entretanto, para facilitar e aumentar a velocidade de desenvolvimento, o E3 já incorpora algumas ações mais comuns que poderiam ser realizadas com scripts, através de assistentes chamados Picks. Pode-se portanto definir que um determinado evento executa um script, um Pick ou uma combinação deles, em uma sequência também pré-definida. Cada Editor do E3 Studio apresenta pelo menos duas abas na parte inferior, Design e Scripts, com exceção dos objetos Banco de Dados e Servidor de Alarmes, que não possuem a aba Design. Os objetos e seus filhos podem ser manipulados na aba Design. Para manipular seus scripts, utilize a aba Scripts. As opções disponíveis na aba Scripts estão descritas na tabela a seguir. Opções disponíveis na aba Scripts OPÇÃO DESCRIÇÃO Lista de Objetos Seleciona o objeto cujo script é manipulado Lista de Eventos Seleciona o evento a ser aplicado ao objeto Script Adiciona um script associado ao evento Pick Abrir Tela Adiciona um Pick Abrir Tela Introdução 2 OPÇÃO DESCRIÇÃO Pick Abrir Tela Modal Adiciona um Pick Abrir Tela Modal Pick Executar Aplicação Adiciona um Pick Executar Aplicação Pick Carregar Valor Adiciona um Pick Carregar Valor Pick Inverter Valor Adiciona um Pick Inverter Valor Pick Imprimir Relatório Adiciona um Pick Imprimir Relatório Remover script ou Pick selecionado Remove o script ou o Pick selecionado na Lista de Ações Mover script ou Pick selecionado para cima Move a ação selecionada para cima na ordem da Lista de Ações para o evento Mover script ou Pick selecionado para baixo Move a ação selecionada para baixo na ordem da Lista de Ações para o evento AppBrowser Abre a janela do AppBrowser Procurar Busca por ocorrências de um determinado texto Procurar anterior Seleciona na lista de resultados a ocorrência anterior Procurar próxima Seleciona na lista de resultados a ocorrência seguinte Substituir Substitui as ocorrências encontradas por outro texto especificado Compila o script selecionado Compila o script selecionado, mostrando os erros no painel Mensagens Compila todos os scripts deste evento Compila todos os scripts associados ao evento Compila todos os eventos deste objeto Compila todos os eventos associados ao objeto A ordem de execução das ações é de cima para baixo. Para alterar a ordem, pode-se utilizar as opções Mover script ou Pick selecionado para cima e Mover script ou Pick selecionado para baixo . Utilize a opção Compila o script selecionado para verificar se não há erros no script especificado para o evento. As mensagens de erro do compilador são apresentadas no painel Mensagens, que pode estar em uma janela flutuante ou ancorado na parte inferior ou superior da aba Scripts. Clique duas vezes no erro para selecioná-lo no script. 3 Introdução Mensagem do compilador 1.2.1 Adicionando um Script Para adicionar um script a um objeto, siga estes procedimentos: 1. Selecione o objeto para criar o script e clique na aba Scripts. Aba Scripts 2. Clique em Script . O Editor de Scripts é aberto, conforme a figura a seguir. Adicionando um script ao objeto 3. Digite os comandos em VBScript na caixa de edição de texto. Introdução 4 NOTA Utilize o caractere de sublinhado para acrescentar uma quebra de linha e deixar o código mais legível. O caractere de sublinhado indica que o código continua na linha subsequente. Por exemplo: If intTemperaturaCaldeira3 > 120 and _ intTemperaturaCaldeira4 > 120 Then bEnviarAlarme = True bAlarmeLigado = True End If Cada evento pode ter vários scripts e vários Picks associados, chamados Ações do Evento. A lista das ações pode ser vista na parte superior da janela de edição de scripts. Cada objeto pode ter qualquer quantidade de eventos com scripts ou Picks associados. NOTA Ao clicar com o botão direito do mouse em qualquer uma das ações descritas anteriormente, abre-se um menu contextual que possibilita recortar, copiar ou colar scripts e Picks entre eventos. 1.3 Picks Os Picks implementam uma forma mais amigável de realizar procedimentos mais comuns, poupando tempo de configuração. Entre estes procedimentos estão ações como trocas de Tela ou atribuição de valores, bastante comuns na criação de um projeto. Os tópicos a seguir descrevem os Picks disponíveis na aba Scripts. NOTA Todas as opções dos Picks que estão disponíveis via menu contextual (através do clique com o botão direito do mouse) também estão disponíveis utilizando o atalho de teclado SHIFT + F10, que corresponde à tecla de aplicação ou de menu . 5 Introdução 1.3.1 Abrir Tela Abre uma determinada Tela ou Quadro. Configurações do Pick Abrir Tela Opções disponíveis no Pick Abrir Tela OPÇÃO DESCRIÇÃO Abrir a tela Indica qual Tela deve ser aberta No quadro Indica o Quadro onde a Tela é visualizada. Se estiver em branco, é o Quadro principal (_top) Zoom inicial Define o zoom da Tela, quando mostrada Alinhamento da Tela Define o alinhamento da Tela em relação à área visível. Os valores possíveis são Utilizar padrão, Forçar Esquerdo Superior ou Forçar Centralizado Parâmetro Indica um parâmetro a ser passado na chamada da Tela Habilitar scroll da tela Habilita o uso das barras de rolagem na Tela Especificar posição da tela Indica a posição da Tela, em pixels Especificar tamanho da tela Indica o tamanho da Tela, em pixels ou em Himetric Estilo da janela Abre a caixa de diálogo Estilo de janela 1.3.1.1 Caixa de Diálogo Estilo de Janela Permite configurar o estilo da janela a ser mostrada, definindo título e a disponibilidade das bordas e botões de fechar, maximizar e minimizar, entre outras opções. Se a opção Usar configuração padrão das janelas está Introdução 6 selecionada, a aplicação desabilita as opções desta janela e assume a configuração padrão do Viewer, conforme as opções configuradas na aba Visualizador das propriedades do Viewer. Caixa de diálogo Estilo da janela 1.3.2 Abrir Tela Modal Abreuma Tela Modal, isto é, uma Tela que não permite a interação do usuário com outras Telas enquanto esta estiver ativa. 7 Introdução Configurações do Pick Abrir Tela Modal Opções disponíveis no Pick Abrir Tela Modal OPÇÃO DESCRIÇÃO Abrir a tela Seleciona a Tela a ser aberta Título Define o título da janela. Este texto é concatenado com o nome da Tela Zoom inicial Define o zoom da Tela, quando mostrada Alinhamento da Tela Define o alinhamento da Tela em relação à área visível. Os valores possíveis são Utilizar padrão, Forçar Esquerdo Superior ou Forçar Centralizado Parâmetro Indica um parâmetro a ser passado na chamada da Tela Habilitar scroll da tela Habilita o uso das barras de rolagem na Tela Especificar a posição da tela Determina a posição, em pixels, do quadro na Tela, a partir do canto superior esquerdo da Tela Especificar o tamanho da tela Determina a largura e a altura, em pixels ou em Himetric, da Tela Estilo da janela Abre a caixa de diálogo Estilo de Janela Introdução 8 1.3.3 Executar Aplicação Executa uma aplicação específica. Configurações do Pick Executar Aplicação Opções disponíveis no Pick Executar Aplicação OPÇÃO DESCRIÇÃO Aplicação Clicando-se em pode-se navegar no disco para indicar o arquivo da aplicação a ser executada Argumentos Permite especificar argumentos para a chamada da aplicação Executar no diretório Determina o diretório de trabalho da aplicação que é executada Modo de exibição Determina o tipo de janela de execução da aplicação. Os valores possíveis são Normal, Maximizado ou Minimizado 1.3.4 Carregar Valor Carrega um valor em um Tag. Configurações do Pick Carregar Valor 9 Introdução Opções disponíveis no Pick Carregar Valor OPÇÃO DESCRIÇÃO Nome do tag Especifica o nome do Tag no qual é carregado o valor. Pode-se selecionar o Tag no AppBrowser clicando em Valor Determina o valor que é carregado no Tag. Pode-se selecionar o tipo de dados clicando na caixa de seleção 1.3.5 Inverter Valor Permite inverter o valor de um Tag. Se o valor do Tag é igual a Valor1, então o Tag recebe Valor2. Se o valor do Tag é igual a Valor2, então o Tag recebe Valor1. Se o valor do Tag não é igual a Valor1 nem Valor2, o Tag recebe Valor1. É possível colocar tantos Picks Inverter Valor quantos se desejar. Isto permite a verificação de múltiplos valores para um mesmo Tag ou até mesmo para diversos Tags em um mesmo evento. Configurações do Pick Inverter Valor Opções disponíveis no Pick Inverter Valor OPÇÃO DESCRIÇÃO Nome do tag Clique em para abrir o AppBrowser e selecionar um Tag Valor 1 Determina o primeiro valor a comparar. Se o valor do Tag é igual a Valor1, então o Tag recebe Valor2 Valor 2 Determina o segundo valor a comparar. Se o valor do Tag é igual a Valor2, então o Tag recebe Valor1 Introdução 10 1.3.6 Imprimir Relatório Permite imprimir um Relatório em uma impressora ou mostrar em tela. Configurações do Pick Imprimir Relatório Opções disponíveis no Pick Imprimir Relatório OPÇÃO DESCRIÇÃO Imprimir relatório Permite selecionar um Relatório para impressão Saída Determina o tipo de saída do Relatório. Os valores possíveis são Impressora: Envia o Relatório para a impressora, que corresponde ao método Print, ou Tela: Executa uma prévia de impressão do Relatório na tela, que corresponde ao método PrintPreview Especificar a posição da tela Determina a posição da prévia de impressão, em pixels, a partir do canto superior esquerdo da tela. Se estes valores não são definidos, a prévia de impressão é mostrada na posição (0, 0) Especificar o tamanho da tela Especifica o tamanho da prévia de impressão na tela, em pixels ou em Himetric. Se estes valores não são definidos, a prévia de impressão é criada com o tamanho de 500 por 500 pixels e a janela é aberta maximizada. Se apenas uma das dimensões é definida, largura ou altura, a outra dimensão é configurada para 500 pixels e a janela não é aberta maximizada 1.4 Eventos Definidos pelo Usuário Apesar do E3 vir com uma extensa gama de eventos, muitas vezes o usuário pode querer criar um evento específico para uma aplicação. Um exemplo para a utilização de eventos definidos pelo usuário seria a realização de um cálculo ou tarefa mais complexa em um objeto quando o evento gerador vem de um outro Tag ou propriedade. Apesar de se poder criar e executar este mesmo tipo de tarefa a partir do próprio Tag ou da propriedade geradora do evento, existem vantagens em manter-se um script junto ao objeto que sofre a ação. Dentre elas, pode-se citar o trabalho adicional necessário para que um objeto aponte para outro, além de facilidades de manutenção, pois se por 11 Introdução algum motivo é necessário modificar ou apagar o Tag ou a propriedade que seja o evento gerador, não é necessário modificar um segundo objeto. Outra vantagem é o fato de que se o Tag gerador do evento é apagado, o objeto não perde o script, só é necessário indicar uma outra fonte geradora daquele evento. A geração de eventos internos facilita ainda a criação de bibliotecas, pois cada vez que um componente de biblioteca é inserido em uma aplicação, traz consigo os scripts e cálculos que podem ser necessários, diminuindo o trabalho de configuração. Para gerar um novo evento interno em um objeto, siga estes procedimentos: 1. Clique em Criar novo evento na lista de eventos da aba Scripts para abrir a janela Novo Evento de Usuário, mostrada na figura a seguir. Janela Novo Evento de Usuário 2. Digite um nome para o evento e clique em OK para abrir o Editor do evento de usuário, conforme as figuras a seguir, que descrevem as opções possíveis para a condição de ocorrência deste evento. Opção Sempre que a expressão alterar seu valor Opção Sempre que a expressão for verdadeira 3. As opções disponíveis neste Editor estão descritas na tabela a seguir. Introdução 12 Opções disponíveis no Editor de eventos de usuário OPÇÃO DESCRIÇÃO Nome Nome que identifica este evento. Esta opção não é editável, portanto clique em Renomear Evento de Usuário para modificar o nome do evento Renomear Evento de Usuário Abre uma janela para modificar o nome do evento Expressão Expressão geradora deste evento. Clique em para abrir o AppBrowser para selecionar um Tag ou propriedade, por exemplo Remover Evento de Usuário Remove este evento da Lista de Eventos. NOTA: Ao remover um evento de usuário, todos os scripts associados a este evento são perdidos Condição da Ocorrência Especifica qual a condição para que este evento ocorra. As opções possíveis são Sempre que a expressão for verdadeira ou Sempre que a expressão alterar seu valor. No primeiro caso o evento é do tipo etOnEvent (o evento ocorre no momento em que a expressão é verdadeira) ou do tipo etWhileEvent (o evento ocorre ciclicamente, em intervalos pré-definidos). No segundo caso o evento é do tipo etOnValueChanged (o evento ocorre sempre que a expressão muda o valor) Repetir o evento Quando disponível, indica que o evento é do tipo etWhileEvent, ou seja, o evento se repete enquanto a expressão é verdadeira. Esta opção só estádisponível quando a opção Condição de Ocorrência está configurada como Sempre que a expressão for verdadeira. O intervalo de repetição é configurado na opção Período (ms) Período (ms) Intervalo de repetição, em milissegundos, do evento. Esta opção só está disponível quando a opção Condição de Ocorrência está configurada como Sempre que a expressão for verdadeira e a opção Repetir o evento está selecionada Tratar desconexão como mudança Indica que a conexão ou desconexão da expressão geradora do evento deve ser tratada como mudança. Esta opção só está disponível quando a opção Condição de Ocorrência está configurada como Sempre que a expressão alterar seu valor 4. Para alterar este evento usando a aba Scripts do objeto, selecione-o na lista de eventos. Um evento de usuário também pode ser editado usando a opção Editar Associações do menu contextual de um objeto. Na janela Editar Associações, clique na coluna Conexão correspondente a este evento e, no menu contextual, selecione a opção Editar para abrir a janela da figura a seguir. 13 Introdução Janela Editar Eventos Programando no E3 14 2 Programando no E3 CAPÍTULO Apesar de a maioria dos aspectos do VBScript se aplicarem à programação de scripts no E3, algumas particularidades devem ser destacadas no que diz respeito às implementações do conceito de orientação a objetos. O VBScript é uma linguagem baseada no Visual Basic que traz a capacidade de scripting (roteirização) para aplicações que executam no sistema operacional Windows. O VBScript troca informações com as aplicações utilizando a tecnologia ActiveX Scripting. Com o ActiveX Scripting, navegadores e outras aplicações cliente, como o E3 Viewer, podem compilar scripts e chamar funções, dentre outros procedimentos. Isto possibilita que scripts desenvolvidos para uma aplicação ou biblioteca, que devam ser executados na interface gráfica, possam ser executados tanto no Viewer quanto em um navegador de Internet, sem a necessidade de qualquer adaptação do aplicativo. Mais informações sobre o VBScript podem ser obtidas no VBScript Language Reference Guide. 2.1 Ambiente de Programação O ambiente de programação de scripts no E3 Studio pode ser acessado ao clicar com o botão direito do mouse em qualquer objeto e selecionar a opção Propriedades. Na aba Scripts do Editor do objeto, pode-se definir qual evento é o gerador do script. Como visto no capítulo anterior, os tipos de eventos em um objeto do E3 são os Pré-Definidos e os Definidos pelo Usuário. Os eventos pré-definidos variam de objeto para objeto, dependendo da utilização e funcionalidade. Um objeto de Tela, por exemplo, possui eventos relacionados à interface gráfica, tais como Click (utilizado ao clicar em um objeto) ou DblClick (utilizado com um duplo clique do mouse). Já um objeto como um Driver de Comunicação possui eventos relacionados à comunicação, tal como OnCommError (utilizado quando há um erro de comunicação). Pode-se também definir outros eventos para o objeto, como visto anteriormente. Quando um script é associado a um evento em um objeto, o campo de digitação apresenta uma declaração de procedimento (procedure), cuja definição é automática e composta do texto a seguir. Sub NomeDoObjeto_NomeDoEvento() End Sub Nesta definição, NomeDoObjeto é o nome do objeto associado e NomeDoEvento é o nome do evento. Os comandos do script devem estar entre estas duas linhas. Para ajudar na digitação do script, pode-se utilizar o AppBrowser. Ao selecionar um método ou propriedade, pode-se utilizar a opção Copiar. O Tag, propriedade ou método selecionado é inserido na posição do cursor na área de edição do script. O local do cursor é mostrado através de uma animação com seta piscante. 2.2 Declarando Variáveis É possível declarar variáveis implicitamente ou explicitamente. Para declarar uma variável implicitamente, use o nome no script. Automaticamente, a variável é criada e inicializada com o valor da atribuição ou permanece com o valor EMPTY, ou seja, vazia ou sem nenhum valor, caso não receba nenhum valor antes de ser utilizada. Esta é uma prática rápida, porém se o script é muito extenso, pode causar confusão e a criação de mais de uma variável com o mesmo nome, gerando erros no script. Para declarar variáveis explicitamente, utilize o comando Dim, como no exemplo a seguir. Dim Temperatura Pode-se declarar múltiplas variáveis separando cada nome de variável com uma vírgula, como no exemplo a seguir. Dim Esquerda, Direita, Topo, Base Em virtude de os scripts no E3 serem todos associados a um objeto em particular, as variáveis são sempre locais, válidas apenas para o escopo do script. Para ter-se variáveis públicas ou globais, deve-se criar um Tag Interno e utilizá-lo para armazenar o valor desejado. https://docs.microsoft.com/pt-br/office/vba/language/reference/user-interface-help/visual-basic-language-reference 15 Programando no E3 2.3 Obtendo Referências aos Objetos Uma das características mais importantes ao se trabalhar com scripts dentro do E3 é considerar a separação existente entre os processos que são executados no servidor e aqueles executados na interface do cliente (E3 Viewer). Para se trabalhar com scripts, pode-se manipular: · Objetos do servidor através do servidor · Objetos do servidor através do E3 Viewer · Objetos do Viewer através do mesmo E3 Viewer No entanto, não se pode manipular diretamente: · Objetos do Viewer através do servidor, pois isto só é possível através da criação de eventos no Viewer, ligados a variáveis que estão no servidor · Objetos de um Viewer a partir de outro Viewer, pois isto só é possível através da criação de eventos ligados a variáveis que estão no servidor Tais limitações são decorrentes do fato de que, por definição, existe uma independência entre o que cada uma das estações E3 Viewer está executando ou visualizando e o servidor, e vice-versa. Por isto, todas as atividades, tanto do servidor como do E3 Viewer, necessitam ser coordenadas de forma assíncrona ou através de eventos para operarem de forma harmoniosa. Logo, devido a esta independência ao se criar um script, primeiro deve-se obter uma referência correta dos objetos que se deseja manipular, ou seja, é necessário que o objeto seja primeiramente encontrado nos vários módulos do E3. Vale repetir que, ao se editar um script, o usuário pode utilizar o AppBrowser, que permite copiar para o script o caminho de um método ou propriedade de forma completa, auxiliando-o na criação de scripts. Portanto, para acessar os objetos externos que estão sendo manipulados em um script, são utilizadas algumas diretivas básicas. Por exemplo, para se manipular o valor de um Tag de Comunicação, o caminho é Servidor - Driver - Pasta (se houver) - Tag. Já se o objetivo é manipular um botão em uma Tela, o caminho é Viewer - Quadro (se houver) - Tela - Botão. As localizações de origem de scripts, do ponto de vista da metodologia para acesso dos objetos, são as seguintes: · Servidor · Telas e Quadros (E3 Viewer) · ElipseX (bibliotecas): podem ser XFolders, XObjects, que executam no servidor, ou XControls, que executam no E3 Viewer 2.3.1 Acessando Propriedades do Servidor Para se acessar um objeto em execução no servidor a partir de um objeto de Tela ou um ElipseX, deve-se usar o método Application.GetObject. A palavra Application retorna o objeto de aplicação relacionado ao contexto atual do objeto, e o método GetObject procura no servidor por um objeto dentro de Application com o nome fornecido, conforme o exemplo a seguir. Sub Button1_Click() Application.GetObject("Driver1")._Item("tag001").AllowRead = False End Sub Ou ainda conforme o exemplo a seguir. Sub Button1_Click() Application.GetObject("Driver1.tag001").AllowRead = False End Sub O método Item foi utilizado para, a partir da referência de Driver1, localizar o tag001, pois um Driver é uma coleção de Tags. Depois de localizado o objeto, as propriedades e métodos podem ser acessados livremente. Caso alguma outra operação tivesse que ser realizada com Driver1 ou tag001, outra alternativa para o script anterior seria a do exemplo a seguir. Sub Retangulo1_Click() Set obj = Application.GetObject("Driver1") obj.Item("tag001").AllowRead = False obj.Item("tag002").AllowRead = False End Sub Programando no E3 16 Neste caso, a variável obj está apontando para o objeto Driver1 e, na próxima vez que se quiser acessar algum objeto que descende de Driver1 dentro do script, pode-se utilizar a variável obj diretamente. Isto traz um ganho de performance, já que cada chamada do método GetObject executa um acesso ao servidor. Através desta técnica, chamadas desnecessárias ao servidor são evitadas. Este exemplo usa o comando Set, que é explicado mais adiante. Note que a utilização de variáveis também torna o código mais claro e de modificação mais fácil. Caso seja necessário alterar o objeto para executar comandos, mude a linha de atribuição desta variável. A palavra Application nos scripts pode indicar tanto funções que são executadas no E3 Viewer quanto no servidor. Neste caso, o objeto Application sabe de antemão quais funções devem ser executadas tanto para um quanto para o outro caso. Não é possível, entretanto, executar funções de E3 Viewer dentro do servidor, assim como também não é possível executar funções de servidor dentro do E3 Viewer. 2.3.2 Acessando Propriedades do E3 Studio Para acessar um objeto de servidor qualquer em um script que executa no E3 Studio, pode-se usar a diretiva Application.GetObject. A palavra Application retorna o objeto de aplicação relacionado ao contexto atual do objeto, e o método GetObject procura no Domínio carregado no E3 Studio por um objeto da aplicação ou do Domínio com o caminho fornecido. No exemplo a seguir, o evento CustomConfig é disparado no E3 Studio. Sub XControl1_CustomConfig Application.GetObject("Dados.TagDemo1").DocString = "Documentação" End Sub 2.3.3 Acessando Propriedades do Servidor de dentro do Servidor Caso seja necessário acessar as propriedades de um Tag a partir de outro, origem e destino estão no servidor ligados via um módulo pai, que é Driver1. Nesta situação, deve ser usada a propriedade Parent. Isto permite que seja acessado primeiro o objeto pai onde está o script, para depois descer-se na hierarquia em busca de outro elemento, conforme a figura e o exemplo a seguir. Driver1 é o objeto pai de Tag1 e de Tag2 Sub Tag1_OnRead() Parent.Item("Tag2").AllowRead = False End Sub Estando-se dentro de um grupo, e desejando-se acessar o mesmo Tag2, pode-se aninhar vários comandos Parent, conforme a figura e o exemplo a seguir. 17 Programando no E3 Pasta1 é o objeto pai de Tag1 Sub Tag1_OnRead() Parent.Parent.Item("Tag2").AllowRead = False End Sub 2.3.4 Acessando Objetos de uma Tela a partir de um Script na Tela Deve-se usar somente o método Item, já que os objetos são filhos da Tela, conforme o exemplo a seguir. Sub Tela1_OnPreShow(vArg) Item("Retangulo1").Visible = True End Sub Retangulo1 é um item da TelaInicial Programando no E3 18 2.3.5 Acessando Objetos de uma Tela a partir de um Script em outro Objeto na Tela Pode-se usar a propriedade Parent ou o método Screen, conforme a figura e o exemplo a seguir. TelaInicial é o objeto pai de Retangulo1 e Retangulo2 Sub Retangulo1_Click() Parent.Item("Retangulo2").Visible = True End Sub 2.3.6 Modificando a Tela ou Objetos de Tela a partir do Servidor A modificação de um comportamento qualquer em uma Tela só pode ser executada a partir de Associações, em que o servidor reporta automaticamente para os E3 Viewers todas as mudanças das variáveis selecionadas, ou através de uma busca explícita do E3 Viewer por informações no servidor. Toda a operação de associação da interface gráfica é realizada do cliente para o servidor, e não do servidor para o cliente. Assim, não é possível modificar Telas ou objetos de Tela a partir do servidor via scripts, pois cada cliente de dados tem uma cópia diferente das Telas. Um exemplo prático é mudar a cor de um Texto na Tela para verde quando um Tag é ligado, ou seja, o valor é alterado para 1 (um), e para vermelho quando é desligado, ou seja, o valor é alterado para 0 (zero). Neste caso, deve-se simplesmente criar uma Associação Digital entre a propriedade TextColor de Texto1 com Tag1. Associações são preferíveis devido à rapidez de execução e simplicidade de manutenção e construção da aplicação. Associando a cor do texto ao valor de Tag1 Uma outra forma de executar o procedimento anterior é criar um script no Viewer que verifique constantemente se Tag1 mudou ou não de valor, para então mudar a cor do Texto. Este tipo de script é possível de ser realizado, mas degrada muito a performance da aplicação. Por isto, esta prática não é aconselhável. 19 Programando no E3 2.3.7 Acessando Objetos de um ElipseX a partir do próprio ElipseX Na criação de um ElipseX, pode-se declarar propriedades (XProperties) e inserir objetos, que podem ser objetos de Tela (XControl) ou objetos do servidor (XFolder e XObject). Para se acessar as XProperties através de scripts, acesse o nome da propriedade diretamente. Aba Design Aba Propriedades Por exemplo, na figura anterior tem-se o objeto XControl1 com a propriedade Propriedade1, e os objetos Texto1 e Retangulo1. A propriedade Propriedade1, do tipo Booleano, pode ser acessada com o script a seguir. Sub XControl1_OnStartRunning() XControl1.Propriedade1 = True End Sub Ou ainda com o script a seguir. Sub XControl1_OnStartRunning() Propriedade1 = True End Sub Se o ElipseX possui objetos internos, então é possível utilizar o método Item para obter uma referência destes objetos, como no script a seguir. Sub XControl1_OnStartRunning() Item("Texto1").Value = "motor" Item("Retangulo1").ForegroundColor = RGB(212, 208, 20) End Sub Programando no E3 20 2.3.8 Acessando Objetos de um ElipseX Externamente O acesso externo a um objeto ElipseX só pode ser realizado através de suas propriedades, utilizando suas instâncias criadas. Não é possível acessar objetos internos diretamente. Se o ElipseX em questão é um XControl, este se comporta como um objeto de Tela. Por exemplo, considere a aplicação da figura a seguir. Exemplo de XControl Para alterar a propriedade Propriedade1 do XControl pode-se executar o script a seguir no evento Click de um Botão de Comando. Sub CommandButton1_Click() Screen.Item("XControl11").Propriedade1 = True End Sub Ou ainda executar o script a seguir no evento Click de um Botão de Comando. Sub CommandButton1_Click() Parent.Item("XControl11").Propriedade1 = True End Sub No caso de um XFolder ou XObject, deve-se inseri-lo em um Servidor de Dados, conforme o exemplo da figura a seguir. 21 Programando no E3 Exemplo de XObject Para alterar a propriedadeValor do XObject, use o script a seguir. Sub CommandButton1_Click() Application.GetObject("Dados.XObject11").Valor = 123 End Sub Ou ainda o script a seguir. Sub CommandButton1_Click() Application.GetObject("Dados").Item("XObject11").Valor = 123 End Sub Pode-se ainda ter um XControl acessando um XFolder ou XObject, através de uma XProperty. Por exemplo, a figura a seguir mostra um XControl chamado XControl1 que possui uma propriedade XValor do tipo XObject1, que é o nome do XObject criado. XObject XControl Programando no E3 22 Cria-se, por exemplo, uma Associação do valor do objeto Texto1 com a propriedade Valor do XObject1. Isso é realizado através da propriedade XValor, criada no XControl1. Assim, o valor da propriedade Valor do XObject1 é mostrada no objeto Texto1 do XControl1. Propriedade Valor No projeto, o vínculo da instância XObject11 à instância XControl11 pode ser realizado através de uma Associação na propriedade XValor. Associação na Propriedade XValor 2.3.8.1 Exemplo de Criação de um ElipseX Suponha que determinada aplicação necessite supervisionar e comandar 10 motores. Cada motor precisa ser representado por um desenho na Tela, que exibe a cor verde quando em operação e vermelho quando desligado. Também deve ser permitido o comando do motor na Tela, enviando instruções para ligar e desligar, além de exibir a velocidade. Uma possibilidade é a criação de um XControl chamado MotorA com as propriedades Estado igual a Boolean e Velocidade igual a Double, conforme a figura a seguir. 23 Programando no E3 Aba Design Aba Propriedades 1. Para a indicação da cor, a propriedade OverrideFillColor do motor deve estar associada à propriedade Estado do XControl, através de uma Associação Digital. Configure a propriedade OverrideFillMode para 2 - SolidFill. 2. Para exibir a velocidade, a propriedade Value do Display deve ser associada à propriedade Velocidade do XControl. 3. O Botão Liga-Desliga troca o valor da propriedade Estado através de uma Associação Simples. Note que: · As Associações dentro da biblioteca são internas, e seu formato é Nome_do_Controle.Nome_da_Propriedade · O objeto, depois de inserido na Tela, deve ter estas propriedades associadas aos Tags verdadeiros, para cada um dos motores · Uma Associação de um Tag para a propriedade Estado tem que ser realizada para cada objeto MotorA Programando no E3 24 E3 Viewer Outra possibilidade, mais abrangente, utiliza um XObject para o motor. Desta forma, todas as informações relativas aos motores residem em objetos que estão no servidor. Assim, pode-se construir vários tipos de interface para o motor (XControls) que trazem do servidor, através do XObject, somente as informações necessárias. Desta maneira, o objeto MotorA teria que ser modificado para apontar para um XObject, ao invés de declarar em si mesmo todas as propriedades. 1. Crie um XObject chamado MotorADados e declare neste objeto as propriedades Estado e Velocidade. 2. Crie um XControl MotorA que possua apenas uma propriedade, chamada MeusDados, do tipo MotorADados. 3. MotorADados deve ser inserido em uma Pasta de Dados no servidor e corresponde a cada um dos motores. MotorA, por sua vez, aponta para o MotorADados desejado, não sendo necessária a criação de novos Tags. Configuração no Editor do XObject Configuração no Editor do XControl 4. A propriedade Estado, associada à propriedade OverrideFillColor do motor, seria MotorA.MeusDados.Estado. 5. A propriedade Velocidade, associada ao Display, seria MotorA.MeusDados.Velocidade. 25 Programando no E3 2.4 Acessando Objetos Seguindo o conceito de encapsulamento de programação orientada a objetos, os métodos e propriedades são associados aos objetos de origem. Isto significa que sempre se deve indicar o objeto do qual se está acessando o método ou propriedade. 2.4.1 Propriedades Para referenciar as propriedades de um objeto, deve-se usar o método GetObject. A sintaxe é a seguinte: Application.GetObject("<objeto>").<propriedade> Neste caso, <objeto> é o nome do objeto e <propriedade> é o nome da propriedade, conforme o exemplo a seguir. Application.GetObject("Dados.TempTanque2").Type Para facilitar a digitação, é aconselhável sempre utilizar o AppBrowser, que já traz a sintaxe correta. 2.4.1.1 Propriedade Value No E3, muitos objetos possuem uma propriedade em comum chamada Value. Neste caso específico, pode-se acessar esta propriedade utilizando se o próprio nome do objeto, conforme o exemplo a seguir. Button1 = False Que é equivalente ao exemplo a seguir. Button1.Value = False 2.4.2 Métodos A sintaxe a seguir exemplifica a chamada de um método que não precisa de parâmetros. Application.GetObject("<objeto>").<metodo> Neste caso, <objeto> é o nome do objeto e <metodo> é o nome do método. Se o método aceita parâmetros, use a sintaxe a seguir. Application.GetObject("<objeto>").<metodo>(<parametro>) Neste caso, <parametro> é o parâmetro a ser passado para o método. Quando houver mais de um parâmetro, utilize vírgulas para separá-los. Se o método retorna um resultado, e for desejável guardá-lo, então os parâmetros devem ser colocados obrigatoriamente entre parênteses, conforme o exemplo a seguir. <V> =Application.GetObject("<objeto>").<metodo>(<parametro>) Neste caso, <V> é a variável que recebe o resultado do método. 2.5 Trabalhando com Coleções Uma Coleção, ou Collection, é um objeto que gerencia um conjunto de objetos similares. Os objetos contidos em uma coleção são referenciados por índices, semelhante à referência de arrays. Pode-se adicionar ou remover objetos individuais de uma coleção, conforme o exemplo a seguir. Sub CommandButton1_Click() ' Adiciona uma Pena no objeto E3Chart1 Screen.Item("E3Chart1").Pens.AddPen "Pena" End Sub Sub CommandButton2_Click() ' Remove a primeira Pena Screen.Item("E3Chart1").Pens.Remove 0 End Sub NOTA O primeiro objeto em uma coleção possui o índice 1 (um). Todas as coleções possuem uma propriedade em comum chamada Count, que é o número de objetos ou filhos existentes, conforme o exemplo a seguir. Programando no E3 26 Sub CommandButton1_Click() ' Mostra uma caixa de diálogo com o número de Penas MsgBox Screen.Item("E3Chart1").Pens.Count End Sub 2.5.1 Acessando Objetos com o Método Item Toda coleção possui um método Item, que pode ser usado para acessar qualquer objeto dentro da coleção. Este método aceita um parâmetro Item, que pode ser um número inteiro positivo ou o nome do objeto dentro da coleção. O exemplo a seguir é um ajuste da cor da segunda Pena de um objeto E3Chart. Sub CommandButton1_Click() ' Modifica a cor da segunda pena Screen.Item("E3Chart1").Pens.Item(2).Color = RGB(212, 208, 20) End Sub O mesmo ajuste pode ser obtido com o exemplo a seguir. Sub CommandButton1_Click() ' Modifica a cor da pena com nome "Pena2" Screen.Item("E3Chart1").Pens.Item("Pena2").Color = RGB(212, 208, 20) End Sub Os comandos anteriores são equivalentes, o primeiro indicando o índice da Pena na coleção e o segundo indicando o nome da Pena. 2.6 Comando Set O VBScript implementa o conceito de polimorfismo das linguagens orientadas a objeto, permitindo que uma variável do tipo Variant assuma a forma de um objeto qualquer através do comando Set. Deste modo, a variável funciona como um ponteiro para o objeto desejado, permitindoacessar seus métodos e propriedades, conforme o exemplo a seguir. Sub CommandButton1_Click() Set E3Chart = Screen.Item("E3Chart1") E3Chart.Pens.Item(2).Color = RGB(212, 208, 20) End Sub Neste exemplo foi executada a mesma tarefa da seção anterior, porém a parte referente a como chegar até o objeto específico havia sido omitida. Sem o comando Set, a mesma chamada teria que ser escrita conforme o exemplo a seguir. Screen.Item("E3Chart1").Pens.Item(2).Color = RGB(212, 208, 20) Aparentemente não existe vantagem neste caso, pois pode-se realizar todo o procedimento em uma única linha de código. Porém, se logo adiante no mesmo script outras operações forem necessárias, o processo se torna mais simples e rápido se a chamada ao método Item não tiver sido colocada em todas as linhas. Sub CommandButton1_Click() 'Exemplo ruim Screen.Item("E3Chart1").Pens.Item(0).Color = RGB(212, 208, 20) Screen.Item("E3Chart1").Pens.Item(1).Color = RGB(200, 208, 20) Screen.Item("E3Chart1").Pens.Item(2).Color = RGB(100, 208, 20) End Sub Sub CommandButton2_Click() 'Exemplo melhor Set Penas = Screen.Item("E3Chart1").Pens Penas.Item(0).Color = RGB(212, 208, 20) Penas.Item(1).Color = RGB(200, 208, 20) Penas.Item(2).Color = RGB(100, 208, 20) End Sub 2.7 E3Globals O E3Globals é um módulo do E3 que contém métodos de uso global. Os métodos GetCurrentWindowsUserName, GetLocalTime e GetLocalTimeUTC não podem ser utilizados em Associações, somente em scripts. O restante dos métodos pode ser utilizado tanto em scripts quanto em Associações. A forma de utilização destes métodos admite as sintaxes E3Globals.<método> ou simplesmente <método>, exceto no caso do objeto Relatório, onde a sintaxe E3Globals.<método> é obrigatória. https://docs.microsoft.com/pt-br/office/vba/language/reference/user-interface-help/set-statement 27 Programando no E3 2.7.1 Métodos Esta seção contém informações sobre os métodos do módulo E3Globals. 2.7.1.1 BShl BShl(Value, Bits) Retorna o valor passado no parâmetro Value deslocado à esquerda o número de bits especificado no parâmetro Bits. Este método retorna um erro caso o parâmetro Bits esteja fora da faixa permitida (entre zero e 31). Este método está disponível tanto em Associações quanto em scripts. NOTA Este método permite passar um valor de 32 bits sem sinal, no intervalo entre zero e 4.294.967.296, no parâmetro Value, mas seu valor de retorno é sempre um valor de 32 bits com sinal, no intervalo entre -2.147.483.648 e 2.147.483.647. Caso seja utilizado um valor de ponto flutuante, somente a parte inteira deste valor é utilizada. 2.7.1.2 BShr BShr(Value, Bits, [PreserveSign]) Retorna o valor passado no parâmetro Value deslocado à direita o número de bits especificado no parâmetro Bits. Este método retorna um erro caso o parâmetro Bits esteja fora da faixa permitida (entre zero e 31). O parâmetro PreserveSign é um Booleano que permite preencher ou não os bits à esquerda com uma cópia do bit de sinal. Se omitido, preenche os bits à esquerda com zeros. Este método está disponível tanto em Associações quanto em scripts. NOTA Este método permite passar um valor de 32 bits sem sinal, no intervalo entre zero e 4.294.967.296, no parâmetro Value, mas seu valor de retorno é sempre um valor de 32 bits com sinal, no intervalo entre -2.147.483.648 e 2.147.483.647. Caso seja utilizado um valor de ponto flutuante, somente a parte inteira deste valor é utilizada. 2.7.1.3 Choose Choose(Index, Values) Retorna um dos itens especificados em Values, baseado no parâmetro Index, iniciando em 0 (zero). Este método retorna Null caso o valor de Index seja menor que 0 (zero) ou maior ou igual ao número de valores em Values. Este método está disponível tanto em Associações quanto em scripts. NOTA O método Choose não propaga a qualidade nem a estampa de tempo dos valores. Se uma Associação contém a expressão Choose(TagIndex, Tag1.Value, Tag2.Value, Tag3.Value), o resultado é o valor selecionado, porém com qualidade Boa (192) e estampa de tempo atual. Para que estas informações sejam preservadas, é necessário especificar somente o objeto, como por exemplo Choose(TagIndex, Tag1, Tag2, Tag3). 2.7.1.4 DwordToLong DwordToLong(Value) Converte um valor de 32 bits sem sinal, no intervalo entre zero e 4.294.967.296, passado no parâmetro Value para um valor de 32 bits com sinal, no intervalo entre -2.147.483.648 e 2.147.483.647, no mesmo padrão de bits. Se o valor estiver no intervalo entre zero e 2.147.483.647, o valor é retornado sem mudanças. NOTA Caso o valor passado no parâmetro Value seja um valor de ponto flutuante, somente a parte inteira deste valor é utilizada. Programando no E3 28 2.7.1.5 E3Format E3Format(Value, [Format]) Formata a expressão em Value utilizando o formato especificado em Format. Este formato utiliza as mesmas definições da propriedade Format de objetos Texto, Display e SetPoint. Se omitido, mostra a expressão em Value formatada conforme as configurações de região e idioma do Windows. Este método está disponível tanto em Associações quanto em scripts. 2.7.1.6 E3ProductString E3ProductString() Este método retorna uma String contendo o nome e a versão do componente onde é invocado, como por exemplo "E3 6.1.90" ou "E3 (64-bits) 6.1.90". 2.7.1.7 E3ProductVersionBuild E3ProductVersionBuild() Este método retorna o número de build da versão do componente onde é invocado. Por exemplo, se a versão do componente é a 6.1.90, este método retorna o valor 90. 2.7.1.8 E3ProductVersionMajor E3ProductVersionMajor() Este método retorna o número principal da versão do componente onde é invocado. Por exemplo, se a versão do componente é a 6.1.90, este método retorna o valor 6. 2.7.1.9 E3ProductVersionMinor E3ProductVersionMinor() Este método retorna o número secundário da versão do componente onde é invocado. Por exemplo, se a versão do componente é a 6.1.90, este método retorna o valor 1. 2.7.1.10 GetBit GetBit(Value, BitIndex) Retorna o valor (verdadeiro ou falso) do bit de Value especificado em BitIndex. Este método retorna um erro caso o parâmetro BitIndex esteja fora da faixa permitida (entre zero e 31). Este método está disponível tanto em Associações quanto em scripts. NOTA Este método permite passar um valor de 32 bits sem sinal, no intervalo entre zero e 4.294.967.296, no parâmetro Value. Caso seja utilizado um valor de ponto flutuante, somente a parte inteira deste valor é utilizada. 2.7.1.11 GetComputerName GetComputerName() Retorna uma String contendo o nome do computador atual. Este método está disponível tanto em Associações quanto em scripts. 2.7.1.12 GetCurrentWindowsUserName GetCurrentWindowsUserName() Retorna uma String contendo o nome do usuário logado no processo corrente. Este método não está disponível em Associações, somente em scripts. 2.7.1.13 GetLocalTime GetLocalTime() Retorna a data e hora do computador local, com precisão de milissegundos e no fuso horário local. Este método não está disponível em Associações, somente em scripts. 29 Programando no E3 2.7.1.14 GetLocalTimeUTC GetLocalTimeUTC() Retorna a data e hora do computador local, com precisão de milissegundos e no fuso horário UTC (Tempo Universal Coordenado). Este método não está disponível em Associações, somente em scripts. 2.7.1.15 IIf IIf(Condition, ExprTrue, ExprFalse) Retorna a expressão contida em ExprTrue se a condição avaliada em Condition é verdadeira, e a expressão contida em ExprFalse se a condição avaliada é falsa. Este método está disponível tanto em Associações quanto em scripts. NOTA O método IIf não propagaa qualidade nem a estampa de tempo dos valores. Se uma Associação contém a expressão IIf(Tag1.Value = 0, Tag2.Value, Tag3.Value), o resultado é o valor de Tag2 ou Tag3, porém com qualidade Boa (192) e estampa de tempo atual. Para que estas informações sejam preservadas, é necessário especificar somente o objeto, como por exemplo IIf(Tag1.Value = 0, Tag2, Tag3). 2.7.1.16 LongToDword LongToDword(Value) Converte um valor de 32 bits com sinal, no intervalo entre -2.147.483.648 e 2.147.483.647, passado no parâmetro Value para um valor de 32 bits sem sinal, no intervalo entre zero e 4.294.967.296, no mesmo padrão de bits. Se o valor estiver entre zero e 2.147.483.647, o valor é retornado sem mudanças. NOTA Caso o valor passado no parâmetro Value seja um valor de ponto flutuante, somente a parte inteira deste valor é utilizada. 2.7.1.17 MsgBoxEx MsgBoxEx(prompt, [buttons], [title], [PosX], [PosY]) Este método permite mostrar uma caixa de diálogo padrão do Windows e especificar a posição na tela. Os parâmetros disponíveis neste método são os seguintes: · prompt: Texto a ser mostrado na caixa de diálogo. O tamanho máximo deste texto é de aproximadamente 1024 caracteres, dependendo da largura dos caracteres usados. Para inserir quebras de linha no texto, separe as linhas usando a função Chr do VBScript com os valores 10 (avanço de linha), 13 (retorno de carro) ou uma combinação destes valores entre cada linha · buttons: Uma expressão numérica opcional que representa a soma dos valores especificando a quantidade e o tipo dos botões mostrados, o estilo, o botão padrão e se a caixa de diálogo é modal ou não. O valor padrão deste parâmetro é 0 (zero), ou seja, mostra apenas o botão OK. Consulte a tabela a seguir para mais informações sobre este parâmetro · title: Texto opcional mostrado na barra de título da caixa de diálogo. Se este parâmetro é omitido, a caixa de diálogo não mostra nenhum título · PosX: Indica a posição, em pixels, da caixa de diálogo em relação à margem esquerda da janela. Caso este parâmetro seja omitido, a respectiva coordenada da caixa de diálogo é centralizada na janela · PosY: Indica a posição, em pixels, da caixa de diálogo em relação à margem superior da janela. Caso este parâmetro seja omitido, a respectiva coordenada da caixa de diálogo é centralizada na janela NOTA Caso os valores indicados nos parâmetros PosX e PosY posicionem a caixa de diálogo fora da área visível da janela, estes valores são ajustados automaticamente para garantir que a caixa de diálogo esteja visível. Os valores possíveis para o parâmetro buttons estão descritos na tabela a seguir. Programando no E3 30 Valores possíveis para o parâmetro buttons VALOR DESCRIÇÃO CONSTANTE NO VBSCRIPT TIPO DE BOTÃO 0 Mostra apenas o botão OK vbOKOnly 1 Mostra os botões OK e Cancelar (Cancel) vbOKCancel 2 Mostra os botões Abortar (Abort), Repetir (Retry) e Ignorar (Ignore) vbAbortRetryIgnore 3 Mostra os botões Sim (Yes), Não (No) e Cancelar (Cancel) vbYesNoCancel 4 Mostra os botões Sim (Yes) e Não (No) vbYesNo 5 Mostra os botões Repetir (Retry) e Cancelar (Cancel) vbRetryCancel ESTILO DOS ÍCONES 16 Mostra um ícone indicando uma mensagem crítica vbCritical 32 Mostra um ícone indicando uma pergunta vbQuestion 48 Mostra um ícone indicando uma afirmação vbExclamation 64 Mostra um ícone indicando uma informação vbInformation BOTÃO PADRÃO 0 Indica que o primeiro botão é o padrão de retorno vbDefaultButton1 256 Indica que o segundo botão é o padrão de retorno vbDefaultButton2 512 Indica que o terceiro botão é o padrão de retorno vbDefaultButton3 768 Indica que o quarto botão é o padrão de retorno vbDefaultButton4 TIPO DE JANELA MODAL 0 Indica que o usuário deve responder esta caixa de diálogo antes de continuar trabalhando na aplicação vbApplicationModal 4096 Indica que todas as aplicações estão suspensas até que o usuário responda esta caixa de diálogo vbSystemModal Este método retorna um valor numérico que representa o botão clicado na caixa de diálogo, conforme a tabela a seguir. Valores de retorno do método MsgBoxEx VALOR BOTÃO CONSTANTE NO VBSCRIPT 1 OK vbOK 2 Cancelar (Cancel) vbCancel 3 Abortar (Abort) vbAbort 4 Repetir (Retry) vbRetry 5 Ignorar (Ignore) vbIgnore 31 Programando no E3 VALOR BOTÃO CONSTANTE NO VBSCRIPT 6 Sim (Yes) vbYes 7 Não (No) vbNo 2.7.1.18 OPCGetLimit OPCGetLimit(Quality) Retorna a informação de Limite de uma Qualidade OPC especificada no parâmetro Quality. Este método está disponível tanto em Associações quanto em scripts. Os valores possíveis de retorno deste método são os seguintes: · 0: Livre · 1: Baixo · 2: Alto · 3: Constante 2.7.1.19 OPCGetQuality OPCGetQuality(Quality) Retorna a informação de Qualidade de uma Qualidade OPC especificada no parâmetro Quality. Este método está disponível tanto em Associações quanto em scripts. Os valores possíveis de retorno deste método são os seguintes: · 0: Ruim · 1: Incerta · 2: Não utilizada · 3: Boa 2.7.1.20 OPCGetSubStatus OPCGetSubStatus(Quality) Retorna a informação de Substatus (de 0 a 15) de uma Qualidade OPC especificada no parâmetro Quality. Este método está disponível tanto em Associações quanto em scripts. O Padrão OPC especifica os seguintes valores: · Qualidade Boa: · 0: Não especificado · 1: Sobrescrita local · Qualidade Ruim: · 0: Não especificado · 1: Erro de configuração · 2: Não conectado · 3: Falha no dispositivo · 4: Último valor conhecido · 5: Falha de comunicação · 6: Fora de serviço · Qualidade Incerta: · 0: Não especificado · 1: Último valor utilizável · 4: Sensor não confiável · 5: Unidade de engenharia excedida · 6: Subnormal 2.7.1.21 OPCGetVendor OPCGetVendor(Quality) Retorna a informação de Reservado para o Fabricante (de 0 a 255) de uma Qualidade OPC especificada em Quality. Este método está disponível tanto em Associações quanto em scripts. Programando no E3 32 2.7.1.22 OPCIsBad OPCIsBad(Quality) Retorna verdadeiro se a Qualidade OPC é Ruim, ou falso caso contrário. Este método está disponível tanto em Associações quanto em scripts. 2.7.1.23 OPCIsGood OPCIsGood(Quality) Retorna verdadeiro se a Qualidade OPC é Boa, ou falso caso contrário. Este método está disponível tanto em Associações quanto em scripts. 2.7.1.24 OPCIsUncertain OPCIsUncertain(Quality) Retorna verdadeiro se a Qualidade OPC é Incerta, ou falso caso contrário. Este método está disponível tanto em Associações quanto em scripts. 2.7.1.25 OPCMakeQuality OPCMakeQuality(QualityFlag, [SubStatus], [Limit], [Vendor]) Retorna um novo valor de Qualidade OPC utilizando os valores passados nos parâmetros QualityFlag, SubStatus, Limit e Vendor. Este método está disponível tanto em Associações quanto em scripts. Os valores possíveis para cada um dos parâmetros são os seguintes: · QualityFlag: Especifica a qualidade do valor · 0: Ruim · 1: Incerta · 3: Boa · SubStatus: Especifica o substatus do valor (entre 0 e 15, veja o método OPCGetSubStatus para os valores possíveis). Se este parâmetro é omitido, assume o valor 0 (zero) · Limit: Especifica o limite do valor. Se este parâmetro é omitido, assume o valor 0 (zero) · 0: Livre · 1: Baixo · 2: Alto · 3: Constante · Vendor: Valor específico do fabricante (entre 0 e 255). Se este parâmetro é omitido, assume o valor 0 (zero) 2.7.1.26 OPCSetLimit OPCSetLimit(Quality, Limit) Modifica a informação de Limite de uma Qualidade OPC e retorna o valor modificado. Este método está disponível tanto em Associações quanto em scripts. Os valores possíveis para o parâmetro Limitsão os seguintes: · 0: Livre · 1: Baixo · 2: Alto · 3: Constante 2.7.1.27 OPCSetQuality OPCSetQuality(Quality, QualityFlag) Modifica a informação de Qualidade de uma Qualidade OPC e retorna o valor modificado. Este método está disponível tanto em Associações quanto em scripts. Os valores possíveis para o parâmetro QualityFlag são os seguintes: · 0: Ruim · 1: Incerta · 2: Não utilizada 33 Programando no E3 · 3: Boa 2.7.1.28 OPCSetSubStatus OPCSetSubStatus(Quality, SubStatus) Modifica a informação de Substatus de uma Qualidade OPC (de 0 a 15) e retorna o valor modificado. Este método está disponível tanto em Associações quanto em scripts. O Padrão OPC especifica os seguintes valores: · Qualidade Boa: · 0: Não especificado · 1: Sobrescrita local · Qualidade Ruim: · 0: Não especificado · 1: Erro de configuração · 2: Não conectado · 3: Falha no dispositivo · 4: Último valor conhecido · 5: Falha de comunicação · 6: Fora de serviço · Qualidade Incerta: · 0: Não especificado · 1: Último valor utilizável · 4: Sensor não confiável · 5: Unidade de engenharia excedida · 6: Subnormal 2.7.1.29 OPCSetVendor OPCSetVendor(Quality, Vendor) Modifica a informação de Reservado para o Fabricante (de 0 a 255) de uma Qualidade OPC e retorna o valor modificado. Este método está disponível tanto em Associações quanto em scripts. 2.7.1.30 SetBit SetBit(Value, BitIndex, BitValue) Ajusta o valor de Value (verdadeiro ou falso) do bit especificado em BitIndex para BitValue. Este método retorna um erro caso o parâmetro BitIndex esteja fora da faixa permitida (entre zero e 31). Este método está disponível tanto em Associações quanto em scripts. NOTA Este método permite passar um valor de 32 bits sem sinal, no intervalo entre zero e 4.294.967.296, no parâmetro Value, mas seu valor de retorno é sempre um valor de 32 bits com sinal, no intervalo entre -2.147.483.648 e 2.147.483.647. Caso seja utilizado um valor de ponto flutuante, somente a parte inteira deste valor é utilizada. 2.7.1.31 SourceTypeName SourceTypeName(SourceType) Retorna uma String com a descrição da Fonte de Medida ativa (propriedade ActiveSource dos objetos Medida Analógica e Medida Discreta do E3). Este método está disponível tanto em Associações quanto em scripts. Os valores possíveis para o parâmetro SourceType são os seguintes: · -1: String vazia · 0: Fonte Ativa · 1: SCADA · 2: Operador · 3: Centro de Comando · 4: Faturamento Programando no E3 34 · 5: Calculada · 6: Banco de Dados · 100: Processador Topológico · 101: Fluxo de Potência · 102: Estimador de Estados · 103: Descarte de Cargas · 104: Modelagem de Cargas para Distribuição · 105: Autorrecuperação · 106: Leitor Externo NOTA Caso o valor passado no parâmetro SourceType não esteja entre os valores possíveis, este método retorna a String "???". 2.8 Eventos, Métodos e Propriedades Gerais dos Objetos Esta seção contém informações sobre os eventos, métodos e propriedades gerais dos objetos. 2.8.1 Eventos Eventos são ocorrências relacionadas a um objeto que permitem disparar ações programadas. Existem, basicamente, eventos Físicos ou Externos e Internos. Os Eventos Físicos são, por exemplo, ações do usuário. No caso do usuário digitar algo no teclado, a informação relevante pode ser a tecla pressionada, ou se o usuário apontar e clicar com o mouse, a informação relevante pode ser a posição do cursor e o status dos botões. Os Eventos Internos são, por exemplo, mudanças de valor de uma variável ou Tag na aplicação. Como o Tag pode ser associado a um dispositivo externo, diz-se que os eventos internos podem ter associações físicas, como a mudança da temperatura de uma câmara, por exemplo. 2.8.1.1 Variáveis de Evento Variáveis de Evento são criadas quando um evento inicia. Para serem utilizadas, devem ser associadas a parâmetros na chamada do script do evento. O exemplo a seguir é a chamada de um procedimento associado ao evento KeyDown de AlgumObjeto. Sub AlgumObjeto_KeyDown(KeyCode, Shift) Note que a chamada contém as variáveis KeyCode e Shift. O E3 atribui valores a estas variáveis automaticamente no momento da ocorrência do evento. Neste caso, KeyCode recebe o código da tecla pressionada e Shift recebe Verdadeiro ou Falso, conforme a tecla SHIFT esteja pressionada ou não. 2.8.1.2 OnStartRunning OnStartRunning() Ocorre tão logo um objeto seja iniciado. No exemplo a seguir, Meses é um Tag Interno e utiliza este evento para inicializar o vetor. Sub Meses_OnStartRunning() Value = Array("Janeiro", "Fevereiro", "Março", "Abril",_ "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro",_ "Novembro", "Dezembro") End Sub NOTA Para acessar este array, é necessário copiar a propriedade Value para uma variável local. 2.8.1.3 OnStopRunning OnStopRunning() Ocorre quando termina a execução de uma instância de um objeto. Utilize este evento para realizar operações de finalização para um objeto. Exemplo: Sub TagInterno1_OnStopRunning() ' Quando finaliza o objeto TagInterno1 35 Programando no E3 ' atribui False ao TagInterno2 Set tag2 = Application.GetObject("Dados.TagInterno2") tag2.Value = False End Sub 2.8.2 Métodos Esta seção contém informações sobre os métodos comuns aos objetos do E3. Cada tópico mostra o nome do método com os respectivos parâmetros, na sintaxe correta, e um exemplo de utilização. 2.8.2.1 Chamadas de Métodos Muitos métodos pré-definidos possuem parâmetros, que podem ou devem ser passados na chamada do método. Para isto, o VBScript possui uma regra que deve ser seguida. Se um método é utilizado em uma atribuição, os parâmetros devem estar entre parênteses, como neste exemplo de chamada do método GetObject. obj = Application.GetObject("dados.tag001") Já se um método é chamado sozinho, deve-se retirar os parênteses, como neste exemplo de chamada do método SetVariableValue. Screen.Item("Consulta").SetVariableValue Valor, 12 Os parênteses usados nas citações de métodos neste documento servem apenas como indicativo para diferenciá-los das propriedades. Nos scripts, deve-se seguir esta mesma regra. 2.8.2.2 Activate Activate() Ativa um objeto que está inativo no momento. Exemplo: Sub CommandButton1_Click() Dim obj, tag Set obj = Application.GetObject("Dados") ' Cria um novo objeto e o desativa (False) Set tag = obj.AddObject("DemoTag", False) ' Inicializa os parâmetros do novo objeto tag.Name = "tag001" tag.Type = 3 ' Ativa o objeto (coloca em execução) tag.Activate() End Sub NOTA Ativar um objeto usando este método configura a propriedade IsObjectActive deste objeto para Verdadeiro. 2.8.2.3 AddObject AddObject(ClassName, [Activate], [ObjectName]) Este método adiciona um novo objeto à aplicação. Este método possui o parâmetro ClassName, que indica o tipo de objeto que é criado. Por exemplo, para se criar um retângulo na Tela, o parâmetro ClassName deve ser igual a "DrawRect". O objeto criado está contido no objeto que chamou este método e pode ser acessado através do método Item. O parâmetro Activate é opcional e indica se o objeto é ativado após a criação. Se o objeto é ativado, as Associações e scripts são habilitados. Se o objeto é criado com o parâmetro Activate em Falso, mais tarde pode ser ativado pelo método Activate. Se este parâmetro é omitido, o objeto é ativado após a criação. O valor configurado neste parâmetro é usado para configurar a propriedade IsObjectActive do objeto criado. O parâmetro ObjectName também é opcional e indica um nome para o objeto criado. Caso o nome já exista, o novo nome é automaticamente incrementado. Seeste parâmetro é omitido, o novo objeto é nomeado a partir do nome da classe definida no parâmetro ClassName. Consulte a propriedade geral Name para mais informações sobre os caracteres permitidos nos nomes de objetos. O objeto só é criado se é de um tipo compatível com o objeto que o contém. Para se ter certeza que o objeto foi criado, pode-se utilizar o método IsObject do VBScript. https://docs.microsoft.com/pt-br/office/vba/language/reference/user-interface-help/isobject-function Programando no E3 36 NOTA Apenas objetos que possuem a opção Inserir no seu menu contextual podem acessar este método. 2.8.2.4 Context Context(ContextName) Retorna o objeto que implementa o contexto indicado pelo parâmetro ContextName, que deve ser uma String entre aspas duplas. Este método falha se nenhum objeto na hierarquia superior do objeto que está chamando este método implementar o contexto indicado. Os seguintes contextos estão disponíveis: · Container: Objetos de servidor e do Viewer, ou seja, objetos inseridos em arquivos de projeto ou em pastas dentro de projetos · Area: Áreas de Alarme, ou qualquer objeto de servidor cuja propriedade IsAlarmArea esteja configurada para Verdadeiro NOTA Os nomes dos contextos estão sempre em inglês, e não diferenciam maiúsculas de minúsculas. Para verificar o contexto a que um objeto pertence, abra sua Janela de Propriedades, selecione a aba Item e verifique os contextos válidos no quadro Contextos. Caso um objeto defina mais de um contexto, os nomes são apresentados em ordem alfabética, separados por vírgulas. 2.8.2.5 Deactivate Deactivate() Este método desativa um objeto criado ou previamente ativado pelo método Activate. Pode-se desativar um objeto quando é necessário realizar uma configuração prévia, como por exemplo na inicialização de propriedades, ou quando é necessário realizar testes nos quais o objeto não pode estar presente e ativo. Exemplo: Sub CommandButton1_Click() Dim obj, novo Set obj = Application.GetObject("Dados") Set novo = obj.AddObject("DemoTag", True) ' Desativa o objeto novo.Deactivate() End Sub NOTA Desativar um objeto usando este método configura a propriedade IsObjectActive deste objeto para Falso. 2.8.2.6 DeleteObject DeleteObject(ChildName) Apaga do projeto o objeto especificado. O parâmetro ChildName é uma String (ignora maiúsculas e minúsculas) que indica o objeto filho que se deseja apagar. O método retorna Verdadeiro caso a operação de apagar o objeto tenha sido bem-sucedida, ou Falso caso o objeto filho não exista. Para se apagar um objeto a partir de uma referência a um elemento, utilize este método no objeto pai. Exemplo: Sub CommandButton1_Click() Set obj = Application.GetObject("Dados") If obj.DeleteObject("Tag001") Then MsgBox("Tag apagado com sucesso!") Else MsgBox("Falha ao apagar: o Tag não existe.") End If End Sub NOTA Apenas objetos que possuem a opção Inserir no seu menu contextual podem acessar este método. 37 Programando no E3 2.8.2.7 GetChildObject GetChildObject(ObjectPath) Este método retorna uma referência para o objeto filho apontado pelo parâmetro ObjectPath. Com isto é possível acessar todas as propriedades e métodos deste objeto, semelhante ao funcionamento do método GetObject. Este método falha se o caminho apontado por ObjectPath contiver uma propriedade ou método ao final. O caminho apontado pelo objeto filho não é um caminho desde a raiz (o arquivo .prj) e sim um caminho sempre a partir do objeto onde o método é chamado. NOTA Este método NÃO existe no objeto Application do Servidor e nem nas Pastas de Aplicativo, porém existe no objeto Application do Viewer e é acessível mesmo em um E3 Viewer em modo Somente Leitura. 2.8.2.8 GetObject GetObject(ObjectPath) Este método retorna a referência do objeto especificado em ObjectPath. Isto permite acessar todas as propriedades ou métodos do objeto. Esta é uma prática bastante comum na programação de scripts no E3, facilita a manipulação de objetos e deixa o código mais inteligível. Exemplo: Sub CommandButton1_Click() ' Atribui o valor 20 à propriedade Value do objeto ' TagInterno1 que está em Dados. Set tag = Application.GetObject("Dados.TagInterno1") tag.Value = 20 End Sub 2.8.2.9 Item Item(ItemId) Retorna a referência para o objeto filho ItemId do objeto que chamou este método. Este método pode buscar um objeto tanto pelo nome quanto pelo índice, um inteiro entre 1 (um) e o valor especificado na propriedade Count. Se o índice ou o nome especificado é válido, este método retorna a referência ao objeto. Caso contrário, o método retorna um erro de "Parâmetro Inválido". Exemplo: Sub Tela1_Click() ' Atribui a obj a referência para o objeto filho Botao1 ' de Tela1. Set obj = Item("Botao1") ' Configura a propriedade BackColor de obj, ou seja, ' de Botao1. obj.BackColor = RGB(255, 0, 0) End Sub 2.8.2.10 RunEvent RunEvent(EventName, [Arguments]) Executa o script ou scripts associados ao evento indicado pelo parâmetro EventName, que deve ser uma String. O parâmetro Arguments é opcional e deve ser usado nos casos em que o evento necessite de argumentos. Estes argumentos devem estar separados por vírgulas. Este método falha caso o evento indicado não tenha nenhum script a ser executado. 2.8.2.11 RunProcedure RunProcedure(ProcedureName, [Arguments]) Executa o script ou scripts associados ao procedimento (procedure) ou função (function) indicado pelo parâmetro ProcedureName, que deve ser uma String. O parâmetro Arguments é opcional e deve ser usado nos casos em que o procedimento ou função necessitem de argumentos. Estes argumentos devem estar separados por vírgulas. Este método falha caso o procedimento ou função indicados não tenham nenhum script a ser executado. Este método retorna um valor nos casos em que a função indicada pelo parâmetro ProcedureName também retorne um valor. Programando no E3 38 2.8.2.12 Save Save() Este método salva o objeto especificado, que foi modificado em tempo de execução (runtime). Os objetos filhos também são salvos, conforme as especificações do objeto pai. Este método não é válido para os objetos Tela e Viewer. Exemplo: Sub CommandButton1_Click() Set area = Application.GetObject("ConfigAlarms")._ AddObject("Area", True) Application.GetObject("ConfigAlarms").Save() End Sub NOTA As modificações executadas em tempo de execução e salvas no objeto só são visíveis no E3 Studio após a atualização do projeto. Para isto, clique com o botão direito do mouse no nome do projeto e selecione a opção Atualizar. 2.8.3 Propriedades Todo objeto possui Propriedades, que servem para guardar informações a respeito das características daquele objeto. Por exemplo, um objeto do tipo Retângulo possui a propriedade Name, que contém o nome, e as propriedades Width e Height, que guardam a largura e altura, respectivamente, entre outras propriedades. Neste capítulo são listadas todas as propriedades gerais dos objetos do E3. Cada tópico traz o nome da propriedade, a descrição e, quando aplicável, um exemplo de uso. As propriedades são identificadas por um ícone que indica o tipo de dados suportado no conteúdo. Os tipos de dados disponíveis estão descritos na tabela a seguir. Tipos de dados disponíveis TIPO DE DADOS DESCRIÇÃO Booleano Representa os valores Verdadeiro (True) ou Falso (False) Coleção Representa uma coleção de objetos Item de Coleção Representa um item de uma coleção de objetos Cor Representa uma cor no formato RGB Data e Hora Representa uma data no calendário Gregoriano, iniciando em 1899 Enumeração Representa
Compartilhar