Olá pessoal,

Estou usando o ScadaBR que atua como supervisório do projeto. Ele apenas envia a frequencia e a amplitude que o Arduino deve utilizar para fazer com que o motor de passo atue numa caixa conectada numa haste, fazendo-a subir ou descer(num percurso de 30cm).

O problema é que fiz esta passagem para o primeiro controle:

void setup (){
mb.config(&Serial, 9600, SERIAL_8N1);
mb.setSlaveId(10);
mb.addHreg(FREQ_HREG);
mb.addHreg(AMPL_HREG);
mb.addHreg(AMPLREC_HREG);
mb.addHreg(FREQREC_HREG);
pinMode (ligar, OUTPUT);
pinMode (giro, OUTPUT);
pinMode (srot, OUTPUT);
pinMode (passoM, OUTPUT);
}

void loop ()
{
mb.task();
frequencia = mb.Hreg(FREQ_HREG);
amplitude = mb.Hreg(AMPL_HREG);
mb.Hreg(FREQREC_HREG, frequencia);
mb.Hreg(AMPLREC_HREG, amplitude);
tm = (1000.00/frequencia);
if ((frequencia != 0)&&(amplitude != 0))
{
digitalWrite(ligar,HIGH);
digitalWrite (srot,LOW);
for(d=0;d<2*amplitude;d++) // primeiro while o motor roda pra direita(o bloco sobe)
{
for (n=0;n<200;n++)//motor precisa de 200 ciclos para dar 360º, passo=1.8º//
{
digitalWrite (srot,LOW);
delay(ts);
digitalWrite(giro,HIGH);
delay(tm);
digitalWrite(giro,LOW);
delay(tm);
}
}
delay(2000);
for(d=2*amplitude;d>0;d--) // segundo while o motor roda pra esquerda(o bloco desce)
{
for (n=200;n>0;n--)//motor precisa de 200 ciclos para dar 360º, passo=1.8º//
{
digitalWrite (srot,HIGH);
delay(ts);
digitalWrite(giro,HIGH);
delay(tm);
digitalWrite(giro,LOW);
delay(tm);
}
}
delay(1500);
}
}

Só que ao executar, o ScadaBR para de responder, fica a mensagem "valor do ponto pode nao ser configuravel"....

Alguem pode me ajudar sobre isso? oq fazer para arrumar ? Eu usei esse metodo de "flag" onde o scada só modifica os valores após o usuário solicitar.... mas msm assim nao funciona.

Exibições: 428

Responder esta

Respostas a este tópico

Olá,

Como você não postou o código todo nem a configuração feita no scada fica difícil ajudar com mais precisão.

Mas ainda é possível ver um erro no código que irá impedir a comunicação entre o scada e o arduino se o protocolo usado for o modbus rtu.

O uso da instrução delay no código deve ser evitada por outra forma de temporização que não pare o o funcionamento do código.

O millis ou outra interupção de tempo seria uma solução, ou a troca do protocolo para o modbus ascii.

Olá Wiechert

Eu coloquei todo o void loop() agora. Era para o programa repetir a amplitude e a frequencia até o scada receber outro valor, mas ao executar ele para de vez. Seria o 'delay' o problema ? Pq o arduino nao roda uma sequencia paralela a outra né ?

Vlw

Já comentei o problema de não funcionar com delay...

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço