Vai al contenuto
PLC Forum


Plc Per Mppt


fabiofiorillo

Messaggi consigliati

Scusa Livio se mi intrometto, ma penso che parlate di due cose diverse,

Probabilmente sei tu che non hai capito esattamente quello che ho scritto. Se ti rileggi con calma il mio messaggio, ti renderai conto che ho descritto esattamente, anche se in termini semplificati, la funzione di un algoritmo MPPT.

Questo algoritmo non viene usato esclusivamente per impianati che riversano la loro energia in rete, o comunque utillzano l'energia sotto forma di corrente alternata, ma anche per impianti che utilizzano l'energia in corrente continua, caricando batterie di accomulatori. Anzi questo algoritmo inizialmente è stato sviluppato proprio per massimizzare la corrente di carica delle batterie.

Se fai una piccola ricerca trovi numerosi esempi.

Ora, dato che fabiofiorillo ha sempre parlato d'inverter, sono curioso di capire dove pensa d'intervenire per massimizzare il trasferimento di energia.

a me fondamentalmente non è necessario sapere di preciso come funziona nella perfezione l'algoritmo, ma solo scrivere con un plc lo schema a blocchi che ho postato. Insomma effettuare le semplici operazioni di comparazioni, somma sottrazione e quante altre ce ne siano....

