Home page > Fórum > Programação IEC 61131 (LogicLab) > Como usar o FB Average
- Este tópico tem 5 respostas, 2 participantes e foi atualizado pela última vez 1 ano, 2 meses atrás da Sergio Bertana.
-
autorPublique
-
Dezembro 23, 2019 em 5: 48 pm #52155Stephenparticipante
Eu tenho um sistema que adquire uma têmpera através do PT100 (conectado diretamente ao módulo de aquisição analógica série slimline), a saída então vai para um bloco médio com um coeficiente de 100.
O sistema estabiliza em 230 ° C e é mantido por um aquecedor acionado por PWM com um período de 2 segundos. Percebi que, enquanto o aquecedor está ligado fisicamente, a temperatura sobe até meio grau, assim que é desligada, diminui meio grau. Por isso, continua a variar assim com um período de 2 segundos.
Tentei aumentar gradualmente o coeficiente para 300, mas vejo que a situação não muda muito. Posso tentar aumentá-lo novamente, mas não gostaria que a resposta fosse muito lenta. Digamos que ainda não esteja claro como funciona o coeficiente em questão.
Dezembro 23, 2019 em 5: 58 pm #52158Sergio BertanaAdministrador do fórumO FB Average realiza uma integração do valor de entrada usando o coeficiente definido, o comportamento é muito semelhante ao obtido analogicamente por uma rede RC.
Para entender melhor como funciona, eu recomendo que você execute um projeto simples com aquisição analógica e visualize os valores de entrada e saída do FB usando a função de osciloscópio do LogicLab. Dessa forma, você pode ver graficamente a resposta de saída quando o sinal de entrada mudar.
Mas voltando à sua pergunta, o que acontece é muito estranho, você verificou no debug como está a tendência do valor da temperatura na saída do FB SysGetAnInp?
Se o valor estiver correto, você deverá ver o valor da temperatura com os dígitos decimais (e talvez também o número de unidades) que continuam a variar e, se sim, e se a aquisição com o SysGetAnInp for realizada na tarefa Voltar, você também poderá colocar um coeficiente de 1000 e mais. Você deve ver as casas decimais quase estáveis saindo do FB.
Janeiro 30, 2021 em 3: 59 pm #58911RuboxparticipanteExiste uma maneira de “zerar” o valor médio da Média FB?
Eu lanço uma captura de uma hora de uma entrada e passo para a Média. Quando eu lançar outra aquisição do mesmo item gostaria de poder recomeçar com um novo valor médio.
Janeiro 30, 2021 em 4: 01 pm #58916Sergio BertanaAdministrador do fórumDefinindo o valor de Coefficent para "0" a saída Average assume valor de Value.
Então, definindo o valor de Coefficent correto, a média é retomada.
Fevereiro 8, 2023 em 2: 33 pm #70008StephenparticipanteEste é o meu código de captura de temperatura:
PROGRAM MyProgram VAR ALR_SENS_HEATER : BOOL; (* Sensor alarm *) AN_TEMP_HEATER : REAL; (* Temperature (°C) *) ANA_IN_2 : SysGetAnInp; (* Analog inout acquisition *) AV_IN_2 : Average; (* Temperature average *) END_VAR ANA_IN_2(Address:=3, Channel:=1, Mode:=AD_PT100_DIFFER); IF ANA_IN_2.Fault THEN ALR_SENS_HEATER:=TRUE; //Sensor alarm ELSIF ANA_IN_2.Done THEN AV_IN_2(Value:=ANA_IN_2.Value,Coefficient:=125.0); AN_TEMP_HEATER:=AV_IN_2.Average; //Temperature (°C) END_IF; // [End of file]
Houve um problema elétrico no PT100 hoje. Provavelmente o bloco de aquisição analógica retornou alguns valores desproporcionalmente altos. No entanto, o erro ativou a saída de falha, a coisa é gerenciada para que o operador seja informado do problema. A manutenção corrigiu o problema elétrico sem reiniciar o sistema. O sinal de erro havia desaparecido, portanto o operador não percebeu nenhuma falha, mas depois de mais de uma hora a temperatura indicada era de 180°C, com tendência decrescente, contra a temperatura real da sonda em torno de 22°C. Isso me faz pensar que o bloco Average estava apenas "sujo".
Minha ideia seria dar suporte a "Coeficiente" para uma variável que é zerada quando o bloco SysGetAnInp está em "Falha" e retorna para o valor correto ao final do código executado quando o bloco sinaliza "Concluído". Portanto, certifico-me de que o bloco Average seja "limpo" na primeira leitura.
Em uma situação semelhante, portanto, restaurando a sonda de uma falha, também seria necessária uma espécie de reinicialização do bloco SysGetAnInp? Ou talvez uma redefinição de hardware PCB126C110 física?
Fevereiro 9, 2023 em 8: 35 am #70025Sergio BertanaAdministrador do fórumO FB Average para calcular o valor médio sobre o valor de entrada, utiliza uma variável interna de suporte que simula o comportamento de uma grande capacidade. Certamente quando o valor de entrada atingiu valores muito altos por um certo tempo ele "carregou" a "capacidade" interna do FB que então, quando o valor correto reaparecer, levará um certo tempo para "descarregar".
O módulo de aquisição analógico em caso de erro de aquisição (Exemplo quebra de sonda) além de gerar um erro, retorna o estado como valor REAL NaN acrônimo de Not a Number. Não sei qual versão do FB Average você possui (clique com o botão direito no FB para visualizar suas propriedades), a partir da versão Sfr054d160 foi introduzida a verificação do valor de entrada se NaN o INF o valor de “capacidade” é zerado. Pelo que você diz, parece que você está usando uma versão mais antiga.
No entanto, como você disse corretamente, se você redefinir o valor de Coefficent o FB copia imediatamente o valor de entrada na "capacidade" interna e depois na saída. Portanto, é correto redefinir a aquisição de falha Coefficent, mas para fazer efeito você também deve executar o FB, no seu programa em caso de erro ele não é mais executado. Veja como você pode mudar isso.
IF ANA_IN_2.Fault THEN ALR_SENS_HEATER:=TRUE; //Sensor alarm AV_IN_2.Coefficient:=0.0; ELSIF ANA_IN_2.Done THEN AV_IN_2(Value:=ANA_IN_2.Value); AV_IN_2.Coefficient:=125.0; AN_TEMP_HEATER:=AV_IN_2.Average; //Temperature (°C) END_IF;
Por outro lado, não é necessário realizar nenhuma operação no módulo analógico que restaure o funcionamento quando a falha for solucionada.
-
autorPublique
- Você deve estar logado para responder a este tópico.