求解Um_01的定義
#pragma CODE_SECTION(YC_trace,"UserFuncs")
void? YC_trace(void)? //調(diào)檔延遲
{
?int i;
?float a;
?float Um[10]={0};
?if(Flagtimer_yc==1)
? {
? ? for(i=0;i<10;i++)
{
? ?AD_64();
? ?Calc(5);
? ?if(u01_rms>U_Fault)
? ? ?return;
? ?Um[i] = u01_rms;
}
? ? ?bubble_sort(Um,10);? ? ? //冒泡法由小到大排列
for(i=3;i<8;i++)? ? ? ? ?//取其中5個值的和
{
? Um_02 = Um_02+Um[i];
}
a=fabs(Um_02-Um_01);
if(Flag_U0==0)
? ? ? {
? ? ? ? if((a/Um_01)>0.25&&Um_01>150&&Um_02>150&&(timer_trace>=360000))? //每個周波浮動10%,防止電壓浮動太頻繁,最多一小時跟蹤一次。
? ? ? ? ?{
? ? ? ? ? ?Flag_U0=1;
? ? ? ? ? ?Flag_U0_timer=timer_trace;
? ? ? ? ? }
? ? else
? ? Flagtimer_yc=0;
? ? ? ? Um_01 = Um_02;? //不論浮動是否超出閾值,都要更新Um_01
? ? ? ? Um_02=0;
? ?}
? else
? {
? ?if((a/Um_01)>0.25&&Um_01>150&&Um_02>150&&(timer_trace>=(Flag_U0_timer+180000)))? //若浮動后30分鐘又出現(xiàn)浮動繼續(xù)等30分鐘。
? ? ? ? ?{
? ? ? ? ? ?Flag_U0=1;
? ?Flag_U0_timer=timer_trace;
? ? ? ? ? }
if((a/Um_01)<0.25&&(timer_trace>=(Flag_U0_timer+180000)))//如果30分鐘后不浮動,則跟蹤
? {
? ? Flag_Trace=1;
Flag_U0=0;
? ?}
? ? Flagtimer_yc=0;
? ? ? ? Um_01 = Um_02;? //不論浮動是否超出閾值,都要更新Um_01
? ? ? ? Um_02=0;
? }
? ?}//if(Flagtimer_yc==1)
?}