Você está na página 1de 111

Machine Translated by Google

Proficy IHM/SCADA -
iFIX 2022
Escrevendo roteiros

GE Digital Historiador Proficy e Centro de Operações: Análise de Dados em Contexto 1


Machine Translated by Google

Aviso Proprietário

As informações contidas nesta publicação são consideradas precisas e confiáveis. No entanto, a General Electric Company não assume nenhuma
responsabilidade por quaisquer erros, omissões ou imprecisões. As informações contidas na publicação estão sujeitas a alterações sem aviso prévio.

Nenhuma parte desta publicação pode ser reproduzida de qualquer forma, ou armazenada em um banco de dados ou sistema de recuperação, ou transmitida ou
distribuída de qualquer forma por qualquer meio, eletrônico, fotocópia mecânica, gravação ou outro, sem a permissão prévia por escrito da General Electric Company .
As informações aqui contidas estão sujeitas a alterações sem aviso prévio.

© 2022, General Electric Company. Todos os direitos reservados.

Avisos de Marca Registrada

GE, GE Monogram e Predix são marcas registradas ou marcas comerciais da General Electric Company.

Microsoft® é uma marca registrada da Microsoft Corporation, nos Estados Unidos e/ou em outros países.

Todas as outras marcas comerciais são de propriedade de seus respectivos proprietários.

Nós queremos ouvir de você. Se você tiver comentários, perguntas ou sugestões sobre nossa documentação, envie-os para o seguinte endereço de e-mail:

doc@ge.com
Machine Translated by Google

Índice

Escrevendo roteiros 1

Introdução 1

Soluções comuns de script 1

Código de amostra 1

Trabalhando com Objetos iFIX 2

Manipulando Imagens 2

Acessando dados em tempo real 2

Acessando dados de um banco de dados relacional: usando ADO 2

Trabalhando no ambiente de tempo de execução 2

Trabalhando com o Agendador 3

Manipulando Gráficos 3

Trabalhando com o iFIX Security 3

Criando grupos de tags 3

Usando exemplos no arquivo de ajuda do VBA e no código-fonte 3

Para exibir o código-fonte do Visual Basic: 3

Dicas de desenvolvimento 4

Introdução ao iFIX e VBA 4

O que você pode fazer com iFIX e VBA 4

Recursos VBA não suportados no iFIX 5

Componentes de um Projeto VBA 5

Aplicativo host 5

Editor do Visual Basic 5

Módulos 5

Formulários 6

Componentes do Editor VBA 6

Explorador de Projetos 7

Janela de Propriedades 7

Janela de código 9

Usando formulários VBA 10

© 2022 General Electric Company. Todos os direitos reservados. eu


Machine Translated by Google

Usando formulários VBA no iFIX 10

Tipos de arquivo VBA 11

Convenções de Nomenclatura do VBA 11

Para corrigir conflitos de nomenclatura para uma imagem: 12

Renomeando objetos VBA por meio de script 12

Testando seu código 13

Salvando seu trabalho 13

Configurando opções de VBA 13

Dicas para configurar opções de VBA 13

Exigir Declaração de Variável 14

Para configurar o VBA para adicionar automaticamente a instrução Option Explicit a um novo projeto: 14

Desmarque a caixa de seleção Compilar sob demanda 14

Configurando opções de projeto VBA 14

Verificação de tipo de dados e o compilador VBA 14

Exemplo de erro 15

Soluções alternativas 15

Otimizando o desenvolvimento do seu projeto VBA 16

Usando sub-rotinas iFIX e especialistas 16

Envio de mensagens do operador para áreas de alarme 17

Usando o Assistente de Script de Comando Múltiplo 18

Aceleradores de teclado 18

Dicas Gerais de Script iFIX 19

Criando um iFIX Shape com um script VBA 20

Usando coleções iFIX 20

Conectando objetos de animação a fontes de dados 20

Reutilizando Scripts 21

Cortando e colando código 21

Referências VBA 21

Excluindo objetos referenciados por nome em um script 21

Usando tipos de objetos excluídos em scripts 22

Arrastar e soltar objetos do Dynamo ou botões da barra de ferramentas 22

ii © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

Rastreamento de Erros em Subrotinas 22

Exemplos 23

Filtrando páginas globais 23

Recursos de ajuda de codificação VBA 23

Membros da Lista Automática 24

Informações Rápidas Automáticas 24

Ajuda sensível ao contexto 25

Trabalhando com Objetos iFIX 25

Limite de Contagem de Objeto VBA 25

Disponibilidade de Objetos no Editor VB 26

Para disponibilizar um único objeto no Editor VB: 26

Para disponibilizar um grupo de objetos no Editor VB: 26

Compreendendo a Hierarquia de Objetos do iFIX 27

Navegador de Objetos VBA 27

Conectando objetos a fontes de dados para criar animações 28

Fazendo conexões 29

Conectando-se diretamente a uma fonte de dados 29

Para fazer uma conexão direta usando a caixa de diálogo Animações: 30

Fazendo uma conexão direta escrevendo um script 30

Para fazer uma conexão de direção usando um script: 30

Fazendo conexões através de animações 31

Para fazer uma conexão de animação linear usando a caixa de diálogo Animações: 31

Fazendo uma conexão de animação por meio de um script 31

Exemplo: Construindo uma Conexão de Animação através de um Script 31

Conectando ou desconectando a propriedade de um objeto a uma fonte de dados 33

Recuperando informações de conexão da fonte de dados de uma propriedade 33

O objeto está conectado a uma fonte de dados? 34

A conexão é válida? 34

Exemplo: Script usando o método ParseConnectionSource 34

Quantas propriedades estão conectadas à fonte de dados? 34

Que outras informações de conexão estão disponíveis? 35

© 2022 General Electric Company. Todos os direitos reservados. iii


Machine Translated by Google

Exemplo: Script usando o método GetConnectionInformation com o método IsConnected 35

Determinando se a propriedade de um objeto está sendo usada como fonte de dados 35

Recuperando informações gerais de conexão 35

Método GetPropertyAttributes 36

Exemplo: Script usando o método GetPropertyAttributes 36

Método CanConstruct 36

Exemplo: Script usando o método CanConstruct 36

Método de construção 36

Exemplo: Script Usando o Método Construir 37

ValidateSource Method 37

Exemplo: Script usando o método ValidateSource 37

Propriedades e métodos de animação 37

Propriedades e métodos gerais do objeto de animação 37

Propriedades do Objeto de Animação Linear 38

Propriedades e métodos do objeto de animação de pesquisa 38

Exemplos de conexão: usando o objeto Lookup 39

Exemplo: usando a comparação de intervalo 39

Exemplo: usando a pesquisa de correspondência exata 40

Propriedades do objeto de animação de formato 41

Exemplo de Conexão: Animando a Rotação de um Retângulo 42

Exemplo: Animando a Rotação de um Objeto 42

Rodar um Grupo 44

Para rotacionar um grupo usando scripts: 44

Exemplo: Girando um Grupo Usando um Script 44

Manipulando Imagens 45

Entendendo os eventos de imagem 45

Iniciando uma imagem automaticamente 46

Exemplo: Criando uma barra de ferramentas 47

Gerenciando Múltiplos Monitores 47

Definindo uma propriedade de botão de pressão 48

Para definir a propriedade Pushbutton de um bitmap: 48

4 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

Definindo o documento ativo 48

Criando uma Variável Global 48

Para criar um objeto de variável global para conter a string da imagem ativa atual: 48

Alteração de exibições usando sub-rotinas globais 49

Exemplo: Usando um Alias para Abrir e Fechar Displays 50

Exemplo: Usando a sub-rotina ReplacePicture 50

Fechando Imagens com Scripts Ativos 51

Usando o objeto de aplicativo de espaço de trabalho 51

Criando scripts globais 51

Criando um objeto de variável global 51

Para tornar um objeto variável global adicionando-o à página do usuário: 52

Para criar uma variável global usando o Variable Expert: 52

Como as variáveis predefinidas do FIX32 são mapeadas para as propriedades do objeto iFIX 52

Criando uma Tabela de Limiar Global 54

Para criar uma tabela de limite global que é usada para todos os alarmes atuais no sistema: 54

Para nomear a tabela: 55

Para conectar um oval a uma tabela de limite global: 55

Criando um procedimento global 55

Para adicionar uma sub-rotina global à página do usuário: 56

Acessando dados em tempo real 56

Usando o sistema de dados OCX para leituras e gravações de grupo 56

Exemplo: gravação em grupo 57

Exemplo: leitura em grupo 58

Exemplo: gravações em fontes alternativas 58

Lendo e escrevendo em um tag de banco de dados 59

Gravando um valor em uma tag de banco de dados definida 59

Escrevendo um valor usando a sub-rotina WriteValue 59

Escreva um valor usando a propriedade Value do Tag do banco de dados 60

Exemplo: Utilizando a Propriedade Value do Tag do Banco de Dados 60

Acessando dados de um banco de dados relacional 61

Acesso ao banco de dados em VBA: MDAC 61

© 2022 General Electric Company. Todos os direitos reservados. em


Machine Translated by Google

Usando objetos de dados ActiveX 61

Criando objetos ADO 61

Exemplo: Criando um conjunto de registros ADO 62

Preenchendo um MSFlexGrid ou planilha semelhante OCX com ADO 62

Exemplo: Preenchendo um Flexgrid com dados de um conjunto de registros ADO 62

Adicionando um registro ao banco de dados por meio do ADO 63

Exemplo: Adicionando um registro a um banco de dados usando um conjunto de registros ADO 63

Atualizando um registro no banco de dados através do ADO 64

Exemplo: atualizando um banco de dados usando um conjunto de registros ADO 64

Excluindo um registro do banco de dados por meio do ADO 64

Exemplo: Excluir um registro de um banco de dados usando um conjunto de registros ADO 64

Tópico Avançado: Usando SQL 65

Trabalhando no ambiente de tempo de execução 65

Alterando fontes de dados 65

Criando uma conexão direta com um objeto 66

Para conectar uma tag AI à porcentagem de preenchimento horizontal de um retângulo ao clicar nele: 66

Exemplo: Alterando a Fonte de Dados de uma Animação Conectada a um Objeto 66

Para definir um objeto e alterar a origem do objeto de animação que está conectado a ele: 66

Alterando a legenda de um objeto de texto 67

Para alterar a legenda de um objeto de texto: 67

Alterando o valor atual de um objeto variável 67

Para alterar a legenda de um objeto Variável: 68

Alterando a fonte de dados de um link de dados 68

Para alterar a fonte de dados de um link de dados usando o objeto Format: 68

Alterar a fonte de dados de um evento FIX 68

Para alterar a fonte de dados de um evento FIX no ambiente de tempo de execução: 68

Substituindo Propriedades de String 69

Para pesquisar fontes de dados AO em uma imagem e substituí-las por fontes de dados AI: 69

Criação de formulários globais para entrada de dados 69

Exemplo: Código do Formulário 70

Exemplo: Código do Módulo 71

nós
© 2022 General Electric Company. Todos os direitos reservados.
Machine Translated by Google

Exemplo: código de objeto iFIX 71

Trabalhando com o Agendador 71

Agendador 71

Função DoEvents 72

Usando temporizadores no lugar de DoEvents 72

Usando scripts com entradas baseadas em tempo 74

Exemplo: verificar o espaço em disco e acionar um alarme se estiver muito baixo 74

Usando scripts com entradas baseadas em eventos 75

Exemplo: Gravação de monitoramento de tempo de inatividade 76

Manipulando Gráficos 78

Mudando de tempo real para dados históricos 79

Exemplo: Botões Rolar para trás e Rolar para frente 79

Rolagem de dados históricos 80

Exemplo: Criação de botões que rolam para trás e para frente através de dados históricos e conjuntos
Hora atual 80

Atualizando um gráfico automaticamente 81

Propriedades e métodos de gráficos específicos do ambiente 81

Propriedades do gráfico limitadas ao ambiente de configuração 81

Propriedades do gráfico limitadas ao ambiente de tempo de execução 82

Métodos de gráfico limitados ao ambiente de tempo de execução 82

Propriedades e métodos da caneta específicos do ambiente 82

Propriedades da Pena Limitadas ao Ambiente de Configuração 82

Propriedades da Pena Limitadas ao Ambiente de Execução 83

Métodos de caneta limitados ao ambiente de execução 83

Configurando as Propriedades de Várias Penas com Uma Chamada 83

Adicionando uma caneta 84

Excluindo uma caneta 84

Alterando Fontes de Dados em uma Pena 85

Para alterar a fonte de dados de uma pena editando o evento Click de um objeto: 85

Passando Dados Externos para uma Pena 86

Exemplo: Utilizando GetPenDataArray para Extrair Dados da Pena 86

Exemplo: método SetPenDataArray com valores codificados 87

© 2022 General Electric Company. Todos os direitos reservados. vii


Machine Translated by Google

Alterando a duração do gráfico 88

Mudando os Horários de Início e Fim 88

Zoom 88

Pausar um gráfico em tempo real 89

Aceleradores de teclado 89

Usando a coleção de canetas 89

Usando RefreshChartData 89

Rolar um gráfico aprimorado VBA Exemplo 90

Criando Dínamos Personalizados 91

Criando um novo dínamo personalizado 91

Para construir um objeto Dynamo: 91

Para criar um formulário do Dynamo: 92

Para criar um Master Dynamo e colocá-lo em um conjunto Dynamo: 92

Trabalhando com o iFIX Security 93

Usando a sub-rotina de login 93

Exemplo: Trecho do Script que abre o Aplicativo de Login 93

Obtendo informações do usuário 93

Exemplo: usando o método FixGetUserInfo do objeto do sistema 93

Criando grupos de tags 94

Criando o objeto de arquivo de grupo de tags 94

Recuperando dados do grupo de tags 94

Modificando os dados do grupo de tags 95

Exemplo: Modificando Dados do Grupo de Tags 95

Manipulando grupos de tags 95

Exemplo: manipulação de dados de grupo de tags 96

Índice 97

viii © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

Escrevendo roteiros

O manual Writing Scripts destina-se a integradores de sistemas, OEMs e engenheiros de controle de processo responsáveis por
personalizar sua solução de automação de software iFIX® usando o Visual Basic for Applications.
O manual pressupõe que você esteja familiarizado com o Microsoft Windows e a linguagem de programação Visual Basic.

As primeiras seções do livro fornecem algumas informações básicas sobre o Microsoft Visual Basic for Applications (VBA), mas a
intenção deste manual é descrever a implementação do VBA no iFIX, não explicar como programar no Visual Basic.

Se você é novo na linguagem Visual Basic, pode querer consultar uma das várias fontes de informação sobre os fundamentos da
programação VB, que estão além do escopo deste livro. Se você for um programador VB iniciante, verifique o capítulo Getting
Started with iFIX and VBA para saber onde encontrar informações sobre tópicos gerais de programação VB.

Introdução

Esta introdução contém as seguintes seções:

l Soluções comuns de script

l Código de exemplo

l Dicas de Desenvolvimento

O capítulo Getting Started with iFIX and VBA descreve informações básicas sobre como usar a linguagem de programação
VBA e descreve vários componentes-chave do ambiente VBA.

Começando com a seção Otimizando seu desenvolvimento de projeto VBA, este manual ensina como escrever código VBA para
objetos iFIX. A intenção dessas seções é ensinar como codificar por exemplo, e muitas vezes a melhor explicação do código de
exemplo está nas linhas comentadas (linhas que começam com um apóstrofo — essas linhas são para comentários explicativos
e são ignoradas pelo VBA com piler), então olhe com cuidado. Como cada seção é dedicada a um objeto diferente, você pode
encontrar as informações de que precisa com rapidez e facilidade.

Soluções comuns de script

Vários exemplos de script VBA deste manual foram adicionados com base no feedback que recebemos de usuários do iFIX como
você. Verifique os nomes das seções no Índice para a tarefa que melhor descreve o que você deseja fazer por meio do script.

Se você encontrar um que corresponda ao que está procurando, clique nele para pular para a seção relacionada neste manual.
Se você não encontrar uma correspondência, procure a seção que mais se adequa às suas necessidades, pois há vários
exemplos ou tópicos relacionados em cada seção.

Código de amostra

© 2022 General Electric Company. Todos os direitos reservados. 1


Machine Translated by Google

Uma das melhores maneiras de aprender qualquer linguagem de programação é examinar o código que já existe e tentar decifrar como o código
funciona. Este manual contém uma grande quantidade de código de amostra que você pode recortar e colar diretamente no Editor do Visual Basic.
A seguir está uma lista dos scripts de exemplo incluídos neste manual. Você pode clicar em um título de exemplo para visualizar o código de
exemplo.

Trabalhando com Objetos iFIX


l Exemplo: Construindo uma Conexão de Animação através de um Script

l Exemplo: Script usando o método ParseConnectionSource

l Exemplo: Script usando o método GetConnectionInformation com o método IsConnected

l Exemplo: Script usando o método GetPropertyAttributes

l Exemplo: Script usando o método CanConstruct

l Exemplo: Script usando o método Construct

l Exemplo: Script usando o método ValidateSource

l Exemplo: Usando Comparação de Intervalos

l Exemplo: usando a pesquisa de correspondência exata

l Exemplo: Animando a Rotação de um Objeto

l Exemplo: Girando um Grupo Usando um Script

Manipulando Imagens
l Exemplo: Criação de uma barra de

ferramentas l Exemplo: Utilização de um alias para abrir e fechar exibições

l Exemplo: Utilização da sub-rotina ReplacePicture

Acessando dados em tempo real


l Exemplo: Gravação de grupo

l Exemplo: leitura em grupo

l Exemplo: Grava em Fontes Alternativas

l Exemplo: Utilizando a Propriedade Value do Tag Database

Acessando dados de um banco de dados relacional:


Usando ADO
l Exemplo: Criando um conjunto de registros ADO

l Exemplo: Preenchendo um Flexgrid com dados de um conjunto de registros ADO

l Exemplo: Adicionando um registro a um banco de dados usando um conjunto de registros ADO

l Exemplo: Atualizando um banco de dados usando um conjunto de registros ADO

l Exemplo: Excluir um registro de um banco de dados usando um conjunto de registros ADO

Trabalhando no ambiente de tempo de execução


l Exemplo: Alteração da fonte de dados de uma animação conectada a um objeto l Exemplo: Código do

formulário l Exemplo: Código do

módulo l Exemplo: Código do objeto

iFIX

2 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

Trabalhando com o Agendador

l Exemplo: Verificando o Espaço em Disco e Acionando um Alarme se Muito Baixo

l Exemplo: Registrando Monitoramento de Tempo de Inatividade


Manipulando Gráficos

l Exemplo: Botões Rolar para trás e Rolar para frente

l Exemplo: Criação de botões que rolam para trás e para frente através de dados históricos e conjuntos
Hora atual

l Exemplo: Utilizando GetPenDataArray para Extrair Dados da Pena

l Exemplo: Método SetPenDataArray com valores codificados


Trabalhando com o iFIX Security

l Exemplo: Trecho do Script que abre o Aplicativo de Login l Exemplo: Utilizando o

Método FixGetUserInfo do Objeto Sistema


Criando grupos de tags

l Exemplo: Modificando Dados do Grupo de Tags

l Exemplo: Manipulação de dados de grupo de tags

Usando exemplos no arquivo de ajuda do VBA e no código-fonte

Além disso, o arquivo de ajuda das interfaces de automação do iFIX tem um exemplo para cada método no sistema, e o arquivo de ajuda do VBA
contém uma seção inteira dedicada a nada além de código de amostra.

Você também pode consultar o código-fonte do Visual Basic para todas as barras de ferramentas, especialistas e assistentes do iFIX.

Para exibir o código-fonte do Visual Basic:

1. No iFIX WorkSpace, abra uma nova imagem.

2. No Ribbon vView, na guia Home, no grupo WorkSpace, clique em Settings e, em seguida, clique em Toolbars.

- Ou -

Na exibição Clássica, no menu WorkSpace, clique em Barras de ferramentas.

3. Selecione cada barra de ferramentas na caixa de listagem Barras de ferramentas. Clique no botão Fechar.

4. Na exibição da faixa de opções, na guia Início, no grupo WorkSpace, clique em Editor do Visual Basic.

- Ou -

Na exibição Clássica, no menu WorkSpace, clique em Editor do Visual Basic.

5. No VBE, selecione o comando Project Explorer no menu Exibir.

6. No Project Explorer, clique no sinal de mais (+) ao lado de qualquer um dos projetos disponíveis para mostrar o con
tendas do projeto.

7. Clique duas vezes em um formulário ou módulo dentro do projeto para exibi-lo no VBE. Por exemplo, se você
expanda o projeto Project_Experts, expanda sua pasta Forms e clique duas vezes no formulário frmFill para visualizar o formulário Fill
Expert.

© 2022 General Electric Company. Todos os direitos reservados. 3


Machine Translated by Google

AVISO: Embora você possa consultar o código-fonte dos objetos mencionados acima no iFIX, não modifique
nenhum código ou seu ambiente pode não funcionar conforme o esperado.

Dicas de desenvolvimento

A arquitetura aberta do iFIX fornece uma interface de automação extremamente flexível. Na verdade, você pode aprender
que, em alguns casos, você pode escrever dois ou mais scripts VBA muito diferentes que atingem o mesmo resultado final.
Nos exemplos de código ao longo deste manual, você encontrará dicas, sugestões e truques para ajudá-lo a descobrir as
formas mais eficientes de automatizar o iFIX com VBA.

Introdução ao iFIX e VBA

Visual Basic for Applications, ou VBA, é a linguagem de script padrão incorporada ao iFIX®. O VBA já esteve disponível
apenas em aplicativos do Microsoft Office. No entanto, a Microsoft disponibilizou o VBA por meio de licenciamento, para que
empresas como a GE possam integrar a linguagem diretamente em seus produtos.

Consulte as seções a seguir para obter mais informações sobre como começar a usar iFIX e VBA:

l O que você pode fazer com iFIX e VBA

l Componentes de um projeto VBA l

Componentes do editor VBA l Usando

formulários VBA l Tipos

de arquivo VBA l

Testando seu código l

Salvando seu trabalho l

Configurando opções VBA l

Configurando opções de projeto VBA l

Verificação de tipo de dados e o compilador VBA

O que você pode fazer com iFIX e VBA

O VBA pode ser usado para personalizar e estender a funcionalidade do iFIX. Por exemplo, você pode criar um assistente
personalizado que cria automaticamente uma imagem iFIX com o clique de um botão. Essa funcionalidade permite que um
usuário desenvolva modelos de criação automática de imagens que podem reduzir bastante o tempo e o esforço de
desenvolvimento ao desenvolver aplicativos com um grande número de imagens. Além disso, o VBA permite manipular,
recuperar e modificar dados de aplicativos iFIX. Por exemplo, você pode escrever um script que lê dados de um bloco de banco
de dados e armazena essas informações em um banco de dados Microsoft SQL Server. Você pode manipular os objetos em
uma imagem do iFIX com base nas informações de um documento do Microsoft Word. Ao usar o VBA com o iFIX, você cria a
solução de automação industrial mais poderosa disponível.

4 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

Depois de começar a trabalhar com o modelo de objeto iFIX, você começará a entender o quão poderoso o VBA realmente é. Através
do VBA, você pode:

l Amplie ou personalize a funcionalidade dos aplicativos iFIX.

l Manipule um aplicativo iFIX ou seus dados.

l Crie suas próprias caixas de diálogo personalizadas para trocar dados com os operadores.

l Integre dados de vários aplicativos iFIX.

l Crie assistentes que podem executar várias tarefas com o clique de um botão.
Recursos VBA não suportados no iFIX
l Capacidade de escolher ActiveX Designers como itens de projeto.

l Suplementos de desenvolvedor (suplementos

COM). l Assinaturas digitais para projetos VBA.

l Projetos multiencadeados.

l Senhas de projeto reforçadas.

Componentes de um Projeto VBA

Primeiro, vamos dar uma olhada nos componentes de um projeto VBA:

l Aplicativo de Hospedagem

l Editor do Visual Basic

l Módulos

l Formulários

Aplicativo host

Todos os projetos VBA devem estar associados a um aplicativo; você não pode criar um projeto VBA autônomo.
O aplicativo ao qual o projeto VBA está vinculado é chamado de aplicativo host. No caso do iFIX, o aplicativo host é o iFIX
WorkSpace, e cada projeto VBA é incorporado em um arquivo de imagem iFIX (*.GRF), arquivo de barra de ferramentas (*.TBX),
arquivo de categoria de barra de ferramentas (*.TBC), cronograma (*.EVS), arquivo de configuração do Dynamo (*.FDS) ou
arquivo de usuário (USER.FXG).

Editor do Visual Basic

O Visual Basic Editor, ou VBE, é o ambiente de desenvolvimento que permite escrever e depurar código, desenvolver formulários de
usuário e exibir as propriedades do seu projeto VBA.

Módulos

© 2022 General Electric Company. Todos os direitos reservados. 5


Machine Translated by Google

Se você estiver desenvolvendo grandes projetos VBA, pode fazer sentido separar o código em vários módulos.
Os módulos são blocos independentes de código que executam uma função específica. Por exemplo, se você queria
para escrever um assistente que cria um gráfico em tempo real para um ponto de dados específico, você pode querer dividir o projeto em três
módulos: um módulo para recuperar o valor após solicitar ao operador que especifique um
fonte de dados, um módulo para plotar os dados após solicitar ao operador que especifique um tipo de gráfico e um
módulo para criar o gráfico com base nas especificações do operador.

NOTA: Não inclua módulos em objetos Dynamo, pois eles não são movidos com o objeto Dynamo.

Formulários

Os formulários são caixas de diálogo personalizadas que você cria no VBA para trocar informações com o operador. Exemplos de formulários
são caixas de mensagem, diálogos de entrada e telas de configuração. Formulários são essenciais
em ajudar o aplicativo e o operador a interagir.

Componentes do Editor VBA

Existem várias maneiras de iniciar o VBA a partir do iFIX. Você pode:

l No iFIX WorkSpace, na visualização Ribbon, na guia Tools, clique em Visual Basic Editor.

l Na exibição Clássica, selecione o comando Editor do Visual Basic no menu WorkSpace.

l Na exibição Clássica, clique no botão da barra de ferramentas Editor do Visual Basic na barra de ferramentas padrão.

l Clique com o botão direito do mouse no objeto para o qual deseja escrever um script e selecione Editar script no pop-up
cardápio.

l Clique no botão Editar script ao adicionar um botão a uma barra de ferramentas personalizada por meio da caixa de diálogo Personalizar
barra de ferramentas. Veja as Barras de Ferramentas de Compreensão seção do manual Compreendendo o iFIX para mais
informações sobre como personalizar as barras de ferramentas.

l Clique no botão VB Editor nas caixas de diálogo Add Timer Entry e Add Event Entry ao criar
uma programação do iFIX ou ao usar os Especialistas em eventos ou cronômetros.

Depois de iniciar o VBA, o Editor do Visual Basic é exibido. O VBE consiste em várias ferramentas e janelas diferentes para ajudá-lo a projetar, criar
e gerenciar seus projetos VBA. As ferramentas que você usará com mais frequência são
mostrado na figura a seguir.

6 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

Editor do Microsoft Visual Basic

Explorador de Projetos

O Project Explorer é uma janela especial no VBE que mostra cada um dos elementos do seu projeto VBA.
Os elementos são apresentados em formato de árvore, com cada ramificação exibindo informações relacionadas, como
formulários, módulos de código e elementos do iFIX, como imagens, barras de ferramentas e páginas globais.

O Project Explorer facilita a seleção dos elementos do projeto com os quais você deseja trabalhar. Por exemplo, se
você deseja adicionar um botão a um formulário específico no qual está trabalhando, pode selecionar o formulário no Project
Explorer. Depois de selecionar um elemento do projeto para editar, o editor VBA abre a ferramenta apropriada. Por
exemplo, se você selecionar um formulário, o formulário será exibido na tela com a caixa de ferramentas de formulário
disponível.

Há duas maneiras de selecionar e editar um elemento de projeto exibido no Project Explorer:

l Clique duas vezes no objeto.

l Escolha o objeto, clique com o botão direito do mouse e escolha Exibir objeto ou Exibir código. Somente a escolha
apropriada estará disponível. Por exemplo, View Object não estaria disponível se você escolhesse um módulo
de código.

Para visualizar o Project Explorer, selecione o comando Project Explorer no menu View ou pressione Ctrl+R.

Para saber mais sobre o Project Explorer, consulte os tópicos de Ajuda nas seções Visual Basic User Interface Help e Visual
Basic How-To Topics do arquivo de Ajuda do Visual Basic for Applications ou pesquise as palavras-chave do índice "Project
Explorer".

Janela de Propriedades

© 2022 General Electric Company. Todos os direitos reservados. 7


Machine Translated by Google

A janela Propriedades é usada para revisar e definir propriedades para objetos de projeto. Por exemplo, você pode definir a cor de fundo de uma
imagem iFIX na janela Propriedades ou pode alterar o nome de um ângulo reto dentro dessa imagem.

Janela de Propriedades

Para exibir a janela Propriedades:

Na exibição da faixa de opções, na guia Exibir, no grupo Janela, clique em Janela de propriedades.

