FUNCTION "m7b_IMPULS_REAL" : VOID
TITLE =Integrator mit Impuls nach Sollwert für REAL
//aufsummieren von Sensorsignalen (z.B.) kW und erzeugen eines Impulses alle
//x kWh.
//Bei z.B. einem Stromzähler der als Analogsignal die aktuelle kW-Zahl liefert,
//am besten im Takt von 1sec und NoOfCounts 3600 aufaddieren. Als Summe werden
//dann kWh geliefert. Mit rSollImpuls (z.B. 100) dann alle 100kWh einen Impuls
//ausgeben.
//
//ENO : Zählimpuls: mit diesem Impuls den I/0-Wert 'rINTEGRAL' kopieren
// dieser enthält zu diesem Zeitpukt den summierten Wert. Beim
// nächsten TAKT wird dieser wieder gelöscht.
//
//DATUM: 09/2013
//
//AENDERUNGSVERMERKE:
//--------------------------------------------------------------------------------
//DATUM NAME AENDERUNG
//--------------------------------------------------------------------------------
//
//--------------------------------------------------------------------------------
//
//HINWEISE:
AUTHOR : 'SM'
FAMILY : Maagic7
VERSION : 0.1
VAR_INPUT
TAKT : BOOL ; //Taktgeber: (Flankenauswertung erfolgt im FC)
RESET : BOOL ; //RESET: Zähler rücksetzen
VALUE : REAL ; //Zu integrierender WERT
dNoOfCounts : DINT ; //Anzahl zu integrierender Werte
rSollImpuls : REAL ; //Sollwert: 1 Impuls alle 'rSollImpuls'; Sollwert bei dem 1 Impuls ausgelöst wird
END_VAR
VAR_IN_OUT
mem_rINTEGRAL : REAL ; //Integralwert
memByte : BYTE ; //statisches Hifls-Byte
END_VAR
VAR_TEMP
lb0_Impuls : BOOL ; //Lokaler Speicher:
lb1_HM_FP_TAKT : BOOL ; //Lokaler Speicher:
lb2 : BOOL ; //Lokaler Speicher:
lb3 : BOOL ; //Lokaler Speicher:
lb4 : BOOL ; //Lokaler Speicher
lb5 : BOOL ; //Lokaler Speicher
lb6 : BOOL ; //Lokaler Speicher
lb7 : BOOL ; //Lokaler Speicher
tmpTAKT : BOOL ;
END_VAR
BEGIN
NETWORK
TITLE =statisches Hilfsbyte in temporäre Bits
L #memByte;
T LB 0;
NOP 0;
NETWORK
TITLE =Impulsmerker wieder löschen, falls aktiv
U #lb0_Impuls;
R #lb0_Impuls;
NETWORK
TITLE =RESET
UN #RESET;
SPB ne4;
L 0.000000e+000;
T #mem_rINTEGRAL;
ne4: NOP 0;
NETWORK
TITLE =Zählen
//Bei Sollwert erreicht wird erst beim nächsten Takt der Integralwert
//zurückgesetzt, somit kann mit dem IMPULS der aktuelle Integralwert
//für die weitere Verarbeitung noch zur Verfügung gestellt werden.
//
U #TAKT;
FP #lb1_HM_FP_TAKT;
= #tmpTAKT;
ON #tmpTAKT;
O #RESET;
SPB ne5;
L #mem_rINTEGRAL;
L #rSollImpuls;
<R ;
SPB weit;
L #mem_rINTEGRAL; // Sollwert von Integral abziehen,
L #rSollImpuls; // wenn Sollwert erreicht war
-R ;
T #mem_rINTEGRAL;
weit: L #VALUE; // Zählen
L #dNoOfCounts;
DTR ;
/R ;
L #mem_rINTEGRAL;
+R ;
T #mem_rINTEGRAL;
L #rSollImpuls;
>=R ;
S #lb0_Impuls; // Impuls Sollwert erreicht
SPA ne5;
ne5: NOP 0;
NETWORK
TITLE =FC-ENO-Ausgang = Zählimpuls
U #lb0_Impuls;
SAVE ;
CLR ;
NETWORK
TITLE =temporäre Bits zurück in statisches Hilfsbyte
L LB 0;
T #memByte;
NOP 0;
END_FUNCTION
[ATTACH=CONFIG]40714._xfImport[/ATTACH]