Estou com um probleminha no scadabr.

estou fazendo um sistema de automação onde preciso acionar um queimador atravez de um painel de controle. para isso eu criei um meta data point multi estados com o seguinte codigo:

if (tempo1 == 0)
return 0;

else (tempo1==contador && temperatura1 < sensor)
return 1;

if (tempo1==contador &&  temperatura1 < sensor)
return 2;

onde: tempo = tempo escolhido pelo usuário para a ação se for 0 não faz nada.

         contador = um cronometro (em segundos apenas) que é iniciado no inicio do processo.

          temperatura1 = temperatura configurada pelo usuario

         sensor = leitura de temperatura através de sensores instalados no equipamento

Meu problema é q independente de qualquer coisa o resultado é sempre 1

       

Exibições: 1461

Responder esta

Respostas a este tópico

Vc reparou que o else e segundo if são o mesmo?

Não entendi bem o que queria. Explica direitinho pois resolvemos isso rapidinho.

opa eu digitei o código aqui errado. no meta datapoint esta:

if (tempo1 == 0)
return 0;

else (tempo1 !=0 && tempo1==contador && temperatura1 < sensor)
return 1;

if (tempo1 !=0 && tempo1==contador && temperatura1 > sensor)
return 2;

Eu quero fazer o seguinte:

quando iniciar a torra do cafe sera ligado um cronometro (contador) que ira marcar o tempo em segundos (contador)

ae  na interface tera 2 valores a ser configurados pelo usuário. Tempo e temperatura

quando no valor tempo (colocado pelo usuário  for 0 o data point  vai retornar 0 . Agora quando o tempo for diferente de 0 eu quero que ele fique  comparando o valor do tempo com o valor do cronometro quando os 2 forem iguais ou seja o cronometro chegou no tempo configurado pelo usuário ele fara o seguinte:

Se a temperatura configurada pelo usuário for menor que a lida no sensor  ele ira retornar 1 

Se a temperatura configurada pelo usuário for maior que a lida no sensor  ele ira retornar 2

Acho q é isso... 

if(tempousuario != 0)

   {

     if (tempousuario==contador)

        {       

         if(temp_usuario<=temp_medida)

         return 1;

         else

         return 2;

       }

   }

else

{

return 0; 

}

 

//////////////

 

Cara to com pouco tempo, mas pelo que entendi você teria que colokar if dentro de if e aparentemente não esta não. acho que você não precisa verificar novamente o (tempo 1 !=0) já que lá em cima você ja verificou.

Pelo que eu entendi fiz esse código acima, ve se te ajuda.

kra pelo que vi o seu codigo ia servir como uma luva... 

Mais num esta funcionando aqui tb...

pelo que eu pude ver o problema não esta na logica da programação.

o erro é que não esta comparando o tempo configurável com o cronometro

Cara como o contador varia rapidamente, ele pode esta contando os milesimos tbm crie uma logica de maior ou igual, ou desconsidere os milesimos, isso acontece em programação em assembler.

Você pode gravar o valor do contador em uma variavel separada para que em uma outra analise do contador ele não se altere..

exemplo:

valcont = contador;

if(tempousuario != 0)

   {

     if (tempousuario==valcont)

        {       

         if(temp_usuario<=temp_medida)

         return 1;

         else

         return 2;

       }

   }

else

{

return 0; 

}

////////////

 

se tudo isso não funcionar tem que verificar as condições (tempousuario>=valcont) -> Sim então(tempousuario<cont). e assim por diante, pois seu contador pode esta considerando os milesimos

Valew

Kra eu devo estar ficando louko...

Mudei as coisas como indicado pelo Thiago e funfo que é uma beleza...

Bem quase funfo quero dizer.

olha so o que esta acontecendo aqui.

configurei um tempo de 30

inicio a contagem ... ate ae tudo ok mais derrepente quando no cronometro marca 4 ele muda o estado (so deveria fazer isso no 30) e quando da 11 ele volta ao estado que seria o certo.

Com 30 ele faz o que tem q fazer e vai tudo ok ate 100 ae ele retorna 0.

por que sera que esta acontecendo isso. Vou colocar o codigo aqui.

if(tempo1 != 0)
{
if (tempo1<=contador)
{
if(temperatura1<=sensor)
return 1;
else
return 2;
}
}
else
{
return 0;
}

Amigo

você tem que verificar se o tempo1> que o contador tbm eu esqueci de colocar no código. Vo refazer pra você

if(tempo1 != 0)
{
if (tempo1<=contador) //
 {

  If(tempo1>=contador) // Se tempo1 é menor ou igual a contador e maior ou igual ao contador, logicamente ele é igual. Logo!

   {

     if(temperatura1<=sensor)
     return 1;
     else
     return 2;
     }
  }

}
else
{
return 0;
}

Amigo roda esse código. Cara tem como melhorar muito esse código mas não to conteguindo achar aqui. Quando achar eu mando.

kra o ultimo código que vc mandou so retornava 0.

E qualquer mudança que eu faço no codigo da na mesma: independente do valor de tempo configurado ele dispara entre 4 e 11 ( esse valor varia dependendo do que tiver configurado no tempo) depois funciona correto ate 100 quando ele retorna a 0 e em alguns valores estados ele volta a funcionar corretamente depois d 200

Cara uma duvida. Como que esta funcionando seu cronometro? Ele conta só os segundos ou os milisegundos tambem? Cara posta o código todo. Eu tenho essa programação em "Tasm_P. É uma programação em assembler, a grande diferença é que em assembler eu puxo o tempo do sistema e separo se eu quero os MSB ou LSB, Com isso eu consigo gerar o tempo exato. Se o seu contador sempre iniciar do '0' quando eu inicio o sistema acredito que ficaria assim:

if(tempo1 != 0)
{
if (contador>=tempo1) //
 {

     if(temperatura1<=sensor)
     {return 1;}
     else
     {return 2;}
  }
  

}
else
return 0;

 

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço