Escolar Documentos
Profissional Documentos
Cultura Documentos
Proficy IHM/SCADA -
iFIX 2022
Escrevendo roteiros
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.
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.
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
Código de amostra 1
Manipulando Imagens 2
Manipulando Gráficos 3
Dicas de desenvolvimento 4
Aplicativo host 5
Módulos 5
Formulários 6
Explorador de Projetos 7
Janela de Propriedades 7
Janela de código 9
Para configurar o VBA para adicionar automaticamente a instrução Option Explicit a um novo projeto: 14
Exemplo de erro 15
Soluções alternativas 15
Aceleradores de teclado 18
Reutilizando Scripts 21
Referências VBA 21
Exemplos 23
Fazendo conexões 29
Para fazer uma conexão de animação linear usando a caixa de diálogo Animações: 31
A conexão é válida? 34
Método GetPropertyAttributes 36
Método CanConstruct 36
Método de construção 36
ValidateSource Method 37
Rodar um Grupo 44
Manipulando Imagens 45
Para criar um objeto de variável global para conter a string da imagem ativa atual: 48
Como as variáveis predefinidas do FIX32 são mapeadas para as propriedades do objeto iFIX 52
Para criar uma tabela de limite global que é usada para todos os alarmes atuais no sistema: 54
Para conectar uma tag AI à porcentagem de preenchimento horizontal de um retângulo ao clicar nele: 66
Para definir um objeto e alterar a origem do objeto de animação que está conectado a ele: 66
Para pesquisar fontes de dados AO em uma imagem e substituí-las por fontes de dados AI: 69
nós
© 2022 General Electric Company. Todos os direitos reservados.
Machine Translated by Google
Agendador 71
Função DoEvents 72
Manipulando Gráficos 78
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
Para alterar a fonte de dados de uma pena editando o evento Click de um objeto: 85
Zoom 88
Aceleradores de teclado 89
Usando RefreshChartData 89
Índice 97
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
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.
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
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.
Manipulando Imagens
l Exemplo: Criação de uma barra de
iFIX
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
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.
2. No Ribbon vView, na guia Home, no grupo WorkSpace, clique em Settings e, em seguida, clique em Toolbars.
- Ou -
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 -
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.
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.
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:
de arquivo VBA l
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.
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 Crie suas próprias caixas de diálogo personalizadas para trocar dados com os operadores.
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 Projetos multiencadeados.
l Aplicativo de Hospedagem
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).
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
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.
l No iFIX WorkSpace, na visualização Ribbon, na guia Tools, clique em Visual Basic Editor.
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.
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.
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
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
Na exibição da faixa de opções, na guia Exibir, no grupo Janela, clique em Janela de propriedades.
- Ou -
- 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:
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.
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.
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.
É 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. .
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.
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.
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".
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:
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.
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.
4. Reinicie o WorkSpace.
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:
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.
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.
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".
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.
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.
Esta seção descreve dois itens ou configurações específicas que recomendamos que você aproveite ao configurar suas opções
de VBA.
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:
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.
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".
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:
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.
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).
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.
CheckSourceObject vSourceObjs(0)
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.
Solução alternativa 2 – Este script altera a rotina de chamada para que a coerção seja executada antes da chamada.
Nesta chamada corrigida, há uma declaração adicional para objSourceObject. A seguinte linha também é adicionada:
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.
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 Aceleradores de teclado
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:
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.
Fix32.SCADA.SORTER|SIZER|BLOCK10|PT.F_CV
Depois que o valor é armazenado como uma variante (x), você pode usá-lo em expressões.
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:
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
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.
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:
'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
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
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
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
Esta seção lista algumas dicas a serem lembradas ao escrever scripts VBA no iFIX quando:
l Reutilizando Scripts
l Referências VBA
Use o seguinte script para criar uma forma por meio de um script VBA:
O método BuildObject cria o objeto. Depois que o objeto é criado, você pode executar uma destas opções:
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.
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:
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.
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.
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()
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.
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:
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
OpenPicture "BadPic", , , , 1
End Sub
Manipulador de erros:
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
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:
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:
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.
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.
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.
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 Fazendo conexões
l Rodar um Grupo
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.
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.
l Objetos do temporizador
l Objetos de evento
l Botões
l Dínamos
l Controles ActiveX
l Variáveis
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.
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.
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.
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.
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 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:
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.
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:
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.
Subprivado DirectConnect_Click( )
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.
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.
Para fazer uma conexão de animação linear usando a caixa de diálogo Animações:
2. Selecione a guia Tamanho e clique no botão Altura. A caixa de diálogo Animações é expandida.
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.
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.
iRect.Height = 5 iRect.Width
= 10 iOval.HorizontalPosition
= 60 iOval.VerticalPosition = 35
iOval.Height = 5 iOval.Width
= 10 iRect.Commit
iOval.Commit
'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
'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"
'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.
End Sub
Os métodos nesta seção conectam ou desconectam a propriedade de um objeto a uma fonte de dados.
O método Connect mostrado abaixo conecta a propriedade de um objeto a uma fonte de dados:
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:
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.
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.
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 método IsConnected determina se a propriedade de um objeto está conectada a uma fonte de dados:
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:
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.
O método ConnectedPropertyCount retorna o número de propriedades do objeto que estão conectadas a uma fonte
de dados.
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.
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 .
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 DeadBand
Dim UpdateRate
Se blnHasConnection Então
HorizontalObj.GetConnectionInformation lngIndex, "InputValue", strExpression, strFullyQualifiedExpression, vtSou End If
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:
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:
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.
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
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.
O exemplo a seguir determina se a fonte de dados AI1 para NODE1 tem sintaxe válida para a imagem TestPicture.
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:
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.
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:
A tabela a seguir fornece a sintaxe e a descrição das propriedades e métodos gerais do objeto de animação.
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]
A tabela a seguir fornece a sintaxe e a descrição das propriedades do objeto de animação linear.
A tabela a seguir fornece a sintaxe e a descrição das propriedades e métodos do objeto de animação de pesquisa.
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.
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])
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.
'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
'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
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
Se blnEstáConectado Então
Rect2.Disconnect "ForegroundColor"
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.
'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.
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 .
Esta tabela fornece a sintaxe e a descrição das propriedades do objeto de animação de formato.
[DecimalDigits], _ [Justify])
Object.SetStringFormat ([Formato]) Define a formatação bruta para um valor de string.
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.
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.
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'.
'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
'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.
'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)
Rodar um Grupo
Para rotacionar um grupo usando scripts, use o seguinte método preferencial listado nas etapas abaixo.
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.
'
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
'
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:
Depois de ler esta seção, você poderá realizar as seguintes tarefas inteiramente por meio de scripts VBA:
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.
2. Ativado
ÿ
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.
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.
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 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
Terminar com
Definir iNewDoc = Nada
Definir iPage = Nada
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:
As etapas abaixo descrevem como definir uma propriedade de botão de pressão em sua imagem.
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.
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.
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.
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:
Depois de criar a variável, adicione o seguinte código ao método Activate da imagem principal para definir uma variável global:
'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:
AcknowledgeAnAlarm Exit
Sub
Fim se
Próximo PicObj
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.
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.
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")
End Sub
Subprivado OpenLine4Command_Click()
Substituir imagem ("Linha4")
End Sub
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.
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.
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 Formulários
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.
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.
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
Regional e Idioma
Opções no controle
Painel.
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:
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.
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.
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.
1. Crie um oval.
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.
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:
2. Se o Project Explorer ainda não estiver exibido no VBE, selecione Project Explorer na exibição
cardápio.
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.
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.
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.
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:
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:
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.
'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'.
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
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") _
'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:
g1.DataItems.Add("Fix32.MYNODE.AI1.F_CV")
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.
Existem várias maneiras de escrever um valor em uma tag de banco de dados. Os exemplos nesta seção mostram como:
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.
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.
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.
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:
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.
'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")
ObjDataTag.Value = 70
End Sub
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.
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.
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:
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.
ErrorHandler:
HandleError
End Sub
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.
Este exemplo baseia-se no exemplo anterior para a população de ADORs. Ele assume que já existe um flexgrid em
uma imagem.
iRow = iRow + 1
MSFlexGrid1.Row = iRow
Para iCol = 0 a 5
MSFlexGrid1.Col = iCol
MSFlexGrid1.Text = adoRS(iCol)
Próxima iCol
Aplicar
RecipeCount.Value = Str(iRow)
Sair do Sub
ErrorHandler:
HandleError
End Sub
Se o conjunto de registros não for aberto como somente leitura, você poderá adicionar registros ao banco de dados por meio do ADO.
Sair Sub
Fim se
adoRS.AddNew 'Adiciona um novo registro ao conjunto de registros.
ErrorHandler:
'Lidar com o erro retornado se alguma coluna precisar ser exclusiva' (como o nome da receita), mas não era.
End Sub
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.
End Sub
Se o conjunto de registros não for somente leitura, você poderá excluir os registros do banco de dados com o ADO.
Sair Sub
Fim se
ErrorHandler:
HandleError
End Sub
Para obter mais informações sobre o ADO, consulte a seção 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.
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:
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:
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
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.
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:
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.
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.
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.
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
As animações de Preenchimento e Cor mudam do valor atual de AI1 para o valor atual de AI2.
O exemplo a seguir altera a legenda do texto inserido ao clicar no texto em tempo de execução.
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.
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.
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.
3. Clique com o botão direito do mouse no link Dados e selecione Editar script no menu pop-up.
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.
As etapas a seguir descrevem como alterar a fonte de dados de um evento FIX no ambiente de tempo de execução
onment.
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.
'Percorra todos os objetos na imagem para encontrar 'qualquer um que seja objeto de Evento.
Enquanto Contagem > 0
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.
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:
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.
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.
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.
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) _
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
End Sub
Descarregue-me
Sair do Sub
ErrorHandler: MsgBox
End Sub
End Sub
'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
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
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
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:
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.
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.
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.
'Aqui está uma variável global para rastrear as iterações através do 'loop.
End Sub
End Sub
End Sub
End Sub
ÿ
'Esta variável garante que outro evento de timer não execute' a rotina
Fim se
iJáAqui = 1
Dim I como inteiro
Fim se
Proximo eu
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.
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.
'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.
'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.
Outro
Fix32.NODE1.lowdiskspacealarm.f_cv = 0
Fim se
End Sub
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.
Tipo de evento em
Fix32.NodeName.DownTimeStart.F_CV
verdadeiro Fonte de dados
Forma Nome frmDownTime
Rubrica OK
Quadro Nome fraLine1Packer1
'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
'Coloque o seguinte código diretamente no formulário que você criou e 'defina uma referência para Microsoft DAO 3.X Object Libra
'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.
txtDownTimeReasonFour.Enabled = Verdadeiro
txtDownTimeReasonFour.SetFocus
End Sub
'Quando o formulário for ativado, defina a primeira opção como true Private Sub UserForm_Activate()
optDownTimeReasonOne.Value = True
End Sub
End Sub
'Este banco de dados não foi fornecido e precisará ser criado' para que esta sub-rotina seja executada sem erro.
db.OpenRecordset("Packaging", dbOpenDynaset)
End Sub
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:
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.
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.
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
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 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
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
Chart1.EndTime = Agora
Chart1.RefreshChartData
End Sub
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.
Para obter mais informações sobre como os gráficos rolam, consulte o Trending Historical Data manual.
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 Days BeforeNow
l Data Fixa
l FixedTime
l StartDateMode
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.
l Hora de Fim
l StartTime
l AutoScaleDisplayLimits
l GetTimeCursorInfo
l Atualizar
l RefreshChartData
l ResetChartData
l RedefinirZoom
l ScrollBack
l ScrollForward
l SetTimeCursorTime
l XYHitTest
lZoom _
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 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.
l AverageDataValue
l Valor Atual
l hora de início
l Hora de Fim
l AutoScaleDisplayLimits
l GetCurrentValue
l GetPenDataArray
l ResetChartData
l Atualizar
l ScrollTimeForward
l ScrollTimeBack
l SetCurrentValue
l SetPenDataArray
l ValorTempoDeXY
l XYFromValueTime
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.
l GetDuration l GetInterval
l GetTimeBeforeNow l HorizontalGridColor
l HorizontalGridStyle l Intervalo
l ScrollBack l ScrollForward
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
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.
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)
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:
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.
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:
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:
3. Adicione um retângulo. Clique com o botão direito do mouse no retângulo e selecione Editar script no menu pop-up.
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:
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:
'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.
record_var.MoveLast iCount
= record_var.RecordCount record_var.MoveFirst
Proximo eu
dVal = Valor
dtData = Horas
lQual = Qualidade
iResult = Pen1.SetPenDataArray(iCount, dVal, dtDate, lQual)
End Sub
Chart1.Duration = 600
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
Para definir a hora de início em seu gráfico para 31 de outubro às 12h30, digite o seguinte script:
Ou use:
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
Chart1.AutoScaleDisplayLimits
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
Aceleradores de teclado
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
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.
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.
'
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
'atualizar gráfico
LineChart1.RefreshChartData
'
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
'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.
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:
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.
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.
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.
Os procedimentos a seguir demonstram exemplos de como criar e usar objetos personalizados do Dynamo no iFIX.
2. Insira um Oval.
4. Para o objeto dynOval , anime a propriedade VerticalFillPercentage para qualquer tag no processo
base de dados.
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.
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.
1. Clique com o botão direito do mouse no objeto Dynamo e selecione Editar script no menu pop-up.
3. Se a janela Propriedades ainda não estiver exibida, no menu Exibir, selecione Janela de propriedades.
9. Clique com o botão direito do mouse no botão Comando e selecione Exibir código no menu pop-up.
frmDyn1.hide
11. Selecione "General" na lista suspensa de objetos (na parte superior esquerda da janela de código).
1. No iFIX WorkSpace, na visualização Ribbon, na guia Home, no grupo New, clique em Dynamo Set.
- Ou -
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.
Para obter mais informações sobre o Dynamos, consulte a seção Criando imagens manual.
Os exemplos neste capítulo ilustram como usar scripts VBA que funcionam em conjunto com o iFIX Security.
Consulte as seguintes seções:
informações do usuário
Você pode ler mais sobre o iFIX Security em Configurando Recursos de Segurança manual.
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 .
ErrorHandler:
HandleError
End Sub
Este script usa o método FixGetUserInfo do objeto System para obter informações de segurança sobre o usuário.
Os exemplos neste capítulo ilustram como usar scripts VBA para criar e usar tags. Ele inclui as seguintes seções:
Para obter mais informações sobre grupos de tags, consulte a seção Criando imagens manual.
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.
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.
Sete TGD = _
CreateObject("TagGroupDefinitionInterfaceDll._
TagGroupDefinitionInterface")
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.
'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.
'Cria o objeto de arquivo de grupo de tags e salva o arquivo de grupo de tags modificado
Sete TGD = _
CreateObject("TagGroupDefinitionInterfaceDll._ TagGroupDefinitionInterface")
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.
PicPath = System.PicturePath
Próximo contador
Í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
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
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
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
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
objetos 67 projetos 5
navegando 27 caneta 82
conexões 29
Janela de propriedades 7
conexões diretas 29
R
global 51
RDO 61
hierarquia 27
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
T
cortando e colando 21
global 51 modificando 95
global 51
EM
variáveis 14
WriteValue 17
VBA
escrevendo dados 56
Janela de código 9
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
VBA 6.0 4
suplementos de desenvolvedor 5
assinaturas digitais 5
projetos multi-threaded 5
senhas 5