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: 97554

Responder esta

Respostas a este tópico

Obrigado Adriano pela informação, é um projeto que pretendo pegar e usar esse CLP, mas no momento não tenho o equipamento em mãos.

Começarei a fazer testes no SCADABR usando Arduino, para depois fazer a integração com o CLP.

ok, para te ajudar na integração vou procurar fazer um esquema da comunicação via modbus e passar aqui, ai vc testa para ver se vai quando tiver o equipamento em mãos, mas o equipamento tendo comunicação modbus vai tranquilo, depois é so fazer os paranauê e pronto CLP trabalhando a toda força via  scadabr. 

Rodrigo,

não precisa de milagre. Fica tranquilo que já fizemos isso várias vezes e dá certo. Revisa tudo ai.

Sabe uma coisa boa para fazer? vc faz um video dos seus passos e nos mostra. A ajuda vem com certeza.

Olá Adriano, chegou esta semana meu raspberry e estou tentando por pra rodar o scadabr mas não estou conseguindo. Já baixei o scadabr, mas estou travando com a instalação do JDK6. No link que você passou tem um comando: 

add-apt-repository ppa:webupd8team/java, mas este comando não funciona          
(
add-apt-repository: command not found). Não sei oque pode ser. consegui instalar o jdk7 mas ja vi
meu windows que da problema com o scadabr. Poderia me dar uma força? Estou louco pra por o scada
pra rodar no raspberry.
Quem está habituado ao Linux sabe que, apesar da sua flexibilidade, milagres não existem. As dependências associadas a um determinado aplicativo devem ser respeitadas, ou o aplicativo não vai funcionar, e provavelmente nem instalar.
Foi o que aconteceu comigo ao instalar o ScadaBR nesta última versão estável do Ubuntu, com java 8 e tomcat8.
Conversando com o Adriano Alcantara, descobri que precisaria do java6 e do tomcat6. Até aí tudo bem, bastaria adicionar os repositórios corretos, se não fosse por um probleminha: ao retroceder pacotes no Linux, você corre o risco de ter que retroceder também o kernel e uma série de aplicativos para versões anteriores, abrindo brechas de segurança e quebrando dependências entre os pacotes.
Não quis arriscar e procurei um pouco mais no Google, até descobrir este tutorial. Basicamente, baixar o pacote mango, descompactá-lo na pasta ScadaBR, atribuir chmod 775 para a pasta do ScadaBR e reiniciar o tomcat.
 

Aee Garagistas e Amantes da Automação, 

Boas novas, o ScadaBR está voltando com tudo!!! Adeus JRE6, estamos para lançar a versão 1.1 com melhorias de estabilidades e novas funções super bacanas, não precisar mais de um gateway para integrar um modem gprs ao ScadaBR está entre elas.

Além disso estamos oferecendo cursos para a comunidade, aos interessados, abaixo o link, a ideia é aumentar a comunidade e reativá-la, além do aluno sair do curso sabendo criar uma aplicação completa e gerenciar o sistema, vendo até tópicos avançados de scripts, datasource SQL, e operação distribuída com concentrador. Quem se interessar pode parcelar em até 10x e ainda leva um ESP8266 com Modbus TCP/IP para treinar em casa com variáveis reais e terá a oportunidade de participar de um grupo exclusivo de integradores no WhatsApp para troca de informação instantâneas.

http://www.scadabr.org.br/curso-scadabr/

Também teremos novidades no desenvolvimento do sistema, firmamos uma parceria bacana e uma versão LTS ainda está por vir... Sem mais Spoilers por enquanto! :)

Aguardamos todos para os cursos e para participar dos fóruns! Queremos muito publicar os cases da comunidade. Quem tiver algo pronto, envie para cursos@scadabr.com.br

Oi Fabio, Estou feliz pela volta dos trabalhos com ScadaBR, eu estava querendo fazer o curso, mas infelizmente estou saindo do país logo logo, queria deixar aqui o meu pedido para que vcs comecem a criar cursos online, pois assim ficar fácil conseguir faze-lo de qualquer lugar.Também fico aguardando os releases do ScadaBR e suas novidades, deixo aqui tb o meu interessa em participar o what'sup, pois como falei não vou fazer o curso por motivos de viagem. Ja estudo o ScadaBR há algum tempo, e agora que vou terminar a pós em Gerencia e Projetos de rede, vou poder me dedicar ao meu supervisório favorito, espero poder trabalhar junto com vcs no desenvolvimento do sistema ScadaBR. grande abraço.

