Ir ao conteúdo
  • Cadastre-se

WMAC

Membro Pleno
  • Posts

    36
  • Cadastrado em

  • Última visita

Tudo que WMAC postou

  1. Estou tentando realizar a aquisição de dados de um inversor ABB com MAX485 com o arduino como mestre. Já testei as portas TX / RX do inversor com um adaptador USB-RS485 e consigo obter os dados perfeitamente usando um SCADA com o protocolo Modbus Serial (RTU). Mas quando eu testo o código com os mesmos parâmetros do Modbus com o arduino no inversor, recebo o erro 0xE0 (exceção de ID de escravo de resposta inválida do ModbusMaster). A ID que estou usando é a mesma mostrada no monitor do inversor e para a qual consegui obter os dados com o SCADA ... Não entendo por que esse erro aparece! Principalmente porque testei o código com o simulador Modbus Tools como escravo e deu tudo certo... Liguei o A e B do inversor ao A e B do MAX485. No arduino, coloquei os pinos DI e RO em TX1 e RX1, respectivamente. E os pinos RE e DE em 2 e 3. Usei o ModbusPoll (imagem abaixo). O ENDEREÇO Slave é 7 e toda a estrutura da mensagem recebida está de acordo com o planejado. Isso me leva a crer que o problema está entre o MAX485 e o Inversor ou na biblioteca ModbusMaster. Eu não sei como resolver isso. Por favor, alguém tem ideia de como posso resolver isso?
  2. Olá, estou tentando realizar a aquisição de dados de geração de um inversor FV com um arduino. O Modbus RTU (MAX485) é o protocolo de comunicação aceito pelo inversor. Desta forma, estou usando o MAX485 (RS485---> TTL) e a biblioteca ModbusMaster para realizar essa aquisição. O problema é que não consigo resposta nenhuma por parte do inversor..só aparece o código de erro de timeout..O hardware está conectado da seguinte forma: INVERSOR ---- MAX 485----- ARDUINO MEGA A (D+) ----------- A B (D-) -------------B GND -------------GND-------------GND RO --------------RX RE ---------------2 DE----------------3 DI-----------------TX VCC---------------5V Segue abaixo o código que teste. Já troquei a fiação, os pinos TX/RX por TX1 e RX1, teste RE/DE por outros pinos mas nada funciona...Se alguém tiver ideia do que pode estar ocorrendo e puder compartilhar, agradeço muito! #include <ModbusMaster.h> #define MAX485_DE 3 #define MAX485_RE_NEG 2 ModbusMaster node; void preTransmission() { digitalWrite(MAX485_RE_NEG, 1); digitalWrite(MAX485_DE, 1); } void postTransmission() { digitalWrite(MAX485_RE_NEG, 0); digitalWrite(MAX485_DE, 0); } void setup() { pinMode(MAX485_RE_NEG, OUTPUT); pinMode(MAX485_DE, OUTPUT); // Init in receive mode digitalWrite(MAX485_RE_NEG, 0); digitalWrite(MAX485_DE, 0); // Modbus communication runs at 115200 baud Serial.begin(19200); node.begin(7,Serial); node.preTransmission(preTransmission); node.postTransmission(postTransmission); } bool state = true; void loop() { uint8_t result; uint16_t data[6]; result = node.readHoldingRegisters(3, 6); Serial.println(result); delay(20); if (result == node.ku8MBSuccess) { Serial.print("VCC"); Serial.println(node.getResponseBuffer(0x00)/10); //reg 3 Serial.print("I de linha"); Serial.println(node.getResponseBuffer(0x01)/10);//reg 4 Serial.print("Potencia"); Serial.println(node.getResponseBuffer(0x04)/10);//reg 6 Serial.print("Potencia aparente "); Serial.println(node.getResponseBuffer(0x03)/10);//reg 7 Serial.print("Potencia reativa"); Serial.println(node.getResponseBuffer(0x05)/10);//reg 8 } else { Serial.println("Falha de comunicacao"); } node.clearResponseBuffer(); delay(1000); }
  3. @Flávio Pedroza Olá! Obrigada pela resposta! Sim, no NodeMCU, mas pela IDE Arduino mesmo...Como sugestão do @mauro_b, usei apenas <float f = *((float *) data);> no vetor de dados que recebo e deu certo.
  4. @mauro_b Nossa! Muito obrigada! Testei aqui e deu tudo certinho, me ajudou bastante! Obrigada a todos que responderam!
  5. @Flávio Pedroza obrigada por responder! Então, eu estava usando esse processo..porém os valores que recebo estão em decimal, eu teria que convertê-los para hexa e em seguida para char. Para transformar em hexa estou usado: < uint16_t data[2]; // vetor com os dois registros que compõem a variável, no caso: //data[0] = 0; //data[1] = 16911; String varHex1[1] = String(data[1], HEX); String varHex2[1] = String(data[0], HEX); String vetorhex[1] = varHex1[0] + varHex2[0]; //retorna o valor em hexa mas na ordem correta e tudo junto: 420f0 > Não achei outra forma de converter para hexa, o problema é que não sei como "extrair" o valor em hexa da string e convertê-lo em char para então usar a solução que você propôs. E ainda tem o problema que 420f0 é diferente de 410f0000...Se puder me ajudar com outra dica, agradeço muito. adicionado 48 minutos depois @Matheus0019 obrigada pela resposta ! O problema é que o hexa que consigo não está no formato "0x420f0000", como char...mas apenas uma posição de uma string de um valor que está em hexa. Não achei outra forma de passar de dec para hex sem ter que colocar numa string..
  6. Olá, estou lendo alguns registradores de holding (16bits cada) de sensores porém os dados são floats trocados de 4 bytes, ou seja, cada dois registros recebidos devem ser trocados, convertidos em hexa, concatenados e então convertidos para float. Por exemplo: o valor de temperatura é dados por 0 16991, invertendo a ordem (16991 0) e convertendo para hexa 0x410f0000 que em float : 35,75. Eu consegui juntar os valor todo em hexa em uma string e estava tentando utilizar a função strtoul para converter para float mas sem sucesso, aparece mensagem de erro porque o valor está em uma strign...Enfim, se alguém puder dar uma dica de como realizar essa conversão, agradeço muito. Obs: os dados recebidos são do tipo uint16_t.
  7. Consegui conectar com o logger! Aparentemente era o cabo rs232 que eu estava usando.. Agora o problema é outro (rs) acho que ele tá mandando float trocado (4 bytes) pois os valores que recebo destoam muito do esperado. Como eu poderia fazer a inversão dos bytes lidos no arduino? Desde já, agradeço! (Obs.: No problema anterior o 226 estava aparecendo quando eu colocava o próprio read.HoldingRegister como uma variável. )
  8. É um datalogger, que já está configurado para 9600 e 8N1 e também tenho o endereço dos registradores...deveria estar funcionando . Como pensei que o problema fosse o arduino testei com esp8266...mas independente de estar conectado ao datalogger ou não (só o arduino ou esp ligado pela USB ao PC) o erro ainda permanece, esse 226..já troquei cabo rs232, já troquei o USB...
  9. Olhei o tutorial e agradeço por compartilhar. Vou conseguir um conversor UBB/RS232 para testar algo parecido. Porém o problema acho está relacionado com biblioteca protocolo ou meu computador pois testei o mesmo código com um esp8266 ( tx---D8 e rx----D7) e o mesmo erro aparece (226) como resultado no node.readHoldingRegister..o mesmo que ocorre no Arduino. Já tentei de tudo..
  10. Sim sim, pois é o protocolo que o datalogger permite para comunicar...apenas a rs232 está disponível.
  11. Estou tentando fazer a comunicação entre um datalogger e o Arduino UNO(mestre) através de um conversor max3232(rs232/TTL). O Hardware é o seguinte: datalogger(RS232)----DB9(FEMEA)----DB9(FEMEA)—MAX3232----ARDUINO(TX/RX) O protocolo é o Modbus RTU. Realizei alguns testes com as bibliotecas ModbusMaster que achei mas sem sucesso pois na serial sempre retornava um erro de código 226 e alguns caracteres estranhos. Já adianto que todos os dispositivos estão configurados com baudrate 9600…o problema é que mesmo que eu não conecte no datalogger, ou seja, carregando só no Arduino conectado ao computador pela USB, as mensagens estranhas ainda aparecem e além disso os caracteres tem um certo padrão…enfim, não sei o que significa mas me parece ser algo entre o Arduino e a biblioteca. Se alguém puder me ajudar, agradeço muito! Obs.: já troquei o cabo USB, já reinstalei a IDE e também tentei outras versões...mas nada adiantou.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!