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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM