ar e facilitar nossas vidas, principalmente facilitando operações, registrando dados e melhorando nossa qualidade de vida.
O projeto atual é de um Multimedidor Kron Multi-K, como esse da foto.
Ele nativamente fala RS485, comunicação que uso muito, e protocolo modbus.
Sua lista de parâmetros é vasta:
Tensão (fase-fase, fase-neutro e trifásica)
Freqüência
Corrente (por fase e trifásica)
Potência ativa (por fase e trifásica)
Potência reativa (por fase e trifásica)
Potência aparente (por fase e trifásica)
Fator de Potência (por fase e trifásico)
THD (por fase de tensão e corrente)
Demanda ativa (média e máxima)
Demanda aparente (média e máxima)
Energia ativa (positiva e negativa)
Energia reativa (positiva e negativa)
Máximos (tensão e corrente)
Então, meu objetivo será monitorar os parâmetros de consumo de minha casa. Fato interessante que tenho alguns paineis solares e grid tie injetando energia na rede.
Vou então delinear a forma de monitorar todos esses parâmetros.
Qual a ajuda que preciso. Entender todos os parâmetros e suas funções e limites.
Espero que a empresa fabricante dê o suporte necessário, pois ter um potencial desses e não ter suporte seria muito frustrante.
Todos que quiserem ser atualizados se inscrevam no post e no canal do youtube para receber atualizações.
Esse será um grande projeto e podemos fazer coisas legais.
Detalhe, vamos dar um ar mais acadêmico a discussão, portanto vou buscar literatura e publicar também os autores.
Canal no youtube: www.youtube.com.br/farmsidney…
a aprender mesmo.
Estamos começando uma empresa e temos desenvolvido alguns sistemas de aquisição, na faculdade trabalhamos muito com isso, principalmente baseados em PIC e STM.
Aproveitando estou com um outro problema com o ScadaBR, acho que postei a dúvida no local errado, as vezes aqui alguém me ajuda.
Estou tentando implementar para o ScadaBR ler o dado de uma porta serial. Já tentei fazer exatamente o que está escrito nesse tutorial https://sites.google.com/a/certi.org.br/certi_scadabr/home/minicurs... mas não funciona.
Estou tentando usar uma comunicação ASCII Serial.
Para testar liguei o ScadaBR atravez da serial em outro computador. Quando o ScadaBR pergunta :C10# o outro computador responde $,0000,! ou seja exatemente como está no exemplo.
Eu só recebo essas mensagens;
16:45:57: 'AQ': AQ: Sem dados disponíveis !
16:45:56: 'AQ': AQ: No group 1
Já dupliquei os cabos das seriais e as frases estão corretas, ou seja se leio o TX do computador com o escada vejo a frase :C10# , e se leio o RX vejo a frase $,0000,!
Mas não funciona
Já tentei todos os modos de parada é não consegui. Por exemplo mudar a resposta para $,0000,!S e usar o caracter S como critério de para, mas não funciona também. Tentei por timeout também e não dá.
Estou com dúvida de não e necessário alguma caracter após a resposta, tipo um "enter", 0x0D, 0x0A mas já tentei isso e não funcionou também.
Alguém sabe o que pode ser?
Sei que não é problema da comunicação, pois se usar modbus tudo funciona. Alguém sabe o que pode ser?
…
protocolo MODBUS.
Gostaria de fazer o controle de temperatura enviando um Setpoint e um Range de temperatura para o arduino, a partir de uma caixa de diálogo no Scada para ligar e desligar o "magpin" que seria meu equipamento. Deixo o código abaixo para ajudar, obrigado.
*Scada recebendo os dados(Valor), mas na hora de enviar o Setpoint e Range dá erro.
code:
#include <modbus.h>#include <modbusDevice.h>#include <modbusRegBank.h>#include <modbusSlave.h>#include <SPI.h>#include "Adafruit_MAX31855.h"#define DO 12#define CS 8#define CLK 13
int magpin=3; //Pin 3 outputint Setpoint, Range;Adafruit_MAX31855 thermocouple(CLK, CS, DO);modbusDevice regBank;modbusSlave slave;
void setup(){
regBank.setId(3);pinMode(magpin, OUTPUT);
//Liga e desliga magpin (saida digital)regBank.add(3);
//Entrada Setpoint e range (entrada analogica)regBank.add(30002); regBank.add(30003);
//saida da temperatura (saida analogica)regBank.add(40001);regBank.add(40010); regBank.add(40011);
slave._device = ®Bank; slave.setBaud(9600);
}
void loop(){while(1){regBank.set(40010, Setpoint);
regBank.set(40011, Range);
Serial.print("Internal Temp = ");Serial.println(thermocouple.readInternal());
double c = thermocouple.readCelsius();if (isnan(c)) {Serial.println("Something wrong with thermocouple!");} else {
Serial.print("C = "); Serial.println(c);regBank.set(40001, (double) c);}
if(c>=Setpoint+Range){digitalWrite(magpin, HIGH); //Desliga magnetrondelay(200);regBank.set(3, 1); }
if(c<=Setpoint-Range){digitalWrite(magpin, LOW); //Liga magnetrondelay(200);regBank.set(3, 0); }}
slave.run(); }}…
olver algumas habilidades como montagem e usar motores, fans etc. Esse pequeno trabalho pode se visto de varias maneiras no post do Scadabr, aonde garagistas de alto nivel se encontram, agradecimentos ao Marcos,Enio, Sidney, Robson, Eduardo, mas o resto do povo que tem feito no nosso post um trabalho bem legal.
Esse projeto usa a montagem a seguir que por sinal foi testado e funcionou traquilamente:
o trabalho usa a porta 2 (digital) do arduino ligado a base do transitor no meu caso foi um BC549C NPN, um resistor 1K na base do transistor, tres leds em serie com um resistor de 10K que logo que a fonte de 12V é ligada acendem, pois o relé esta no normalmente fechado(NF), depois temos o C(comum, no caso desse rele de cinco pinos, fica no centro)onde colocamos a tensao de 12V, o Emissor do transistor entra num pino do rele e sai em direção ao terra do arduino,
importante: o Terra dos leds e do Fan são na fonte 12V.
Bem acho que nao tenho mais o que explicar, o proprio desenho é auto-explicativo, mais detalhes nos procure no post scadbr.
eu tenho um video do projetinho funcionando mas to vendo que nao vai dar pra carregar aqui vou ver se consigo colocar no youtube
até +
…
247 escravos, mas somente um mestre. Toda comunicação inicia com o mestre fazendo uma solicitação a um escravo, e esteresponde ao mestre o que foi solicitado. Em ambos os telegramas (pergunta e resposta), a estrutura utilizada é a mesma: Endereço, Código da Função, Dados e CRC. Apenas o campo de dados poderá ter tamanho variável, dependendo do que está sendo solicitado.
5.2.1 Endereço
O mestre inicia a comunicação enviando um byte com o endereço do escravo para o qual se destina amensagem. Ao enviar a resposta, o escravo também inicia o telegrama com o seu próprio endereço. O mestretambém pode enviar uma mensagem destinada ao endereço 0 (zero), o que significa que a mensagem édestinada a todos os escravos da rede (broadcast). Neste caso, nenhum escravo irá responder ao mestre.
5.2.2 Código da Função
Este campo também contém um único byte, onde o mestre especifica o tipo de serviço ou função solicitada aoescravo (leitura, escrita, etc.). De acordo com o protocolo, cada função é utilizada para acessar um tipo específico de dado. No CFW-11, os dados relativos aos parâmetros estão disponibilizados como registradores do tipo holding (referenciados a partir do endereço 40000 ou '4x').
5.2.3 Campo de Dados
Campo com tamanho variável. O formato e conteúdo deste campo dependem da função utilizada e dos valorestransmitidos. Este campo está descrito juntamente com a descrição das funções (ver item 5.4).
5.2.4 CRC
A última parte do telegrama é o campo para checagem de erros de transmissão. O método utilizado é o CRC-16 (Cycling Redundancy Check). Este campo é formado por dois bytes, onde primeiro é transmitido o byte menos significativo (CRC-), e depois o mais significativo (CRC+). A forma de cálculo do CRC é descrita na especificação do protocolo, porém informações para sua implementação também são fornecidas nos apêndices B e C.…
(acho que foi em uma revista no aeroporto) mas só agora que vim me cadastrar. Tomei um susto quando meu colega Douglas mostrou esse post com mais de 300 mensagens! :-)
Também tinha ouvido falar do Lab através de pessoas como o sidney, que encontrei no youtube, do Eduardo e da spreadcom que conheci em Campinas, mas não tinha idéia do movimento que estava rolando ao redor do quarteto-fantástico "arduino+modbus+485+scadabr" até chegar aqui.
Bom vamos ao que interessa, passei a tarde folheando os posts e fiquei feliz de terem tido bastante avanço por conta própria, programando o Arduino, criando os datasources e telas, etc. Mas confesso que fiquei um pouco zonzo e não sei bem quais projetos andaram, quais ficaram parados, o que está travando etc. Então apenas para retomar o fio da meada, pediria que quem ainda tivesse alguma dúvida do modbus ou outra específica do ScadaBR, que perguntasse novamente indicando em que ponto parou.
========
sobre o 485 especificamente, ainda não fizemos muitos testes com o Arduino usando esse barramento, então não tenho certeza se posso ajudar. o que costumamos fazer é "isolar" o problema separando em partes menores, sempre fazendo testes similares a estes:
[ PC1/terminal ] <-> [Conversor1 Usb ou serial/485] <-> [Conversor2 Usb ou serial/485] <-> [ PC2/terminal ]
ou
[ PC1/terminal ] <-> [Conversor1 Usb ou serial/485] <-> [Arduino modificado enviando caracteres]
assim descartamos rapidamente conversores ruins, e não misturamos questões relacionadas ao software ou equipamento até termos certeza de que os conversores estão 100% legais (as vezes até os de 20 pila funcionam... boa sorte!!!) As melhores experiencias que tive foram com conversores Novus (mas ficam numa faixa de preço talvez muito elevada para projetos caseiros, pois é um conversor industrial), ou então os da Comm5 que já vem num preço legal, abaixo de 100 reais.
show de bola as iniciativas de montar o conversor ttl-485 direto ou shield, vou ficar de olho pois tambem estamos trabalhando em uma linha didatica com Arduino, mas nossas primeiras versões foram apenas USB e 232 mesmo.
======
Principalmente para a Patricia que perguntou sobre a HMI, primeiro recomendo ler todo o "iniciando o scadabr":
https://sites.google.com/a/certi.org.br/certi_scadabr/home/minicursos/iniciando-scadabr
e principalmente ver os videos no youtube, que tornam tudo bem mais intuitivo, esse por exemplo ajuda a entender as representacoes graficas:
http://www.youtube.com/watch?v=qYdXKcXrgws
sobre a HMI Builder Flex (flash) é uma das partes do software que ainda esta sem manual, e normalmente fica melhor para usuários mais avançados. A propósito esta parte não está pronta na versão do site (0.9.1) e ainda precisa de uns "contornos manuais" (gambiarras ou workarounds como vc preferir), mas se vc quiser navegar por conta e risco, as dicas mais importantes são:
0) não esqueça de assistir http://www.youtube.com/watch?v=Pl3SY4l2T3Y&feature=related
1) crie primeiro um grupo com uma taxa de atualizacao de 1000ms ou maior para não sair sobrecarregando o sistema
2) endereço da API = http://localhost:8080/ScadaBR/services/API?wsdl
3) para rodar a primeira vez é preciso inicializar a API abrindo com um navegador o endereço http://localhost:8080/ClienteJavaWeb e após isso, acessar a aba DA/History e clicar uma vez sobre browse tags (certifique-se de preencher corretamente login e senha)
===
Adriano, vc leu nossa mente quando disse que esse pode ser "o linux da automação"... esse era nosso sonho inicial lá em 2005 ou 2006 e hoje, com o scadabr, com certeza já colocamos o primeiro tijolinho aqui no brasil!!!! Devemos muito também a outros projetos como o próprio Mango, o openScada alemão, CLDC/Luciol entre outros. Com certeza, só com uma grande comunidade dessas para desvendar "a caixa preta" como vc mesmo falou.
bom pessoal, esperamos melhorar sempre nossa documentação para ficar mais intuitiva para vocês, e sinto muito pois as páginas do wiki estavam tão "escondidas". Parece que o Marcos e outros conseguiram atravessar o pedregoso caminho inteiro :-) e com a colaboração de muitos, já estão saindo os primeiros resultados.
espero poder interagir bastante com o Lab de Garagem respondendo dúvidas e ajudando a ir atrás de voluntários, viabilizar cursos, fazer projetos em conjunto etc. Hoje nossa empresa "vive" principalmente dos projetos comerciais, mas já estamos nos organizando para dar todo o suporte ao pessoal hobbysta/experimental/DIY, dos quais esse grupo de garagistas é um ótimo exemplo. Com certeza com o aumento da popularidade do sistema, poderemos ampliar a equipe e prestar atendimentos muito mais rápidos.
----
desculpem a propaganda incidental, mas não deixem de olhar o fórum do scadabr também, às vezes sua dúvida pode ter sido respondida lá ;-)
um abração a todos do LdG!!!
Victor
…
endo no scada sem problemas.
O meu problema esta em fazer a chave do pino 7 ligar o led, tanto pela chave quanto pelo scadabr, e quando for ligada pela chave atualizar no scada, não consegui fazer esse integração, acredito que seja no loop do meu sketch.
É a primeira aplicação que faço usando o scadabr, podem me passar algum exemplo que faça isso ou alguma sugestão, segue parte do meu sketch.
Obrigado.
enum { MB_PINO_3, /* Controle do Led no pino 3 (desliga=0 liga=1) */MB_PINO_7,MB_A0,MB_REGS /* número total de registros do escravo */};
int regs[MB_REGS];int ledPin3 = 3;int chave7 = 7;unsigned long tprev = 0; /* tempo anterior do último comando*/unsigned long tanalogprev = 0; /* tempo anterior da leitura dos pinos analógicos*/unsigned long wdog = 0; /* watchdog */
void setup() {/* configura cominicação modbus* 9600 bps, 8N1, RS485 network */configure_mb_slave(COMM_BPS, PARITY, 2);pinMode(ledPin3, OUTPUT);pinMode(chave7, INPUT);digitalWrite(chave7,HIGH);}void loop() {/* verifica se há solicitações do mestre */update_mb_slave(MB_SLAVE, regs, MB_REGS);/* os valores dos registros são definidos pelo mestre modbus (SCADA) */wdog = millis();if ((millis() - tanalogprev) > 1000) { /* atualiza as entradas analogica a cada 1 segundo */regs[MB_A0] = (analogRead(0)*500) /100; /* ler entrada analógica 0 e salva valor no registromodbus*/tanalogprev = millis();}switch(regs[MB_PINO_3]) {case 1:if(digitalRead(chave7)==LOW){digitalWrite(ledPin3, HIGH);break; default: /* apagado */digitalWrite(ledPin3, LOW);}}}…
olvedor mais voltado para frontend e um pouco de backend em Nodejs (por profissão) e essa área de protocolos seriais é meio nebulosa pra mim.
Inclusive tenho um outro projeto (dentre mais 43287429384230980 outros kkkkk) que é conectar com os micro inversores de energia solar com a casa inteligente, mas novamente esbarrei no mundo onde temos o MODBUS TCP/UDP que também se mostrou um inferninho na minha vida e está encalhado também.
Para entenderem o porque quero tanto extrair dados deste nobreak, tenho um projeto de casa inteligente onde reuno vários dispositivos inteligentes e gerencio minha casa por meio de uma plataforma. Atualmente estou com interruptores inteligentes Sonoff na casa, sensores de temperatura Xiaomi, medidor de consumo e energia da Tomzn e aguardando a chegada de sensores de portas e janelas para agregar.
- Medidor de energia
- Já consigo capturar meu consumo da casa e geração solar, entretanto estou consumindo a API REST da Solarman, que tem gerado tráfego desnecessário de internet (visto que poderia acessar localmente se conseguisse comunicar com o inversor) e a API tem falhado um pouco
- Consigo monitorar inclusive individualmente o consumo em alguns comodos já como o escritório
- E estou gerando modelos 3D da casa pra ter essa informação visual, neste exemplo (escritório) a cor da parede é a temperatura ambiente (verde é ok), o chão é o consumo de energia do cômodo (amarelo é um pouquinho alto) e posso clicar em cima dos elementos do cômodo (a/c, luz,...) pra saber mais sobre seus status e histórico.
Quando o projeto estiver um pouquinho mais maduro pretendo postar aqui no Lab e compartilhar com todos mais detalhes.…
Adicionado por Felipe Braz ao 22:42 em 17 março 2022
tão quando ele estiver cheio. E a coleta de dados fica manual. Prefiro algo que envolva banco de dados.
Alberto eu pensei muito em Radiuno, mas minha intenção é construir balanços hídricos precisos e níveis de evaporação de solo precisos comparados a regiões. Assim teria que ter várias estações em diferentes lugares e um scada recebendo dados e calculando e comparando para saber qual região é mais lucrativa e em qual período. Mas gostaria de conversar com você sobre o radiuno, se tiver algum contato.
Ewerton vou disponibilizar aqui de forma simples como foi feito.
1 - Utilizei um arduino mega 2560 e shield ethernet.
2 - Foi instaldo o Java 6 e tomcat 6 no win junto com ScadaBR 1.0
3 - IP fixo no win e no arduino
4 - Roteador wifi gerando gateway e DHCP.
Código do Arduino (Simplificado porque o meu código está gigante) - Baixei uma biblioteca Mudbus TCP/IP
//Bibliotecas #include <SPI.h> #include <Ethernet.h>
//MODBUS IP #include "Mudbus.h" Mudbus Mb;
void setup() { uint8_t mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x51, 0x06 }; uint8_t ip[] = { 192, 168, 1, 4}; uint8_t gateway[] = { 192, 168, 1, 1}; uint8_t subnet[] = { 255, 255, 255, 0}; Ethernet.begin(mac, ip, gateway, subnet); //SHIELD Ethernet HanRun HR91105
pinMode(22, OUTPUT); //VENTILADOR DA TEMPERATURA pinMode(30, OUTPUT); //SAIDA DO LED AMAERELO pinMode(28, OUTPUT); //SAIDA DO LED VERMELHO pinMode(26, OUTPUT); //SAIDA DO LED VERDE }
void loop() { //INICIA a comunicacao por IP Mb.Run();
// Sensor de temperatura LM19 conecetado na porta A2 Mb.R[2] = analogRead(A2); Mb.R[2] = map(Mb.R[2], 150, 390, 100, 0);
//ESCRITA NAS PORTAS DIGITAIS digitalWrite(30, Mb.R[30]); digitalWrite(28, Mb.R[28]); digitalWrite(26, Mb.R[26]); digitalWrite(22, Mb.R[22]); //Ventilador
}
5 - No ScadaBR foi criado um Data Source tipo Mudbus Ip.
6 - O IP do arduino é colocado e a conexão está feita. (Se for ligar o arduino direto ao computador com cabo de rede, cabo cross over) Se não todos terão estar conectados ao roteador wifi e o arduino ligado via cabo no roteador.
7 - o Endereços de cada porta é o Mb.R[22] no off set de cada data point é configurado o número entre cheves [22].
A partir dai vc lê e escreve nessa porta.
Galera meu email é jcxpjau@live.com
qualquer dúvida estou a disposição em breve posto um vídeo.…
Adicionado por Julio Xavier ao 15:42 em 10 novembro 2013