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.
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 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.
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.
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).