⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sample12_rs.c

📁 一个对GPIB 读写操作的程序源码 LABWINDOW/CVI
💻 C
字号:
#include <formatio.h>
#include <rs232.h>
#include <cvirte.h>		/* Needed if linking in external compiler; harmless otherwise */
#include <userint.h>
#include "sample12_rs.h"

static int panelHandle;
int baudrate,status,comport;

int main (int argc, char *argv[])
{
	if (InitCVIRTE (0, argv, 0) == 0)
		return -1;
		
	if ((panelHandle = LoadPanel (0, "sample12_rs.uir", PANEL)) < 0)
		return -1;
		
	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 ConfigCallback (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	char devicename[10];
	
	switch (event)
		{
		case EVENT_COMMIT:
	     //获取COMPORT、BAUDRATE控件值
	     GetCtrlVal (panel, PANEL_COMPORT, &comport);
	     GetCtrlVal (panel, PANEL_BAUDRATE, &baudrate);
	     
         //从COMPORT控件得到设备名
         GetLabelFromIndex (panel, PANEL_COMPORT, comport-1, devicename);
		 
         //配置COM 端口
         status = OpenComConfig (comport, devicename, baudrate, 0, 7, 1, 0, 0);
		 
         //配置失败,显示出错信息
         if(status!=0)  MessagePopup ("Error", "Config failed!");
         
         //如果配置成功,设置TEXTBOX、SEND、
		 //READ、BYTESTOREAD、CLEAR、FLUSHOUTQ、FLUSHINQ控件有效
         SetCtrlAttribute (panel, PANEL_TEXTBOX, ATTR_DIMMED, -status);
	     SetCtrlAttribute (panel, PANEL_SEND, ATTR_DIMMED, -status);
         SetCtrlAttribute (panel, PANEL_READ, ATTR_DIMMED, -status);
	     SetCtrlAttribute (panel, PANEL_BYTESTOREAD, ATTR_DIMMED, -status);
	     SetCtrlAttribute (panel, PANEL_CLEAR, ATTR_DIMMED, -status);
		 SetCtrlAttribute (panel, PANEL_FLUSHOUTQ, ATTR_DIMMED, -status);
		 SetCtrlAttribute (panel, PANEL_FLUSHINQ, ATTR_DIMMED, -status);
			break;
		}
	return 0;
}

int CVICALLBACK ReadCallback (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	int bytes;
	char data[2000];
	switch (event)
		{
		case EVENT_COMMIT:
		
            //获取BYTESTOREAD控件值
            GetCtrlVal (panel, PANEL_BYTESTOREAD, &bytes);
			
            //从COM端口读取数据
            status=ComRd (comport, data, bytes);

            //读取数据是否成功
            if(status<0)  
            {
               //读取数据失败,显示出错信息并退出
               MessagePopup ("Error", "Read data failed!");
		       break;
			}
			
			//将读取的数据显示在TEXTBOX控件中
			ResetTextBox (panel, PANEL_TEXTBOX, data);
			break;
		}
	return 0;
}

int CVICALLBACK SendCallback (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	int bytes;
	char data[2000];
	
	switch (event)
		{
		case EVENT_COMMIT:
		
	        //获取TEXTBOX控件的值	
	        GetCtrlVal (panel, PANEL_TEXTBOX, data);
			
            //向COM端口发送数据 
            bytes = StringLength (data);
            
            //发送数据失败,显示出错信息
            status=ComWrt (comport, data, bytes);
            
            if(status!=bytes)  
                 MessagePopup ("Error", "Send data failed!");
			break;
		}
	return 0;
}

int CVICALLBACK ClearCallback (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	switch (event)
		{
		case EVENT_COMMIT:
		
		    //设置控件TEXTBOX为空
		    ResetTextBox (panel, PANEL_TEXTBOX, "\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 FlushOutQCallBack(int panel, int control, int event, void *callbackData, int eventData1, int eventData2)
{
    switch (event) {
        case EVENT_COMMIT :
            //清空输出队列
            FlushOutQ (comport);
            MessagePopup ("RS232 Message", "Output queue flushed.");
            break;
    }

    return(0);
}

int CVICALLBACK FlushInCallBack(int panel, int control, int event, void *callbackData, int eventData1, int eventData2)
{
    switch (event) {
        case EVENT_COMMIT :
            //清空输入队列
            FlushInQ (comport);
            MessagePopup ("RS232 Message", "Input queue flushed.");
            break;
    }

    return(0);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -