rnes A B do barramento são problemas ou erros no endereço dos escravos.
Voce precisa mudar o endereço para cada escravo, tanto no sketch do Arduino quanto nos Data point no SCADABR.
No sketch do segundo Arduino você deve mudar a seguinte linha, colocando um endereço diferente do endereço que está no sketch do primeiro escravo, lembrando que cada escravo deve possuir um endereço único.
MB_SLAVE = 1, /* endereço do escravo modbus */
No SCADABR voce deve abrir a caixa de cada Data Point que voce criou para o segundo Arduino e digitar na box Id do escravo o mesmo endereço que está no sketch. Não esqueça de salvar as mudanças e de habilitar o data point.
Por último, um lembrete para todos, somente é possível usar mais de um escravo na rede RS485 (até 31), se for usar USB ou RS232 apenas um escravo é .possível, pois a o RS232 é uma rede ponto a ponto.
Espero que isto resolva os seus problemas, de qualquer forma dá o retorno se funcionou ou não.
Abraço.
…
Adicionado por Wiechert ao 20:43 em 23 agosto 2012
LDG.
A temperatura ambiente e umidade vou usar um DHT11. Esse eu estou tendo problemas de leituras. Um ruido que acho normal. Como não sei o que está acontecendo vou usar um artifício. Vou fazer a média de 10 leituras.
A temperatura vai acionar um exaustor e um aspersor para umidade. O ph da água vai usar um pHduino. A placa está sendo gravada por nosso amigo Garagista Adriano.
Da mesma forma será lido a condutividade. O oxigênio dissolvido será lido também por um eletrodo. Vou ler por preciosismo e para garantir a qualidade de vida dos peixinhos.
A alimentação será automática. Já estou com as placas quase prontas.
A estrutura vou ver se consigo com uma empresa de tendas. Preciso que ela seja móvel para eu levar para onde for preciso. A filtração será feita por uma ideia de um colega americano.
Todos estes subprojetos são ideias de colegas da net já montadas.
O melhor de tudo é que o supervisório está pronto. É o scadabr. Todos os componentes serão ligados via RS485 com o protocolo MODBUS.
Eu queria que você fosse mais próximo para podermos discutir mais.
Ah, quando vc tiver um objetivo bem específico como a aula que mencionou dá um toque em privado que agente socorre sem problemas.…
sse teste por não possuir um mega ADK, mas já testei com mega1280 e mega2560, ambos "genéricos" e sem problemas.
O mega ADK é basicamente uma placa mega2560 onde foi acrescentado um circuito integrado MAX3421e que é um host USB, isto torna possível a conexão com celulares Android e pendrives sem o uso de um shield,
fonte: http://arduino.cc/en/Main/ArduinoBoardADK.
O mega ADK é um produto original da família arduino que assim como todos os modelos de arduino tem as versões "genéricas".
Vale ressaltar que o RS485 é apenas o meio físico de transmissão, onde é definido a forma como os bits 0 e 1 são transmistidos, especificando os niveis de tensão permitidos para cada um, entre outros parâmetros.
O protocolo de comunicação não é definido na norma RS485, assim podemos usar vários protocolos já consagrados como por exemplo o modbus serial RTU ou ASCII ou mesmo definir um protocolo próprio.
Mas um detalhe, como em qualquer rede, todos os elementos da rede (nós, placas, etc) devem estar usando o mesmo protocolo, com as mesmas configurações de rede (baud rate, stop bits, paridade, etc) mas cada nó deve possuir um endereço único na rede.…
Adicionado por Wiechert ao 11:55 em 19 janeiro 2013
se de banco de dados estou as ordens, sou um entusiasta do scadabr e sei do seu potencial, com relação ao fato de repente não ter um computador ligado o tempo todo com scadabr, acho um pouco sem sentido, pois toda rede precisa de um servidor, claro falando em uma rede cliente servidor, e no caso todos os escravos são clientes solicitando informações do mestre, claro que o mestre não precisa ficar o tempo dando fazendo poling nos escravos e enviando mensagens de controle, basta que o arduino ou outro microcontrolador tenha a capacidade de trabalhar em stand alone, mas que em certos casos envie e receba dados do mestre, com relação a questão de controle de rede pode ser que venha a ter alguns problemas que devem ser analisadas caso vc tenha problema na comunicação entre os escravos e o mestre e necessariamente uma hora ou outra vc tenha que analisar a rede para descobrir o problema, além disso pode-se usar uma solução descentralizada no caso sem necessariamente o scadabr ou até com varios scadabr falando entre si e controlando redes de perifericos, mas ai vai da sua habildade e desenvolver uma linha dessas. no meu caso prefiro ter um servidor centralizado com scadabr e utilizar varios tipos de redes e topologias conforme a situação necessaria.…
ótimos resultados.
No vídeo abaixo eu mostro uma rede com múltiplos escravos, 3 arduinos e não observei nenhuma instabilidade.
O padrão RS485 é o meio físico dos mais confiáveis que existe, sendo usado em muitos protocolos industriais e comerciais a anos exatamente por ser extremamente robusto, barato e simples de implementar.
Por experiência própria, posso afirmar que quando uma rede destas está apresentando instabilidades geralmente é por deficiências na instalação da mesma, seja por problemas nos cabos, conectores e conexões, ou falta de malha de aterramento, estes são os principais motivos de problemas nestas redes.
É lógico que uma boa configuração dos parâmetros da rede também são fundamentais, pois já vi redes que estavam setadas para taxas maiores que a recomendada para o comprimento do barramento, oque causava instabilidades, mas após as devidas correções se tornou muito estável.
A tendência para o futuro é que as redes ethernet industriais venham a substituir as redes seriais RS485, mas ainda vai levar alguns anos para que os equipamentos ethernet caiam de preço o suficiente para enterrar as redes seriais.
Abraço.…
Adicionado por Wiechert ao 1:04 em 20 janeiro 2014
rada analógica A0 int _val=0; // Criando uma variável inteirafor (char i=0; i!=10; i++) { _val+=analogRead(A0);} // Fazendo a somatória de 10 leituras da A0_val/=10; // Calculando a médiamb.Ireg(ANA_00, _val); // Passando o valor final para o mapa modbus
- Porque eu não utilizei a função delay() ?
Não gosto desta função pois ela pára o processamento. Se eu precisar fazer uma interrupção neste momento será impossível, pois o processador está parado.
Pesquisando no vasto material que os colegas disponibilizaram, verifiquei o seguinte :
"Hence the workaround at the beginning of this answer. With the previous premises, an analogRead() takes 104µs in total to return and this is enough for properly charging the S/H capacitor "
Ou seja, o simples posicionamento do ADC na entrada a ser lida " analogRead(A0) " consome 104 us o que resolveria o problema da estabilização.
Testei e ficou bom... leituras no ScadaBR com pequenos pontos de variação !
Ai resolvi implementar a solução apresentada pelo colega Eduardo H. Marcondes que é fazer "n" leituras
e tirar a média entre elas...
Resolvi fazer 10 leituras de cada entrada... (pode ser que com 4 ficasse bom...)
Ficou excelente... a leitura está seletiva e a repetitividade está perfeita !!!
Novamente agradeço a todos.
…
ir slave, baud de 9600, paridade e outras configurações relacionada a 485. Feito isso você deve ter um shield rs485, antigamente o lab vendia, mas pode ser qualquer outro. Faz toda a ligação necessária, rs485, shield no arduino e usb. Feito isso faz uma aplicação no arduino e iniciativa a com nativa em 9600 de baud e Soft serial com 9600 também. Feito isso, tudo oque vc receber na com nativa vc envia na Soft e tudo que receber na Soft vc envia na com nativa. Quando a com nativa receber dados do scadabr e enviar pela Soft serial, nesse momento deve-se deixar o transciver rs485 em baixa impedância e mesmo após terminar de enviar o dado, eh importante que mantenha em baixa impedância por mais 3 ms, nesse meio tempo você ja deve ter recebido outro dado e aguarda 3ms apartir do envio desse segundo dado. Ficando mais que 3ms sem receber nada na com nativa, você deve deixar em alta impedância o transciver e aguardar a resposta do multimedidor, que soh será transferida da Soft serial para a com nativa. Não se preocupe com tamanho de buffer nesse ponto, tem como configurar isso scadabr. O arduino só vai funcionar como uma ponte e habilitar o transciver rs485 quando necessário. Bem provavel que voce so ira utlizar a funcao 3 ou 4 do protocolo modbus. Estou no celular e nao utilizo arduino, aí tentei de descrever o processo resumidamente.…
não tenho informações de qual é o limite que pode ser usado ou não, lembrando que utilizo modbus e isso pode "sobrecarregar" o controlador, porém já tirei a parte de comunicação e não foi resolvido, e quando compilado o sketch utiliza 14% e as variáveis utilizam incríveis 5%.
- Sobre os ruídos, vou exemplificar na imagem abaixo (ficou estranho, mas está valendo kkk) como está a distribuição da fiação, a linha em amarelo são os 3 fios que saem do disjuntor e vão para a parte de potência do circuito, a linha em vermelho é um fio que sai do arduino, entra no ultimo contator (botão de emergência), e retorna para o gnd do arduino através da linha verde, serve apenas para obter um sinal lógico do contator, já a linha azul são as saídas que são ligadas nas bombas, não sei se é possível acontecer algum ruído pois a parte de comando e potência está bem separada, o único que eu achava que poderia acontecer seria das linhas vermelho e verde, porém não me recordo de ter testado.
E a placa Arduino Mega, vou pegar uma com um amigo amanhã e realizar testes na quinta.…
o WEG CFW-11: Confira todos esses parãmetros :
- endereço 1, 9600 bps, 8 bits, N, 1
- Protocolo ModBus-RTU
- Verifique parâmetro P0316 - Estado da serial = tem que estar ativo = 1 !
Cartão de interface RS232/ RS485 instalado e reconhecido
…
8b20 e 4 reles para ligar resistências. Tambem, dentro das caixas há sensores dht-11. Os sensores ds18b20 fazem o controle de temperatura no interior das caixas, ligando e desligando as resistências e os dht-11 só monitoração. Fizemos a implementação com o scadabr via modbus ip, onde acompanhamos as indicações de temperatura e status dos relés. Ainda não colocamos em operação porque estamos fazendo testes e um problema que surgiu é com relação a falha no ds-18b20. Estes sensores são de controle das resistências e caso haja algum problema com eles, as resistências não devem ligar. Como teste, desconecto o cabo de dados referente aos 4 sensores e a temperatura que tenho no scadabr é 0. Coloquei no skecth para que caso isso ocorra, a saída para o rele deva ser low, mas não esta dando certo. Quando desligo o fio de dados dos sensores ds18b20, todas as saídas dos reles vão para 1 ligando as resistencias. Caso haja uma falha no cabo dos sensores, as resistências ficariam ligadas direto. Gostaria de ver se alguém pode dar uma olhada nos anexos e me dar uma ajuda. Estou colocando em anexo o code que fiz, print da tela do scadabr com as indicações em 0 e as saídas para os reles em 1, as indicações normalizadas e a saida para os reles em zero. Tambem dei um print da tela do serial monitor onde coloquei o arduino e monitorei a saida de temperatura com o cabo desconectado via serial. Desde já agradeço a todos.…