收藏 分销(赏)

基于labwindows的串口通信.doc

上传人:仙人****88 文档编号:12045610 上传时间:2025-09-02 格式:DOC 页数:10 大小:45KB 下载积分:10 金币
下载 相关 举报
基于labwindows的串口通信.doc_第1页
第1页 / 共10页
基于labwindows的串口通信.doc_第2页
第2页 / 共10页


点击查看更多>>
资源描述
#include <ansi_c.h> #include <formatio.h> #include <utility.h> #include <rs232.h> #include <cvirte.h> #include <userint.h> #include "串口通信.h" #define text_length 2048 static int config_handle; config_flag; portindex; port_open; RS232Error; comport; baudrate; parity; databits; stopbits; inputq; outputq; xmode; ctsmode; type; stringsize; bytes_sent; send_byte; send_mode; read_cnt; bytes_read; char devicename[30]; char send_data[text_length]; char read_data[text_length]; char tbox_read_data[text_length]; double timeout; static void *callbackdata; static int panelHandle, graphpanel, config; void ComCallback(int COMport, int eventMask, void *callbackdata); void SetConfigParms (); void GetConfigParms (); void EnablePanelControls (int); void SendAscii(void); void SendByte(void); void DisplayRS232Error (void); void SetConfigParms () { SetCtrlVal (config_handle, CONFIG_COMPORT, comport); SetCtrlVal (config_handle, CONFIG_BAUDRATE, baudrate); SetCtrlVal (config_handle, CONFIG_PARITY, parity); SetCtrlVal (config_handle, CONFIG_DATABITS, databits); SetCtrlVal (config_handle, CONFIG_STOPBITS, stopbits); SetCtrlVal (config_handle, CONFIG_INPUTQ, inputq); SetCtrlVal (config_handle, CONFIG_OUTPUTQ, outputq); SetCtrlVal (config_handle, CONFIG_CTSMODE, ctsmode); SetCtrlVal (config_handle, CONFIG_XMODE, xmode); SetCtrlIndex (config_handle, CONFIG_COMPORT, portindex); } void GetConfigParms () { GetCtrlVal (config_handle, CONFIG_COMPORT, &comport); GetCtrlVal (config_handle, CONFIG_BAUDRATE, &baudrate); GetCtrlVal (config_handle, CONFIG_PARITY, &parity); GetCtrlVal (config_handle, CONFIG_DATABITS, &databits); GetCtrlVal (config_handle, CONFIG_STOPBITS, &stopbits); GetCtrlVal (config_handle, CONFIG_INPUTQ, &inputq); GetCtrlVal (config_handle, CONFIG_OUTPUTQ, &outputq); GetCtrlVal (config_handle, CONFIG_CTSMODE, &ctsmode); GetCtrlVal (config_handle, CONFIG_XMODE, &xmode); GetCtrlVal (config_handle, CONFIG_TIMEOUT, &timeout); GetCtrlIndex (config_handle, CONFIG_COMPORT, &portindex); #ifdef _NI_unix_ devicename[0]=0; #else GetLabelFromIndex (config_handle, CONFIG_COMPORT, portindex, devicename); #endif } void EnablePanelControls (int enable) { SetCtrlAttribute (panelHandle, PANEL_SENDMODE, ATTR_DIMMED, enable); SetCtrlAttribute (panelHandle, PANEL_SENDDATA, ATTR_DIMMED, enable); SetCtrlAttribute (panelHandle, PANEL_SENDNUMBER, ATTR_DIMMED, enable); SetCtrlAttribute (panelHandle, PANEL_RECEIVENUMBER, ATTR_DIMMED, enable); SetCtrlAttribute (panelHandle, PANEL_RECEIVEDATA, ATTR_DIMMED, enable); SetCtrlAttribute (panelHandle, PANEL_STOPRECEIVE, ATTR_DIMMED, enable); SetCtrlAttribute (panelHandle, PANEL_CHECKDATA, ATTR_DIMMED, enable); SetCtrlAttribute (panelHandle, PANEL_CHECKGRAPH, ATTR_DIMMED, enable); SetCtrlAttribute (panelHandle, PANEL_FLUSHINPUT, ATTR_DIMMED, enable); SetCtrlAttribute (panelHandle, PANEL_FLUSHOUTPUT, ATTR_DIMMED, enable); SetCtrlAttribute (panelHandle, PANEL_DATA, ATTR_DIMMED, enable); } int main (int argc, char *argv[]) { if (InitCVIRTE (0, argv, 0) == 0) return -1; /* out of memory */ if ((panelHandle = LoadPanel (0, "串口通信.uir", PANEL)) < 0) return -1; DisplayPanel (panelHandle); RunUserInterface (); DiscardPanel (panelHandle); return 0; } int CVICALLBACK configcallback (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { switch (event) { case EVENT_COMMIT: config_handle = LoadPanel (panelHandle, "串口通信.uir", CONFIG); InstallPopup (config_handle); if (config_flag) /* Configuration done at least once.*/ SetConfigParms (); else config_flag = 1; break; } return 0; } int CVICALLBACK sendmodecallback (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { switch (event) { case EVENT_COMMIT: GetCtrlVal (panelHandle, PANEL_SENDMODE, &send_mode); if(send_mode) { SetCtrlAttribute (panelHandle, PANEL_SENDDATAPLOT, ATTR_DIMMED, 0); SetCtrlAttribute (panelHandle, PANEL_DATA, ATTR_DIMMED,1); } else { SetCtrlAttribute (panelHandle, PANEL_SENDDATAPLOT, ATTR_DIMMED, 1); SetCtrlAttribute (panelHandle, PANEL_DATA, ATTR_DIMMED,0); } } return 0; } int CVICALLBACK sendcallback (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { switch (event) { case EVENT_COMMIT: GetCtrlVal (panelHandle, PANEL_SENDMODE, &type); if(type) SendAscii(); else SendByte(); RS232Error = ReturnRS232Err (); if (RS232Error) DisplayRS232Error(); SetCtrlVal (panelHandle, PANEL_SENDNUMBER, bytes_sent); break; } return 0; } void SendAscii() { GetCtrlVal (panelHandle, PANEL_SENDDATAPLOT, send_data); stringsize = StringLength (send_data); bytes_sent = ComWrt (comport, send_data, stringsize); } void SendByte() { GetCtrlVal (panelHandle, PANEL_DATA,&send_byte); bytes_sent = ComWrtByte (comport, send_byte); } int CVICALLBACK receivecallback (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { switch (event) { case EVENT_COMMIT: InstallComCallback (comport, LWRS_RECEIVE, 2, 0, ComCallback, callbackdata); case EVENT_RIGHT_CLICK : break; } return 0; } void ComCallback(int COMport, int eventMask, void *callbackdata) { int inputqueuelength; int bytesread; char buffer[512]; char *matchedchar = 0; double value; int i; inputqueuelength = GetInQLen (comport); bytesread = ComRd (comport, buffer, inputqueuelength); for (i = 0; i <= bytesread; i ++) { matchedchar = buffer + i ; CopyString (tbox_read_data, 0, matchedchar, 0, inputqueuelength); SetCtrlVal (panelHandle, PANEL_RECEIVEDATAPLOT, tbox_read_data); break; } ArrayToFile ("c:\\Users\\wanglei\\Desktop\\串口数据.txt", tbox_read_data, VAL_CHAR, inputqueuelength, 1, VAL_DATA_MULTIPLEXED, VAL_GROUPS_AS_COLUMNS, VAL_CONST_WIDTH, 2, VAL_BINARY, VAL_APPEND); } int CVICALLBACK clearcallback (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { switch (event) { case EVENT_COMMIT: ResetTextBox (panelHandle, PANEL_RECEIVEDATAPLOT, "\0"); break; } return 0; } int CVICALLBACK stopcallback (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { switch (event) { case EVENT_COMMIT: break; } return 0; } int CVICALLBACK checkgraphcallback (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { switch (event) { case EVENT_COMMIT: break; } return 0; } int CVICALLBACK checkdatacallback (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { switch (event) { case EVENT_COMMIT: 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 flushoutputcallback (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 flushinputcallback (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; } int CVICALLBACK closecallback (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { switch (event) { case EVENT_COMMIT: port_open = 0; /* initialize flag to 0 - unopened */ GetConfigParms (); DisableBreakOnLibraryErrors (); RS232Error = OpenComConfig (comport, devicename, baudrate, parity, databits, stopbits, inputq, outputq); EnableBreakOnLibraryErrors (); if (RS232Error) { MessagePopup ("RS232 Message", "Please Reset the RS232 Configuer Content "); }; if (RS232Error == 0) { port_open = 1; GetCtrlVal (config_handle, CONFIG_XMODE, &xmode); SetXMode (comport, xmode); GetCtrlVal (config_handle, CONFIG_CTSMODE, &ctsmode); SetCTSMode (comport, ctsmode); GetCtrlVal (config_handle, CONFIG_TIMEOUT, &timeout); SetComTime (comport, timeout); EnablePanelControls (0); } else EnablePanelControls (1); DiscardPanel (config_handle); break; } return 0; } int CVICALLBACK ledcallback (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { if (event == EVENT_TIMER_TICK) { } return 0; } void DisplayRS232Error (void) { char ErrorMessage[200]; switch (RS232Error) { default : if (RS232Error < 0) { Fmt (ErrorMessage, "%s<RS232 error number %i", RS232Error); MessagePopup ("RS232 Message", ErrorMessage); } break; case 0 : MessagePopup ("RS232 Message", "No errors."); break; case -2 : Fmt (ErrorMessage, "%s", "Invalid port number (must be in the " "range 1 to 8)."); MessagePopup ("RS232 Message", ErrorMessage); break; case -3 : Fmt (ErrorMessage, "%s", "No port is open.\n" "Check COM Port setting in Configure."); MessagePopup ("RS232 Message", ErrorMessage); break; case -99 : Fmt (ErrorMessage, "%s", "Timeout error.\n\n" "Either increase timeout value,\n" " check COM Port setting, or\n" " check device."); MessagePopup ("RS232 Message", ErrorMessage); break; } }
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服