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
Tags:
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;
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por