LabWindows/CVI(二):基本代码框架函数说明

 1、主函数

主函数是程序的入口
包含:初始化运行库、装载用户面板、显示用户面板、删除面板、关闭运行时库等操作

#include <cvirte.h>        
#include <userint.h>
#include "温度2.h"

static int panelHandle;

//主函数
int main (int argc, char *argv[])
{
    // 初始化CVI运行时库
    /**
      * InitCVIRTE函数:初始化CVI运行时库
      * 函数原型为:int InitCVIRTE(void *HInstance,char *Argv[],void *Reserved);
      * *HInstance:如果采用main作为主函数,则输入值必须为0
      * *Argv[]:指向调试时生成的可执行文件的文件名
      * *Reserved:保留参数,一般设置为0
      * int:返回值,返回程序初始化运行时库的状态,该数据类型为整型;
            1:运行成功        0:运行失败,可能出现的问题是内存溢出
      **/
    if (InitCVIRTE (0, argv, 0) == 0)                            
        return -1;    /* 若内存溢出,返回-1 */
        
    // 装载面板,返回面板句柄
    /**
      * LoadPanel函数:将用户界面文件载入内存中
      * 函数原型为:int LoadPanel(int Parent_Panel_Handle,char Filename[],int Panel_Resource_ID)
      * Parent_Panel_Handle:父面板句柄,此参数是面板常量名所指代的父面板。如果设置为0,则说明
            该面板就是处在最顶层的面板。
      * Filename[]:文件名,此参数设置的是被载入的用户界面文件的文件名
      * Panel_Resource_ID:面板常量名,此参数是在用户编辑界面文件中定义的常量名
      * int:返回值为面板句柄。设置了这个参数,在以后的函数调用中使用该面板句柄可以指代该面板。
            如果返回正值代表运行成功,返回负值代表运行失败。每个负值代表产生的一个错误类型码。
      **/
    if ((panelHandle = LoadPanel (0, "温度2.uir", PANEL)) < 0)
        
        return -1;
    
    //在屏幕上显示面板    函数原型为:int DisplayPanel(int Panel_Handle);
    DisplayPanel (panelHandle);
    
    //运行用户界面    函数原型为:int RunUserInterface(void);
    RunUserInterface ();
    
    //从内存中删除面板及其子面板,并在屏幕中清除    
    /**
      * 函数原型为:int DiscardPanel(int Panel_Handle);
      * Panel_Handle:面板句柄,此参数是设置所要删除的面板句柄
      **/
    DiscardPanel (panelHandle);
    //若程序成功退出,返回0
    return 0;
    
}
主函数

2、回调函数

回调函数(1)

