Messaggi: 22
Discussioni: 2
Registrato: Feb 2020
Reputazione:
0
Buongiorno a tutti.
Ho un piccolo quesito da porvi.
Attraverso lo strumento Victron BMV702, faccio il monitoraggio delle batterie, collegate al mio impianto fotovoltaico. Rilevo i valore della corrente (positiva e negativa) tramite arduino, che a sua volta è collegato a raspberry. Nello sketch che ho creato, vorrei rilevare le correnti di cui sopra, per poi calcolare potenza ed energia da inserire in metern.
Ho cercato molto in questi giorni di quarantena forzata, sul web, ma non ho trovato niente che mi potesse aiutare a realizzare questa idea.
Secondo le vostre competenze ha senso una cosa del genere?:
poniamo che la corrente delle batterie sia
A = myData[9:lun]
per determinare se la corrente delle batterie è positiva o negativa posso scrivere
cpos = A>0
cneg = A<0
Scusate la mia ignoranza ma le mie conoscenze di python sono molto limitate. Sto cercando di imparare , ma vedo che non è semplice.
Grazie per le vostre eventuali cortesi risposte.
Buona giornata.
Messaggi: 22
Discussioni: 2
Registrato: Feb 2020
Reputazione:
0
Grazie ippogrifo per la risposta.
Mi sono dimenticato di specificare che il valore della corrente, positivo o negativo che sia, lo dovrei moltiplicare per la tensione delle batterie per calcolare la potenza (di ricarica o di scarica). Quindi quei due valori li devo identificare non con vero o falso ma con un numero/lettera es.:
ppos = tensione *cpos
pneg = tensione*cneg
Grazie.
Messaggi: 22
Discussioni: 2
Registrato: Feb 2020
Reputazione:
0
Per la precisione: trattandosi di batterie si parla di corrente continua, quindi tra tensione e corrente non vi è alcuno sfasamento; mentre in corrente alternata la potenza viene calcolata come V*I*cosϕ, dove ϕ, per l'appunto, è l'angolo di sfasamento tra V ed I.
Lo strumento Victron BMV702 restituisce, tramite arduino ogni 6 sec., un valore di corrente positivo (senza segno) o un valore negativo (con segno meno), con cui posso calcolare la potenza in ricarica dai pannelli fotovoltaici, oppure la potenza in scarica, quando i pannelli non producono o quando il sole non è sufficientte per alimentare da solo il carico.
Per calcolare l'energia di ricarica o di scarica, moltiplico la potenza per 6"/3600 (kWh). So bene che non c'è una gran precisione, ma a me va già bene così.
Grazie per la tua risposta, ippogrifo.
A presto.
.
Messaggi: 1,222
Discussioni: 4
Registrato: Apr 2016
Reputazione:
130
26/03/2020, 12:47
(Questo messaggio è stato modificato l'ultima volta il: 26/03/2020, 18:34 da ippogrifo.)
Il segno maggiore e minore sono operatori logici e restuiscono vero o falso; non eseguono alcuna operazione se non quella logica di confronto. Ad esempio, ipotizziama che A = 15 (ampere):
la prima istruzione "if A > 0" è vera perchè 15 è maggiore di 0, allora per assegnare un valore a ppos moltiplica la tensione per A (quindi 48V (valore casuale) x 15 Ampere = xxxxxx). Se la condizione non è vera, cioè A = -15 (ampere) (A < 0), allora per assegnare un valore a pneg moltiplica la tensione per -A (quindi 48V (valore casuale) x -15 Ampere = -xxxxxx.
P.S.
Verifica che "A = myData[9:lun]" non assegni ad A il valore numerico 1, per cui il prodotto di tensione * A darà sempre come risultato il valore di tensione
Ho omesso i due punti dopo l'istruzione "if A > 0" e "else" pensando alla logica e non alla sintassi.
I due punti in python sono necessari, quindi:
if A > 0:
ppos = tensione * A
else:
pneg = tensione * A
Messaggi: 22
Discussioni: 2
Registrato: Feb 2020
Reputazione:
0
Ciao ippogrifo.
Ho riprovato ancora, con gli stessi esiti. Il valore della corrente è giusto, ma il risultato è quello che ti ho detto nel mio post precedente e mi sono accorto della mancanza dei ":" nei comandi. Grazie per l'aiuto.
Messaggi: 1,222
Discussioni: 4
Registrato: Apr 2016
Reputazione:
130
27/03/2020, 14:17
(Questo messaggio è stato modificato l'ultima volta il: 27/03/2020, 14:55 da ippogrifo.)
Per verificare se le operazioni sono corrette, assegna ad A un valore intero qualsiasi, sostituendolo momentaneamente ad "A = myData[9:lun]".
L'operazione di slicing (9:lun) è una operazione che si applica alle stringhe o array, la restituzione potrebbe essere non un intero ma dei caratteri/byte che rappresentano un'intero.
Un esempio:
1 come carattere è rappresentato nel codice ascii in esadecimale come 31 e in decimale come 49; in binario: 0011 0001.
1 come "quantità" è un intero e non può essere rappresentato in ascii; in binario: 0000 0001.
La differernza è importante: non è possibile la moltiplicazione di un carattere (stringa) per un intero, e l'interprete dovrebbe segnalare l'errore.
Ipotizzando A = 10, come stringa sarebbe la composizione di due caratter/bytei 1 e 0, cioè 31 (00110001) e 30 (00110000) in esadecimale, 49 e 48 in decimale. Come un intero, in binario sarebbe un solo byte: 0000 1010, in esadecimale: 0A; in decimale non è rappresentabile.
Se così fosse prova a convertire la stringa "myData[9:lun]" in un intero o float:
A=int (o float)myData[9:lun]