#include <ansi_c.h>
/* Program qe2d.c za testiranje povrsinske obcutljivosti
Avtor: Samo Korpar
Verzija:
1.00 28.9.2009
-
*/
#include <utility.h>
#include <userint.h>
#include "K617.h"
#include <cvirte.h>
#include "qe2d_ui.h"
#define uSMC_USB
#ifdef uSMC_USB
# include "uSMC.h"
# define uSMC_SERIAL_X "0000000000004925"
# define uSMC_SERIAL_Y "0000000000006030"
# define uSMC_SERIAL_Z "0000000000002894"
const char serials[3][16]= {uSMC_SERIAL_X,uSMC_SERIAL_Y,uSMC_SERIAL_Z};
#endif /* uSMC_USB */
//#define MIKRO_COM 6
#ifdef MIKRO_COM
# include "MIKRO.h"
#endif /* MIKRO_COM */
#define SP2155_PORT 4
#ifdef SP2155_PORT
# include "SP2155.h"
#endif /* SP2155_PORT */
#define PROLOGIX_PORT 5
#define K617_ADDR 3
#define MAXXY 1000
#define MAXWL 1000
const int PosCtrl[3]= {P1_X,P1_Y,P1_Z};
const int ncurroff=10;
const int ncurrmes=3;
static int node[3];
static int CurPos[3]= {0,0,0};
static int p1h,pID,rID,tfID,plh[MAXXY],plqeh[MAXXY];
static int wl[MAXXY][MAXWL];
static float tok[MAXXY][MAXWL],qe[MAXXY][MAXWL],tokoff[MAXXY];
//static float
float getavg(int n) {
int i;
float tok;
tok=0;
for (i=0; i<n; i++)
tok+=K617_get(NULL, NULL);
return (tok/(float)n);
}
int CVICALLBACK cb_timer (int panel, int control, int event, void *callbackData,
int eventData1, int eventData2) {
QueueUserEvent (9000, p1h, P1_TIMER);
return (0);
}
int MDelay(double t) {
while (0.5<t) {
ProcessSystemEvents();
GetUserEvent (0, &pID, &rID);
switch (rID) {
case P1_STOP:
return 1;
break;
}
Delay(0.5);
t-=0.5;
SetCtrlVal(p1h,P1_TOUT,t);
}
Delay(t);
SetCtrlVal(p1h,P1_TOUT,0.0);
return 0;
}
int qescan() {
int i;
int npos,nref;
float wait;
int icwl;
double rcurr;
SetCtrlAttribute (p1h, P1_TIMER, ATTR_ENABLED, 0);
GetCtrlVal (p1h, P1_POSITION, &npos);
#ifdef MIKRO_COM
SetCtrlVal(p1h,P1_STAGELED,1);
for (i=0; i<2; i++) {
GetTableCellVal(p1h,P1_POINTS,MakePoint(i+1,npos+1),&CurPos[i]);
MIKRO_MoveTo(node[i],CurPos[i]);
MIKRO_GetPosition(node[i],&CurPos[i]);
SetCtrlVal(p1h,PosCtrl[i],CurPos[i]);
}
SetCtrlVal(p1h,P1_STAGELED,0);
#endif /* MIKRO_COM */
#ifdef uSMC_USB
SetCtrlVal(p1h,P1_STAGELED,1);
for (i=0; i<2; i++) {
GetTableCellVal(p1h,P1_POINTS,MakePoint(i+1,npos+1),&CurPos[i]);
uSMC_MoveTo(node[i],CurPos[i]);
uSMC_GetPosition (node[i],&CurPos[i]);
SetCtrlVal(p1h,PosCtrl[i],CurPos[i]);
}
SetCtrlVal(p1h,P1_STAGELED,0);
#endif /* uSMC_USB */
K617_trigger_mode(1);
#ifdef SP2155_PORT
SetCtrlVal (p1h, P1_GLED, 1);
SP2155_SetWavelength(1000);
SetCtrlVal (p1h, P1_GLED, 0);
#endif /* SP2155_PORT */
GetCtrlVal (p1h, P1_WAIT0, &wait);
if (MDelay(wait*60.)) return 1;
GetCtrlVal (p1h, P1_WAIT, &wait);
tokoff[npos]=getavg(ncurroff);
SetCtrlVal (p1h, P1_BGRCUR1,tokoff[npos]);
GetCtrlVal (p1h, P1_NREF, &nref);
for (i=0; i<nref; i++) {
icwl=wl[0][i];
#ifdef SP2155_PORT
SetCtrlVal (p1h, P1_GLED, 1);
SP2155_SetWavelength(icwl);
SetCtrlVal (p1h, P1_GLED, 0);
#endif /* SP2155_PORT */
SetCtrlVal (p1h, P1_CWL, icwl);
if (MDelay(wait)) return 1;
rcurr=getavg(ncurrmes);
SetCtrlVal (p1h, P1_CURR, rcurr);
wl[npos][i]=icwl;
tok[npos][i]=-(rcurr-tokoff[npos]);
}
if (plh[npos]) DeleteGraphPlot (p1h, P1_GSAMPLE, plh[npos], VAL_IMMEDIATE_DRAW);
plh[npos] = PlotXY (p1h, P1_GSAMPLE, wl[npos], tok[npos], nref, VAL_INTEGER, VAL_FLOAT,
VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_RED);
for (i=0; i<nref; i++)
if (tok[0][i]>1e-12)
qe[npos][i]=qe[0][i]*tok[npos][i]/tok[0][i];
else
qe[npos][i]=0.;
if (plqeh[npos]) DeleteGraphPlot (p1h, P1_GQE, plqeh[npos], VAL_IMMEDIATE_DRAW);
plqeh[npos] = PlotXY (p1h, P1_GQE, wl[npos], qe[npos], nref, VAL_INTEGER,
VAL_FLOAT, VAL_THIN_LINE, VAL_EMPTY_SQUARE,
VAL_SOLID, 1, VAL_BLUE);
K617_trigger_mode(0);
SetCtrlAttribute (p1h, P1_TIMER, ATTR_ENABLED, 1);
#ifdef MIKRO_COM
SetCtrlVal (p1h, P1_STAGELED, 1);
for (i=0; i<2; i++) {
MIKRO_GetPosition (node[i],&CurPos[i]);
SetCtrlVal (p1h,PosCtrl[i],CurPos[i]);
}
SetCtrlVal (p1h, P1_STAGELED, 0);
#endif /* MIKRO_COM */
#ifdef uSMC_USB
SetCtrlVal(p1h,P1_STAGELED,1);
for (i=0; i<2; i++) {
uSMC_GetPosition(node[i],&CurPos[i]);
SetCtrlVal(p1h,PosCtrl[i],CurPos[i]);
}
SetCtrlVal (p1h, P1_STAGELED, 0);
#endif /* uSMC_USB */
return 0;
}
int mcp_positions() {
FILE
*fp
=fopen("mcp_positions.txt","w");
int i=0,j=0;
int nx=10;
int ny=10;
int minx=130000;
int maxx=280000;
int miny=115000;
int maxy=265000;
for (i=0; i<nx+1; i++) for (j=0; j<ny+1; j++)
fprintf(fp
,"%d %d\n",minx
+i
*(maxx
-minx
)/nx
, miny
+j
*(maxy
-miny
)/ny
);
return 0;
}
int __stdcall WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpszCmdLine, int nCmdShow) {
int i,j,iret,nb;
int npos,nref,nrows;
int igr,iwl0,idwl,inwl,ilwl,icwl;
int scan_on;
int irange,vsource;
float vout,wait;
double rcurr;
int hdr[10];
float *fhdr;
float sdata[5];
// char cpref[100];
char pfile[300];
FILE *fp;
scan_on=0;
fhdr=(float *)&hdr[0];
if (InitCVIRTE (hInstance, 0, 0) == 0) return -1; /* out of memory */
mcp_positions();
for (i=0; i<MAXXY; i++) {
tokoff[i]=0;
plh[i]=0;
plqeh[i]=0;
for (j=0; j<MAXWL; j++) {
tok[i][j]=0.;
wl[i][j]=0;
qe[i][j]=0.;
}
}
#ifdef MIKRO_COM
MIKRO_Open(MIKRO_COM);
for (i=0; i<3; i++) {
node[i]=i+1;
MIKRO_Init(node[i],0);
}
#endif /* MIKRO_COM */
#ifdef uSMC_USB
uSMC_Open();
for (i=0; i<3; i++) {
node[i]=uSMC_FindSerial(serials[i])+1;
uSMC_Init(node[i],1);
}
#endif /* uSMC_USB */
#ifdef SP2155_PORT
SP2155_Open (SP2155_PORT);
#endif /* SP2155_PORT */
if ((p1h = LoadPanel (0, "qe2d_ui.uir", P1)) < 0) return -1;
DisplayPanel (p1h);
K617_open(1,PROLOGIX_PORT,K617_ADDR,0,13);
K617_clear();
GetCtrlVal(p1h,P1_RANGE_R,&irange);
K617_current_mode(irange);
K617_zero_correct(1);
K617_data_format(0);
K617_trigger_mode(1);
#ifdef SP2155_PORT
igr=SP2155_GetGrating();
SetCtrlVal (p1h, P1_GRATING, igr);
icwl = SP2155_GetWavelength ();
SetCtrlVal (p1h, P1_CWL, icwl);
#endif /* SP2155_PORT */
QueueUserEvent (1000, p1h, P1_VOUT);
QueueUserEvent (1000, p1h, P1_VSOURCE);
QueueUserEvent (1000, p1h, P1_TIMER);
QueueUserEvent (1000, p1h, P1_WL0);
QueueUserEvent (1000, p1h, P1_POSITION);
fp
= fopen ("refqe.txt", "r");
nref=0;
while(1) {
iret
=fscanf (fp
, " %d %f", &wl
[0][nref
], &qe
[0][nref
]);
if (iret==2) nref++;
else break;
}
SetCtrlVal (p1h, P1_NREF, nref);
plqeh[0] = PlotXY (p1h, P1_GQE, wl[0], qe[0], nref, VAL_INTEGER,
VAL_FLOAT, VAL_THIN_LINE, VAL_EMPTY_SQUARE,
VAL_SOLID, 1, VAL_BLACK);
#ifdef MIKRO_COM
SetCtrlVal(p1h, P1_STAGELED,1);
for (i=0; i<3; i++) {
MIKRO_GetPosition(node[i],&CurPos[i]);
SetCtrlVal(p1h,PosCtrl[i],CurPos[i]);
}
SetCtrlVal(p1h,P1_STAGELED,0);
#endif /* MIKRO_COM */
#ifdef uSMC_USB
SetCtrlVal(p1h, P1_STAGELED,1);
for (i=0; i<3; i++) {
uSMC_GetPosition(node[i],&CurPos[i]);
SetCtrlVal(p1h,PosCtrl[i],CurPos[i]);
}
SetCtrlVal(p1h, P1_STAGELED,0);
#endif /* uSMC_USB */
do {
GetUserEvent (1, &pID, &rID);
switch (rID) {
case P1_TIMER:
rcurr=K617_get(NULL, NULL);
SetCtrlVal (p1h, P1_CURR, rcurr);
K617_status ();
SetCtrlVal (p1h, P1_VSOURCE, K617Stat.vsource_operate);
break;
case P1_GRATING:
GetCtrlVal (p1h, P1_GRATING, &igr);
#ifdef SP2155_PORT
SetCtrlVal (p1h, P1_GLED, 1);
SP2155_SetGrating (igr);
SetCtrlVal (p1h, P1_GLED, 0);
#endif /* SP2155_PORT */
MessagePopup ("Reminder", "1.Switch the light source!\n2.Adjust the slit!\n3.Load the range file!");
break;
case P1_WL0:
case P1_DWL:
case P1_NWL:
GetCtrlVal (p1h, P1_WL0, &iwl0);
GetCtrlVal (p1h, P1_DWL, &idwl);
GetCtrlVal (p1h, P1_NWL, &inwl);
ilwl=iwl0+(inwl-1)*idwl;
SetCtrlVal (p1h, P1_LWL, ilwl);
break;
case P1_CWL:
GetCtrlVal (p1h, P1_CWL, &icwl);
#ifdef SP2155_PORT
SetCtrlVal (p1h, P1_GLED, 1);
SP2155_SetWavelength (icwl);
SetCtrlVal (p1h, P1_GLED, 0);
#endif /* SP2155_PORT */
break;
case P1_SCAN:
SetCtrlAttribute (p1h, P1_TIMER, ATTR_ENABLED, 0);
GetCtrlVal (p1h, P1_WL0, &iwl0);
GetCtrlVal (p1h, P1_DWL, &idwl);
GetCtrlVal (p1h, P1_NWL, &inwl);
GetCtrlVal (p1h, P1_WAIT, &wait);
K617_trigger_mode(1);
MDelay(2);
for (i=0; i<inwl; i++) {
icwl=iwl0+i*idwl;
#ifdef SP2155_PORT
SetCtrlVal (p1h, P1_GLED, 1);
SP2155_SetWavelength(icwl);
SetCtrlVal (p1h, P1_GLED, 0);
#endif /* SP2155_PORT */
SetCtrlVal (p1h, P1_CWL, icwl);
MDelay(wait);
rcurr=K617_get(NULL, NULL);
SetCtrlVal (p1h, P1_CURR, rcurr);
wl[1][i]=icwl;
tok[1][i]=-rcurr;
}
if (plh[1]) DeleteGraphPlot (p1h, P1_GSAMPLE, plh[1], VAL_IMMEDIATE_DRAW);
plh[1] = PlotXY (p1h, P1_GSAMPLE, wl[1], tok[1], inwl, VAL_INTEGER, VAL_FLOAT,
VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_RED);
K617_trigger_mode(0);
SetCtrlAttribute (p1h, P1_TIMER, ATTR_ENABLED, 1);
break;
case P1_READREFCURR:
iret = FileSelectPopup ("", "*.dat", ".dat",
"Izberi binarno datoteko za meritve",
VAL_SELECT_BUTTON, 0, 0, 1, 1, pfile);
if (iret==1) {
fp
= fopen (pfile
, "rb");
nb
=fread(hdr
,sizeof(int),5,fp
);
//printf("[%d] %d %d %d %d %d\n",nb, hdr[0], hdr[1], hdr[2], hdr[3],hdr[4]);
switch (hdr[0]) {
case 3: {
nb
=fread(&hdr
[5],sizeof(int),5,fp
);
//printf("x=%u y=%u | i0=%g i1=%g t=%u\t",hdr[5],hdr[6],fhdr[7],fhdr[8],hdr[9]);
}
case 2:
case 1:
nref=hdr[1]/sizeof(int)/5-1;
if (hdr[0]==3) nref--;
//printf("%d [%d] x=%d y=%d\n",hdr[2],nref, hdr[3],hdr[4]);
for (i=0; i<nref; i++) {
nb
=fread(sdata
,sizeof(float),5,fp
);
wl[0][i]=sdata[0];
tok[0][i]=sdata[1];
qe[0][i]=sdata[3];
}
SetCtrlVal (p1h, P1_NREF, nref);
if (plqeh[0]) DeleteGraphPlot (p1h, P1_GQE, plqeh[0], VAL_IMMEDIATE_DRAW);
plqeh[0] = PlotXY (p1h, P1_GQE, wl[0], qe[0], nref, VAL_INTEGER,
VAL_FLOAT, VAL_THIN_LINE, VAL_EMPTY_SQUARE,
VAL_SOLID, 1, VAL_BLACK);
if (plh[0]) DeleteGraphPlot (p1h, P1_GREF, plh[0], VAL_IMMEDIATE_DRAW);
plh[0] = PlotXY (p1h, P1_GREF, wl[0], tok[0], nref, VAL_INTEGER, VAL_FLOAT,
VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_RED);
break;
}
}
break;
case P1_REFSCAN:
MessagePopup ("Reminder", "Switch the cable to measure the reference PMT current!");
SetCtrlAttribute (p1h, P1_TIMER, ATTR_ENABLED, 0);
#ifdef MIKRO_COM
SetCtrlVal (p1h, P1_STAGELED, 1);
for (i=0; i<2; i++) {
GetTableCellVal(p1h,P1_POINTS,MakePoint(i+1,1),&CurPos[i]);
MIKRO_MoveTo(node[i],CurPos[i]);
MIKRO_GetPosition (node[i],&CurPos[i]);
SetCtrlVal (p1h, PosCtrl[i],CurPos[i]);
}
SetCtrlVal (p1h, P1_STAGELED, 0);
#endif /* MIKRO_COM */
#ifdef uSMC_USB
SetCtrlVal (p1h, P1_STAGELED, 1);
for (i=0; i<2; i++) {
GetTableCellVal(p1h,P1_POINTS,MakePoint(i+1,1),&CurPos[i]);
uSMC_MoveTo(node[i],CurPos[i]);
uSMC_GetPosition (node[i],&CurPos[i]);
SetCtrlVal (p1h, PosCtrl[i],CurPos[i]);
}
SetCtrlVal (p1h, P1_STAGELED, 0);
#endif /* uSMC_USB */
K617_trigger_mode(1);
#ifdef SP2155_PORT
SetCtrlVal (p1h, P1_GLED, 1);
SP2155_SetWavelength(1000);
SetCtrlVal (p1h, P1_GLED, 0);
#endif /* SP2155_PORT */
GetCtrlVal (p1h, P1_WAIT0, &wait);
if (MDelay(wait*60.)) break;
GetCtrlVal (p1h, P1_WAIT, &wait);
tokoff[0]=getavg(ncurroff);
SetCtrlVal (p1h, P1_BGRCUR0,tokoff[0]);
for (i=0; i<nref; i++) {
icwl=wl[0][i];
#ifdef SP2155_PORT
SetCtrlVal (p1h, P1_GLED, 1);
SP2155_SetWavelength(icwl);
SetCtrlVal (p1h, P1_GLED, 0);
#endif /* SP2155_PORT */
SetCtrlVal (p1h, P1_CWL, icwl);
if (MDelay(wait)) break;
rcurr=getavg(ncurrmes);
SetCtrlVal (p1h, P1_CURR, rcurr);
tok[0][i]=-(rcurr-tokoff[0]);
}
if (plh[0]) DeleteGraphPlot (p1h, P1_GREF, plh[0], VAL_IMMEDIATE_DRAW);
plh[0] = PlotXY (p1h, P1_GREF, wl[0], tok[0], nref, VAL_INTEGER, VAL_FLOAT,
VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_RED);
K617_trigger_mode(0);
SetCtrlAttribute (p1h, P1_TIMER, ATTR_ENABLED, 1);
break;
case P1_QESCAN:
MessagePopup ("Reminder", "Switch the cable to measure the sample detector current!");
// moved the delay into qescan()
//GetCtrlVal (p1h, P1_WAIT0, &wait);
//if (MDelay(wait*60)) break;
// reset plots for new scan
for (i=1; i<MAXXY; i++) {
if(plqeh[i]) SetPlotAttribute (p1h, P1_GQE, plqeh[i], ATTR_TRACE_COLOR, VAL_LT_GRAY);
if(plh[i]) SetPlotAttribute (p1h, P1_GSAMPLE, plh[i], ATTR_TRACE_COLOR, VAL_LT_GRAY);
plh[i]=0;
plqeh[i]=0;
}
if(plqeh[0]) DeleteGraphPlot (p1h, P1_GQE, plqeh[0], VAL_IMMEDIATE_DRAW);
plqeh[0] = PlotXY (p1h, P1_GQE, wl[0], qe[0], nref, VAL_INTEGER,
VAL_FLOAT, VAL_THIN_LINE, VAL_EMPTY_SQUARE,
VAL_SOLID, 1, VAL_BLACK);
RefreshGraph (p1h, P1_GQE);
RefreshGraph (p1h, P1_GSAMPLE);
qescan();
break;
case P1_QESCANALL:
MessagePopup ("Reminder", "Switch the cable to measure the sample detector current!");
iret=FileSelectPopup ("", "*.dat", ".dat",
"Izberi binarno datoteko za meritve",
VAL_SAVE_BUTTON, 0, 0, 1, 1, pfile);
if (iret==1||(iret==2)) {
// moved the delay into qescan()
//GetCtrlVal (p1h, P1_WAIT0, &wait);
//if (MDelay(wait*60)) break;
// reset plots for new scan
/*DeleteGraphPlot (p1h, P1_GQE, -1, VAL_IMMEDIATE_DRAW);
plqeh[0] = PlotXY (p1h, P1_GQE, wl[0], qe[0], nref, VAL_INTEGER,
VAL_FLOAT, VAL_THIN_LINE, VAL_EMPTY_SQUARE,
VAL_SOLID, 1, VAL_BLACK);
DeleteGraphPlot (p1h, P1_GSAMPLE, -1, VAL_IMMEDIATE_DRAW);
for (i=0; i<MAXXY; i++) {
plh[i]=0;
plqeh[i]=0;
}
*/
for (i=1; i<MAXXY; i++) {
if(plqeh[i]) SetPlotAttribute (p1h, P1_GQE, plqeh[i], ATTR_TRACE_COLOR, VAL_LT_GRAY);
if(plh[i]) SetPlotAttribute (p1h, P1_GSAMPLE, plh[i], ATTR_TRACE_COLOR, VAL_LT_GRAY);
plh[i]=0;
plqeh[i]=0;
}
if(plqeh[0]) DeleteGraphPlot (p1h, P1_GQE, plqeh[0], VAL_IMMEDIATE_DRAW);
plqeh[0] = PlotXY (p1h, P1_GQE, wl[0], qe[0], nref, VAL_INTEGER,
VAL_FLOAT, VAL_THIN_LINE, VAL_EMPTY_SQUARE,
VAL_SOLID, 1, VAL_BLACK);
RefreshGraph (p1h, P1_GQE);
RefreshGraph (p1h, P1_GSAMPLE);
fp
= fopen (pfile
, "wb");
GetNumTableRows(p1h, P1_POINTS, &nrows);
for (j=1; j<nrows; j++) {
SetCtrlVal (p1h, P1_POSITION, j);
SetTableSelection (p1h, P1_POINTS, MakeRect(j+1,1,1,2));
GetTableCellVal (p1h, P1_POINTS, MakePoint (1,j+1), &CurPos[0]);
GetTableCellVal (p1h, P1_POINTS, MakePoint (2,j+1), &CurPos[1]);
if (CurPos[0] <= 0 && CurPos[1]<= 0) {
j=nrows ;
continue;
}
iret=qescan();
if (iret) break;
GetCtrlVal (p1h, P1_X, &CurPos[0]);
GetCtrlVal (p1h, P1_Y, &CurPos[1]);
hdr[0]=3;//recid 1,2= hdr len=5, 3=hdr len=10
hdr[1]=(nref*5+10)*sizeof(int);
hdr[2]=j;
hdr[3]=CurPos[0];
hdr[4]=CurPos[1];
GetTableCellVal (p1h, P1_POINTS, MakePoint (1,j+1), &CurPos[0]);
GetTableCellVal (p1h, P1_POINTS, MakePoint (2,j+1), &CurPos[1]);
hdr[5]=CurPos[0];
hdr[6]=CurPos[1];
fhdr[7]=tokoff[0];
fhdr[8]=tokoff[j];
//printf("--> %d %d %d %d %d\n", hdr[0],hdr[1],hdr[2],hdr[3],hdr[4]);
fwrite (hdr
, sizeof(int), 10, fp
);
for (i=0; i<nref; i++) {
sdata[0]=wl[0][i];
sdata[1]=tok[0][i];
sdata[2]=tok[j][i];
sdata[3]=qe[0][i];
sdata[4]=qe[j][i];
fwrite (sdata
, sizeof(float), 5, fp
);
}
}
}
break;
case P1_HO:
// if (!daq_on) {
SetWaitCursor (1);
#ifdef MIKRO_COM
SetCtrlVal(p1h,P1_STAGELED,1);
for (i=0; i<3; i++) MIKRO_ReferenceMove(node[i]);
SetCtrlVal(p1h,P1_STAGELED,0);
#endif /* MIKRO_COM */
#ifdef uSMC_USB
SetCtrlVal(p1h,P1_STAGELED,1);
for (i=0; i<3; i++)uSMC_ReferenceMove(node[i]);
SetCtrlVal(p1h,P1_STAGELED,0);
#endif /* uSMC_USB */
SetWaitCursor (0);
// }
break;
case P1_GOXY:
GetCtrlVal(p1h,P1_POSITION,&npos);
#ifdef MIKRO_COM
SetCtrlVal(p1h,P1_STAGELED,1);
for (i=0; i<2; i++) {
GetTableCellVal(p1h,P1_POINTS,MakePoint(i+1,npos+1),&CurPos[i]);
MIKRO_MoveTo(node[i],CurPos[i]);
MIKRO_GetPosition (node[i],&CurPos[i]);
SetCtrlVal (p1h,PosCtrl[i],CurPos[i]);
}
SetCtrlVal(p1h,P1_STAGELED,0);
#endif /* MIKRO_COM */
#ifdef uSMC_USB
SetCtrlVal(p1h,P1_STAGELED,1);
for (i=0; i<2; i++) {
GetTableCellVal(p1h,P1_POINTS,MakePoint(i+1,npos+1),&CurPos[i]);
uSMC_MoveTo(node[i],CurPos[i]);
uSMC_GetPosition (node[i],&CurPos[i]);
SetCtrlVal (p1h,PosCtrl[i],CurPos[i]);
}
SetCtrlVal(p1h,P1_STAGELED,0);
#endif /* uSMC_USB */
break;
case P1_ZC:
K617_zero_correct(1);
break;
case P1_VOUT:
GetCtrlVal (p1h, P1_VOUT, &vout);
K617_vsource_set (vout);
break;
case P1_VSOURCE:
GetCtrlVal (p1h, P1_VSOURCE, &vsource);
K617_vsource_operate (vsource);
break;
case P1_RANGE_R:
GetCtrlVal(p1h,P1_RANGE_R,&irange);
K617_current_mode(irange);
break;
case P1_LOADPOINTS:
iret = FileSelectPopup ("", "*.txt", ".txt",
"Izberi datoteko s pozicijami",
VAL_LOAD_BUTTON, 0, 0, 1, 0, pfile);
if (iret==1) {
i=1;
while(1) {
iret
=fscanf (fp
, " %d %d", &CurPos
[0], &CurPos
[1]);
if (iret==2) {
SetTableCellVal (p1h, P1_POINTS, MakePoint (1,i), CurPos[0]);
SetTableCellVal (p1h, P1_POINTS, MakePoint (2,i), CurPos[1]);
i++;
} else
break;
}
}
break;
case P1_SAVEPOINTS:
iret=FileSelectPopup ("", "*.txt", ".txt",
"Izberi datoteko s pozicijami",
VAL_SAVE_BUTTON, 0, 0, 1, 1, pfile);
if ((iret==1)||(iret==2)) {
GetNumTableRows(p1h, P1_POINTS, &i);
for (j=0; j<i;) {
j++;
GetTableCellVal (p1h, P1_POINTS, MakePoint (1,j), &CurPos[0]);
GetTableCellVal (p1h, P1_POINTS, MakePoint (2,j), &CurPos[1]);
fprintf(fp
,"%d %d\n", CurPos
[0], CurPos
[1]);
}
}
break;
case P1_SAVEQE:
iret=FileSelectPopup ("", "*.txt", ".txt",
"Izberi datoteko za meritve",
VAL_SAVE_BUTTON, 0, 0, 1, 1, pfile);
if (iret==1||(iret==2)) {
GetCtrlVal (p1h, P1_POSITION, &npos);
for (i=0; i<nref; i++)
wl[0][i],tok[0][i],tok[npos][i],qe[0][i],qe[npos][i]);
}
break;
case P1_POSITION:
GetCtrlVal(p1h,P1_POSITION,&npos);
SetTableSelection (p1h, P1_POINTS, MakeRect(npos+1,1,1,2));
break;
case P1_READQE:
iret = FileSelectPopup ("", "*.txt", ".txt",
"Izberi referencni QE",
VAL_LOAD_BUTTON, 0, 0, 1, 0, pfile);
if (iret==1) {
nref=0;
while(1) {
iret
=fscanf (fp
, " %d %f", &wl
[0][nref
], &qe
[0][nref
]);
if (iret==2) nref++;
else break;
}
SetCtrlVal (p1h, P1_NREF, nref);
if (plqeh[0]) DeleteGraphPlot (p1h, P1_GQE, plqeh[0], VAL_IMMEDIATE_DRAW);
plqeh[0] = PlotXY (p1h, P1_GQE, wl[0], qe[0], nref, VAL_INTEGER,
VAL_FLOAT, VAL_THIN_LINE, VAL_EMPTY_SQUARE,
VAL_SOLID, 1, VAL_BLACK);
}
break;
case P1_GLED:
break;
case P1_ZSET:
GetCtrlVal(p1h,P1_ZSETTO,&CurPos[2]);
#ifdef MIKRO_COM
SetCtrlVal(p1h,P1_STAGELED,1);
MIKRO_MoveTo(node[2],CurPos[2]);
MIKRO_GetPosition (node[2],&CurPos[2]);
SetCtrlVal (p1h,PosCtrl[2],CurPos[2]);
SetCtrlVal(p1h,P1_STAGELED,0);
#endif /* MIKRO_COM */
#ifdef uSMC_USB
SetCtrlVal(p1h,P1_STAGELED,1);
uSMC_MoveTo(node[2],CurPos[2]);
uSMC_GetPosition (node[2],&CurPos[2]);
SetCtrlVal (p1h,PosCtrl[2],CurPos[2]);
SetCtrlVal(p1h,P1_STAGELED,0);
#endif /* uSMC_USB */
break;
}
} while ((rID != P1_EXIT)||scan_on);
DiscardPanel (p1h);
K617_trigger_mode (0);
K617_close ();
#ifdef SP2155_PORT
SP2155_Close ();
#endif /* SP2155_PORT */
#ifdef MIKRO_COM
MIKRO_Close ();
#endif /* MIKRO_COM */
#ifdef uSMC_USB
for (i=0; i<3; i++) uSMC_PowerOff(node[i]);
uSMC_Close();
#endif /* uSMC_USB */
return 0;
}