- Ou -

Na visualização Clássica, no Menu Exibir, selecione o comando Janela de Propriedades.

- Ou -

Pressione <F4>.

A janela Propriedades exibe as propriedades do objeto atual. Quando você seleciona diferentes objetos em seu projeto VBA, a janela Propriedades
muda para mostrar apenas as propriedades do objeto selecionado. Você pode selecionar o objeto atual para trabalhar na janela Propriedades:

8 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

l Selecionando o objeto na lista suspensa na parte superior da janela Propriedades.

l Selecionando o objeto no Project Explorer e retornando à janela Propriedades.

l Selecionar o objeto (ou controle) dentro de um formulário e retornar à janela Propriedades.

A janela Propriedades consiste em dois painéis: os nomes das propriedades do objeto atual aparecem na
painel esquerdo; os valores dessas propriedades aparecem no painel direito. Para alterar uma propriedade, selecione a propriedade no
painel esquerdo e clique e edite o valor no painel direito. Algumas propriedades têm uma lista predefinida
de valores válidos, que permite escolher em uma lista suspensa. Outras propriedades requerem um valor de Sim
ou Não. Nesse caso, basta clicar duas vezes na coluna Valor para alternar o valor entre Sim e Não.

Para saber mais sobre a Janela de Propriedades, consulte os tópicos de Ajuda nas seções Usuário do Visual Basic
Interface Help e Visual Basic How-To Topics do arquivo Visual Basic for Applications Help, ou procure por
a palavra-chave "windows" do índice.

Janela de código

A janela Código é onde você escreve qualquer código associado ao seu projeto VBA. Você poderia escrever código
que é executado quando o usuário clica em um botão em uma imagem do iFIX, ou pode ser parte de uma biblioteca de procedimentos
que você escreveu para atender todo o seu projeto.

Janela de código

Duas listas suspensas estão localizadas logo abaixo da barra de título. Uma lista suspensa mostra todos os objetos referenciados no
módulo de código, enquanto a outra lista suspensa mostra os procedimentos associados a cada um.
objeto.

Para exibir a janela de código, siga um destes procedimentos:

l Clique com o botão direito do mouse em um objeto no iFIX WorkSpace e selecione Editar script no menu pop-up.

l Clique duas vezes em qualquer elemento de código em seu aplicativo no Project Explorer, como módulos e
módulos de classe.

l Clique duas vezes em qualquer lugar em qualquer formulário em seu projeto VBA ou qualquer controle em um formulário.

l Escolha View Code na janela do VBE. Se você deseja visualizar o código de um elemento de projeto específico, como
uma planilha, certifique-se de selecionar esse elemento primeiro no Project Explorer.

© 2022 General Electric Company. Todos os direitos reservados. 9


Machine Translated by Google

l Escolha o comando Módulo no menu Inserir ou clique com o botão direito do mouse no Project Explorer
e escolha Inserir módulo.

Depois que a janela Código for exibida, você poderá inserir seu código diretamente na janela.

Para saber mais sobre a janela de código, consulte os tópicos da Ajuda nas seções Ajuda da interface do usuário do Visual Basic e
Tópicos de instruções do Visual Basic do arquivo de Ajuda do Visual Basic for Applications ou pesquise a palavra-chave "janela de código"
do índice.

DICA: Lembre-se de que uma ótima maneira de aprender a usar o VBA com o iFIX é visualizar os scripts por trás de todos os botões da barra de
ferramentas do aplicativo. Para visualizar o código por trás desses botões, execute o Editor do Visual Basic e expanda o projeto Toolbar
(ApplicationToolbar) na Project Window.

AVISO: Não atualize esses arquivos. Isso pode fazer com que os botões da barra de ferramentas parem de funcionar corretamente.

Usando formulários VBA

É provável que seu projeto VBA precise de um formulário personalizado. Por exemplo, você pode fornecer ao operador uma escolha de
opções antes que seu programa execute alguma tarefa, como importar dados. Ou talvez você queira fornecer ao operador uma caixa de
diálogo de entrada de dados personalizada.

No VBA, você mesmo constrói esses formulários. Esses formulários são exatamente como as caixas de diálogo que você viu ou usou no
Microsoft Windows, como a caixa de diálogo de logon exibida quando você inicializa. A única diferença é que você pode escolher como essas
caixas de diálogo aparecem, quando aparecem e o que fazem.

Para saber mais sobre os formulários do Visual Basic, consulte os tópicos da Ajuda nas seções Referência de design do Microsoft
Forms, Dicas do desenvolvedor do Microsoft Forms e Referência do modelo de objeto do Microsoft Forms do arquivo de Ajuda do Visual
Basic for Applications ou procure a palavra-chave "formulários" do índice. .

Usando formulários VBA no iFIX

Um conceito que você deve ter em mente ao iniciar formulários do iFIX é a ideia de formulários modais e sem modos . Um formulário é modal
se não permitir que você trabalhe com seu aplicativo host enquanto ele está sendo exibido. Por outro lado, se um formulário não tiver
modo , ele permite que você trabalhe com seu aplicativo host mesmo enquanto ele é exibido.

Se você iniciar um formulário modal a partir de um script VBA dentro do iFIX, os usuários devem responder ao formulário antes de poderem
continuar trabalhando com o ambiente iFIX (que inclui a seleção de menus, barras de ferramentas, objetos em uma imagem e assim por
diante). Nenhum código subseqüente é executado até que o formulário seja oculto ou descarregado. Quando um formulário é sem janela
restrita, todo o código subseqüente é executado à medida que é encontrado.

AVISO: Nunca tente descarregar um formulário de dentro do mesmo formulário ou de qualquer controle dentro do formulário. Em vez disso, chame
o método Hide de dentro do formulário e descarregue-o da rotina principal assim que estiver oculto.

Formulários não modais não aparecem na barra de tarefas e não estão na ordem de tabulação da janela. Para chamar um formulário
sem janela restrita, use o seguinte código:

userForm1.Show vbModeless

NOTA: Você pode perder dados associados a um UserForm sem janela restrita se fizer uma alteração no projeto UserForm que o faça recompilar,
por exemplo, removendo um módulo de código.

10 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

Ao usar um formulário sem janela restrita, se você não quiser permitir que o usuário acesse o WorkSpace, use o
DeActivateWorkspaceUI, que basicamente desativa a interface do usuário do WorkSpace. Para mais informações, consulte o
Tópico do método DeActivateWorkspaceUI no livro eletrônico iFIX Automation Interfaces.

Inserir um objeto Resumo de alarme em um formulário VBA pode causar resultados imprevisíveis ao abrir o
imagem ou alternando ambientes de tempo de execução para configuração ou vice-versa.

Tipos de arquivo VBA

O Editor VBA permite importar e exportar componentes de seus projetos VBA. Isso facilita
compartilhe seu trabalho com outros aplicativos e projetos do Visual Basic.

Se houver um componente de outro projeto VBA que você gostaria de incluir no projeto em que está trabalhando,
esse componente deve primeiro ser exportado do projeto de origem e importado para o seu projeto. Os componentes de um aplicativo
VBA são sempre armazenados separadamente, para que você possa carregar facilmente um componente de um projeto VB. A tabela a
seguir mostra as extensões típicas usadas para componentes VBA, então você saberá
que tipo de arquivo procurar ao importar para o VBA:

Extensão Componente
FRM Forma
CLS Módulo de classe
ABAIXO Módulo de código

Para saber mais sobre como importar e exportar arquivos do Visual Basic, consulte os tópicos da Ajuda na seção
Ajuda da interface do usuário do Visual Basic do arquivo de Ajuda do Visual Basic for Applications ou procure o índice
palavras-chave "importar" e "exportar".

Convenções de Nomenclatura do VBA

Você deve seguir as seguintes convenções de nomenclatura padrão do VBA ao nomear imagens, tabelas, objetos, variáveis, módulos
e procedimentos do iFIX. Você pode encontrar essas informações nos tópicos de Ajuda em
a seção Regras de nomenclatura do Visual Basic do arquivo de ajuda do Visual Basic for Applications:

l Você deve usar uma letra como primeiro caractere.

l Os nomes não podem exceder 255 caracteres.

NOTA: o Visual Basic for Applications não diferencia maiúsculas de minúsculas, mas preserva a capitalização na instrução
onde o nome é declarado.

l Você não deve usar nenhum nome que seja idêntico às funções, instruções e métodos em
Visual Basic porque você pode sombrear as mesmas palavras-chave no idioma.

l Para usar uma função de linguagem intrínseca, declaração ou método que entra em conflito com um
nome, você deve identificá-lo explicitamente.

© 2022 General Electric Company. Todos os direitos reservados. 11


Machine Translated by Google

l Preceda a função intrínseca, declaração ou nome do método com o nome do asso


biblioteca de tipos associados. Por exemplo, se você tiver uma variável chamada Right, você só pode invocar o
Função direita usando VBA.Right.

l Você não pode repetir nomes dentro do mesmo nível de escopo. Por exemplo, você não pode declarar dois
variáveis denominadas nível dentro do mesmo procedimento. No entanto, você pode declarar uma variável privada
nível nomeado e uma variável de nível de procedimento chamada nível dentro do mesmo módulo.

l Você não pode usar espaço, hífen (-), ponto (.), ponto de exclamação (!), ou os caracteres @, &, $, # em
o nome.

NOTA: Se você tiver tags de banco de dados que contenham caracteres VBA inválidos, como hífens, e quiser manipular
essas tags por meio de scripts, poderá usar duas sub-rotinas do iFIX (ReadValue e WriteValue) para fazer isso. Você pode
aprenda mais sobre as sub-rotinas ReadValue e WriteValue na seção Otimizando seu desenvolvimento de projeto VBA,
ou no livro eletrônico iFIX Automation Interfaces.

l Você não deve usar um sublinhado (_) no nome. Isso pode causar problemas com scripts, porque
O VBA usa sublinhados na nomenclatura de scripts associados a objetos.

l Imagens, tabelas, conjuntos do Dynamo, barras de ferramentas e categorias de barras de ferramentas requerem nomes exclusivos para que
o iFIX WorkSpace pode carregá-los simultaneamente. Isso é verdade mesmo que as extensões de nome de arquivo sejam
diferentes para diferentes tipos de documento. Os seguintes cenários ilustram esse ponto:

l Se você tentar abrir uma imagem cujo nome conflita com um documento que já está
aberto, você não será capaz de abrir a imagem. Em vez disso, o seguinte texto aparece:

Outro Cronograma, Imagem, Barra de Ferramentas ou Conjunto de Dínamo com o mesmo nome já está aberto.

l Se você tentar ativar uma barra de ferramentas cujo nome conflita com uma imagem que já está
aberto, o iFIX WorkSpace não habilitará a barra de ferramentas.

l Se você abrir uma imagem com o mesmo nome de uma categoria da barra de ferramentas e clicar em
na guia Buttons na caixa de diálogo Customize Toolbars ou execute o Task Wizard, o iFIX
O WorkSpace não exibirá a categoria da barra de ferramentas.
Para corrigir conflitos de nomenclatura para uma imagem:

1. Feche a imagem.

2. Renomeie a imagem para um nome que não entre em conflito com o outro documento.

3. Feche o conjunto, cronograma, imagem ou barra de ferramentas em conflito do Dynamo.

4. Reinicie o WorkSpace.

5. Abra a imagem renomeada e salve-a.

Evite nomear um objeto, uma imagem e uma sub-rotina global com o mesmo nome, especialmente se você se referir a
o objeto em um script do Visual Basic. Isso garante que o VBA possa distinguir entre seus objetos e seu
sub-rotinas. Caso contrário, você pode receber o seguinte erro ao executar um script:

Procedimento esperado, não variável.


Renomeando objetos VBA por meio de script

Evite renomear objetos VBA em um script VBA. Fazer isso fará com que o código associado a esses objetos
não funcionar. Por exemplo, se um retângulo chamado Rect1 tiver um evento associado chamado Sub Rect1_Click
(), alterar o nome do retângulo para Rect2 fará com que Sub Rect1_Click() não funcione, pois há
não é mais um objeto chamado Rect1.

12 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

O script abaixo solicita que o usuário insira um novo nome para um objeto retângulo quando esse objeto (Rect1) é clicado.
Quando você insere um novo nome e clica em OK, o objeto Rect1 não existe mais e o código se torna órfão e inútil.

Privado Sub Rect1_Click()


Dim strNewName as String
strNewName = InputBox("Digite o novo nome")
Rect1.Name = strNovoNome
End Sub

Testando seu código

Você precisará executar seu projeto várias vezes antes de terminar. Para executar um procedimento, posicione o cursor em
qualquer lugar no procedimento e escolha Run Sub/User Form no menu Run ou pressione F5.

Você também pode exibir o formulário no qual está trabalhando, executar qualquer código que tenha anexado aos procedimentos
de evento no formulário e testar os controles que colocou no formulário. Para executar o formulário, posicione o cursor em
qualquer lugar do formulário e, em seguida, escolha Executar formulário de sub/usuário no menu Executar ou pressione F5.

Para saber mais sobre como executar seu código VBA, consulte os tópicos de Ajuda na seção Tópicos de instruções do Visual
Basic do arquivo de Ajuda do Visual Basic for Applications ou pesquise as palavras-chave do Índice "código em execução" ou
"código em execução".

Salvando seu trabalho

O código, os formulários e os módulos que você cria com o VBA são associados a uma imagem iFIX, barra de ferramentas,
categoria da barra de ferramentas, cronograma, conjunto do Dynamo ou arquivo global do usuário no aplicativo WorkSpace.
Portanto, salvar o trabalho concluído em um projeto VBA ocorre apenas quando você salva esses documentos do iFIX.

Para salvar uma imagem do VBA, escolha o comando Salvar no menu Arquivo. Isso salvará todas as alterações feitas na
imagem, bem como no projeto VBA.

NOTA: Os arquivos de categoria da barra de ferramentas e da barra de ferramentas são salvos automaticamente quando você sai do WorkSpace. Se você
fez alterações no arquivo User Global, o iFIX exibe uma caixa de mensagem que pergunta se você deseja salvar suas alterações.

Configurando opções de VBA

Você pode configurar o Editor VBA com várias opções diferentes. Essas opções são definidas na caixa de diálogo Opções. A caixa
de diálogo Opções é exibida quando você seleciona Opções no menu Ferramenta. Existem opções em quatro páginas com
guias diferentes: Editor, Formato do Editor, Geral e Encaixe. Para escolher um conjunto de opções para trabalhar, clique na guia
apropriada. Depois de fazer todas as alterações necessárias, clique em OK.

Dicas para configurar opções de VBA

Esta seção descreve dois itens ou configurações específicas que recomendamos que você aproveite ao configurar suas opções
de VBA.

© 2022 General Electric Company. Todos os direitos reservados. 13


Machine Translated by Google

Exigir Declaração de Variável

Embora não seja obrigatório, você deve usar a instrução Option Explicit na seção Declarações de um
módulo para exigir declaração de variável. A instrução Option Explicit força você a usar variáveis que
já foram declarados como um determinado tipo. Usar a instrução Option Explicit ajudará você a evitar uma
erro de programação comum e encurtará o tempo de depuração.
Para configurar o VBA para adicionar automaticamente a instrução Option Explicit a um novo projeto:

1. No menu Ferramentas, clique em Opções.

2. Selecione a guia Editor.

3. Marque a caixa de seleção Exigir declaração de variável.

4. Clique em OK para ativar esta nova opção para todos os módulos.

Deste ponto em diante, ao criar um novo módulo, a instrução Option Explicit será adicionada automaticamente. Para saber mais
sobre como definir as opções do Editor VBA, clique no botão Ajuda na caixa de diálogo Opções.
Desmarque a caixa de seleção Compilar sob demanda

A opção Compilar sob demanda, localizada na guia Geral da caixa de diálogo Opções, determina
se um projeto é totalmente compilado antes de começar, ou se o código é compilado conforme necessário, permitindo que o
aplicação para começar mais cedo. Recomendamos que você desmarque esta caixa de seleção para poder depurar mais facilmente
erros no seu código.

AVISO: não ative a opção Notificar antes da perda de estado, localizada na guia Geral da caixa de diálogo Opções.
Isso pode causar um erro ou interrupção no iFIX WorkSpace.

Configurando opções de projeto VBA

Na seção anterior, você examinou as opções disponíveis para configurar o VBA. Nesta seção, você
veja as opções específicas para o seu projeto. Essas opções são definidas na caixa de diálogo Projeto VBA—Propriedades do Projeto.
Você pode exibir esta caixa de diálogo selecionando Propriedades do Projeto VBA no menu Ferramentas ou quando
clique com o botão direito do mouse no projeto no Project Explorer e selecione Propriedades do projeto. As opções aparecem em duas
páginas diferentes. Para escolher um conjunto de opções, clique na guia apropriada. Depois de fazer todas as alterações apropriadas,
clique em OK.

Uma opção que você pode habilitar para o seu projeto é especificar um arquivo de Ajuda que você pode ter criado para o seu
project e o ID de contexto que permite que ele seja executado com seu projeto. Para obter mais informações sobre como criar um
arquivo de ajuda específico para imagens, consulte a seção Criando arquivos de ajuda específicos para imagens. seção do Mastering iFIX
manual.

Para obter mais informações sobre as outras propriedades do projeto disponíveis, consulte as seções Visual Basic
User Interface Help e Visual Basic How-To Topics no arquivo Visual Basic for Applications Help, ou
procure a palavra-chave "propriedades" do índice e selecione "projeto".

Verificação de tipo de dados e o compilador VBA

O compilador VBA 6.0 usa verificação de tipo mais rigorosa do que o compilador VBA 5.0. Você deve usar os tipos de dados exatos que
são definidos na declaração da função ou sub-rotina. A forma como as variáveis são convertidas quando
sendo passado mudou. Se estiver executando um código que atenda às seguintes condições:

14 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

1. Uma sub-rotina ou função possui uma variável que é declarada como tipo Variant. Se você não explicitamente
atribuir um tipo, é Variant.

2. Esta variável é passada para uma segunda sub-rotina ou função.

3. A segunda sub-rotina ou função é configurada para aceitar um valor da primeira sub-rotina ou função,
mas de um tipo diferente de Variant (Inteiro, longo ou objeto, por exemplo).

Você pode obter este erro:

Erro de compilação; Incompatibilidade do tipo de argumento ByRef


Exemplo de erro

O exemplo a seguir mostra duas sub-rotinas: a primeira sub-rotina obtém o objeto de animação downstream de um retângulo,
que está conectado à porcentagem de preenchimento vertical do retângulo. A segunda sub-rotina obtém o tipo de classe do
objeto de animação. Como a segunda sub-rotina é definida como um objeto e a primeira é passada como Variant/
ObjectArrayItem, o compilador VBA 6.0 exibe a incompatibilidade do argumento ByRef
erro.

Subcomando Privado CommandButton1_Click()


Dim sFonte como String
Dim sFullQualSource As String
Dim vSourceObjs como variante
Dim vTolerance como variante
Dim vDeadBand como variante
Dim vUpdateRate como variante

Rect1.GetConnectionInformation 1, "VerticalFillPercentage", sSource, sFullQualSource, _


vSourceObjs, vTolerance, vDeadBand, vUpdateRate _

CheckSourceObject vSourceObjs(0)

End Sub

'exibe o nome da classe do objeto de origem


Public Sub CheckSourceObject(objSrcObj As Object)
MsgBox objSrcObj.ClassName
End Sub

Este cenário é aceitável em um ambiente VBA 5.0, mas um erro de incompatibilidade de argumento ByRef é gerado ao executar
ou compilar no VBA 6.0.

Soluções alternativas

Tanto a rotina de chamada quanto a rotina chamada precisam ser alteradas. Os scripts a seguir são soluções alternativas que
satisfarão o compilador e fornecerão exatamente a mesma funcionalidade.

Solução 1 – Este script altera a rotina chamada e é a correção mais fácil. Referindo-se ao exemplo anterior, se você alterar a
rotina CheckSourceObject para especificar que o argumento é passado por valor, isso passará na verificação do compilador.
Como o parâmetro passado não está sendo modificado, é seguro passar por valor.

'exibe o nome da classe do objeto de origem


Public Sub CheckSourceObject(ByVal objSrcObj As Object)
MsgBox objSrcObj.ClassName
End Sub

© 2022 General Electric Company. Todos os direitos reservados. 15


Machine Translated by Google

Solução alternativa 2 – Este script altera a rotina de chamada para que a coerção seja executada antes da chamada.

Subcomando Privado CommandButton1_Click()


Dim sFonte como String
Dim sFullQualSource As String
Dim vSourceObjs como variante
Dim vTolerance como variante
Dim vDeadBand como variante
Dim vUpdateRate As Variant Dim
objSourceObject As Object
Rect1.GetConnectionInformation 1, "VerticalFillPercentage", sSource, sFullQualSource, _
vSourceObjs, vTolerance, vDeadBand, vUpdateRate _

Defina objSourceObject = vSourceObjs(0)


CheckSourceObject objSourceObject
Defina objSourceObject = Nothing
End Sub

Nesta chamada corrigida, há uma declaração adicional para objSourceObject. A seguinte linha também é adicionada:

Defina objSourceObject = vSourceObjs(0)


Defina objSourceObject = Nothing

Esta linha atribui um Object declarado ao primeiro elemento do array de variantes. Em seguida, passamos o
objSourceObject, que é um Object em vez de Variant/ObjectArrayItem. Isso passa na verificação do compilador.

Otimizando o desenvolvimento do seu projeto VBA

VBA é uma poderosa ferramenta de script integrada ao iFIX. Muitos recursos do iFIX permitem que você use o VBA de forma mais
eficaz. Este capítulo apresenta muitas opções que ajudam você a construir seus projetos com mais facilidade:

l Usando sub-rotinas iFIX e especialistas

l Aceleradores de teclado

l Dicas Gerais de Script iFIX

l Recursos de ajuda de codificação VBA

Usando sub-rotinas iFIX e especialistas

O iFIX inclui várias sub-rotinas que podem ajudar a simplificar os scripts destinados a executar tarefas comuns, como reconhecer
alarmes ou substituir imagens. Como essas sub-rotinas são armazenadas no projeto Fact oryGlobals, elas podem ser acessadas
diretamente pelo Editor do Visual Basic. Para obter mais informações sobre FactoryGlobals, consulte o capítulo Criando scripts
globais deste manual.

Além de fornecer o código necessário para executar a tarefa em mãos, as sub-rotinas oferecem vários extras que você normalmente
teria que codificar, incluindo:

16 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

l Tratamento de erros genéricos.

l Postagem de mensagens do operador no sistema de alarme.

l Conformidade com as convenções de nomenclatura do VBA.

Se você estiver usando nomes de tags que contenham caracteres especiais, este é um caso perfeito para usar as sub-rotinas globais
ReadValue e WriteValue para acessar suas tags no VBA.

Por exemplo, suponha que você tenha a seguinte tag:

Fix32.SCADA.SORTER|SIZER|BLOCK10|PT.F_CV

No VBA, você pode ler esta tag com a seguinte sintaxe:

Sub Texto Privado1_Click()


Dim x As Variant x =
ReadValue("Fix32.SCADA.SORTER|SIZER|BLOCK10|PT.F_CV")
Text1.Legenda = x
End Sub

Depois que o valor é armazenado como uma variante (x), você pode usá-lo em expressões.

Envio de mensagens do operador para áreas de alarme

Em alguns casos, você pode precisar lidar com o envio de mensagens do operador para áreas de alarme em seus próprios scripts.
Por exemplo, uma sub-rotina pode não existir para a tarefa exata que você deseja executar. Veja a seguir um exemplo de caso
específico envolvendo a sub-rotina WriteValue.

Conforme declarado na seção anterior, as sub-rotinas lidam com a postagem de mensagens do operador para áreas de alarme para
você. Portanto, o seguinte roteiro:

Valor de gravação "1", "amostra"

enviará esta mensagem:

Fix32.ThisNode.sample.f_cv foi definido como 1.

No entanto, este script não gerará uma mensagem do operador:

Fix32.ThisNode.sample.f_cv=1

Uma sub-rotina separada, SendOperatorMessage, é fornecida para essa finalidade. Basta adicionar uma chamada ao
SendOperatorMessage para gerar a mensagem desejada.

WriteValue, ReadValue, SendOperatorMessage e todas as outras sub-rotinas do iFIX são descritas com mais detalhes na seção
Subroutine Summary do livro eletrônico iFIX Automation Interfaces.

O código dentro das sub-rotinas globais oferece uma riqueza de informações para o desenvolvedor que está aprendendo a automatizar
o iFIX com VBA.

As sub-rotinas globais podem ser encontradas no projeto VBA FactoryGlobals. O arquivo FactoryGlobals é protegido contra gravação
para manter a integridade desses scripts. Para sua conveniência, você pode visualizar o conteúdo do módulo de sub-rotinas globais
clicando no seguinte link: globalsubroutines.txt. Este arquivo contém todo o código exportado dessas sub-rotinas em um arquivo de texto.

O iFIX também fornece vários especialistas para ajudá-lo a executar as funcionalidades mais comuns. Assim como as sub-rotinas
oferecem ajuda ao programador VBA experiente, os especialistas podem ajudar os desenvolvedores que desejam alcançar

© 2022 General Electric Company. Todos os direitos reservados. 17


Machine Translated by Google

resultados semelhantes sem ter que escrever nenhum código VBA. Esses Experts, que se parecem com caixas de diálogo
padrão, na verdade geram código VBA para você, com base em como você configurou as opções no Expert.
Você pode aprender mais sobre Especialistas no manual Criando Imagens.

Usando o Assistente de Script de Comando Múltiplo

O Multiple Command Script Wizard é uma interface gráfica que usa especialistas de comando para montar um ou mais
comandos de script VBA em uma sequência. O assistente pode ser usado para gerar uma sequência de comando com script
que é acionada por um clique do mouse em um objeto, uma entrada do Agendador ou uma macro de tecla.

Você pode usar o assistente para reorganizar ou excluir segmentos de script de comando discretos na sequência. Você
também pode usar o Editor do Visual Basic para editar manualmente uma sequência de script criada com o assistente, embora
não possa usar o assistente para manipular seções editadas manualmente do script VBA.

Veja a seguir um exemplo de script VBA gerado pelo Multiple Command Script Wizard:

Privado Sub Rect2_Click()

'***** Ferramenta de criação de scripts ***** 'Os


comentários abaixo foram adicionados automaticamente.
'Qualquer alteração pode causar efeitos adversos na funcionalidade' dos especialistas em
criação de scripts.
'WizardLast=Wizard2
'WizardEditing=Wizard0
'WizardName=MultipleCommands

'Wizard1=AcknowledgeAlarm
'Property1=Fix32.THISNODE.AI0.F_CV
'Property2=False
'PropertyDescription=AcknowledgeAnAlarm: Property1=Tag do banco de dados, Property2=Selecione o Tag no modo Run AcknowledgeAnAlarm
"Fix32.THISNODE.AI0.F_CV"
'WizardEnd

'Wizard2=Sinal de Alarme
'Property1=optExpertTypeSilence
'PropertyDescription=AlarmHornSilence: Property1=Tipo
Alarme Buzina Silêncio
'WizardEnd

End Sub

NOTAS:

l Embora o propósito do Multiple Command Script Wizard seja automatizar totalmente o script de comando VBA pro
Assim, você pode editar manualmente os scripts gerados pelo assistente com o VB Editor. Você pode adicionar ou editar scripts VBA em
qualquer lugar antes da linha de cabeçalho Scripts Authoring Tool (***** Scripts Authoring Tool *****) ou diretamente entre um "WizardEnd"
e uma instrução "Wizard[x]=". Não edite nenhuma das áreas comentadas no script gerado pelo assistente. Se o Multiple Command Script
Wizard detectar um script VBA personalizado incorretamente, você poderá encontrar
um erro.

l O Multiple Command Script Wizard não verifica a sequência de comandos para garantir que os comandos ocorram
uma ordem lógica.

Para obter mais informações sobre o Multiple Command Script Wizard, consulte a seção Criando imagens ebook.

Aceleradores de teclado

18 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

Você pode usar aceleradores de teclado, sequências de teclas que permitem executar uma função, para disparar scripts
usando os eventos KeyUp ou KeyDown. No entanto, os aceleradores de teclado integrados do WorkSpace têm precedência sobre qualquer
evento KeyUp ou KeyDown na imagem ou na área do usuário. Portanto, você deve evitar
usando aceleradores de teclado que entram em conflito com aqueles reservados para uso interno. A seguir
A tabela lista todos os aceleradores reservados nos ambientes de tempo de execução e configuração.

Funciona
em
Aceleração do teclado Funciona no modo
Propósito Tempo
derivar figura Con
de execução

Modo
F1 Chama a Ajuda. Não Sim

F10, Ctrl + F10, Alt Ativa a barra de menus do WorkSpace. Sim Sim
(sozinho)
Ctrl + F4 Fecha documento. Sim Sim
Ctrl + W Alterna entre configuração ou tempo de execução Sim Sim
ambiente.
Ctrl + O Ativa a caixa de diálogo Abrir arquivo. Sim Sim
Ctrl + P Ativa a caixa de diálogo Imprimir arquivo. Sim Sim
Ctrl + Esc Ativa o menu Iniciar do Windows (a menos que seja Sim Sim

desativado pela segurança).