//回调函数,函数功能:当按下该按钮时,退出用户界面
int CVICALLBACK Quit (int panel, int control, int event,
                      void *callbackData, int eventData1, int eventData2)
{
    switch (event)
    {
        //控件响应的事件
        case EVENT_COMMIT:
            //在运行用户界面时,执行该函数会退出用户界面
            /**
              * 函数原型为:int QuitUserInterface(int Return_Code);
              * Return_Code:返回代码,一般设置为0
              **/
            QuitUserInterface(0);
            break;
    }
    return 0;
}
//回调函数,函数功能:开关控件处于ON时,使LED点亮
int CVICALLBACK Acquire (int panel, int control, int event,
                         void *callbackData, int eventData1, int eventData2)
{
    static double max,min;
    static int max_index,min_index;
    int i,j,value;
    //定义信号采样数据点数组
    double datapoints[100];
    
    switch (event)
    {
        //控件响应的事件
        case EVENT_COMMIT:
            /**
              * 获得控件的值 GetCtrlVal
              * 函数原型为:int GetCtrlVal(int Panel_Handle,int Control_ID,void *Value);
              * Panel_Handle:面板句柄,该项是在函数LoadPanel里设置的
              * Control_ID:控件ID (面板名 + 控件名)
              * *Value:控件的值,该数据类型与控件本身的数据类型一致
              **/
            //获得开关控件的状态
            GetCtrlVal(panelHandle,PANEL_BINARYSWITCH,&value);
            //判断开头是否为"开"
            if(value == 1){
            /**
              * 设置控件的属性值 SetCtrlVal
              * 函数原型为:int SetCtrlVal(int Panel_Handle,int Control_ID,any type Value);
              * GetCtrlVal函数Value填写的是变量的地址(需要加上取地址符"&");SetCtrlVal函数Value需要填写的是变量
              **/
                //点亮LED,即为状态1
                SetCtrlVal(panelHandle,PANEL_LED,1);
            /**
              * 设置控件属性 SetCtrlAttribute
              * 函数原型为:int SetCtrlAttribute(int Panel_Handle,int Control_ID,int Control_Attribute,any type Attribute); 
              **/
                //设置LED的标题变为"开"
                SetCtrlAttribute(panelHandle,PANEL_LED,ATTR_LABEL_TEXT,"");
            /**
              * 获取控件属性值 GetCtrlAttribute
              * 函数原型为:int GetCtrlAttribute(int Panel_Handle,int Control_ID,int Control_Attribute,void *Attribute_Value); 
              **/
                for(i = 0 ; i < 100 ; i++) {
                    //编写随机函数
                    datapoints[i] = 100*rand()/32767.0;
                    //延时0.01s
                    Delay(0.01);
                    //设置温度计控件的值
                    SetCtrlVal(panelHandle,PANEL_NUMERICTHERM,datapoints[i]);
            /**
              * 逐点绘图 PlotStripChartPoint
              * 函数原型为:int PlotStripChartPoint(int Panel_Handle,int Control_ID,double Y);
              * Panel_Handle:控件所在的面板句柄
              * Control_ID:控件ID
              * double Y:Y轴上的数值
              **/
                    //在控件 Strip Chart 中滚动显示数据
                    PlotStripChartPoint(panelHandle,PANEL_STRIPCHART,datapoints[i]);
                }
            /**
              * 输入数值的最大值和最小值 MaxMin1D 
              * 函数原型为:AnalysisLibErrType MaxMin1D(const double Input_Array[],int Number_of_Elements,
                                                              double *Maximum_Value,int *Maximum_Index,
                                                              double *Minimum_Value,int *Minimum_Index);
              * Input_Array[]:输入数组名        Number_of_Elements:输入数组元素的个数
              * *Maximum_Value:输入数组的最大值    *Minimum_Value:输入数组中的最小值
              * *Maximum_Index:输入数组中的最大值索引    *Minimum_Index:输入数组中的最小值索引
              **/
                //找出100个随机数中最大值和最小值
                MaxMin1D(datapoints,100,&max,&max_index,&min,&min_index);
                //将最大值最小值设置到控件中
                SetCtrlVal(panelHandle,PANEL_NUMERIC,max);
                SetCtrlVal(panelHandle,PANEL_NUMERIC_2,min);
                //当数据产生完毕后,关闭"开始采样按钮"
                SetCtrlVal(panelHandle,PANEL_BINARYSWITCH,0);
                //当数据产生完毕后,关闭LED
                SetCtrlVal(panelHandle,PANEL_LED,0);
                //当数据产生完毕后,温度计控件归零
                SetCtrlVal(panelHandle,PANEL_NUMERICTHERM,0.00);
                //当数据产生完毕后,设置LED的标题为"关"
                SetCtrlAttribute(panelHandle,PANEL_LED,ATTR_LABEL_TEXT,"");
            }
            else{
                //关闭LED,即设置其值为0
                SetCtrlVal(panelHandle,PANEL_LED,0);
                //温度计控件值归零
                SetCtrlVal(panelHandle,PANEL_NUMERICTHERM,0.00);
                //设置LED的标题为“关”
                SetCtrlAttribute(panelHandle,PANEL_LED,ATTR_LABEL_TEXT,"");
            }
            break;
    }
    return 0;
}
回调函数(2)
原文地址:https://www.cnblogs.com/lotuses/p/11425344.html