quinta-feira, 28 de novembro de 2013

Sistema de supervisão com Arduino e Elipse SCADA via rede MODBUS



Estou postando aqui um projeto que montei a mais de ano e agora resolvi posta-lo aqui para compartilhar. Se trata de um sistema de supervisão utilizando uma rede Modbus, onde o escravo é um Arduino e o mestre é um PC rodando o software Elipse SCADA.

Hardware

Para montagem do hardware utilizei um Arduino NANO, LEDs, resistores, 1 LDR, 1 sensor de temperatura LM75A, e um push button. Como utilizei apenas um escravo não precisei utilizar o meio físico RS485, assim utilizei a própria porta USB do Arduino, mas para mais de um escravo será necessário utilizar conversores RS232(PC) para RS485 e de RS485 para TTL(Arduino). A Figura 1 mostra como seria efetuada esta ligação.
http://api.ning.com/files/RkmlBfWrKPzFFM09GTWXdoeOmL5TjEc6xgwL0aGGlTmyWjQy7MUzo*xGBp99ZDj6EUI6hKrjjKfDycp5VTzqiECOAYXpQHNT/RedeArduinoMax485basico.jpg?width=721
Figura 1: Esquema de ligação rede RS485 utilizando Arduino e MAX485. Fonte: www.scadabr.com.b

A Figura 2 apresenta o circuito montado na protoboard para teste, desenhei no Fritizing (não me dei ao trabalho de criar novos resistores então coloquei o valor sobre eles)


Figura 2: Circuito montado para teste.

Software

Aqui darei mais ênfase no Elipse SCADA uma vez que o programa do Arduino esta comentado e não há muito o que falar sobre ele aqui, o mesmo pode ser baixado leste link.
O Elipse SCADA é um software pago e bastante utilizado na indústria, porém para até 20 tags (variáveis) e duas horas de execução seu uso é livre. O download pode ser efetuado no próprio site da Elipse www.elipse.com.br, porém ele vem sem o driver modbus e para baixá-lo e necessário efetuar um registro e aguardar aprovação, mas você também pode baixá-lo deste link.
Após instalado e Elipse para adicionar todo conteúdo da arquivo Modbus.zip a pasta C:\Program Files (x86)\Elipse SCADA\Drivers, feito isso é hora de começar a configuração do sistema.
Ao abrir o Elipse SCADA ele irá procurar pela Hard-Key, porém como você não comprou um licença ele irá perguntar se deseja rodar como Demo, marque sim.


A imagem abaixo mostra a tela inicial do Elipse SCADA, você poderá criar uma nova aplicação a partir do zero ou utilizar a que criei que pode ser baixada neste link.


Ao abrir o arquivo a tela da imagem abaixo será apresenta, estarei explicando cada item desta tela.


Para adicionar/configurar um driver, criar tags e outras configurações clique no ícone circulado de vermelho na imagem abaixo.

 


 Ao clicar a seguinte janela será apresentada.


Primeiramente vamos carregar o driver Modbus clique em "drivers" depois em "localizar" e navegue até a pasta onde colocamos o driver "C:\Program Files (x86)\Elipse SCADA\Drivers" e escolha o arquivo "Modbus.dll", após carregar o driver clique "Configurar" para abrir a janela de configuração do driver e depois em "Extras".


Na primeira aba "Modbus" provavelmente você não terá que alterar nada mas confira se esta igual a imagem abaixo.

 


Na segunda aba "Setup" você escolher o "Physical Layer" do modbus escolha serial.


Na terceira aba "Serial" é onde iremos configurar nossa porta serial. se estiver utilizando o código do Arduino que disponibilizei a configuração que terá que alterar será "Port" que é qual porta serial o Arduino esta plugado, se estiver utilizando outro Sketch configure a serial conforme foi configurada  no mesmo.

 

Agora vamos para a criação das Tags que utilizaremos:
Para criar uma nova Tag clique em Tags>Novo Tag>Tag PLC.


 Após criar todas as tags teremos que configurá-las o nome dela será a seu gosto, o Driver será que acabamos de configurar.
Os parâmetros N1, N2, N3 e N4 devem ser configurados conforme descrição abaixo retirado do arquivo de ajuda "Modbus_br" do Driver que se encontra na mesma pasta "C:\Program Files (x86)\Elipse SCADA\Drivers\"

