unit variables; {$mode objfpc}{$H+} interface uses Classes, SysUtils; const SFINISH:longint=0; SFILL:longint=1; SHOLD:longint=2; SRATE:longint=3; STO:longint=4; SSAVE:longint=5; SMEASUREON:longint=6; SMEASUREOFF:longint=7; SID:longint=8; STEMPZERO:longint=10; STEMPSLOPE:longint=11; STEMPPARAB:longint=12; SSTART:longint=13; SSTOP:longint=14; SBACK:longint=15; SRESET:longint=16; SNEXT:longint=17; SZERO:longint=18; SINTTIME:longint=19; SPA:longint=20; SPB:longint=21; SPC:longint=22; SSENDDATA:longint=24; SSENDDATAON:longint=25; SSENDDATAOFF:longint=26; SFILTER:longint=27; SFILTERT:longint=28; STIMEINT:longint=29; SLAMPTEST:longint=30; SKILL:longint=31; SPOWER:longint=32; SDISPAMP:longint=34; SQ0:longint=36; SSAVED:longint=37; STP0:longint=38; SUSB_READY=80; SSAVEPARAM=82; SHELPOFF:longint=200; SHRESET:longint=202; SFASSIGNE:longint=256; SFRESET:longint=257; SFREWRITE:longint=258; SFCLOSE:longint=259; SFWRITE:longint=260; SFREAD:longint=261; SNAME:string='DTA'; REC_SIZE:longint=30; type data_t=record q,time,temp1,temp2,tempp,tempf,param,paramdata,rate,lag,power,powerback:double; end; type send_t=record param,paramdata:double; end; const DATASIZE=2000; var PORT:longint=9099; d_send:array[0..256] of double; mainpath:string='/home/hallgato/'; studentpath:string='/home/hallgato/'; programfile:string='normal.prg'; {$ifdef LINUX} programsdirectory:string='DTA/programs/'; tmpdirectory:string='DTA/tmp/'; savedirectory:string='measures/'; paramsavefile:string='DTA/etc/DTAparam'; imagedirectory:string='measures/'; calibrdirectory:string='DTA/etc/'; filetmpname:string='DTA/tmp/data.dat'; bs:string='/'; helpfile:string='DTA/doc/DTAuserman.pdf'; calibrfile:string='DTA/DTA_calibr.dat'; {$else} programsdirectory:string='DTA\programs\'; tmpdirectory:string='DTA\tmp\'; savedirectory:string='measures\'; paramsavefile:string='DTA\etc\DTAparam'; imagedirectory:string='measures\'; calibrdirectory:string='DTA\etc\'; filetmpname:string='DTA\tmp\data.dat'; ip_address_file:string='DRA\etc\DTA_ip.dat'; bs:string='\'; helpfile:string='DTA\doc\DTAuserman.pdf'; {$endif} readpointer:longint=0; data0:array[1..DATASIZE] of data_t; datanum0:longint; data1:array[1..DATASIZE] of data_t; datanum1:longint; data2:array[1..DATASIZE] of data_t; datanum2:longint; data3:array[1..DATASIZE] of data_t; datat:array[1..DATASIZE] of data_t; sendt:array[1..DATASIZE] of send_t; datanum3:longint; serialnum:longint=0; datap0:longint=0; datap1:longint=0; datap2:longint=0; datap3:longint=0; datagraphp:longint=0; dtime:longint=30000000; t:double; curdata:data_t; readdata:data_t; adata,adata0:data_t; datanum:longint=0; connecting:longint=0; datethreadid:TThreadID; connect_error:longint=0; messagep:longint=0; datarate,dataratep:longint; dataputp:longint=0; startingt,finalt,rate,rate_null,repeatnum,mass:double; mtempzero,mtempslope,q0:double; mtempzerorate,mtempsloperate:double; mtempzero1,mtempslope1,q01:double; mtempzero2,mtempslope2,q02:double; mtempzerorate1,mtempsloperate1:double; mtempzerorate2,mtempsloperate2:double; ampad1,ampad2,ampcooler:longint; measureon,measureon_old, saverequest,saverequest_old, arunning, arunning_old,running:boolean; prevtime,measurenum:longint; teston:boolean=false; autosave:boolean=false; absoluteboolean:boolean=false; temp2on:boolean=false; baselineb:boolean=false; instdir:string; connecterror:longint; messagestr:string; temp_zero:double; zero_datanum:longint=0; programselected:boolean=false; savefilename:string=''; setip:boolean; //filetmp:file of data_t; xaxispointer:longint; yaxispointer:longint; yaxis:array[1..4] of boolean; timemin,timemax,timescale,timeoffset:double; qmin,qmax,qscale,qoffset,range:double; temp1min,temp1max,temp1scale,temp1offset:double; temppmin,temppmax,temppscale,temppoffset:double; temp2min,temp2max,temp2scale,temp2offset:double; filter:double=0.01; filtert:double=0.01; ident:string; repeatpointer:longint; datapt:longint; averagepointer:longint=0; averagenum:longint=0; imagenum:longint; savenum:longint; savefileb:boolean=false; startb:boolean=false; mintemp,maxtemp:double; setfuncenabled:boolean=false; student:boolean=false; tempzero,tempslope,tempparab,pa,pb,pc,inttime,temp20:double; pwd:string; DTApwd:string='DTA'; datagetonb:boolean=false; sendonb:boolean=false; threadonb:boolean=true; threatermb:boolean=false; procedure inits; function saveparam:longint; procedure save_calibr_data; procedure read_calibr_data; procedure setstudent; implementation uses main,calibration,setfunc, Dialogs; var DataThread : TDataThread; function get_instdir:string; var ss:string; begin ss:=paramstr(0); {$IFDEF LINUX} get_instdir:=copy(ss,1,pos('DTA',ss)+3); mainpath:=getuserdir; //+'DTA/'; studentpath:=mainpath; {$ELSE} mainpath:=copy(ss,1,pos('DTA\',ss)+3); get_instdir:=mainpath; {$ENDIF} end; procedure read_calibr_data; var f:text; i:longint; sf:string; info:TSearchRec; begin {$I-} ioresult; sf:=calibrdirectory+calibrfile; if findfirst(sf,faAnyFile,info)<>0 then begin tempzero:=0; tempslope:=1; tempparab:=0; pa:=0; pb:=0; inttime:=10; temp20:=0; q0:=1; exit; end; assign(f,sf); reset(f); readln(f,tempzero); readln(f,tempslope); readln(f,tempparab); readln(f,pa); readln(f,pb); readln(f,pc); readln(f,inttime); readln(f,temp20); readln(f,q0); close(f); ioresult; {$I+} end; procedure save_calibr_data; var f:text; sf:string; begin {$I-} ioresult; sf:=calibrdirectory+calibrfile; assign(f,sf); rewrite(f); writeln(f,tempzero); writeln(f,tempslope); writeln(f,tempparab); writeln(f,pa); writeln(f,pb); writeln(f,pc); writeln(f,inttime); writeln(f,temp20); writeln(f,q0); close(f); ioresult; {$I+} end; function saveparam:longint; var f:text; x:longint; begin {$I-} if connecterror<>0 then exit; ioresult; assign(f,mainpath+paramsavefile); //writeln(mainpath+paramsavefile); rewrite(f); writeln(f,programfile); writeln(f,programsdirectory); writeln(f,savedirectory); writeln(f,mainform.IdentEdit.Text); writeln(f,startingt); writeln(f,finalt); writeln(f,rate); writeln(f,repeatnum); writeln(f,mainform.massEdit.value); writeln(f,temp_zero); writeln(f,timemin); writeln(f,timemax); writeln(f,qmin); writeln(f,qmax); writeln(f,temppmax); writeln(f,temppmin); writeln(f,temp1max); writeln(f,temp1min); writeln(f,temp2min); writeln(f,temp2max); writeln(f,filter); writeln(f,filtert); close(f); saveparam:=ioresult; {$I+} end; procedure readparam; var f:text; x:longint; Info : TSearchRec; i:longint; begin {$I-} //writeln('Param file: '+mainpath+paramsavefile) ; If FindFirst (mainpath+paramsavefile,faAnyFile,Info)<>0 then begin //showmessage('Program file is not found. Default values are used'); exit; end; ioresult; assign(f,mainpath+paramsavefile); reset(f); readln(f,programfile); readln(f,programsdirectory); readln(f,savedirectory); readln(f,ident); readln(f,startingt); readln(f,finalt); readln(f,rate); readln(f,repeatnum); readln(f,mass); readln(f,temp_zero); readln(f,timemin); readln(f,timemax); readln(f,qmin); readln(f,qmax); readln(f,temppmax); readln(f,temppmin); readln(f,temp1max); readln(f,temp1min); readln(f,temp2min); readln(f,temp2max); readln(f,filter); readln(f,filtert); close(f); ioresult; {$I+} end; procedure setstudent; begin if student then begin progform.newbutton.visible:=false; progform.savebutton.visible:=false; progform.saveasbutton.visible:=false; progform.addbutton.visible:=false; mainform.pwdEdit.Visible:=false; mainform.commandEdit.visible:=false; end else begin progform.newbutton.visible:=true; progform.savebutton.visible:=true; progform.saveasbutton.visible:=true; progform.addbutton.visible:=true; mainform.commandEdit.visible:=true; end; end; procedure inits; begin get_instdir; programsdirectory:=mainpath+programsdirectory; tmpdirectory:=mainpath+tmpdirectory; savedirectory:=studentpath+savedirectory; imagedirectory:=studentpath+imagedirectory; filetmpname:=mainpath+filetmpname; calibrdirectory:=mainpath+calibrdirectory; helpfile:=mainpath+helpfile; //writeln(programsdirectory); //writeln(tmpdirectory); //writeln(savedirectory); //writeln(imagedirectory); //writeln(calibrdirectory); //assign(filetmp,filetmpname); startingt:=200; finalt:=600; rate:=10; repeatnum:=1; mass:=100; tempzero:=0; tempslope:=1; pa:=1; pb:=0; pc:=0; inttime:=100; temp_zero:=20; xaxispointer:=1; yaxispointer:=1; yaxis[1]:=true;yaxis[2]:=true;yaxis[3]:=false;yaxis[4]:=false; timemin:=0; timemax:=100; qmin:=-20; qmax:=20; temppmax:=800; temppmin:=0; temp1max:=800; temp1min:=0; temp2min:=0; temp2max:=800; //readparam; mainform.IdentEdit.text:=ident; mainform.massEdit.value:=mass; if abs(timemax-timemin)<1e-6 then timemax:=timemin+1e-6; timescale:=1.0/(timemax-timemin); timeoffset:=-timescale*timemin; mainform.TimeLinearAxisTrans.Offset:=timeoffset; mainform.TimeLinearAxisTrans.scale:=timescale; mainform.timeminedit.value:=timemin; mainform.timemaxedit.value:=timemax; settimemin; settimemax; if abs(qmax-qmin)<1e-6 then qmax:=qmin+1e-6; qscale:=1.0/(qmax-qmin); qoffset:=-qscale*qmin; mainform.qLinearAxisTrans.Offset:=qoffset; mainform.qLinearAxisTrans.scale:=qscale; mainform.qminedit.value:=qmin; mainform.qmaxedit.value:=qmax; setqmin; setqmax; mainform.temppLinearAxisTrans.Offset:=temppoffset; mainform.temppLinearAxisTrans.scale:=temppscale; mainform.temppminedit.value:=temppmin; mainform.temppmaxedit.value:=temppmax; settemppmin; settemppmax; mainform.temp1LinearAxisTrans.Offset:=temp1offset; mainform.temp1LinearAxisTrans.scale:=temp1scale; mainform.temp1minedit.value:=temp1min; mainform.temp1maxedit.value:=temp1max; settemp1min; settemp1max; //temp2max:=600; //temp2min:=0; if abs(temp2max-temp2min)<1e-6 then temp2max:=temp2min+1e-6; temp2scale:=1.0/(temp2max-temp2min); temp2offset:=-temp2scale*temp2min; mainform.temp2LinearAxisTrans.Offset:=temp2offset; mainform.temp2LinearAxisTrans.scale:=temp2scale; mainform.temp2minedit.value:=temp2min; mainform.temp2maxedit.value:=temp2max; setqmin; setqmax; setxaxis; setyaxis; setbcolors; repeatnum:=1; imagenum:=0; xaxispointer:=2; xxset; student:=true; end; end.