Home › Forum › Controllori SlimLine e Netsyst (LogicLab) › Computo e visualizzazione potenza istantanea da contatore
- Questo topic ha 1 risposta, 2 partecipanti ed è stato aggiornato l'ultima volta 12 anni, 10 mesi fa da Sergio Bertana.
-
AutorePost
-
Giugno 3, 2011 alle 9:51 am #35021AnonimoInattivo
Nello stabilimento abbiamo un contatore di energia fornito da Enel con una uscita ad impulsi che genera 5000 impulsi ogni 1500 KWh.
Intendo utilizzare una CPU SlimLine dove collegando ad uno degli ingressi digitali del modulo, il contatto del contatore, mi permetta di calcolare in base alla frequenza degli impulsi il valore di potenza istantanea. Il valore calcolato verrà poi visualizzato su di un pannello operatore con un bargraph.
Potete darmi qualche indicazione su come realizzare questo conteggio ?Giugno 3, 2011 alle 9:58 am #36757Sergio BertanaAmministratore del forumHo realizzato un blocco funzione che effettua il calcolo della potenza istantanea in base alla frequenza di ingresso del contatto. Viene eseguita anche una media sugli ultimi 10 valori acquisiti, allego il progetto per il download.
VAR_INPUT
PTick : BOOL; { DE:”Power tick” }
TPower : REAL; { DE:”Tick power (Kw)” }
END_VARVAR_OUTPUT
IPower : REAL; { DE:”Instant power (Kw)” }
END_VARVAR
Delay : UDINT; { DE:”Delay time (uS)” }
TPulse : BOOL; { DE:”Tick pulse” }
TimeBf : UDINT; { DE:”Time buffer” }
PValues : ARRAY[ 0..9 ] OF REAL; { DE:”Power values (Kw)” }
RSeq : USINT; { DE:”Read sequencer” }
i : USINT; { DE:”Auxiliary counter” }
END_VAR{ CODE:ST }
(* Eseguo controllo fronte salita ingresso conteggio. *)IF (PTick = TPulse) THEN RETURN; END_IF;
TPulse:=PTick; (* Tick pulse *)
IF NOT(PTick) THEN RETURN; END_IF;(* Fronte attivazione impulso, calcolo ritardo impulsi. *)
Delay:=SysGetSysTime(TRUE)-TimeBf; (* Delay time (uS) *)
TimeBf:=SysGetSysTime(FALSE); (* Time buffer *)(* Incremento sequenziatore letture e calcolo potenza istantanea. *)
RSeq:=RSeq+1; (* Read sequencer *)
IF (RSeq >= 10) THEN RSeq:=0; END_IF;
PValues[RSeq]:=(3600000000.0/TO_REAL(Delay))*TPower; (* Power values (Kw) *)(* Calcolo valore medio di potenza istantanea su 10 letture. *)
IPower:=0.0; (* Instant power (Kw) *)
FOR i:=0 TO 9 DO IPower:=IPower+PValues[i]; END_FOR;
IPower:=IPower/10.0; (* Instant power (Kw) *) -
AutorePost
- Devi essere connesso per rispondere a questo topic.