Ufe-ens26-plan

Aus SpaceOnEarth

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