N1: Endereço do equipamento escravo (CLP) na rede. Este endereço pode variar de 1 a 255. Pode-se ainda configurar este parâmetro com o valor 0. Com isto, este tag trabalhará em modo broadcast, enviando a mensagem para todos os equipamentos escravos (CLP) que estiverem na rede.
NOTA: no modo broadcast, com N1 = 0, não é possível realizar leituras, apenas escritas. Neste modo, todos os equipamentos na rede serão endereçados, recebendo o valor escrito, e não retornando qualquer resposta, de forma a evitar conflitos na rede.
· N2: Código da operação. Referencia uma operação de leitura ou escrita adicionada na janela de configurações do driver.
· N3: Parâmetro adicional. Para as funções de leitura e escrita de arquivos (funções 20 e 21), o parâmetro N3 especifica o arquivo a ser acessado. Para as demais funções de leitura e escrita de registradores, N3 especifica a máscara a ser usada na leitura. Esse parâmetro só será usado se a opção Use Bit Mask for habilitada para a operação em uso, e o número de um bit específico a ser retornado for selecionado. O valor zero indica o bit menos significativo. O valor do bit selecionado será sempre retornado no bit menos significativo do valor. Ou seja, se a opção Use Bit Mask estiver habilitada para a operação na janela de configuração, o valor retornado do tag será sempre 0 ou 1.
· N4: Endereço do registrador ou da variável no equipamento escravo (CLP) que se deseja ler ou escrever.
 Para ler o registrador MB_40003 deve-se colocar 4 no parâmetro N4 pois os registradores começam em 0 no Arduino mas em 1 no Elipse.

O "scam" e tempo em milissegundos que você deseja que a tag seja atualizada. 
Após configurar cada tag você testá-las clicando em "Ler" ou "Escrever", caso retorne uma mensagem de erro veja veja o pode estar errado.
Caso deseja configurar uma escala marca o tolbox "Escala" e configure as escalas.
Exemplo: um potenciômetro ligado a uma entrada analógica do Arduino com uma tensão que pode variar de 0 a 5 Volts. 
CLP Inferior: 0
CLP Superior: 1023 (conversor analógico de 10 bits do Arduino)
Sist. Inferior: 0
Sist. Superior: 5
Assim você mostrará o valor já em tensão no Elipse.


 

Agora vamos a configuração da tela do sistema.
Para adicionar botões, gráficos, displays, gauges, etc. escolha o que deseja conforme imagem abaixo.



Após selecionar o item desejado clique na tela com o botão esquerdo do mouse e arraste até o item ficar do tamanho que desejar.

Para alterar as propriedades do item basta um clique duplo sobre o mesmo.

Vamos configurar um item do tipo "botão" para ligar e desligar um LED ligado ao Arduino.

Propriedades do botão: basicamente temos que configurar três itens em um botão, a mensagem, a moldura e tag.
Mensagem: é mensagem que o botão irá exibir, cor e o valor que ele enviará para a tag;
Moldura: título do botão;
Tag: o mais importante, qual tag esta associada ao botão.

A imagens abaixo mostram as tela de configuração do botão.






Para associar a tag ao botão navegue na janela objetos até a tag deseja clique nela e em seguida clique em "adicionar".


Em seguida vamos configurar um item do tipo "texto" para do para mostras o estado de um botão ligado ao Arduino.

Zonas: é onde configuramos o texto a ser mostrado e a cor do fundo acordo com o valor da tag (os valores de máximo e mínimo e máximo são configurados de acordo como o desejado para variáveis digitais deve-se colocar o mesmo valor em ambos conforme as figuras abaixo);
Moldura: idem botão;
Tag: idem botão.

 

Em seguida vamos configurar um item do tipo "slider" para enviar um sinal PWM a um LED ligado ao Arduino.

Geral: aqui é configurado os valores mínimos, máximos e o passo do slider assim como a posição e o modo de atualizar.
Moldura: idem botão;
Tag: idem botão.


Em seguida vamos configurar um item do tipo "trand graph" para mostrar a temperatura do LM75A e o valor do sinal AD do LDR.

Geral: aqui é configurado basicamente a largura (intervalo de) do gráfico em segundos e a taxa de atualização do mesmo;
Gráfico: tipo de escala (normal, logarítmica e potência). limites superior e inferior do gráfico, números de linhas de grade cor de fundo, etc ;
Pena: que tag será apresentada no gráfico (clique no ícone da caneta depois em "Y axis" e navegue até a tag desejada clique nela e depois em "copiar script-->") .
Moldura: idem botão.




Em seguida vamos configurar um item do tipo "display" para enviar um sinal PWM a um LED ligado ao Arduino.

Formato: formato do numero a ser mostrado com prefixo, sufixo, número de algarismos e casas decimais.
Moldura: idem botão.
Tag:  idem botão.



O título do sistema com fundo azul claro e um item do tipo texto onde só foi configurado a moldura.

 Abaixo segue vídeo do sistema em funcionamento (Apenas a tela do PC).



 Espero que gostem, deixe ai seu comentário (mesmo que seja crítico).