Subversion Repositories f9daq

Rev

Rev 310 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

#include <userint.h>
#include "K2231A-ctrl.h"
#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
#include <visa.h>
//#include <K2231A.h>


static ViStatus istat;
static ViSession RedPHandle,RMHandle;
int K2231A_DeviceId=0;
 

   


int K2231A_Initialize()
{
       
return 0;
}


int K2231A_Test()
{
  char str[0xFF];
  printf("K2231A_ModelNameQ %s\n",str);
        return TRUE;
}

int K2231A_Close()
{
       
       
        return 0;
}

int K2231A_Open()
{
        K2231A_Initialize();
        return TRUE;
}

int K2231A_OpenHandle(char * dev, char * usb   ){
                                 
K2231A_DeviceId =  0;
return K2231A_DeviceId;
}




/****************TOKOVI (potek, kako se spreminjajo tokovi s casom)****************/

void K2231A_ReadCurrent(double * I , double * V, unsigned char * mode, unsigned char *onoff){
         int iRet;
         char ch=0;
         double Voltage;
     double Current;
         char cv_cc;
       
                           
         //iRet = K2231A_TimeOut(K2231A_DeviceId, 1);
         //iRet = K2231A_Refresh(K2231A_DeviceId);

         
         //iRet = K2231A_MainOutput(K2231A_DeviceId, Output);
     //iRet = K2231A_MainOutputQ(K2231A_DeviceId, &Output);
         for (ch=0;ch<3;ch++){
           
         
           //iRet = K2231A_MoniDataQ(K2231A_DeviceId, ch+1, &Voltage, &Current, &cv_cc);
           //if (debug) printf("[%d] %g V %g A CVCC %d\t",ch, Voltage, Current, cv_cc );
           I[ch]= Current;        //s tem definiras kaj sta I in V.
           V[ch]= Voltage;
           
           
         }
         //if (debug) printf("\n");
       
   
        return;

       
}


#ifdef MAIN

#include <ansi_c.h>
#include <utility.h>


#define RSTREG(a,x) (a&=(~(x)))
#define SETREG(a,x) (a|=x)

int gLogToFile;
int vmon[3]={P1_VMON_1,P1_VMON_2,P1_VMON_3 };
int imon[3]={P1_IMON_1,P1_IMON_2,P1_IMON_3 };
int vset[3]={P1_U_1,P1_U_2,P1_U_3 };
int iset[3]={P1_I_1,P1_I_2,P1_I_3 };
int radiob[3]={P1_BOX_1,P1_BOX_2,P1_BOX_3 };

int cvcc[3]={P1_CVCC_1,P1_CVCC_2,P1_CVCC_3 };
 
int gMask=0xF;