Ctrl + Quebrar, Ctrl + Interrompe a execução do script. Sim Não

Alt + Pausa

Ctrl + Alt + Esc, Ctrl A janela do WorkSpace fica inativa (a menos que Sim Sim
+ Alt + Shift + Esc desativar pela segurança).
Ctrl + Alt + Del Abre a caixa de diálogo Login do Windows (ou Segurança) Sim Sim

caixa, a menos que desabilitado pela segurança.


Todas as combinações Ativa o menu WorkSpace. Sim Sim
de teclas Alt

Shift + combinações de Entrada de dados alfanuméricos (pode disparar quando Sim Sim
letras digitando uma letra maiúscula).
Ctrl + A Seleciona tudo Não Sim
Ctrl + C cópias Não Sim
Ctrl + D duplicados Não Sim
Ctrl + F Encontra e substitui Não Sim
Ctrl + O Abre o documento Sim Sim
Ctrl + P Imprime documento Sim Sim
Ctrl + S Salva documento Não Sim
Ctrl + V Pastas da área de transferência Não Sim
Ctrl + Z Desfaz a última ação Não Sim

Dicas Gerais de Script iFIX

Esta seção lista algumas dicas a serem lembradas ao escrever scripts VBA no iFIX quando:

l Criando um iFIX Shape com um script VBA

l Usando coleções iFIX

© 2022 General Electric Company. Todos os direitos reservados. 19


Machine Translated by Google

l Conectando objetos de animação a fontes de dados

l Reutilizando Scripts

l Código recortando e colando

l Referências VBA

l Rastreamento de Erros em Subrotinas

l Filtrando páginas globais

Criando um iFIX Shape com um script VBA

Use o seguinte script para criar uma forma por meio de um script VBA:

Imagem escura como objeto


Dim Forma como Objeto

Definir Pic = Application.ActiveDocument.Page


Shape.HorizontalPosition = 10
Shape.VerticalPosition = 10 Shape.Width =
30 Shape.Height = 30
Shape.ForegroundColor =
RGB( 255, 0, 0 )

O método BuildObject cria o objeto. Depois que o objeto é criado, você pode executar uma destas opções:

l Defina as propriedades do objeto por meio do código VBA.

l Chame o método CreateWithMouse (como no exemplo acima) para alterar o cursor do mouse para o cursor de desenho
e, em seguida, configure as propriedades do objeto usando a interface de usuário iFIX tradicional.

Usando coleções iFIX

Use um BaseCount de 1 ao usar coleções iFIX como SelectedShapes, Procedures, ContainedSelections,


ContainedObjects e Documents. Consulte o arquivo de Ajuda do VBA para obter mais informações sobre coleções.

Conectando objetos de animação a fontes de dados

Para conectar um objeto de animação e uma fonte de dados, use o método SetSource para definir a propriedade source
do objeto Animation:

AnimationObj.SetSource "FIX32.NODE.TAG.FIELD", False, ExpressionEditor1.RefreshRate,


_
ExpressionEditor1.DeadBand, ExpressionEditor1.Tolerance _

20 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

O método SetSource permite que você defina a taxa de atualização, banda morta e tolerância da fonte de dados. O
segundo parâmetro permite definir um objeto indefinido como fonte de dados. (Verdadeiro indica uma condição UseAnyway.)

Reutilizando Scripts

Você pode desenvolver scripts diretamente no projeto VBA principal; no entanto, essa abordagem torna a reutilização
dos scripts mais difícil. Em vez disso, você deve armazenar sub-rotinas em um módulo separado e, em seguida, chamar essas
sub-rotinas do projeto principal quando quiser reutilizar os scripts. Isso permite que você exporte e depois importe os scripts
para um novo projeto com modificações mínimas e também fornece um design baseado em componentes mais modular.

Cortando e colando código

Você pode recortar (ou copiar) e colar um objeto de um projeto para outro arrastando e soltando esse objeto. Embora
esta operação copie diretamente o código VB dentro do objeto para o novo projeto, ela não copia automaticamente as
entradas do evento (um evento Click, por exemplo). Certifique-se de copiar o conteúdo da entrada do evento em uma sub-
rotina (selecionando Editar Script no menu pop-up do objeto) antes de colar o código no novo projeto.

Referências VBA

O VBA permite que você adicione uma biblioteca de objetos ou uma referência de biblioteca de tipos ao seu projeto, o que
torna os objetos de outro aplicativo disponíveis em seu código. Essas adições ao seu projeto VBA são chamadas de referências.
Você pode exibir, adicionar e excluir referências selecionando o comando References no menu Tools do Visual Basic Editor
(VBE).

Sempre que você adiciona um controle a uma imagem, a biblioteca de tipos do controle é referenciada pela imagem no
VBA. Quando você exclui um controle de uma imagem, a referência ao controle é automaticamente removida para aumentar
o desempenho. No entanto, você nunca deve remover manualmente as referências a "Project_Fact oryGlobals" ou
"Project_User".

Sempre que você fizer referência a objetos, controles ou mecanismos no VBA, siga as diretrizes nas seções a seguir. Para
saber mais sobre referências no VBA, consulte o arquivo de Ajuda do VBA.

Excluindo objetos referenciados por nome em um script

Qualquer objeto referenciado por nome em um script não pode ser excluído. Por exemplo, no exemplo de script a seguir, o
código em Rect2_Click será executado, mas a caneta não será excluída:

Rect1_Click()
Pen1.Source = "Fix32.ThisNode.AI_30.F_CV"
End Sub

Rect2_Click()
Chart1.DeletePen 1
End Sub

Se você quisesse acessar o objeto neste exemplo sem referenciá-lo pelo nome, você poderia usar o seguinte código em
Rect1_Click ():

Rect1_Click()

© 2022 General Electric Company. Todos os direitos reservados. 21


Machine Translated by Google

Dim o como objeto


definir o = Chart1.Pens.Item(1)
o.Source = "Fix32.ThisNode.AI_30.F_CV"
End Sub

Usando tipos de objetos excluídos em scripts

Quando um objeto (2Dshape, objeto FixDynamics, controle ActiveX) é excluído de uma imagem e nenhum objeto de
esse tipo for deixado na imagem, a referência à biblioteca de tipos desse objeto no projeto VBA será removida.
Para continuar a usar o tipo deste objeto em scripts, você deve adicionar manualmente uma referência à biblioteca de tipos em
o VBE selecionando Referências no menu Ferramentas e selecionando a biblioteca de tipos.
Arrastar e soltar objetos do Dynamo ou botões da barra de ferramentas

Você deve estar ciente do seguinte comportamento ao arrastar e soltar um objeto Dynamo em uma imagem, cortar e colar um
objeto Dynamo ou arrastar e soltar um botão da barra de ferramentas de uma categoria em
uma barra de ferramentas:

l O VBA copia todos os formulários, scripts, eventos e subformulários associados ao botão da barra de ferramentas ou
Objeto Dínamo.

l O VBA não copia nenhum módulo VBA ou módulo de classe associado ao botão da barra de ferramentas ou
Objeto Dínamo. O código que você colocar nesses módulos não será executado se você arrastar o objeto Dynamo ou
o botão da barra de ferramentas para outra imagem ou barra de ferramentas.

l O VBA não copia referências a outros objetos, como controles ou DLLs que você cria para botões da barra de ferramentas
ou objetos do Dynamo. Por exemplo, se você incluir um OCX de terceiros como um controle em um
formulário para um botão da barra de ferramentas, o VBA não copia a referência quando você arrasta o botão da barra de ferramentas para um
barra de ferramentas. O script não será executado até que você abra o Editor do Visual Basic e crie uma referência ao
OCX para o projeto da barra de ferramentas.

Rastreamento de Erros em Subrotinas

Cada sub-rotina global inclui um parâmetro opcional chamado intErrorMode. O parâmetro intErrorMode permite aos usuários
interceptar erros e enviá-los aos Serviços de Alarme. Existem três opções de
intErrorMode.

Digite isso
Para...
opção... 0
Use o tratamento de erro padrão. Permite que as sub-rotinas forneçam as mensagens de erro. Se
nenhuma entrada é feita para o parâmetro intErrorMode, o padrão é usado.
1 Permita que o usuário manipule as mensagens de erro. Erros nas sub-rotinas são passados
de volta à rotina de chamada para atendimento.
2 Erros de gravação para todos os serviços de alarme. Nenhuma mensagem de erro é exibida. Em vez disso, os erros
são gravados em todos os Serviços de alarme iFIX, incluindo a janela Histórico de alarmes.

Por exemplo, se você usar o parâmetro intErrorMode com a sub-rotina OpenDigitalPoint, o comando
pareceria:

OpenDigitalPoint [DigitalPoint], [intErrorMode]

22 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

Exemplos

Para a sub-rotina OpenPicture, você obtém a mensagem de erro padrão se inserir 0 para intErrorMode,
como mostrado no exemplo a seguir:

OpenPicture "BadPic", , , , 0

Quando você usa 0 para o intErrorMode, se você tentar abrir uma imagem que não existe, uma caixa de mensagem
aparece cujo título é o nome da foto que fez a chamada errada e cujo conteúdo é o
número do erro e descrição do erro.

Se você inserir um 1 para intErrorMode, o erro será gerado para você manipular:

OpenPicture "BadPic", , , , 1

Seu código de tratamento de erros teria que se parecer com isto:

Em caso de erro Ir para Errorhandler

OpenPicture "BadPic", , , , 1
End Sub
Manipulador de erros:

Msgbox "minha mensagem de erro" + Chr(13) + Cstr(Err.Number) + Chr(13) + Err.Description, , Err.Source

Se você inserir um 2 para intErrorMode, o erro é enviado para todos os Serviços de Alarme, incluindo a janela Histórico de
Alarmes usando o método SendOperatorMessage:

OpenPicture "BadPic", , , , 2

Ao usar 2 para intErrorMode, você fornece rastreamento de erro silencioso.

Filtrando páginas globais

Plug and Solve® e especialistas globais podem afetar os scripts existentes que percorrem a coleção de documentos.
Se você tiver scripts que percorrem a coleção de documentos e deseja filtrar todas as páginas globais
para examinar apenas seus documentos, consulte a propriedade Document.Type usando o seguinte código de amostra:

Se docobj.Type = "FixGlobalsServer.FixGlobalsServer.1" então


'esta é uma página global

Recursos de ajuda de codificação VBA

O editor VBA inclui vários recursos extremamente úteis para ajudá-lo a escrever código com precisão e
rapidamente. Esses recursos tentam antecipar o que você está escrevendo no código e solicitam tipos de dados possíveis,
modelos de procedimento integrados, funções de membro e muito mais, conforme você digita.

O Visual Basic facilita a escrita de código, com recursos que podem preencher automaticamente instruções, propriedades,
e argumentos para você. À medida que você insere o código, o editor exibe listas de opções, declarações ou
protótipos de função, ou valores. As opções para habilitar ou desabilitar essas e outras configurações de código estão disponíveis
na guia Editor da caixa de diálogo Opções, que você pode acessar selecionando Opções nas Ferramentas
cardápio.

Consulte as seções a seguir para obter mais informações sobre esses recursos de ajuda de codificação VBA:

© 2022 General Electric Company. Todos os direitos reservados. 23


Machine Translated by Google

l Membros da Lista Automática

l Informações Rápidas Automáticas

l Ajuda sensível ao contexto

Membros da Lista Automática

Quando você insere o nome de um controle em seu código, o recurso Auto List Members apresenta uma lista suspensa de propriedades disponíveis
para esse controle. Digite as primeiras letras do nome da propriedade e o nome será selecionado na lista; a tecla <TAB> completará a digitação
para você. Essa opção também é útil quando você não tem certeza de quais propriedades estão disponíveis para um determinado controle.

Recurso de lista automática de membros

Informações Rápidas Automáticas

O recurso Auto Quick Info exibe a sintaxe para declarações e funções. Quando você insere o nome de uma instrução ou função válida do Visual
Basic, a sintaxe é mostrada imediatamente abaixo da linha atual, com o primeiro argumento em negrito. Depois de inserir o valor do primeiro argumento,
o segundo argumento aparece em negrito.

24 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

Recurso de informações rápidas automáticas

Ajuda sensível ao contexto

Muitas partes do Visual Basic são sensíveis ao contexto, o que significa que você pode obter ajuda sobre essas partes
diretamente sem ter que passar pelo menu Ajuda. Por exemplo, para obter ajuda sobre qualquer objeto, método, propriedade
ou evento iFIX, ou qualquer palavra-chave VBA, clique nessa palavra e pressione F1.

Trabalhando com Objetos iFIX

A integração do VBA no iFIX oferece controle e flexibilidade adicionais para desenvolver, manipular e animar objetos e gráficos
no iFIX WorkSpace. Isso é importante, pois os objetos constituem uma grande parte do seu aplicativo.

Este capítulo fornece alguns exemplos específicos de como você pode usar scripts VBA para aprimorar o desempenho
de objetos iFIX em seu aplicativo. Ele também fornece dicas úteis para trabalhar com objetos e suas características.

Consulte as seções a seguir para obter mais informações sobre como trabalhar com objetos iFIX:

l Limite de contagem de objetos VBA

l Disponibilidade de Objetos no Editor VB

l Compreendendo a Hierarquia de Objetos do iFIX

l Conectando objetos a fontes de dados para criar animações

l Fazendo conexões

l Propriedades e métodos de animação

l Exemplo de Conexão: Animando a Rotação de um Retângulo

l Rodar um Grupo

Limite de Contagem de Objeto VBA

© 2022 General Electric Company. Todos os direitos reservados. 25


Machine Translated by Google

Atualmente, a Microsoft limita a quantidade de controles VBA a 1207 por projeto. Uma imagem iFIX é considerada um
Projeto VB. A versão atual do iFIX fornece um aviso VBA Object Count que o notifica quando você
estão se aproximando do nível máximo.

Depois de criar seu 1147º controle, o iFIX fornece uma caixa de diálogo notificando que você está se aproximando do
máximo permitido e deve começar a remover controles desnecessários. Se você continuar a criar scripts
sem removê-los, você continuará recebendo o aviso. Se você tentar criar seu 1208º controle,
O iFIX avisa que o script não pode ser criado. Para continuar adicionando scripts, você deve remover alguns
Controles VBA.

Disponibilidade de Objetos no Editor VB

As etapas a seguir descrevem como disponibilizar um único objeto no Editor VB.

Para disponibilizar um único objeto no Editor VB:

1. Selecione o objeto na imagem.

2. Selecione Editar script no menu do botão direito.

Para disponibilizar um grupo de objetos no Editor VB:

1. Selecione o grupo de objetos na imagem.

2. Selecione Ativar scripts no menu do botão direito.

NOTA: Quando você seleciona Ativar Scripts, o iFIX adiciona os objetos ao projeto VBA, mas não inicia o Editor VB.
Objetos visíveis, como retângulos e ovais, não estão disponíveis automaticamente no Editor.

Para fins de otimização, se você optar por não vincular um script ao objeto, ele não permanecerá disponível
depois de fechar a imagem. Você terá que selecioná-lo novamente na imagem e adicionar os objetos ao VBE se
você deseja usá-los em um script.

Você pode, no entanto, referenciar objetos que não estão disponíveis no VBE. Por exemplo, você pode
escreva um script vinculado a Rect1 que faça referência a Oval1, conforme mostrado no exemplo a seguir:

Oval1.Visible = Falso

O código acima é aceitável mesmo quando Oval1 não está disponível para o VBE. A única diferença no VBE
entre objetos que estão disponíveis e objetos que não estão disponíveis é que a lista de propriedades e
os métodos disponíveis para o objeto aparecem quando você digita o ponto (.) após os objetos disponíveis. Ao fazer referência
a objetos, os objetos serão adicionados ao projeto quando a imagem for fechada ou salva.

Os seguintes objetos estão sempre disponíveis no VBE:

l Objetos do temporizador

l Objetos de evento

l Botões

l Dínamos

l Controles ActiveX

l Variáveis

l Quaisquer objetos que foram adicionados à página Global

26 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

Compreendendo a Hierarquia de Objetos do iFIX

Existe uma hierarquia geral de objetos no iFIX. Os objetos individuais, bem como todas as suas propriedades, métodos e
eventos relacionados, são descritos com muito mais detalhes no Tópico de ajuda Resumo do objeto em
o Livro Eletrônico de Interfaces de Automação iFIX.

As camadas superiores na hierarquia de objetos são os objetos Aplicativo e Sistema. O objeto Aplicativo
representa o aplicativo iFIX WorkSpace. O objeto Sistema está no mesmo nível que o Aplicativo
objeto e inclui informações do sistema, data, hora e caminhos.

O próximo nível abaixo do objeto Aplicativo é o objeto de documentos, que é uma coleção de documentos ativos no
WorkSpace, como imagens e tabelas.

O terceiro nível na hierarquia de objetos é o Objeto de página, que pode ser uma imagem, um conjunto de dínamos ou um
objeto agendador. Se o objeto da página for uma imagem, ela pode conter linhas, retângulos, ovais ou outros objetos gráficos. Se
o objeto de página é um objeto Scheduler, ele pode conter objetos de timer ou evento.

Os objetos de animação são exclusivos das imagens do iFIX e não se aplicam a outros objetos de documento.

Navegador de Objetos VBA

Além do Livro Eletrônico de Interfaces de Automação iFIX, outra ótima ferramenta para visualização do iFIX
hierarquia de objetos é o Navegador de Objetos VBA. O Object Browser exibe as classes, propriedades, métodos, eventos e
constantes disponíveis nas bibliotecas de objetos e nos procedimentos do seu projeto. Você pode usar
para encontrar e usar objetos que você cria, bem como todos os objetos dentro do iFIX. Para iniciar o Pesquisador de Objetos no
VBE, pressione F2 ou selecione o comando Object Browser no menu View.

© 2022 General Electric Company. Todos os direitos reservados. 27


Machine Translated by Google

Navegador de objetos

Pressione F1 para exibir o tópico de Ajuda associado no Livro Eletrônico iFIX Automation Interfaces enquanto posicionado em
qualquer objeto, propriedade, método ou evento iFIX.

Conectando objetos a fontes de dados para criar animações

Para animar a propriedade de um objeto, você deve conectar essa propriedade à fonte de dados que está fornecendo os
dados. Por exemplo, se você deseja que um tanque encha com base na saída de um PLC conectado ao tanque, conecte a
propriedade de preenchimento vertical do cilindro do tanque com o ponto do banco de dados que contém o valor em tempo
real do endereço PLC correto .

A transformação de dados entre objetos ocorre por meio de objetos de animação. Existem três tipos de objetos de animação:

Linear – Converte dados de um intervalo de valores para outro, realizando assim o condicionamento do sinal. Por exemplo,
se uma fonte de dados tiver limites de EGU de 0 a 65535 e a porcentagem de enchimento de um tanque tiver um intervalo
de 0 a 100, o objeto Linear transformará a faixa da fonte de dados na faixa de porcentagem de enchimento do tanque.
Consulte o Compreendendo o Condicionamento de Sinal seção do manual Building a SCADA System para obter mais
detalhes sobre como o objeto Linear funciona.

28 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

Pesquisa – usa uma estrutura de tabela para mapear um intervalo de valores ou valores exatos de uma fonte de dados para
um único valor da propriedade do objeto conectado. Por exemplo, se uma fonte de dados tiver vários valores de alarme,
o objeto Lookup mapeia cada valor de alarme para a cor de um retângulo. Você também pode configurar um objeto
Lookup para dividir um intervalo de valores em níveis ou linhas e mapear esses níveis para a cor de um retângulo. O
objeto Lookup também possui uma propriedade Toggle que pode ser usada para cores piscantes.

Formato – converte os dados de origem em uma string. Quando você configura uma fonte de dados para um link de
dados, por exemplo, na verdade você cria um objeto Format que transforma a fonte de dados em uma string.

Você verá exemplos desses objetos nos exemplos de script desta seção. Para obter mais informações sobre objetos de
animação, incluindo conexões objeto a objeto, consulte a seção Criando imagens manual.
Para obter uma explicação detalhada de todas as propriedades e métodos de animação para cada um dos tipos de objeto de
animação, consulte a seção Propriedades e métodos de animação .

O Visual Basic tem muitos métodos que você pode usar para fazer conexões com fontes de dados. Esses vários métodos
são detalhados nas seções a seguir.

Fazendo conexões

Um elemento muito importante para conectar objetos a fontes de dados é a maneira como eles são conectados.
Você pode se conectar à fonte de dados:

l Da propriedade de um objeto diretamente para a fonte de dados.

l Da propriedade de um objeto para um objeto de animação e, em seguida, do objeto de animação para os dados
fonte.

Consulte as seções a seguir para obter mais informações sobre como fazer conexões:

l Conexão direta a uma fonte de dados

l Fazendo conexões através de animações

l Conectando ou desconectando a propriedade de um objeto a uma fonte de dados

l Recuperando informações de conexão da fonte de dados de uma propriedade

l Determinar se a propriedade de um objeto está sendo usada como fonte de dados

l Recuperando informações gerais de conexão

Conectando-se diretamente a uma fonte de dados

Há momentos em que você pode querer estabelecer uma conexão direta com uma fonte de dados, como quando deseja
conectar objetos iFIX a alguns controles de terceiros. Para obter mais informações, consulte a seção Criando imagens
manual.

A figura a seguir ilustra o conceito de uma conexão direta.

© 2022 General Electric Company. Todos os direitos reservados. 29


Machine Translated by Google

Exemplo de conexão direta

Você pode formar uma conexão direta usando a caixa de diálogo Animações ou escrevendo um script. Ambos os métodos são descritos
abaixo.

NOTA: Você não pode executar Localizar e Substituir em um objeto quando esse objeto tem uma conexão direta com outro objeto.
Para localizar um objeto em uma conexão objeto a objeto, use o tipo de pesquisa One Tag na Ferramenta de Referência Cruzada.
Para obter mais informações, consulte a seção Searching for One Tag do manual Mastering iFIX.
Para fazer uma conexão direta usando a caixa de diálogo Animações:

1. Abra a caixa de diálogo Animação do objeto.

2. Clique na guia Tamanho e, em seguida, clique na caixa de seleção de altura.

3. Insira uma fonte de dados para animar a propriedade do objeto.

4. Na área Conversão de dados, selecione Objeto.


Fazendo uma conexão direta escrevendo um script

Para fazer uma conexão direta usando um script, você precisa chamar o método Connect. O procedimento a seguir mostra como fazer uma
animação direta de um objeto para uma fonte de dados no evento Click de um botão da barra de ferramentas no ambiente de configuração.

NOTA: Para fontes de dados OPC, você precisa remover qualquer caractere, como aspas simples, que não faça parte da sintaxe
válida do endereço do servidor. Por exemplo: "ServerName.'Device:MyAddress'" deve mudar para "Server
Name.Device:MyAddress" depois que você remover as aspas simples.
Para fazer uma conexão de direção usando um script:

1. Insira um retângulo em uma imagem e nomeie-o MyRect. Clique com o botão direito do mouse no retângulo e selecione Editar
Script para tornar MyRect disponível para o Editor do Visual Basic.

2. Crie uma nova barra de ferramentas e adicione um botão chamado DirectConnect. Veja as Barras de Ferramentas de Compreensão
seção do manual Compreendendo o iFIX para obter mais informações sobre como criar barras de ferramentas e adicionar botões
da barra de ferramentas.

3. Adicione o seguinte código ao evento Click do botão da barra de ferramentas:

Subprivado DirectConnect_Click( )

30 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

Dim lStatus as Long


MyRect.Connect("Horizontal Position", "FIX32.NODE.AI1.F_CV",
_
lStatus)
End Sub

4. Feche o Editor do Visual Basic.

5. Clique no botão DirectConnect e mude para o ambiente de tempo de execução. A posição horizontal de
MyRect agora é controlado pela tag FIX32.NODE.AI1.F_CV.

Fazendo conexões através de animações

Normalmente, você fará conexões usando objetos Animation. Os objetos de animação realizam a conversão de dados entre
a fonte de dados e o objeto conectado. A figura abaixo ilustra o conceito de conexões de Animação.

Exemplo de Conexões de Animação

Para fazer uma conexão de animação linear usando a caixa de diálogo Animações:

1. Clique duas vezes em um retângulo. A caixa de diálogo Animações é exibida.

2. Selecione a guia Tamanho e clique no botão Altura. A caixa de diálogo Animações é expandida.

3. Insira uma fonte de dados para animar a altura do retângulo.

4. Na caixa de listagem Conversão de dados, selecione Intervalo. Isso permitirá que a altura do retângulo mude dentro de
um intervalo específico com base no valor da fonte de dados.

5. Clique em OK. Observe que o retângulo agora tem um objeto de animação linear associado a ele que trans
forma o valor da fonte de dados para dimensionar a altura do retângulo.

Fazendo uma conexão de animação por meio de um script

O script a seguir usa o objeto Linear Animation para formar a conexão da propriedade Vertical Position de um retângulo com uma
fonte de dados. Esse script é inserido no evento Click de uma barra de ferramentas chamada btnDir ectConn. Neste exemplo,
Animações é o nome da imagem. Para obter mais informações sobre os métodos e propriedades usados no script, ou seja,
SetSource, Connect, DoesPropertyHaveTargets e GetProp ertyTargets, consulte o livro eletrônico iFIX Automation Interfaces.

Exemplo: Construindo uma Conexão de Animação através de um Script

Private Sub btnDirectConn_Click()


Dim iRect As Object
Dim iOval como objeto
Dim LinearObject As Object
Dim strNome completo como string
Dim blnHasTargets As Boolean
Dim lngStatus tão longo
Dim lngNumTargets As Long
Dim lngIndex tão longo

© 2022 General Electric Company. Todos os direitos reservados. 31


Machine Translated by Google

Dim strPropertyName As String


Dim strSource como String
Dim vtTargets()

'Cria um retângulo e um oval Set iRect =


Animations.BuildObject("rect")
Set iOval = Animations.BuildObject("oval")

'Definir alguns atributos de posicionamento e tamanho no 'retângulo


iRect.HorizontalPosition
= 80 iRect.VerticalPosition = 45

iRect.Height = 5 iRect.Width
= 10 iOval.HorizontalPosition
= 60 iOval.VerticalPosition = 35

iOval.Height = 5 iOval.Width
= 10 iRect.Commit
iOval.Commit

'Cria um objeto de animação Linear para o retângulo Set LinearObject =


iRect.BuildObject("linear")

'Define a origem do objeto de animação Linear LinearObject.SetSource "AI1.F_CV",


True

'Especifique os valores mínimo e máximo do objeto de animação Linear


LinearObject.LoInValue = 0 LinearObject.LoOutValue = 0
LinearObject.HiInValue = 100
LinearObject.HiOutValue = 50

'Defina UseDelta como True para garantir que a posição base 'do objeto será adicionada ao valor
de saída quando 'o objeto Linear for avaliado. Se UseDelta for definido como 'False, o valor de
saída será absoluto quando o objeto 'Linear avaliar LinearObject.UseDelta = True

'Conecte a propriedade VerticalPosition do retângulo ao 'valor de saída do objeto de animação


Linear strFullname = LinearObject.FullyQualifiedName & ".OutputValue" iRect.Connect
"VerticalPosition", strFullname, lngStatus _

'Cria uma string contendo a 'fonte de dados totalmente qualificada para a propriedade
VerticalPosition do retângulo strSource = "Animações." + iRect.Name +
_
".Posição vertical"

'Conecte a propriedade HorizontalFillPercentage da oval 'à propriedade VerticalPosition do


retângulo usando' a string criada acima como fonte de dados iOval.Connect
"HorizontalFillPercentage", strSource, lngStatus
_

'Uma vez conectado, você pode verificar se o Retângulo's


A 'Posição Vertical está sendo usada como fonte de dados para a Porcentagem de Preenchimento
Horizontal da 'Oval' usando os métodos Alvo.

'Agora que há uma conexão direta com o retângulo


'Propriedade VerticalPosition, recupera informações sobre 'os objetos que estão usando a
propriedade VerticalPosition

32 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

'como uma fonte de dados. Essa chamada retornará se a propriedade 'está sendo usada
como fonte de dados, quantos objetos a estão 'usando como fonte de dados, o status
dos objetos' e o índice do objeto será passado para o método 'GetPropertyTargets.

'NOTA: Se você deseja apenas determinar o número de 'objetos usando a


propriedade como fonte de dados, você pode usar 'a propriedade NumberOfTargets em vez
disso.

iRect.DoesPropertyHaveTargets "VerticalPosition", blnHasTargets, lngNumTargets,_


lngStatus, lngIndex

'Use o valor lngIndex da chamada DoesPropertyHaveTargets' para determinar qual


propriedade do retângulo tem 'destinos e para obter uma lista de nomes de objetos que
'construíram conexões com esta propriedade.

iRect.GetPropertyTargets lngIndex, strPropertyName, vtTargets _

End Sub

Conectando ou desconectando a propriedade de um objeto a uma fonte de dados

Os métodos nesta seção conectam ou desconectam a propriedade de um objeto a uma fonte de dados.

