Modbus RTU e comunicação GPRS

Prezados Colegas,

   Primeiro gostaria de parabenizar a iniciativa deste projeto, um software de alta qualidade. Porém, nem tudo são rosas, então vamos as dúvidas.

   Estou desenvolvendo uma aplicação com arduino+sim900+placa de I/O desenvolvida por mim, com a idéia de criar um dispositivo de I/O remoto através de rede GPRS. Utilizo o protocolo de comunicação Modbus RTU e como DataSource o Modbus Serial. Como o scadabr não aguarda conexão tcp, estou utilizado um software chamado VSPE, onde o meu equipamento conecta através de um tcp server em uma porta específica, e o scadabr conecta através de uma porta serial virtual. O programa se encarrega de linkar a porta tcp com a serial virtual.

   Em meus testes iniciais, somente com um equipamento, tudo funcionou perfeitamente, após ajuste do timeout, retries e o período de update. Estou com update de 45s, timeout em 15s e retries em 3. Porém agora estou com 5 equipamentos na mesma rede, e tenho um comportamento estranho. Dois dispositivos não se conectam nunca, quando todos estão na rede. Individualmente, os 5 conseguem se conectar.

   Inicialmente testei criando um datasource para cada número de nó, colocando uma serial virtual para cada porta tcp, fazendo com que cada equipamento conecte em uma porta específica. O que pude notar é que o equipamento se conecta ao VSPE, porém o scadabr não envia nenhuma requisição Modbus. Aparentemente, quando o equipamento demora para se conectar, o scadabr tenta 3 vezes fazer a comunicação e depois não tenta nunca mais. Utilizando da mesma maneira, porém no Elipse Scada, obtenho um funcionamento normal.

   Na segunda tentaiva, criei somente um DataSource conectado a uma porta serial virtual, onde todos os equipamentos se conectam na mesma porta tcp, e consegui comunicar conforme descrevi anteriormente, 3 equipamentos se conectam e 2 nunca se conectam. O interessante é que não necessariamente são sempre os mesmos 3 equipamentos, parecendo que existe um limitação na rede quando feita desta forma. Implementei no equipamento um registrador para me informar qual o período em que o mesmo recebe as requisições Modbus, e pude notar que quando coloco os 5 na rede, o período das requisições diminui consideravelmente dos 45s pré-estabelecidos.

   No software VSPE posso acompanhar os IPs que conectam nele, assim como a transferência de bytes entre a serial virtual e o tcp server, e nele pude constatar que o scadabr parou de enviar requisições.

   Tentei utilizar o DataSource Modbus IP encapsulado, porém os equipamentos reportam que a porta que designei para conexão está fechada. Um detalhe é que utilizei como host o endereço 0.0.0.0, para que o mesmo aceite conexão de qualquer lugar desde que seja na porta especificada no DataSource.

   Gostaria da ajuda para poder terminar este projeto, e gostaria muito de utilizar o scadabr, porém sem estabelecer a rede conforme deveria, não poderei continuar com esta implementação. Fico no aguardo por ajuda dos senhores mais entendidos neste software.

 

   Após vários testes, a solução que estava tentando acima mostrou-se muito instável, portanto comecei a testar o datasource HTTP Receiver, enviando requisições HTTP do tipo get para poder enviar o estado do meu equipamento. Com esta aboragem, consigo implementar uma telemetria, porém não consigo implementar o telecomando. Já li sobre o Publisher e o HTTP Retriever, porém em uma rede GPRS pode acontecer de os ips não serem válidos, e não tenho como acessar o equipamento. Minha pergunta é: Existe alguma forma de eu ler os dados do ScadaBR através do HTTP Receiver? Talvez eu não tenha deixado muito claro, mas gostaria de um sistema que meu equipamento gerasse a conexão e fizesse leitura e escrita do scadabr. Acredito que o equipamento seria o mestre da conexão, e o scadabr seria o escravo. Alguém poderia me ajudar?

Ninguem pode me ajudar pessoal?

Olá amigo, uma solução é você usar um gateway GSM/GPRS para RS485 com comunicação transparente e suporte a DDNS, assim você tem comunicação em duas vias, tanto leitura quanto escrita.