int pnl;
FILE *gFp;
int main (int argc, char *argv[])
{
        int DeviceId=0;
        unsigned char MainOutput, preset;
  double Voltage, Current, tinterval;
  char str[0xFF];
        if (InitCVIRTE (0, argv, 0) == 0)
                return -1;      /* out of memory */
  SetStdioPort (CVI_STDIO_WINDOW);
        SetStdioWindowOptions (1000, 0, 0);
  SetStdioWindowSize (150, 600);
  SetStdioWindowPosition (825, 20);

  istat = viOpenDefaultRM (&RMHandle);
  if (RMHandle) istat = viOpen (RMHandle, "TCPIP0::178.172.43.91::5000::SOCKET", VI_NULL, VI_NULL, &RedPHandle);
  if (RedPHandle){
  istat = viSetAttribute (RedPHandle, VI_ATTR_TCPIP_KEEPALIVE, VI_TRUE);
  istat = viSetAttribute (RedPHandle, VI_ATTR_TCPIP_NODELAY, VI_TRUE);
  istat = viSetAttribute (RedPHandle, VI_ATTR_TERMCHAR, '\n');
  istat = viSetAttribute (RedPHandle, VI_ATTR_TERMCHAR_EN, VI_TRUE);
  istat = viSetAttribute (RedPHandle, VI_ATTR_TMO_VALUE, 1000);
  }
       
       
       
       
        if ((pnl = LoadPanel (0, "K2231A-ctrl.uir", P1)) < 0) return -1;

  if (K2231A_Open()== 0) MessagePopup("Error","Cannot open USB device");  
  //DeviceId = K2231A_OpenHandle ("PW-A","USB:1:1");
  if (K2231A_Test() == 0 )MessagePopup("DLL error","Dll Error");
  if (DeviceId < 0) MessagePopup("Error","Not Connected");
  printf("TMI device ID %d\n",K2231A_DeviceId);
   
  //K2231A_MainOutputQ(K2231A_DeviceId, &MainOutput);
  SetCtrlVal(pnl, P1_ONOFF, MainOutput);
  GetCtrlVal(pnl, P1_TINTERVAL, &tinterval);
  SetCtrlAttribute (pnl, P1_TIMER, ATTR_INTERVAL, tinterval);
        //K2231A_PresetQ(K2231A_DeviceId, &preset);
  SetCtrlVal(pnl, P1_PRESET, preset);
        SetTraceAttributeEx (pnl, P1_GRAPH_IMON, 1, ATTR_TRACE_LG_TEXT, "CH 30V");
        SetTraceAttributeEx (pnl, P1_GRAPH_IMON, 2, ATTR_TRACE_LG_TEXT, "CH 30V");
        SetTraceAttributeEx (pnl, P1_GRAPH_IMON, 3, ATTR_TRACE_LG_TEXT, "CH 5V");
       
        SetTraceAttributeEx (pnl, P1_GRAPH_VMON, 1, ATTR_TRACE_LG_TEXT, "CH 30V");
        SetTraceAttributeEx (pnl, P1_GRAPH_VMON, 2, ATTR_TRACE_LG_TEXT, "CH 30V");
        SetTraceAttributeEx (pnl, P1_GRAPH_VMON, 3, ATTR_TRACE_LG_TEXT, "CH 5V");
 for (unsigned char  ch=0;ch<4;ch++){
    int ison;
    //K2231A_VoltageQ(K2231A_DeviceId, ch+1, preset, &Voltage);
    //K2231A_CurrentQ(K2231A_DeviceId, ch+1, preset, &Current);
    SetCtrlVal(pnl, vset[ch], Voltage);
    SetCtrlVal(pnl, iset[ch], Current);
    GetCtrlVal(pnl, radiob[ch], &ison);
    if (ison) SETREG(gMask,(1<<ch)); else RSTREG(gMask,(1<<ch));
  }
         
  DisplayPanel (pnl);
        RunUserInterface ();
        DiscardPanel (pnl);
   K2231A_Close();

   if (gFp)  fclose(gFp);
        return 0;
}




int CVICALLBACK SwitchOnOffCB (int panel, int control, int event,
                               void *callbackData, int eventData1, int eventData2)
{
  unsigned char state;
  switch (event)
  {
    case EVENT_COMMIT:
      GetCtrlVal(panel, control, &state);
      //K2231A_MainOutput(K2231A_DeviceId, state);
      break;
  }
  return 0;
}

int CVICALLBACK SetCB (int panel, int control, int event,
                       void *callbackData, int eventData1, int eventData2)
{
 
 
  switch (event)
  {
    case EVENT_COMMIT:{
                        unsigned char preset;
      //K2231A_PresetQ(K2231A_DeviceId, &preset);
      SetCtrlVal(pnl, P1_PRESET, preset);  
      for (unsigned char ch = 0; ch<3;ch++){
        //printf("ch %d %x\n", ch, gMask);
        if (gMask & (1<<ch)){
          double Voltage;
          double Current;
                                       
          GetCtrlVal(panel, vset[ch], &Voltage);
          GetCtrlVal(panel, iset[ch], &Current);
          //printf("->ch %d VSet %g Iset %g\n", ch, Voltage, Current);
          //K2231A_Voltage(K2231A_DeviceId, ch+1, preset, Voltage);
          //K2231A_VoltageQ(K2231A_DeviceId, ch+1, preset, &Voltage);
          //K2231A_Current(K2231A_DeviceId, ch+1, preset, Current);
          //K2231A_CurrentQ(K2231A_DeviceId, ch+1, preset, &Current);
          //printf("<-ch %d VSet %g Iset %g\n", ch, Voltage, Current);  
         
        }
      }  
                }
      break;
  }
  return 0;
}

int CVICALLBACK ReadCB (int panel, int control, int event,
                        void *callbackData, int eventData1, int eventData2)
{
 
   int iRet;
         char ch=0;
         double Voltage;
   double Current;
         char cv_cc;
  switch (event)
  {
    case EVENT_COMMIT:
      for (ch = 0; ch<3;ch++){
        if (gMask & (1<<ch)){
          //iRet = K2231A_TimeOut(K2231A_DeviceId, 1);
                //iRet = K2231A_Refresh(K2231A_DeviceId);
          //iRet = K2231A_MoniDataQ(K2231A_DeviceId, ch+1, &Voltage, &Current, &cv_cc);
          //printf("ch %d VSet %g Iset %g\n", ch, Voltage, Current);
          SetCtrlVal(panel, vmon[ch], Voltage);
          SetCtrlVal(panel, imon[ch], Current);
          SetCtrlVal(panel, cvcc[ch], cv_cc);
        }
      }  
      break;
  }
  return 0;
}