Fábio sabe onde consigo baixar a versão 1.1 para usar no raspberry pi 3... Grato desde já,!

Caro Paoman,

Ate onde sei a versao 1.1 e uma versao beta do ScadaBR com a correçao de alguns bugs e atualizado para tomcat7 e java7, mas o grande reves dessa versao e o fato de ele nao dar suporte para porta serial. Por isso que ele ainda nao foi liberado. Tem um grupo com alguns poucos programadores que estam trabalhando nele para lança-lo com todos os bugs resolvidos.

aqui meu email 

adrianoap_rj@hotmail.com

Pessoal, tudo bem?

Estou precisando de uma força pra fazer a conexão Arduino x Scadabr. Instalei o Scadabr no meu raspberry, quando tento adicionar um Data Source ele não aparece. Estou ligando o Arduino ao raspberry pelo cabo USB.

Alguém sabe oq poderia ser?

Obrigado

Sidney

Muito obrigado pela resposta.

A parte de infra elétrica, aparentemente está OK

Segue o código:

//////////////////// Port information ///////////////////
#define baud 19200
#define timeout 1000
#define polling 10 // the scan rate

// If the packets internal retry register matches
// the set retry count then communication is stopped
// on that packet. To re-enable the packet you must
// set the "connection" variable to true.
#define retry_count 10

// used to toggle the receive/transmit pin on the driver
#define TxEnablePin 20

#define LED 9

// This is the easiest way to create new packets
// Add as many as you want. TOTAL_NO_OF_PACKETS
// is automatically updated.
enum
{
  PACKET1,
  PACKET2,
  PACKET3,
  PACKET4,
  PACKET5,
  PACKET6,
  PACKET7,
  PACKET8,
  PACKET9,
  PACKET10,
  PACKET11,
  PACKET12,
  PACKET13,
  PACKET14,
  PACKET15,
  PACKET16,
  PACKET17,
  TOTAL_NO_OF_PACKETS // leave this last entry
};

// Create an array of Packets to be configured
Packet packets[TOTAL_NO_OF_PACKETS];

// Create a packetPointer to access each packet
// individually. This is not required you can access
// the array explicitly. E.g. packets[PACKET1].id = 2;
// This does become tedious though...
//////////////////////////HMI READS/////////////////////////////
packetPointer enableDisableHMI = &packets[PACKET1];
packetPointer runFwdHMI = &packets[PACKET2];
packetPointer runRevHMI = &packets[PACKET3];
packetPointer resetHMI = &packets[PACKET4];
packetPointer eStopHMI = &packets[PACKET5];
packetPointer userSetSpeedHMI = &packets[PACKET6];

//////////////////////////HMI WRITES////////////////////////////
packetPointer runLedHMI = &packets[PACKET7];
packetPointer stopLedHMI = &packets[PACKET8];
packetPointer errorLedHMI = &packets[PACKET9];
packetPointer actualSpeedHMI = &packets[PACKET10];
packetPointer motorCurrentHMI = &packets[PACKET11];

/////////////////////////VSD READS//////////////////////////////
packetPointer statusWordVSD = &packets[PACKET12];
packetPointer actualSpeedVSD = &packets[PACKET13];
packetPointer motorCurrentVSD = &packets[PACKET14];

/////////////////////////VSD WRITES/////////////////////////////
packetPointer commandWordVSD = &packets[PACKET15];
packetPointer userSetSpeedVSD = &packets[PACKET16];
packetPointer clearFaultsVSD = &packets[PACKET17];

////////HMI READ VARIABLES////////////
unsigned int readEnableDisableHMI[1];
unsigned int readRunFwdHMI[1];
unsigned int readRunRevHMI[1];
unsigned int readResetHMI[1];
unsigned int readEstopHMI[1];
unsigned int readUserSetSpeedHMI[1];

