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