ABB PVI 6000-TL-OUTD Comunicazione RS485 - EnergeticAmbiente.it

annuncio

Comprimi
Ancora nessun annuncio.

ABB PVI 6000-TL-OUTD Comunicazione RS485

Comprimi
X
 
  • Filtro
  • Ora
  • Visualizza
Elimina tutto
nuovi messaggi

  • ABB PVI 6000-TL-OUTD Comunicazione RS485

    Salve,
    sto tentando di dialogare con il mio inverter ABB. Sono riuscito a leggere varie misure con un dongle USB che traduce da UART a RS485. Attualmente sto tentando di passare ad una maggiore integrazione dell'hardware, attraverso una RS485 Breakout board di cui il link di seguito:

    RS-485 Breakout - BOB-09823 - SparkFun Electronics

    Il chip in questione non gestisce autonomente il duplexing quindi ha un pin dedicato alla commutazione da trasmissione a ricezione. Dopo vari tentativi sono riuscito ad effettuare delle letture (Vgrid e Pout) commutando manualmente con un GPIO tale pin. In pseudocodice:

    codice:
     GPIO.SET(1)
     SERIAL.WRITE(REQUEST, 10) //Len 10 as per (http://www.drhack.it/images/PDF/AuroraCommunicationProtocol_4_2.pdf)
     SLEEP((10+2 /* GUARD */) * 8.0 / 19200) // keep the GPIO high for the time of the request to be sent
     GPIO.SET(0)
     WHILE (RES.len < 8)  
          RES+=SERIAL.READ()
     //... checksum + decode...
    Ciò che osservo è che a volte la lettura ha successo mentre altre volte no. Apparentemente in molti casi di insuccesso il motivo è che quando vado a leggere il risultato sulla seriale, i bit che leggo sono shiftati in su o in giù di svariate posizioni e conseguentemente, il checksum fallisce diciamo 9 volte su 10.

    Analizzando con un oscilloscopio le linee A-B vedo la richiesta e la risposta:

    Clicca sull'immagine per ingrandirla. 

Nome:   correct.jpg 
Visite: 1 
Dimensione: 346.3 KB 
ID: 1985540Clicca sull'immagine per ingrandirla. 

