Salve,
sto cercando di connettere via RS485 una scheda arduino Uno all'inverter fotovoltaico Aurora che ho installato per il mio impianto fotovoltaico a casa.
Per la connessione dei dispositivi ho usato lo schema di cui al link di seguito.
Quindi collego il GRD di arduino al GRD dell'inverter, i pin TX e RX di Arduino alle corrispondenti uscite dell'inverter e il PIN 2 per la trasmissione del messaggio.
Per quanto riguarda i messaggi, il formalismo accettato dall'inverter Aurora è quello delle immagini in allegato: trasmissionMessage.jpg e receivingMessage.jpg rispettvamente di 10 byte e 8 byte
Per quanto riguarda il codice in Arduino io mi sto orientando sul seguente:
byte RFin_bytes[9];
#define pinTx 01
#define pinRx 00
#include <NewSoftSerial.h>
void setup()
{
pinMode(pinTx,OUTPUT);
pinMode(pinRx,OUTPUT);
digitalWrite(pinTx,HIGH);
digitalWrite(pinRx,LOW);
pinMode(2,OUTPUT);
Serial.begin(9600);
}
void sendMSG(byte address,byte command,byte b2,byte b3,byte b4,byte b5,byte b6,byte b7,byte crc_l,byte crc_h)
{
Serial.write(12345);
//Generic command call
Serial.write(command);
Serial.write(b2);
Serial.write(b3);
Serial.write(b4);
Serial.write(b5);
Serial.write(b6);
Serial.write(b7);
Serial.write(crc_l);
Serial.write(crc_h);
delay(100);
//After trasmission PinTx is set LOW
digitalWrite(pinTx,LOW);
}
void loop()
{
delay(500);
digitalWrite(pinTx,HIGH);
//Inizio la trasmissione delle richiesta all'inverter Aurora
if (pinTx==HIGH)
{
//Invio richiesta STATO Inverter
pinMode(2,OUTPUT);
sendMSG(12345,50,0,0,0,0,0,0,1,2);
delay(50);
//Predispongo per ricezione risposta da inverter
pinMode(2,INPUT);
while (Serial.available()<8) {} // Wait 'till there are 9 Bytes waiting
for(int n=0; n<8; n++)
{
RFin_bytes[n] = Serial.read(); // Then: Get them.
//A questo punto si tratta di riconoscere con degli if then quale sia il msg ricevuto -- codice da definire
}
}
//Invio richiesta stato Measure request DSP
pinMode(2,OUTPUT);
sendMSG(12345,59,0,0,0,0,0,0,1,2);
delay(50);
pinMode(2,INPUT);
while (Serial.available()<8) {} // Wait 'till there are 9 Bytes waiting
for(int n=0; n<8; n++)
{
RFin_bytes[n] = Serial.read(); // Then: Get them.
//A questo punto si tratta di riconoscere con degli if then quale sia il msg ricevuto -- da definire
}
}
Quindi come si vede avrei intenzione di lanciare il msg sul BUS RS485, attendere il ritorno dall'inverter e successivamente riconoscerne il ritorno.
Qualcuno ha indicazioni o suggerimenti a riguardo?
Grazie,
saluti

