📄 sample12_gpib.c
字号:
#include <ansi_c.h>
#include <utility.h>
#include <gpib.h>
#include <cvirte.h> /* Needed if linking in external compiler; harmless otherwise */
#include <userint.h>
#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;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -