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
- Abra o dashboard no editor do EPM Portal.
- Escolha onde o código vai rodar: na propriedade Code de um widget Button (executado ao clicar) ou em um Dataset Code do dashboard.
- Adicione o código TypeScript abaixo, substituindo
'NomeDaVariavel'pelo nome real da Basic Variable de destino no EPM. - 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
DataValueconcentra os três atributos de uma escrita OPC UA:value,qualityetimestamp. 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
10do 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).
