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
Tags:
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.
Informações interessantes do projeto ScadaBR no forum embarcados:
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.
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;
}
}
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2023 Criado por Marcelo Rodrigues.
Ativado por