不妨听woheni 胡扯

BYD CAU 你认识这两个缩写,就有可能认识我

  DonewsBlog  |  Donews首页  |  Donews社区  |  Donews邮箱  |  我的首页  |  联系作者  |  聚合   |  登录
  61篇文章 :: 0篇收藏:: 37篇评论:: 0个Trackbacks

公告

访问量

文章

收藏

相册

BLOG

常用网站

论坛bbs

存档


正在读取评论……


本程序经过我多次调试,欢迎交流。

我的版本是CVI8.0

起动CVI

开始>>程序>>National Instrument CVI>>CVI IDE

或者直接从桌面起动CVI 的快捷方式,双击桌面

      National Instrument CVI 图标

第一步:创建用户界面

 

 

创建控件元素:

Project窗中选择:File>>New>>User Interface(*.uir)…创建一个用户接口文件(*.uir), 在该窗中Untitled Panel 的灰色区域中单击鼠标右键,变会弹出一个快捷菜单从该菜单中选择:Command Button>>Square Command Button   

点击左键后便会创建一个方形的按扭。

由于本程序总共需要三个按扭,所以按照上面的步骤再创建两个方形按扭。从该菜单中选择:Graph>>Graph ,创建一个用于图形显示的Graph

 

 

修改用户界面中各控件元素的属性:

1.修改Panel的属性:

Untitled Panel中双击一下,便会弹出Panel的一个Edit Panel

a.Panel Title项中的Untitled Panel 改为 Demo Panel.

   说明通过这种方式你可以修改Panel 顶端所显示的名字。

b.Auto-Center Vertically(when loaded)

   Auto-Center Horizontallywhen loaded项前的矩形框选中。

   说明:当选中后,程序运行时,面板会自动居中。

点击OK按扭,完成对Panel属性的修改。 

 

 

2.修改Graph的属性:

    Untitled Control的蓝色区域中双击一下,便会弹出Graph的一个Edit Graph

a.Label项中的Untitled Control改为ShowWave.

说明:通过这种方法可以修改Graph的标签名。

点击OK按扭,完成对Graph属性的修改。

 

 

3.修改Command按扭的属性:

(1)Acquire 按扭:

    双击左上方的OK按扭,便会弹出Command的一个Edit Command.

a. Constant Name项改为ACQUIRE

说明:Constant Name是程序中用来标识该控件元素的常量,在后面的编程中会用到。      

bCallback Function项改为AcquireCallback

  说明:Callback Function(回调函数)是程序中用来响应界面中的Windows消息,

        也就是说:当 该按扭被点击之后,程序会调用AcquireCallback函数来作为

           对按扭被按下这一消息的响应。

c  Label项改为  Acquire

 说明:通过这种方法可以修改按扭名字,AcquireA字母前有下画线,是指可

  以通过 Alt + A即可达到按下该按扭的效果(即热键)

点击OK按扭,完成对Command Button属性的修改。

2Clear 按扭:

    与以上步骤相同,双击左下方的OK按扭,弹出Command的一个Edit Command窗。

a.     将其Constant Name改为CLEAR

b.    Callback Function项改为ClearCallback

c.    Label项改为  Clear

点击OK按扭,完成Command Button属性的修改。

