Ufe-ens26-plan
Aus SpaceOnEarth
Version vom 2. Januar 2021, 16:09 Uhr von h_>Axel (→TA1IntHandler Alle 20ms am Neg. Scheitelwert)
TA2IntHandler (Spannungsmessungsinterrupt)
Aufruf alle 16.666ms/20 = 20ms/24 = 0,83333ms
SpaSum=SpaSum+AD_Netz
Alle (CON1_60Hz_==1) ? 20 : 24 mal im TA2IntHandler
SPA SpaSum Kalibrieren und Spa20ms bilden
SpaSum= SpaSum*SFak_p/4096L + 2*SOff_p IF CON4_UFAST_32ms_==1 : Spa20ms=((UInt16)(SpaSum)+Spa20ms_last)/2 (mit Beschneidung auf [SmsMn_p*20-100,SmsMx_p*20+100] IF CON4_UFAST_32ms_==0 : Spa20ms=SpaSum (Begrenzung auf 0xFFFF)
SPA Schnellabschaltung
IF Spa20ms > SmsMx_p*20 : SPA_20msZuHoch_=1 SPA_Haltezeit=AUS_Haltezeit //ErZt_p oder KUnErZ_p VOL3_FastSpFehler_=1 IF Spa20ms < SmsMn_p*20 : SPA_20msZuNiedrig_=1 SPA_Haltezeit=AUS_Haltezeit //ErZt_p oder KUnErZ_p VOL3_FastSpFehler_=1 ELSE wenn nix von beiden: VOL3_FastSpFehler_=0
SPA 10 Minuten Mittelwert
spa_10min_sum=spa_10min_sum+Spa20ms spa_10min_cn=spa_10min_cn+1 IF SpMAz_p nicht 0 && spa_10min_cn >= SpMAz_p : Spa10MinRegCn=Spa10MinRegCn+1; IF (Spa10MinRegCn>=9) Spa10MinRegCn=0 Spa10MinReg[Spa10MinRegCn]= spa_10min_sum/SpMAz_p //in 9 Zellen Ringpuffer// spa_10min= Mittelwert der Spa10MinReg[0 bis 8] //Nun Fehlerauswertung wenn Puffer auch einmal gefüllt ist// IF spa_10min>spa_10min_grenz: //*_grenz wird durch Kodierschalter oder 20*S10mnO_p bestimmt// SPA_10mnZuHoch_=1; SPA_Haltezeit=5*ErZt_p+(SpMAz_p/6+1); IF spa_10min< 20*S10mnU_p: SPA_10mnZuKlein_=1 SPA_Haltezeit=5*ErZt_p
SPA 3 Sekunden Mittelwert
spa_3sec_sum=spa_3sec_sum+Spa20ms spa_3sec_cn=spa_3sec_cn+1 IF S3Anz_p nicht 0 && spa_3sec_cn >= S3Anz_p : Spa3secRegCn=Spa3secRegCn+1; IF (Spa3secRegCn>=9) Spa3secRegCn=0 Spa3secReg[Spa3secRegCn]= spa_3sec_sum/S3Anz_p //in 9 Zellen Ringpuffer// spa_3sec= Mittelwert der Spa3secReg[0 bis 8] //Nun Fehlerauswertung wenn Puffer auch einmal gefüllt ist// IF spa_3sec> 20*S3sO_p' : SPA_3secZuHoch_=1; SPA_Haltezeit=5*ErZt_p+(S3Anz_p/6+1); IF spa_3sec< 20*S3sU_p: SPA_3secZuKlein_=1 SPA_Haltezeit=5*ErZt_p
SPA (20 bis 1000)ms Mittelwert alle 20ms
IF CON4_spa_mit_delay_==1: //Auswertung nach Dauer eine Spannungsüberschreitung für Belgien
...
ELSE:
Pegelbegrenzen
IF SpaSum> SGzMx_p*20 : SpaSum= SGzMx_p*20
IF SpaSum< SGzMn_p*20 : SpaSum= SGzMn_p*20
In Ringpuffer der Größe SMiAz_p-1 einschreiben !!Max 50 Zuläßig!!
SpaRegCn++; if (SpaRegCn>=SMiAz_p-1){SpaRegCn=0;}
SpaReg[SpaRegCn]= SpaSum
Spannung=Mittelwert des Ringpuffers SpaReg[0 - (SMiAz_p-1)]
IF Spannung> SMx_p*20
SPA_Haltezeit=AUS_Haltezeit
IF (SPA_20msZuHoch_==0) SPA_ZuHoch_=1
VOL3_SpannungsFehler_=1
ELSEIF Spannung< SMnOf_p*20 && ENS_Status==ENS_REL_AUS :
SPA_Haltezeit=AUS_Haltezeit
IF (SPA_20msZuNiedrig_==0) SPA_ZuNiedrig_=1
VOL3_SpannungsFehler_=1
ELSEIF (Spannung< SMn_p*20 && spa_unter_notcheck_cn==0) :
SPA_Haltezeit=AUS_Haltezeit
IF (SPA_20msZuNiedrig_==0) SPA_ZuNiedrig_=1
VOL3_SpannungsFehler_=1
ELSE :
VOL3_SpannungsFehler_=0
Kurzabschaltung
Abfrage jede sekunde:
kurzunter_cn=kurzunter_cn+1
IF kurzunter_cn < KUnZ_p && KUnZ_p!=255 :
IF ENS_Status==ENS_REL_AUS
&& VOL3_FrequenzFehler_==0
&& VOL3_SpannungsFehler_==0
&& VOL3_FastSpFehler_==0 :
IF (SPA_Haltezeit>KUnErZ_p) : SPA_Haltezeit= KUnErZ_p
IF (FRQ_Haltezeit>KUnErZ_p) : FRQ_Haltezeit= KUnErZ_p
AUS_Haltezeit= KUnErZ_p
ELSE :
AUS_Haltezeit= ErZt_p*5
TA1IntHandler Alle 20ms am Pos. Scheitelwert
(((impedanz.c in TA1IntHandler mit VOL1_PosScheitel_=1)))
TA1IntHandler Alle 20ms am Neg. Scheitelwert
(((impedanz.c in TA1IntHandler mit VOL1_PosScheitel_=0)))
Alle 20ms in den Ringpuffer Schreiben (Größe ist PMiAz_p mit max 50)
PerRegCn++; if (PerRegCn>=PMiAz_p-1){PerRegCn=0;}
PerReg[PerRegCn]=TBSum;
Periode="Alle 20ms als Mittelwert des Ringpuffers"
Frequenzsprung
...dPSuAz_p...dPer... -> FRQ_dPerJump_...
Frequenzmessung
//if (CON1_p bit CON1_60Hz_==0) PerioSoll=10000 else PerioSoll=8333 //PeriodMinAn= PerioSoll-PAbErO_p*4 //PeriodMax= PerioSoll+PAbErU_p*4 //PeriodMinAus=PerioSoll-PAbOn_p ////#define PAbOn_DISABLE 255 //ca5mHz 51,27Hz ////#define PAbOn_NA 14 //ca5mHz 50,07Hz
IF (Periode<PeriodMinAus) && (ENS_Status==ENS_REL_AUS) : FRQ_Haltezeit=AUS_Haltezeit //siehe Kurzabschaltung// FRQ_ZuHochAus_=1 VOL3_FrequenzFehler_=1 ELSEIF (Periode>PeriodMax) : FRQ_Haltezeit=AUS_Haltezeit //siehe Kurzabschaltung// FRQ_ZuNiedrig_=1 VOL3_FrequenzFehler_=1 ELSEIF (Periode<PeriodMinAn) FRQ_Haltezeit=AUS_Haltezeit //siehe Kurzabschaltung// FRQ_ZuHoch_=1 VOL3_FrequenzFehler_=1 ELSE: VOL3_FrequenzFehler_=0