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; }