#include <userint.h>
#include "pw18-1.8aq-ctrl.h"
#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
#include <pw18-1.8aq.h>
int TMI_DeviceId=0;
int TMI_Initialize()
{
TMI_HandleOpen = NULL;
TMI_HandleClose = NULL;
TMI_TimeOut = NULL;
TMI_Refresh = NULL;
TMI_ModelNameQ = NULL;
TMI_Voltage = NULL;
TMI_VoltageQ = NULL;
TMI_Current = NULL;
TMI_CurrentQ = NULL;
TMI_MainOutput = NULL;
TMI_MainOutputQ = NULL;
TMI_Delay = NULL;
TMI_DelayQ = NULL;
TMI_OutputSel = NULL;
TMI_OutputSelQ = NULL;
TMI_TrackingOnOff = NULL;
TMI_TrackingOnOffQ = NULL;
TMI_TrackingMode = NULL;
TMI_TrackingModeQ = NULL;
TMI_TrackingGroup = NULL;
TMI_TrackingGroupQ = NULL;
TMI_TrackingData = NULL;
TMI_TrackingDataQ = NULL;
TMI_DelayTime = NULL;
TMI_DelayTimeQ = NULL;
TMI_Display = NULL;
TMI_DisplayQ = NULL;
TMI_Preset = NULL;
TMI_PresetQ = NULL;
TMI_MoniDataQ = NULL;
TMI_AdrQ = NULL;
TMI_RemoteLocal = NULL;
TMI_LocalLockOut = NULL;
TMI_DataBackUp = NULL;
TMI_SRQEnable = NULL;
TMI_AllPresetQ = NULL;
TMI_AllPresetQS = NULL;
TMI_Out = NULL;
TMI_In = NULL;
return 0;
}
int TMI_Test()
{
char str[0xFF];
if (TMI_HandleOpen == NULL ) return FALSE;
if (TMI_HandleClose == NULL ) return FALSE;
if (TMI_TimeOut == NULL ) return FALSE;
if (TMI_Refresh == NULL ) return FALSE;
if (TMI_ModelNameQ == NULL ) return FALSE;
if (TMI_Voltage == NULL ) return FALSE;
if (TMI_VoltageQ == NULL ) return FALSE;
if (TMI_Current == NULL ) return FALSE;
if (TMI_CurrentQ == NULL ) return FALSE;
if (TMI_MainOutput == NULL ) return FALSE;
if (TMI_MainOutputQ == NULL ) return FALSE;
if (TMI_Delay == NULL ) return FALSE;
if (TMI_DelayQ == NULL ) return FALSE;
if (TMI_OutputSel == NULL ) return FALSE;
if (TMI_OutputSelQ == NULL ) return FALSE;
if (TMI_TrackingOnOff == NULL ) return FALSE;
if (TMI_TrackingOnOffQ == NULL ) return FALSE;
if (TMI_TrackingMode == NULL ) return FALSE;
if (TMI_TrackingModeQ == NULL ) return FALSE;
if (TMI_TrackingGroup == NULL ) return FALSE;
if (TMI_TrackingGroupQ == NULL ) return FALSE;
if (TMI_TrackingData == NULL ) return FALSE;
if (TMI_TrackingDataQ == NULL ) return FALSE;
if (TMI_DelayTime == NULL ) return FALSE;
if (TMI_DelayTimeQ == NULL ) return FALSE;
if (TMI_Display == NULL ) return FALSE;
if (TMI_DisplayQ == NULL ) return FALSE;
if (TMI_Preset == NULL ) return FALSE;
if (TMI_PresetQ == NULL ) return FALSE;
if (TMI_MoniDataQ == NULL ) return FALSE;
if (TMI_AdrQ == NULL ) return FALSE;
if (TMI_RemoteLocal == NULL ) return FALSE;
if (TMI_LocalLockOut == NULL ) return FALSE;
if (TMI_DataBackUp == NULL ) return FALSE;
if (TMI_SRQEnable == NULL ) return FALSE;
if (TMI_AllPresetQ == NULL ) return FALSE;
if (TMI_AllPresetQS == NULL ) return FALSE;
if (TMI_Out == NULL ) return FALSE;
if (TMI_In == NULL ) return FALSE;
TMI_ModelNameQ(TMI_DeviceId, str);
printf("TMI_ModelNameQ %s\n",str
);
return TRUE;
}
int TMI_Close()
{
if(TMI_APIDll != NULL) {
if (TMI_DeviceId){
TMI_RemoteLocal(TMI_DeviceId);
TMI_HandleClose(TMI_DeviceId);
TMI_DeviceId = 0;
}
FreeLibrary(TMI_APIDll);
}
return 0;
}
int TMI_Open()
{
TMI_Initialize();
printf("FALSE =%d TRUE=%d\n", FALSE
, TRUE
);
TMI_APIDll=LoadLibrary((LPCSTR)"TMI_API.dll");
if( TMI_APIDll == NULL )
return FALSE;
TMI_HandleOpen = (int ( __stdcall* )( char * , char * )) GetProcAddress(TMI_APIDll , "TMI_HandleOpen");
if( TMI_HandleOpen == NULL )
return FALSE;
TMI_TimeOut = (int ( __stdcall* )( int , int )) GetProcAddress(TMI_APIDll , "TMI_TimeOut");
if( TMI_TimeOut == NULL )
return FALSE;
TMI_Refresh = (int ( __stdcall* )( int )) GetProcAddress(TMI_APIDll , "TMI_Refresh");
if( TMI_Refresh == NULL )
return FALSE;
TMI_ModelNameQ = (int ( __stdcall* )( int , char * )) GetProcAddress(TMI_APIDll , "TMI_ModelNameQ");
if( TMI_ModelNameQ == NULL )
return FALSE;
TMI_Voltage = (int ( __stdcall* )( int , unsigned char , unsigned char , double )) GetProcAddress(TMI_APIDll , "TMI_Voltage");
if( TMI_Voltage == NULL )
return FALSE;
TMI_VoltageQ = (int ( __stdcall* )( int , unsigned char , unsigned char , double * )) GetProcAddress(TMI_APIDll , "TMI_VoltageQ");
if( TMI_VoltageQ == NULL )
return FALSE;
TMI_Current = (int ( __stdcall* )(int , unsigned char , unsigned char , double )) GetProcAddress(TMI_APIDll , "TMI_Current");
if( TMI_Current == NULL )
return FALSE;
TMI_CurrentQ = (int ( __stdcall* )(int , unsigned char , unsigned char , double * )) GetProcAddress(TMI_APIDll , "TMI_CurrentQ");
if( TMI_CurrentQ == NULL )
return FALSE;
TMI_MainOutput = (int ( __stdcall* )(int , unsigned char )) GetProcAddress(TMI_APIDll , "TMI_MainOutput");
if( TMI_MainOutput == NULL )
return FALSE;
TMI_MainOutputQ = (int ( __stdcall* )(int , unsigned char * )) GetProcAddress(TMI_APIDll , "TMI_MainOutputQ");
if( TMI_MainOutputQ == NULL )
return FALSE;
TMI_Delay = (int ( __stdcall* )(int , unsigned char )) GetProcAddress(TMI_APIDll , "TMI_Delay");
if( TMI_Delay == NULL )
return FALSE;
TMI_DelayQ = (int ( __stdcall* )(int , unsigned char * )) GetProcAddress(TMI_APIDll , "TMI_DelayQ");
if( TMI_DelayQ == NULL )
return FALSE;
TMI_OutputSel = (int ( __stdcall* )(int , unsigned char , unsigned char )) GetProcAddress(TMI_APIDll , "TMI_OutputSel");
if( TMI_OutputSel == NULL )
return FALSE;
TMI_OutputSelQ = (int ( __stdcall* )(int , unsigned char , unsigned char * )) GetProcAddress(TMI_APIDll , "TMI_OutputSelQ");
if( TMI_OutputSelQ == NULL )
return FALSE;
TMI_TrackingOnOff = (int ( __stdcall* )(int , unsigned char )) GetProcAddress(TMI_APIDll , "TMI_TrackingOnOff");
if( TMI_TrackingOnOff == NULL )
return FALSE;
TMI_TrackingOnOffQ = (int ( __stdcall* )(int , unsigned char * )) GetProcAddress(TMI_APIDll , "TMI_TrackingOnOffQ");
if( TMI_TrackingOnOffQ == NULL )
return FALSE;
TMI_TrackingMode = (int ( __stdcall* )(int , unsigned char )) GetProcAddress(TMI_APIDll , "TMI_TrackingMode");
if( TMI_TrackingMode == NULL )
return FALSE;
TMI_TrackingModeQ = (int ( __stdcall* )(int , unsigned char * )) GetProcAddress(TMI_APIDll , "TMI_TrackingModeQ");
if( TMI_TrackingModeQ == NULL )
return FALSE;
TMI_TrackingGroup = (int ( __stdcall* )(int , unsigned char , unsigned char )) GetProcAddress(TMI_APIDll , "TMI_TrackingGroup");
if( TMI_TrackingGroup == NULL )
return FALSE;
TMI_TrackingGroupQ = (int ( __stdcall* )(int , unsigned char , unsigned char * )) GetProcAddress(TMI_APIDll , "TMI_TrackingGroupQ");
if( TMI_TrackingGroupQ == NULL )
return FALSE;
TMI_TrackingData = (int ( __stdcall* )(int , unsigned char , unsigned char , double )) GetProcAddress(TMI_APIDll , "TMI_TrackingData");
if( TMI_TrackingData == NULL )
return FALSE;
TMI_TrackingDataQ = (int ( __stdcall* )(int , unsigned char , unsigned char , double * )) GetProcAddress(TMI_APIDll , "TMI_TrackingDataQ");
if( TMI_TrackingDataQ == NULL )
return FALSE;
TMI_DelayTime = (int ( __stdcall* )(int , unsigned char , double )) GetProcAddress(TMI_APIDll , "TMI_DelayTime");
if( TMI_DelayTime == NULL )
return FALSE;
TMI_DelayTimeQ = (int ( __stdcall* )(int , unsigned char , double * )) GetProcAddress(TMI_APIDll , "TMI_DelayTimeQ");
if( TMI_DelayTimeQ == NULL )
return FALSE;
TMI_Display = (int ( __stdcall* )(int , unsigned char )) GetProcAddress(TMI_APIDll , "TMI_Display");
if( TMI_Display == NULL )
return FALSE;
TMI_DisplayQ = (int ( __stdcall* )(int , unsigned char * )) GetProcAddress(TMI_APIDll , "TMI_DisplayQ");
if( TMI_DisplayQ == NULL )
return FALSE;
TMI_Preset = (int ( __stdcall* )(int , unsigned char )) GetProcAddress(TMI_APIDll , "TMI_Preset");
if( TMI_Preset == NULL )
return FALSE;
TMI_PresetQ = (int ( __stdcall* )(int , unsigned char * )) GetProcAddress(TMI_APIDll , "TMI_PresetQ");
if( TMI_PresetQ == NULL )
return FALSE;
TMI_MoniDataQ = (int ( __stdcall* )(int , char , double * , double * , char * )) GetProcAddress(TMI_APIDll , "TMI_MoniDataQ");
if( TMI_MoniDataQ == NULL )
return FALSE;
TMI_AdrQ = (int ( __stdcall* )(int , unsigned char * )) GetProcAddress(TMI_APIDll , "TMI_AdrQ");
if( TMI_AdrQ == NULL )
return FALSE;
TMI_RemoteLocal = (int ( __stdcall* )(int )) GetProcAddress(TMI_APIDll , "TMI_RemoteLocal");
if( TMI_RemoteLocal == NULL )
return FALSE;
TMI_LocalLockOut = (int ( __stdcall* )(int )) GetProcAddress(TMI_APIDll , "TMI_LocalLockOut");
if( TMI_LocalLockOut == NULL )
return FALSE;
TMI_DataBackUp = (int ( __stdcall* )(int )) GetProcAddress(TMI_APIDll , "TMI_DataBackUp");
if( TMI_DataBackUp == NULL )
return FALSE;
TMI_SRQEnable = (int ( __stdcall* )(int , unsigned char )) GetProcAddress(TMI_APIDll , "TMI_SRQEnable");
if( TMI_SRQEnable == NULL )
return FALSE;
TMI_AllPresetQ = (int ( __stdcall* )(int , double * )) GetProcAddress(TMI_APIDll , "TMI_AllPresetQ");
if( TMI_AllPresetQ == NULL )
return FALSE;
TMI_AllPresetQS = (int ( __stdcall* )(int , char * )) GetProcAddress(TMI_APIDll , "TMI_AllPresetQS");
if( TMI_AllPresetQS == NULL )
return FALSE;
TMI_Out = (int ( __stdcall* )(int , char * )) GetProcAddress(TMI_APIDll , "TMI_Out");
if( TMI_Out == NULL )
return FALSE;
TMI_In = (int ( __stdcall* )(int , char * )) GetProcAddress(TMI_APIDll , "TMI_In");
if( TMI_In == NULL )
return FALSE;
TMI_HandleClose = (int ( __stdcall* )( int )) GetProcAddress(TMI_APIDll , "TMI_HandleClose");
if( TMI_HandleClose == NULL )
return FALSE;
return TRUE;
}
int TMI_OpenHandle(char * dev, char * usb ){
TMI_DeviceId = TMI_HandleOpen(dev, usb);
return TMI_DeviceId;
}
/****************TOKOVI (potek, kako se spreminjajo tokovi s casom)****************/
void TMI_ReadCurrent(double * I , double * V, unsigned char * mode, unsigned char *onoff){
int iRet;
char ch=0;
double Voltage;
double Current;
char cv_cc;
iRet = TMI_TimeOut(TMI_DeviceId, 1);
iRet = TMI_Refresh(TMI_DeviceId);
//iRet = TMI_MainOutput(TMI_DeviceId, Output);
//iRet = TMI_MainOutputQ(TMI_DeviceId, &Output);
for (ch=0;ch<4;ch++){
iRet = TMI_MoniDataQ(TMI_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>
#include "pw18-1.8aq-ctrl.h"
#define RSTREG(a,x) (a&=(~(x)))
#define SETREG(a,x) (a|=x)
int gLogToFile;
int vmon[4]={P1_VMON_1,P1_VMON_2,P1_VMON_3,P1_VMON_4 };
int imon[4]={P1_IMON_1,P1_IMON_2,P1_IMON_3,P1_IMON_4 };
int vset[4]={P1_U_1,P1_U_2,P1_U_3,P1_U_4 };
int iset[4]={P1_I_1,P1_I_2,P1_I_3,P1_I_4 };
int radiob[4]={P1_BOX_1,P1_BOX_2,P1_BOX_3,P1_BOX_4 };
int cvcc[4]={P1_CVCC_1,P1_CVCC_2,P1_CVCC_3,P1_CVCC_4 };
const unsigned char Pre_1 = 1;
int gMask=0xF;
int pnl;
FILE *gFp;
int main (int argc, char *argv[])
{
int DeviceId=0;
unsigned char MainOutput;
double Voltage, Current, tinterval;
char str[0xFF];
if (InitCVIRTE (0, argv, 0) == 0)
return -1; /* out of memory */
SetStdioPort (CVI_STDIO_WINDOW);
if ((pnl = LoadPanel (0, "pw18-1.8aq-ctrl.uir", P1)) < 0) return -1;
if (TMI_Open()== 0) MessagePopup("Error","Cannot open USB device");
DeviceId = TMI_OpenHandle ("PW-A","USB:1:1");
if (TMI_Test() == 0 )MessagePopup("DLL error","Dll Error");
if (DeviceId < 0) MessagePopup("Error","Not Connected");
printf("TMI device ID %d\n",TMI_DeviceId
);
TMI_MainOutputQ(TMI_DeviceId, &MainOutput);
SetCtrlVal(pnl, P1_ONOFF, MainOutput);
GetCtrlVal(pnl, P1_TINTERVAL, &tinterval);
SetCtrlAttribute (pnl, P1_TIMER, ATTR_INTERVAL, tinterval);
for (unsigned char ch=0;ch<4;ch++){
int ison;
TMI_VoltageQ(TMI_DeviceId, ch+1, Pre_1, &Voltage);
TMI_CurrentQ(TMI_DeviceId, ch+1, Pre_1, &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);
TMI_Close();
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);
TMI_MainOutput(TMI_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:
for (unsigned char ch = 0; ch<4;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
);
TMI_Voltage(TMI_DeviceId, ch+1, Pre_1, Voltage);
TMI_VoltageQ(TMI_DeviceId, ch+1, Pre_1, &Voltage);
TMI_Current(TMI_DeviceId, ch+1, Pre_1, Current);
TMI_CurrentQ(TMI_DeviceId, ch+1, Pre_1, &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<4;ch++){
if (gMask & (1<<ch)){
iRet = TMI_TimeOut(TMI_DeviceId, 1);
iRet = TMI_Refresh(TMI_DeviceId);
iRet = TMI_MoniDataQ(TMI_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)
{
case EVENT_COMMIT:
GetCtrlVal(panel, control, &ison);
for (int i=0;i<4;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[4];
double voltage;
char cv_cc;
case EVENT_TIMER_TICK:
for (ch = 0; ch<4;ch++){
if (gMask & (1<<ch)){
TMI_TimeOut(TMI_DeviceId, 1);
TMI_Refresh(TMI_DeviceId);
TMI_MoniDataQ(TMI_DeviceId, ch+1, &voltage, ¤t[ch], &cv_cc);
SetCtrlVal(panel, vmon[ch], voltage);
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
, current
[ch
], cv_cc
);
}
}
}
PlotStripChart (panel, P1_GRAPH, current, 4, 0, 0, VAL_DOUBLE);
break;
}
return 0;
}
#endif MAIN