LINEAR_REG

Calcula a regressão linear (método dos mínimos quadrados) sobre um buffer FIFO de valores amostrados em intervalos de tempo, fornecendo os coeficientes A e B da reta y = Ax + B; exige que o buffer BUF seja sempre um vetor do tipo REAL. É um bloco de função (mantém estado entre scans; requer instância).

Biblioteca: HI_STD · Namespace: HILS · Tipo: bloco de função

Bloco de função

           LINEAR_REG
         +-------------+
REAL ----|INP       EVT|---- BOOL
         |             |
REAL ----|XSTEP       A|---- REAL
         |             |
TIME ----|STME        B|---- REAL
         |             |
BOOL ----|CLR          |
         |             |
REAL ----|BUF -------- |---- REAL
         +-------------+

É fornecido um vetor do tipo REAL que serve como uma FIFO de dados. O bloco recebe o tempo total de aquisição (STME) e calcula o intervalo de amostragem dividindo esse tempo pelo número de elementos do buffer fornecido. A cada intervalo, um valor da entrada (INP) é inserido no buffer.

Quando o buffer está completamente preenchido, os coeficientes de saída A e B são calculados. A partir daí, a cada inserção de um novo valor os coeficientes são recalculados e a saída EVT gera um pulso notificando o evento. O método utilizado é o Least Square Method, que define a reta que minimiza o erro entre o valor adquirido e o valor calculado pela equação y = Ax + B.

Importante

Apesar do parâmetro BUF ser do tipo ANY, o bloco necessita que ele seja sempre um vetor do tipo REAL.

Parâmetros

Nome

Direção

Tipo

Padrão

Faixa / Unidade

Descrição

INP

IN

REAL

0.0

—

Entrada do sinal a ser amostrado.

XSTEP

IN

REAL

1.0

—

Intervalo a ser utilizado no eixo X.

STME

IN

TIME

T#3h

tempo

Intervalo total de aquisição do dado (dividido pelo número de elementos de BUF define o passo de amostragem).

CLR

IN

BOOL

FALSE

—

Inicializa (reseta) o bloco.

EVT

OUT

BOOL

FALSE

—

Pulso indicando que um novo dado foi adquirido e os coeficientes recalculados.

A

OUT

REAL

0.0

—

Valor do coeficiente angular A da reta.

B

OUT

REAL

0.0

—

Valor do coeficiente linear B da reta.

BUF

IN_OUT

ANY

—

—

Buffer FIFO de valores; deve ser sempre um vetor do tipo REAL.

Pré-condições

  • BUF deve ser sempre um vetor do tipo REAL; o número de elementos do vetor determina o passo de amostragem (STME / número de elementos).

Observações

  • Os coeficientes A e B só passam a ser calculados após o buffer estar completamente preenchido; a partir daí são recalculados a cada nova amostra.

  • Ative CLR para reinicializar o processo de aquisição e reiniciar o preenchimento do buffer.

Exemplo

Clique aqui para baixar a tabela de variáveis

Código ST

VAR
    my_LREG : HILS.LINEAR_REG;       (* Instancia do bloco LINEAR_REG *)
    my_BUF  : ARRAY [0..29] OF REAL; (* Buffer de valores de dados *)
    value   : REAL;                  (* Valor do sinal a ser amostrado *)
    step    : REAL;                  (* Intervalo a ser utilizado no eixo X *)
    stime   : TIME;                  (* Intervalo total para avaliação do dado *)
END_VAR

(* Exemplo de utilização do LINEAR_REG *)
(* ... *)
value := 1.5;    (* valor do sinal a ser amostrado *)
step  := 1.0;    (* Intervalo no eixo X *)
stime := T#10m;  (* Intervalo total para avaliação do dado *)
my_LREG(
    INP   := value,
    XSTEP := step,
    STME  := stime,
    CLR   := FALSE,
    BUF   := my_BUF
    );
(* ... *)
IF my_LREG.EVT THEN (* trata dado *)
  (* trata my_LREG.A e my_LREG.B *)
  (* ... *)
END_IF;
(* ... *)