#include /* IEC driver definicis fjl */ #include "transfer.h" /* panel konstansok fjl */ #include "math.h" #include "stdio.h" /*--------------------------------------------------------------------*/ /*--------------------------------------------------------------------*/ #define POWER_ADDR 2 /* tpegysg IEC cm */ #define FUNC_ADDR 5 /* funkcigenertor IEC cm */ #define MULTI_ADDR 3 /* multimter IEC cm */ #define WAIT 1 /* GetUserEvent vr */ #define NOWAIT 0 /* GetUserEvent nem vr */ /*--------------------------------------------------------------------*/ /*--------------------------------------------------------------------*/ int powerV,powermA; /* TR_VoltageDC, TR_ClimitDC */ long startfr,endfr; /* TR_StartFREQ TR_EndFREQ */ int funVpp,funatten,stepnum,i; /* TR_VoltageFUN TR_Attenuation TR_StepNUM */ /*---------------------------------------------------------------------*/ double adat[400]; double fr[400]; float aktadat; /*double aktadat;*/ double aktfrek; /*--------------------------------------------------------------------*/ int p,mp,pan,ctrl,intx; int devaddr,res,aktfr; char buffer[100]; /* zenet buffer */ int addrs[2]; /* cm tmb */ /*---------------------------------------------------------------------*/ /* Fggvnyek */ /*------------------------------------------------------------------------*/ /* Delay(1.0) / delay(0.1) sec! /*PlotXY (panel, control ID, X array, Y array, numb. of points, 4:double, 4:double, 0:line, 0:empty sq., 1: poin fr.,white:15);*/ /* sscanf(buf,"%f",&data); float data!*/ /*------------------------------------------------------------------------*/ /* IEC zenet elkldse buffer-bl, esetleg sszelltsa is */ /*------------------------------------------------------------------------*/ int IECsend(int addr) { int len; SetCtrlVal(mp,IEC_error,0); /* error ablak trls */ SetCtrlVal(mp,IEC_TXT,buffer); /* zenet ablak trls */ InstallPopup(mp); /* feltt panel megjelents */ if (addr) /* ha rvnyes cmmel hvtk */ { SetCtrlVal(mp,IEC_ADDR,addr); /* cm kirs */ SetCtrlVal(mp,IEC_TXT,buffer); /* kszlk parancs kirs */ GetPopupEvent(1,&ctrl); /* MESSAGE/QUIT megnyomsra vr */ } else /* ha 0 cmmel hvtk */ { GetPopupEvent(1,&ctrl); /* MESSAGE/QUIT megnyomsra vr */ GetCtrlVal(mp,IEC_ADDR,&addr); /* cm beolvass */ GetCtrlVal(mp,IEC_TXT,buffer); /* parancs szveg beolvass */ }; addrs[0]=addr; /* cm lista tlts */ len=strlen(buffer); /* zenet hossz */ i_send(addrs,1,buffer,len,0); /* zenet klds */ SetCtrlVal(mp,IEC_TXT,"Message has been sent"); /* nyugta szveg */ SetCtrlVal(mp,IEC_error,i_error); /* IEC drjver hibazenet */ buffer[0]=0; /* buffer tls */ GetPopupEvent(1,&ctrl); /* MESSAGE/QUIT megnyomsra vr */ RemovePopup(mp); /* feltt panel levtel */ } /* IECsend() */ //=========================================================================================== int IECsend1(int addr) { int len; addrs[0]=addr; /* cm lista tlts */ len=strlen(buffer); /* zenet hossz */ i_send(addrs,1,buffer,len,0); /* zenet klds */ } /* IECsend() */ //=========================================================================================== /*--------------------------------------------------------------------*/ /* IEC zenet vtel */ /*--------------------------------------------------------------------*/ int IECreceive(int addr) { int len,i; len=100; /* max. zenet hossz */ for (i=0; i < len; i++) buffer[i]=0; /* zenet buffer trls */ SetCtrlVal(mp,IEC_TXT,buffer); /* zenet ablak trls */ SetCtrlVal(mp,IEC_error,0); /* error ablak trls */ InstallPopup(mp); /* feltt panel felrajzols */ if (!addr) /* ha 0 cmmel hvtk */ { GetPopupEvent(1,&ctrl); /* SAVE/QUIT megnyomsra vr */ GetCtrlVal(mp,IEC_ADDR,&addr); /* cm beolvass */ }; i_receive(addr,buffer,len,0); /* vtel az 'addr' beszltl */ SetCtrlVal(mp,IEC_TXT,buffer); /* az zenet kirsa az ablakba */ SetCtrlVal(mp,IEC_error,i_error); /* IEC hibajelzs kirsa */ GetPopupEvent(1,&ctrl); /* SAVE/QUIT megnyomsra vr */ RemovePopup(mp); /* feltt panel trlse */ } /* IECreceive() */ //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ int IECreceive1(int addr) { int len,i; len=100; /* max. zenet hossz */ for (i=0; i < len; i++) buffer[i]=0; /* zenet buffer trls */ i_receive(addr,buffer,len,0); /* vtel az 'addr' beszltl */ } /* IECreceive() */ //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ /*--------------------------------------------------------------------*/ void main() { int res,err; int len,j; double x,y,lepes; res=i_init(0); /* IEC vezrl krtya incializls */ if (res!=1) {MessagePopup("IEC board initialisation error");}; res=i_assign_auto(); if (i_error==-182) {MessagePopup("IEC bus timeout error");}; addrs[1]=-1; p = LoadPanel ("TRANSFER.UIR", TR); /* fpanel */ mp = LoadPanel ("TRANSFER.UIR", IEC); /* IEC ads-vtel panel */ SetActiveCtrl(TR_StandbyDC); DisplayPanel (p); while (1) { GetUserEvent(WAIT,&pan,&ctrl); /* esemnyre vr */ switch(ctrl) { case TR_EXIT: /* kilps az EXIT gombbal */ exit(0); break; case TR_SEND: /* zenet klds a SEND gombbal */ IECsend(0); break; case TR_REC: /* zenet vtel a REC gombbal */ IECreceive(0); break; case TR_StandbyDC: /* tpegysg ON-OFF kapcsol */ GetCtrlVal(p,TR_StandbyDC,&intx); if (intx) /* bekapcsols */ { GetCtrlVal(p,TR_VoltageDC,&powerV); GetCtrlVal(p,TR_ClimitDC,&powermA); sprintf(buffer,"VOLTAGE 3,%i; CURRENT 3,0.%i",powerV,powermA); IECsend(POWER_ADDR); sprintf(buffer,"CLIMIT 3,0.%i",powermA+1); IECsend(POWER_ADDR); sprintf(buffer,"VOLTAGE 5,%i; CLIMIT 5,0.%i",powerV,powermA); IECsend(POWER_ADDR); sprintf(buffer,"CLIMIT 5,0.%i",powermA+1); IECsend(POWER_ADDR); sprintf(buffer,"STANDBY 3,OFF; STANDBY 5,OFF"); IECsend(POWER_ADDR); } else /* kikapcsols */ { sprintf(buffer,"STANDBY 3,ON; STANDBY 5,ON"); IECsend(POWER_ADDR); }; break; case TR_StandbyFUN: /* jelgenertor ON-OFF kapcsol */ GetCtrlVal(p,TR_StandbyFUN,&intx); if (intx) /* bekapcsols */ { GetCtrlVal(p,TR_VoltageFUN,&funVpp); GetCtrlVal(p,TR_Attenuation,&funatten); GetCtrlVal(p,TR_StartFREQ,&startfr); sprintf(buffer,"AMPLITUDE %i; ATTEN %i; FREQ %i",funVpp,funatten,startfr); IECsend(FUNC_ADDR); sprintf(buffer,"STANDBY OFF"); IECsend(FUNC_ADDR); } else /* kikapcsols */ { sprintf(buffer,"STANDBY ON"); IECsend(FUNC_ADDR); }; break; case TR_SWEEP: /* SWEEP nyomgomb */ GetCtrlVal(p,TR_StartFREQ,&startfr); /* Kezdo frekvencia beolvasasa konzolrol */ GetCtrlVal(p,TR_EndFREQ,&endfr); /* Vegfrekvencia beolvasasa */ GetCtrlVal(p,TR_StepNUM,&stepnum); /* Lepesszam beolvasasa */ GetCtrlVal(p,TR_VoltageFUN,&funVpp); /* Amplitudo beolvasasa */ GetCtrlVal(p,TR_Attenuation,&funatten); /* Csillapitasi ertek beolvasasa */ DeletePlots (p, TR_Graph); /* Fuggvenyablak tartalmanak torlese */ sprintf(buffer,"AMPLITUDE %i; ATTEN %i; FREQ %i",funVpp,funatten,startfr); IECsend(FUNC_ADDR); sprintf(buffer,"SINE; STANDBY OFF"); IECsend(FUNC_ADDR); /* Fuggvenygenerator kimenojelenek beallitasa a beolvasott ertekek alapjan */ sprintf(buffer,"RANGE 0; FUNCTION VAC"); IECsend(MULTI_ADDR); /* Multimeter beallitas */ lepes = (log10(endfr)-log10(startfr))/stepnum; /* Atmeneti valtozo az ertelmezesi tartomany ertekeinek szamitasahoz */ for (j=0; j<=stepnum-1; j++) /* Meresi ciklus */ { x = 10.0; y = log10(startfr)+lepes*j; aktfrek=pow(x,y); /* A frekvencia ertekek egyenletes teritese a meresi tartomanyon */ sprintf(buffer,"FREQ %f",aktfrek); /* Frekvencia-ertek elkuldese a fuggvenygeneratornak */ IECsend1(FUNC_ADDR); /* anelkul hogy a dialogusablak megjelenne */ delay(0.4); /* Varakozas, hogy a merendo halozat bealljon */ sprintf(buffer,"DATA?"); IECsend1(MULTI_ADDR); /* dialogusablak nem jelenik meg a send1 miatt */ IECreceive1(MULTI_ADDR); /* Mert ertekek lekerdezese a multimetertol */ /* dialogusablak nem jelenik meg a send1-receive1 miatt */ sscanf(buffer,"%f",&aktadat); /* string-lebegopontos konverzio */ adat[j]=aktadat; /* Mert adat beirasa az adatokat tarolo tomb megfelelo cellajaba */ /* automatikus lebegopontos-double konverzio */ fr[j]=aktfrek; /* Meresi tartomany ertekeit tartalmazo tomb feltoltese */ } PlotXY (p,TR_Graph,fr,adat,stepnum,4,4,1,2,1,15); /* Grafikus abrazolas */ break; case TR_COPY: /* hardcopy */ /* int status = OutputGraph (-1, "", 1, panelh, ctrlid); int status = OutputPanel (-1, "", 1, panelh); int status = OutputScreen (-1, ""); */ OutputScreen (-1, ""); break; }/*switch*/ }/*while*/ }/*main*/