////////HMI WRITE VARIABLES//////////
unsigned int writeRunLedHMI[1];
unsigned int writeStopLedHMI[1];
unsigned int writeErrorLedHMI[1];
unsigned int writeActualSpeedHMI[1];
unsigned int writeMotorCurrentHMI[1];

////////VSD READ VARIABLES///////////
unsigned int readStatusWordVSD[1];
unsigned int readActualSpeedVSD[1];
unsigned int readMotorCurrentVSD[1];

////////VSD WRITE VARIABLES//////////
unsigned int writeControlWordVSD[1];
unsigned int writeUserSetSpeedVSD[1]={0};
unsigned int writeClearFaultsVSD[1];


// High or Low variables as arrays
unsigned int writeHigh[1]={1};
unsigned int writeLow[1]={0};

const int vccPin =  17;
const int gndPin =  21;

unsigned int BUTTONSTATE;
unsigned int PREVBUTTONSTATE;

void setup()
{
   Serial.begin(19200);
  
  // Set modes of some pins for LED outputs
  pinMode(vccPin, OUTPUT);
  pinMode(gndPin, OUTPUT);
  digitalWrite(vccPin, HIGH);
  digitalWrite(gndPin, LOW);
  
  // Read all values from HMI 
  modbus_construct(enableDisableHMI, 3, READ_HOLDING_REGISTERS, 50, 1, readEnableDisableHMI);
  modbus_construct(runFwdHMI, 3, READ_HOLDING_REGISTERS, 60, 1, readRunFwdHMI);
  modbus_construct(runRevHMI, 3, READ_HOLDING_REGISTERS, 70, 1, readRunRevHMI);
  modbus_construct(resetHMI, 3, READ_HOLDING_REGISTERS, 80, 1, readResetHMI);
  modbus_construct(eStopHMI, 3, READ_HOLDING_REGISTERS, 90, 1, readEstopHMI);
  modbus_construct(userSetSpeedHMI, 3, READ_HOLDING_REGISTERS, 10, 1, readUserSetSpeedHMI);
 
  // Write required values to HMI
  modbus_construct(runLedHMI, 3, PRESET_MULTIPLE_REGISTERS, 100, 1, writeRunLedHMI);
  modbus_construct(stopLedHMI, 3, PRESET_MULTIPLE_REGISTERS, 110, 1, writeStopLedHMI);
  modbus_construct(errorLedHMI, 3, PRESET_MULTIPLE_REGISTERS, 120, 1, writeErrorLedHMI);
  modbus_construct(actualSpeedHMI, 3, PRESET_MULTIPLE_REGISTERS, 0, 1, readActualSpeedVSD);
  modbus_construct(motorCurrentHMI, 3, PRESET_MULTIPLE_REGISTERS, 20, 1, readMotorCurrentVSD);
 
  // Read all values from VSD
  modbus_construct(statusWordVSD, 2, READ_HOLDING_REGISTERS, 8603, 1, readStatusWordVSD);
  modbus_construct(actualSpeedVSD, 2, READ_HOLDING_REGISTERS, 8604, 1, readActualSpeedVSD);
  modbus_construct(motorCurrentVSD, 2, READ_HOLDING_REGISTERS, 3204, 1, readMotorCurrentVSD);
 
  // Write required values to VSD
  modbus_construct(commandWordVSD, 2, PRESET_MULTIPLE_REGISTERS, 8601, 1, writeControlWordVSD);
  modbus_construct(userSetSpeedVSD, 2, PRESET_MULTIPLE_REGISTERS, 8602, 1, readUserSetSpeedHMI);
  modbus_construct(clearFaultsVSD, 2, PRESET_MULTIPLE_REGISTERS, 8501, 1, writeClearFaultsVSD);
 
  // Configure the MODBUS connection
  modbus_configure(baud, SERIAL_8E1, timeout, polling, retry_count, TxEnablePin, packets, TOTAL_NO_OF_PACKETS);
 
  pinMode(LED, OUTPUT);
  pinMode(6,OUTPUT);
  pinMode(5,OUTPUT);
  digitalWrite(5,LOW);
  pinMode(3,OUTPUT);
  pinMode(2,OUTPUT);
  digitalWrite(2,LOW);
  pinMode(11,OUTPUT);
  pinMode(10,OUTPUT);
  digitalWrite(10,LOW);
}

void loop()
{
  modbus_update();  // Get the latest register values for the buttons and screen elements...
  checkState();     // Convert the button register states into a single integer value for use in switch|case statement...
 
  switch(BUTTONSTATE){
  
   case 0:
       
        while(BUTTONSTATE==0)
        {
          modbus_update();
          checkState();
          Serial.println(BUTTONSTATE);
          // Your Code Here...
        }
         
   break;
  
   case 1:
                         
        while(BUTTONSTATE==1)
        {
         modbus_update();
         checkState();
         Serial.println(BUTTONSTATE);
         // Your Code Here...
        }
               
   break;
  
   case 2:
       
        while(BUTTONSTATE==2)
        {
          modbus_update();
          checkState();
          Serial.println(BUTTONSTATE);
          // Your Code Here...
        }
               
   break;
  
   case 3:
  
       while(BUTTONSTATE==3)
        {
          modbus_update();
          checkState();
          Serial.println(BUTTONSTATE);
          // Your Code Here...
        }
               
   break;
  
   case 4:
       
        while(BUTTONSTATE==4)
        {
          modbus_update();
          checkState();
          Serial.println(BUTTONSTATE);
          // Your Code Here...
        }
       
   break;
  
   case 5:
      
       while(BUTTONSTATE==5)
        {
          modbus_update();
          checkState();
          Serial.println(BUTTONSTATE);
          // Your Code Here...
        }
        
   break;
  
   case 6:
  
        while(BUTTONSTATE==6)
        {
          modbus_update();
          checkState();
          Serial.println(BUTTONSTATE);
        // Your Code Here...
        }
       
   break;
  
   case 7:
       
        while(BUTTONSTATE==7)
        {
          modbus_update();
          checkState();
          Serial.println(BUTTONSTATE);
        // Your Code Here...
        }
       
   break;
  
   case 8:
       
        while(BUTTONSTATE==8)
        {
          modbus_update();
          checkState();
          Serial.println(BUTTONSTATE);
        // Your Code Here...
        }
       
   break;
  
   case 9:
       
        while(BUTTONSTATE==9)
        {
          modbus_update();
          checkState();
          Serial.println(BUTTONSTATE);
        // Your Code Here...
        }
       
   break;
  
   case 10:
       
        while(BUTTONSTATE==10)
        {
          modbus_update();
          checkState();
          Serial.println(BUTTONSTATE);
        // Your Code Here...
        }
       
   break;
  
   case 16:
  
        while(BUTTONSTATE==16)
        {
          modbus_update();
          checkState();
          Serial.println(BUTTONSTATE);
        // Your Code Here...
        }  
   break;
  
   default:
  
   break;
   
  }
  
}

void checkState() // This function simply reads whether each button is active("1") or inactive ("0") and bitshifts each button to create a unique BUTTONSTATE value for each combination of button presses...
{
  PREVBUTTONSTATE=BUTTONSTATE;
     
  BUTTONSTATE = (readEnableDisableHMI[0])+(readRunFwdHMI[0]1)+(readRunRevHMI[0]2)+(readResetHMI[0]3)+(readEstopHMI[0]4); // Example: Drive enabled, and run forward... 0b00011 = dec "3"... so BUTTONSTATE = 3.
 
  if(BUTTONSTATE==11||BUTTONSTATE==12||BUTTONSTATE==13||BUTTONSTATE==14||BUTTONSTATE==15) // For our implementation these button press combinations are not valid... so just make them = to state 10...
  {
    BUTTONSTATE=10;
  }
  // As above... These are all the possible BUTTONSTATE values when the E-stop button is pressed... but if E-Stop is pressed we want to kill all buttons anyway...
  if(BUTTONSTATE==17||BUTTONSTATE==18||BUTTONSTATE==19||BUTTONSTATE==20||BUTTONSTATE==21||BUTTONSTATE==22||BUTTONSTATE==23||BUTTONSTATE==24||BUTTONSTATE==25||BUTTONSTATE==26||BUTTONSTATE==27||BUTTONSTATE==28||BUTTONSTATE==29||BUTTONSTATE==30||BUTTONSTATE==31)
  {
    BUTTONSTATE=16;
  }
     
}

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço