bubulindo Posted March 3, 2014 at 10:12 AM Report #547313 Posted March 3, 2014 at 10:12 AM 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 () { }
nokPT Posted March 4, 2014 at 08:12 PM Report #547530 Posted March 4, 2014 at 08:12 PM 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
bubulindo Posted March 6, 2014 at 07:46 AM Author Report #547687 Posted March 6, 2014 at 07:46 AM Pois... eu arranjei um computador com o PLC-SIM e comprovei isso. Já agora, no final duma OB temporizada, o mesmo acontecerá então. include <ai se te avio> Mãe () { }
nokPT Posted March 6, 2014 at 11:55 AM Report #547736 Posted March 6, 2014 at 11:55 AM 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
bubulindo Posted March 6, 2014 at 12:21 PM Author Report #547741 Posted March 6, 2014 at 12:21 PM Não... de todo. De inicio, pensei que o problema pudesse ter sido uma OB, mas depois vi que não.... Tudo isto por uma linha não comentada... include <ai se te avio> Mãe () { }
Ricardo Costa Posted May 23, 2014 at 04:49 PM Report #556797 Posted May 23, 2014 at 04:49 PM 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
bubulindo Posted May 24, 2014 at 01:53 PM Author Report #556869 Posted May 24, 2014 at 01:53 PM Coloca isto num post separado... include <ai se te avio> Mãe () { }
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now