Jump to content

Recommended Posts

Posted

Viva,

Estou aqui a tentar encontrar alguma informacao sobre um problema que me apareceu ha dias.

Basicamente, houve uma paragem inesperada num dos sistemas onde trabalho e ao analisar o codigo do fabricante reparei em algo que pode explicar o que se passou mas gostava de ter a certeza absoluta. Notem que o facto da maquina estar em producao e ser bastante critica em termos de seguranca, nao tenho possibilidade de testar nada.

Entao, no programa, dentro duma funcao tenho uma FB a ser chamada.

Dentro da FB as instrucoes sao algo como:

A enable  // isto esta a 1
JC en

L setP       // nao e executado
T SetP

en: nop 1

A commfault
JC End

// Imenso codigo comentado...
>R
// uma linha de codigo comentado...
[...]

O ....
O....
= Var1
S Var2

end: nop 1

A minha duvida prende-se com a instrucao >R. Esta e a primeira instrucao que usa os acumuladores e gostava de clarificar qual e o estado dos acumuladores quando a FB comeca. Os acumuladores sao limpos? Ou mantem os valores que tinham antes da FB ser chamada? Eu lembro-me de ver algo semelhante ha uns anos atras quando uma variavel interna duma funcao era lida sem nunca ter sido inicializada, mas nao encontro nenhuma informacao que confirme isto.

O programa tambem tem varias OBs (temporizadas e nao so) a correr que podem interferir com isto.

include <ai se te avio>

Mãe () {

}

Posted

Respondendo diretamente à tua dúvida, os acumuladores não são limpos no início da OB/FC/FB

Se não carregas os acumuladores, estás a usar "Lixo" deixado pela rotina que correu anteriormente.

Ricardo Timóteo

Posted

O princípio dos Acumuladores (e das variaveis locais/TEMP) é carregar antes de usar, se usares antes de carregar estas a usar lixo, em qualquer condição, OB/FC/FB.

Numa OB temporizada (ou ciclica, por exemplo OB35), quando inicia, os acumuladores e as variaveis TEMP têm valores e quando acaba, não limpa esses valores.

O que seria correto fazer no inicio das OBs (cliclicas, interrupt ou outras) seria guardar (pelo menos) os valores dos acumuladores e no fim voltar a meter os valores iniciais nos acumuladores. Já vi isto em alguns programas, mas é raro.

Imagina, por exemplo o seguinte:

L 100.0 => ACC1 = ACC0 (não intereça neste caso) / ACC0 = 100.0

L 200.0 => ACC1 = ACC0 (ou seja ACC1 = 100.0) / ACC0 = 200.0

+R => ACC0 = 300.0

T MD20 => MD20 = 300.0

No meio do calculo, corre uma OB que mexe do accumulador (sem guardar os valores do mesmo), o resultado final deste calculo, seria errado.

Claro que o próximo cíclo do automato, o resultado seria certo, pelo que este erro pode ser irrelevante. Normalmente este erro é irrelevante.

Mas também pode não ser, pode neste ciclo disparar uma alarme de alta ou assim, sem motivo real, só porque correu um OB ciclico,

Compliquei, a explicação?

Ricardo Timóteo

  • 2 months later...
Posted

Boa tarde,

Sou novo aqui, gostaria de saber se com uma entrada analogica no automato posso controlar directamente a temperatura de uma resistência electrica atravez do termopar?

Preciso de controlar a temperatura de uma resistência elctrica entre 125 a 150ºc, com um termopar posso controlar?

Cumprimentos

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.