int CVICALLBACK SetIntervalCB (int panel, int control, int event,
                               void *callbackData, int eventData1, int eventData2) {
  double tinterval;
  switch (event) {
    case EVENT_COMMIT:
      GetCtrlVal(panel, control, &tinterval);
      SetCtrlAttribute (panel, P1_TIMER, ATTR_INTERVAL, tinterval);
      break;
  }
  return 0;
}

int CVICALLBACK TimerOnOffCB (int panel, int control, int event,
                              void *callbackData, int eventData1, int eventData2)
{
  int state;
  switch (event)
  {
    case EVENT_COMMIT:
      GetCtrlVal(panel, control, &state);
      if (state){
         ResumeTimerCallbacks();
      } else {
         SuspendTimerCallbacks ();
         printf ("Disabling timer....\n");
      }
      break;
  }
  return 0;
}

int CVICALLBACK ExitCB (int panel, int control, int event,
                        void *callbackData, int eventData1, int eventData2)
{
  switch (event)
  {
    case EVENT_COMMIT:
      QuitUserInterface(0);
      break;
  }
  return 0;
}

int CVICALLBACK SetMaskCB (int panel, int control, int event,
                           void *callbackData, int eventData1, int eventData2)
{ int ison;
  switch (event)
  {
                int i=0;       
    case EVENT_COMMIT:
      GetCtrlVal(panel, control, &ison);
      for (i=0;i<3;i++) if (control == radiob[i]) break;
      if (ison) SETREG(gMask,(1<<i)); else RSTREG(gMask,(1<<i));
      break;
  }
  return 0;
}

int CVICALLBACK LogToFileCB (int panel, int control, int event,
                             void *callbackData, int eventData1, int eventData2)
{
 
  switch (event)
  {
    case EVENT_COMMIT:
      GetCtrlVal(panel, control, &gLogToFile);
     
      break;
  }
  return 0;
}

int CVICALLBACK TimerCB (int panel, int control, int event,
                         void *callbackData, int eventData1, int eventData2)
{
  switch (event)
  {
     
      unsigned char   ch;
      double current[3];
      double voltage[3];
      char cv_cc;
    case EVENT_TIMER_TICK:
      for (ch = 0; ch<3;ch++){
        if (gMask & (1<<ch)){
          //K2231A_TimeOut(K2231A_DeviceId, 1);
                //K2231A_Refresh(K2231A_DeviceId);
          //K2231A_MoniDataQ(K2231A_DeviceId, ch+1, &voltage[ch], &current[ch], &cv_cc);
          SetCtrlVal(panel, vmon[ch], voltage[ch]);
          SetCtrlVal(panel, imon[ch], current[ch]);
          SetCtrlVal(panel, cvcc[ch], cv_cc);
          if (gLogToFile){
              if (!gFp)  {
                gFp= fopen("pw18-1.8aq.log","w");
                fprintf(gFp,"#time\tch\tU\tI\tCV_CC\n");
              }  
              fprintf(gFp,"%ul\t%d\t%g\t%g\t%d\n",  time(NULL), ch+1, voltage[ch], current[ch], cv_cc);
          }
        }
      }
      PlotStripChart (panel, P1_GRAPH_IMON, current, 3, 0, 0, VAL_DOUBLE);
                        PlotStripChart (panel, P1_GRAPH_VMON, voltage, 3, 0, 0, VAL_DOUBLE);
      break;
  }
  return 0;
}

int CVICALLBACK SetPresetCB (int panel, int control, int event,
                                                                                                                 void *callbackData, int eventData1, int eventData2) {

        switch (event) {
                case EVENT_COMMIT:{
                        unsigned char preset;
                        double Voltage, Current;
                        GetCtrlVal(panel, control, &preset);
                        //K2231A_Preset(K2231A_DeviceId, preset);
                       
                        for (unsigned char  ch=0;ch<3;ch++){
        int ison;
        //K2231A_VoltageQ(K2231A_DeviceId, ch+1, preset, &Voltage);
        //K2231A_CurrentQ(K2231A_DeviceId, ch+1, preset, &Current);
        SetCtrlVal(pnl, vset[ch], Voltage);
        SetCtrlVal(pnl, iset[ch], Current);
        GetCtrlVal(pnl, radiob[ch], &ison);
        if (ison) SETREG(gMask,(1<<ch)); else RSTREG(gMask,(1<<ch));
      }
                        break;
                }
        }
        return 0;
}


#endif MAIN