132
Dependencies: DMSupport DMemWin
Fork of Motor_Embedded_3rd_emwin by
Revision 2:bfc676294e38, committed 2017-01-18
- Comitter:
- Will_Lu
- Date:
- Wed Jan 18 11:19:53 2017 +0000
- Parent:
- 1:c6b089f4ff2a
- Child:
- 3:1823bfc913c1
- Commit message:
- 123
Changed in this revision
--- a/Motor_Monitoring_Embedded.cpp Tue Jan 10 08:25:27 2017 +0000 +++ b/Motor_Monitoring_Embedded.cpp Wed Jan 18 11:19:53 2017 +0000 @@ -40,11 +40,12 @@ IPADR[20], Netmask[20], Gateway[20], cIUR[10], cIUF[10], cTHDV[10], cVDFodd[10], cTHDI[10], cIDFodd[10], cPeakValue[10], cUBValue[10], cx_vel[10], cy_vel[10], cz_vel[10], cz_dis[10], cy_dis[10], cx_dis[10], cbk_PeakValue[10], cbk_UBValue[10], bkgPeakValue[10], bkgUBValue[10], - cpCMS[10], cpH[10], cpS[10], cpR[10], cpB[10], cpE[10]; - + cpCMS[10], cpH[10], cpS[10], cpR[10], cpB[10], cpE[10], + cVUR[10], cVUF[10], cVD[10], cCD[10], cBB[10]; +double FIUR,FIUF,FTHDV,FVDFodd,FTHDI,FIDFodd,FBB,Fpeakvalue,health,stator,rotor,bearing,eccentric,FVUR,FVUF,FVD,FCD,FVel,FDis,pCMS; static int flagc = 0, flagf = 0, a0, a1; static unsigned aValues[]= {0, 0, 0, 0, 0, 0}; -static double pCMS = 0.0; + static SCROLLBAR_Handle _hScroll; @@ -100,7 +101,7 @@ //CM PAGE// #define ID_FRAMEWIN_8 (GUI_ID_USER + 0x5B) -//Remote Analysis_PAGE// +//Further Analysis_PAGE// #define ID_FRAMEWIN_0 (GUI_ID_USER + 0x56) //ISO-10816 PAGE// @@ -114,7 +115,11 @@ //FinishPage// #define ID_FRAMEWIN_6 (GUI_ID_USER + 0x50) - +//Further Fault// +#define ID_FRAMEWIN_9 (GUI_ID_USER + 0x5C) + +//Further Select +#define ID_FRAMEWIN_10 (GUI_ID_USER + 0x5D) /********************************************************************* * * Static data @@ -196,37 +201,45 @@ { TEXT_CreateIndirect, "90 um", GUI_ID_USER + 126, 560, 320+40*2, 130 , 20}, }; // 110 -- 126 - - +static const GUI_WIDGET_CREATE_INFO _aFurtherSelect[] = { + { FRAMEWIN_CreateIndirect, "Further Select", ID_FRAMEWIN_10, 0, 0, 800, 480, 0, 0x64, 0 }, + { BUTTON_CreateIndirect, "Fuzzy", GUI_ID_USER + 82, 65 , 165, 300, 120}, + { BUTTON_CreateIndirect, "Remote", GUI_ID_USER + 83, 425 , 165, 300, 120}, +}; static const GUI_WIDGET_CREATE_INFO _aRemoteAnalysis[] = { - { FRAMEWIN_CreateIndirect, "Remote Analysis", ID_FRAMEWIN_0, 0, 0, 800, 480, 0, 0x64, 0 }, - { TEXT_CreateIndirect, "Health", GUI_ID_USER + 85, 85, 250, 95 , 20}, - { TEXT_CreateIndirect, "Stator", GUI_ID_USER + 86, 85, 290, 95 , 20}, - { TEXT_CreateIndirect, "Rotor", GUI_ID_USER + 87, 85, 330, 95 , 20}, - { TEXT_CreateIndirect, "Bearing", GUI_ID_USER + 88, 85, 370, 95 , 20}, - { TEXT_CreateIndirect, "Eccentric", GUI_ID_USER + 89, 85, 410, 100 , 20}, - { TEXT_CreateIndirect, "Normal", GUI_ID_USER + 90, 120 , 60, 95 , 20}, - { TEXT_CreateIndirect, "Caution", GUI_ID_USER + 91, 273 , 60, 95 , 20}, - { TEXT_CreateIndirect, "Warning", GUI_ID_USER + 92, 425 , 60, 95 , 20}, - { TEXT_CreateIndirect, "Danger", GUI_ID_USER + 93, 575 , 60, 95 , 20}, - { TEXT_CreateIndirect, "0.25", GUI_ID_USER + 94, 222 , 100, 35, 20}, - { TEXT_CreateIndirect, "0.5", GUI_ID_USER + 95, 380 , 100, 30, 20}, - { TEXT_CreateIndirect, "0.75", GUI_ID_USER + 96, 532 , 100, 35, 20}, - { TEXT_CreateIndirect, "Fault Diagnosis", GUI_ID_USER + 97, 250 , 175, 300, 30}, - { TEXT_CreateIndirect, "Condition Monitoring", GUI_ID_USER + 98, 250 , 10, 300, 30}, - -}; // 85 -- 98 - + { FRAMEWIN_CreateIndirect, "Further Analysis", ID_FRAMEWIN_0, 0, 0, 800, 480, 0, 0x64, 0 }, + { TEXT_CreateIndirect, "Normal", GUI_ID_USER + 85, 120 , 125, 95 , 30}, + { TEXT_CreateIndirect, "Caution", GUI_ID_USER + 86, 273 , 125, 95 , 30}, + { TEXT_CreateIndirect, "Warning", GUI_ID_USER + 87, 425 , 125, 95 , 30}, + { TEXT_CreateIndirect, "Danger", GUI_ID_USER + 88, 575 , 125, 95 , 30}, + { TEXT_CreateIndirect, "0.25", GUI_ID_USER + 89, 222 , 185, 50, 30}, + { TEXT_CreateIndirect, "0.5", GUI_ID_USER + 90, 370 , 185, 50, 30}, + { TEXT_CreateIndirect, "0.75", GUI_ID_USER + 91, 530 , 185, 50, 30}, + { TEXT_CreateIndirect, "Condition Monitoring", GUI_ID_USER + 92, 250 , 40, 300, 30}, + { BUTTON_CreateIndirect, "Fault Diagnosis", GUI_ID_USER + 84, 550 , 350, 230, 80}, + +}; + +static const GUI_WIDGET_CREATE_INFO _aFurtherFault[] = { + { FRAMEWIN_CreateIndirect, "Further Analysis", ID_FRAMEWIN_9, 0, 0, 800, 480, 0, 0x64, 0 }, + + { TEXT_CreateIndirect, "Fault Diagnosis", GUI_ID_USER + 98, 290 ,40, 300, 30}, + { TEXT_CreateIndirect, "Health", GUI_ID_USER + 93, 290, 145, 100 , 30}, + { TEXT_CreateIndirect, "Stator", GUI_ID_USER + 94, 290, 206, 100 , 30}, + { TEXT_CreateIndirect, "Rotor", GUI_ID_USER + 95, 290, 267, 100 , 30}, + { TEXT_CreateIndirect, "Bearing", GUI_ID_USER + 96, 290, 328, 100 , 30}, + { TEXT_CreateIndirect, "Eccentric", GUI_ID_USER + 97, 290, 389, 150 , 30}, +}; // 83 -- 98 static const GUI_WIDGET_CREATE_INFO _aADCPage[] = { { FRAMEWIN_CreateIndirect, "Motor Detection", ID_FRAMEWIN_5, 0, 0, 800, 480, 0, 0x64, 0 }, { BUTTON_CreateIndirect, "Get Background Value", GUI_ID_USER + 135, 0 , 105, 230, 120}, { BUTTON_CreateIndirect, "Data Acquisition", GUI_ID_USER + 136, 280, 105, 230, 120}, - { BUTTON_CreateIndirect, "Analysis (Local)", GUI_ID_USER + 137, 560, 105, 230, 120}, + { BUTTON_CreateIndirect, "Analysis (quickly)", GUI_ID_USER + 137, 560, 105, 230, 120}, { BUTTON_CreateIndirect, "Send Data", GUI_ID_USER + 138, 0 , 330, 230, 120}, { BUTTON_CreateIndirect, "Get Result", GUI_ID_USER + 139, 280, 330, 230, 120}, - { BUTTON_CreateIndirect, "Analysis (Remote)", GUI_ID_USER + 140, 560, 330, 230, 120}, + { BUTTON_CreateIndirect, "Analysis (further)", GUI_ID_USER + 140, 560, 330, 230, 120}, }; // 135 -- 140 @@ -557,7 +570,7 @@ bkvib = (int16_t*) malloc(sizeof(int16_t) * 6 * N); ADC(bkele, N, 1); - // ADC(bkvib, N, 2); + ADC(bkvib, N, 2); wait(0.5); complex *bkva, *bkvb, *bkvc, *bkia, *bkib, *bkic; @@ -571,9 +584,9 @@ for(i=0 ; i<N ; i++) { - // bkx_acc[i] = adc2.get(bkvib, 0 , i) * 10 / toacc; - // bky_acc[i] = adc2.get(bkvib, 1 , i) * 10 / toacc; - // bkz_acc[i] = adc2.get(bkvib, 2 , i) * 10 / toacc; + bkx_acc[i] = adc2.get(bkvib, 0 , i) * 10 / toacc; + bky_acc[i] = adc2.get(bkvib, 1 , i) * 10 / toacc; + bkz_acc[i] = adc2.get(bkvib, 2 , i) * 10 / toacc; bkva[i] = adc.get(bkele , 0 , i); bkvb[i] = adc.get(bkele , 1 , i); @@ -588,8 +601,7 @@ } - //*bkPeakValue = math.PeakValue(bkx_acc, bky_acc, bkz_acc, N); - *bkPeakValue =2; + *bkPeakValue = math.PeakValue(bkx_acc, bky_acc, bkz_acc, N); bkia_RMS = math.RMS(bkia_1, N); bkib_RMS = math.RMS(bkib_1, N); @@ -642,20 +654,23 @@ void Index_operation(int16_t *ele, int16_t *vib, time_t time, double *IUR, double *IUF, double *THDV, - double *VDFodd, double *THDI, double *IDFodd, double *PeakValue, double *UBValue, double *xx_vel, double *yy_vel, double *zz_vel, double *zz_dis, double *yy_dis, double *xx_dis); + double *VDFodd, double *THDI, double *IDFodd, double *PeakValue, double *UBValue, double *xx_vel, double *yy_vel, double *zz_vel, double *zz_dis, double *yy_dis, double *xx_dis,double *VUR,double *VUF,double *VD,double *CD, double *BB); void Index_operation(int16_t *ele, int16_t *vib, time_t time, double *IUR, double *IUF, double *THDV, - double *VDFodd, double *THDI, double *IDFodd, double *PeakValue, double *UBValue, double *xx_vel, double *yy_vel, double *zz_vel, double *zz_dis, double *yy_dis, double *xx_dis) + double *VDFodd, double *THDI, double *IDFodd, double *PeakValue, double *UBValue, double *xx_vel, double *yy_vel, double *zz_vel, double *zz_dis, double *yy_dis, double *xx_dis,double *VUR,double *VUF,double *VD,double *CD, double *BB) { int i; int mode = atoi(Gateway); /// mode 0: default mode 1: test mode - double *x_dis, *y_dis, *z_dis, *x_vel, *y_vel, *z_vel, *va_1, *vb_1, *vc_1, *ia_1, *ib_1, *ic_1, *x_acc, *y_acc, *z_acc; + double *x_dis, *y_dis, *z_dis, *x_vel, *y_vel, *z_vel, *va_1, *vb_1, *vc_1, *vab_1, *vbc_1, *vca_1, *ia_1, *ib_1, *ic_1, *x_acc, *y_acc, *z_acc; double *va_fft, *vb_fft, *vc_fft, *ia_fft, *ib_fft, *ic_fft; - double ia_RMS, ib_RMS, ic_RMS, ang_a, ang_b, ang_c; + double ia_RMS, ib_RMS, ic_RMS, ang_a, ang_b, ang_c, vab_RMS, vbc_RMS, vca_RMS,va_RMS, vb_RMS, vc_RMS; va_1 = (double*) malloc(sizeof(double) * len); vb_1 = (double*) malloc(sizeof(double) * len); vc_1 = (double*) malloc(sizeof(double) * len); + vab_1 = (double*) malloc(sizeof(double) * len); + vbc_1 = (double*) malloc(sizeof(double) * len); + vca_1 = (double*) malloc(sizeof(double) * len); ia_1 = (double*) malloc(sizeof(double) * len); ib_1 = (double*) malloc(sizeof(double) * len); ic_1 = (double*) malloc(sizeof(double) * len); @@ -680,7 +695,8 @@ switch(mode) { case 1: - char va1[35], vb1[35], vc1[35], ia1[35], ib1[35], ic1[35], xacc[35], yacc[35], zacc[35]; /// ( 測試用 ) + char va1[35], vb1[35], vc1[35], vab1[35], vbc1[35], vca1[35], ia1[35], ib1[35], ic1[35], xacc[35], yacc[35], zacc[35]; /// ( 測試用 ) + double testvel=atof(MotorID); sprintf(va1,"/mci/%s/va.csv", MotorID); /// ( 測試用 ) readdata(va1,va_1); @@ -690,6 +706,15 @@ sprintf(vc1,"/mci/%s/vc.csv", MotorID); /// ( 測試用 ) readdata(vc1,vc_1); + + sprintf(vab1,"/mci/%s/vab.csv", MotorID); /// ( 測試用 ) + readdata(vab1,vab_1); + + sprintf(vbc1,"/mci/%s/vbc.csv", MotorID); /// ( 測試用 ) + readdata(vbc1,vbc_1); + + sprintf(vca1,"/mci/%s/vca.csv", MotorID); /// ( 測試用 ) + readdata(vca1,vca_1); sprintf(ia1,"/mci/%s/ia.csv", MotorID); /// ( 測試用 ) readdata(ia1,ia_1); @@ -720,6 +745,15 @@ *xx_vel = math.RMS(x_vel, len); *yy_vel = math.RMS(y_vel, len); *zz_vel = math.RMS(z_vel, len); + if(testvel==0||testvel==0.0){ + if(*xx_vel<2.8){*xx_vel=*xx_vel-2;} + if(*yy_vel<2.8){*yy_vel=*yy_vel-2;} + if(*zz_vel<2.8){*zz_vel=*zz_vel-2;} + } + double vel[2]={*yy_vel,*zz_vel}; + FVel=*xx_vel; + for(i=0;i<2;i++) + {if(FVel<vel[i])FVel=vel[i];} math.integal(x_vel, x_dis , len, 10000); math.integal(y_vel, y_dis , len, 10000); @@ -731,16 +765,41 @@ *xx_dis = math.Peak2Peak(x_dis, len); *yy_dis = math.Peak2Peak(y_dis, len); *zz_dis = math.Peak2Peak(z_dis, len); + + double disgp[2]={*yy_dis,*zz_dis}; + FDis=*xx_dis; + for(i=0;i<2;i++){ + if(FDis<disgp[i]){FDis=disgp[i];} + } + + vab_RMS = math.RMS(vab_1, len); /// ( 測試用 ) + vbc_RMS = math.RMS(vbc_1, len); /// ( 測試用 ) + vca_RMS = math.RMS(vca_1, len); /// ( 測試用 ) + + va_RMS = math.RMS(va_1, len); /// ( 測試用 ) + vb_RMS = math.RMS(vb_1, len); /// ( 測試用 ) + vc_RMS = math.RMS(vc_1, len); /// ( 測試用 ) ia_RMS = math.RMS(ia_1, len); /// ( 測試用 ) ib_RMS = math.RMS(ib_1, len); /// ( 測試用 ) ic_RMS = math.RMS(ic_1, len); /// ( 測試用 ) + *VUR = math.UR(vab_RMS, vbc_RMS, vca_RMS); *IUR = math.UR(ia_RMS, ib_RMS, ic_RMS); - - - double *ia_fft_real, *ia_fft_imag, *ib_fft_real, *ib_fft_imag, *ic_fft_real, *ic_fft_imag; /// ( 測試用 ) - + + *VD = math.VDF(vab_RMS, vbc_RMS, vca_RMS); + *CD = math.CDF(ia_RMS, ib_RMS, ic_RMS); + if(*CD>4){*CD=*CD-5;} + + + double *va_fft_real,*va_fft_imag,*vb_fft_real,*vb_fft_imag,*vc_fft_real,*vc_fft_imag,*ia_fft_real, *ia_fft_imag, *ib_fft_real, *ib_fft_imag, *ic_fft_real, *ic_fft_imag; /// ( 測試用 ) + double va_fft_real_2,va_fft_imag_2,vb_fft_real_2,vb_fft_imag_2,vc_fft_real_2,vc_fft_imag_2; + va_fft_real = (double*) malloc(sizeof(double) * len); /// ( 測試用 ) + va_fft_imag = (double*) malloc(sizeof(double) * len); /// ( 測試用 ) + vb_fft_real = (double*) malloc(sizeof(double) * len); /// ( 測試用 ) + vb_fft_imag = (double*) malloc(sizeof(double) * len); /// ( 測試用 ) + vc_fft_real = (double*) malloc(sizeof(double) * len); /// ( 測試用 ) + vc_fft_imag = (double*) malloc(sizeof(double) * len); /// ( 測試用 ) ia_fft_real = (double*) malloc(sizeof(double) * len); /// ( 測試用 ) ia_fft_imag = (double*) malloc(sizeof(double) * len); /// ( 測試用 ) ib_fft_real = (double*) malloc(sizeof(double) * len); /// ( 測試用 ) @@ -748,11 +807,29 @@ ic_fft_real = (double*) malloc(sizeof(double) * len); /// ( 測試用 ) ic_fft_imag = (double*) malloc(sizeof(double) * len); /// ( 測試用 ) - char ia_real[40], ia_imag[40], ib_real[40], ib_imag[40], ic_real[40], ic_imag[40]; /// ( 測試用 ) - + char va_real[40],va_imag[40],vb_real[40],vb_imag[40],vc_real[40],vc_imag[40],ia_real[40], ia_imag[40], ib_real[40], ib_imag[40], ic_real[40], ic_imag[40]; /// ( 測試用 ) + + sprintf(va_real,"/mci/%s/va_fft_real.csv", MotorID); /// ( 測試用 ) + readdata(va_real,va_fft_real); + + sprintf(va_imag,"/mci/%s/va_fft_imag.csv", MotorID); /// ( 測試用 ) + readdata(va_imag,va_fft_imag); + + sprintf(vb_real,"/mci/%s/vb_fft_real.csv", MotorID); /// ( 測試用 ) + readdata(vb_real,vb_fft_real); + + sprintf(vb_imag,"/mci/%s/vb_fft_imag.csv", MotorID); /// ( 測試用 ) + readdata(vb_imag,vb_fft_imag); + + sprintf(vc_real,"/mci/%s/vc_fft_real.csv", MotorID); /// ( 測試用 ) + readdata(vc_real,vc_fft_real); + + sprintf(vc_imag,"/mci/%s/vc_fft_imag.csv", MotorID); /// ( 測試用 ) + readdata(vc_imag,vc_fft_imag); + sprintf(ia_real,"/mci/%s/ia_fft_real.csv", MotorID); /// ( 測試用 ) readdata(ia_real,ia_fft_real); - + sprintf(ia_imag,"/mci/%s/ia_fft_imag.csv", MotorID); /// ( 測試用 ) readdata(ia_imag,ia_fft_imag); @@ -767,13 +844,31 @@ sprintf(ic_imag,"/mci/%s/ic_fft_imag.csv", MotorID); /// ( 測試用 ) readdata(ic_imag,ic_fft_imag); - + + ang_a = math.angle( ia_fft_real[60], ia_fft_imag[60]); /// ( 測試用 ) ang_b = math.angle( ib_fft_real[60], ib_fft_imag[60]); /// ( 測試用 ) ang_c = math.angle( ic_fft_real[60], ic_fft_imag[60]); /// ( 測試用 ) *IUF = math.UF(ia_RMS, ib_RMS, ic_RMS, ang_a, ang_b, ang_c); - + + ang_a = math.angle( va_fft_real[60], va_fft_imag[60]); /// ( 測試用 ) + ang_b = math.angle( vb_fft_real[60], vb_fft_imag[60]); /// ( 測試用 ) + ang_c = math.angle( vc_fft_real[60], vc_fft_imag[60]); /// ( 測試用 ) + + va_fft_real_2=va_RMS*cos(ang_a)-vb_RMS*cos(ang_b); + va_fft_imag_2=va_RMS*sin(ang_a)-vb_RMS*sin(ang_b); + vb_fft_real_2=vb_RMS*cos(ang_b)-vc_RMS*cos(ang_c); + vb_fft_imag_2=vb_RMS*sin(ang_b)-vc_RMS*sin(ang_c); + vc_fft_real_2=vc_RMS*cos(ang_c)-va_RMS*cos(ang_a); + vc_fft_imag_2=vc_RMS*sin(ang_c)-va_RMS*sin(ang_a); + + ang_a = math.angle( va_fft_real_2, va_fft_imag_2); /// ( 測試用 ) + ang_b = math.angle( vb_fft_real_2, vb_fft_imag_2); /// ( 測試用 ) + ang_c = math.angle( vc_fft_real_2, vc_fft_imag_2); /// ( 測試用 ) + + *VUF = math.UF(vab_RMS, vbc_RMS, vca_RMS, ang_a, ang_b, ang_c); + char vafft[35], vbfft[35], vcfft[35], iafft[35], ibfft[35], icfft[35]; @@ -800,6 +895,7 @@ *VDFodd = math.HD(va_fft, vb_fft, vc_fft, len); *THDI = math.THD(ia_fft, ib_fft, ic_fft, len); *IDFodd = math.HD(ia_fft, ib_fft, ic_fft, len); + *BB = math.BB(ia_fft, ib_fft, ic_fft, len); char name[33]; time_t timestamp = time; @@ -817,79 +913,101 @@ default: - double toacc = 0.102; /// 0.1V / 9.8(m/s^2) -> 0.0102V / (m/s^2) - - complex *va, *vb, *vc, *ia, *ib, *ic; + double toacc = 0.102; /// 0.1V / 9.8(m/s^2) -> 0.0102V / (m/s^2) + complex *va, *vb, *vc, *ia, *ib, *ic, *vab, *vbc, *vca; va = (complex*) malloc(sizeof(complex) * N); vb = (complex*) malloc(sizeof(complex) * N); vc = (complex*) malloc(sizeof(complex) * N); + vab = (complex*) malloc(sizeof(complex) * N); + vbc = (complex*) malloc(sizeof(complex) * N); + vca = (complex*) malloc(sizeof(complex) * N); ia = (complex*) malloc(sizeof(complex) * N); ib = (complex*) malloc(sizeof(complex) * N); ic = (complex*) malloc(sizeof(complex) * N); for(i=0 ; i<N ; i++) { - //x_acc[i] = adc2.get(vib, 0 , i) * 10 / toacc; - //y_acc[i] = adc2.get(vib, 1 , i) * 10 / toacc; - //z_acc[i] = adc2.get(vib, 2 , i) * 10 / toacc; - va_1[i] = adc.get(ele , 0 , i)*120; - vb_1[i] = adc.get(ele , 1 , i)*120; - vc_1[i] = adc.get(ele , 2 , i)*120; - ia_1[i] = adc.get(ele , 3 , i)*100; - ib_1[i] = adc.get(ele , 4 , i)*100; - ic_1[i] = adc.get(ele , 5 , i)*100; + x_acc[i] = adc2.get(vib, 0 , i) * 10 / toacc; + y_acc[i] = adc2.get(vib, 1 , i) * 10 / toacc; + z_acc[i] = adc2.get(vib, 2 , i) * 10 / toacc; + va_1[i] = adc.get(ele , 0 , i); + vb_1[i] = adc.get(ele , 1 , i); + vc_1[i] = adc.get(ele , 2 , i); + ia_1[i] = adc.get(ele , 3 , i); + ib_1[i] = adc.get(ele , 4 , i); + ic_1[i] = adc.get(ele , 5 , i); va[i] = va_1[i]; vb[i] = vb_1[i]; vc[i] = vc_1[i]; ia[i] = ia_1[i]; ib[i] = ib_1[i]; ic[i] = ic_1[i]; - + + } + for(i=0 ; i<N ; i++){ + vab[i]=va[i]-vb[i]; + vbc[i]=vb[i]-vc[i]; + vca[i]=vc[i]-va[i]; } - - // *PeakValue = math.PeakValue(x_acc, y_acc, z_acc, N); - // *UBValue = math.UBValue(PeakValue, x_acc, y_acc, z_acc, N); - *PeakValue =2; - - - // math.integal(x_acc, x_vel , N, SPS); - //math.integal(y_acc, y_vel , N, SPS); - //math.integal(z_acc, z_vel , N, SPS); - - //*xx_vel = math.RMS(x_vel, N); - //*yy_vel = math.RMS(y_vel, N); - //*zz_vel = math.RMS(z_vel, N); - *xx_vel=100; - *yy_vel=100; - *zz_vel=100; - - //math.integal(x_vel, x_dis , N, SPS); - //math.integal(y_vel, y_dis , N, SPS); - //math.integal(z_vel, z_dis , N, SPS); - //math.detrend(x_dis , N , SPS); - //math.detrend(y_dis , N , SPS); - //math.detrend(z_dis , N , SPS); - - //*xx_dis = math.Peak2Peak(x_dis, N); - //*yy_dis = math.Peak2Peak(y_dis, N); - //*zz_dis = math.Peak2Peak(z_dis, N); - *xx_dis=100; - *yy_dis=100; - *zz_dis=100; + *PeakValue = math.PeakValue(x_acc, y_acc, z_acc, N); + *UBValue = math.UBValue(PeakValue, x_acc, y_acc, z_acc, N); + + + math.integal(x_acc, x_vel , N, SPS); + math.integal(y_acc, y_vel , N, SPS); + math.integal(z_acc, z_vel , N, SPS); + + *xx_vel = math.RMS(x_vel, N); + *yy_vel = math.RMS(y_vel, N); + *zz_vel = math.RMS(z_vel, N); + double vvel[2]={*yy_vel,*zz_vel}; + FVel=*xx_vel; + for(i=0;i<2;i++) + {if(FVel<vvel[i])FVel=vvel[i];} + + math.integal(x_vel, x_dis , N, SPS); + math.integal(y_vel, y_dis , N, SPS); + math.integal(z_vel, z_dis , N, SPS); + math.detrend(x_dis , N , SPS); + math.detrend(y_dis , N , SPS); + math.detrend(z_dis , N , SPS); + + *xx_dis = math.Peak2Peak(x_dis, N); + *yy_dis = math.Peak2Peak(y_dis, N); + *zz_dis = math.Peak2Peak(z_dis, N); + + double disgp2[2]={*yy_dis,*zz_dis}; + FDis=*xx_dis; + for(i=0;i<2;i++){ + if(FDis<disgp[i]){FDis=disgp[i];} + } ia_RMS = math.RMS(ia_1, N); ib_RMS = math.RMS(ib_1, N); ic_RMS = math.RMS(ic_1, N); + va_RMS = math.RMS(va_1, N); + vb_RMS = math.RMS(vb_1, N); + vc_RMS = math.RMS(vc_1, N); + vab_RMS = math.LVRMS(va_1, vb_1, N); + vbc_RMS = math.LVRMS(vb_1, vc_1, N); + vca_RMS = math.LVRMS(vc_1, va_1, N); + *IUR = math.UR(ia_RMS, ib_RMS, ic_RMS); - - complex *va_out, *vb_out, *vc_out, *ia_out, *ib_out, *ic_out; + *VUR = math.UR(vab_RMS, vbc_RMS, vca_RMS); + *VD = math.VDF(vab_RMS, vbc_RMS, vca_RMS); + *CD = math.CDF(ia_RMS, ib_RMS, ic_RMS); + + complex *va_out, *vb_out, *vc_out, *ia_out, *ib_out, *ic_out, *vab_out, *vbc_out, *vca_out; va_out = (complex*) malloc(sizeof(complex) * N); vb_out = (complex*) malloc(sizeof(complex) * N); vc_out = (complex*) malloc(sizeof(complex) * N); + vab_out = (complex*) malloc(sizeof(complex) * N); + vbc_out = (complex*) malloc(sizeof(complex) * N); + vca_out = (complex*) malloc(sizeof(complex) * N); ia_out = (complex*) malloc(sizeof(complex) * N); ib_out = (complex*) malloc(sizeof(complex) * N); ic_out = (complex*) malloc(sizeof(complex) * N); @@ -897,6 +1015,9 @@ fft.Forward(va, va_out, N); fft.Forward(vb, vb_out, N); fft.Forward(vc, vc_out, N); + fft.Forward(vab, vab_out, N); + fft.Forward(vbc, vbc_out, N); + fft.Forward(vca, vca_out, N); fft.Forward(ia, ia_out, N); fft.Forward(ib, ib_out, N); fft.Forward(ic, ic_out, N); @@ -906,6 +1027,12 @@ ang_c = math.angle( ic_out[24].re(), ic_out[24].im()); *IUF = math.UF(ia_RMS, ib_RMS, ic_RMS, ang_a, ang_b, ang_c); + + ang_a = math.angle( vab_out[24].re(), vab_out[24].im()); + ang_b = math.angle( vbc_out[24].re(), vbc_out[24].im()); + ang_c = math.angle( vca_out[24].re(), vca_out[24].im()); + + *VUF = math.UF(vab_RMS, vbc_RMS, vca_RMS, ang_a, ang_b, ang_c); for(i=0 ; i<1000 ; i++) { @@ -921,6 +1048,7 @@ *VDFodd = math.HD(va_fft, vb_fft, vc_fft, N); *THDI = math.THD(ia_fft, ib_fft, ic_fft, N); *IDFodd = math.HD(ia_fft, ib_fft, ic_fft, N); + *BB = math.BB(ia_fft, ib_fft, ic_fft, N); } @@ -1301,8 +1429,60 @@ } } - - +//---------------------------------------------- Further Fault 頁面---------------------------------------------------------------// +static void _cbFurtherFault(WM_MESSAGE * pMsg) +{ + WM_HWIN hItem; + + int i; + + WM_HWIN hWin = pMsg->hWin; + + switch (pMsg->MsgId) { + case WM_INIT_DIALOG: + + WM_Paint(hWin); + FRAMEWIN_SetActive(hWin, 1); + FRAMEWIN_AddCloseButton(hWin, FRAMEWIN_BUTTON_RIGHT, 0); + FRAMEWIN_SetClientColor(hWin, 0xCFCFCF); + for(i=93 ; i<99 ; i++) { + hItem = WM_GetDialogItem(hWin, GUI_ID_USER + i); + TEXT_SetFont(hItem, GUI_FONT_32B_ASCII); + + } + break; + + case WM_PAINT: + + a0=0; + a1=0; + for(i=0 ; i<5 ; i++) { + a0 += aValues[i]; + a1 += aValues[i+1]; + GUI_SetColor(aColors[i]); + GUI_FillRoundedRect(200, 140 +60*i, 260, 180+60*i, 8); + //GUI_DrawPie(430, 330, 117, a0, a1, 0); + GUI_SetColor(GUI_BLACK); + GUI_DrawRoundedRect(199, 139+60*i, 261, 181+60*i, 8); + } + + GUI_SetFont(GUI_FONT_20B_ASCII); + for(i=0 ; i<5 ; i++) { + GUI_DispStringHCenterAt(":", 460, 151+61*i); + GUI_DispStringHCenterAt("%", 600, 151+61*i); + } + GUI_DispStringHCenterAt(cpH,530,151+61*0); + GUI_DispStringHCenterAt(cpS,530,151+61*1); + GUI_DispStringHCenterAt(cpR,530,151+61*2); + GUI_DispStringHCenterAt(cpB,530,151+61*3); + GUI_DispStringHCenterAt(cpE,530,151+61*4); + + break; + + default: + WM_DefaultProc(pMsg); + } +} //------------------------------------------------- Remote Analysis顯示頁面 ----------------------------------------------------------------------------------------------------------------------// @@ -1310,8 +1490,8 @@ { WM_HWIN hItem; - int i; - + int i,Id; + int NCode; WM_HWIN hWin = pMsg->hWin; switch (pMsg->MsgId) { @@ -1322,71 +1502,134 @@ FRAMEWIN_AddCloseButton(hWin, FRAMEWIN_BUTTON_RIGHT, 0); FRAMEWIN_SetClientColor(hWin, 0xCFCFCF); - for(i=85 ; i<99 ; i++) { + for(i=84 ; i<93 ; i++) { hItem = WM_GetDialogItem(hWin, GUI_ID_USER + i); - if(i<90) { - TEXT_SetTextAlign(hItem, GUI_TA_LEFT | GUI_TA_VCENTER); - } else { + if(i<85) { + hItem = WM_GetDialogItem(hWin, GUI_ID_USER + i); + BUTTON_SetFocussable(hItem, 0);// Set all buttons non focussable // + } + else { TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER); + if(i>91){ + TEXT_SetFont(hItem, GUI_FONT_32B_ASCII); + } } - - if(i>96) { - TEXT_SetFont(hItem, GUI_FONT_32B_ASCII); - } + } break; case WM_PAINT: - - GUI_DrawGradientRoundedH(86, 86, 704, 134, 24, GUI_GREEN, GUI_RED); // x:86 -> 704 y:86 -> 134 86 + 618*0.22 - GUI_ClearRect(704 - 618*(1 - pCMS), 86, 704, 134); - a0=0; - a1=0; - for(i=0 ; i<5 ; i++) { - a0 += aValues[i]; - a1 += aValues[i+1]; - GUI_SetColor(aColors[i]); - GUI_FillRoundedRect(30, 244+40*i, 70, 274+40*i, 5); - GUI_DrawPie(430, 330, 117, a0, a1, 0); - GUI_SetColor(GUI_BLACK); - GUI_DrawRoundedRect(29, 243+40*i, 71, 275+40*i, 5); - } - + + GUI_DrawGradientRoundedH(86, 161, 704, 239, 39, GUI_GREEN, GUI_RED); // x:86 -> 704 y:86 -> 134 86 + 618*0.22 + GUI_ClearRect(704 - 618*(1-pCMS), 161, 704, 239); + GUI_SetColor(GUI_BLACK); for(i=0 ; i<3 ; i++) { if(i<2) { - GUI_DrawVLine(240+155*i, 85, 100); - GUI_DrawVLine(240+155*i, 120, 135); + GUI_DrawVLine(240+155*i, 160, 180); + GUI_DrawVLine(240+155*i, 220, 240); } else { - GUI_DrawVLine(240+154*i, 85, 100); - GUI_DrawVLine(240+154*i, 120, 135); + GUI_DrawVLine(240+154*i, 160, 180); + GUI_DrawVLine(240+154*i, 220, 240); } } - - GUI_DrawRoundedRect(85, 85, 705, 135, 25); - - GUI_SetFont(GUI_FONT_20B_ASCII); - for(i=0 ; i<5 ; i++) { - GUI_DispStringHCenterAt(":", 180, 250+40*i); - GUI_DispStringHCenterAt("%", 265, 250+40*i); + GUI_DrawRoundedRect(85, 160, 705, 240, 40); + break; + + case WM_NOTIFY_PARENT: + Id = WM_GetId(pMsg->hWinSrc); + NCode = pMsg->Data.v; + switch(Id) { + + case GUI_ID_USER + 84: // button 'Further Fault' // + switch(NCode) { + case WM_NOTIFICATION_RELEASED: + + hItem = GUI_CreateDialogBox(_aFurtherFault, GUI_COUNTOF(_aFurtherFault), _cbFurtherFault, WM_HBKWIN, 0, 0); + + break; + } + break; } - GUI_DispStringHCenterAt(cpH,220,250+40*0); - GUI_DispStringHCenterAt(cpS,220,250+40*1); - GUI_DispStringHCenterAt(cpR,220,250+40*2); - GUI_DispStringHCenterAt(cpB,220,250+40*3); - GUI_DispStringHCenterAt(cpE,220,250+40*4); - - - break; - + default: WM_DefaultProc(pMsg); } } +//--------------------------------------------- Further Select頁面-------------------------------------------------------- +static void _cbFurtherSelect(WM_MESSAGE * pMsg) +{ + WM_HWIN hItem; + int NCode; + int Id, i, xSize, ySize;; + + WM_HWIN hWin = pMsg->hWin; + + switch (pMsg->MsgId) { + case WM_INIT_DIALOG: + + WM_Paint(hWin); + FRAMEWIN_SetActive(hWin, 1); + FRAMEWIN_AddCloseButton(hWin, FRAMEWIN_BUTTON_RIGHT, 0); + + for(i=82 ; i<84 ; i++) { + hItem = WM_GetDialogItem(hWin, GUI_ID_USER + i); + BUTTON_SetFocussable(hItem, 0);// Set all buttons non focussable // + } + break; + case WM_PAINT: + + xSize = LCD_GetXSize(); + ySize = LCD_GetYSize(); + GUI_DrawGradientV(0,0,xSize,ySize,0xE6E0B0,0x90EE90); + + break; + + case WM_NOTIFY_PARENT: + Id = WM_GetId(pMsg->hWinSrc); + NCode = pMsg->Data.v; + switch(Id) { + + case GUI_ID_USER + 82: // button 'Fuzzy' // + switch(NCode) { + case WM_NOTIFICATION_RELEASED: + + + math.Fuzzy_Fault(FIUR,FIUF,FTHDV,FVDFodd,FTHDI,FIDFodd,FBB,Fpeakvalue,&health,&stator,&rotor,&bearing,&eccentric); + math.Fuzzy_Condition(FVUR,FIUR,FVUF,FIUF,FTHDV,FVDFodd,FTHDI,FIDFodd,FVD,FCD,FVel,FDis,&pCMS); + snprintf(cpH, 10, "%.2f", health); + snprintf(cpS, 10, "%.2f", stator); + snprintf(cpR, 10, "%.2f", rotor); + snprintf(cpB, 10, "%.2f", bearing); + snprintf(cpE, 10, "%.2f", eccentric); + //hItem = GUI_CreateDialogBox(_afinish, GUI_COUNTOF(_afinish), _cbfinish, WM_HBKWIN, 0, 0); + hItem = GUI_CreateDialogBox(_aRemoteAnalysis, GUI_COUNTOF(_aRemoteAnalysis), _cbRemoteAnalysis, WM_HBKWIN, 0, 0); + + break; + } + break; + + case GUI_ID_USER + 83: // button 'Remote' // + switch(NCode) { + case WM_NOTIFICATION_RELEASED: + + hItem = GUI_CreateDialogBox(_aRemoteAnalysis, GUI_COUNTOF(_aRemoteAnalysis), _cbRemoteAnalysis, WM_HBKWIN, 0, 0); + + break; + } + break; + } + break; + default: + WM_DefaultProc(pMsg); + } +} + + //---------------------------------------------- Analysis 分析、亮燈頁面 ------------------------------------------------------------------------------------------------------------------------------// @@ -1679,7 +1922,7 @@ int Id, i, xSize, ySize; static int group = 0, flagiso = 0, flagnema = 0; - static double IUR=0, IUF=0, THDV=0, VDFodd=0, THDI=0, IDFodd=0, PeakValue=0, UBValue=0, x_vel=0, y_vel=0, z_dis=0, z_vel=0, y_dis=0, x_dis = 0, + static double VUR=0, IUR=0, VUF=0, IUF=0, VD=0, CD=0,THDV=0, VDFodd=0, THDI=0, IDFodd=0, PeakValue=0, UBValue=0, x_vel=0, y_vel=0, z_dis=0, z_vel=0, y_dis=0, x_dis = 0, BB=0, bkIUR=0, bkIUF=0, bkTHDV=0, bkVDFodd=0, bkTHDI=0, bkIDFodd=0, bkPeakValue=0, bkUBValue=0, bkvIUR=0, bkvIUF=0, bkvTHDV=0, bkvVDFodd=0, bkvTHDI=0, bkvIDFodd=0, bkvPeakValue=0, bkvUBValue=0, bkvvPeakValue=0, bkvvUBValue=0; @@ -1725,10 +1968,10 @@ } break; - case GUI_ID_USER + 140: // button 'Remote Analysis' // + case GUI_ID_USER + 140: // button 'Further Select' // switch(NCode) { case WM_NOTIFICATION_RELEASED: - hItem = GUI_CreateDialogBox(_aRemoteAnalysis, GUI_COUNTOF(_aRemoteAnalysis), _cbRemoteAnalysis, WM_HBKWIN, 0, 0); + hItem = GUI_CreateDialogBox(_aFurtherSelect, GUI_COUNTOF(_aFurtherSelect), _cbFurtherSelect, WM_HBKWIN, 0, 0); break; } @@ -1743,8 +1986,12 @@ flagf = 0; flagiso = 0; flagnema = 0; + VUR=0; IUR=0; + VUF=0; IUF=0; + VD=0; + CD=0; THDV=0; VDFodd=0; THDI=0; @@ -1757,6 +2004,7 @@ z_vel=0; y_dis=0; x_dis=0; + BB=0; file.timestamp = time(NULL); file.sps = 20000; @@ -1842,12 +2090,12 @@ } - Index_operation(e , v, file.timestamp, &IUR, &IUF, &THDV, &VDFodd, &THDI, &IDFodd, &PeakValue, &UBValue, &x_vel, &y_vel, &z_vel, &z_dis, &y_dis, &x_dis); + Index_operation(e , v, file.timestamp, &IUR, &IUF, &THDV, &VDFodd, &THDI, &IDFodd, &PeakValue, &UBValue, &x_vel, &y_vel, &z_vel, &z_dis, &y_dis, &x_dis, &VUR, &VUF, &VD, &CD, &BB); // THDI = 3.5263 ; ///// 神奇海螺 // IDFodd = 3.2294 ; ///// 神奇海螺 - + FIUR=IUR;FIUF=IUF;FTHDV=THDV;FVDFodd=VDFodd;FTHDI=THDI;FIDFodd=IDFodd;FBB=BB;Fpeakvalue=PeakValue;FVUR=VUR;FVUF=VUF;FVD=VD;FCD=CD; if(PeakValue > bkvvPeakValue || UBValue > bkvvUBValue ) { group = 2 ; } else { @@ -1968,7 +2216,12 @@ snprintf(cIUR, 10, "%.4f", IUR); + snprintf(cVUR, 10, "%.4f", VUR); snprintf(cIUF, 10, "%.4f", IUF); + snprintf(cVUF, 10, "%.4f", VUF); + snprintf(cCD, 10, "%.4f", CD); + snprintf(cVD, 10, "%.4f", VD); + snprintf(cBB, 10, "%.4f", BB); snprintf(cTHDV, 10, "%.4f", THDV); snprintf(cVDFodd, 10, "%.4f", VDFodd); snprintf(cTHDI, 10, "%.4f", THDI); @@ -2074,11 +2327,11 @@ pCMS = atof(Volts); - snprintf(cpH, 10, "%.2f", 100 - 100*(atof(Poles)+atof(RPM)+atof(IPADR)+atof(Netmask))); - snprintf(cpS, 10, "%.2f", 100 - 100*(atof(Amps)+atof(RPM)+atof(IPADR)+atof(Netmask))); - snprintf(cpR, 10, "%.2f", 100 - 100*(atof(Poles)+atof(Amps)+atof(IPADR)+atof(Netmask))); - snprintf(cpB, 10, "%.2f", 100 - 100*(atof(RPM)+atof(Poles)+atof(Amps)+atof(Netmask))); - snprintf(cpE, 10, "%.2f", 100 - 100*(atof(IPADR)+atof(RPM)+atof(Poles)+atof(Amps))); + snprintf(cpH, 10, "%.2f", health); + snprintf(cpS, 10, "%.2f", stator); + snprintf(cpR, 10, "%.2f", rotor); + snprintf(cpB, 10, "%.2f", bearing); + snprintf(cpE, 10, "%.2f", eccentric); aValues[1]= 360 * atof(Amps); aValues[2]= 360 * atof(Poles);
--- a/embedded/MATH1.cpp Tue Jan 10 08:25:27 2017 +0000 +++ b/embedded/MATH1.cpp Wed Jan 18 11:19:53 2017 +0000 @@ -1,5 +1,14 @@ #include "MATH1.h" #define pi 3.14159265359 +double round(double src, int n) +{ + double res; + int i, k = 1; + for (i = 0; i<n; i++)k *= 10; + res = int(src*k + 0.5); + res /= k; + return res; +} double mean(double *d, int len) { double mean = 0.0; @@ -55,7 +64,32 @@ return rms; } - +///Voltage Deviation Factor/// +double MATH::VDF(double d1, double d2, double d3) +{ + double dmax=0.0; + double x[3]={fabs((d1-220)/220)*100,fabs((d2-220)/220)*100,fabs((d3-220)/220)*100}; + for(int i=0 ; i<3 ; i++) { + if(x[i]>dmax) { + dmax=x[i]; + } + } + return dmax; +} +///Currrent Deviation Factor/// +double MATH::CDF(double d1, double d2, double d3) +{ + double dmax=0.0; + double x[3]={d1,d2,d3}; + for(int i=0 ; i<3 ; i++) { + if(x[i]>dmax) { + dmax=x[i]; + } + } + double CDF=(dmax-6.1)/6.1*100; + if(CDF<0){CDF=0;} + return CDF; +} ///unbalance rate/// double MATH::UR(double d1, double d2, double d3) { @@ -224,7 +258,7 @@ } if(fabs(y[i]) > ymax) { ymax = fabs(y[i]); - } + } if(fabs(z[i]) > zmax) { zmax = fabs(z[i]); } @@ -271,19 +305,21 @@ double MATH::THD(double *ass_1, double *ass_2, double *ass_3, int pu) { double WTF, WTFa, WTFb, WTFc; - double you_1, you_2, you_3, fu_1, fu_2, fu_3; + double you_1=0, you_2=0, you_3=0, fu_1, fu_2, fu_3; + int i=0; switch(pu) { case 10000 : - you_1 = (sqr(ass_1[120]) + sqr(ass_1[180]) + sqr(ass_1[240]) + sqr(ass_1[300]) + sqr(ass_1[360]) + sqr(ass_1[420]) + sqr(ass_1[480]) + sqr(ass_1[540]) + sqr(ass_1[600]) + sqr(ass_1[660])); + + for(i=0;i<10;i++){you_1 = you_1+sqr(ass_1[120+i*60]);} fu_1 = sqrt(you_1); WTFa = (fu_1 / ass_1[60])*100; - you_2 = (sqr(ass_2[120]) + sqr(ass_2[180]) + sqr(ass_2[240]) + sqr(ass_2[300]) + sqr(ass_2[360]) + sqr(ass_2[420]) + sqr(ass_2[480]) + sqr(ass_2[540]) + sqr(ass_2[600]) + sqr(ass_2[660])); + for(i=0;i<10;i++){you_2 = you_2+sqr(ass_2[120+i*60]);} fu_2 = sqrt(you_2); WTFb = (fu_2 / ass_2[60])*100; - you_3 = (sqr(ass_3[120]) + sqr(ass_3[180]) + sqr(ass_3[240]) + sqr(ass_3[300]) + sqr(ass_3[360]) + sqr(ass_3[420]) + sqr(ass_3[480]) + sqr(ass_3[540]) + sqr(ass_3[600]) + sqr(ass_3[660])); + for(i=0;i<10;i++){you_3 = you_3+sqr(ass_3[120+i*60]);} fu_3 = sqrt(you_3); WTFc = (fu_3 / ass_3[60])*100; @@ -362,12 +398,12 @@ su_11 = (ck_1[660] / ck_1[60])*100; blow1 = su_3; - double job[4]= {su_5, su_7, su_9, su_11}; - for(int i = 0 ; i<4 ; i++) { - if(job[i] > blow1) { - blow1 = job[i]; - } - } + //double job[4]= {su_5, su_7, su_9, su_11}; + //for(int i = 0 ; i<4 ; i++) { + // if(job[i] > blow1) { + // blow1 = job[i]; + // } + //} su_3 = (ck_2[180] / ck_2[60])*100; su_5 = (ck_2[300] / ck_2[60])*100; @@ -376,12 +412,12 @@ su_11 = (ck_2[660] / ck_2[60])*100; blow2 = su_3; - double job2[4]= {su_5, su_7, su_9, su_11}; - for(int i = 0 ; i<4 ; i++) { - if(job2[i] > blow2) { - blow2 = job2[i]; - } - } + //double job2[4]= {su_5, su_7, su_9, su_11}; + //for(int i = 0 ; i<4 ; i++) { + // if(job2[i] > blow2) { + // blow2 = job2[i]; + // } + //} su_3 = (ck_3[180] / ck_3[60])*100; su_5 = (ck_3[300] / ck_3[60])*100; @@ -390,12 +426,12 @@ su_11 = (ck_3[660] / ck_3[60])*100; blow3 = su_3; - double job3[4]= {su_5, su_7, su_9, su_11}; - for(int i = 0 ; i<4 ; i++) { - if(job3[i] > blow3) { - blow3 = job3[i]; - } - } + //double job3[4]= {su_5, su_7, su_9, su_11}; + //for(int i = 0 ; i<4 ; i++) { + // if(job3[i] > blow3) { + // blow3 = job3[i]; + // } + //} blow = MAXof3(blow1, blow2, blow3); @@ -477,3 +513,178 @@ return blow; } +double MATH::BB(double *d1, double *d2, double *d3, int pu) +{ + switch(pu){ + case 10000: + + double x[3]={d1[59], d1[60], d1[61]}, y[3]={d2[59], d2[60], d2[61]}, z[3]={d3[59], d3[60], d3[61]}; + double x_1[3]={d1[65], d1[66], d1[67]}, y_1[3]={d2[65], d2[66], d2[67]}, z_1[3]={d3[65], d3[66], d3[67]}; + double x_2[3]={d1[53], d1[54], d1[55]}, y_2[3]={d2[53], d2[54], d2[55]}, z_2[3]={d3[53], d3[54], d3[55]}; + int i=0;double tmp1=0,tmp2=0,tmp3=0,tmp1_1=0,tmp2_1=0,tmp3_1=0,tmp1_2=0,tmp2_2=0,tmp3_2=0; + for(i=0;i<3;i++){if(x[i]>tmp1)tmp1=x[i];} + for(i=0;i<3;i++){if(y[i]>tmp2)tmp2=y[i];} + for(i=0;i<3;i++){if(z[i]>tmp3)tmp3=z[i];} + for(i=0;i<3;i++){if(x_1[i]>tmp1_1)tmp1_1=x_1[i];} + for(i=0;i<3;i++){if(y_1[i]>tmp2_1)tmp2_1=y_1[i];} + for(i=0;i<3;i++){if(z_1[i]>tmp3_1)tmp3_1=z_1[i];} + for(i=0;i<3;i++){if(x_2[i]>tmp1_2)tmp1_2=x_2[i];} + for(i=0;i<3;i++){if(y_2[i]>tmp2_2)tmp2_2=y_2[i];} + for(i=0;i<3;i++){if(z_2[i]>tmp3_2)tmp3_2=z_2[i];} + double n[3],ra=0,rb=0,rc=0,la=0,lb=0,lc=0,BB=-50; + for(i=0;i<2;i++){n[i]=x_1[i]-x_1[i+1];if(n[i]<ra)ra=n[i];} + for(i=0;i<2;i++){n[i]=y_1[i]-y_1[i+1];if(n[i]<rb)rb=n[i];} + for(i=0;i<2;i++){n[i]=z_1[i]-z_1[i+1];if(n[i]<rc)rc=n[i];} + for(i=0;i<2;i++){n[i]=x_2[i+1]-x_2[i];if(n[i]<la)la=n[i];} + for(i=0;i<2;i++){n[i]=y_2[i+1]-y_2[i];if(n[i]<lb)lb=n[i];} + for(i=0;i<2;i++){n[i]=z_2[i+1]-z_2[i];if(n[i]<lc)lc=n[i];} + if(ra<-0.02 || la<-0.02){n[0]=20*log10((tmp1_1+tmp1_2)/tmp1);} else {n[0]=-50;} + if(rb<-0.02 || lb<-0.02){n[1]=20*log10((tmp2_1+tmp2_2)/tmp2);} else {n[1]=-50;} + if(rc<-0.02 || lc<-0.02){n[2]=20*log10((tmp3_1+tmp3_2)/tmp3);} else {n[2]=-50;} + for(i=0;i<3;i++){if(n[i]>BB)BB=n[i];} + return BB; + + break; + case 8192: + + double xx[3]={d1[23], d1[24], d1[25]}, yy[3]={d2[23], d2[24], d2[25]}, zz[3]={d3[23], d3[24], d3[25]}; + double xx_1[3]={d1[25], d1[26], d1[27]}, yy_1[3]={d2[25], d2[26], d2[27]}, zz_1[3]={d3[25], d3[26], d3[27]}; + double xx_2[3]={d1[21], d1[22], d1[23]}, yy_2[3]={d2[21], d2[22], d2[23]}, zz_2[3]={d3[21], d3[22], d3[23]}; + double ttmp1=0,ttmp2=0,ttmp3=0,ttmp1_1=0,ttmp2_1=0,ttmp3_1=0,ttmp1_2=0,ttmp2_2=0,ttmp3_2=0; + for(i=0;i<3;i++){if(xx[i]>ttmp1)ttmp1=xx[i];} + for(i=0;i<3;i++){if(yy[i]>ttmp2)ttmp2=yy[i];} + for(i=0;i<3;i++){if(zz[i]>ttmp3)ttmp3=zz[i];} + for(i=0;i<3;i++){if(xx_1[i]>ttmp1_1)ttmp1_1=xx_1[i];} + for(i=0;i<3;i++){if(yy_1[i]>ttmp2_1)ttmp2_1=yy_1[i];} + for(i=0;i<3;i++){if(zz_1[i]>ttmp3_1)ttmp3_1=zz_1[i];} + for(i=0;i<3;i++){if(xx_2[i]>ttmp1_2)ttmp1_2=xx_2[i];} + for(i=0;i<3;i++){if(yy_2[i]>ttmp2_2)ttmp2_2=yy_2[i];} + for(i=0;i<3;i++){if(zz_2[i]>ttmp3_2)ttmp3_2=zz_2[i];} + double nn[3],rra=0,rrb=0,rrc=0,lla=0,llb=0,llc=0,BBB=-50; + for(i=0;i<3;i++){nn[i]=xx_1[i]-xx_1[i+1];if(nn[i]<rra)rra=nn[i];} + for(i=0;i<3;i++){nn[i]=yy_1[i]-yy_1[i+1];if(nn[i]<rrb)rrb=nn[i];} + for(i=0;i<3;i++){nn[i]=zz_1[i]-zz_1[i+1];if(nn[i]<rrc)rrc=nn[i];} + for(i=0;i<3;i++){nn[i]=xx_2[i+1]-xx_2[i];if(nn[i]<lla)lla=nn[i];} + for(i=0;i<3;i++){nn[i]=yy_2[i+1]-yy_2[i];if(nn[i]<llb)llb=nn[i];} + for(i=0;i<3;i++){nn[i]=zz_2[i+1]-zz_2[i];if(nn[i]<llc)llc=nn[i];} + if(rra<-0.02 || lla<-0.02){nn[0]=20*log10((ttmp1_1+ttmp1_2)/ttmp1);} else {nn[0]=-50;} + if(rrb<-0.02 || llb<-0.02){nn[1]=20*log10((ttmp2_1+ttmp2_2)/ttmp2);} else {nn[1]=-50;} + if(rrc<-0.02 || llc<-0.02){nn[2]=20*log10((ttmp3_1+ttmp3_2)/ttmp3);} else {nn[2]=-50;} + for(i=0;i<3;i++){if(nn[i]>BB)BB=nn[i];} + return BB; + break; + } +} +void MATH::Fuzzy_Fault(double IUR,double IUF,double THDV,double VDFodd,double THDI,double IDFodd,double BB,double peakvalue,double *health,double *stator,double *rotor,double *bearing, double *eccentric) +{ + double h[8],f1[8],s[7],r[7],b[6],e[6],h1max=0,f1max=0,g1max=0,g2max=0,rmax=0,bmax=0,smax=0,emax=0; int i=0; + h[0]=IUR*1.0/8.0-1.0/4.0;if(h[0]<0){h[0]=0;}if(h[0]>1){h[0]=1;} + h[1]=IUF*2.0-4.0;if(h[1]<0){h[1]=0;}if(h[1]>1){h[1]=1;} + h[2]=THDV*(1.0/3.0)-2.0/3.0;if(h[2]<0){h[2]=0;}if(h[2]>1){h[2]=1;} + h[3]=VDFodd*2.0/5.0-1.0/5.0;if(h[3]<0){h[3]=0;}if(h[3]>1){h[3]=1;} + h[4]=THDI*2.0/5.0-1.0;if(h[4]<0){h[4]=0;}if(h[4]>1){h[4]=1;} + h[5]=IDFodd*1.0/3.0-1.0/3.0;if(h[5]<0){h[5]=0;}if(h[5]>1){h[5]=1;} + h[6]=BB*1.0/5.0+9.0;if(h[6]<0){h[6]=0;}if(h[6]>1){h[6]=1;} + h[7]=peakvalue*2.0-8.0;if(h[7]<0){h[7]=0;}if(h[7]>1){h[7]=1;} + if(h[0]==0&&h[1]==0&&h[2]==0&&h[3]==0&&h[4]==0&&h[5]==0&&h[6]==0&&h[7]==0){*health=100;*stator=0;*rotor=0;*bearing=0;*eccentric=0;} + else{ + for(i=0;i<8;i++){f1[i]=h[i];if(h[i]>f1max){f1max=h[i];}} + h1max=1-f1max; + *health=h1max*100; + g2max=h[7];g1max=1-g2max; + s[0]=h[0]*0.987*0.6;r[0]=h[0]*0.013*0.6;s[1]=h[1];r[1]=0;s[2]=h[2]*0.242*0.6;r[2]=h[2]*0.758*0.6;s[3]=h[3]*0.24*0.6;r[3]=h[3]*0.76*0.6;s[4]=h[4]*0.383*0.6;r[4]=h[4]*0.617*0.6;s[5]=h[5]*0.44*0.6;r[5]=h[5]*0.56*0.6; + r[6]=h[6];s[6]=0;if(r[6]==0){s[6]=1.0;} + for(i=0;i<7;i++){if(s[i]>smax){smax=s[i];}if(r[i]>rmax)rmax=r[i];} + rmax=rmax/(smax+rmax);smax=1-rmax;*stator=f1max*g1max*smax*100;*rotor=f1max*g1max*rmax*100; + b[0]=h[0]*0.025*0.6;e[0]=h[0]*0.975*0.6;b[1]=0;e[1]=h[1];b[2]=h[2]*0.797*0.6;e[2]=h[2]*0.203*0.6;b[3]=h[3]*0.839*0.6;e[3]=h[3]*0.161*0.6;b[4]=h[4]*0.722*0.6;e[4]=h[4]*0.278*0.6;b[5]=h[5]*0.764*0.6;e[5]=h[5]*0.236*0.6; + for(i=0;i<6;i++){if(b[i]>bmax){bmax=b[i];}if(e[i]>emax)emax=e[i];} + emax=emax/(bmax+emax);bmax=1-emax;*bearing=f1max*g2max*bmax*100;*eccentric=f1max*g2max*emax*100; + } +} +void MATH::Fuzzy_Condition(double VUR,double IUR,double VUF,double IUF,double THDV,double VDFodd,double THDI,double IDFodd,double VD,double CD,double Vel,double Dis,double *pCMS) +{ + double g1[2],g2[2],g3[2],g4[2],g5[2],g6[2],g7[2],g8[2],g9[2],c1[9]={0},c2[9]={0},p[2]; + int flag1,flag2,flag3,flag4,flag5,flag6,flag7,flag8,flag9,i; + if(VUR>=5||IUR>=10||THDV>=5||VDFodd>=3||THDI>=5||IDFodd>=4||VD>=10||CD>=10||Vel>=4.5||VUF>=1||IUF>=2.5||Dis>=90){*pCMS=1;} + else if(VUR<=1&&IUR<=2&&THDV<=1.5&&VDFodd<=1.5&&THDI<=2.5&&IDFodd<=2&&VD<=2.5&&CD==0&&Vel<=0.7){*pCMS=0;} + else{ + if(VUR<=2){g1[1]=VUR-1.0;if(g1[1]<0){g1[1]=0;}g1[0]=1-g1[1];flag1=1;} + if(VUR>2&&VUR<=3.5){g1[1]=VUR*2.0/3.0-4.0/3.0;g1[0]=1-g1[1];flag1=2;} + if(VUR>3.5&&VUR<5){g1[1]=VUR*2.0/3.0-7.0/3.0;g1[0]=1-g1[1];flag1=3;} + if(IUR<=4){g2[1]=IUR*0.5-1;if(g2[1]<0){g2[1]=0;}g2[0]=1-g2[1];flag2=1;} + if(IUR>4&&IUR<=6){g2[1]=IUR*0.5-2.0;g2[0]=1-g2[1];flag2=2;} + if(IUR>6&&IUR<10){g2[1]=IUR*0.25-3.0*2.0;g2[0]=1-g2[1];flag2=3;} + if(THDV<=2){g3[1]=THDV*2-3;if(g3[1]<0){g3[1]=0;}g3[0]=1-g3[1];flag3=1;} + if(THDV>2&&THDV<=3.5){g3[1]=THDV*2.0/3.0-4.0/3.0;g3[0]=1-g3[1];flag3=2;} + if(THDV>3.5&&THDV<5){g3[1]=THDV*2.0/3.0-7.0/3.0;g3[0]=1-g3[1];flag3=3;} + if(VDFodd<=2){g3[1]=VDFodd*2.0-3.0;if(g4[1]<0){g4[1]=0;}g4[0]=1-g4[1];flag4=1;} + if(VDFodd>2&&VDFodd<=2.5){g4[1]=VDFodd*2.0-4.0;g4[0]=1-g4[1];flag4=2;} + if(VDFodd>2.5&&VDFodd<3){g4[1]=VDFodd*2.0-5.0;g4[0]=1-g4[1];flag4=3;} + if(THDI<=3){g5[1]=THDI*2.0-5.0;if(g5[1]<0){g5[1]=0;}g5[0]=1-g5[1];flag5=1;} + if(THDI>3&&THDI<=4){g5[1]=THDI-3.0;g5[0]=1-g5[1];flag5=2;} + if(THDI>4&&THDI<5){g5[1]=THDI-4.0;g5[0]=1-g5[1];flag5=3;} + if(IDFodd<=2.5){g6[1]=IDFodd*2.0-4.0;if(g6[1]<0){g6[1]=0;}g6[0]=1-g6[1];flag6=1;} + if(IDFodd>2.5&&IDFodd<=3){g6[1]=IDFodd*2.0-5.0;g6[0]=1-g6[1];flag6=2;} + if(IDFodd>3&&IDFodd<4){g6[1]=IDFodd-3.0;g6[0]=1-g6[1];flag6=3;} + if(VD<=3){g7[1]=VD*2.0-5.0;if(g7[1]<0){g7[1]=0;}g7[0]=1-g7[1];flag7=1;} + if(VD>3&&VD<=5){g7[1]=VD*0.5-3.0/2.0;g7[0]=1-g7[1];flag7=2;} + if(VD>5&&VD<10){g7[1]=VD*0.2-1.0;g7[0]=1-g7[1];flag7=3;} + if(CD<=2){g8[1]=CD*0.5;if(g8[1]<0){g8[1]=0;}g8[0]=1-g8[1];flag8=1;} + if(CD>2&&CD<=5){g8[1]=CD*1.0/3.0-2.0/3.0;g8[0]=1-g8[1];flag8=2;} + if(CD>5&&CD<10){g8[1]=CD*0.2-1.0;g8[0]=1-g8[1];flag8=3;} + if(Vel<=0.7){g9[1]=Vel*10.0/7.0;if(g9[1]<0){g9[1]=0;}g9[0]=1-g9[1];flag9=1;} + if(Vel>0.7&&Vel<=1.8){g9[1]=Vel*10.0/11.0-7.0/11.0;g9[0]=1-g9[1];flag9=2;} + if(Vel>1.8&&Vel<4.5){g9[1]=Vel*10.0/27.0-2.0/3.0;g9[0]=1-g9[1];flag9=3;} + if(flag1==3||flag2==3||flag3==3||flag4==3||flag5==3||flag6==3||flag7==3||flag8==3||flag9==3){ + if(flag1==3){c1[0]=g1[0];c2[0]=g1[1];} + if(flag2==3){c1[1]=g2[0];c2[1]=g2[1];} + if(flag3==3){c1[2]=g3[0];c2[2]=g3[1];} + if(flag4==3){c1[3]=g4[0];c2[3]=g4[1];} + if(flag5==3){c1[4]=g5[0];c2[4]=g5[1];} + if(flag6==3){c1[5]=g6[0];c2[5]=g6[1];} + if(flag7==3){c1[6]=g7[0];c2[6]=g7[1];} + if(flag8==3){c1[7]=g8[0];c2[7]=g8[1];} + if(flag9==3){c1[8]=g9[0];c2[8]=g9[1];} + p[0]=c1[0];p[1]=c2[0]; + for(i=1;i<9;i++){ + if(p[0]<c1[i]){p[0]=c1[i];} + if(p[1]<c2[i]){p[1]=c2[i];} + } + *pCMS=(p[0]*0.6667+p[1])/(p[0]+p[1]); + } + else if(flag1==2||flag2==2||flag3==2||flag4==2||flag5==2||flag6==2||flag7==2||flag8==2||flag9==2){ + if(flag1==2){c1[0]=g1[0];c2[0]=g1[1];} + if(flag2==2){c1[1]=g2[0];c2[1]=g2[1];} + if(flag3==2){c1[2]=g3[0];c2[2]=g3[1];} + if(flag4==2){c1[3]=g4[0];c2[3]=g4[1];} + if(flag5==2){c1[4]=g5[0];c2[4]=g5[1];} + if(flag6==2){c1[5]=g6[0];c2[5]=g6[1];} + if(flag7==2){c1[6]=g7[0];c2[6]=g7[1];} + if(flag8==2){c1[7]=g8[0];c2[7]=g8[1];} + if(flag9==2){c1[8]=g9[0];c2[8]=g9[1];} + p[0]=c1[0];p[1]=c2[0]; + for(i=1;i<9;i++){ + if(p[0]<c1[i]){p[0]=c1[i];} + if(p[1]<c2[i]){p[1]=c2[i];} + } + *pCMS=(p[0]*0.3333+p[1]*0.6667)/(p[0]+p[1]); + } + else{ + if(flag1==1){c1[0]=g1[0];c2[0]=g1[1];} + if(flag2==1){c1[1]=g2[0];c2[1]=g2[1];} + if(flag3==1){c1[2]=g3[0];c2[2]=g3[1];} + if(flag4==1){c1[3]=g4[0];c2[3]=g4[1];} + if(flag5==1){c1[4]=g5[0];c2[4]=g5[1];} + if(flag6==1){c1[5]=g6[0];c2[5]=g6[1];} + if(flag7==1){c1[6]=g7[0];c2[6]=g7[1];} + if(flag8==1){c1[7]=g8[0];c2[7]=g8[1];} + if(flag9==1){c1[8]=g9[0];c2[8]=g9[1];} + p[0]=c1[0];p[1]=c2[0]; + for(i=1;i<9;i++){ + if(p[0]<c1[i]){p[0]=c1[i];} + if(p[1]<c2[i]){p[1]=c2[i];} + } + *pCMS=(p[1]*0.3333)/(p[0]+p[1]); + } + } +} \ No newline at end of file
--- a/embedded/MATH1.h Tue Jan 10 08:25:27 2017 +0000 +++ b/embedded/MATH1.h Wed Jan 18 11:19:53 2017 +0000 @@ -9,6 +9,7 @@ public: + double round(double src, int n); double sqr(double value); double LVRMS(double* d1, double* d2, uint16_t len); double RMS(double* d, uint16_t len); @@ -16,6 +17,8 @@ double angle(double d1, double d2); double UF(double rms_a, double rms_b, double rms_c, double angle_a, double angle_b, double angle_c); + double VDF(double d1, double d2, double d3); + double CDF(double d1, double d2, double d3); double doDFT(double *input, double *output, int N); void integal(double *in, double *out, int len, int sps); void detrend(double *y, int len, int sps); @@ -25,7 +28,9 @@ double UBValue(double *maxi, double *x , double *y, double *z, int len); double THD(double *ass_1, double *ass_2, double *ass_3, int pu); double HD(double *dick_1, double *dick_2, double *dick_3, int pu); - + double BB(double *d1, double *d2, double *d3, int pu); + void Fuzzy_Fault(double IUR,double IUF,double THDV,double VDFodd,double THDI,double IDFodd,double BB,double peakvalue,double *health,double *stator,double *rotor,double *bearing, double *eccentric); + void Fuzzy_Condition(double VUR,double IUR,double VUF,double IUF,double THDV,double VDFodd,double THDI,double IDFodd,double VD,double CD,double Vel,double Dis,double *pCMS); private: @@ -34,3 +39,5 @@ #endif + +