NOTA: As entradas entre colchetes ([ ]) são opcionais.

O método Connect mostrado abaixo conecta a propriedade de um objeto a uma fonte de dados:

Object.Connect(PropertyName As String, Source As String, (Retornado) Status As Long, _


[Tolerance], [Flags], [DeadBand], [UpdateRate]) _

Essa chamada conecta a propriedade (definida no parâmetro PropertyName) a uma fonte (definida no parâmetro source).
Por exemplo, se você deseja conectar a propriedade de altura de um retângulo diretamente ao tag AI, insira o seguinte:

Dim 1status as Long


Rect1.Connect("Height", "FIX32.NODE.AI.F_CV", 1status)

O método Disconnect desconecta a propriedade do objeto de uma fonte de dados:

Sub Disconnect(PropertyName As String)

O método SetSource define as propriedades de conexão para um objeto de animação. Use o método SetSource em
vez de definir diretamente a propriedade source do objeto de animação se propriedades adicionais precisarem ser especificadas
para a conexão. Você não precisa especificar a fonte de dados.

Object.SetSource bstrExpression, [bUseAnyway], [vaUpdateRate], _


[vaDeadband], [vaTolerance], [vaConnectionFlags] _

NOTA: Se você estiver executando substituições de fonte em tempo de execução e quiser preservar a tolerância, zona morta e a
taxa de atualização do tag, use o comando SetSource em vez da propriedade Source. Se você usar a propriedade Source, as
configurações de tolerância, banda morta e taxa de atualização serão reinicializadas para 0. O comando SetSource fornece os
parâmetros apropriados para definir efetivamente esses atributos. Você só pode usar o método SetSource para objetos de animação.

Recuperando informações de conexão da fonte de dados de uma propriedade

© 2022 General Electric Company. Todos os direitos reservados. 33


Machine Translated by Google

Os métodos descritos nesta seção permitem recuperar e manipular uma fonte de dados conectada à propriedade de um objeto
especificado. Para obter mais informações sobre esses métodos, consulte o arquivo de Ajuda do Visual Basic for Applications.

O objeto está conectado a uma fonte de dados?

O método IsConnected determina se a propriedade de um objeto está conectada a uma fonte de dados:

Object.IsConnected(PropertyName As String, (Retornado) _


HasConnection As Boolean (Retornado) Índice Tão Longo, (Retornado) Status Tão _
Longo)

Esse método geralmente é usado em conjunto com o método GetConnectionInformation , que é descrito posteriormente
nesta seção. Para obter mais informações sobre os parâmetros do método IsConnected, consulte o tópico do método
IsConnected do livro eletrônico iFIX Automation Interfaces.
A conexão é válida?

O método ParseConnectionSource analisa o nome da fonte de dados para determinar se existe uma conexão com a
propriedade de um objeto. Se existir uma conexão, ela retorna o objeto que está conectado à propriedade, bem como seu nome
totalmente qualificado. Ele aceita expressões complexas e retorna fontes de dados individuais para uma expressão complexa:

Object.ParseConnectionSource(PropertyName As String, Source As String, (Retornado) _


Status Tão Longo, Retornado Array) ValidObjects, (Retornado Array) _
_
UndefinedObjects, (Retornado) FullyQualifiedSource As String)

Exemplo: Script usando o método ParseConnectionSource

O exemplo a seguir analisa a origem AI1.F_CV para a propriedade VerticalFillPercentage de Oval Oval1 para determinar a
validade da origem de dados.

Dim iStatus Tão Longo


Dim validObjs As Variant
Dim UndObjs como variante
Dim FQSource como String

Oval1.ParseConnectionSource "VerticalFillPercentage", "AI1.F_CV", iStatus, validObjs, UndObjs, FQSource


Quantas propriedades estão conectadas à fonte de dados?

O método ConnectedPropertyCount retorna o número de propriedades do objeto que estão conectadas a uma fonte
de dados.

Object.ConnectedPropertyCount (1connectedPropertyCount As Long) _

O exemplo a seguir permite descobrir quantas propriedades no objeto Rect1 estão conectadas a fontes de dados e, em
seguida, converte esse número em um número inteiro.

Dim 1ConnectedCount as Long


Dim iNumProperties como inteiro

Rect1.ConnectedPropertyCount 1ConnectedCount iNumProperties = Cint


(1ConnectedCount)

No exemplo acima, o número 4 pode ser retornado, o que indica que quatro das propriedades de Rect1 estão conectadas
a fontes de dados. Você pode usar esse número para recuperar as conexões com o método GetConnectionInformation
descrito na seção Recuperando outras informações de conexão .

34 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

Que outras informações de conexão estão disponíveis?

O método GetConnectionInformation recupera informações de um objeto, como a propriedade


esse objeto está conectado, o nome completo da fonte de dados e todos os objetos de origem:

Object.GetConnectionInformation(Index As Long, (Retornado) _


PropertyName as Sting (Retornado) Source As String, (Retornado) _
FullyQualifiedSource As String, (Retornado) _
SourceObjects, [Tolerância], [Deadband], [UpdateRate])

Esse método geralmente é usado em conjunto com o método IsConnected descrito anteriormente. Nisso
exemplo, observe a adição do parâmetro index. Você pode obter o número de índice com o IsConnected
ou o método ConnectedPropertyCount . Veja o Livro Eletrônico Interfaces de Automação iFIX
para obter mais informações sobre esses métodos.
Exemplo: Script usando o método GetConnectionInformation com o método IsConnected

Dim blnHasConnection como booleano


Dim lngStatus tão longo
Dim lngIndex tão longo
Dim strExpression As String
Dim strFullyQualifiedExpression como String
Dim vtSourceObjects
Tolerância de escurecimento

Dim DeadBand
Dim UpdateRate

HorizontalObj.IsConnected "InputValue", blnHasConnection, lngIndex, lngStatus

Se blnHasConnection Então
HorizontalObj.GetConnectionInformation lngIndex, "InputValue", strExpression, strFullyQualifiedExpression, vtSou End If

Determinando se a propriedade de um objeto está sendo usada como fonte de dados

O método NumberOfTargets retorna o número de propriedades do objeto que contém alvos, que
ou seja, objetos que usam a propriedade desse objeto como fonte de dados:

Object.NumberOfTargets(NumberOfTargets As Long)

O método DoesPropertyHaveTargets determina se a propriedade do objeto (conforme definido pelo parâmetro Prop ertyName)
está sendo usada como fonte de dados e qual objeto a está usando:

Object.DoesPropertyHaveTargets(PropertyName As String, (Retornado) HasTrargets As _


Boolean, (Retornado) _
NumberOfTargets As Long, (Retornado) Status As Long, Index As Long) _

O método GetPropertyTargets recupera o(s) objeto(s) de destino e a propriedade que o(s) destino(s) é(são)
conectado para o número de índice especificado do objeto:

Object.GetPropertyTargets(Index As Long, (Retornado) _


PropertyName As String, Destinos (Retornados))

Recuperando informações gerais de conexão

© 2022 General Electric Company. Todos os direitos reservados. 35


Machine Translated by Google

Esta seção descreve métodos de conexão adicionais para recuperar informações de conexão e fazer conexões. Esses
métodos incluem CanConstruct, Construct, GetPropertyAttributes e ValidateSource.

Método GetPropertyAttributes

O método GetPropertyAttributes recupera uma lista de atributos de propriedade para o objeto Data Item especificado.
Para uma referência de tag, são propriedades como novo status de alarme e informações de faixa de propriedade (limites
EGU, lista de strings strings de alarme (HIHI, LOLO, etc.)). Cada propriedade consultada pode ter um conjunto diferente
de atributos. Para obter mais informações sobre este método, consulte o livro eletrônico iFIX Automation Interfaces.

Object.GetPropertyAttributes(FullyQualifiedName As String, Attribute As Long, (Retornado) _


Resultados, (Retornado) _
AttributeNames, (Retornado) Status Tão Longo)

Exemplo: Script usando o método GetPropertyAttributes

O exemplo a seguir busca as informações de atributo para o atributo HighEGU do bloco AI1 no nó NODE1.

Dim vtResults
Dim vtAttributes
Dim lStatus Tão Longo
Dim strLoEGU como String
Dim LoEGUval

Oval1.GetPropertyAttributes "FIX32.NODE1.AI1.F_CV", 3, vtResults, vtAttributes, lStatus strLoEGU = vtAttributes(0)

LoEGUval = vtResults(0)

No exemplo acima, a variável strLoEGU agora conterá a string "FIX32.NODE1.AI1.A_ELO" e a variável LoEGUval conterá
o valor baixo de EGU do tag AI1.
Método CanConstruct

O método CanConstruct verifica uma referência de fonte de dados para uma sintaxe válida. O método CanConstruct deve
ter o sistema de dados padrão definido como parte do nome do objeto. Por exemplo, o nome do objeto AI não funcionaria
corretamente.

Object.CanConstruct(ObjectName As String, (Retornado)_ CanConstruct As Boolean)

Exemplo: Script usando o método CanConstruct

O exemplo a seguir determina se a fonte de dados AI1 para NODE1 tem sintaxe válida para a imagem TestPicture.

Dim bCanConstruct como booleano

TestPicture.CanConstruct "FIX32.NODE1.AI1", bCanConstruct


Método de construção

O método Construct inicia a interface do usuário Quick Add e solicita as informações necessárias para criar a tag. Se Status
retornar 0, o tag foi criado:

Object.Construct(ObjectName As String, (Retornado) Status Tão Longo) _

36 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

Exemplo: Script Usando o Método Construir

O exemplo a seguir exibe a interface do usuário do QuickAdd que solicita ao usuário as informações
necessário para criar o tag NewAI1 para o objeto Oval Oval1 no nó NODE1.

Dim lStatus Tão Longo

Oval1.Construct "FIX32.NODE1.NEWAI", lStatus


ValidateSource Method

O método ValidateSource determina se existe uma fonte de dados:

Object.ValidateSource(Object As String, (Retornado) Status Tão Longo, (Retornado) Objeto _


Como Objeto, (Retornado) _
PropertyName como String)

Exemplo: Script usando o método ValidateSource

O exemplo a seguir valida a fonte AI1 para o Oval Oval1.

Dim iStatus Tão Longo


Dim iObj como objeto
Dim sPropName As String

Oval2.ValidateSource "AI1", iStatus, iObj, sPropName

Propriedades e métodos de animação

As seções a seguir detalham as propriedades e os métodos de animação que você pode usar para conectar a estrutura de um objeto.
propriedades para fontes de dados e criar animações:

l Propriedades e métodos gerais do objeto de animação

l Propriedades do Objeto de Animação Linear

l Propriedades e métodos do objeto de animação de pesquisa

l Exemplos de conexão: usando o objeto Lookup

l Propriedades do objeto de animação de formato

Propriedades e métodos gerais do objeto de animação

A tabela a seguir fornece a sintaxe e a descrição das propriedades e métodos gerais do objeto de animação.

Propriedades e métodos gerais do objeto de animação


Sintaxe Descrição
Object.ConnectionFailed Determina se a tentativa de conexão foi bem-sucedida.
Object.Failed Source Retorna a fonte da tentativa de conexão, se SetSource
método falhou.

Object.InputValue Contém dados brutos da fonte de dados que serão transformados

© 2022 General Electric Company. Todos os direitos reservados. 37


Machine Translated by Google

pelo objeto de animação.


Object.OutputValue Contém os dados que resultaram da transformação do
Dados de valor de entrada.

Object.Source Contém a string de origem para uma animação (a fonte de dados de entrada).
Esta propriedade constrói internamente uma conexão entre o valor de entrada
propriedade da animação e a fonte de dados especificada por esta propriedade.
Se você usou a sintaxe correta para a fonte, definindo o
A propriedade Source funcionará corretamente. Usar o método SetSource é
a maneira mais eficaz de definir a origem de um objeto de animação.
Object.SourceValidated Especifica se a propriedade source do objeto de animação tem um valor válido
conexão da fonte de dados.
Object.SetSource Define as propriedades de conexão para um objeto de animação. Este método
(bstrExpression As é usado em vez de definir diretamente a propriedade de origem do objeto de
String, [bUseAnyway As animação se propriedades adicionais tiverem que ser especificadas para a conexão.
_ Boolean], [vaUp Você não precisa especificar a fonte de dados.
dateRate], _ [vaDead
NOTA: O método SetSource só pode ser usado para animação
banda], _ [vaTolerância], _
objetos.
[vaConnectionFlags]

Propriedades do Objeto de Animação Linear

A tabela a seguir fornece a sintaxe e a descrição das propriedades do objeto de animação linear.

Propriedades do Objeto de Animação Linear


Sintaxe Descrição
Object.HiInValue Especifica o limite superior no intervalo de valores de entrada.
Object.HiOutValue Especifica o limite superior no intervalo de valores de saída.
Object.LoInValue Especifica o limite inferior no intervalo de valores de entrada.
Object.LoOutValue Especifica o limite inferior no intervalo de valores de saída.
Object.UseDelta Especifica se deve usar o valor absoluto ou relativo para definir a saída
faixa de valor. O objeto sempre iniciará no valor de saída baixo.

Propriedades e métodos do objeto de animação de pesquisa

A tabela a seguir fornece a sintaxe e a descrição das propriedades e métodos do objeto de animação de pesquisa.

Propriedades e métodos do objeto de animação de pesquisa


Descrição da sintaxe
Object.ColorTable Especifica se os valores de saída do objeto Lookup são cores.
Object.DefaultOutputValue Especifica o valor gravado na propriedade do objeto se a entrada
O valor não foi encontrado na tabela do objeto Lookup.
Object.ExactMatch Especifica se o objeto Lookup é um intervalo ou uma tabela de correspondência exata.
Por exemplo, se você estiver usando uma animação linear para animar o
posição de um objeto em sua tela:

38 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

l Se você definir usar delta como True, a posição do objeto será definida
para sua posição base na tela e o valor de saída transformado.

l Se você definir usar delta como Falso, a posição do objeto


sempre falhará dentro do intervalo de saída definido.
Object.ToggleSource Contém o nome da string de origem de alternância. Isso se aplica a todos os níveis
de uma tabela de objetos de pesquisa. Quando o valor da fonte de alternância é
verdadeiro, os níveis do objeto Lookup alternam entre o valor de saída e o
valor de alternância global. Você define o valor de alternância global com a
propriedade Global Toggle (por exemplo, definindo a fonte de alternância como
piscar em um novo alarme).
Object.GlobalOutputToggle Especifica se a tabela tem uma fonte de alternância global.
Object.GlobalToggle Especifica o valor que será alternado se o valor da fonte de alternância global for
true.
Object.SharedTableName Especifica o nome de uma tabela de pesquisa compartilhada em uma imagem ou
tabela de limite em globais de usuário. Se esse valor for definido, o objeto usará
a tabela que pode ser compartilhada por outros objetos, em vez de sua própria
tabela exclusiva.
Object.ToggleRate Especifica a taxa na qual a saída do objeto Lookup alterna entre output1 e
output2. Por exemplo, em uma tabela de cores, essa propriedade é a taxa de
intermitência.
Object.Tolerance Especifica a tolerância para tabelas de pesquisa de correspondência exata.

Object.AddLevel (pInput1, Adiciona um novo nível à tabela de objetos Lookup.


pOutput1, [pInput2, pOut put2])

Object.GetLevel (iIndex, pIn Obtém as propriedades de nível para o índice de nível especificado de put1,
pOutput1, [pInput2, objeto Lookup. A indexação começa em 1. pOutput2])

Object.RemoveAllLevels Remove todos os níveis da tabela Lookup.


Object.Removelevel Remove um nível de uma tabela de pesquisa. A indexação começa em 1.

Exemplos de conexão: usando o objeto Lookup

Este exemplo mostra como verificar se um objeto está conectado a uma fonte de dados e permite criar um objeto Lookup que
substitui uma tabela de cores existente.

Exemplo: usando a comparação de intervalo

Neste exemplo, a imagem contém um retângulo chamado Rect1.

Private Sub BtnLookup_Click()


Dim blnIsConnected As Boolean
Dim lngIndex tão longo
Dim lngStatus tão longo
Dim strPropName As String
Dim strSource como String
Dim strFQSource As String
Dim vtSourceObjects
Dim LookupObject As Object
Dim strNome completo como string
Dim blnIsEmpty As Boolean

© 2022 General Electric Company. Todos os direitos reservados. 39


Machine Translated by Google

'Verifique se a propriedade ForegroundColor do retângulo 'já está conectada a


uma fonte de dados Rect1.IsConnected "ForegroundColor", blnIsConnected,
lngIndex, lngStatus _

'Se for, use o método Disconnect para remover a 'conexão de propriedade existente

Se blnEstáConectado Então
Rect1.Disconnect "ForegroundColor"
Fim se

'Se uma animação ForegroundColor não existir, construa um 'objeto de animação de


pesquisa vazio fora do retângulo
Se (TypeName(LookupObject) = "Nada") Então
Set LookupObject = Rect1.BuildObject("lookup")
Fim se

'Adicione níveis ao seu objeto de animação de pesquisa com uma comparação de intervalo'
usando o método AddLevel. A seguinte 'tabela terá entradas entre 10 e 20 exibindo a
'cor com o valor RGB de 255 (vermelho), 21 a 40' exibiria RGB 65535 e assim por diante
LookupObject.AddLevel 10, 255, 20 LookupObject.AddLevel 20, 65535 , 40
LookupObject.AddLevel 40, 65280, 60
LookupObject.AddLevel 60, 16711680, 80
LookupObject.AddLevel 80, 8388736, 100

'Use o método SetSource para conectar o objeto de animação de pesquisa' ao objeto de fonte
de dados. Esta conexão 'substitui qualquer tabela de cores existente configurada
LookupObject.SetSource "AI1.F_CV", True

'Conectamos a propriedade InputValue do objeto de animação de pesquisa 'à fonte de


dados. Agora, vamos conectar a propriedade OutputValue do objeto de animação
à forma. Sua saída está conectada ao objeto que está 'animando'. strFullname =
LookupObject.FullyQualifiedName & ".OutputValue"

Rect1.Connect "ForegroundColor", strFullname, lngStatus

End Sub

Da mesma forma, você pode criar uma tabela de cores Exact Match usando o método LookupExact e a propriedade
ExactMatch de um objeto. O exemplo a seguir mostra como.

Observe que, novamente, o exemplo primeiro verifica se o objeto está conectado em primeiro lugar e, em seguida, manipula
a propriedade do objeto com base nessa conexão.
Exemplo: usando a pesquisa de correspondência exata

Neste exemplo, a imagem contém um retângulo chamado Rect2.

Private Sub BtnLookupExact_Click()


Dim blnIsConnected As Boolean
Dim lngIndex tão longo
Dim lngStatus tão longo
Dim strPropName As String
Dim strSource como String
Dim strFQSource As String
Dim vtSourceObjects
Dim LookupObject As Object
Dim strNome completo como string
Dim blnIsEmpty As Boolean

40 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

'Verifique se a propriedade ForegroundColor do retângulo 'já está conectada a uma fonte de


dados Rect2.IsConnected "ForegroundColor", blnIsConnected,
lngIndex, lngStatus _

'Se for, use o método Disconnect para remover a 'conexão de propriedade

Se blnEstáConectado Então
Rect2.Disconnect "ForegroundColor"
Fim se

'Se uma animação ForegroundColor não existir, construa um 'objeto de animação de


pesquisa vazio fora do retângulo
Se (TypeName(LookupObject) = "Nada") Então
Set LookupObject = Rect2.BuildObject("lookup")
Fim se

'Para criar uma tabela de cores de correspondência exata, o usuário pode fazer 'duas
coisas: (1) Chamar AddLevel com os mesmos parâmetros' como uma comparação de
intervalo e definir a propriedade ExactMatch como 'true OU (2) Chamar AddLevel sem a
segunda entrada ' parâmetro. A tabela a seguir terá as entradas 10' exibindo a cor
com valor RGB de 255' (vermelho), 21 exibiria RGB 65535 e assim sucessivamente.

LookupObject.AddLevel 10, 255, 20


LookupObject.AddLevel 21, 65535, 40
LookupObject.AddLevel 41, 65280, 60
LookupObject.AddLevel 61, 16711680, 80 LookupObject.AddLevel
81, 8388736, 100 LookupObject.ExactMatch = Verdadeiro

'Use o método SetSource para conectar o objeto de animação de pesquisa' ao objeto de fonte
de dados. Esta conexão 'substitui qualquer configuração ColorTable existente.

LookupObject.SetSource "AI1.F_CV", True 'Conectamos a


propriedade InputValue do objeto de animação 'lookup' à fonte de dados. Agora, vamos
conectar a propriedade OutputValue do objeto de animação à forma. Sua saída
está conectada ao objeto que está 'animando'. strFullname = LookupObject.FullyQualifiedName
& ".OutputValue"

Rect2.Connect "ForegroundColor", strFullname, lngStatus

End Sub

Para obter mais informações sobre fontes de dados, consulte a seção Criando imagens manual. Para obter informações sobre a
alteração de fontes de dados em tempo de execução, consulte a seção Alteração de fontes de dados .

Propriedades do objeto de animação de formato

Esta tabela fornece a sintaxe e a descrição das propriedades do objeto de animação de formato.

Descrição das propriedades do objeto de


Sintaxe animação de
Object.Format formato Especifica a cadeia de caracteres C Sprintf Format na
qual a entrada é formatada para o objeto Format.

© 2022 General Electric Company. Todos os direitos reservados. 41


Machine Translated by Google

Object.SetNumericFormat ([WholeDi gits], Define o formato de um valor numérico.

[DecimalDigits], _ [Justify])
Object.SetStringFormat ([Formato]) Define a formatação bruta para um valor de string.

Exemplo de Conexão: Animando a Rotação de um Retângulo

O exemplo nesta seção mostra como animar um objeto por meio de um script VBA; especificamente, animar a rotação de um retângulo
chamado Rect1. O código é obtido diretamente do iFIX Rotate Expert.

Para este exemplo, você precisa fornecer aos operadores uma interface no ambiente de configuração que lhes permita animar a rotação
do objeto selecionado. Você também precisa permitir que eles selecionem uma fonte de dados com o controle Expression Editor. Para
este exemplo, suponha que os operadores selecionarão um bloco de banco de dados como sua fonte de dados. Você também deseja
permitir que eles selecionem os valores mínimo e máximo de entrada e saída. Depois de aplicar este formulário a um objeto selecionado,
o operador pode alternar para executar e ver o objeto girando conforme especificado.

Primeiro, desenvolva o formulário básico conforme mostrado na figura a seguir:

Girar a Caixa de Diálogo do Objeto Selecionado

O script a seguir destina-se ao evento Click do botão OK. O script cria um objeto de animação, conecta o objeto de animação ao ponto
de dados e, em seguida, conecta o objeto de animação à forma selecionada. Veja a seção Criando Imagens manual para mais
informações sobre objetos de Animação.

Exemplo: Animando a Rotação de um Objeto


Subprivado cmdOK_Click()
Dim CurrentObject as Object
Dim RotateObject As Object
Dim i As Integer
Dim blnHasConnection como booleano
Dim lngIndex tão longo
Dim lngStatus tão longo
Dim strFullName As String
Dim Resultado como Booleano
Dim FailedSourceString como String
Dim strPropertyName As String
Dim strFullQualifiedSource As String

42 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

Dim strExpression As String


Dim strFullyQualifiedExpression como String
Dim vtSourceObjects
Dim dblTolerance como duplo
Dim dblDeadband como duplo
Dim dblUpdateRate como duplo

Em caso de erro Ir para ErrorHandler

'Definir CurrentObject igual ao primeiro objeto selecionado na 'imagem.

Definir CurrentObject = _
Application.ActiveDocument.Page.SelectedShapes.Item(1)

'Verifica se a propriedade RotationAngle do objeto selecionado 'já está conectada a uma fonte de
dados usando o método 'IsConnected'.

CurrentObject.IsConnected "RotationAngle", blnHasConnection, lngIndex, lngStatus _

'Se for, use o método GetConnectionInformation para obter 'o nome totalmente qualificado da fonte
de dados, bem como o' objeto da fonte de dados.

Se blnHasConnection Então

CurrentObject.GetConnectionInformation lngIndex, strPropertyName, strExpression, _ 0


strFullyQualifiedExpression, vtSourceObjects 'vtSourceObjects _
é uma matriz variante dos objetos da fonte de dados conectados à propriedade
RotationAngle do 'objeto selecionado. Obtenha o primeiro objeto na matriz.

'Assuma que o primeiro objeto conectado ao 'RotationAngle é o que você deseja.

Defina RotateObject = vtSourceObjects(0)


Fim se

'Se uma conexão de rotação não existir, construa um 'objeto de animação linear vazio a partir do
objeto atual.
If (TypeName(RotateObject) = "Nothing") Então defina RotateObject =
CurrentObject.BuildObject("Linear")
Fim se

'Use o método SetSource para conectar o objeto Animation ao 'objeto fonte de dados que o usuário inseriu
no 'Editor de Expressões. Esta conexão substitui qualquer configuração de Rotação existente.

RotateObject.SetSource ExpressionEditor1.EditText, True, ExpressionEditor1.RefreshRate, _


ExpressionEditor1.DeadBand, ExpressionEditor1.Tolerance _

'Verifica a propriedade ConnectionFailed do objeto Animation. Se a 'conexão falhou, envie uma mensagem
para o usuário.
Se RotateObject.ConnectionFailed = True Then FailedSourceString = "Fonte
" &
de dados: RotateObject.FailedSource & Result = _
MsgBox(FailedSourceString, vbOKOnly) "não existe."

Sair Sub
Fim se

'Agora, podemos definir o LoInValue, HiInValue, LoOutValue e 'HiOutValue do objeto Animation com
os valores que o usuário' digitou no formulário.

RotateObject.LoInValue = Val(txtLoIn.Value)
RotateObject.HiInValue = Val(txtHiIn.Value)
RotateObject.LoOutValue = Val(txtMinAngle.Value)
RotateObject.HiOutValue = Val(txtMaxAngle.Value)

© 2022 General Electric Company. Todos os direitos reservados. 43


Machine Translated by Google

'Conectamos a propriedade InputValue do objeto Animation 'à fonte de dados. Objetos de


animação recebem sua entrada 'de fontes. Agora, vamos conectar a propriedade
'OutputValue' do objeto Animation à forma. Sua saída está conectada 'ao objeto que
está animando. strFullName = RotateObject.FullyQualifiedName & ".OutputValue"

CurrentObject.Connect "RotationAngle", strFullName, lngStatus

Rodar um Grupo

Para rotacionar um grupo usando scripts, use o seguinte método preferencial listado nas etapas abaixo.

Para rotacionar um grupo usando scripts:

1. Crie um objeto variável que é usado para armazenar o ângulo de rotação do grupo.

2. Anime o ângulo de rotação do grupo usando o valor atual dessa variável como a fonte do anim
ação.

3. Defina o valor atual da variável usando o script em vez de alterar o ângulo de rotação do
grupo diretamente.

Exemplo: Girando um Grupo Usando um Script

Dim bUp como booleano

Private Sub CFixPicture_Initialize() bUp = True

CommandButton1.Caption = "Girar para cima"


End Sub

Subcomando Privado CommandButton1_Click()


Dim o como objeto
Dim dVal como duplo

'
obtenha o objeto variável, usando FindObject para manter o
'
grupo fora do VBA
Set o = Me.FindObject("RotationAngle")

'
obter o valor atual da variável dVal = o.CurrentValue

Se bPara cima Então


'incrementa o valor
dVal = dVal + 5

' se atingirmos 45, gire para baixo na próxima vez


Se dVal = 45 Então
bUp = False
CommandButton1.Caption = "Girar para baixo"
Terminar
Se Else
' decrementa o valor
dVal = dVal - 5

' se atingirmos 0, gire para cima na próxima vez


Se dVal = 0 Então
bUp = True
CommandButton1.Caption = "Girar para cima"
Fim se
Fim se

44 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

'
definir o valor atual do objeto variável
' o que resultará na rotação do grupo
o.CurrentValue = dVal

End Sub

Manipulando Imagens

Este capítulo fornece exemplos de código-fonte que mostram como manipular imagens iFIX usando VBA. Esse
A seção também descreve algumas características importantes do uso de scripts VBA em suas imagens. Inclui
as seguintes seções:

l Compreendendo eventos de imagem

l Iniciando uma imagem automaticamente

l Gerenciamento de vários monitores

l Alterando Exibições Usando Sub-rotinas Globais

l Fechando Imagens com Scripts Ativos

l Usando o objeto de aplicativo de espaço de trabalho

Depois de ler esta seção, você poderá realizar as seguintes tarefas inteiramente por meio de scripts VBA:

l Gerenciar vários monitores

l Altere exibições usando sub-rotinas globais

Entendendo os eventos de imagem

Cada imagem que você cria executa eventos quando você a abre ou fecha. Ao escrever um roteiro para cada evento
manipulador, você pode concluir automaticamente uma tarefa específica (como a inicialização de variáveis) quando uma imagem
abre ou fecha.

Os eventos que uma imagem executa variam dependendo do ambiente do WorkSpace. As seguintes tabelas
resumir os eventos de imagem que ocorrem.

Quando você abre uma foto no... Os seguintes eventos ocorrem...


Ambiente de configuração Ambiente InitializeConfigure
de tempo de execução 1. Inicializar

2. Ativado
ÿ

Quando você fecha uma foto no... Os seguintes eventos ocorrem...


Ambiente de configuração em tempo N/D
de execução Fechar

© 2022 General Electric Company. Todos os direitos reservados. 45


Machine Translated by Google

Se você abrir uma imagem com uma sub-rotina OpenPicture, os eventos abertos (Initialize e Activated) serão executados
imediatamente. No entanto, se a chamada OpenPicture estiver dentro de uma estrutura de loop ou ramificação (como um loop
FOR ou uma instrução IF), os eventos abertos não serão acionados até que o script OpenPicture seja concluído.

Por outro lado, se você fechar uma imagem com uma sub-rotina ClosePicture, o evento Close da imagem que está sendo
fechada nunca é acionado porque a imagem é removida da memória antes que seu script tenha a chance de ser executado.

As imagens também executam eventos ativados e desativados conforme você alterna de uma imagem para outra. O evento
Activated ocorre sempre que uma imagem ganha foco. O evento Desativado é executado quando uma imagem perde o foco.
Por exemplo, suponha que você tenha duas imagens abertas e a primeira imagem, Picture1, esteja em foco.
Ao selecionar a segunda figura, Figura2, Figura1 executa o evento Desativado e Figura2 executa o evento Ativado. Ao
voltar, Picture2 executa o evento Deactivated e Picture1 executa o evento Activated.

Iniciando uma imagem automaticamente

Esta seção descreve como criar um ambiente de tempo de execução que contém uma barra de ferramentas virtual e várias
imagens do mesmo tamanho.

NOTA: Esta seção se aplica apenas a imagens criadas com Coordenadas aprimoradas. Esta seção não oferece suporte ao
Sistema de Coordenadas Lógicas herdado.

A figura abaixo mostra um exemplo de design de imagem, consistindo em três imagens sem título: uma imagem principal,
um banner de navegação e um banner de alarme.

Design de Imagem Típico

46 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

Como a imagem principal deve ter um determinado tamanho e posição no ambiente de tempo de execução, você pode querer criar um
botão na barra de ferramentas para criar imagens do mesmo tamanho para preencher a área principal da imagem do processo. Para fazer
isso, você deve primeiro criar uma área de imagem, área de navegação (ou barra de ferramentas) e outras áreas de tempo de execução
reservadas como "imagens especiais". Depois de criar essas fotos, anote as seguintes coordenadas das fotos para que seja mais fácil
inseri-las no script:

l Parte superior da janela

l Janela à esquerda

l Altura do documento

l Largura do documento

Essas coordenadas podem ser encontradas na janela Propriedades da imagem. Veja a seção Criando Imagens manual para obter
mais informações sobre as coordenadas da imagem.

Ao abrir imagens do iFIX por meio de scripts, você pode querer remover qualquer barra de rolagem indesejada executando o método
FitWindowToDocument , que também é ilustrado neste exemplo de código.

Vamos dar uma olhada no script da barra de ferramentas. Sempre que possível, comentários são fornecidos para ajudá-lo a entender essa
parte específica do script. Esses comentários em negrito aparecerão por padrão como texto verde quando colados na janela de código
VBA. As cores dos comentários são configuradas na caixa de diálogo Opção do VBA.
Exemplo: Criando uma barra de ferramentas

Dim iNewDoc como objeto


Dim iPage como objeto

'Crie uma nova imagem.


Set iNewDoc = Application.Documents.Add("FIX.PICTURE")
Definir iPage = iNewDoc.Page com
iPage

'Define a altura do documento.


.DocumentHeight = 51,3

'Define a largura do documento.


.DocumentWidth = 100,44

'Chame o método FitWindowToDocument para expandir o tamanho da janela para


que corresponda ao tamanho do documento.
'Esta ação remove todas as barras de rolagem.
.FitWindowToDocument
.windowtoppercentage =
7.03 .windowleftpercentage = 0# .titlebar
= False

Terminar com
Definir iNewDoc = Nada
Definir iPage = Nada

Gerenciando Múltiplos Monitores

Observe que há uma barra de ferramentas virtual na parte superior da tela na ilustração da seção Iniciar automaticamente uma imagem .
Os botões nesta barra de ferramentas são, na verdade, bitmaps que têm sua propriedade ButtonStyle definida como Pushbutton.

Para obter mais informações sobre como gerenciar exibições, consulte as seguintes seções:

© 2022 General Electric Company. Todos os direitos reservados. 47


Machine Translated by Google

l Definindo uma propriedade de botão de pressão

l Configurando o Documento Ativo

l Criando uma Variável Global

Definindo uma propriedade de botão de pressão

As etapas abaixo descrevem como definir uma propriedade de botão de pressão em sua imagem.

Para definir a propriedade Pushbutton de um bitmap:

1. No iFIX WorkSpace, na visualização da faixa de opções, na guia Inserir, no grupo Objetos/Links, clique em
Objetos/Links e clique em Bitmap.

- Ou -

Na visualização Clássica, no menu Inserir, clique em Bitmap para inserir um bitmap na imagem do iFIX.

2. Clique com o botão direito do mouse no bitmap e selecione Button Styles, PushButton no menu pop-up. Um efeito 3D
aparecerá ao redor do bitmap para dar a aparência de um botão.

3. Opcionalmente, você pode configurar um segundo bitmap para ser exibido quando o botão for pressionado. Para fazer isso, clique
com o botão direito do mouse no bitmap e selecione Carregar imagem, Secundário. Você também pode configurar uma ToolTip
inserindo o texto desejado para a ToolTip na propriedade Description do bitmap e definindo a propriedade EnableTooltips como
TRUE.

A barra de ferramentas superior é, na verdade, uma imagem separada sem barra de título. Clicar em um botão nesta área altera o foco e
altera o que é conhecido no VBA como ActiveDocument. Para ter certeza de que a imagem correta é operada quando você clica no
botão da barra de ferramentas, você deve primeiro definir o documento ativo.

Definindo o documento ativo

Para definir o documento ativo, você precisa criar um objeto variável para manter o nome da imagem principal ou alias da imagem. No
código a seguir, um objeto variável é usado porque o script requer que várias imagens principais sejam abertas.

Se você usar um alias em vez de uma variável, ocorrerá um erro se o alias for definido com o mesmo nome ("MainPicture"), quando
mais de uma imagem principal for aberta ao mesmo tempo. Veja a seção Criando Imagens manual para obter mais informações sobre
aliases.

Criando uma Variável Global

Para trabalhar com o script nesta seção, você deve primeiro criar um objeto de variável global para conter a string que representa a
imagem ativa atual.

Para criar um objeto de variável global para conter a string da imagem ativa atual:

1. Na pasta Globals da árvore do sistema iFIX WorkSpace, clique com o botão direito do mouse no ícone Usuário e selecione Criar
Variável do menu pop-up.

48 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

2. Defina a propriedade Name como CurrentPicture e a propriedade VariableType como 8 - vtString. o sistema
a árvore tem deve se parecer com o seguinte:

Exemplo de Árvore de Sistema

Depois de criar a variável, adicione o seguinte código ao método Activate da imagem principal para definir uma variável global:

Subscrito Privado CFixPicture_Activated()

'Defina a variável global do usuário quando você ativar para descobrir o nome da
imagem ativa atual. user.CurrentPicture.CurrentValue =
Me.FullyQualifiedName

'Me é uma variável intrínseca do VB que informa o nome' do projeto atual (objeto
de imagem).
End Sub

A variável Global permite que você saiba qual imagem principal está em foco para que a barra de ferramentas possa agir sobre ela.
Agora você pode adicionar o seguinte script ao objeto bitmap clicando com o botão direito do mouse e selecionando o comando
Editar Script no menu pop-up:

Dim PicObj como objeto

'Percorra os documentos que estão abertos.


Para cada PicObj em Application.Documents 'Se o
documento que está aberto tiver o mesmo nome que a 'imagem principal ativa
atual, defina a propriedade ativa,' que por sua vez definirá o documento ativo.

Se PicObj.Name = user.CurrentPicture.CurrentValue Então


PicObj.active = True
'Reconhece os alarmes dos itens selecionados na 'imagem ativa.

AcknowledgeAnAlarm Exit
Sub
Fim se
Próximo PicObj

Alteração de exibições usando sub-rotinas globais

As sub-rotinas globais do FactoryGlobals fornecem comandos que permitem gerenciar as telas do operador. As sub-rotinas de
gerenciamento de imagens incluem:

l OpenPicture

l CloseImagem

l Substituir Imagem

l PictureAlias

Consulte o tópico de sub-rotinas do Livro Eletrônico de Interfaces de Automação iFIX para obter mais informações sobre como
chamar essas sub-rotinas.

© 2022 General Electric Company. Todos os direitos reservados. 49


Machine Translated by Google

No próximo exemplo, um display de visão geral contém quatro botões que permitem aos operadores monitorar as linhas
da planta. O primeiro botão abre a imagem da primeira linha, o segundo botão abre a imagem da segunda linha e assim por
diante.

Exemplo de botão de pressão

Os scripts VBA que tornam os botões de comando operacionais são fornecidos nesta seção. O uso de pseudônimos (no
script a seguir, Line é o nome de um pseudônimo) dá ao script controle sobre a abertura e o fechamento de exibições,
independentemente dos nomes exatos das imagens. Cada vez que o operador seleciona o botão apropriado, o script
fecha qualquer imagem com um alias de Linha e reatribui o alias à imagem aberta.
Exemplo: Usando um Alias para Abrir e Fechar Displays
Subprivado OpenLine1Command_Click()
FecharImagem "Linha"
OpenPicture "Linha1", "Linha"
End Sub

Subprivado OpenLine2Command_Click()
FecharImagem "Linha"
OpenPicture "Linha2", "Linha"
End Sub

Subprivado OpenLine3Command_Click()
FecharImagem "Linha"
OpenPicture "Linha3", "Linha"
End Sub

Subprivado OpenLine4Command_Click()
FecharImagem "Linha"
OpenPicture "Linha4", "Linha"
End Sub

O script a seguir executa a mesma função usando a sub-rotina ReplacePicture , sem usar alias. Com ReplacePicture,
todas as imagens são exibidas na mesma janela: Exemplo: Usando a sub-rotina
ReplacePicture

Subprivado OpenLine1Command_Click()
Substituir Imagem ("Linha1")
End Sub

Subprivado OpenLine2Command_Click()
Substituir Imagem ("Linha2")
End Sub

Subprivado OpenLine3Command_Click()
Substituir imagem ("Linha3")

50 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

End Sub

Subprivado OpenLine4Command_Click()
Substituir imagem ("Linha4")
End Sub

Fechando Imagens com Scripts Ativos

Um script não pode ser totalmente executado se a imagem que o contém for fechada ou substituída. Portanto, se você usar o
método Close na imagem que contém o script ativo, o método Close deve aparecer como o último método no script. Caso
contrário, a imagem fecha antes que o restante do script possa ser executado.

Lembre-se de que algumas sub-rotinas de comando, como ReplacePicture e ClosePicture, contêm o método Close ,
portanto, também são afetadas.

Usando o objeto de aplicativo de espaço de trabalho

Ao usar o objeto Aplicativo do WorkSpace de outra tarefa, você deve informar ao sistema operacional que terminou definindo-
o como Nothing (defina Application = Nothing) antes que o WorkSpace seja encerrado.

Criando scripts globais

O iFIX inclui duas páginas globais que permitem armazenar objetos públicos, métodos, formulários e objetos variáveis para que
possam ser acessados de qualquer lugar dentro do sistema.

A página FactoryGlobals contém as sub-rotinas iFIX e todas as suas variáveis, formulários e funções de suporte. O arquivo
FactoryGlobals é protegido contra gravação para manter a integridade desses scripts. Consulte a seção Sub-rotinas Globais
para obter mais informações sobre as sub-rotinas iFIX que são armazenadas no Fact
página oryGlobals.

A página do usuário é o local onde você pode colocar seus próprios objetos, métodos, formulários e variáveis que deseja
usar globalmente.

Como você pode acessar os itens definidos como públicos na página Usuário de qualquer lugar do sistema, verifique se o
que você digita é realmente o que deseja expor. Se você criar uma variável pública global, lembre-se de que ela pode ser
alterada a partir de qualquer script a qualquer momento.

Esta seção fornece exemplos dos itens que você pode querer incluir em sua página de usuário, incluindo:

l Objetos variáveis

l Tabelas de limites

l Procedimentos (sub-rotinas e funções VBA)

l Formulários

Criando um objeto de variável global

© 2022 General Electric Company. Todos os direitos reservados. 51


Machine Translated by Google

Os objetos variáveis podem ser armazenados na página do usuário do iFIX para que possam ser acessados em todo o aplicativo,
independentemente de quais imagens estejam abertas. Você pode ler mais sobre objetos variáveis na seção Criando imagens manual.

Para tornar um objeto variável global adicionando-o à página do usuário:

1. Na árvore do sistema WorkSpace, clique duas vezes na pasta Globals.

2. Clique com o botão direito do mouse no ícone Usuário e selecione Criar variável. Um ícone representando o objeto Variável
aparece sob o ícone do usuário.

3. Clique com o botão direito do mouse no ícone do objeto Variável e selecione Animações. A caixa de diálogo Animações é exibida.

4. Defina os valores para o objeto Variável e clique em OK.


Para criar uma variável global usando o Variable Expert:

1. Selecione Variável Expert na caixa de ferramentas.

2. Atribua um nome e tipo para a variável.

3. Selecione a opção Variável Global e clique em OK.

Como as variáveis predefinidas do FIX32 são mapeadas para as propriedades do objeto iFIX

No FIX32, uma variável predefinida é uma variável somente leitura cujo nome é reservado para uso pelo Comando
Linguagem. As variáveis predefinidas têm o seguinte escopo:

l Variáveis globais – disponíveis para qualquer script em execução. No FIX32, as variáveis de escopo global começam com o
prefixo #GS_ (para variáveis de string de escopo global) ou #GN_ (para variáveis numéricas de escopo global).

l Variáveis de imagem – disponíveis para scripts executados em uma determinada imagem. No FIX32, as variáveis de escopo de imagem
comece com o prefixo #PS_ (para variáveis de string de escopo de imagem) ou #PN_ (para variáveis numéricas de escopo de imagem
variáveis).

