Subversion Repositories f9daq

Rev

Rev 280 | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. #include <userint.h>
  2. #include "pw18-1.8aq-ctrl.h"
  3. #include <stdlib.h>
  4. #include <stdio.h>
  5. #include <windows.h>
  6. #include <pw18-1.8aq.h>
  7.  
  8. int TMI_DeviceId=0;
  9.  
  10.  
  11.    
  12.  
  13.  
  14. int TMI_Initialize()
  15. {
  16.        
  17.         TMI_HandleOpen          = NULL;
  18.         TMI_HandleClose         = NULL;
  19.         TMI_TimeOut                     = NULL;
  20.         TMI_Refresh                     = NULL;
  21.         TMI_ModelNameQ          = NULL;
  22.         TMI_Voltage                     = NULL;
  23.         TMI_VoltageQ                    = NULL;
  24.         TMI_Current                     = NULL;
  25.         TMI_CurrentQ                    = NULL;
  26.         TMI_MainOutput          = NULL;
  27.         TMI_MainOutputQ         = NULL;
  28.         TMI_Delay                               = NULL;
  29.         TMI_DelayQ                      = NULL;
  30.         TMI_OutputSel                   = NULL;
  31.         TMI_OutputSelQ          = NULL;
  32.         TMI_TrackingOnOff               = NULL;
  33.         TMI_TrackingOnOffQ      = NULL;
  34.         TMI_TrackingMode                = NULL;
  35.         TMI_TrackingModeQ               = NULL;
  36.         TMI_TrackingGroup               = NULL;
  37.         TMI_TrackingGroupQ      = NULL;
  38.         TMI_TrackingData                = NULL;
  39.         TMI_TrackingDataQ               = NULL;
  40.         TMI_DelayTime                   = NULL;
  41.         TMI_DelayTimeQ          = NULL;
  42.         TMI_Display                     = NULL;
  43.         TMI_DisplayQ                    = NULL;
  44.         TMI_Preset                      = NULL;
  45.         TMI_PresetQ                     = NULL;
  46.         TMI_MoniDataQ                   = NULL;
  47.         TMI_AdrQ                                = NULL;
  48.         TMI_RemoteLocal         = NULL;
  49.         TMI_LocalLockOut                = NULL;
  50.         TMI_DataBackUp          = NULL;
  51.         TMI_SRQEnable                   = NULL;
  52.         TMI_AllPresetQ          = NULL;
  53.         TMI_AllPresetQS         = NULL;
  54.         TMI_Out                         = NULL;
  55.         TMI_In                          = NULL;
  56.         return 0;
  57. }
  58.  
  59.  
  60. int TMI_Test()
  61. {
  62.         char str[0xFF];
  63.         if (TMI_HandleOpen              == NULL ) return FALSE;
  64.         if (TMI_HandleClose             == NULL ) return FALSE;
  65.   if (TMI_TimeOut                       == NULL ) return FALSE;
  66.         if (TMI_Refresh                 == NULL ) return FALSE;
  67.         if (TMI_ModelNameQ              == NULL ) return FALSE;
  68.         if (TMI_Voltage                 == NULL ) return FALSE;
  69.         if (TMI_VoltageQ                        == NULL ) return FALSE;
  70.         if (TMI_Current                 == NULL ) return FALSE;
  71.         if (TMI_CurrentQ                        == NULL ) return FALSE;
  72.         if (TMI_MainOutput              == NULL ) return FALSE;
  73.         if (TMI_MainOutputQ             == NULL ) return FALSE;
  74.         if (TMI_Delay                           == NULL ) return FALSE;
  75.         if (TMI_DelayQ                  == NULL ) return FALSE;
  76.         if (TMI_OutputSel                       == NULL ) return FALSE;
  77.         if (TMI_OutputSelQ              == NULL ) return FALSE;
  78.         if (TMI_TrackingOnOff           == NULL ) return FALSE;
  79.         if (TMI_TrackingOnOffQ  == NULL ) return FALSE;
  80.         if (TMI_TrackingMode            == NULL ) return FALSE;
  81.         if (TMI_TrackingModeQ           == NULL ) return FALSE;
  82.         if (TMI_TrackingGroup           == NULL ) return FALSE;
  83.         if (TMI_TrackingGroupQ  == NULL ) return FALSE;
  84.         if (TMI_TrackingData            == NULL ) return FALSE;
  85.         if (TMI_TrackingDataQ           == NULL ) return FALSE;
  86.         if (TMI_DelayTime                       == NULL ) return FALSE;
  87.         if (TMI_DelayTimeQ              == NULL ) return FALSE;
  88.         if (TMI_Display                 == NULL ) return FALSE;
  89.         if (TMI_DisplayQ                        == NULL ) return FALSE;
  90.         if (TMI_Preset                  == NULL ) return FALSE;
  91.         if (TMI_PresetQ                 == NULL ) return FALSE;
  92.         if (TMI_MoniDataQ                       == NULL ) return FALSE;
  93.         if (TMI_AdrQ                            == NULL ) return FALSE;
  94.         if (TMI_RemoteLocal             == NULL ) return FALSE;
  95.         if (TMI_LocalLockOut            == NULL ) return FALSE;
  96.         if (TMI_DataBackUp              == NULL ) return FALSE;
  97.         if (TMI_SRQEnable                       == NULL ) return FALSE;
  98.         if (TMI_AllPresetQ              == NULL ) return FALSE;
  99.         if (TMI_AllPresetQS             == NULL ) return FALSE;
  100.         if (TMI_Out                             == NULL ) return FALSE;
  101.         if (TMI_In                              == NULL ) return FALSE;
  102.   TMI_ModelNameQ(TMI_DeviceId, str);
  103.   printf("TMI_ModelNameQ %s\n",str);
  104.         return TRUE;
  105. }
  106.  
  107. int TMI_Close()
  108. {
  109.        
  110.  
  111.         if(TMI_APIDll != NULL) {
  112.         if (TMI_DeviceId){
  113.          
  114.       TMI_RemoteLocal(TMI_DeviceId);
  115.       TMI_HandleClose(TMI_DeviceId);
  116.       TMI_DeviceId = 0;
  117.         }  
  118.                 FreeLibrary(TMI_APIDll);
  119.         }
  120.         return 0;
  121. }
  122.  
  123. int TMI_Open()
  124. {
  125.         TMI_Initialize();
  126.   printf("FALSE =%d TRUE=%d\n", FALSE, TRUE);
  127.         TMI_APIDll=LoadLibrary((LPCSTR)"TMI_API.dll");
  128.         if( TMI_APIDll == NULL )
  129.                 return FALSE;
  130.  
  131.         TMI_HandleOpen = (int  ( __stdcall*  )( char * , char * )) GetProcAddress(TMI_APIDll , "TMI_HandleOpen");
  132.         if( TMI_HandleOpen == NULL )
  133.            return FALSE;
  134.  
  135.         TMI_TimeOut = (int  ( __stdcall*  )( int , int )) GetProcAddress(TMI_APIDll , "TMI_TimeOut");
  136.         if( TMI_TimeOut == NULL )
  137.                 return FALSE;
  138.  
  139.         TMI_Refresh = (int  ( __stdcall*  )( int )) GetProcAddress(TMI_APIDll , "TMI_Refresh");
  140.         if( TMI_Refresh == NULL )
  141.                 return FALSE;
  142.  
  143.         TMI_ModelNameQ = (int  ( __stdcall*  )( int , char * )) GetProcAddress(TMI_APIDll , "TMI_ModelNameQ");
  144.         if( TMI_ModelNameQ == NULL )                            
  145.                 return FALSE;
  146.  
  147.         TMI_Voltage = (int  ( __stdcall*  )( int , unsigned char , unsigned char , double )) GetProcAddress(TMI_APIDll , "TMI_Voltage");
  148.         if( TMI_Voltage == NULL )
  149.                 return FALSE;
  150.  
  151.         TMI_VoltageQ = (int  ( __stdcall*  )( int , unsigned char , unsigned char , double * )) GetProcAddress(TMI_APIDll , "TMI_VoltageQ");
  152.         if( TMI_VoltageQ == NULL )
  153.                 return FALSE;
  154.  
  155.         TMI_Current = (int  ( __stdcall*  )(int , unsigned char , unsigned char , double )) GetProcAddress(TMI_APIDll , "TMI_Current");
  156.         if( TMI_Current == NULL )
  157.                 return FALSE;
  158.  
  159.         TMI_CurrentQ = (int  ( __stdcall*  )(int , unsigned char , unsigned char , double * )) GetProcAddress(TMI_APIDll , "TMI_CurrentQ");
  160.         if( TMI_CurrentQ == NULL )
  161.                 return FALSE;
  162.  
  163.         TMI_MainOutput = (int  ( __stdcall*  )(int , unsigned char )) GetProcAddress(TMI_APIDll , "TMI_MainOutput");
  164.         if( TMI_MainOutput == NULL )
  165.                 return FALSE;
  166.  
  167.         TMI_MainOutputQ = (int  ( __stdcall*  )(int , unsigned char * )) GetProcAddress(TMI_APIDll , "TMI_MainOutputQ");
  168.         if( TMI_MainOutputQ == NULL )
  169.                 return FALSE;
  170.  
  171.         TMI_Delay = (int  ( __stdcall*  )(int , unsigned char )) GetProcAddress(TMI_APIDll , "TMI_Delay");
  172.         if( TMI_Delay == NULL )
  173.                 return FALSE;
  174.  
  175.         TMI_DelayQ = (int  ( __stdcall*  )(int , unsigned char * )) GetProcAddress(TMI_APIDll , "TMI_DelayQ");
  176.         if( TMI_DelayQ == NULL )
  177.                 return FALSE;
  178.  
  179.         TMI_OutputSel = (int  ( __stdcall*  )(int , unsigned char , unsigned char )) GetProcAddress(TMI_APIDll , "TMI_OutputSel");
  180.         if( TMI_OutputSel == NULL )
  181.                 return FALSE;
  182.  
  183.         TMI_OutputSelQ = (int  ( __stdcall*  )(int , unsigned char , unsigned char * )) GetProcAddress(TMI_APIDll , "TMI_OutputSelQ");
  184.         if( TMI_OutputSelQ == NULL )
  185.                 return FALSE;
  186.  
  187.         TMI_TrackingOnOff = (int  ( __stdcall*  )(int , unsigned char )) GetProcAddress(TMI_APIDll , "TMI_TrackingOnOff");
  188.         if( TMI_TrackingOnOff == NULL )
  189.                 return FALSE;
  190.  
  191.         TMI_TrackingOnOffQ = (int  ( __stdcall*  )(int , unsigned char * )) GetProcAddress(TMI_APIDll , "TMI_TrackingOnOffQ");
  192.         if( TMI_TrackingOnOffQ == NULL )
  193.                 return FALSE;
  194.  
  195.         TMI_TrackingMode = (int  ( __stdcall*  )(int , unsigned char )) GetProcAddress(TMI_APIDll , "TMI_TrackingMode");
  196.         if( TMI_TrackingMode == NULL )
  197.                 return FALSE;
  198.  
  199.         TMI_TrackingModeQ = (int  ( __stdcall*  )(int , unsigned char * )) GetProcAddress(TMI_APIDll , "TMI_TrackingModeQ");
  200.         if( TMI_TrackingModeQ == NULL )
  201.                 return FALSE;
  202.  
  203.         TMI_TrackingGroup = (int  ( __stdcall*  )(int , unsigned char , unsigned char )) GetProcAddress(TMI_APIDll , "TMI_TrackingGroup");
  204.         if( TMI_TrackingGroup == NULL )
  205.                 return FALSE;
  206.  
  207.         TMI_TrackingGroupQ = (int  ( __stdcall*  )(int , unsigned char , unsigned char * )) GetProcAddress(TMI_APIDll , "TMI_TrackingGroupQ");
  208.         if( TMI_TrackingGroupQ == NULL )
  209.                 return FALSE;
  210.  
  211.         TMI_TrackingData = (int  ( __stdcall*  )(int , unsigned char , unsigned char , double )) GetProcAddress(TMI_APIDll , "TMI_TrackingData");
  212.         if( TMI_TrackingData == NULL )
  213.                 return FALSE;
  214.  
  215.         TMI_TrackingDataQ = (int  ( __stdcall*  )(int , unsigned char , unsigned char , double * )) GetProcAddress(TMI_APIDll , "TMI_TrackingDataQ");
  216.         if( TMI_TrackingDataQ == NULL )
  217.                 return FALSE;
  218.  
  219.         TMI_DelayTime = (int  ( __stdcall*  )(int , unsigned char , double )) GetProcAddress(TMI_APIDll , "TMI_DelayTime");
  220.         if( TMI_DelayTime == NULL )
  221.                 return FALSE;
  222.  
  223.         TMI_DelayTimeQ = (int  ( __stdcall*  )(int , unsigned char , double * )) GetProcAddress(TMI_APIDll , "TMI_DelayTimeQ");
  224.         if( TMI_DelayTimeQ == NULL )
  225.                 return FALSE;
  226.  
  227.         TMI_Display = (int  ( __stdcall*  )(int , unsigned char )) GetProcAddress(TMI_APIDll , "TMI_Display");
  228.         if( TMI_Display == NULL )
  229.                 return FALSE;
  230.  
  231.         TMI_DisplayQ = (int  ( __stdcall*  )(int , unsigned char * )) GetProcAddress(TMI_APIDll , "TMI_DisplayQ");
  232.         if( TMI_DisplayQ == NULL )
  233.                 return FALSE;
  234.  
  235.         TMI_Preset = (int  ( __stdcall*  )(int , unsigned char )) GetProcAddress(TMI_APIDll , "TMI_Preset");
  236.         if( TMI_Preset == NULL )
  237.                 return FALSE;
  238.  
  239.         TMI_PresetQ = (int  ( __stdcall*  )(int , unsigned char * )) GetProcAddress(TMI_APIDll , "TMI_PresetQ");
  240.         if( TMI_PresetQ == NULL )
  241.                 return FALSE;
  242.  
  243.         TMI_MoniDataQ = (int  ( __stdcall*  )(int , char , double * , double * , char * )) GetProcAddress(TMI_APIDll , "TMI_MoniDataQ");
  244.         if( TMI_MoniDataQ == NULL )
  245.                 return FALSE;
  246.  
  247.         TMI_AdrQ = (int  ( __stdcall*  )(int , unsigned char * )) GetProcAddress(TMI_APIDll , "TMI_AdrQ");
  248.         if( TMI_AdrQ == NULL )
  249.                 return FALSE;
  250.  
  251.         TMI_RemoteLocal = (int  ( __stdcall*  )(int )) GetProcAddress(TMI_APIDll , "TMI_RemoteLocal");
  252.         if( TMI_RemoteLocal == NULL )
  253.                 return FALSE;
  254.  
  255.         TMI_LocalLockOut = (int  ( __stdcall*  )(int )) GetProcAddress(TMI_APIDll , "TMI_LocalLockOut");
  256.         if( TMI_LocalLockOut == NULL )
  257.                 return FALSE;
  258.  
  259.         TMI_DataBackUp = (int  ( __stdcall*  )(int )) GetProcAddress(TMI_APIDll , "TMI_DataBackUp");
  260.         if( TMI_DataBackUp == NULL )
  261.                 return FALSE;
  262.  
  263.         TMI_SRQEnable = (int  ( __stdcall*  )(int , unsigned char )) GetProcAddress(TMI_APIDll , "TMI_SRQEnable");
  264.         if( TMI_SRQEnable == NULL )
  265.                 return FALSE;
  266.  
  267.         TMI_AllPresetQ = (int  ( __stdcall*  )(int , double * )) GetProcAddress(TMI_APIDll , "TMI_AllPresetQ");
  268.         if( TMI_AllPresetQ == NULL )
  269.                 return FALSE;
  270.  
  271.         TMI_AllPresetQS = (int  ( __stdcall*  )(int , char * )) GetProcAddress(TMI_APIDll , "TMI_AllPresetQS");
  272.         if( TMI_AllPresetQS == NULL )
  273.                 return FALSE;
  274.  
  275.         TMI_Out = (int  ( __stdcall*  )(int , char * )) GetProcAddress(TMI_APIDll , "TMI_Out");
  276.         if( TMI_Out == NULL )
  277.                 return FALSE;
  278.  
  279.         TMI_In = (int  ( __stdcall*  )(int , char * )) GetProcAddress(TMI_APIDll , "TMI_In");
  280.         if( TMI_In == NULL )
  281.                 return FALSE;
  282.  
  283.   TMI_HandleClose = (int  ( __stdcall*  )( int )) GetProcAddress(TMI_APIDll , "TMI_HandleClose");
  284.         if( TMI_HandleClose == NULL )
  285.                 return FALSE;
  286.  
  287.   printf("TMI_In loaded.\n");
  288.         return TRUE;
  289. }
  290.  
  291. int TMI_OpenHandle(char * dev, char * usb   ){
  292.                                  
  293. TMI_DeviceId =  TMI_HandleOpen(dev, usb);
  294. return TMI_DeviceId;
  295. }
  296.  
  297.  
  298.  
  299.  
  300. /****************TOKOVI (potek, kako se spreminjajo tokovi s casom)****************/
  301.  
  302. void TMI_ReadCurrent(double * I , double * V, unsigned char * mode, unsigned char *onoff){
  303.          int iRet;
  304.          char ch=0;
  305.          double Voltage;
  306.      double Current;
  307.          char cv_cc;
  308.        
  309.                            
  310.          iRet = TMI_TimeOut(TMI_DeviceId, 1);
  311.          iRet = TMI_Refresh(TMI_DeviceId);
  312.  
  313.          
  314.          //iRet = TMI_MainOutput(TMI_DeviceId, Output);
  315.      //iRet = TMI_MainOutputQ(TMI_DeviceId, &Output);
  316.          for (ch=0;ch<4;ch++){
  317.            
  318.          
  319.            iRet = TMI_MoniDataQ(TMI_DeviceId, ch+1, &Voltage, &Current, &cv_cc);
  320.            //if (debug) printf("[%d] %g V %g A CVCC %d\t",ch, Voltage, Current, cv_cc );
  321.            I[ch]= Current;        //s tem definiras kaj sta I in V.
  322.            V[ch]= Voltage;
  323.            
  324.            
  325.          }
  326.          //if (debug) printf("\n");
  327.        
  328.    
  329.         return;
  330.  
  331.        
  332. }
  333.  
  334.  
  335. #ifdef MAIN
  336.  
  337. #include <ansi_c.h>
  338. #include <utility.h>
  339. #include "pw18-1.8aq-ctrl.h"
  340.  
  341. #define RSTREG(a,x) (a&=(~(x)))
  342. #define SETREG(a,x) (a|=x)
  343.  
  344. int gLogToFile;
  345. int vmon[4]={P1_VMON_1,P1_VMON_2,P1_VMON_3,P1_VMON_4 };
  346. int imon[4]={P1_IMON_1,P1_IMON_2,P1_IMON_3,P1_IMON_4 };
  347. int vset[4]={P1_U_1,P1_U_2,P1_U_3,P1_U_4 };
  348. int iset[4]={P1_I_1,P1_I_2,P1_I_3,P1_I_4 };
  349. int radiob[4]={P1_BOX_1,P1_BOX_2,P1_BOX_3,P1_BOX_4 };
  350.  
  351. int cvcc[4]={P1_CVCC_1,P1_CVCC_2,P1_CVCC_3,P1_CVCC_4 };
  352.  
  353. int gMask=0xF;
  354.  
  355. int pnl;
  356. FILE *gFp;
  357. int main (int argc, char *argv[])
  358. {
  359.         int DeviceId=0;
  360.         unsigned char MainOutput, preset;
  361.   double Voltage, Current, tinterval;
  362.   char str[0xFF];
  363.         if (InitCVIRTE (0, argv, 0) == 0)
  364.                 return -1;      /* out of memory */
  365.   SetStdioPort (CVI_STDIO_WINDOW);
  366.         if ((pnl = LoadPanel (0, "pw18-1.8aq-ctrl.uir", P1)) < 0) return -1;
  367.  
  368.   if (TMI_Open()== 0) MessagePopup("Error","Cannot open USB device");  
  369.   DeviceId = TMI_OpenHandle ("PW-A","USB:1:1");
  370.   if (TMI_Test() == 0 )MessagePopup("DLL error","Dll Error");
  371.   if (DeviceId < 0) MessagePopup("Error","Not Connected");
  372.   printf("TMI device ID %d\n",TMI_DeviceId);
  373.    
  374.   TMI_MainOutputQ(TMI_DeviceId, &MainOutput);
  375.   SetCtrlVal(pnl, P1_ONOFF, MainOutput);
  376.   GetCtrlVal(pnl, P1_TINTERVAL, &tinterval);
  377.   SetCtrlAttribute (pnl, P1_TIMER, ATTR_INTERVAL, tinterval);
  378.         TMI_PresetQ(TMI_DeviceId, &preset);
  379.   SetCtrlVal(pnl, P1_PRESET, preset);
  380.         SetTraceAttributeEx (pnl, P1_GRAPH_IMON, 1, ATTR_TRACE_LG_TEXT, "CH +18V");
  381.         SetTraceAttributeEx (pnl, P1_GRAPH_IMON, 2, ATTR_TRACE_LG_TEXT, "CH -18V");
  382.         SetTraceAttributeEx (pnl, P1_GRAPH_IMON, 3, ATTR_TRACE_LG_TEXT, "CH +6V");
  383.         SetTraceAttributeEx (pnl, P1_GRAPH_IMON, 4, ATTR_TRACE_LG_TEXT, "CH -6V");
  384.        
  385.         SetTraceAttributeEx (pnl, P1_GRAPH_VMON, 1, ATTR_TRACE_LG_TEXT, "CH +18V");
  386.         SetTraceAttributeEx (pnl, P1_GRAPH_VMON, 2, ATTR_TRACE_LG_TEXT, "CH -18V");
  387.         SetTraceAttributeEx (pnl, P1_GRAPH_VMON, 3, ATTR_TRACE_LG_TEXT, "CH +6V");
  388.         SetTraceAttributeEx (pnl, P1_GRAPH_VMON, 4, ATTR_TRACE_LG_TEXT, "CH -6V");
  389.   for (unsigned char  ch=0;ch<4;ch++){
  390.     int ison;
  391.     TMI_VoltageQ(TMI_DeviceId, ch+1, preset, &Voltage);
  392.     TMI_CurrentQ(TMI_DeviceId, ch+1, preset, &Current);
  393.     SetCtrlVal(pnl, vset[ch], Voltage);
  394.     SetCtrlVal(pnl, iset[ch], Current);
  395.     GetCtrlVal(pnl, radiob[ch], &ison);
  396.     if (ison) SETREG(gMask,(1<<ch)); else RSTREG(gMask,(1<<ch));
  397.   }
  398.          
  399.   DisplayPanel (pnl);
  400.         RunUserInterface ();
  401.         DiscardPanel (pnl);
  402.    TMI_Close();
  403.  
  404.    if (gFp)  fclose(gFp);
  405.         return 0;
  406. }
  407.  
  408.  
  409.  
  410.  
  411. int CVICALLBACK SwitchOnOffCB (int panel, int control, int event,
  412.                                void *callbackData, int eventData1, int eventData2)
  413. {
  414.   unsigned char state;
  415.   switch (event)
  416.   {
  417.     case EVENT_COMMIT:
  418.       GetCtrlVal(panel, control, &state);
  419.       TMI_MainOutput(TMI_DeviceId, state);
  420.       break;
  421.   }
  422.   return 0;
  423. }
  424.  
  425. int CVICALLBACK SetCB (int panel, int control, int event,
  426.                        void *callbackData, int eventData1, int eventData2)
  427. {
  428.  
  429.  
  430.   switch (event)
  431.   {
  432.     case EVENT_COMMIT:{
  433.                         unsigned char preset;
  434.       TMI_PresetQ(TMI_DeviceId, &preset);
  435.       SetCtrlVal(pnl, P1_PRESET, preset);  
  436.       for (unsigned char ch = 0; ch<4;ch++){
  437.         //printf("ch %d %x\n", ch, gMask);
  438.         if (gMask & (1<<ch)){
  439.           double Voltage;
  440.           double Current;
  441.                                        
  442.           GetCtrlVal(panel, vset[ch], &Voltage);
  443.           GetCtrlVal(panel, iset[ch], &Current);
  444.           //printf("->ch %d VSet %g Iset %g\n", ch, Voltage, Current);
  445.           TMI_Voltage(TMI_DeviceId, ch+1, preset, Voltage);
  446.           TMI_VoltageQ(TMI_DeviceId, ch+1, preset, &Voltage);
  447.           TMI_Current(TMI_DeviceId, ch+1, preset, Current);
  448.           TMI_CurrentQ(TMI_DeviceId, ch+1, preset, &Current);
  449.           //printf("<-ch %d VSet %g Iset %g\n", ch, Voltage, Current);  
  450.          
  451.         }
  452.       }  
  453.                 }
  454.       break;
  455.   }
  456.   return 0;
  457. }
  458.  
  459. int CVICALLBACK ReadCB (int panel, int control, int event,
  460.                         void *callbackData, int eventData1, int eventData2)
  461. {
  462.  
  463.    int iRet;
  464.          char ch=0;
  465.          double Voltage;
  466.    double Current;
  467.          char cv_cc;
  468.   switch (event)
  469.   {
  470.     case EVENT_COMMIT:
  471.       for (ch = 0; ch<4;ch++){
  472.         if (gMask & (1<<ch)){
  473.           iRet = TMI_TimeOut(TMI_DeviceId, 1);
  474.                 iRet = TMI_Refresh(TMI_DeviceId);
  475.           iRet = TMI_MoniDataQ(TMI_DeviceId, ch+1, &Voltage, &Current, &cv_cc);
  476.           //printf("ch %d VSet %g Iset %g\n", ch, Voltage, Current);
  477.           SetCtrlVal(panel, vmon[ch], Voltage);
  478.           SetCtrlVal(panel, imon[ch], Current);
  479.           SetCtrlVal(panel, cvcc[ch], cv_cc);
  480.         }
  481.       }  
  482.       break;
  483.   }
  484.   return 0;
  485. }
  486.  
  487. int CVICALLBACK SetIntervalCB (int panel, int control, int event,
  488.                                void *callbackData, int eventData1, int eventData2) {
  489.   double tinterval;
  490.   switch (event) {
  491.     case EVENT_COMMIT:
  492.       GetCtrlVal(panel, control, &tinterval);
  493.       SetCtrlAttribute (panel, P1_TIMER, ATTR_INTERVAL, tinterval);
  494.       break;
  495.   }
  496.   return 0;
  497. }
  498.  
  499. int CVICALLBACK TimerOnOffCB (int panel, int control, int event,
  500.                               void *callbackData, int eventData1, int eventData2)
  501. {
  502.   int state;
  503.   switch (event)
  504.   {
  505.     case EVENT_COMMIT:
  506.       GetCtrlVal(panel, control, &state);
  507.       if (state){
  508.          ResumeTimerCallbacks();
  509.       } else {
  510.          SuspendTimerCallbacks ();
  511.          printf ("Disabling timer....\n");
  512.       }
  513.       break;
  514.   }
  515.   return 0;
  516. }
  517.  
  518. int CVICALLBACK ExitCB (int panel, int control, int event,
  519.                         void *callbackData, int eventData1, int eventData2)
  520. {
  521.   switch (event)
  522.   {
  523.     case EVENT_COMMIT:
  524.       QuitUserInterface(0);
  525.       break;
  526.   }
  527.   return 0;
  528. }
  529.  
  530. int CVICALLBACK SetMaskCB (int panel, int control, int event,
  531.                            void *callbackData, int eventData1, int eventData2)
  532. { int ison;
  533.   switch (event)
  534.   {
  535.     case EVENT_COMMIT:
  536.       GetCtrlVal(panel, control, &ison);
  537.       for (int i=0;i<4;i++) if (control == radiob[i]) break;
  538.       if (ison) SETREG(gMask,(1<<i)); else RSTREG(gMask,(1<<i));
  539.       break;
  540.   }
  541.   return 0;
  542. }
  543.  
  544. int CVICALLBACK LogToFileCB (int panel, int control, int event,
  545.                              void *callbackData, int eventData1, int eventData2)
  546. {
  547.  
  548.   switch (event)
  549.   {
  550.     case EVENT_COMMIT:
  551.       GetCtrlVal(panel, control, &gLogToFile);
  552.      
  553.       break;
  554.   }
  555.   return 0;
  556. }
  557.  
  558. int CVICALLBACK TimerCB (int panel, int control, int event,
  559.                          void *callbackData, int eventData1, int eventData2)
  560. {
  561.   switch (event)
  562.   {
  563.      
  564.       unsigned char   ch;
  565.       double current[4];
  566.       double voltage[4];
  567.       char cv_cc;
  568.     case EVENT_TIMER_TICK:
  569.       for (ch = 0; ch<4;ch++){
  570.         if (gMask & (1<<ch)){
  571.           TMI_TimeOut(TMI_DeviceId, 1);
  572.                 TMI_Refresh(TMI_DeviceId);
  573.           TMI_MoniDataQ(TMI_DeviceId, ch+1, &voltage[ch], &current[ch], &cv_cc);
  574.           SetCtrlVal(panel, vmon[ch], voltage[ch]);
  575.           SetCtrlVal(panel, imon[ch], current[ch]);
  576.           SetCtrlVal(panel, cvcc[ch], cv_cc);
  577.           if (gLogToFile){
  578.               if (!gFp)  {
  579.                 gFp= fopen("pw18-1.8aq.log","w");
  580.                 fprintf(gFp,"#time\tch\tU\tI\tCV_CC\n");
  581.               }  
  582.               fprintf(gFp,"%ul\t%d\t%g\t%g\t%d\n",  time(NULL), ch+1, voltage[ch], current[ch], cv_cc);
  583.           }
  584.         }
  585.       }
  586.       PlotStripChart (panel, P1_GRAPH_IMON, current, 4, 0, 0, VAL_DOUBLE);
  587.                         PlotStripChart (panel, P1_GRAPH_VMON, voltage, 4, 0, 0, VAL_DOUBLE);
  588.       break;
  589.   }
  590.   return 0;
  591. }
  592.  
  593. int CVICALLBACK SetPresetCB (int panel, int control, int event,
  594.                                                                                                                  void *callbackData, int eventData1, int eventData2) {
  595.  
  596.         switch (event) {
  597.                 case EVENT_COMMIT:{
  598.                         unsigned char preset;
  599.                         double Voltage, Current;
  600.                         GetCtrlVal(panel, control, &preset);
  601.                         TMI_Preset(TMI_DeviceId, preset);
  602.                        
  603.                         for (unsigned char  ch=0;ch<4;ch++){
  604.         int ison;
  605.         TMI_VoltageQ(TMI_DeviceId, ch+1, preset, &Voltage);
  606.         TMI_CurrentQ(TMI_DeviceId, ch+1, preset, &Current);
  607.         SetCtrlVal(pnl, vset[ch], Voltage);
  608.         SetCtrlVal(pnl, iset[ch], Current);
  609.         GetCtrlVal(pnl, radiob[ch], &ison);
  610.         if (ison) SETREG(gMask,(1<<ch)); else RSTREG(gMask,(1<<ch));
  611.       }
  612.                         break;
  613.                 }
  614.         }
  615.         return 0;
  616. }
  617.  
  618.  
  619. #endif MAIN
  620.  
  621.