Questa per me è una rispsota estremamente deprimente! :angry::(

Non tanto per te, ma per la scuola nazionale.

Ma come è possibile ragionare in questo modo a livello di studi universitari! Ma il professore che ti dovrebbe seguire cosa fa?

La meccanizzazione dell'algoritmo è l'ultima cosa da farsi. Lo studio dell'algoritmo è indipendente sia dallo Hw sia dal linguaggio che andrai ad usare. Questa è un'operazione qausi automatica.

La funzione fondamentale dove essere lo studio e l'ottimizzazione dell'algoritmo, che non può prescidere dalla regolazione che devi effettuare.

Io rinnovo il mio consiglio di utilizzare, se ti è possibile, il linguaggio strutturato.

Batta io non concordo con questo tuo consiglio, non per la scelta in termini generali che è corretta, ma per lo scopo che ha questo lavoro.

Lo scopo sembra essere apprendere e verificare la possibilità, e le potenzialità, dell'uso di PLC per elaborare algoritmi MPPT, quindi l'uso di linguaggi a basso livello è molto più didattico perchè ti obbliga a conoscere la macchina (nel senso di PLC) nei dettagli e ti permette di ottimizzare al massimo la funzione.

Modificato: da Livio Orsini
Link al commento
Condividi su altri siti


  • Risposte 55
  • Created
  • Ultima risposta

Top Posters In This Topic

  • Livio Orsini

    17

  • fabiofiorillo

    15

  • enrico89

    13

  • batta

    6

Hai ragione, me ne scuso.

Ma no! Non c'è nulla di cui tu debba scusarti. Hai espresso un'opinione in modo civile ed educato, avendo l'intenzione di portare un contributo alla discussione, quindi tutto regolare. :smile:

Link al commento
Condividi su altri siti

Batta io non concordo con questo tuo consiglio, non per la scelta in termini generali che è corretta, ma per lo scopo che ha questo lavoro.

Lo scopo sembra essere apprendere e verificare la possibilità, e le potenzialità, dell'uso di PLC per elaborare algoritmi MPPT, quindi l'uso di linguaggi a basso livello è molto più didattico perchè ti obbliga a conoscere la macchina (nel senso di PLC) nei dettagli e ti permette di ottimizzare al massimo la funzione.

Forse hai ragione, ma non mi è ancora chiaro quale sia il vero scopo di questo esercizio.

Se lo scopo principale è imparare la programmazione del PLC, ritengo si sia partiti con un compito sbagliato.

Se lo scopo invece è l'ottimizzazione dell'algoritmo, ci si dovrebbe concentrare su quello e sfruttare al meglio il linguaggio più adatto, senza perdere troppo tempo a studiare AWL o altro.

Chi non è pratico di AWL per fare gli stessi calcoli che col linguaggio strutturato scrive in una riga, impiega mezza giornata.

Sai che io amo particolarmente scrivere codice in AWL e che non sono assolutamente un patito del linguaggio strutturato, ma non sono masochista, quindi, quando vedo che un problema si risolve meglio con altri linguaggi, li utilizzo senza esitazione.

Link al commento
Condividi su altri siti

Io ho la sensazione che, ahimè, lo scopo non sia del tutto chiaro nemmeno a chi ha proposto lo studio. Ma questa è una mia interpretazione.

Normalmente questi algoritmi sono risolti direttamente dai processori che controllano l'inverter o il caricabatterie.

Io non so se è stato scelto il PLC perchè è più facile che procurarsi un sistema dedicato, oppure perchè si vuole verificarne la possiiblità di risolvere questi problemi. Questo è un punto che dovrebbe chiarire chi ha iniziato la discussione.

Come ho scritto prima le tue argomentazioni in favore di un linguaggio ad altro livello sono corrette e le condivido al punto che, come ho scritto inizialmente, auspico l'uso deò "C" come linguaggio di programamzione per tutti i PLC.

Io considero l'AWL una specie di assembler per i PLC Siemens, quindi se lo scopo dell'esercizio è la verifica e l'ottimizzazione dell'algoritmo risolto con un PLC meglio sviluppare direttamente tutto in AWL. In questo modo si ha il controllo a basso livello delle risorse. Certo è molto più dispendioso in termini di tempo, ma per ottenere certi risultati si devono affrontare determinati sacrifici. Inoltre quando impari a programamre a basso livello, poi passando ad un liguaggio di livello più elevato le cose son molto più facili, mentre il passaggio inverso è molto più faticoso.

Io ho (quasi) smesso di programamre i PLC perchè non mi diverto ed ora che posso lavorare esclusivamente quasi per diletto mi dedico a lavori...più dilettevoli come la progettazione Hw e Sw per microcontrollori.

Anch'io non sono masochista, anzi ho sempre seguito la filosofia di Pascal: "i lavori stupidi è meglio farli fare alle macchine, non agli uomini" (è la mia libera interpretazione di una sua celebra masima). pertanto, pur conoscendo bene l'assembler di molte macchine, uso quasi esclusivamente il "C", ricorrendo all'assembler per piccoli segmenti che necessitino di particolare ottimizzazione.

Spero di averti illustrato con sufficiente chiarezza le motivazioni della mia "contrarietà" all'uso di SFC per questa applicazione. E' coomunque sempre piacevole confrontare differenti punti di vista sul come risolvere determianti problemi.

Link al commento
Condividi su altri siti

da dove hai recuperato quello schema a blocchi???

provo a buttare due righe di programma, ma non ho capito tutto lo schema, se mi dici dove l'hai trovato me lo studio un pò

Link al commento
Condividi su altri siti

fabiofiorillo

Allora lo schema a blocchi è stato preso da una rivista scientifica. Fondamentalmento non è nemmeno necessario che lo si implementi ma che sia sicuro che possa essere implementato con un plc e mi sia spiegato come deve essere fatto questo plc.

Allora si deve costituire una tabella con i valori di a(T) (coefficienti di tensione) e con i Ki (rapporti di corrente) insomma sono valori fissi.

Imeas e Pmeas sono i valori misurati sul pannello fotovoltaico che devono essere elaborati dal plc, secondo lo schema a blocchi, per restituire in uscita un valore di corrente: I(t) che viene portato nel convertitore, posto dopo i pannelli, che varia il duty cycle e reimposta i valori della tensione e della corrente per il raggiungimento del massimo della potenza.

Ricapitolando il plc riceve in ingresso la corrente e la tensione letta sul pannello, le elabora con i parametri scritti in una tabella, e da in uscita una I(t) che viene poi gestita dal convertitore il quale variando il duty cycle, restituisce nuovi valori di corrente e tensione che vengono di nuovo elaborati dal plc, fino al raggiungimento del punto di massima potenza.

In prima battutta mi servirebbe sapere come deve essere fatto il plc.

Grazie Enrico

Link al commento
Condividi su altri siti

In prima battutta mi servirebbe sapere come deve essere fatto il plc.

Scusa ma propio non capisco cosa ti serve. Dici di avere un minimo di conoscenza dello step7 e dello S_300.

Devi indivuare che ingressi ti servono, tipo analogico,digitale o di conteggio impulsi, qaunte e qauli uscite ti occorrono. Questo lo determini in funzione di segnali che devi acquisire e delle eventuali variabili di uscita. A queste schede aggiungi alimentatore e CPU scegliendo dal catalogo ed hai la configurazione.

non è nemmeno necessario che lo si implementi

Scusa lo schema ha blocchi lo hai desunto da una rivista del settore, la composizione Hw la vorresti fatta, ma tu che fai? Un aiuto ed un idirizzo non te lonega nessuno, ma tu ci devi mettere del tuo!

Link al commento
Condividi su altri siti

fabiofiorillo

mi sembra di averlo spiegato....comunque a(t) è un coefficiente di tensione, Ki è un rapporto ma sono entrambi fissi quindi da essere messi in una tabella. Imeas e Vmeas sono la tensione e la corrente misurata sul pannello che devono entrare nel plc ed essere elaborate come nello schema. In uscita al plc abbiamo una I(t) che viene poi portata al convertitore.In base al suo valore il convertitore varia il duty cycle e da altri valori di V ed I che vengono rielaborati

Link al commento
Condividi su altri siti

è la prima volta che provo l'scl mi son bloccato a questo punto

IF #Imisurata_1<0.5*#Ir

THEN

GOTO p1;

; // Statement section IF

ELSE

IF ABS(#Imisurata_1-#Ipoe)<#epsilon

THEN

GOTO p1;

// Statement section IF

ELSE (#k2*#Imisurata_1) := #It;

// Statement section ELSE

;

END_IF;

;

END_IF;

p1: (#at)*#Imisurata_1 =#Pt;

ci sono errori che non capisco nelle istruzioni goto e qui ((#at)*#Imisurata_1 =#Pt;)

Link al commento
Condividi su altri siti

IF #Imisurata_1<0.5*#Ir THEN "Tag_1":=1;

CASE #Tag_Value OF

1 : GOTO MyLABEL1;

ELSE

IF ABS(#Imisurata_1-#Ipoe)<#epsilon THEN

GOTO MyLABEL1;

ELSE

IF (#Pmisurata/#Imisurata_1)>#a2 THEN

#a2:=(#Pmisurata/#Imisurata_1);

ELSE

#It := (#k2*#Imisurata_1);

END_IF;

END_IF;

MyLABEL1:

#Pt:=(#at*#Imisurata_1);

IF #Pmisurata>#Pt THEN

#It:= #Imisurata_1-#Ai;

ELSE

#It:=#Pmisurata/#at

END_IF;

END_CASE;

END_IF;

eccolo, dovrebbe funzionare, anche se mi da alcuni problemi con la compilazione, dice che mancano dei ";" ma se li metto le formule sono sbaglate.

è la prima volta che scrivo in scl. se qualcuno ci può dare un occhiata e correggere gli errori. ne sarei felice.

fabiofiorillo

se puoi dirmi dove hai trovato lo schema a blocchi me lo studio meglio, ci sarà una spiegazione di cosa fa. io ho capito qualcosa ma non tutto e alcune variabili e/o costanti non so cosa siano.

Link al commento
Condividi su altri siti

Premetto che non ho minimamente controllato se le operazioni eseguite rispecchiano quanto indicato nello schema a blocchi, ma mi esprimo solo per quanto riguarda il codice.

Nel primo post c'erano evidentissimi errori, che non credo ci sia nemmeno il bisogno di commentare.

Nel secondo questi errori grossolani sono stati risolti ma, come dice il compilatore, manca un ";".

E se il compilatore ti dice che manca un ";", puoi stare certo che non potrà mai funzionare.

E dov'è che manca questo ";"? Proprio dove indica il compilatore: alla fine dell'espressione #It:=#Pmisurata/#at

Oltre a questo, il codice potrebbe essere riscritto in forma molto più semplice.

Tanto per cominciare, non so perché hai tirato in ballo il costrutto "CASE" se poi lo utilizzi come un ""IF".

Inoltre non sfrutti l'istruzione "ELSIF".

Per finire, se posti del codice utilizza il tag "codice" (icona <> nella barra degli strumenti dell'editor).

Il risultato sarà il seguente:

IF #Imisurata_1 < 0.5 * #Ir THEN "Tag_1":= 1 ;

  1 : GOTO MyLABEL1;

ELSE

  GOTO MyLabel_2;

END_IF;

Modificato: da batta
Link al commento
Condividi su altri siti

i " ; " sono stati inseriti, come richiesto dal compilatore, ma mi dice che la unzione non è valida.

se non metto un CASE prima del GOTO mi da errore nella compilazione.

Link al commento
Condividi su altri siti


IF #Imisurata_1<0.5*#Ir THEN "Tag_1":=1;

  CASE #Tag_Value OF

    1 : GOTO MyLABEL1;

  ELSE

    IF ABS(#Imisurata_1-#Ipoe)<#epsilon THEN

    GOTO MyLABEL1;

  ELSE

    IF (#Pmisurata/#Imisurata_1)>#a2 THEN

  #a2:=(#Pmisurata/#Imisurata_1);  

ELSE

  #It := (#k2*#Imisurata_1);

  END_IF;						   

END_IF;

MyLABEL1:

#Pt:=(#at*#Imisurata_1);

IF #Pmisurata>#Pt THEN

  #It:= #Imisurata_1-#Ai

ELSE

  #It:=#Pmisurata/#at

END_IF;

END_CASE;

END_IF;

l'errore che mi da ora è (assegnazione non valida) non capisco perchè

Link al commento
Condividi su altri siti

Allora, già a colpo d'occhio si vede che mancano due ";".

Il primo dopo

#It:= #Imisurata_1-#Ai

e il secondo dopo

#It:=#Pmisurata/#at

Facendo un semplice copia/incolla (e dichiarando tutte le variabili come REAL, tranne "Tag_Value" che deve essere INT), se provo a compilare il compilatore mi segnala esattamente quei due errori.

Mettendo i punti e virgola mancanti, la compilazione va a buon fine.

Ho provato poi ad eliminare la struttura CASE e, come era normale che fosse, la compilazione termina ancora regolarmente.

Per capire perché a te salti fuori "assegnazione non valida", dovrei avere a disposizione il progetto completo, e non solo un pezzo di sorgente.

Comunque, se fai doppio click sulla riga dell'errore, ti manda alla riga di codice che ha generato l'errore.

Già capire a cosa è riferito l'errore aiuterebbe non poco.

Tutti i risultati delle varie compilazioni mi hanno sempre dato esattamente l'esito che mi sarei aspettato.

Siamo però finiti decisamente OT.

Link al commento
Condividi su altri siti

con cosa lo compili? io con tia portal, ma mi da sempre lo stesso errore, o ri settato le variabili come dici, ma nulla


IF #Imisurata_1<0.5*#Ir THEN "Tag_1":=1;

  CASE #Tag_Value OF

    1 : GOTO MyLABEL1;

  ELSE

    IF ABS(#Imisurata_1-#Ipoe)<#epsilon THEN

    GOTO MyLABEL1;

  ELSE

    IF (#Pmisurata/#Imisurata_1)>#a2 THEN

  #a2:=(#Pmisurata/#Imisurata_1);  

ELSE

  #It := (#k2*#Imisurata_1);

  END_IF;												  

END_IF;

MyLABEL1:

#Pt:=(#at*#Imisurata_1);

IF #Pmisurata>#Pt THEN

  #It:= #Imisurata_1-#Ai;

ELSE

  #It:=#Pmisurata/#at;

END_IF;

END_CASE;

END_IF;

settaggio variabili

Input

Imisurata_1 Real

Ir Real

Ipoe Real

epsilon Real

Pmisurata Real

a2 Real

at Real

a1t Real

a0 Real

Pt Real

It Real

Tag_Value Int

Ai Real

k2 Real

segnali di errore

Blocco_1 (FC1),,5,0,11:47:31

9,Assegnazione non valida.,1,0,11:47:31

11,Assegnazione non valida.,1,0,11:47:31

15,Assegnazione non valida.,1,0,11:47:31

17,Assegnazione non valida.,1,0,11:47:31

19,Assegnazione non valida.,1,0,11:47:31

,Compilazione terminata (errori: 5; avvisi: 0),1,0,11:47:31

Link al commento
Condividi su altri siti

Volutamente Anonimo

Provo ad esporti le mi considerazioni.

Se e' un esercizio che ti hanno dato, presumo che il prof voglia vedere: non la soluzione, ma come arrivi alla soluzione.

Hai detto in un messaggio che il prof ti ha chiesto di verificare se si puo' fare con un pLC.

Non hai detto che studi fai e che preparazione fai, ed essendo uno studente credo che ci debba mettere del tuo e non sia giusto darti la soluzione scodellata.

Pertanto ti suggerisco (secondo me) quali sono i passaggi che ti portano a definire la soluzione (se si puo' fare con un plc e perche').

1) inanzitutto come sempre accade, l'automazione e' la punta dell'iciberg di un processo, ovvero ho ai ben chiaro l'intorno o non ne vieni fuori.

tanto per iniziare QUALE grandezza dell'inverter devi pilotare?

Presumo che tu debbo conoscere il funzionamento di un inverter se vuoi pilotarne uno in particolare (fa parte delle cose che hai studiato?) al momento che capisci quale grandezza dell'inverter devi pilotare, capisci di che tipo di uscita del PLC hai bisogno. Di una o/10, 4/20, PWM o altro?

Poi dovrai capire se puoi collegarla direttamente all'inverter oppure avrai biosgno di una interfaccia.

Poi dovrai capire (una volta che hai capito come funziona il processo in grandi linee) il tipo di risoluzione di cuiavrai bisogno.

Poi dovrai fare una considerazione sui disturbi, ti daranno noia? e' il caso di trasferire le info via bus? vai a pilotare una grandezza che varia da 3 a 4 volt? o una grandezza che varia da 0 a 200 volt?

Alla fine di questo discorso avrai gia un punto fermo che ti vincolerà una parte di scelta del plc.

2) idem vale per gli ingressi del CAMPO fotovoltaico, e anche qui vincolerai le scelte successive.

3) poi dovrai fare un ragionamento su come vorrai automatizzare il processo.

3a) ti crei una immagine matematica delle curve del campo all'interno del plc e poi dopo a seconda di come sta funzionando il campo ti sposti nel punto di lavoro piu' ottimale?

3b) installi una specie di sonda campione e con le immagini che hai all'interno valuti per quell'irraggiamento qual'e' il punto di lavoro piu' ottimale?

3c) mentre il campo fv lavora in un certo punto, sposti il punto di lavoro al punto inferiore, poi al punto superiore fai un confronto e decidi dove posizionarlo? e ripeti ciclicamente questa ottimizzazione.

pro e contro delle 3 soluzioni?

4) arrivati in fondo a questo ragionamento ti conviene fare un ipotesi, per piccole variazioni ho un calo drastico del rendimento? posso influire sugli i/o dei disturbi? si puo' risolvere?

Ecco in fondo a questo percorso avrai:

- il tipo di i/o che ti servono

- il tipo di plc che ti serve (grosso modo)

- il linguaggio piu' opportuno per sviluppare il tutto.

A occhio mi pare un esercizio in cui uno per risolverlo dovrebbe mettere in campo tutta una serie di nozioni che ha studiato durante l'anno.

E pertanto questi (secondo me) sono i passaggi che dovresti seguire.

IMHO.

Insomma, mettici del tuo, non ripetere i dati che si vedono sull'algoritmo.

Link al commento
Condividi su altri siti

non è stato dato a me queso es, ma a chi ha aperto questo topic. io ho solo provato a scrivere il codice per provare l'scl. a me interessa capire perchè mi da gli errori precedentemente postati. per quanto riguarda lo schema a blocchi, ho chiesto più volte se postava l'articolo, libro o esercizio, da cui ha estrapolato lo schema. per capire bene da che punto si parte e dove si vuole arrivare. senza questa prescrizione. mi sono limitato a fare un esercizio di scrittura codice, per imparare una cosa nuova, non per risolvere il problema che è stato postato. anche perchè non l'ho capito

Link al commento
Condividi su altri siti

Le conisderazioni che ha fatto Volutamente Anonimo sono le medesime che, in forma più succinta, avevo già espresso io.

Non so quali siano le motivazioni che hanno spinto enrco89 a "buttarsi" nella scrittura del codice, però non sta certo rendendo un favore a fabio fiorillo.

Io mi sono volutqamente astenuto, dopo l'ultimo commento, proprio per un motivo "educativo".

Link al commento
Condividi su altri siti

queste due righe di codice, non sono nemmeno giuste, spero di non aver fatto torto a nessuno. ho solo provato, poi fabio fiorillo lo scrivera sicuramente meglio. visto che sa cosa va a pilotare e perchè. in ogni modo se ho recato danno mi scuso

Link al commento
Condividi su altri siti

in ogni modo se ho recato danno mi scuso

Non hai niente di cui scusarti, ci mancherebbe! Tu, con molto entusiasmo, hai cercato di aiutare qualcun altro a risolvere un problema.

visto che sa cosa va a pilotare e perchè.

Da quello che scrive si arguisce chenon è proprio così. :smile:

Però è singolare che la persona che dovrebbe essere maggiormente interesata sia sparita.

Link al commento
Condividi su altri siti

fabiofiorillo

Signori, vi chiedo scusa se sono sparito, ma sono stato poco bene, seguirò il consiglio e poi magari alla fine del lavoro vi posterò la soluzione. Vi ringrazio per gli aiuti che mi avete dato e vi auguro buon lavoro...

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora

×
×
  • Crea nuovo/a...