No iFIX, as variáveis globais e de imagem podem ser acessadas como uma propriedade de objeto por meio de um link de objeto ou um
script de comando VBA. Essas propriedades do objeto incluem link, imagem, tela, segurança, sistema e hora
propriedades.

Consulte a tabela a seguir para obter uma lista das variáveis predefinidas do FIX32 e o objeto iFIX correspondente
properties, com a sintaxe adequada.

Sintaxe de variável FIX32 Sintaxe de objeto iFIX Sintaxe iFIX VBA Descrição

#PS_CUR_LINK Sem título1. Me.SelectedDatasource Contém a fonte de dados


Fonte de dados selecionada ou Sem título1. do objeto atualmente selecionado.
Fonte de dados selecionada

#PS_CUR_SHDW Sem título1. Meu. Contém a fonte de dados

Fonte de dados destacada Fonte de dados destacada do objeto atualmente


ou Sem título1. realçado.
Fonte de dados destacada

#PS_CUR_NODE Sem título1. Me.SelectedNodename Contém o nó SCADA


SelectedNodeName ou Sem título1. do objeto atualmente selecionado.
SelectedNodeName

#PS_CUR_TAG Sem título1. Eu.SelectedTagname ou Contém o nome da tag ou


SelectedTagName Sem título1. elemento OPC (item) do

52 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

SelectedTagname objeto atualmente selecionado.


#PS_CUR_FIELD Sem título1. Sem título1. Contém o nome do campo de
SelectedFieldName SelectedFieldName o objeto atualmente
selecionado.
#PS_PICTURE Sem título1.PictureName Eu.PictureName ou Contém o nome da imagem
Untitled1.PictureName ou pseudônimo.

#PN_PICTURE_WIDTH Untitled1.PictureWidth Me.PictureWidth ou contém a imagem


e #PS_PICTURE_WIDTH Sem título1.PictureWidth largura, em pixels.
#PN_PICTURE_HEIGHT Untitled1.PictureHeight Me.PictureHeight ou contém a imagem
e #PS_PICTURE_ Untitled1.PictureHeight altura, em pixels.
ALTURA

#GN_SCREEN_WIDTH System.ScreenWidth System.ScreenWidth Contém a exibição


e largura da tela, em pixels.
#GS_SCREEN _WIDTH

#GN_SCREEN_HEIGHT System.ScreenHeight System.ScreenHeight Contém a exibição


e altura da tela, em pixels.
#GS_SCREEN_ ALTURA

#GS_LOGIN_NAME Sistema. System.LoginUserName Contém o ID do usuário de


Nome de usuário de login o atualmente conectado
do utilizador. Se a segurança

estiver desabilitada, esta string estará vazia.

#GS_FULL_NAME Sistema. Sistema. Contém o nome completo de


LoginUserFullName LoginUserFullName o atualmente conectado
do utilizador. Se a segurança

estiver desabilitada, esta string estará vazia.

#GS_GROUP System.LoginGroup System.LoginGroup Contém o primeiro grupo


nome que atualmente
usuário logado pertence.
Se a segurança estiver desativada, isso

cadeia está vazia.


#GS_NODE Sistema. System.MyNodeName Contém o físico iFIX
MyNodeName nome do nó.

Sistema #GS_CURRENT_PICTURE. System.CurrentPicture Contém a imagem atualmente ativa


Imagem Atual exibida no
iFIX WorkSpace.
#GS_DATE System.CurrentDate System.CurrentDate Contém a data atual do
sistema. A string de data é
formatada de acordo com
o formato de "data curta" em
o Regional e o Idioma
Opções no controle
Painel.

#GS_TIME System.CurrentTime System.CurrentTime Contém a hora atual do


sistema. A cadeia de tempo é
formatada de acordo com
o formato "tempo" no

© 2022 General Electric Company. Todos os direitos reservados. 53


Machine Translated by Google

Regional e Idioma
Opções no controle
Painel.

#GS_HOUR e #GN_ Sistema. Sistema. Contém o componente de


HORA CurrentTimeHour CurrentTimeHour hora do horário atual do
sistema.

#GS_MIN e Sistema. Sistema. Contém o componente de


#GN_MIN CurrentTimeMinute CurrentTimeMinute minuto da hora atual do sistema.

#GS_SEC e Sistema. Sistema. Contém o segundo componente


#GN_SEC CurrentTimeSecond CurrentTimeSecond da hora do sistema atual.

#GS_DAY e Sistema. Sistema. Contém o componente de


#GN_DAY DataAtualDia DataAtualDia dia da data atual do sistema.

#GS_ MONTH e #GN_ Sistema. Sistema. Contém o componente do


MÊS CurrentDateMonth CurrentDateMonth mês da data atual do sistema.

#GS_ ANO e #GN_ Sistema. Sistema. Contém o ano de 4 dígitos


ANO DataAtualAno DataAtualAno componente da data atual do
sistema.

Criando uma Tabela de Limiar Global

Você também pode configurar uma tabela de limites para todo o sistema. As tabelas de limites globais fornecem mais
controle centralizado sobre as conversões de dados do seu sistema. Se você criou uma tabela de limite global que
cores definidas para intervalos de valores, e você precisa mudar uma cor ou um valor porque você está mudando para um sistema
diferente, você só precisa mudar em um lugar.

Para criar uma tabela de limite global que é usada para todos os alarmes atuais no sistema:

1. Na árvore do sistema iFIX WorkSpace, clique duas vezes na pasta Globals.

2. Clique com o botão direito do mouse no ícone Usuário e selecione Criar tabela de limites no menu pop-up. O costume
A caixa de diálogo Lookup Table aparece conforme mostrado na figura a seguir.

54 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

Caixa de Diálogo Tabela de Pesquisa Personalizada

3. Mantenha os valores padrão da caixa de diálogo e clique em OK. Um ícone de tabela de limite aparece sob o
Ícone do usuário.

Para nomear a tabela:

1. Na árvore do sistema iFIX WorkSpace, clique com o botão direito do mouse no ícone da nova tabela de limites e selecione Propriedade
Janela do menu pop-up.

2. Insira um valor para a propriedade Nome. Se você estiver criando uma tabela de limite global que é usada para todos os alarmes atuais
no sistema, insira CurrentAlarmThresholds.

Depois de nomear sua tabela de limites, você pode fazer conexões de objetos iFIX para esta tabela. O procedimento a seguir fornece um
exemplo de como conectar um objeto, neste caso, um oval, a uma tabela de limite global denominada CurrentAlarmThresholds.

Para conectar um oval a uma tabela de limite global:

1. Crie um oval.

2. Clique no botão Especialista em cores de primeiro plano.

3. No campo Data Source, insira um tag de banco de dados.

4. Selecione a opção Alarme atual.

5. Marque a caixa de seleção Usar Tabela Limite Compartilhada.

6. Insira CurrentAlarmThresholds, o nome da tabela global que você criou, na tabela compartilhada
campo.

O oval agora usará a tabela CurrentAlarmThresholds em vez de uma tabela personalizada. Da mesma forma, você pode configurar todos os
objetos que são atribuídos a uma animação Color By Current Alarm para usar a tabela Cur rentAlarmThresholds. Se
você precisar alterar uma cor, valor ou tipo, basta alterá-lo em um local.

Criando um procedimento global

© 2022 General Electric Company. Todos os direitos reservados. 55


Machine Translated by Google

Você pode querer acesso global a sub-rotinas e funções se as usar com frequência. iFIX fornece global
sub-rotinas e funções, como OpenPicture, ToggleDigitalPoint e OnScan, que você pode usar em
suas fotos e horários. Você também pode incluir suas próprias sub-rotinas e funções globais no User
página.
Para adicionar uma sub-rotina global à página do usuário:

1. Abra o Editor do Visual Basic.

2. Se o Project Explorer ainda não estiver exibido no VBE, selecione Project Explorer na exibição
cardápio.

3. No Project Explorer, selecione o projeto Project_User.

4. No menu Inserir, clique em Módulo. Você precisa armazenar seu código em um módulo e não no Project_
A própria página do usuário.

5. Digite o seguinte código na janela Código:

Public Sub DisplayMyMessage()


MsgBox "Esta é minha caixa de mensagem."
End Sub

6. Feche a janela Code e crie um retângulo em sua imagem.

7. Clique com o botão direito do mouse no retângulo e selecione Editar script no menu pop-up. VBE abre o Code win
dow para o evento Click do retângulo. Digite o seguinte na janela Código:

ExibirMinhaMensagem

8. Ao clicar no retângulo no ambiente de tempo de execução, a caixa de mensagem que foi armazenada em
a página Project_User é exibida.

Acessando dados em tempo real

O iFIX oferece flexibilidade para acessar todos os tipos de dados para executar seus aplicativos de script. Este capítulo
detalha como acessar dados em tempo real através de vários métodos. Os exemplos mostram como usar o
Data System OCX para realizar leituras e gravações em grupo e como gravar em um tag de banco de dados.

Consulte as seções a seguir para obter mais detalhes:

l Usando o sistema de dados OCX para leituras e gravações de grupo

l Lendo e Escrevendo em um Tag de Banco de Dados

Usando o sistema de dados OCX para leituras e gravações de grupo

O Data System OCX (FixDataSystems.ocx) é um controle lógico que oferece capacidade flexível de leitura e gravação,
permitindo que você execute leituras e gravações em grupo em um banco de dados. Normalmente, realizando uma leitura e
gravar por meio de scripts envolve as seguintes etapas:

1. Crie o item de dados (DI).

2. Valide e adicione a DI ao servidor OPC.

56 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

3. Escreva o valor na DI.

Esse processo pode levar tempo, pois cada item de dados deve ser processado no servidor OPC. Se o servidor OPC estiver
executando em velocidades mais lentas, o processo pode demorar ainda mais. O Data System OCX simplifica esse processo
ao não exigir que você escreva em um único item de dados, alterando o processo de leitura e gravação para as seguintes
etapas:

1. Crie o item de dados (DI).

2. Valide e adicione a DI ao servidor OPC.

3. Manter a DI na memória, criar e validar outras DIs, ler e escrever as DIs em grupo.

Como permite leituras e gravações em grupo, o Data System OCX otimiza a leitura e a gravação em um grande número de
pontos de dados. Você pode criar grupos de scripts VB que podem ser retornados da memória e gravados a qualquer momento.

NOTA: Para usar o Datasystem OCX, você deve garantir que a referência à biblioteca de tipos do Intellution iFIX Data System Access
Control v1.0 esteja incluída no projeto. Para adicionar esta referência no VBA, no menu Ferramentas, clique em Referências. A caixa de
diálogo Referências é exibida. Marque a caixa de seleção Intellution iFIX Data System Access Control v1.0 Type Library e clique em OK.

O exemplo a seguir ilustra como usar o Data System OCX para criar um grupo de tags de banco de dados e executar uma
leitura e gravação de grupo neles.

O exemplo a seguir grava um valor de 50 em um grupo de tags de banco de dados:


Exemplo: gravação em grupo

Public Sub WriteValueToGroup()

'Cria o objeto do servidor de dados.


Dim FDS As Object Dim
DIItem As Object

'Cria uma instância do controle Data System.