Porém esse produto ainda não é comercializado no Brasil, ao menos eu não encontrei. Por isso estou importando esse Gateway para meu uso, e também disponibilizando aos interessados. O valor é preço de custo com as taxas de importação. Ele funciona com CHIP de qualquer operadora desde que esteja com algum plano de internet, eu uso VIVO com o plano VIVO SEMPRE internet por R$9,90 mensal com 200MB e atende muito bem.

Segue o link do anúncio, caso tenha interesse.

http://sp.bomnegocio.com/sao-paulo-e-regiao/computadores-e-acessorios/gateway-rs485-gsm-gprs-suporte-ddns-scada-modbus-44673841

 

Um abraço,

Fernando

Presuntoufu,

queria te perguntar detalhes do que vc afirmou no início de sua descrição.

" Como o scadabr não aguarda conexão tcp, estou utilizado um software chamado VSPE, onde o meu equipamento conecta através de um tcp server em uma porta específica, e o scadabr conecta através de uma porta serial virtual. O programa se encarrega de linkar a porta tcp com a serial virtual."

O que é isso de não aguardar conexão tcp?

Queria fomentar isso pois também estou trabalhando para entender a conexão do scadabr com o mesmo sim900. Mas estava pensando em colocar o protocolo modbus ip, que já existe, e só fazer as adaptações para conexão TCP/IP.

O que acha?

Ola, tenho esse projeto ai, ja implementado com arduino, sim900, ScadaBR e ModbusRTU fazendo monitoramento de uma bomba em local remoto posso tenta lhe ajuda me fala suas duvidas que vejo o que posso fazer.

Alisson,

então vamos ver isso. 

Pergunta: no arduino vc colocou o código modbus ip? e fez a inclusão dos parâmetros do gprs?

Onde podemos ver esse seu material? não fez nem um videozinho?

Preciso falar contigo então.

Olá amigo, não fiz video. Cara vou elabora um pequeno tutorial sobre como fiz a comunicação, não sou programador de alto nível, apenas faço algumas coisas para quebra galhos mas, quando vc tiver acesso ao código do arduino vc faz a edição e deixa como vc acha melhor. Sim e respondendo sua pergunta vc vai utilizar o datasource "http receptor".

abraço.

alisson.regio,

tem como enviar pra mim algum exemplo? 

Estou com um shield parado por falta de alternativa de uso. Essa programação é de alto nível e foge às minhas capacidades.

Olha meu email.

farmsid@pop.com.br

Alisson,

não deixe de comentar alguma coisa do seu projeto. Mesmo que não dê tempo de gravar um video é sempre bom conversarmos sobre o assunto.

até

Alisson tens ainda este tutorial?
podes me encaminhar copia?
vicentethomedasilva@gmail.com

Eu ainda estou nessa luta.
A princípio pensei em colocar o arduino com um modbus, e usar o gprs para obter um ip.
Mas não foi ainda. O jeito é o http mesmo.

Mas estou nesse estudo ainda.

eu estou usando o árduino comunicando através de modbus rs485 com um módulo gprs (adquirido no mercado)
mas a minha intenção era eliminar esse modulo, e sim integrar o gprs no meu projeto usando o sim 900 ou o 800.

@vicente.th

estou precisando entender seu projeto, pois ainda me restam dúvidas.
A forma como estou usando é o gprs e arduino, sem uso do RS485.
Tem algum descritivo ou memorial para eu entender?

Amigos,

Fiz vários testes nesta possibilidade e desisti de utilizar esta abordagem. A maneira mais prática que temos hoje é utilizando o protocolo MQTT, funciona muito bem. Não sei se o ScadaBR tem datasource mqtt, mas existe a possibilidade de rodar um aplicativo externo, em python, por exemplo, e este preencher uma tabela sql, e a partir dai o ScadaBR realiza a leitura. Existem bibliotecas prontas para arduino e MQTT. Acho que existe inclusive uma biblioteca para o sim800/900 que tem a possibilidade de comunicação em mqtt. Eu não tenho vídeo e nem tutorial, mas o google sempre é o nosso amigo nessas horas. hehehe