(3Quit 按扭:

    与以上步骤相同,双击右方的OK按扭,弹出Command的一个Edit Command窗。

a. 将其Constant Name改为QUIT

b. Callback Function项改为QuitCallback

c. Label项改为  Quit

选择:File>>Save 保存UIR文件,命名为FirstSample.uir

到目前为止我们已经完成了用户界面(user interface)的设计,当程序运行时所显示的界面就是我们刚才上图看到的那样。

下面我们要做的就是真正的程序编制工作,其实CVI可以自动生成许多的代码以及缺省消息的处理函数,你只需添加一些你自己所需的一些代码。

 

 

第二步:完成程序的编制

 

 

产生程序代码:

    从用户图形界面窗口中选择:Code>>Generate>>All Code…

用你的鼠标点击Select QuituserInterface Callback 中的QuitCallk项,确保其前面出现一个小钩。

说明:1。当你想让你的程序的主函数为Win Main而不是Main时你可以选择

           Generate  WinMian(  )  instead of  Main(  )项前的矩形框。

        2Select panels to load and display at startup 项是指你选择那一个Panel作为最初

          装入并显示的Panel,当你创建多个Panel时你就需要选择一个Panel作为最初显

          示的面板。由于本程序只有一个Panel所以该Panel就被缺省的作为最初显示

          的面板而不再需要你去选择。

        3Select QuituserInterface Callback  项是指你选择那一个函数作为退出程序的终

           止函数。本程序是让QuitCallback作为退出函数的。

 

点击OK按扭,便会弹出源代码(Code)窗:

其窗中的程序代码如下所示:

#include <cvirte.h>       

#include <userint.h>

#include "FirstSample.h"

 

 

static int panelHandle;

 

 

int main (int argc, char *argv[ ] )

{

       if (InitCVIRTE (0, argv, 0) == 0)

              return -1; /* out of memory */

       if ((panelHandle = LoadPanel (0, "FirstSample.uir", PANEL)) < 0)

              return -1;

       DisplayPanel (panelHandle);

       RunUserInterface ();

       DiscardPanel (panelHandle);

       return 0;

}

 

 

int CVICALLBACK AcquireCallback (int panel, int control, int event,

              void *callbackData, int eventData1, int eventData2)

{

       switch (event)

              {

              case EVENT_COMMIT:

 

 

                     break;

              }

       return 0;

}

 

 

int CVICALLBACK ClearCallback (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;

}

 

 

 

 

 

 

 

 

该程序代码共有4个函数:

1.              main(     )函数,是程序的入口,它的功能是初始化程序,装载用户界面面板,并显示。

2.              AcquireCallback(     )函数,当Acquire按扭被点击之后,该函数就是响应该消息的函数。

3.              ClearCallback(     )函数,当Clear按扭被点击之后,该函数就是响应该消息的函数。

4.              QuitCallback(     )函数,当Quit按扭被点击之后,该函数就是响应该消息的函数。

    main(  )QuitCallback(  )函数中的代码是计算机自动生成的,而计算机只生成AcquireCallback(  )ClearCallback(  )函数的框架,其内部的用来响应并处理消息的代码是需要你自己添加上去的。

 

 

 

 

 

 

 

 

 

 

添加程序代码:

1.添加AcquireCallback(  )函数的程序代码:

      AcquireCallback(  )函数完成以下功能:从高级分析库(Advanced Ananysis…)中产生一个正弦波,放在Wave数组中。

    现在请将鼠标放在AcquireCallback(  )函数Event_Commit:

下面的空白行上:

说明你鼠标所放位置,就是函数插入的位置。LabWindows/CVI程序中所需的库函数都

       是你使用函数面板,填写参数然后插入到函数所需要的位置。

 请选择:Library>>Advanced Analysis…

在弹出的对话框中选择:

     Signal Generation>>Sine Pattern

请在Number of Elements项中填上512;把Number of Cycles 项改为3Sine Pattern 项中填上用来装正弦信号的数组Wave,由于Wave是一个数组变量,故我门需要声明该变量:

选择Code>>Declare Variable会弹出一个对话框:

请在Number of Elements 项中填上512,并选择了最下面的矩形框,

然后点击OK按扭完成。

返回到函数面板后,选择Code>>Insert Function Call完成函数的插入,这时Code 窗中的AcquireCallback  )函数应如下所示:

int CVICALLBACK AcquireCallback (int panel, int control, int event,

            void *callbackData, int eventData1, int eventData2)

{

     double Wave[512];

     switch (event)

            {

            case EVENT_COMMIT:

                    SinePattern (512, 1.0, 0.0, 3.0, Wave);

            |

                   break;

            }

     return 0;

}

      我们已经的得到了正弦信号,现在需要将该信号画到Graph上去:

    1).请将鼠标放在SinePattern(  )函数下面的空白行上,如上面所示那样。

2). 请选择:

   Library>>User Interface

在弹出的对话框中选择:

   Controls/Graph/Strip Chart>>Graph and Strip Chart>>Graph Plotting and Deleting>>Plot Waveform

把函数面板中的对应各项填写成如下所示:

PanelHandle:         panelHandele

Control ID :          PANEL_GRAPH

Y Array:             Wave

Number  of  Points:   512

选择Code>>Insert Function Call完成函数的插入,这时Code 窗中的AcquireCallback  )函数应如下所示:

CVICALLBACK AcquireCallback (int panel, int control, int event,

              void *callbackData, int eventData1, int eventData2)

{

       double Wave[512];

       switch (event)

              {

              case EVENT_COMMIT:

                      SinePattern (512, 1.0, 0.0, 3.0, Wave);

                      PlotWaveform (panelHandle, PANEL_GRAPH, Wave, 512, VAL_DOUBLE, 1.0,

                                             0.0, 0.0, 1.0, VAL_THIN_LINE, VAL_EMPTY_SQUARE,

                                             VAL_SOLID, 1, VAL_RED);

 

 

                     break;

              }

       return 0;

到现在为止我们已经完成了AcquireCallback(  )函数的的程序代码。

3.添加ClearCallback(  )函数的程序代码:

   ClearCallback(  )函数完成以下功能:当Clear按扭按下后,计算机会清除Graph上所画的正弦图形。

    现在请将鼠标放在ClearCallback(  )函数Event_Commit:

下面的空白行上:

请选择:

   Library>>User Interface

在弹出的对话框中选择:

   Control/Graph/Strip Chart>>Graph and Strip Chart>>Graph Plotting and Deleting>>Delete Graph Plot

把函数面板中的对应各项填写成如下所示:

PanelHandle:         panelHandele

Control ID :          PANEL_GRAPH

PlotHandle:          -1

 

 

选择Code>>Insert Function Call完成函数的插入,这时Code 窗中的ClearCallback  )函数应如下所示:

int CVICALLBACK ClearCallback (int panel, int control, int event,

              void *callbackData, int eventData1, int eventData2)

{

       switch (event)

              {

              case EVENT_COMMIT:

              DeleteGraphPlot (panelHandle, PANEL_GRAPH, -1, VAL_IMMEDIATE_DRAW);   

                      break;

              }

       return 0;

}

到目前为止我们已经完成了程序的编制任务。这一个看起来不算简单的程序,我们编起来并没有写多少源代码,这正是体现了LabWindows/CVI的强大功能所在。

 

 

第四步 运行程序完成项目文件

    现在请你让源代码(Code)窗为当前响应状态,选择:

    Run>>Debug FirstSample_dbg.exe

    便会弹出一个对话框,询问你是否在编译前为该文件命名并添加到工程文件中去。点击yes按扭,把该文件命名为FirstSample.c。然后计算机询问你是否把 “analysis.h”包含到FirstSample.c中去(因为,我们的程序中用到了高级分析库),点击yes按扭,同意该选项。

    运行后的程序正如我们预期要求的那样。退出程序后,从源代码(Code)窗中选择:

    Window>>Project

  现在项目 (Project)窗为当前响应状态,请选择:

Edit>>Add Files to Project…>>All Files(*.*)

    请你按住<Ctrl>键,点击FirstSample.h ,FirstSample.c ,

FirstSample.uir。然后点击Add按扭把这些文件方到Selected Files框中。

   点击OK按扭,把以上文件添加到工程文件中去。

至此为止我们已经完成了第一个程序的编制工作。

 

 



Trackback: http://tb.donews.net/TrackBack.aspx?PostId=821542


[点击此处收藏本文]  发表于2006年04月10日 7:26 PM




正在读取评论……

发表评论

大名:
网址:
验证码
评论