Nome:   correct_response.jpg 
Visite: 1 
Dimensione: 492.1 KB 
ID: 1985541

    Quando la risposta è campionata correttamente sulla seriale, vedo le immagini che vi riporto sull'oscilloscopio, e la response (che si caratterizza da un fronte di segnale con ampiezza maggiore rispetto alla richiesta, sulla destra nelle immagini) che leggo è per esempio:

    codice:
    00064372ccea53e1
    La response qui riportata ha il checksum corretto e il risultato è nel caso specifico una Vgrid di 242V (ed è uguale a quello che leggo sul display dell'inverter.. quindi non è decisamente un caso).

    Nella maggioranza dei casi tuttavia i valori letti sono senza senso e il CRC fallisce.
    Noto che la parte iniziale (000643) è invariata quando il reading è corretto e il checksum ha successo.
    Noto anche che capita spesso di leggere 00000..643.. oppure 00..C86., ovvero valori corretti ma shiftati in su o in giù di N-bit posizioni.
    Altre volte leggo semplicemente garbage (o per lo meno roba che non ha un pattern riconoscibile).
    Una cosa importante che osservo è che il ritardo tra la fine della richiesta e l'inizio della risposta dall'inverter sulle linee A-B cambia di molto, e che quando ho successo nella lettura è sempre uguale e minimo, come nelle immagini riportate. Quando fallisco invece, la risposta può trovarsi anche più di una dozzina di divisioni (deltaT dell'oscilloscopio) ritardata rispetto alla richiesta: per capirci nelle immagini riportate, la finestra temporale potrebbe non catturare la response.

    L'idea che mi son fatto è che l'inverter risponda a intervalli periodici regolari, quindi, quando io mando la richiesta di misura, lui la tenga in coda finchè non scatta il momento in cui è cadenzato l'eventuale invio di una risposta. Se la richiesta arriva proprio appena prima che tale intervallo scada, il risultato è che richiesta e risposta sono sufficientemente vicine da permettere di leggere il valore al momento in cui leggo la seriale. Se la richiesta è mandata troppo in anticipo rispetto a tale intervallo la lettura dalla seriale legge garbage.

    Stranamente questo fenomeno era gestito perfettamente dal dongle USB (che credo usi un MAX232 qualcosa)..

    Tenete presente che a inverter spento, se faccio una lettura leggo garbage.. quindi nono ho niente se non quella iniziale sequenza di 000643 ed il checksum finale, per determinare l'inizio della risposta..

    Avete suggerimenti su come rilevare correttamente l'inizio della risposta ?


    Grazie,
    R

  • #2
    In diversi nel forum usiamo questo 1pcs USB to RS485 485 Converter Adapter Support Win7 XP Vista Linux Mac OS WinCE5.0-in Integrated Circuits from Electronic Components & Supplies on Aliexpress.com | Alibaba Group nessun problema .... perchè vuoi utilizzare quella schedina ? se cerchi come logger troverai che tutti siamo con dispositivi ARM e 123solar come monitoraggio degli inverter , io uso un Orange PI costa 10€ + la USB-RS485 senza incasinarsi nel gestire niente , trovi tutto pronto....
    AUTO BANNATO

    Commenta


    • #3
      Originariamente inviato da spider61 Visualizza il messaggio
      In diversi nel forum usiamo questo 1pcs USB to RS485 485 Converter Adapter Support Win7 XP Vista Linux Mac OS WinCE5.0-in Integrated Circuits from Electronic Components & Supplies on Aliexpress.com | Alibaba Group nessun problema .... perchè vuoi utilizzare quella schedina ? se cerchi come logger troverai che tutti siamo con dispositivi ARM e 123solar come monitoraggio degli inverter , io uso un Orange PI costa 10€ + la USB-RS485 senza incasinarsi nel gestire niente , trovi tutto pronto....
      Si, infatti, anche io ho lo stesso setup hardware (orange PI + USB-RS485 del link) e funziona, ma vorrei sostituire quell'USB dongle con la mia scheda per integrare il tutto nel boxing della orange Pi.

      Commenta


      • #4
        E' possibile che il fatto di leggere roba spuria sulla seriale possa essere un cattivo o mancato biasing delle linee A e B ?

        Commenta


        • #5
          Ciao, scusate se riesumo questo thread, ma volevo sapere se alla fine è stata trovata una soluzione al problema o no... Io volevo fare letture dello stesso inverter con un circuitino simile (quindi conversione RS485-UART con abilitazione dei driver attraverso GPIO), e non avendo un oscilloscopio non avrò mai la possibilità di fare un'analisi dettagliata e approfondita come è stata fatta da riccardomanfrin, però questo thread già mi aiuta in anticipo a sapere a quali possibili problematiche si può andare incontro.

          // EDIT Riccardino, visto che sei in possesso di una dongle USB <-> RS485 potresti fare dei test di comunicazione fra microchip e dongle, intanto può essere utile per cercare di scremare il problema. Un'altra cosa che vorrei chiederti è se il bus è "biasato" per mantenerlo in uno stato noto durante l'idle (per intenderci: pull-up di A e pull-down di B, più info qui)

          Commenta


          • #6
            Originariamente inviato da barbie Visualizza il messaggio
            Ciao, scusate se riesumo questo thread, ma volevo sapere se alla fine è stata trovata una soluzione al problema o no... Io volevo fare letture dello stesso inverter con un circuitino simile (quindi conversione RS485-UART con abilitazione dei driver attraverso GPIO), e non avendo un oscilloscopio non avrò mai la possibilità di fare un'analisi dettagliata e approfondita come è stata fatta da riccardomanfrin, però questo thread già mi aiuta in anticipo a sapere a quali possibili problematiche si può andare incontro.

            // EDIT Riccardino, visto che sei in possesso di una dongle USB <-> RS485 potresti fare dei test di comunicazione fra microchip e dongle, intanto può essere utile per cercare di scremare il problema. Un'altra cosa che vorrei chiederti è se il bus è "biasato" per mantenerlo in uno stato noto durante l'idle (per intenderci: pull-up di A e pull-down di B, più info qui)

            Consiglio questo:
            UART TTL to RS485 Converter
            Risolve e non ti devi pilotare a mano il duplexing con il DE e suo negato, e ti evita di usare una porta USB.
            Trovi anche su amazon. provato con RPIZero W
            Che io abbia visto tutti quanti sono pull up/pull down in idle (o almeno l'oscilloscopio sembra dire di si, anche dalle immagini). Non ti so dire se le resistenze di pull up/down siano collegate a monte sull'inverter o sul circuito integrato (ti devi guardare lo schematic), o su entrambi (<- secondo me è entrambi).

            Commenta


            • #7
              Ciao. Io all'epoca , 4 anni fa scrissi il software per leggere da arduino i medesimi dati e metterli su pvoutput.
              Purtroppo il fallimento del crc é intrinseco nel firmware del inverter per colpa della scarsa sincronia tra hardware dell'inverter e sistema di lettura. Su 10 letture che effettuò con tutti i dati dell'inverter é normale che faccia anche due tentativi a vuoto prima di farcela a leggerli consecutivamente tutti e 10.
              si ti confermo che l'inverter risponde seguendo la frequenza del suo clock. Se non ricordo male la rs ha una apertura di comunicazione ogni 10 ms
              FV: 3.5kWp - 14xWaris 250 Poli + Aurora Power One 3.0 Installato 7/10/14 - Allaccio 25/11/14
              2 pannelli solari termici piani con boiler a "svuotamento" 300L Ariston e caldaia instantanea a condensazione Class Premium Evo 30 kW Installato 4/11/13
              Prov. Mantova - SUD+15° - Tilt 21°
              Altre stufe a pellet e a legna di poca importanza

              Commenta


              • #8
                Originariamente inviato da thecas Visualizza il messaggio
                Ciao. Io all'epoca , 4 anni fa scrissi il software per leggere da arduino i medesimi dati e metterli su pvoutput.
                Purtroppo il fallimento del crc é intrinseco nel firmware del inverter per colpa della scarsa sincronia tra hardware dell'inverter e sistema di lettura. Su 10 letture che effettuò con tutti i dati dell'inverter é normale che faccia anche due tentativi a vuoto prima di farcela a leggerli consecutivamente tutti e 10.
                si ti confermo che l'inverter risponde seguendo la frequenza del suo clock. Se non ricordo male la rs ha una apertura di comunicazione ogni 10 ms
                Confermo con quanto riporti, credo che in qualche modo i vari integrati MAX... pilotino il fronte iniziale del segnale per untempo sufficiente a garantire che il l'apertura di comunicazione dell'ABB rilevi l'inizio di un payload.

                Anche io su N tentativi ne imbroccavo N/2 circa.. peggiorando /migliorando la statistica a seconda del ritardo con cui commutavo TX in RX

                Commenta


                • #9
                  A questo punto se vuoi fai l'integrazione con pvoutput. E' un buon servizio gratuito che fa da memoria di tutti i dati presenti e passati
                  FV: 3.5kWp - 14xWaris 250 Poli + Aurora Power One 3.0 Installato 7/10/14 - Allaccio 25/11/14
                  2 pannelli solari termici piani con boiler a "svuotamento" 300L Ariston e caldaia instantanea a condensazione Class Premium Evo 30 kW Installato 4/11/13
                  Prov. Mantova - SUD+15° - Tilt 21°
                  Altre stufe a pellet e a legna di poca importanza

                  Commenta


                  • #10
                    Originariamente inviato da thecas Visualizza il messaggio
                    A questo punto se vuoi fai l'integrazione con pvoutput. E' un buon servizio gratuito che fa da memoria di tutti i dati presenti e passati
                    to mi faccio un pò di pubblicità
                    flask + redis + aurorapy + highcharts + raspberry + Yeeco 3,5 Millimetri Produzione Corrente AC Sensore Transformers Blu Alimentazione Elettrica SCT 013-030 30A / 1V: Amazon.it: Fai da te + 4 diodi per raddizzare e un cap per smoothare + ADC adafruit

                    tutto su github
                    Clicca sull'immagine per ingrandirla. 

Nome:   Screenshot_2018-12-21_16-50-38.png 
Visite: 1 
Dimensione: 192.5 KB 
ID: 1967715

                    Commenta

                    Attendi un attimo...
                    X