Datalogger fotovoltaico con Linux

 

Datalogger fotovoltaico con Linux

 

datalogger fotovoltaico con linux

 

Ho un’amico, che utilizza per fare il monitoraggio di un grande impianto fotovoltaico da 1MW, un datalogger di una marca molto famosa del settore. Fino a qui insomma, niente di anomalo. Solo che lui, per poter accedere al datalogger da remoto, l’ha messo in rete (LAN) con un PC che si trova sull’impianto, e a questo PC accede attraverso TeamViewer.

Io, dal canto mio, sono minimalista. Se ho già un datalogger dotato di tutto, a che serve il PC ??? E se ho già un computer sull’impanto, che sta acceso 24 ore su 24, a che cosa mi serve il datalogger ???

 

Purtroppo nella mia vita, davanti ai miei occhi, ho visto più impianti fotovoltaici che donne nude :( . E spesso ho anche visto dei sistemi di monitoraggio assurdi. Dallo SCADA iper personalizzato da 80mila euro (impianto da 9MW) fino all’impianto (da 3MW) con „16“ datalogger per causa di incompatibilità fra dispositivi (inverter e stringbox).

I produttori di inverter fotovoltaici di solito mettono a disposizione un protocollo aperto (ANSI x3.28) per poter communicare con il dispositivo. Utilizzando un PC con Linux oppure Windows come base, possiamo sfruttare questa interfaccia.

 


Indice


 

Tipologia e specifiche del bus

 

datalogger fotovoltaico con linux ansi

La tipologia dell’interfaccia degli inverter fotovoltaici è del tipo Master – Slave, basato su RS485 come specifiche elettriche. Il dataframe è composto quasi sempre da 8bit dati 1 stop bit è nessun bit (none) di parità (8N1), con velocità compresi fra 2400-19200 baud.
L’inverter utilizzato da me per fare le prove, un Delta SOLIVIA 5.0, aveva il formato 8N1 con 19200 baud e niente Handeshake (XOR, CTS, ecc.).
Per collegare inverter e PC insieme, serve sul lato PC un convertitore RS485/USB oppure RS485/RS232. Non scortatevi di configurare anche la porta del PC (/dev/ttyUSB) oppure (COM) utilizzando la stessa configurazione (8N1 19200).


 

Protocollo ANSI

 

ANSI x3.28 si basa sui caratteri ASCII, il frame format di x3.28 è sempre lo stesso. Il telegramma (messaggio) inizia con <STX> start of text (0×02) e finisce con <ETX> end of text (0×03). I caratteri <ENQ>, <EOT> e <DLE> servono per stabilire le regole (arbitraggio) fra request e response (flow control). Infine <ACK> e <NAK> indicano, se la richiesta dal datalogger è stata accettata dall’inverter, è lo scambio dati può avvenire. Infine c’è la checksum (CRC) che viene calcolata in base ai byte trasmessi. Il calcolo lo spiegerò in seguito.

datalogger fotovoltaico con linux frameformat

data request dal datalogger all’inverter

 

Il frame vale sia per la fase di interrogazione dell’inverter che per la risposta che torna indietro da esso. Il grafico sopra riportato, mostra la tipica stringa composta da numeri in formato esadecimale, di un’inverter con l’indirizzo (bus) „7“ (0×07).

 

Request (dal datalogger)

02 05 07 02 60 01 85 74 03

Response (dell’inverter)

02 06 07 ……. dati + checksum …….. 03

 

Da notare, ci sono i caratteri <ENQ> (0×05) per la richiesta e <ACK> (0×06) oppure <NAK> (0×15) per la risposta. Il carattere <ENQ> indica che si tratta di una richiesta, invece <ACK> segna la richiesta come positiva (valida) e <NAK> la segna negativa (non valida). In caso di negative acknowledge (NAK) i dati trasmessi saranno corrotti e non utilizzabili.

Calcolo della checksum (CRC)

La checksum, nel nostro caso la CRC – 16bit, fondamentalmente si ottiene sommando tutti i byte trasmessi nel dataframe per poi dividerli con un valore prestabilito (di solito 0xA001). Se come nel nostro caso, la stringa non varia (ne di lunghezza, ne di contenuto) conviene di calcolare la checksum una volta con un calcolatore online per poi inserirla manualmente nel dataframe. NB: quando si calcola la checksum non bisogna includere nel calcolo i caratteri che specificano inizio e fine del frame, cioè <STX> e <ETX>.

Esempio di calcolo (i valori evidenziati in rosso non vengono utilizzati)

 

02050702600103

 

Prima di poter utilizzare la checksum bisogna invertire high e low byte, 0×7485 in 0×8574.


 

Datalogger fotovoltaico con Linux

 

datalogger fotovoltaico con linux echo

Per fare un primo test di funzionamento, possiamo aprire due (putroppo nell’immagine accanto sembra solo una finestra, in realta però sono due) sessioni di terminale. Una finestra server per fare la request, e l’altra per ricevere la response. Configuriamo la porta (baud rate 19200) e con un semplice „echo“ mandiamo la stringa attraverso l’interfaccia seriale per poi riceverla nella seconda sessione del terminale con „cat“.

 

Se adesso guardiamo la risposta che arriva dall’inverter, (sempre che arrivi qualcosa ;) ) vediamo fondamentalmente che si tratta della matricola prodotto EOE46010201 e il numero seriale dell’inverter 1035001785 (attenzione qui, a high e low byte) con qualche altro dato in mezzo.Tutti gli altri dati, ci vegono purtroppo mascherati per causa della codifica (UTF-8) utilizzata dal terminale.

