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


#include  
#include  
#include 		/* Needed if linking in external compiler; harmless otherwise */ 
#include  
#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); 
}