Escrevendo em variáveis do EPM a partir do EPM Portal.

1. Introdução

É comum precisar que uma ação do usuário em um dashboard do EPM Portal — como clicar em um botão — grave um valor em uma variável do EPM, em vez de apenas ler e exibir dados. Isso é o que permite, por exemplo, montar um controle simples de setpoint ou um comando manual diretamente no Portal.

O EPM Portal resolve isso com um código em TypeScript que usa o serviço OpcUaService para escrever um valor em uma variável do EPM. Esse código pode ser adicionado em dois lugares equivalentes: na propriedade Code de um widget (por exemplo, um widget Button) ou em um Dataset Code do dashboard.

Não confunda com o Dataset Processor

Esse recurso não tem relação com o Dataset Processor do EPM Portal — o Dataset Processor serve para chamar algoritmos em Python executados pelo EPM Processor. Aqui o código roda em TypeScript, dentro do próprio Portal (widget Button ou Dataset Code).

2. O que é o código do widget Button / Dataset Code

Tanto a propriedade Code do widget Button quanto um Dataset Code do EPM Portal aceitam um código em TypeScript. Dentro dele, o EPM Portal disponibiliza um serviço de escrita (OpcUaService) que permite localizar uma variável do EPM pelo nome e gravar um valor nela.

O valor gravado é representado por um objeto (DataValue) que reúne três informações: o valor em si, a qualidade e o timestamp (data/hora) da escrita.

Por que isso resolve o problema?

Não é preciso informar a qualidade e o timestamp manualmente: por padrão, a qualidade é registrada como Boa e o timestamp é o momento em que o código é executado — ou seja, com uma única chamada o código já grava um valor válido e com data/hora correta, sem passos adicionais.

3. Como configurar a escrita da variável

  1. Abra o dashboard no editor do EPM Portal.
  2. Escolha onde o código vai rodar: na propriedade Code de um widget Button (executado ao clicar) ou em um Dataset Code do dashboard.
  3. Adicione o código TypeScript abaixo, substituindo 'NomeDaVariavel' pelo nome real da Basic Variable de destino no EPM.
  4. Salve e publique o dashboard. A partir daí, a escrita ocorre conforme o disparo escolhido (clique no botão, ou execução do Dataset Code).

O código abaixo grava o valor 10 em uma Basic Variable:

import { BaseProcessor, IExecuteContext } from '@elipse/processor-javascript';
import { OpcUaService, OpcUaVariable } from '@elipse/portal/opcua';
import { DataValue } from '@elipse/webapi/common';

export class CodeProcessor extends BaseProcessor {
  async on_process(context: IExecuteContext, inputs: Map): Promise {
    const opcua = context.get_service(OpcUaService);

    const random1 = await opcua.dataObjectAsync('NomeDaVariavel') as OpcUaVariable;

    const value = new DataValue(10, 0, new Date());

    // Escreve o valor 10 na variável
    await random1.writeAsync(value);
  }
}

4. Resultado

Ao ser executado — pelo clique no widget Button ou pela execução do Dataset Code — o OpcUaService localiza a variável pelo nome informado em dataObjectAsync e executa writeAsync, gravando o valor imediatamente na variável do EPM, sem necessidade de nenhuma configuração adicional fora do próprio código.

5. Observações e boas práticas

  • O objeto DataValue concentra os três atributos de uma escrita OPC UA: value, quality e timestamp. Quando esses dois últimos não são informados explicitamente, o padrão é qualidade Boa e timestamp do momento da escrita.
  • O valor gravado não precisa ser fixo (como o 10 do exemplo). Também é possível vincular uma entrada (input) do Dataset ao valor informado por outro widget do próprio dashboard — como um EditBox ou ComboBox — e escrever esse valor lido na variável desejada, conforme a necessidade do dashboard.
  • Como a escrita passa pelo OpcUaService, a variável de destino precisa estar acessível como um objeto OPC UA válido a partir do Portal (ou seja, exposta/mapeada normalmente como qualquer outra variável usada em bindings do Portal).

Print Friendly, PDF & Email

Este artigo foi útil? Was this helpful?

Classificação média - Average rating 0 / 5. Count: 0

Leave a Reply

Your email address will not be published.Required fields are marked *