Però questo test serviva più che altro per capire se funziona la comunicazione fra PC e inverter.

Datalogger fotovoltaico con Linux – l’enigma dei valori

 

Innanzittutto devo ammettere che l’inverter su cui stavo facendo le prove, non stava producendo ancora niente. Diciamo che era in stand-by, per cui ci sono pochi valori a disposizione (tensioni DC, resistenze d’isolamento, temperature, ore di funzionamento). Dall’altra parte c’erano tanti allarmi attivi :mrgreen: quindi ci dedicheremo anche a questi.

Per estrarre i valori dalla stringa che manda l’inverter, o meglio, per poter capire come è composta quella stringa, vi consiglio vivamente di utilizzare un’analizzatore di protocollo. L’immagine sotto mostra una finestra di un analizzatore che utilizzo io. Ho evidenziato la posizione dei singoli valori, confrontando il valori dell’analizzatore con quelli che ho letto utilizzando il display dell’inverter. É un lavoro un pò macchinoso……….sopprattutto i bit che segnalano gli allarmi….non sono facili da indovinare, ma alla fine il lavoro ripaga tutti gli sforzi fatti :) .

datalogger fotovoltaico

I dati hanno sempre una grandezza di 2 byte (iniziando con high e finendo con low byte). Per arrivare al valore in formato decimale, bisogna unire i due byte, per poi convertire da hex in decimale.

 

Un esempio:

01 37 = 0137 (hex) = 311 (decimal)

Facendo cosi arriviamo a questi valori

  • tensione PV1 =  311 V
  • tensione PV2 =  310 V
  • riso PV1 =  4459 kOhm
  • riso PV2 =  10000 kOhm
  • temperatura NTC lato DC = 22°C
  • temperatura NTC lato AC = 24°C
  • produzione energia giornaliera = 0.0 Wh
  • produzione energia totale = 21.8 kWh
  • ore di funzionamento = 4 H

Discorso a parte per i registri degli errori (eventi), che occupano l’ultima parte della stringa che arriva dall’inverter. Qui la grandezza dei dati è di solo 1 byte, e di solito questi byte hanno il valore 0 (significa nessun errore attivo). Se come nel nostro caso compare un valore (01 oppure 88) significa che uno oppure più bit dentro quel byte hanno cambiato stato (da 0 a 1). Ci sono 2 allarmi attivi:

  • AC limits
  • critical undervoltage AC

 

Datalogger fotovoltaico con Linux – mettendo il puzzle insieme

bene bene
 

L’autore del blog

Werner Schrottenbaum è un appassionato di tecnologia e innovazione. Per scoprire di più, seguilo su Twitter e Google+.

Leave a comment




Allowed HTML Tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" cssfile="" class="" title="" data-url=""> <span class="" title="" data-url="">


Datalogger fotovolta

  Datalogger fotovoltaico con Linux     Ho un'amico, che utilizza per fare il ...

Raspberry Pi visuali

  Raspberry Pi visualizzare grafici Sono "addicted" di andamenti grafici, secondo me ...

Raspberry Pi porta s

  Raspberry Pi porta seriale   Per chi come me, viene dall'automazione industriale, ...

Raspberry Pi misurar

  Raspberry Pi misurare temperatura     Ci sono tanti modi per misurare consumi ...

Raspberry Pi convert

  Raspberry Pi convertitore A/D   Oggi vi presento un modulo A/D con ...

Datalogger fotovolta

  Datalogger fotovoltaico con Linux     Ho un'amico, che utilizza per fare il ...

Raspberry Pi visuali

  Raspberry Pi visualizzare grafici Sono "addicted" di andamenti grafici, secondo me ...

Raspberry Pi porta s

  Raspberry Pi porta seriale   Per chi come me, viene dall'automazione industriale, ...

Raspberry Pi misurar

  Raspberry Pi misurare temperatura     Ci sono tanti modi per misurare consumi ...

Raspberry Pi convert

  Raspberry Pi convertitore A/D   Oggi vi presento un modulo A/D con ...