Alguém conhece o scadabr e sabe como usa-lo, caso conheça por favor entre em contato pois preciso de algumas informações.

Uma delas é o protocolo modbus pois queria saber como comunicar um sensor,atuador,etc como o supervisor por meio de um microcontrolador ou coisa paracida, me parece que para poder acionar ou receber informações o supervisorio precisa de um clp (que é caro) ou por um microcontrolador?

se alguém tiver informações sobre como usar e implementar ou pelo menos mostrar o caminho das pedras já agradeço.

adriano

Exibições: 97569

Responder esta

Respostas a este tópico

Primeiro, quero comentar, vc tem aula com o Prof. André?

Ai que inveja.

Seu eu pego ele de conversa eram uns 7 dias sem calar a boca.

Aproveite e aprenda bastante.

Resolva a compatibilidade do pino enable. No codigo está 2, se usar o shield do LDG lembre se que é o 6.

No código a porta 8 e 9 são entradas não é? mas no switch do código vc deixou as duas como saída e ainda manda apagar.

A incompatibilidade está ai.

Dá mais uma arrumada que chegamos no resultado.

Sidney, tentei mudar para entrada mas continua o problema, vou ver hj na aula, quero fazer usando a biblioteca do André é mais fácil.

Eu tenho aula com ele sim, ele dá aula de redes industriais e sistemas supervisórios na Estácio. É um excelente professor, já tive aula com ele também de interfaces e periféricos.

Olá Sidney, agora estou usando a biblioteca do André, os erros acabaram, está rodando perfeito, mas agora estou apanhando para criar um acionamento, estou lendo o readme da biblioteca mas ainda não consigo. 

Criei duas saídas digitais que consigo acionar pela interface gráfica sem problema;

Criei uma entrada digital que está funcionando quando mudo o estado dela corresponde no scada; 

Agora preciso que quando a entrada ficar alta, uma saída digital também fique alta, ou seja, a saída tem que acompanhar o estado da entrada. 

Não estou conseguindo acertar a sintaxe pra fazer isso no arduino, veja no código as linhas comentadas são as sintaxes que já tentei mas não funcionou: 

#include <Modbus.h>
#include <ModbusSerial.h>

// Modbus Registers Offsets (0-9999)
const int ESTENDER = 100;
const int RECOLHER = 101;
const int CHUVA = 102;

// Used Pins
const int MotorEstende = 12;
const int MotorRecolher = 11;
const int SensorChuva = 10;

// ModbusSerial object
ModbusSerial mb;

void setup() {
// Config Modbus Serial (port, speed, byte format)
mb.config(&Serial, 38400, SERIAL_8N1);
// Set the Slave ID (1-247) FUNÇÃO DE ESCRITA
mb.setSlaveId(10);

// Set ledPin mode
pinMode(MotorEstende, OUTPUT);
mb.addCoil(ESTENDER);

pinMode(MotorRecolher, OUTPUT);
mb.addCoil(RECOLHER);

pinMode(SensorChuva, INPUT);
mb.addIsts(CHUVA);
}

void loop() {
mb.task();

digitalWrite(MotorEstende, mb.Coil(ESTENDER));
digitalWrite(MotorRecolher, mb.Coil(RECOLHER));

mb.Ists(CHUVA, digitalRead(SensorChuva));

if (CHUVA==HIGH){
digitalWrite(MotorEstende, HIGH);

// digitalWrite(ESTENDER, HIGH);
// digitalWrite(MotorEstende, mb.Coil(HIGH));
// digitalWrite(mb.Coil(MotorEstende, HIGH)); não compila
// mb.addCoil(MotorEstende, HIGH);
// mb.addCoil(ESTENDER, HIGH);
// bool Coil(word offset, bool value)
}
}

Oi Alan, você está comparando o offset e não o valor do pino do sensor de chuva, o offset é apenas um número (registro) que o supervisório (Scada) usa para referenciar as entradas/saídas no escravo.

Estou colocando abaixo o código corrigido, no entanto eu não faria dessa forma. Pensando no escravo como uma RTU (Remote Terminal Unit) a lógica de acionamento (em resumo, seu if) deveria ficar no SCADA e não no escravo. No ScadaBR você cria um evento relacionado ao Sensor de chuva. Este evento detectará uma variação no sensor de chuva de 0 para 1 e enviará uma mensagem para o escravo para ligar o datapoint ESTENDER. Assim você tira o if do escravo e transfere para o Scada a lógica de controle.

void loop( ) {

    mb.task();
   

    digitalWrite(MotorEstende, mb.Coil(ESTENDER));
    digitalWrite(MotorRecolher, mb.Coil(RECOLHER));  // Talvez precise disso na sua logica

    int chovendo = digitalRead(SensorChuva);

    mb.Ists(CHUVA, chovendo);

    if (chovendo == HIGH) {

         mb.Coil(ESTENDER, HIGH);

         mb.Coil(RECOLHER, LOW);

    }

}

Ok, obrigado professor, então pelo que entendi eu devo criar no sketch apenas as entradas e saídas, toda a lógica de como as saídas respondem a entrada deve ficar no scada, correto?

alan,

nem deu tempo de ler e ja teve o socorro. Mas foi bem isso.

Temos que conversar bastante sobre a divisão de tarefas entre mestre e escravo. Nesse ponto existe uma complexidade muito grande. Envolve alguns tempos, amarrações, etc.

Mas estou contente que está caminhando. Estou aqui para ajudar e aprender mais.

Olá Sidney, bom consegui já fazer funcionar como eu queria, ainda não sei como fazer como o André falou, a lógica ainda está no arduino. Vou montar a maquete e depois mostro como ficou funcionando. 

Eu vi, vai nesse caminho mesmo. Para a logica ficar no scadabr precisamos de mais tempo para te explicar como programar lá.

Segue nessa parte primeiro.

Pessoal, eu postei um tópico novo que é de interesse de quem está acompanhando esta discussão,

fica o convite para ler e discutir...

http://labdegaragem.com/forum/topics/convite-para-melhorias-do-scad...

grande abraço

Vc vai precisar de um ci 485 no lado do arduino. Para comunicar com o PC.

Esse código foi feito especificamente para o ESP8266? Queria entender mais detalhes do que vc está tentando fazer. Acho que posso ajudar.

Obrigado pela sua atenção, meu caro. 

Esse é basicamente o exemplo da biblioteca do andre sarmento. Só adicionei a parte so serial2 pra monitorar o que está acontecendo no esp... 

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço