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 |
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 |
B |
OUT |
REAL |
0.0 |
— |
Valor do coeficiente linear |
BUF |
IN_OUT |
ANY |
— |
— |
Buffer FIFO de valores; deve ser sempre um vetor do tipo REAL. |
Pré-condições
BUFdeve 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
AeBsó passam a ser calculados após o buffer estar completamente preenchido; a partir daí são recalculados a cada nova amostra.Ative
CLRpara 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;
(* ... *)