labwindowscvi测试应用程序编程
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Eg4.构造波形线程函数
▪ DWORD WINAPI ThreadCreateWaveProc(PVOID pParam)
▪ {……
▪
SetEvent(dispwavehandle);
▪
while(1)
▪
{
▪
WaitForSingleObject(dispwavehandle,INFINITE);
Labwindows CVI简介
▪ 如何创建一个应用?
▪ 创建工作区,工程 ▪ 添加源文件 ▪ 添加用户接口资源文件
Labwindows CVI简介
1.图形化应用程序的基本框架
▪ 所有人机交互的都通过面板,控件,菜单来实 现。控件和菜单都置于面板上,在程序中要载 入面板通过函数LoadPanel()来实现;
▪
RunUserInterface ();
▪
DiscardPanel (hpanel);
return 0;
▪}
Eg4.线程处理函数
▪ DWORD WINAPI ThreadWaveProc(PVOID pParam)
▪ {……
▪ while(1)
▪{
▪
SetCtrlAttribute(PANEL, PANEL_GRAPH,ATTR_REFRESH_GRAPH,0);
▪ createwavehandle = CreateEvent(NULL,TRUE,FALSE,NULL);
▪ dispwavehandle = CreateEvent(NULL,TRUE,FALSE,NULL);
▪ threadwaveHandle =
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadWaveProc,
▪
{
▪
SetCtrlAttribute(PANEL, PANEL_GRAPH,ATTR_REFRESH_GRAPH,0);
//将绘图空间设置为刷新方式
▪
DeleteGraphPlot (PANEL, PANEL_GRAPH, -1, VAL_DELAYED_DRAW);
//清屏
▪
i = RefreshGraph( PANEL, PANEL_GRAPH);//更新绘图控件并显示
▪ int CVICALLBACK RefreshWaveProc(int panel, int control, int event, void *callbackData, int eventData1, int eventData2)
▪{
▪ ……
▪ if(event == EVENT_COMMIT)
▪
/* panel already in the UIR Editor.*/
▪
DisplayPanel (hpanel); //显示面板
▪
InstallMainCallback (MainCallback, 0, 1); //安装主回调函数
▪
RunUserInterface ();
//运行用户接口程序
pParam); ▪ DWORD WINAPI
ThreadCreateWaveProc(PVOID pParam); ▪ CRITICAL_SECTION cs;
Eg4.线程同步中线程的创建
▪ int main(int argc, char *argv[])
▪{
▪ ……
▪ InitializeCriticalSection(&cs);
▪
SetCtrlAttribute(PANEL, PANEL_GRAPH,ATTR_REFRESH_GRAPH,0);
▪
DeleteGraphPlot (PANEL, PANEL_GRAPH, -1, VAL_DELAYED_DRAW);
for(i=0;i<DISPDATALEN;i++)
▪
{
▪
PlotPoint (PANEL, PANEL_GRAPH, XData[i],YData[i],
i],VAL_SMALL_SOLID_SQUARE, VAL_RED); LeaveCriticalSection(&cs);
4.多线程程序-线程间的同步
Eg4.线程同步中变量定义
▪ HANDLE threadwaveHandle; ▪ HANDLE threadwaveHandle1; ▪ HANDLE createwavehandle; ▪ HANDLE dispwavehandle; ▪ DWORD WINAPI ThreadWaveProc(PVOID
▪
DeleteGraphPlot (PANEL, PANEL_GRAPH, -1, VAL_DELAYED_DRAW);
▪
for(i=0;i<DISPDATALEN;i++)
▪
{
▪
PlotPoint (PANEL, PANEL_GRAPH, XData[i],YData[i],
VAL_SMALL_SOLID_SQUARE, VAL_RED);
▪ 特点
▪ 友好的界面编辑方式 ▪ 可灵活使用的编程工具 ▪ 功能强大的软件包
Labwindows CVI简介
▪ LabWindows/CVI开发环境构成
▪ 四个编辑窗口
▪ 工作区窗口 ▪ 用户界面编辑窗口 ▪ 代码编辑窗口 ▪ 函数面板编辑窗口
▪ 主要文件类型
▪ 工作区文件(*.cws)、工程文件、源文件、头文件、 函数面板文件
Eg3.开始和停止按钮操作的实现
▪ SetCtrlAttribute(hpanel, PANEL_TIMER,ATTR_ENABLED,1);
▪ SetCtrlAttribute(hpanel, PANEL_TIMER,ATTR_ENABLED,0);
//使能定时器 //使定时器无效
Eg3.定时器回调函数代码
Eg2.波形清除按钮处理函数代码
▪ int CVICALLBACK ClearWaveProc(int panel, int control, int event, void *callbackData, int eventData1, int eventData2)
▪{
▪
int i;
▪
if(event == EVENT_COMMIT)
▪
}
▪
return 0;
▪}
3.并发程序设计——定时器
▪ 怎样才能实现波形的动态更新呢?简单的方法 就是通过定时器,通过设定时间间隔,定时完 成波形的刷新。
▪ 在程序面板中添加定时器,设定定时器的时间 间隔,并设置定时器时间到时的回调函数,在 回调函数中添加需要定时完成的工作,就能实 现程序的并发执行。
▪ int CVICALLBACK TimerProc(int panel, int control, int event, void *callbackData, int eventData1, int eventData2)
▪ { ……
▪
switch (event)
▪
{
▪
case EVENT_TIMER_TICK:
▪ {SetCtrlAttribute(PANEL, PANEL_GRAPH,ATTR_REFRESH_GRAPH,0); //将绘图空间设置为刷新方式
▪ DeleteGraphPlot (PANEL, PANEL_GRAPH, -1, VAL_DELAYED_DRAW); //清屏
▪ for(i=0;i<DISPDATALEN;i++)
▪
{
PlotPoint (PANEL, PANEL_GRAPH, XData[i],YData[i],
VAL_SMALL_SOLID_SQUARE, VAL_RED); //画点
▪
}
▪ i = RefreshGraph( PANEL, PANEL_GRAPH); //更新绘图控件并显示
▪}
▪
return 0;
▪ 程序中对用户操作的响应通过回调函数来实现 ,要关闭程序则在主回调函数中实现。
▪ 通过调用RunUserInterface ()函数,使整个 程序运行起来,该函数负责接收用户的控制信 息,并调用各控件或菜单的回调函数。
▪ 程序执行完毕,需要释放资源。
Eg1.程序代码
▪ int CVICALLBACK MainCallback(int panel, int control, int event, void *callbackData, int eventData1, int eventData2);
4.多线程程序
Eg4.线程的创建
▪ HANDLE threadwaveHandle;
▪ DWORD WINAPI ThreadWaveProc(PVOID pParam);
▪ int main(int argc, char *argv[])
▪ {……
if ((hpanel = LoadPanel (0, "gui.uir", PANEL)) < 0)
ptr,0,&id); /* 创建显示波形线程
*/
▪ threadwaveHandle1 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadCreateWaveProc , ptr,0,&createid); /* 创建构造波形线程*/
▪ ……
▪}
本章要点
▪ Labwindows CVI简介 ▪ 测试应用程序举例
▪ 图形化应用程序的基本框架 ▪ 有波形显示界面的ui程序设计 ▪ 并发程序设计——定时器 ▪ 并发程序设计——多线程程序 ▪ 分析库应用举例 ▪ 带波形显示的visa应用
Labwindows CVI简介
▪ LabWindows/CVI是一个基于ANSI C的,用于开 发仪器控制,自动测试,数据采集等应用程序 的集成化的软件开发平台
▪
/* Free resources and return */
▪
DiscardPanel (hpanel);//释放资源
▪
return 0;
2.有波形显示界面的ui程序
▪ 该程序在图形控件中显示波形,通过点击波形 更新按钮可以更新波形显示,点击清除波形按 钮可以清除波形显示
▪ 关注按钮处理函数
Eg2.波形刷新按钮处理函数代码
▪ int main(int argc, char *argv[])
▪{
▪
int hpanel;
▪
if ((hpanel = LoadPanel (0, "gui.uir", PANEL)) < 0)//载入面板
▪
return -1;
▪
/* Display the panel and run the UI*/
▪ {……
▪
while(1)
▪
{
▪
WaitForSingleObject(createwavehandle,INFINITE);
▪
ResetEvent(createwavehandle);
▪
EnterCriticalSection(&cs);
▪
//显示波形
▪
LeaveCriticalSection(&cs);
▪
return -1;
▪
threadwaveHandle =
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadWaveProc,
ptr,0,&id); /* 创建接收数据线程
*/
▪
DisplayPanel (hpanel);
▪
InstallMainCallback (MainCallback, 0, 1);
▪
}
▪
i = RefreshGraph( PANEL, PANEL_GRAPH);
▪}
▪ return 0;
▪}
4.多线程程序
▪ 挂起线程按钮处理,关闭程序时会出现问题? ▪ 解决的方法
▪ 临界区
EnterCriticalSection(&cs); PlotPoint(PANEL,PANEL_GRAPH,XData[i],YDat[
▪
ResetEvent(dispwavehandle);
▪
fstart =istart*3.14/60;
▪
for(i=0;i<DISPDATALEN;i++)
▪
{//构造波形样点
▪
}
▪
SetEvent(createwavehandle);
▪
}
▪
return 0;
▪}
Eg4.显示波形线程函数
▪ DWORD WINAPI ThreadWaveProc(PVOID pParam)
VAL_SMALL_SOLID_SQUARE, VAL_RED);
▪
}
▪
i = RefreshGraph( PANEL, PANEL_GRAPH);
Biblioteka Baidu
▪
break;
▪}
4.多线程程序
▪ 定时器的缺点 ▪ 多线程的特点 ▪ 线程的设置
▪ UI线程 ▪ 工作线程
▪ 该用例线程设置
▪ 用户线程 ▪ 波形刷新线程