基于Labwindows CVI 2017编写的一个简单的串口调试助手,附带接收一个00–99的两位数并进行波形绘制的功能,编写过程可见:https://blog.csdn.net/Stark_/article/details/129003839

#include <ansi_c.h>
#include <rs232.h>
#include <cvirte.h>
#include <userint.h>
#include "SerialDebug.h"#define MAX_BUF_NUM 512static int panelHandle;       //主界面句柄int comSelect = 0;   //串口号
int status;
int ComState = 0;  //串口开关状态
char info[MAX_BUF_NUM+1]; //串口数据缓冲区
//设置页面控件状态,stat = 0表示关闭,1表示打开
//SetCtrlAttribute(,,ATTR_DIMMED,)将对应控件属性变暗和变亮,以禁用和使用对应控件
int CVIFUNC DimObject(int stat)
{SetCtrlAttribute(panelHandle,PANEL_COMSELECT,ATTR_DIMMED,stat); //串口号选择 SetCtrlAttribute(panelHandle,PANEL_BAUDSELECT,ATTR_DIMMED,stat); //波特率SetCtrlAttribute(panelHandle,PANEL_CHECKSELECT,ATTR_DIMMED,stat);//校验位SetCtrlAttribute(panelHandle,PANEL_LONGSELECT,ATTR_DIMMED,stat); //数据位SetCtrlAttribute(panelHandle,PANEL_STOPSELECT,ATTR_DIMMED,stat);//停止位SetCtrlAttribute(panelHandle,PANEL_OPEN_COM,ATTR_DIMMED,stat);  //打开串口SetCtrlVal(panelHandle,PANEL_LED,stat);   //LED SetCtrlAttribute(panelHandle,PANEL_CLOSE_COM,ATTR_DIMMED,!stat); //关闭串口SetCtrlAttribute(panelHandle,PANEL_SEND,ATTR_DIMMED,!stat);//发送return 0;
}int main (int argc, char *argv[])
{if (InitCVIRTE (0, argv, 0) == 0)return -1;  /* out of memory */if ((panelHandle = LoadPanel (0, "SerialDebug.uir", PANEL)) < 0)return -1;DimObject(0);DisplayPanel (panelHandle);RunUserInterface ();DiscardPanel (panelHandle);return 0;
}int CVICALLBACK PanelMain (int panel, int event, void *callbackData,int eventData1, int eventData2)
{switch (event){case EVENT_GOT_FOCUS:break;case EVENT_LOST_FOCUS:break;case EVENT_CLOSE:QuitUserInterface (0);//关闭面板0(主面板)break;}return 0;
}int CVICALLBACK ComOpen (int panel, int control, int event,void *callbackData, int eventData1, int eventData2)
{int comValue,baudValue,checkValue,longValue,stopValue; switch (event){case EVENT_COMMIT:GetCtrlVal(panelHandle,PANEL_COMSELECT,&comValue); //获取串口号GetCtrlVal(panelHandle,PANEL_BAUDSELECT,&baudValue); //获取波特率 GetCtrlVal(panelHandle,PANEL_CHECKSELECT,&checkValue);//获取校验位GetCtrlVal(panelHandle,PANEL_LONGSELECT,&longValue);//获取数据位GetCtrlVal(panelHandle,PANEL_STOPSELECT,&stopValue);//获取停止位//设置和打开串口status = OpenComConfig(comValue,"",baudValue,checkValue,longValue,stopValue,MAX_BUF_NUM,MAX_BUF_NUM);if(status!=0){MessagePopup("Error","config failed!");   //弹窗提示ComState = 0;return 0;}SetCTSMode(comValue,LWRS_HWHANDSHAKE_OFF); /* 禁止硬件握手,即不用RTS/CTS和DTR/DSR */FlushInQ(comValue);   //清空输入队列的缓存数据FlushOutQ(comValue);  //清空输出队列的缓存数据comSelect = comValue;DimObject(1);ComState = 1;  //串口开启状态break;}return 0;
}int CVICALLBACK ClearTextBox (int panel, int control, int event,void *callbackData, int eventData1, int eventData2)
{switch (event){case EVENT_COMMIT:if(control == PANEL_CLEARRECEIVE)//清除接收控件ResetTextBox(panelHandle,PANEL_RECEIVETEXT,"\0");//清除接收框elseResetTextBox(panelHandle,PANEL_SENDTEXT,"\0");//清除发送框break;}return 0;
}int CVICALLBACK Send (int panel, int control, int event,void *callbackData, int eventData1, int eventData2)
{switch (event){case EVENT_COMMIT:if(!comSelect) return -1; //发送出错GetCtrlVal(panelHandle,PANEL_SENDTEXT,info);//获取要发送的文本status = ComWrt(comSelect,info,strlen(info));//发送if(status != strlen(info))MessagePopup("Error","Send data failed!");  //弹窗提示break;}return 0;
}int CVICALLBACK Timer (int panel, int control, int event,void *callbackData, int eventData1, int eventData2)
{int i = 0;int len = 0;double point = 0;switch (event){case EVENT_TIMER_TICK:if(ComState){if(!comSelect) return -1;SetComTime(comSelect,1); //设置一帧数据的接收超时时间为1slen = GetInQLen(comSelect);status = ComRd(comSelect,info,len);//接收,GetInQLen用于得到Com口的输入队列数据缓存的大小if(status<=0){//MessagePopup("Error","Read data failed!");   //弹窗提醒没有读取到信息break;}//将信息写入接收框info[status] = '\0';SetCtrlVal(panelHandle,PANEL_RECEIVETEXT,info); //设置接收文本框显示info的内容SetActiveCtrl(panelHandle,PANEL_RECEIVETEXT);    if((len == 2)||(info[2] == 0x0D))  //收到两个字符,或者第三个字符是回车{point = (info[0]-48)*10 + (info[1]-48);   //接收一个两位数,比如 01、09、10、90、ABif((point>=0)&&(point<=99))//判定这个两位数属于00-99之间{PlotStripChartPoint(panelHandle,PANEL_WAVE_DISPLAY,point);    //对于在范围内的数据进行绘制点}}for(0;i<len;i++){info[i]=0;i++;}}break;}return 0;
}int CVICALLBACK ComClose (int panel, int control, int event,void *callbackData, int eventData1, int eventData2)
{switch (event){case EVENT_COMMIT:CloseCom(comSelect);      //关闭串口comSelect = 0;DimObject(0);ComState = 0; break;case EVENT_TIMER_TICK:break;}return 0;
}

LabWindows CVI 2017开发笔记--串口调试软件实例源码相关推荐

  1. LabWindows CVI 2017开发笔记--串口调试软件实例

    一.新建工程 打开LabWindows CVI软件,在桌面新建SerialDebug文件夹用来保存工程文件,在欢迎页点击New–>Project 或者在软件首页点击File–>New–&g ...

  2. LabWindows CVI 2017开发笔记--常用API

    参考资料:https://download.csdn.net/download/Stark_/87424565?spm=1001.2014.3001.5501 转载注明出处:https://blog. ...

  3. android做拨号程序代码,Android开发手机拨号程序实现实例源码介绍

    Android开发手机拨号程序实现实例源码介绍,在上一篇文章中,我们实现了第一个程序:helloWorld,并成功测试完成.还给大家介绍了Android项目结构和说明.现在写一个手机拨号程序: 首先, ...

  4. Android通用开发笔记和高性能安卓开发框架源码

    笔记列表 云炬Android开发笔记(准备篇) Android studio及AVD模拟器的安装调试教程 云炬Android开发笔记 2项目初始化 云炬Android开发笔记 3框架主配置的入口的设计 ...

  5. Labwindows/cvi 2017生成软件安装包只能在win10以上系统安装,NI官方给出原因。

    Labwindows/cvi 2017生成软件安装包只能在win10以上系统安装 最近一直使用CVI开发上位机软件,之前一直用CVI2012由于IDE比较老使用起来不太友好,所以更换了CVI2017, ...

  6. 变频器怎么设置_如何利用串口调试软件与变频器通信?

     西门子博途的全套视频教程下载!  西门子S7-1500内部培训PPT下载! 每一个做工控的都必须要会利用串口调试软件来和我们的外围设备来做通讯测试.今天我们就来学习怎么用串口调试软件控制台达的这款变 ...

  7. windows串口调试linux工具,推荐一款好用的串口调试软件PuTTY

    原标题:推荐一款好用的串口调试软件PuTTY PuTTY是一个Telnet.SSH.rlogin.纯TCP以及串行接口连接软件.较早的版本仅支持Windows平台,在最近的版本中开始支持各类Unix平 ...

  8. 串口调试软件,功能强大,侦测,拦截,逆向分析串口通汛协议

    串口调试软件,功能强大,侦测,拦截,逆向分析串口通汛协议,是RS232 /422/485串行端口的专业工貝软件编号:436653364752811GUANXFENG

  9. 用python写的一个串口调试软件

    分享一个用pyqt5+pyserial给公司写的串口调试软件 串口的发送和接收都是用多线程写的,实现界面UI与数据部分分离 支持hex发送与解析,还有定时发送功能 ui文件全是用qt desinger ...

最新文章

  1. DevOps:怎么实现源代码注释和系统文档的自动化更新?
  2. 【基带传输】基于matlab的简易无线基带传输系统的仿真
  3. python实现DES算法
  4. Mysql手动增加一列_Blog of Grow_百度空间
  5. mysql awr flush_Oracle ASH内存强制Flush日志解决一例
  6. 实验3 编程、编译、链接、跟踪
  7. 天龙八部网单服务器技能修改,天龙八部3门派技能修改介绍
  8. for语句 2017-03-17
  9. MongoDB工具MagicMongoDBTool使用介绍(一) -- 简单MongoDB入门
  10. 将DynamipsGUI和VMware虚拟机进行桥接
  11. 零基础使用 MATLAB 求解偏微分方程(建议收藏)
  12. linux redis配置文件位置,Linux下对redis修改配置文件
  13. 【机器视觉】机器人及视觉检测系统在螺丝检测包装生产线上的应用
  14. 利用三轴加速器的计步测算方法
  15. java对word文档的操作
  16. scitkit-learn:计算机科学论文的TF / IDF和余弦相似度
  17. 23-动态SQL之IF语句
  18. [学]PHP爬虫框架phpspider
  19. unity 录音并保存本地
  20. python 实现简单的session登录

热门文章

  1. NAND FLASH学习笔记之MTD下nand flash驱动(二)
  2. 致远SPM之智慧印章管理解决方案
  3. 热烈庆祝《Spring Boot 2.X 实战教程》上线了!
  4. win7使用VMware安装win7虚拟机上网设置
  5. Ubuntu安装后屏幕倒置,翻转,颠倒的解决
  6. Mybatis框架的引入
  7. vue+node+mysql项目开发(包括部署到服务器)
  8. 报错解决:Cause: java.lang.NumberFormatException: For input string:
  9. xshell连接windows的ubuntu子系统
  10. 玩转电商数据分析及运营,推荐你看这 7 本好书