www.pudn.com > LabWindowsCVI.rar > sample12_gpib.c


#include  
#include  
#include  
#include 		/* Needed if linking in external compiler; harmless otherwise */ 
#include  
#include "sample12_gpib.h" 
 
static int panelHandle; 
int paddress,device; 
 
int main (int argc, char *argv[]) 
{ 
     //定义变量 
     int popup,panel,control; 
	 
	if (InitCVIRTE (0, argv, 0) == 0)	 
		return -1;	 
		 
    DisableBreakOnLibraryErrors(); 
     
    //以对话框的形式显示面板PANEL_2  
    popup = LoadPanel (0, "sample12_gpib.uir", PANEL_2); 
	InstallPopup (popup); 
	 
    while (1) 
	     { 
	        //获得发生事件的面板句柄和控件ID号 
	        GetUserEvent (1, &panel, &control); 
	         
            //按下Cancel键退出 
            if((panel==popup)&&(control==PANEL_2_CANCEL)) 
	                return -1; 
	                 
            //按下OK键 
            if((panel==popup)&&(control==PANEL_2_OK)) 
	             { 
	                  //获取NUMERIC控件值 
	                  GetCtrlVal (popup, PANEL_2_NUMERIC, &paddress); 
	                  //移除对话框 
	                  RemovePopup (1); 
	                  break; 
	             } 
         } 
          
    //打开GPIB设备 
    device = ibdev (0, paddress, NO_SAD, T10s, 1, 0); 
	 
	if ((panelHandle = LoadPanel (0, "sample12_gpib.uir", PANEL)) < 0) 
		return -1; 
		 
	//设置控件TEXTMSG不可见 
	SetCtrlAttribute (panelHandle, PANEL_TEXTMSG, ATTR_VISIBLE, 0); 
	 
	DisplayPanel (panelHandle); 
	RunUserInterface (); 
	 
	return 0; 
} 
 
int CVICALLBACK PanelCallback (int panel, int event, void *callbackData, 
		int eventData1, int eventData2) 
{ 
	switch (event) 
		{ 
		case EVENT_CLOSE: 
		 
			QuitUserInterface (0); 
			 
			break; 
		} 
	return 0; 
} 
 
int CVICALLBACK QuitCallback (int panel, int control, int event, 
		void *callbackData, int eventData1, int eventData2) 
{ 
	switch (event) 
		{ 
		case EVENT_COMMIT: 
		 
			QuitUserInterface (0); 
			 
			break; 
		} 
	return 0; 
} 
 
int CVICALLBACK SendCallback (int panel, int control, int event, 
		void *callbackData, int eventData1, int eventData2) 
{ 
	char command_string[25]; 
	 
	switch (event) 
		{ 
		case EVENT_COMMIT: 
		 
				//获取STRING控件值 
				GetCtrlVal (panel, PANEL_STRING, command_string); 
				 
                //设置TEXTMSG控件可见 
                SetCtrlAttribute (panel, PANEL_TEXTMSG, ATTR_VISIBLE, 1); 
				 
                //调用ProcessDrawEvents函数 
                //ProcessDrawEvents函数用于更新用户界面 
                ProcessDrawEvents(); 
                 
                //向GPIB设备发送数据 
                ibwrt (device, command_string, strlen(command_string)); 
                 
                //设置TEXTMSG控件不可见 
                SetCtrlAttribute (panel, PANEL_TEXTMSG, ATTR_VISIBLE, 0); 
                 
                //调用ProcessDrawEvents函数 
                ProcessDrawEvents(); 
                 
                //数据发送是否出错 
                if (ibsta & 0x8000) 
					//在控件ERRORCODE中显示出错代码 
					SetCtrlVal (panel, PANEL_ERRORCODE, iberr); 
                else 
                    SetCtrlVal (panel, PANEL_ERRORCODE, 0); 
			break; 
		} 
	return 0; 
} 
 
int CVICALLBACK ReadCallback (int panel, int control, int event, 
		void *callbackData, int eventData1, int eventData2) 
{ 
	char read_buffer[2000]; 
	int bytes; 
	 
	switch (event) 
		{ 
		case EVENT_COMMIT: 
		 
				//获取BYTEROREAD控件值 
				GetCtrlVal (panel, PANEL_BYTETOREAD, &bytes); 
				 
                //设置TEXTMSG控件不可见并调用ProcessDrawEvents函数 
                SetCtrlAttribute (panel, PANEL_TEXTMSG, ATTR_VISIBLE, 1); 
                ProcessDrawEvents(); 
                 
                //从GPIB设备中读取数据 
                ibrd (device, read_buffer, bytes); 
                 
                //设置TEXTMSG控件不可见并调用ProcessDrawEvents函数 
                SetCtrlAttribute (panel, PANEL_TEXTMSG, ATTR_VISIBLE, 0); 
                ProcessDrawEvents(); 
                 
                //读取数据是否出错 
                if (ibsta & 0x8000) 
				{ 
				   //在控件ERRORCODE中显示出错代码 
				   SetCtrlVal (panel, PANEL_ERRORCODE, iberr); 
                   //设置控件TEXTBOX为空 
                   ResetTextBox (panel, PANEL_TEXTBOX, ""); 
                } 
                else 
                { 
                   SetCtrlVal (panel, PANEL_ERRORCODE, 0); 
				   //如果没有出错,将读取的数据显示在TEXTBOX中 
				   ResetTextBox (panel, PANEL_TEXTBOX, read_buffer); 
				} 
			break; 
		} 
	return 0; 
}