Set FDS = CreateObject("FixDataSystems.Intellution FD Data _
Controle de sistema")

'Você não precisa chamar CreateObject se incluir uma 'referência ao FIX Data System.
Este controle pode lidar com 'vários grupos'. Para este exemplo, precisamos apenas de um
grupo.
'Vamos adicionar todas as fontes de dados com novos alarmes ao
'grupo e faça uma leitura em grupo e depois uma gravação em grupo.
FDS.Groups.Add "TankGroup"

'Adicione todas as tags de tanque à coleção de itens de dados do sistema de dados OCX'.
Você pode adicionar ou excluir grupos sem afetar a ordem do grupo caso a posição de um item
mude. Isso é obtido especificando um nome de grupo '("TankGroup") em vez de listar
números de itens.

FDS.Groups("TankGroup").DataItems.Add "FIX32.MYNODE.TANK1.F_CV"
FDS.Groups("TankGroup").DataItems.Add "FIX32.MYNODE.TANK2.F_CV"
FDS.Groups("TankGroup").DataItems.Add "FIX32.MYNODE.TANK3.F_CV"
FDS.Groups("TankGroup").DataItems.Add "FIX32.MYNODE.TANK4.F_CV"
FDS.Groups("TankGroup").DataItems.Add "FIX32.MYNODE.TANK5.F_CV"
FDS.Groups("TankGroup").DataItems.Add "FIX32.MYNODE.TANK6.F_CV"
FDS.Groups("TankGroup").DataItems.Add "FIX32.MYNODE.TANK7.F_CV"
FDS.Groups("TankGroup").DataItems.Add "FIX32.MYNODE.TANK8.F_CV"
FDS.Groups("TankGroup").DataItems.Add "FIX32.MYNODE.TANK9.F_CV"
FDS.Groups("TankGroup").DataItems.Add _
"FIX32.MYNODE.TANK10.F_CV"

'Leia todos os itens de dados que você adicionou ao controle do Sistema de Dados'.

© 2022 General Electric Company. Todos os direitos reservados. 57


Machine Translated by Google

FDS.Groups("TankGroup").Read

'Se o valor de cada tag não for 50, defina-o como 50.
Para cada DIItem em FDS.Groups("TankGroup").DataItems
Se DIItem.Value <> 50 Então
DIItem.Value = 50
Fim se
Próximo

'Agora escreva 50 para cada tag no banco de dados.


FDS.Groups("TankGroup").Write
End Sub

O próximo exemplo faz o seguinte:

1. Cria um Sistema de Dados OCX FDS.

2. Adiciona o grupo de dados DataGroup1 à coleção Groups.


3. Adiciona um item de dados à coleção DataItems.

4. Lê o grupo DataGroup1.
5. Lê o DataItem.
Exemplo: leitura em grupo
Public Sub ReadValueFromGroup()
'Cria o Sistema de Dados OCX
Dim FDS como objeto
Set FDS = CreateObject("FixDataSystems.Intellution FD Data System Control") _

'Adiciona um grupo à coleção Grupos


FDS.Groups.Add ("DataGroup1")
FDS.Groups.Item("DataGroup1").DataItems.Add("Fix32._
ESTENODE.AI1.F_CV")

'Ler DataGroup1
FDS.Groups.Item("DataGroup1").Read

'Lê o DataItem
FDS.Groups.Item("DataGroup1").DataItems.Item(1).Read
End Sub

O exemplo final nesta seção mostra como realizar gravações em fontes de dados alternativas:

1. Cria um Sistema de Dados OCX FDS.

2. Adiciona o grupo de dados DataGroup1 à coleção Groups.


3. Adiciona um item de dados à coleção DataItems.

4. Grava o valor do Grupo DataGroup1.


5. Grava um valor no DataItem.
Exemplo: gravações em fontes alternativas
Public Sub WriteToAlternateSources()
'Cria o Sistema de Dados OCX
Dim FDS como novo FixDataSystem
Dim g1 As FixDataSystems.Group

'Cria o primeiro grupo para ler


FDS.Groups.Add("DataGroup1")
Set g1=FDS.Groups.Item("DataGroup1")

'Adiciona um item ao grupo para ser lido

58 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

g1.DataItems.Add("Fix32.MYNODE.AI1.F_CV")

'Lê o grupo g1.Read


'Obtém o
valor do item
Dim x As Long
x=g1.DataItems.Item(1).Value

'Cria o segundo grupo para escrever Dim g2 As


FixDataSystems.Group
FDS.Groups.Add("Group2")
Set g2=FDS.Groups.Item("Grupo2")

'Adicione o item, defina seu valor e escreva o grupo


g2.DataItems.Add("Fix32.MYNODE.AI2.F_CV")
g2.DataItems.Item(1).Value = x+1 g2.Write End
Sub

Para obter mais informações sobre como usar o Data System OCX, incluindo suas propriedades e métodos relacionados, consulte o tópico do
objeto DataSystem OCX do livro eletrônico iFIX Automation Interfaces.

Lendo e escrevendo em um tag de banco de dados

Existem várias maneiras de escrever um valor em uma tag de banco de dados. Os exemplos nesta seção mostram como:

l Gravar um valor diretamente em um tag de banco de dados definido .

l Escreva um valor em um tag de banco de dados usando a sub-rotina global WriteValue.

l Escreva um valor em um tag de banco de dados usando sua propriedade Value.

NOTAS:

l Uma gravação não assinada ocorre quando uma tag de banco de dados é configurada para assinatura eletrônica, mas você grava um
valor diretamente nessa tag sem capturar uma assinatura. Se estiver trabalhando em um ambiente seguro com a opção Assinatura
Eletrônica habilitada, você deve estar ciente do impacto das gravações não assinadas no banco de dados do processo. l As

gravações não assinadas podem se originar de scripts. Consulte a seção Implicações de gravações de banco de dados com natureza
de assinatura eletrônica do manual Usando assinaturas eletrônicas para obter informações detalhadas.

Gravando um valor em uma tag de banco de dados definida

A maneira mais fácil de gravar um valor em uma tag de banco de dados definida é realizar uma gravação direta:

FIX32.NODE.AI1.F_CV = 50#

Neste exemplo, um valor de 50 é gravado na tag do banco de dados FIX32.NODE.AI1.F_CV. Devido às restrições impostas pelas convenções
de nomenclatura do VBA, este não é o método recomendado para escrever valores por meio de script VBA (consulte a seção Convenções
de nomenclatura do VBA ). Os métodos mais fáceis para ler e gravar valores por meio de script VBA são usando as sub-rotinas WriteValue e
ReadValue. Essas sub-rotinas são descritas com mais detalhes na próxima seção.

Escrevendo um valor usando a sub-rotina WriteValue

© 2022 General Electric Company. Todos os direitos reservados. 59


Machine Translated by Google

Para superar as limitações das convenções de nomenclatura do VBA, o iFIX fornece as sub-rotinas globais WriteValue e
ReadValue para escrever valores e ler valores de tags de banco de dados. Os dois exemplos a seguir mostram como usar a
sub-rotina WriteValue para escrever um valor em um tag.

Este script grava um valor de 50 na tag FIX32.MYNODE.AI-1.F_CV:

Subcomando Privado CommandButton1_Click()


WriteValue "50", "AI-1"
Sair Sub

Se você omitir o segundo parâmetro, a sub-rotina WriteValue grava um valor de 60 na primeira conexão do objeto selecionado no
ambiente de tempo de execução. Por exemplo, digamos que você tenha um retângulo selecionado em sua imagem e esse
retângulo tenha uma animação VerticalFillPercentage vinculada à tag FIX32.MYNODE.AO3.F_CV. Quando você
clica em um botão contendo o seguinte script:

Subcomando Privado CommandButton1_Click()


WriteValor "60"
Sair Sub

O iFIX grava um valor de 60 no tag FIX32.MYNODE.AO3.F_CV.

Escreva um valor usando a propriedade Value do Tag do banco de dados

Este exemplo pressupõe que haja uma animação colorida em uma forma chamada Rect1. Ele recebe o tag do banco de dados
conectado à propriedade ForegroundColor de Rect1 e escreve um valor de 70.

Exemplo: Utilizando a Propriedade Value do Tag do Banco de Dados

Subcomando Privado CommandButton1_Click()


Dim objDataTag como objeto
Dim blnHasConnection como booleano
Dim lStatus tão longo
Dim lIndex as Long
Dim strPropertyName como String
Dim strExpression as String
Dim strFQE como String
Dim vtAnimationObjects
Dim objDataTag como objeto
Dim strDataSourceName como String

Rect1.IsConnected "ForegroundColor", blnHasConnection, lIndex, lStatus _

Rect.GetConnectionInformation lIndex, strPropertyName, strExpression, strFQE, _


vtAnimationObjects

'Assuma que o primeiro objeto de Animação é o objeto de animação de cor que você
está procurando. Defina a string 'nome para a fonte de dados igual à fonte de dados do
'objeto de animação. strDataSourceName= vtAnimationObjects(0).Source

'Use o método FindObject para obter o tag do banco de dados 'objeto com o nome
de string FIX32.MYNODE.AI1.F_CV.
Set objDataTag = _
System.FindObject("FIX32.MYNODE.AI1.F_CV")

'Define a propriedade Value do objeto Tag do Banco de Dados 'igual a 70.

ObjDataTag.Value = 70

60 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

End Sub

Acessando dados de um banco de dados relacional

O iFIX não apenas oferece a capacidade de acessar dados em tempo real, mas também a flexibilidade de acessar dados de um banco
de dados relacional. Este capítulo mostra como acessar dados de um banco de dados relacional usando o Act iveX Data Objects
(ADO).

O capítulo também discute como consultar efetivamente um banco de dados SQL. Você também pode executar esta tarefa
usando o VisiconX, que agora está incluído como parte integrante do iFIX.

Para obter mais informações sobre o VisiconX, consulte a seção Usando o VisiconX manual.

Acesso ao banco de dados em VBA: MDAC

Embora o iFIX suporte o Data Access Object (DAO), o Remote Data Object (RDO) e o ActiveX Data Object (ADO), é recomendado na
maioria dos casos que você use o ADO para todos os scripts iFIX VBA que lidam com o acesso ao banco de dados. O ADO faz
parte do Microsoft Data Access Components (MDAC).

Para obter um resumo das tecnologias de banco de dados da Microsoft, consulte o artigo ID 190463 no site da Microsoft.
Este artigo descreve as tecnologias de banco de dados, como MDAC, DA SDK, ODBC, OLE DB, ADO, RDS e ADO/MD, e as
diferenças entre elas. Para obter informações sobre MDAC e iFIX, consulte o Software de terceiros instalado durante a instalação do
iFIX seção no livro eletrônico Getting Started with iFIX.

Usando objetos de dados ActiveX

Este exemplo mostra como manipular dados em um banco de dados relacional usando ActiveX Data Objects (ADO).
ADO é um download gratuito do site da Microsoft. Atualmente, a Microsoft está incentivando os desenvolvedores de VBA a usar ADO
em vez de outros tipos de acesso a dados. Os principais elementos abordados nesta seção incluem:

l Criação de objetos ADO.

l Preencher um MSFlexGrid de uma instrução Select.

l Adicionando um registro ao banco de dados.

l Atualizar um registro no banco de dados.

l Excluindo um registro do banco de dados.

Criando objetos ADO

Para usar ActiveX Data Objects para manipular dados, você precisa fazer referência à ActiveX Data Objects Library no projeto de sua
imagem. Selecione o comando References no menu VBE Tools e, em seguida, selecione a biblioteca de tipos ADO. As variáveis
de objeto são declaradas no nível do Módulo, o que significa que estão disponíveis em todas as outras rotinas neste exemplo. Se você
não precisar manipular os registros depois de lê-los, eles podem ser declarados no nível do Procedimento.

© 2022 General Electric Company. Todos os direitos reservados. 61


Machine Translated by Google

Exemplo: Criando um conjunto de registros ADO


'Declarações Gerais
Dim conODBC como ADODB.Connection
'Isso armazena o link para o banco de dados.
Dim adoRS As ADODB.Recordset 'Isso armazena
os resultados da consulta.

Private Sub Iniciado()


Dim strQuery As String
Em caso de erro Ir para ErrorHandler

'Consulta SQL que o ADO executará. strQuery =


"SELECT Recipe_ID, Recipe_Name, Batch_Size, " _
& "Milk_Quan , Choc_Quan, Mix_Time, Milk_Type _ FROM ACCEPT_TEST &
"ORDER _BY _Recipe_Name ASC"

Set conODBC = New ADODB.Connection 'Criar objeto de


conexão ADO.

'Conectar ao banco de dados. A string de conexão pode ser sem DSN.


'Isso varia de acordo com o tipo de banco de
dados. conODBC.Open "driver= _
&
"
Servidor SQL};servidor=trovão;uid=sa;pwd=;banco de dados=mestre"
Definir adoRS = Novo ADODB.Recordset
'Criar objeto ADO Recordset.

'Execute a consulta e defina as opções para permitir o acesso de leitura/gravação. adoRS.Open


strQuery, conODBC, adOpenDynamic, adLockPessimistic, adCmdText Exit _
Sub

ErrorHandler:
HandleError
End Sub

Preenchendo um MSFlexGrid ou planilha semelhante OCX com ADO

Para obter os dados do conjunto de registros para exibição, uma planilha ou grade é útil. O código a seguir mostra como copiar
os dados na grade.

NOTA: O exemplo fornecido aqui usa o MSFlexGrid. Você pode usar esta ou qualquer planilha semelhante,
como o VideoSoft VSFlexGrid, em seus aplicativos. A GE não fornece o MSFlexGrid; é referenciado na documentação
apenas para fins de ilustração.

Exemplo: Preenchendo um Flexgrid com dados de um conjunto de registros ADO

Este exemplo baseia-se no exemplo anterior para a população de ADORs. Ele assume que já existe um flexgrid em
uma imagem.

Private Sub LoadRecipes()


Dim iRow como inteiro
Dim iCol como inteiro
Em caso de erro Ir para ErrorHandler

'Definir tamanhos e títulos de coluna MSFlexGrid.


InitGridName
iLinha = 0

'Leia todo o registro para preencher a grade.


Enquanto adoRS.EOF <> Verdadeiro

62 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

iRow = iRow + 1
MSFlexGrid1.Row = iRow
Para iCol = 0 a 5
MSFlexGrid1.Col = iCol
MSFlexGrid1.Text = adoRS(iCol)

'Depois de definir a linha e a coluna da grade, insira 'dados na célula.

Próxima iCol

'Mover para o próximo registro retornado da consulta. adoRS.MoveNext

Aplicar

'O número da linha mostrará o número de registros retornados.

RecipeCount.Value = Str(iRow)
Sair do Sub
ErrorHandler:
HandleError
End Sub

Adicionando um registro ao banco de dados por meio do ADO

Se o conjunto de registros não for aberto como somente leitura, você poderá adicionar registros ao banco de dados por meio do ADO.

Exemplo: Adicionando um registro a um banco de dados usando um conjunto de registros ADO

Private Sub AddRecipe ()


Dim lIndex tão longo
Em caso de erro Ir para ErrorHandler

If RecipeName.Value = MsgBox "Insira "" Então


os parâmetros da receita primeiro",_ vbExclamation, "Controle da receita"

Sair Sub
Fim se
adoRS.AddNew 'Adiciona um novo registro ao conjunto de registros.

'Preenche o registro com dados. adoRS!Batch_Size =


CLng(BatchSize.Value)
Milk_Quan = CLng(MilkQuan.Value) adoRS!Choc_Quan
= CLng(ChocQuan.Value) adoRS!Mix_Time = CLng(MixTime.Value)
adoRS!Milk_Type = CLng("1") adoRS!Recipe_Name =
RecipeName.Value adoRS.Update ' Commits o
novo registro no banco de dados. adoRS.Requery 'Atualiza o
conjunto de registros.

LoadRecipes 'Preenche a grade.


Sair Sub

ErrorHandler:

'Lidar com o erro retornado se alguma coluna precisar ser exclusiva' (como o nome da receita), mas não era.

Se Err.Number = -2147217887 Então

MsgBox "Os nomes das receitas devem ser exclusivos", vbExclamation, _


"Receita" e "Controle"
Sair Sub
Fim se
HandleError

End Sub

© 2022 General Electric Company. Todos os direitos reservados. 63


Machine Translated by Google

Atualizando um registro no banco de dados através do ADO

Se o conjunto de registros não for somente leitura, você poderá alterar os valores em um registro e gravá-los no banco de dados com o ADO.

Exemplo: atualizando um banco de dados usando um conjunto de registros ADO

Private Sub UpdateRecipe ()


Em caso de erro Ir para ErrorHandler

'Verifique a configuração da chave primária antes da atualização.


Se RecipeID.Value = MsgBox "" Então

"Selecione uma receita primeiro", vbExclamation, _


"Receita" e "Controle"
Sair Sub
Fim se

adoRS.Requery 'Atualiza o conjunto de registros.


Enquanto adoRS!Recipe_ID <> CLng(RecipeID.Value)
adoRS.MoveNext

'Mover para o registro selecionado a ser atualizado.


Aplicar

'Defina quaisquer valores alterados. adoRS!


Batch_Size = CLng(BatchSize.Value) adoRS!Milk_Quan =
CLng(MilkQuan.Value) adoRS!Choc_Quan = CLng(ChocQuan.Value)
adoRS!Mix_Time = CLng(MixTime.Value) adoRS.Update 'Confirma
o registro atualizado para o base de dados. adoRS.Requery
'Atualiza o conjunto de registros.

LoadRecipes 'Preenche a grade.


Sair Sub
ErrorHandler:
HandleError

End Sub

Excluindo um registro do banco de dados por meio do ADO

Se o conjunto de registros não for somente leitura, você poderá excluir os registros do banco de dados com o ADO.

Exemplo: Excluir um registro de um banco de dados usando um conjunto de registros ADO

Private Sub DeleteRecipe()


Em caso de erro Ir para ErrorHandler

'Verifique a configuração da chave primária antes de excluir.


Se RecipeID.Value = MsgBox "" Então

"Selecione uma receita primeiro", vbExclamation, "Controle de receita" _

Sair Sub
Fim se

adoRS.Requery 'Atualiza o conjunto de registros.


Enquanto adoRS!Recipe_ID <> CLng(RecipeID.Value)
adoRS.MoveNext

'Mover para o registro selecionado a ser atualizado.


Wend
adoRS.Delete 'Exclui o registro atual no conjunto de registros. adoRS.Update 'Confirma o registro excluído

no banco de dados. adoRS.Requery 'Atualiza o conjunto de registros.

LoadRecipes 'Preenche a grade.


Sair Sub

64 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

ErrorHandler:
HandleError

End Sub

Para obter mais informações sobre o ADO, consulte a seção Tópico Avançado : Usando SQL .

Tópico Avançado: Usando SQL

A linguagem de consulta estruturada (SQL) é uma linguagem padrão usada por bancos de dados relacionais para recuperar, atualizar e
gerenciar dados. Embora forneça a sintaxe comum para uso de aplicativos, ele não fornece uma interface de programa de aplicativo
(API) comum. Open Database Connectivity (ODBC) é a API padrão da Microsoft para acessar, visualizar e modificar dados de uma
variedade de bancos de dados relacionais.

Anteriormente, acessar dados significava escrever um script do Microsoft Visual Basic, o que pode ser tedioso e requer
conhecimento do Visual Basic. No entanto, o VisiconX, um componente da versão atual do iFIX, utiliza a tecnologia Microsoft ADO. Ao
usar o ADO, o VisiconX permite que você acesse dados com facilidade e rapidez sem escrever scripts. Para obter mais informações,
consulte a seção Usando o VisiconX manual.

Trabalhando no ambiente de tempo de execução

O iFIX VBA permite que você controle dinamicamente seus objetos e imagens enquanto trabalha no ambiente de tempo de execução.
Este capítulo se concentra em como você pode criar scripts de seus aplicativos para executar uma variedade de funções em tempo de
execução, como:

l Mudança de fontes de dados. l

Alterar propriedades em objetos, ou em penas de um gráfico. l Inserção

de dados em formulários globais.

Alterando fontes de dados

Esta seção ilustra como você pode escrever scripts que alteram dinamicamente a fonte de dados de objetos "on the fly" em tempo de
execução. Como discutimos no capítulo Trabalhando com objetos iFIX , a animação de objetos começa fazendo uma conexão com uma
fonte de dados. O primeiro exemplo mostra como criar uma conexão direta no ambiente de tempo de execução. Inclui os seguintes tópicos:

l Criando uma conexão direta com um objeto

l Alterando a legenda de um objeto de texto

l Alterando o Valor Atual de um Objeto Variável

l Alterando a fonte de dados de um link de dados

l Alterar a fonte de dados de um evento FIX

l Substituindo as propriedades da string

NOTA: Quando você altera uma fonte de dados em tempo de execução, a alteração não permanece intacta quando você retorna ao
ambiente de configuração. O comportamento da imagem depende do status do cache da imagem. Além disso, se você adicionar ou

© 2022 General Electric Company. Todos os direitos reservados. 65


Machine Translated by Google

excluir scripts no modo de execução, a imagem não será carregada no cache quando for fechada. Consulte a seção Usando Cache de Imagens
seção do manual Criando Imagens.

Criando uma conexão direta com um objeto

O exemplo a seguir conecta uma tag AI à porcentagem de preenchimento horizontal de um retângulo quando você clica nele
no ambiente de tempo de execução.

Para conectar uma tag AI à porcentagem de preenchimento horizontal de um retângulo ao clicar nele:

1. Desenhe um retângulo na tela.

2. Crie um Tag de banco de dados AI com RA como endereço de E/S (usando o driver SIM).

3. Clique com o botão direito do mouse no retângulo e selecione Editar script no menu pop-up.

4. Insira o seguinte código no evento Click do retângulo:

Dim lstatus as Long


Rect1.Connect "HorizontalFillPercentage", _ "Fix32.Thisnode.AI.F_CV", lstatus

5. Mude para Executar e clique no retângulo.

Antes de clicar no retângulo, ele é sólido. Depois de clicar nele, o retângulo começa a ser preenchido com base na tag AI
valor. Você conectou dinamicamente o nível de preenchimento do retângulo à tag do banco de dados.

Exemplo: Alterando a Fonte de Dados de uma Animação Conectada a um Objeto

Conforme discutimos no capítulo Trabalhando com objetos iFIX , existem três tipos diferentes de animação
objetos — Pesquisa, Linear e Formato. O exemplo abaixo mostra como definir um objeto e alterar
a origem do objeto de animação que está conectado a ele enquanto você está no ambiente de tempo de execução.

Para definir um objeto e alterar a origem do objeto de animação que está conectado a ele:

1. Crie um bloco AI (AI1) com RA como endereço de I/O e outro bloco AI (AI2) com RG como I/O
endereço.

2. Crie dois links de dados. Conecte um link de dados ao AI1 e conecte o outro ao AI2.

3. Adicione um retângulo e anime sua cor de primeiro plano (um objeto de pesquisa) usando AI1 como fonte de dados.

4. Agora anime o preenchimento do retângulo (um objeto Linear) e use AI1 como fonte de dados.

5. Edite o evento Click do retângulo.

6. Digite o seguinte código:

Dim AllObj como objeto


Dim SingleObj como objeto
Contagem Dim como inteiro
Dim ObjCount como inteiro

'Definir AllObj igual à coleção de objetos contidos


'na foto.
Definir AllObj = _
Application.ActiveDocument.Page.ContainedObjects

'Verifique quantos objetos estão na imagem.


Para cada SingleObj em AllObj
Contagem = AllObj.Contagem
'Olhe através de todos os objetos na imagem.
Enquanto Contagem > 0

'Se o objeto atual (forma) contiver objetos,

66 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

'verifica o número de objetos (animações) que ele contém.


Se SingleObj.ContainedObjects.Count > 0 Então
ObjCount = SingleObj.ContainedObjects.Count
'Para cada objeto contido no objeto atual,
'verifica o nome da classe.
Enquanto ObjCount > 0
Selecione Case _
SingleObj.ContainedObjects._
Item(ObjCount).ClassName
'Se o objeto contido for um Lookup
'(tabela), altere a fonte de dados para
'FIX32.THISNODE.AI2.F_CV

Caso "Pesquisa"
SingleObj.ContainedObjects._
Item(ObjCount).Source = _
"Fix32.Thisnode.AI2.F_CV"
'Se o objeto contido for um objeto Linear,
'muda a fonte de dados para
'FIX32.THISNODE.AI2.F_CV

Caso "Linear"
SingleObj.ContainedObjects._
Item(ObjCount).Source = _
"Fix32.Thisnode.AI2.F_CV"
Finalizar Seleção

ObjCont = ObjCont - 1
Aplicar
Fim se
Contagem = Contagem - 1
Aplicar

Próximo SingleObj

7. Mude para o ambiente de tempo de execução e clique no retângulo.

As animações de Preenchimento e Cor mudam do valor atual de AI1 para o valor atual de AI2.

Alterando a legenda de um objeto de texto

O exemplo a seguir altera a legenda do texto inserido ao clicar no texto em tempo de execução.

Para alterar a legenda de um objeto de texto:

1. Crie um objeto Texto e digite "Olá".

2. Edite o evento Click do objeto Texto.

3. Digite o seguinte código:

Text1.Caption = "Nova legenda"

4. Mude para Executar e clique no objeto Texto.

A legenda do objeto Texto mudará de Hello para New Caption.

Alterando o valor atual de um objeto variável

© 2022 General Electric Company. Todos os direitos reservados. 67


Machine Translated by Google

Este exemplo mostra como escrever um script que altera o valor atual de um objeto Variable ao clicar no texto em tempo de execução.

Para alterar a legenda de um objeto Variável:

1. Crie um objeto Variável.

2. Altere o tipo do objeto para Long.

3. Crie um objeto Texto.

4. Usando a caixa de diálogo Animações, anime a Legenda do objeto Texto usando o Curr do objeto Variável
rentValue como sua fonte de dados.

5. Clique com o botão direito do mouse no objeto Texto e selecione Editar script no menu pop-up.

6. Insira o seguinte código no evento Click do objeto Texto:


Variable1.CurrentValue = Variable1.CurrentValue + 10

7. Mude para o ambiente de tempo de execução e clique no objeto Texto.

A legenda do objeto Texto é incrementada em 10 (assim como o valor atual da Variável).

Alterando a fonte de dados de um link de dados

Este exemplo detalha como alterar a fonte de dados de um link de dados no ambiente de tempo de execução usando o
Objeto de formato.

Para alterar a fonte de dados de um link de dados usando o objeto Format:

1. Crie um bloco AI com RA como endereço de E/S e um bloco DO no banco de dados.

2. Crie um link de dados e conecte-o ao bloco AI.

3. Clique com o botão direito do mouse no link Dados e selecione Editar script no menu pop-up.

4. Digite o seguinte código no evento Click do link Dados:

DataLink1.ContainedObjects.Item(1).Source = "Fix32.Thisnode.DO.F_CV"_

5. Inicialize o bloco DO, mude para o ambiente de tempo de execução e clique no link Dados.

A legenda do link de dados muda para o valor atual do bloco DO.

Alterar a fonte de dados de um evento FIX

As etapas a seguir descrevem como alterar a fonte de dados de um evento FIX no ambiente de tempo de execução
onment.

Para alterar a fonte de dados de um evento FIX no ambiente de tempo de execução:

1. No Database Manager, crie um bloco AI e um bloco DO.

2. Crie uma nova imagem.

3. Insira um evento FIX.

4. Nomeie o evento FIX e escolha o bloco AI como fonte de dados.

68 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

5. Adicione um retângulo à sua imagem. Clique com o botão direito do mouse no retângulo e selecione Editar script no pop-up
cardápio.

6. Insira o seguinte código no evento Click do retângulo:

Dim obj como objeto


Contagem Dim como inteiro

'Configura obj igual à coleção de objetos contidos na 'imagem ativa


Definir obj = Application.ActiveDocument.Page.ContainedObjects
Contagem = obj. Contagem

'Percorra todos os objetos na imagem para encontrar 'qualquer um que seja objeto de Evento.
Enquanto Contagem > 0

'Se o objeto for um objeto Event, altere sua fonte


Se obj.Item(Count).ClassName = "FixEvent" Então
obj.Item(Count).Source = "Fix32.ThisNode.DO.F_CV"
'Mostra uma caixa de mensagem que descreve a mudança.
"
MsgBox "O Fix Event & obj.Item(Count).Name & " agora está conectado à fonte _
de dados " &
_
obj.Item(Contagem).Fonte
Fim se
Contagem = Contagem - 1
Aplicar

7. Mude para o ambiente de tempo de execução e clique no retângulo. A caixa de mensagem aparece informando
que a fonte mudou.

Substituindo Propriedades de String

Você pode usar o objeto FindReplace para substituir propriedades de string de um objeto em tempo de execução. A seguir
O exemplo usa o método FindReplaceInObject para fazer isso.

O código neste exemplo pesquisa um grupo de objetos dentro de uma imagem e altera seus dados
fontes substituindo AO por AI.

Para pesquisar fontes de dados AO em uma imagem e substituí-las por fontes de dados AI:

1. Insira um link de dados e atribua Fix32.Thisnode.AO.F_CV como fonte de dados.

2. Insira um retângulo e anime seu HorizontalFillPercentage usando AO como fonte de dados.

3. Agora duplique o retângulo três vezes.

4. Selecione todos os retângulos e agrupe-os.

5. Nomeie o grupo "MyGroup".

6. Crie um botão de ação. Clique com o botão direito do mouse no botão Push e selecione Editar script no menu pop-up.

7. Digite o seguinte código no evento Click do botão Push:

Dim sucesso como booleano


FindReplace.FindReplaceInObject MyGroup, 4, "AO", "AI",_
Sucesso
'O 4 indica para pesquisar apenas nas fontes de dados.
8. Mude para o ambiente de tempo de execução e clique no botão Push.

O objeto FindReplace pesquisa MyGroup e altera todas as instâncias de AO para AI. Porque o
A fonte de dados do link de dados fica fora de MyGroup, ela permanece inalterada.

Criação de formulários globais para entrada de dados

© 2022 General Electric Company. Todos os direitos reservados. 69


Machine Translated by Google

Este exemplo mostra como criar um UserForm na página UserGlobals e referenciá-lo a partir de uma imagem
para fins de entrada de dados. Inserir formulários acessíveis em tempo de execução na página User Globals permite apenas
uma cópia do formulário no sistema. Isso torna o controle de versão mais fácil e minimiza o tamanho dos arquivos de imagem do
iFIX.

Este exemplo usa um formulário que você cria em User Globals. A figura a seguir mostra como deve ser
aparecem no ambiente de tempo de execução.

Caixa de Diálogo de Entrada de Dados

Este exemplo contém um UserForm frmListEntry e um módulo UGSubs, ambos localizados em Pro ject_User. O nome da imagem é
LISTENTRY1.GRF.
Exemplo: Código do Formulário

Opção explícita
Dim strDataSource como String
'Sub-rotina personalizada para passar itens DataSource e List para o formulário
Public Sub SetupTheData(DataSource as String, Item 1 opcional como String, _
Item 2 opcional como String, Item 3 opcional como String, Item 4 opcional como String, Item _
5 opcional como String, Item 6 opcional como String) _

'Obtém a fonte de dados e quaisquer itens passados para a lista.


'Este exemplo usa seis itens, mas não há limite.

strDataSource = DataSource
Se Item1 <> "" Então EntryBox.AddItem Item1
Se Item2 <> "" Então EntryBox.AddItem Item2
Se Item3 <> "" Então EntryBox.AddItem Item3
Se Item4 <> "" Então EntryBox.AddItem Item4
Se Item5 <> "" Então EntryBox.AddItem Item5
Se Item6 <> "" Então EntryBox.AddItem Item6

End Sub

Subscrito Privado CancelButton_Click()


Descarregue-me

End Sub

Subscrito privado OKButton_Click()


Dim DataObj como objeto

Em caso de erro Ir para ErrorHandler

'Escrever o valor escolhido da lista no tag.


Definir DataObj = System.FindObject(strDataSource)
DataObj.Value = EntryBox.Value

70 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

Descarregue-me
Sair do Sub
ErrorHandler: MsgBox

"Erro" + Str(Err.Número) + " ocorreu" _


+ Chr(10) + Chr(13) + Err.Descrição

End Sub

Exemplo: Código do Módulo

Opção Explicit 'Declara o


objeto Form.
'Isso deve estar em um Módulo para usar o tipo de dados definido pelo usuário.
'O tipo de dados definido pelo usuário permite que as informações rápidas e o
'completo automático funcionem.
Public ListForm As frmListEntry Public Sub GetListForm()

'Cria uma nova instância do formulário.

Definir ListForm = Novo frmListEntry

End Sub

Exemplo: código de objeto iFIX

Subcomando Privado CommandButton1_Click()

Em caso de erro Ir para ErrorHandler


'Cria uma instância do formulário.
UGSubs.GetListForm

'Passe o tag para controlar e carregar a lista do formulário com 'opções. Use texto ou números
conforme apropriado para o tipo de dados 'tag-field'.

UGSubs.ListForm.SetupTheData _
"Fix32.BATCH1.BATCH-RECIPENAME.A_CV", _ "Desligado", "Baixo",
"Médio", "Alto"
'Mostre o formulário.
UGSubs.ListForm.Show
Sair Sub
ErrorHandler:
HandleError

End Sub

Trabalhando com o Agendador

Esta seção discute brevemente o aplicativo Scheduler e a função VBA DoEvents. Inclui os seguintes tópicos:

l Agendador

l Função DoEvents

l Usando temporizadores no lugar de DoEvents

l Usando scripts com entradas baseadas em tempo

l Usando scripts com entradas baseadas em eventos

Para mais informações sobre o aplicativo Scheduler, consulte o Mastering iFIX manual. Para obter mais informações sobre a função
DoEvents, consulte o iFIX Automation Reference. Os exemplos que aparecem posteriormente nesta seção ilustram como trabalhar
com os dois objetos Scheduler: Timer e Event.

Agendador

© 2022 General Electric Company. Todos os direitos reservados. 71


Machine Translated by Google

Existem certas tarefas que você pode querer executar em um horário ou intervalo especificado, ou quando ocorre uma
alteração em um valor do banco de dados ou em qualquer valor do servidor de dados OPC. Por exemplo, você pode querer
executar um script que gera um relatório no final de cada turno ou substitui a imagem exibida no momento quando um ponto
de base de dados excede um determinado valor.

O Agendador permite criar, editar, monitorar e executar ambos os tipos de ações como entradas agendadas. No Agendador,
você define a hora ou o evento que aciona uma entrada programada e a ação, conhecida como operação , que deseja que
ocorra.

O Agendador é útil porque permite que o iFIX agende scripts baseados em tempo ou evento para serem executados como
tarefas de segundo plano. Isso o torna ideal para reduzir a sobrecarga, já que você não precisa usar o VBA para fins de
monitoramento. Como os agendamentos podem ser executados como tarefas em segundo plano, eles têm seu próprio
thread VBA. Isso permite que você tenha dois scripts em execução ao mesmo tempo; um em segundo plano e outro no
aplicativo ativo.

Se você estiver escrevendo scripts de uma tarefa em segundo plano que manipulará objetos ou imagens no iFIX
WorkSpace, você deve primeiro obter um ponteiro para o aplicativo WorkSpace. O script abaixo mostra como você pode usar
o método GetObject para fazer isso:

Dim App As Object Set


App = GetObject("", "WorkSpace.Application")

Assim que tiver o ponteiro para o aplicativo WorkSpace, você pode usar o objeto App em seu código para representar o objeto
Application no iFIX WorkSpace.

Veja o Mastering iFIX manual para obter mais informações sobre a tarefa FixBackgroundServer e o aplicativo Scheduler.

Função DoEvents

Dentro do iFIX, o VBA funciona como um aplicativo de thread único. O sistema pode iniciar mais de um script; no entanto,
apenas um script pode ser executado por vez. Quando um evento aciona um script, ele é colocado em uma fila. Cada script
na fila é executado na ordem em que é recebido depois que o script anterior é executado até a conclusão. Por esse motivo,
scripts que fazem loop e scripts que levam muito tempo para serem executados podem atrasar a execução dos scripts atrás
deles na fila. A função DoEvents permite que o sistema operacional processe eventos e mensagens aguardando na fila e
permite que um evento produza execução para que o sistema operacional possa processar outros eventos de interface do
usuário. Use a função VBA DoEvents em scripts que demoram muito para serem executados.

AVISO: Sempre que você ceder temporariamente o processador em um procedimento de evento, certifique-se de que o procedimento não
seja executado novamente a partir de uma parte diferente do seu código antes que a primeira chamada retorne; isso pode causar resultados
imprevisíveis. É altamente recomendável que você não use as funções DoEvents em seus scripts iFIX.

Consulte o arquivo de Ajuda do Visual Basic for Applications para obter mais informações, incluindo um exemplo da função
DoEvents.

Para obter mais informações sobre DoEvents, acesse o site de suporte da Microsoft e procure por ID do artigo: 118468.

Usando temporizadores no lugar de DoEvents

72 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

A chamada DoEvents permite que um programa processe eventos enquanto estiver no script VBA. No entanto, a chamada
DoEvents não pode controlar o que é executado e não controla o que está sendo executado no momento.

O script a seguir é um exemplo de uma chamada DoEvents:

Dim I como inteiro


Para I = 0 a 10000
Se I Mod 100 = 0 Então
DoEvents
'Execute eventos a cada centésima iteração através do loop
Fim se
'Faça alguma coisa
Proximo eu

Se seu código estiver vinculado a um evento, ele poderá ser executado novamente antes que DoEvents retorne. Se o código
estiver operando em dados globais ou dados que existem fora do escopo do script, você poderá corromper seus próprios dados
reinserindo a rotina.

Você pode resolver esse problema usando temporizadores no lugar de DoEvents para executar partes do código.

O script a seguir descreve a solução:

'Aqui está uma variável global para rastrear as iterações através do 'loop.

'Observe que é inicializado em zero pelo VBA Dim IndexCount As Integer

Sub StartRoutine() 'Execute esta rotina para iniciar

IndexCount = () 'Estamos iniciando um novo loop FixTimer.StartTimer 'Coloca


o cronômetro funcionando

End Sub

Private Sub StopRoutine()


'A rotina do timer executará isso quando concluída FixTimer.StopTimer

End Sub

Private Sub CfixPicture_Initialize()

'Certifique-se de que o cronômetro está parado no carregamento da imagem


PararRotina

End Sub

Subcomando Privado CommandButton1_Click().

'Isto iniciará a rotina a partir de um botão


IniciarRotina

End Sub
ÿ

Private Sub FixTimer_OnTimeOut(ByVal1TimerId As Long)


'Esta é a rotina do temporizador

'Esta variável garante que outro evento de timer não execute' a rotina

Estático iAlreadyHere como inteiro


Se (iJáAqui = 1) Então
Sair Sub

Fim se

© 2022 General Electric Company. Todos os direitos reservados. 73


Machine Translated by Google

'Bloquear outros chamadores

iJáAqui = 1
Dim I como inteiro

Para i = IndexCount até 10000

'Nota: sairemos deste loop antes de atingirmos 10.000

'Faça alguma coisa


Se i Mod 100 = 0 Então
IndexCount = i + 1 iAlreadyHere

= 0 'Timers agora podem executar esta rotina


Exit Sub 'Desistir do processo e permitir que outras coisas sejam executadas

Fim se

Proximo eu

StopRouting 'Terminamos iAlreadyHere = 0

End Sub

O uso de temporizadores para executar partes do código permite que o VBA, a imagem e as variáveis globais estejam
em um estado previsível durante a execução do script VBA.

Usando scripts com entradas baseadas em tempo

Existem certas tarefas que você deseja executar em um horário ou intervalo especificado ou quando ocorre uma alteração
no processo. Para agendar essas tarefas, você precisará definir o horário que aciona a ação que deseja que ocorra. Você
pode usar o aplicativo Scheduler dentro do iFIX ou pode escrever seu próprio script VBA. Para obter mais informações sobre o
Agendador, consulte o Agendador seção do manual Mastering iFIX.

O exemplo a seguir verifica periodicamente a quantidade de espaço disponível no disco rígido. Se a quantidade de espaço em
disco ficar muito baixa, ele dispara um alarme no banco de dados do iFIX. O evento OnTimeOut ocorre em um intervalo definido
nas propriedades do evento CheckDiskSpace.

Exemplo: verificar o espaço em disco e acionar um alarme se estiver muito baixo


'Primeiro, declare a chamada de função da API do Windows 'GetDiskFreeSpace
para que você possa usá-la para obter a quantidade de' espaço livre disponível no disco.

Função de declaração privada GetDiskFreeSpace Lib "kernel32" _


Alias "GetDiskFreeSpaceA" (ByVal lpRootPathName As String, lpSectorsPerCluster As Long, _
lpBytesPerSector As Long, lpNumberOfFreeClusters As Long, lpTotalNumberOfClusters _
_
Tão Longo) Tão Longo

'Verifique o espaço em disco no evento OnTimeOut do Timer Event'. Se for inferior a 150 MB,
defina um alarme.
'CheckDiskSpace é o nome do objeto Timer 'criado no Scheduler.

Private Sub CheckDiskSpace_OnTimeOut(ByVal lTimerId As Long)


Dim lResponder Tão Longo
Dim lpRootPathName As String
Dim lpSectorsPerCluster As Long

74 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

Dim lpBytesPerSector tão longo


Dim lpNumberOfFreeClusters desde que
Dim lpTotalNumberOfClusters As Long
Dim lBytesPerCluster tão longo
Dim lNumFreeBytes como duplo
Dim lDiskSpace como duplo

'Aviso: O parâmetro abaixo codifica C: como a unidade para 'verificar. Se você não possuir uma
unidade C:, este código retornará 0 'como o espaço livre. Você precisa alterar este parâmetro para
corresponder à unidade que deseja verificar.

lpRootPathName = "c:\" lAnswer =


GetDiskFreeSpace(lpRootPathName, lpSectorsPerCluster, _
lpBytesPerSector, lpNumberOfFreeClusters, _
lpTotalNumberOfClusters) lBytesPerCluster = lpSectorsPerCluster *
lpBytesPerSector lNumFreeBytes = lBytesPerCluster * lpN umberOfFreeClusters lDiskSpace =
Format(((lNumFreeBytes / 1024) / 1024), "0,00")
_

Se lDiskSpace < 150# Então


Fix32.NODE1.lowdiskspacealarm.f_cv = 1

Outro
Fix32.NODE1.lowdiskspacealarm.f_cv = 0

Fim se
End Sub

Usando scripts com entradas baseadas em eventos

Veja a seguir um exemplo de monitoramento de tempo de inatividade. O aplicativo Scheduler aguarda que o valor de
FIX32.NODE1.DOWNTIMESTART.F_CV seja verdadeiro. Quando verdadeiro, o script abre um formulário que permite ao usuário informar
o motivo da ocorrência do downtime. Quando o usuário clica em OK, o script abre o banco de dados apropriado e grava a hora, a data, a
fonte de dados e a descrição do tempo de inatividade no banco de dados.
Use os parâmetros na tabela a seguir para criar o objeto de evento e o formulário. Tenha o cuidado de colocar os botões de opção dentro
do quadro.

Propriedades do evento de início de tempo de inatividade


OBJETO CONFIGURAÇÃO DE PROPRIEDADE

Evento Nome Line1Packer1DownTime

Tipo de evento em
Fix32.NodeName.DownTimeStart.F_CV
verdadeiro Fonte de dados
Forma Nome frmDownTime

Rubrica Monitoramento de tempo de inatividade Registrando no banco de dados


Nome do botão de comando relacional cmdOK

Rubrica OK
Quadro Nome fraLine1Packer1

Rubrica Linha de embalagem 1


Nome do botão de opção Empacotador 1 optDownTimeReasonOne
Rubrica Material de embalagem ruim
Nome do botão de opção optDownTimeReasonTwo
Rubrica Garrafa caída ou atolamento de garrafa on-line para
Nome do botão de opção empacotador optDownTimeReasonThree
Rubrica Baixa pressão de óleo no acionamento do packer

© 2022 General Electric Company. Todos os direitos reservados. 75


Machine Translated by Google

Nome do botão de opção optDownTimeReasonFour


Rubrica <Deixe esta legenda em branco>
Caixa de texto Nome TxtDownTimeReasonFour
Habilitado Falso
Exemplo: Gravação de monitoramento de tempo de inatividade

'Coloque o seguinte código na sub-rotina criada após 'clicar no botão Editor VB na caixa de diálogo Modificar
entrada de evento.

'No evento OnTrue do objeto Event, inicialize o formulário 'com a fonte de dados do Event e depois
mostre o formulário.
'Line1Packer1DownTime é o nome do evento criado' no Scheduler.

Sublinha Privada1Packer1DownTime_OnTrue()
frmDownTime.InitializeDataSource _
(Line1Packer1DownTime.Source)
frmDownTime.Show

End Sub

Monitoramento de tempo de inatividade Registro no banco de dados relacional

'Coloque o seguinte código diretamente no formulário que você criou e 'defina uma referência para Microsoft DAO 3.X Object Libra

Public sDataSource como String

'Esta é a rotina de inicialização que é chamada do Event

'evento OnTrue do objeto. Ele cria uma instância pública do 'nome da string da fonte de dados para o
formulário usar.
Public Sub InitializeDataSource(DataSource As String)
sDataSource = DataSource

End Sub

'Quando o botão de opção ao lado da caixa de texto estiver selecionado, 'ative e defina o foco para a
caixa de texto.

Private Sub optDownTimeReasonFour_Click()

txtDownTimeReasonFour.Enabled = Verdadeiro
txtDownTimeReasonFour.SetFocus

End Sub

76 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

'Quando o formulário for ativado, defina a primeira opção como true Private Sub UserForm_Activate()
optDownTimeReasonOne.Value = True

End Sub

'Quando o usuário selecionar OK, armazene qual motivo ele escolheu.


Subprivado cmdOK_Click()
Dim DownTimeReason As String Se
optDownTimeReasonOne.Value = True Então
DownTimeReason = optDownTimeReasonOne.Caption
ElseIf optDownTimeReasonTwo.Value = Verdadeiro Então
DownTimeReason = optDownTimeReasonTwo.Caption
ElseIf optDownTimeReasonThree.Value = Verdadeiro Então
DownTimeReason = optDownTimeReasonThree.Caption
ElseIf optDownTimeReasonFour.Value = Verdadeiro Então
Se txtDownTimeReasonFour.Text <> "" Então
DownTimeReason = txtDownTimeReasonFour.Text
Outro

MsgBox "Por favor, digite um motivo para o evento de tempo de _


inatividade"
txtDownTimeReasonFour.SetFocus
Fim se
Fim se

'Chame a sub-rotina AddDownTimeEventData para adicionar as 'informações de tempo de


inatividade ao banco de dados.
Chame AddDownTIMeEventData(DownTimeReason)
Descarregue-me

End Sub

'Esta sub-rotina grava os dados no banco de dados e 'atualiza.

'Este banco de dados não foi fornecido e precisará ser criado' para que esta sub-rotina seja executada sem erro.

Public Sub AddDownTIMeEventData(DownTimeReason As String)

'Cria uma instância do espaço de trabalho.


Dim wrkSpace As Workspace Set wrkSpace
= CreateWorkspace("", "admin", "", dbUseJet)

'Abra o banco de dados de tempo de inatividade.


Dim db As Database Set db =

wrkSpace.OpenDatabase(System.PicturePath & "\downtime.mdb") _

'Cria um conjunto de registros.


Dim rs As Recordset Set rs =

db.OpenRecordset("Packaging", dbOpenDynaset)

'Configura o tempo de ocorrência do tempo de inatividade.


Dim TimeDate As Date TimeDate =
Agora
rs.AdicionarNovo
rs.Fields(1) = TimeDate rs.Fields(2) =
TimeDate rs.Fields(3) = sDataSource
rs.Fields(4) = DownTimeReason rs.Fields(5) =
Fix32.NODE1.downtimeperiod.f_cv rs.Update

End Sub

© 2022 General Electric Company. Todos os direitos reservados. 77


Machine Translated by Google

Manipulando Gráficos

Este capítulo mostra como usar scripts VBA para manipular gráficos para que eles exibam dados históricos e em tempo real para um
determinado valor de processo com o clique de um botão. Os exemplos neste capítulo mostram como executar as seguintes tarefas de
gráfico por meio de scripts:

l Alternar de dados em tempo real para dados históricos em tempo de execução.

l Rolar dados históricos em um gráfico.

l Atualize automaticamente os dados históricos em um gráfico.

l Defina as propriedades do gráfico e da caneta em tempo de execução.

l Adicione uma caneta.

l Excluir uma caneta.

l Altere as fontes de dados da caneta.

l Passando dados externos para uma pena.

l Alterar a duração de um gráfico.

l Alterar os horários de início e término de um gráfico.

l Aplicar zoom a uma caneta.

l Pausar um gráfico em tempo real.

Para que este exemplo funcione corretamente, você deve ter uma tag Extended Trend configurada anteriormente e já deve ter
tendência com sucesso dos dados desta tag em um gráfico. Além disso, você precisará adicionar três botões de comando à sua
imagem iFIX. A figura abaixo mostra como a imagem pode parecer.

78 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

Exemplo de tendências históricas

Mudando de tempo real para dados históricos

Este método usa duas canetas de gráfico para o mesmo valor - uma caneta em tempo real e uma caneta histórica - e usa
a propriedade Visibility para alternar entre as duas. Embora você possa fazer quase a mesma coisa simplesmente
alterando a propriedade Source em uma única pena, este script é mais vantajoso porque os dados históricos são buscados
enquanto a pena histórica está invisível. Portanto, os operadores não precisam esperar tanto tempo para exibir os dados
históricos. As canetas são trocadas quando o botão Voltar é clicado e o botão Avançar volta para o tempo real assim que a
rolagem retorna ao tempo presente.

O código desses botões é mostrado abaixo:

Exemplo: Botões Rolar para trás e Rolar para frente


Private Sub CommandButton2_Click() 'Botão de rolar para trás.
'Se a pena de tempo real voltar no tempo, mude 'para dados históricos.

Se Chart1.Pens.Item(1).ShowLine = 1 Então
'Torne a caneta em tempo real invisível e a caneta histórica visível.

Chart1.Pens.Item(1).ShowLine = False
Chart1.Pens.Item(2).ShowLine = True

© 2022 General Electric Company. Todos os direitos reservados. 79


Machine Translated by Google

'Coloque a caneta histórica para ativa.


Chart1.CurrentPen = 2

'Torne a legenda da caneta em tempo real invisível e a legenda da caneta histórica


visível.
Chart1.Pens.Item(1).Legend.Visible = False
Chart1.Pens.Item(2).Legend.Visible = True

'Altera o indicador de tipo de dado.


Text26.Caption = "Dados históricos"
Fim se

'Se for uma caneta histórica, role o gráfico para trás.


Chart1.ScrollBack
End Sub

Private Sub CommandButton1_Click() 'botão de rolar para frente 'Se for uma caneta em
tempo real, rolar para frente 'não está disponível.

Se Chart1.Pens.Item(1).ShowLine = 1 Então
MsgBox "Não é possível ir para o futuro!", vbExclamation, _
"Isto não é uma Máquina do Tempo."
Sair Sub
Fim se

'Se caneta histórica, role o gráfico para frente.


Chart1.ScrollForward

'Se a caneta histórica for rolada além do tempo atual, volte para o tempo
real.
If Chart1.EndTime >= Now Then 'Tornar a pena
histórica invisível e 'visível a pena em tempo real.

Chart1.Pens.Item(2).ShowLine = False
Chart1.Pens.Item(1).ShowLine = True

'Define a pena de tempo real como ativa.


Chart1.CurrentPen = 1

'Torne a legenda da caneta histórica invisível' e a legenda


da caneta em tempo real visível.
Chart1.Pens.Item(1).Legend.Visible = Verdadeiro
Chart1.Pens.Item(2).Legend.Visible = Falso

'Altera o indicador de tipo de dado.


Text26.Caption = "Dados em tempo real"
Fim se
End Sub

Rolagem de dados históricos

Este exemplo mostra como criar botões para percorrer os dados históricos e definir a hora atual em um gráfico.

Exemplo: Criação de botões que rolam para trás e para frente através de dados
históricos e definem a hora atual
Private Sub CommandButton1_Click() 'Botão de rolar para trás.
Chart1.ScrollBack
End Sub

80 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

Private Sub CommandButton2_Click() 'Botão de rolagem para frente.


Chart1.ScrollForward
End Sub

Subcomando privado CommandButton3_Click()


'Este botão define manualmente o gráfico para a hora atual e 'atualiza os dados.

Chart1.EndTime = Agora
Chart1.RefreshChartData
End Sub

Atualizando um gráfico automaticamente

Em uma imagem com um gráfico que contém dados históricos, você pode criar um objeto de evento que acione um script
enquanto um tag digital é fechado em um intervalo predefinido. Você pode usar este script para atualizar seu gráfico
automaticamente.

'Este script define o gráfico para a hora atual e atualiza 'os dados no intervalo especificado no evento. Por
exemplo, se você quiser uma atualização de um minuto, o intervalo será de 60.000 ms.

Private Sub HistRefresh_WhileTrue()


Chart1.EndTime = Agora
Chart1.RefreshChartData
End Sub

Para obter mais informações sobre como os gráficos rolam, consulte o Trending Historical Data manual.

Propriedades e métodos de gráficos específicos do ambiente

A maioria das propriedades e métodos do gráfico funcionam tanto na configuração quanto nos ambientes de tempo de execução.
No entanto, algumas propriedades e métodos são limitados a um ambiente específico. Essas propriedades e métodos estão
listados nas seguintes seções:

l Propriedades do gráfico limitadas ao ambiente de configuração l Propriedades

do gráfico limitadas ao ambiente de execução

l Métodos de gráfico limitados ao ambiente de tempo de execução

Propriedades do gráfico limitadas ao ambiente de configuração

As seguintes propriedades do Gráfico funcionam apenas no ambiente de Configuração:

l Days BeforeNow

l Data Fixa

l FixedTime

l StartDateMode

© 2022 General Electric Company. Todos os direitos reservados. 81


Machine Translated by Google

l StartTimeMode

l TimeBeforeNow

NOTA: As alterações em tempo de execução feitas nas propriedades de configuração de um gráfico são revertidas para as configurações originais
uma vez que o visor é fechado.

Propriedades do gráfico limitadas ao ambiente de tempo de execução

As seguintes propriedades do gráfico funcionam apenas no ambiente de tempo de execução:

l Hora de Fim

l StartTime

Métodos de gráfico limitados ao ambiente de tempo de execução

As seguintes propriedades do gráfico funcionam apenas no ambiente de tempo de execução:

l AutoScaleDisplayLimits

l GetTimeCursorInfo

l Atualizar

l RefreshChartData

l ResetChartData

l RedefinirZoom

l ScrollBack

l ScrollForward

l SetTimeCursorTime

l XYHitTest

lZoom _

Propriedades e métodos da caneta específicos do ambiente

A maioria das propriedades e métodos da Pena funcionam tanto no ambiente de Configuração quanto no de tempo de execução.
No entanto, algumas propriedades e métodos são limitados a um ambiente específico. Estas propriedades e
métodos estão listados nas seguintes seções:

l Propriedades da Pena Limitadas ao Ambiente de Configuração

l Propriedades da Pena Limitadas ao Ambiente de Execução

l Métodos de caneta limitados ao ambiente de execução

Propriedades da Pena Limitadas ao Ambiente de Configuração

82 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

As seguintes propriedades da Pena funcionam somente no ambiente de Configuração:

l Data Fixa

l FixedTime

l Days BeforeNow

l TimeBeforeNow

l StartTimeType

l StartDateType

NOTA: Alterações em tempo de execução feitas nas propriedades de configuração de uma Pena revertem para as configurações originais
uma vez que o visor é fechado.

Propriedades da Pena Limitadas ao Ambiente de Execução

As seguintes propriedades da Pena funcionam somente no ambiente de execução:

l AverageDataValue

l Valor Atual

l valor de dados mais alto

l Valor de dados mais baixo

l hora de início

l Hora de Fim

Métodos de caneta limitados ao ambiente de execução

As seguintes propriedades da Pena funcionam somente no ambiente de execução:

l AutoScaleDisplayLimits

l GetCurrentValue

l GetPenDataArray

l ResetChartData

l Atualizar

l ScrollTimeForward

l ScrollTimeBack

l SetCurrentValue

l SetPenDataArray

l ValorTempoDeXY

l XYFromValueTime

Configurando as Propriedades de Várias Penas com Uma Chamada

© 2022 General Electric Company. Todos os direitos reservados. 83


Machine Translated by Google

Algumas propriedades da Pena também são expostas no nível do Gráfico, o que permite definir as propriedades de todos
Penas dentro de um gráfico com uma chamada. Em alguns casos, a propriedade Chart refletirá o valor de Cur rentPen.
Lembre-se que se você personalizou as propriedades de uma das Penas, configurar uma destas
as propriedades por meio do Gráfico substituirão quaisquer alterações anteriores.

As seguintes propriedades da Pena podem ser definidas através do Gráfico:

l AutoScaleDisplayLimits l Days BeforeNow

l Duração l Hora de Fim

l Data Fixa l FixedTime

l GetDuration l GetInterval

l GetTimeBeforeNow l HorizontalGridColor

l HorizontalGridStyle l Intervalo

l Número de Linhas de GradeHorizontais l Número de Linhas de Grade Verticais

l ScrollBack l ScrollForward

l Definir Duração lSetInterval _

l SetTimeBeforwNow l ShowDate

l MostrarGridHorizontal l MostrarVerticalGrid

l MostrarLegenda l ShowTimeAxis

l ShowValueAxis l StartTimeMode

l ShowTimeAxisTitle l ShowValueAxisTitle

l StartDateMode l StartTime

l TimeAxisNumLabels l ValueAxisNumLabels

l TimeAxisNumTicks l ValueAxisNumTicks

l TimeAxisTitle l ValueAxisTitle

l VerticalGridColor l VerticalGridStyle

Adicionando uma caneta

Para adicionar uma nova caneta a um gráfico, use a seguinte sintaxe:

Chart.AddPen("Fix32.NODE.TAG.F_CV")

No ambiente de configuração, adicionar uma caneta expandirá o gráfico na altura da linha da legenda. No
run-time, o gráfico não se expande. Em vez disso, a área de plotagem diminui.

Excluindo uma caneta

Excluir uma caneta é fácil. Por exemplo, se você tiver um gráfico com três canetas e quiser excluir o
em segundo lugar, use a seguinte sintaxe:

Chart1.DeletePen(2)

84 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

A exclusão não funcionará se houver um script referenciando o nome da pena que você está tentando excluir.

Por exemplo:

Pen2.PenLineColor = 255
Chart1.DeletePen(2)

Essa exclusão falhará porque há um script explicitamente usando Pen2. Em vez disso, use a seguinte sequência de script:

Privado Sub Rect2_Click()


Dim pPen As Object Set
pPen = Chart1.Pens.Item(2) pPen.PenLineColor
= 255 Chart1.DeletePen (2)

End Sub

Se você excluir todas as suas canetas, criará um gráfico em branco. Para adicionar a caneta de volta ao gráfico, abra a caixa de
diálogo Configuração do gráfico ou use o método AddPen no VBA.

OBS: Caso esteja excluindo uma única pena e queira adicionar outra, altere a origem da pena via Pen.Source =
"Fix32.Node.Tag.f_cv". Isso dará ao seu gráfico um melhor desempenho.

Alterando Fontes de Dados em uma Pena

O exemplo a seguir mostra como alterar as fontes de dados em uma pena.

Suponha que você tenha uma variável de processo, PumpTemp1 (AI), que também é a tag de entrada para PumpTemp1-History
(ETR armazenando uma hora de dados), e você está coletando dados históricos de PumpTemp1. Para visualizar os diferentes dados
associados ao PumpTemp1, crie três botões para visualizar os diferentes dados, usando a seguinte sequência de script:

Privado Sub Rect2_Click()


Pen1.Source = "Fix32.Area1.PumpTemp1.F_CV"
End Sub

Privado Sub Rect3_Click()


Pen1.Source = "Fix32.Area1.PumpTemp1-History.T_DATA2"
End Sub

Privado Sub Rect4_Click()


Pen1.Source = "Hist.Area1.PumpTemp1.F_CV"
'Agora defina a hora de início e busque
Pen1.StartTime = #10/31/98 11:30:00 AM#
Chart1.RefreshChartData
End Sub

O exemplo anterior permite alternar facilmente entre diferentes tipos de dados. Este próximo exemplo altera a fonte de dados de
uma caneta editando o evento Click de um objeto.

Para alterar a fonte de dados de uma pena editando o evento Click de um objeto:

1. Crie um bloco AI e um bloco DO no banco de dados.

2. Crie um gráfico e adicione uma caneta com DO como fonte de dados.

3. Adicione um retângulo. Clique com o botão direito do mouse no retângulo e selecione Editar script no menu pop-up.

4. Insira o seguinte código no evento Click do retângulo:

Dim Obj como objeto

© 2022 General Electric Company. Todos os direitos reservados. 85


Machine Translated by Google

Dim ChartObj como objeto


Contagem Dim como inteiro
Dim ChartCount As Integer

Set Obj = Application.ActiveDocument.Page.ContainedObjects Count = Obj.Count While Count > 0

Se Obj.Item(Count).ClassName = "Gráfico" Então ChartCount =


Obj.Item(Count).ContainedObjects.Count
Enquanto ChartCount > 0
Definir ChartObj = _
Obj.Item(Count).ContainedObjects._ Item(ChartCount)

Se ChartObj.ClassName = "Caneta" Então ChartObj.Source


= "Fix32.Thisnode.AI.F_CV"
Fim se
ChartCount = ChartCount - 1
Aplicar
Fim se
Contagem = Contagem - 1
Aplicar

5. Mude para o ambiente de tempo de execução e clique no retângulo.

No Gráfico, a Fonte da Pena mudará de DO para AI.

Passando Dados Externos para uma Pena

Se você tiver uma pena de tempo real definida e tentar passar dados externos (SQL) para a pena usando o método
SetPenDataArray, os valores de hora e legenda vão atualizando com o valor de tempo real.

Para evitar esse problema, desconecte-se da fonte de dados em tempo real antes de chamar o método SetPenDataArray,
conforme mostrado no exemplo de código a seguir:

Pen1.SetSource "ChartData", True


res=Pen1.SetPenDataArray (count, vtVal, vtDate, vtQual)

onde ChartData pode ser qualquer string.

O método SetPenDataArray usa matrizes de parâmetros. Um desses parâmetros é a qualidade. Este parâmetro mantém a
Qualidade OPC dos dados como uma constante numérica. Ao criar seus próprios dados em um banco de dados relacional,
você precisa especificar um valor de 192 para este campo para que seus dados sejam plotados no objeto gráfico.

Lembre-se de que os dados que você passa para uma caneta não precisam ser de uma consulta SQL - podem consistir em
quaisquer dados externos. Para trazer esses dados para uma pena, utilize a chamada Pen.SetPenDataArray. Você
também pode usar GetPenDataArray para extrair os dados da caneta. Consulte o seguinte exemplo:

Exemplo: Utilizando GetPenDataArray para Extrair Dados da Pena


Dim lNumPts As Long Dim vVal
As Variant Dim vPsa As Variant
Dim vQual As Variant
Pen1.GetPenDataArray lNumPts,
vVal, vPsa, vQual

86 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

Exemplo: método SetPenDataArray com valores codificados


Veja a seguir um código de exemplo para o método SetPenDataArray com valores codificados permanentemente. Você
pode usar esse código para testar ou mostrar a funcionalidade desse método. Para que este exemplo seja concluído,
Quality(x) deve ser igual a 192.

Privado Sub Rect2_Click()

Dim iWrkSpace como área de trabalho


Dim db_var_name como banco de dados
Dim record_var como conjunto de registros
Dim iCount As Integer
Dim dVal como variante
Dim dtDate como variante
Dim lQual Como Variante
Dim iResult como inteiro
Dim iRow como inteiro
Dim iCol como inteiro
Dim i As Integer

'Por favor, note que este exemplo pode lidar com um máximo de 500 pontos.
'Se precisar de mais pontos, aumente o tamanho das 'seguintes declarações.

Valor dim (500) como duplo


Dim Times(500) As Date
Dim Quality (500) Tão Longo

'Cria um objeto no iFIX WorkSpace e o


'Banco de dados SQL especificado

Defina iWrkSpace = CreateWorkspace("", "admin", "", dbUseJet)


Set db_var_name = iWrkSpace.OpenDatabase("Chart.mdb")
Set record_var = db_var_name.OpenRecordSet("Data Query", dbOpenDynaset)

record_var.MoveLast iCount
= record_var.RecordCount record_var.MoveFirst

'Carrega o array com os valores do Recordset

Para i = 0 Para iCount - 1


Value(i) = record_var.Fields("Value").Value Times(i) =
record_var.Fields("Time").Value 'Se a Qualidade(x) não for igual
a 192 o Ponto 'será ignorado pelo gráfico Qualidade(i) =
record_var.Fields("Qualidade").Value
record_var.MoveNext

Proximo eu

'Fecha a conexão com o banco de dados SQL db_var_name.Close

'Configura os tipos de array corretos

dVal = Valor
dtData = Horas
lQual = Qualidade
iResult = Pen1.SetPenDataArray(iCount, dVal, dtDate, lQual)

End Sub

© 2022 General Electric Company. Todos os direitos reservados. 87


Machine Translated by Google

Alterando a duração do gráfico

O script a seguir especifica um gráfico de dez minutos:

Chart1.Duration = 600

Você também pode usar o seguinte:

Chart1.SetDuration 0, 0, 10, 0

A hora final será calculada como a hora inicial mais a duração. Se você estiver usando penas históricas, você pode buscar os dados
novamente usando:

Chart1.RefreshChartData

Mudando os Horários de Início e Fim

Para definir a hora de início em seu gráfico para 31 de outubro às 12h30, digite o seguinte script:

Chart1.StartTime = #31/10/98 12:30:00 PM#

A hora final é calculada como a hora inicial mais a duração.

Ou use:

Chart1.EndTime = #31/10/98 12:30:00 PM#

A hora de início é calculada como a hora de término menos a duração.

Se você estiver usando penas históricas, você pode buscar os dados novamente usando:

Chart1.RefreshChartData

Zoom

Se o gráfico for selecionável, você pode usar o mouse para incluir uma área no gráfico para ampliar em um seletor de retângulo. Como
alternativa, você pode usar scripts para definir os limites Hi e Lo da caneta para zoom:

'Os limites originais são de 0 a 100, mas os dados estão flutuando 'entre 60 e
80.
Pen1.HiLimit = 85
Pen1.LoLimit = 55

'Para diminuir o zoom:


Pen1.HiLimit = 100
Pen1.LoLimit = 0

'O seguinte método tem o mesmo efeito: Chart.ResetToOriginal

'Ou você também pode chamar este método, que definiria o


'HI limite para 80 e o limite LO para 60:

88 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

Chart1.AutoScaleDisplayLimits

Pausar um gráfico em tempo real

Se estiver usando penas de tempo real, você pode querer pausar a exibição para examinar os dados. Para fazer isso, use o
seguinte roteiro:

Chart1.Pause
'Agora, para resumir:
Gráfico1.Resumo

'Existe um tempo limite associado ao Pause/Resume tal


'que se o gráfico for pausado por mais tempo do que o tempo limite,
'o gráfico será retomado automaticamente. Por exemplo, para
'reinicie o gráfico após um minuto:
Chart1.Timeout = 60
Chart1.Pause

Aceleradores de teclado

Os seguintes aceleradores de teclado estão disponíveis para um gráfico selecionável:

Acelerador de teclado Finalidade padrão


Ctrl + Seta para a Esquerda Move o cursor de tempo um pixel para a esquerda.
Ctrl + Seta para a direita Move o cursor de tempo um pixel para a direita.
Shift + Ctrl + Seta para a esquerda Move o cursor de tempo dez pixels para a esquerda.
Shift + Ctrl + Seta para a direita Move o cursor de tempo dez pixels para a direita.
Ctrl + Seta para cima Seleciona a próxima pena para ser a pena atual.
Ctrl + Seta para baixo Seleciona a pena anterior para ser a pena atual.

Usando a coleção de canetas

As penas contidas em um gráfico são expostas em uma coleção chamada Penas. Se você está constantemente adicionando e
excluir canetas, escrever scripts específicos que operam nessas canetas pode se tornar complicado. Outro
maneira de escrever seus scripts é acessar Chart.Pens.Item(3) em vez de acessar Pen3, por exemplo. A ordem
das penas nesta coleção é a ordem em que aparecem na lista de Penas na janela de Configuração do Gráfico
caixa e na legenda.

O uso da coleção também evitará problemas ao excluir penas que tenham scripts explicitamente referenciados a elas. Devido a essas
vantagens, recomendamos que você use a coleção quando trabalhar com
canetas com frequência.

Usando RefreshChartData

© 2022 General Electric Company. Todos os direitos reservados. 89


Machine Translated by Google

Ao utilizar penas históricas, se algum dos parâmetros de tempo mudar (StartTime, EndTime, Duration), deve-se chamar o
método Chart.RefreshChartData para buscar os novos dados. Se você estiver usando ScrollForward e ScrollBack, chamar
RefreshChartData não é necessário.

Rolar um gráfico aprimorado VBA Exemplo

Os exemplos de código a seguir permitem a rolagem em um gráfico aprimorado por meio de script. Essa rolagem funciona
de forma semelhante à rolagem fornecida com o Dínamo Histórico atual. Os exemplos de código a seguir requerem uma
referência ao conjunto de dados geral “iFIX GeneralDataSet Object v 1.0 Type Library” para funcionar corretamente.

Rolagem para frente (50%)

Dim dtTime como variante


Dim dtDate como variante
Dim dInterval Tão Longo

'
definir a porcentagem de rolagem
dInterval = LineChart1.Duration dInterval = dInterval /
2 ' 50%

'rolar o tempo
dtTime = GeneralDataset1.FixedTime
dtTime = DateAdd("s", dInterval, dtTime)
GeneralDataset1.FixedTime = dtTime

' rolar a data


dtDate = GeneralDataset1.FixedDate dtDate = DateAdd("s",
dInterval, dtDate)
GeneralDataset1.FixedDate = dtDate

'atualizar gráfico
LineChart1.RefreshChartData

Rolagem para trás (25%)

Dim dtTime como variante


Dim dtDate como variante
Dim dInterval Tão Longo

'
definir a porcentagem de rolagem
dInterval = LineChart1.Duration dInterval = 0 -
(dInterval / 4) ' 25%

'rolar o tempo
dtTime = GeneralDataset1.FixedTime dtTime = DateAdd("s",
dInterval, dtTime)
GeneralDataset1.FixedTime = dtTime

' rolar a data


dtDate = GeneralDataset1.FixedDate
dtDate = DateAdd("s", dInterval, dtData)
GeneralDataset1.FixedDate = dtDate

'atualizar gráfico
LineChart1.RefreshChartData

NOTA: O lançamento da caixa de diálogo Configuração é realizado por meio do ShowCustomPages chamada de função.

90 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

Esses exemplos rápidos são limitados porque operam apenas em um conjunto de dados no gráfico aprimorado e acessam esse conjunto
de dados pelo nome. Você pode expandir facilmente esses exemplos para abranger todos os conjuntos de dados ou apenas determinados
conjuntos de dados em um gráfico aprimorado fazendo o seguinte:

1. Recupere o número total de conjuntos de dados usando o seguinte método: GetNumberOfDataSets().

2. Iterar de 0 até o número de conjuntos de dados – 1.

3. Recupere cada conjunto de dados por meio de uma chamada para GetDataSetByPosition() método.

NOTA: Não há mais necessidade de verificar se uma fonte de dados é histórica ou não antes de definir as propriedades relacionadas ao
tempo. O GeneralDataSet aplicará as propriedades relacionadas ao tempo de acordo.

4. Execute as chamadas de função de código fornecidas nos exemplos de código acima.

Criando Dínamos Personalizados

Este capítulo fornece um exemplo para criar seu próprio objeto Dynamo personalizado e conjunto Dynamo. Uma vez que você se sinta
mais confortável construindo objetos Dynamo, você pode aprender um pouco sobre como escrever scripts VBA que funcionam com o
iFIX examinando os scripts por trás dos objetos Dynamo.

A seção a seguir, Criando um novo dínamo personalizado, exibe o exemplo real.

NOTA: Nos conjuntos iFIX Dynamo, os objetos Dynamo recebem suas próprias propriedades com as funções Get e Set e sub-rotinas. Essa é a
metodologia que sugerimos para construir objetos complexos do Dynamo.

Criando um novo dínamo personalizado

Os procedimentos a seguir demonstram exemplos de como criar e usar objetos personalizados do Dynamo no iFIX.

Para construir um objeto Dynamo:

1. Abra uma nova imagem.

2. Insira um Oval.

3. Na janela Propriedades, altere a propriedade Nome do Oval para dynOval.

4. Para o objeto dynOval , anime a propriedade VerticalFillPercentage para qualquer tag no processo
base de dados.

5. Insira um segundo Oval.

6. Na janela Propriedades, altere a propriedade Nome do Oval para dynOval2.

7. Selecione os dois ovais.

8. Clique com o botão direito do mouse nas ovais selecionadas e selecione Dynamo. O Assistente de construção do Dynamo é exibido.

NOTA: Você também pode clicar no botão Construir Dynamo, o primeiro botão na barra de ferramentas do Dynamo para abrir esta caixa de
diálogo.

9. No campo Nome do Dynamo, digite um nome, se não quiser usar o nome padrão.

10. Opcionalmente, no campo Descrição do objeto, insira uma descrição para o objeto.

© 2022 General Electric Company. Todos os direitos reservados. 91


Machine Translated by Google

11. No campo Prompt do usuário, insira um prompt como FillColor.

NOTAS:

l Certifique-se de inserir um valor aqui. Se você não inserir um valor, o usuário não verá o valor em um prompt de usuário
e, como resultado, não terá a opção de alterá-lo posteriormente. No entanto, você pode acessar esse valor
manualmente na janela Propriedades.
eu Se você adicionou várias animações a esse objeto do Dynamo e deseja que todas usem o mesmo valor, insira
o mesmo nome em todos os campos de prompt do usuário. Isso resulta em um prompt de usuário que altera todas
as animações.

12. Clique em OK.

Para criar um formulário do Dynamo:

1. Clique com o botão direito do mouse no objeto Dynamo e selecione Editar script no menu pop-up.

2. No Editor do Microsoft Visual Basic, no menu Inserir, selecione UserForm.

3. Se a janela Propriedades ainda não estiver exibida, no menu Exibir, selecione Janela de propriedades.

4. Na janela Propriedades, altere a propriedade Nome do formulário para frmDyn1.

5. No menu Ferramentas, clique em Controles adicionais.

6. Selecione o Controle iFIX Expression Editor e clique em OK.

7. Selecione o controle Expression Editor na caixa de ferramentas e adicione-o ao formulário.

8. Adicione um botão de comando no formulário.

9. Clique com o botão direito do mouse no botão Comando e selecione Exibir código no menu pop-up.

10. Insira o seguinte script:

frmDyn1.hide

11. Selecione "General" na lista suspensa de objetos (na parte superior esquerda da janela de código).

12. Digite o seguinte script:

'Versão do formulário: 1.0

13. Selecione a janela de script para dynOval.

14. Escolha Editar na lista suspensa Procedimento.

15. Insira o seguinte script:

Private Sub DynamoObjectName_Edit()


Dim FillObj como objeto
frmDyn1.Show

'FindLocalObject (abaixo) é uma sub-rotina em 'FactoryGlobals Global


Sub-rotinas. Nesse caso, ele encontra o objeto de animação que você criou fora do
oval na etapa 4 de Construindo o objeto do dínamo.

Set FillObj = FindLocalObject(DynamoObjectName, _


"AnimatedVerticalFillPercentage")
FillObj.Source = frmDyn1.ExpressionEditor1.EditText End Sub

16. Salve seu projeto e feche o Microsoft Visual Basic Editor.


Para criar um Master Dynamo e colocá-lo em um conjunto Dynamo:

1. No iFIX WorkSpace, na visualização Ribbon, na guia Home, no grupo New, clique em Dynamo Set.

- Ou -

92 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

Na visualização Clássica, no Menu Arquivo, selecione Novo Conjunto Dynamo.

Um conjunto Dynamo vazio aparece.

2. Arraste o Dynamo que você criou anteriormente nesta seção para o novo conjunto Dynamo. A caixa de diálogo Adicionar
objetos ao conjunto do Dynamo é exibida.

3. Na caixa de diálogo Adicionar objetos ao conjunto do Dynamo, selecione Criar um novo Master Dynamo e clique em
OK. O objeto torna-se um novo Master Dynamo no conjunto Dynamo.

4. Selecione Salvar no menu Arquivo e nomeie seu conjunto Dynamo.

Para obter mais informações sobre o Dynamos, consulte a seção Criando imagens manual.

Trabalhando com o iFIX Security

Os exemplos neste capítulo ilustram como usar scripts VBA que funcionam em conjunto com o iFIX Security.
Consulte as seguintes seções:

l Usando a sub-rotina Login l Obtendo

informações do usuário

Você pode ler mais sobre o iFIX Security em Configurando Recursos de Segurança manual.

Usando a sub-rotina de login

O script a seguir é um trecho do código do botão Login do Aplicativo Tabular. Este script abre o aplicativo Login usando a função VBA
Shell .

Exemplo: Trecho do Script que abre o Aplicativo de Login


Public SubSecurityLogin()
Dim strPath As String
Em caso de erro Ir para ErrorHandler

'Obter o diretório iFIX padrão. strPath =


System.ProjectPath Shell strPath &
"\Login.exe -m", 1 Exit Sub

ErrorHandler:
HandleError
End Sub

Obtendo informações do usuário

Este script usa o método FixGetUserInfo do objeto System para obter informações de segurança sobre o usuário.

Exemplo: usando o método FixGetUserInfo do objeto do sistema


Public SubSegurançaGetUser()
Dim Resultado como inteiro
Dim UserID como String

© 2022 General Electric Company. Todos os direitos reservados. 93


Machine Translated by Google

Dim UserName As String


Dim GroupName As String
Dim UserInfo como String
System.FixGetUserInfo UserID, UserName, GroupName
" "
MsgBox "Nome de login: & UserID & vbCr & "Nome completo: _
& UserName & vbCr & "Nível de Liberação: " & Nome do grupo
End Sub

Criando grupos de tags

Os exemplos neste capítulo ilustram como usar scripts VBA para criar e usar tags. Ele inclui as seguintes seções:

l Criando o objeto de arquivo de grupo de tags

l Recuperando dados do grupo de tags

l Modificando os dados do grupo de tags

l Manipulando grupos de tags

Para obter mais informações sobre grupos de tags, consulte a seção Criando imagens manual.

Criando o objeto de arquivo de grupo de tags

Você pode criar ou modificar um arquivo de grupo de tags usando TagGroupDefinitionInterface. Você pode acessar a interface criando um objeto de
arquivo de grupo de tags. O script a seguir cria um objeto de arquivo de grupo de tags.

Dim TGD como objeto


sete TGD = _
CreateObject("TagGroupDefinitionInterfaceDll.TagGroupDefinitionInterface")

Recuperando dados do grupo de tags

Depois de criar o objeto de arquivo de grupo de tags, você deve recuperar os dados no arquivo antes de modificá-lo.
Para recuperar os dados, use o seguinte script.

'TokenList é um array de símbolos de grupos de tags


Dim sTokenList() como String, TokenList como Variant

'ReplacementList é um array de substituições de grupos de tags


Dim sReplacementList() como String, ReplacementList como Variant

'DescriptionList é um array de descrições de grupos de tags


Dim sDescriptionList() como String, DescriptionList como Variant

'Cria o objeto de arquivo do grupo de tags


Dim TGD como objeto

Sete TGD = _
CreateObject("TagGroupDefinitionInterfaceDll._
TagGroupDefinitionInterface")

'Para que o método a seguir seja executado sem erros,


'você precisa ter um arquivo de Tag Group chamado test ou você substitui

94 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

'o parâmetro "test" com o nome do seu arquivo de grupo de tags.

TGD.RetrieveDefinition "Test", 2, TokenList, ReplacementList, DescriptionList _

Modificando os dados do grupo de tags

Depois que os dados do grupo de tags são recuperados, seu script pode modificar os dados. Por exemplo, você pode alterar
um elemento na matriz sReplacementList e salvar no arquivo de grupo de tags com o método UpdateDefinition.

O script a seguir mostra como alterar a substituição dos elementos 2 e 3 e salvá-los no arquivo de grupo de tags.

Exemplo: Modificando Dados do Grupo de Tags

Dim sTokenList(4) como String, TokenList como Variant


Dim sReplacementList(4) como String, ReplacementList como Variant
Dim sDescriptionList(4) como String, DescriptionList como Variant
Dim TGD como objeto

'Recupera dados do grupo de tags do arquivo de grupo de tags Set TGD


= CreateObject("TagGroupDefinitionInterfaceDll._ TagGroupDefinitionInterface")

'Para que o método a seguir seja executado sem erros, 'você precisa ter um arquivo de grupo de
tags chamado "test1" ou você 'substituirá o parâmetro "Test1" pelo nome do seu arquivo de grupo
de tags.

TGD.RetrieveDefinition "Test1", 4, TokenList, ReplacementList, DescriptionList _

'Modificar dados do grupo de tags


TokenList(2) = "Tag3"
TokenList(3) = "Tag4"
SubstituiçãoLista (2) = "FIX32.NODE2.AI1.F_CV"
SubstituiçãoLista (3) = "FIX32.NODE2.AI2.F_CV"
DescriptionList (2) = "Temperatura para o Nó 2"
DescriptionList (3) = "Pressão para o Nó 2"

'Cria o objeto de arquivo de grupo de tags e salva o arquivo de grupo de tags modificado
Sete TGD = _
CreateObject("TagGroupDefinitionInterfaceDll._ TagGroupDefinitionInterface")

TGD.UpdateDefinition "Test", 4, TokenList, ReplacementList, DescriptionList Set TGD = Nothing _

Manipulando grupos de tags

Como exemplo final, fornecemos o seguinte script de botão de comando. Este script itera por todas as variáveis do grupo de
tags em uma imagem e cria uma string de substituição com base no nome da variável do grupo de tags.

Este script assume que a imagem que contém o botão de comando recuperou os grupos de marcas do objeto Grupo de
marcas com o método RetrieveDefinition primeiro.

© 2022 General Electric Company. Todos os direitos reservados. 95


Machine Translated by Google

Exemplo: manipulação de dados de grupo de tags

Subcomando Privado CommandButton1_Click()


Dim vaSymbols As Variant
Dim vaSubstituições como variante

Dim vaDescriptions As Variant


Dim sSubstitutions() As String
Dim sDescriptions() As String
Dim PicPath como string

'Isto irá conter o número de símbolos em uma imagem


Dim Tamanho como inteiro
Dim Contador como inteiro
Dim FileName As String

'Define o nome do arquivo


NomeArquivo = "Teste"

'Excluir arquivo de grupo de tags, se existir. Kill permanentemente 'exclui o arquivo


especificado do disco rígido. Use com cuidado.

PicPath = System.PicturePath

Se DIR(PicPath + FileName + ".TGD" <> Kill PicPath + FileName "" Então


+ ".TGD"
Fim se

'Pegue os símbolos da imagem Me.RetrieveTagGroupVariables


Size, vaSymbols
Se Tamanho = 0 Então
Sair Sub
Fim se
ReDim sSubstitutions(Size - 1) As String
ReDim sDescriptions(Size - 1) As String

'Preencha os símbolos e as descrições


Para Contador = 0 Para Tamanho - 1

Temp$ = "Fix32.thisnode." + vaSymbols(count2) + ".f_cv" sSubstitutions(Counter) = Temp$


sDescriptions(Counter) = "Tag gerado"

Próximo contador

'Cria o objeto de arquivo do grupo de tags


Dim TGF As Object
vaSubstitutions = sSubstitutions
vaDescriptions = sDescriptions
Definir TGF = _
CreateObject("TagGroupDefinitionInterfaceDll_ .TagGroupDefinitionInterface")

TGF.UpdateDefinition FileName, Size, vaSymbols, vaSubstitutions, vaDescriptions _

96 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

Índice rolagem 80

zoom 88

FecharImagem 49
A
fotos finais 49
acessando 56
código 13
bancos de dados 61
compilando 13
dados em tempo real 56
cortando e colando 21
Modelo de objeto de dados ActiveX 61
salvando 13
adicionando uma caneta 84
testando 13
Adorno 61
Janela de código 9
áreas de alarme 17
coleções 20
animações 28
compilando 13
conectando-se a fontes de dados 20
conexões 29

Objeto de formato 29
objetos de animação para fontes de dados 20
objeto linear 28
conectando e desconectando a propriedade do objeto 33
Objeto de pesquisa 29

Membros da lista automática 24 criando conexão direta com um objeto 66

Informação rápida automática 24


direto 66

exemplo 42
B
fazendo 29
Contagem Base 20
objetos para fontes de dados 28
objetos de navegação 27
ajuda sensível ao contexto 25

C criando 94

grupos de tags 94
gráficos

mudança de duração 77 D

mudando o tempo final 77


Faca 61

mudar hora de início 77


dados

duração 88
lendo 57
aceleradores de teclado 89
Modelo de objeto de acesso a dados 61
métodos 81
entrada de dados 69

pausa 77
ligação de dados 68

propriedades 81

© 2022 General Electric Company. Todos os direitos reservados. 97


Machine Translated by Google

fontes de dados 28 formulários

mudando em tempo de execução 65 criando formulários globais 69

alterando fonte de dados de um link 68 global 51

alterando a fonte de dados do evento FIX 68 usando formulários VBA 10

conectando objetos de animação a 20 usando formulários VBA dentro do iFIX 10

conectando objetos a 28
G
Sistema de Dados OCX 56
global
acesso ao banco de dados 61

FactoryGlobals página 51
declarando variáveis 13
formulários 69
excluindo canetas 84
procedimentos 55
conexões diretas 29
tabelas de limites 54
Função DoEvents 71
página do usuário 51
Função DoEvents 72
objetos variáveis 52
alerta sobre o uso 72
páginas globais 23
Dínamos 91
variáveis globais 52

H
tratamento de erros 17
dados históricos 79
erros 22
alternar de dados em tempo real para dados históricos 79
rastreamento em sub-rotinas 22
aplicativo host 5
entradas baseadas em eventos 75

Especialistas 16 EU

Eu reparo
F

modelo de objeto 27
FactoryGlobals 49
parâmetro intErrorMode 22
FactoryGlobals página 51

tipos de arquivo 11 k

em VBA 11
aceleradores de teclado

Objeto FindReplace 69
Espaço de trabalho 19

CORRIGIR evento 68

eu
Variáveis globais FIX32 no iFIX 52

animações de formato 28 animações lineares 28

98 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

Entrar 93 alterando as fontes de dados 85

sub-rotina de login 93 excluindo 84

animações de pesquisa 28 métodos 82

propriedades 82
M
definindo propriedades 83
manipulando grupos de tags 95
zoom 88
métodos 82
coleção de canetas 89
global 51
PictureAlias 49
caneta 82
fotos
modificando os dados do grupo de tags 95
aliasing 49
módulos 5
fechando 50

N abrindo 50

substituindo 49
convenções de nomenclatura 17

procedimentos 55
O
Explorador de Projetos 7

hierarquia de objetos 27 opções de projeto 14

objetos 67 projetos 5

disponibilidade no Editor VB 26 propriedades 82

navegando 27 caneta 82

conexões 29
Janela de propriedades 7

conexões diretas 29
R
global 51
RDO 61
hierarquia 27

variável 67 leitura de dados 56

ReadValue 17
fotos de abertura 49
dados em tempo real 80
OpenPicture 49
acessando 56
mensagens do operador 17
alternar de dados em tempo real para dados históricos 79
Opção Explícita 14
referências 21

P
Método RefreshChartData 89

canetas 88 Modelo de objeto de dados remoto 61

somando 84 substituindo fotos 49

© 2022 General Electric Company. Todos os direitos reservados. 99


Machine Translated by Google

ambiente de tempo de execução 65 usando SQL 65

usando sub-rotinas e Experts 16


S
usando com entradas baseadas em eventos 75
salvar código 13
usando com entradas baseadas em tempo 74
Agendador 71
escrevendo dados 56
scripts
escrevendo para tags de banco de dados 59

adicionando uma caneta 84


ampliando um gráfico 88
animando a rotação de um retângulo 42
scripts que percorrem a coleção de documentos 23
atualizando automaticamente um gráfico 81

alterando a duração de um gráfico 88 segurança 93

alterando a fonte de dados de um evento FIX 68 SendOperatorMessage 17

alterando as fontes de dados 85 atalhos 16

mudando exibições 49 processamento de thread único 72

conectando objetos de animação a fontes de dados SQL 65


20
sub-rotinas 16

criando uma forma 20

T
cortando e colando 21

apagar uma caneta 84 grupos de tags

dicas gerais 19 criando 94

obtendo informações do usuário 93 manipulando 95

global 51 modificando 95

logando 93 código de teste 13

fazendo uma conexão de animações 31 tabelas de limites 54

manipulação de gráficos 78 entradas baseadas em tempo 74

passando dados externos para uma caneta 86 Temporizadores 72

leitura de dados 56 usando em vez de DoEvents 72

leitura de tags de banco de dados 59 rastreamento 22

reutilizando 21 erros em sub-rotinas 22

rolagem de dados históricos 80


EM

alternando de dados em tempo real para dados


históricos 79 página do usuário 51

usando objetos de dados ActiveX 61 usando 16

100 © 2022 General Electric Company. Todos os direitos reservados.


Machine Translated by Google

EM recursos não suportados 4

objeto variável 67 Lista de scripts de exemplo VBA 1

Editor do Visual Basic 5-6


objetos variáveis 51

global 51
EM
variáveis 14
WriteValue 17
VBA
escrevendo dados 56
Janela de código 9

ajuda sensível ao contexto 25 COM

Editor 5
zoom 88

tipos de arquivo 11

formulários 10

ajuda 23

módulos 5

convenções de nomenclatura 11

opções 13

componentes do projeto 5

Explorador de Projetos 7

opções de projeto 14

Janela de propriedades 7

referências 21

salvar código 13

código de teste 13

recursos úteis 23

Variáveis 14

Editor do Visual Basic 5

VBA 6.0 4

suplementos de desenvolvedor 5

assinaturas digitais 5

projetos multi-threaded 5

senhas 5

© 2022 General Electric Company. Todos os direitos reservados. 101

Você também pode gostar