DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2929|回复: 0
打印 上一主题 下一主题

[待整理] LabWindows/CVI虚拟仪器设计技术基本控件使用之:三态开关

[复制链接]
跳转到指定楼层
楼主
发表于 2014-10-12 07:21:51 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
1.2 三态开关
        1.2.1 三态开关设计方法
        一般情况下,开关包含两种状态,即:开和关或0 和1,如LabWindows/CVI 中提供的Toggle Button 和Binary Switch 控件,理论上属于布尔开关,不能产生第三种状态。然而,很多情况下需要三态开关,如电子电路中的三态门、三态拨码开关等。在LabWindows/CVI 控件中,可以利用Numeric Slide 来制作三态开关,实现三种状态转换,并对电路状态进行控制。Numeric Slide 控件为一个数值型控件,而Picture Ring 是一个图像控件兼具Ring 控件的特性,对控件中的每一幅图像提供一个数值编号,类似于图像索引,使用户不必直接去操作图片对象,而是通过设置或获得数值编号来完成图像操作,在一些情况下,还可以与定时器控件相结合,实现类似GIF 动画效果的图像。此外,应了解面板、控件、鼠标的各种事件,并分析不同事件所产生的响应效果的不同。LabWindows/CVI 中的主要面板事件如表1-6 所示,控件事件如表1-7 所示,鼠标事件如表1-8 所示。
         
        表1-6 面板事件表
                               
                                        常量名

                       
                               
                                        说明

                       
                               
                                        EVENT_LEFT_CLICK

                       
                               
                                        鼠标左键单击时产生的事件

                       
                               
                                        EVENT_LEFT_DOUBLE_CLICK

                       
                               
                                        鼠标左键双击时产生的事件

                       
                               
                                        EVENT_RIGHT_CLICK

                       
                               
                                        鼠标右键单击时产生的事件

                       
                               
                                        EVENT_RIGHT_DOUBLE_CLICK

                       
                               
                                        鼠标右键双击时产生的事件

                       
                               
                                        ENENT_KEYPRESS

                       
                               
                                        键盘操作事件

                       
                               
                                        EVENT_GOT_FOCUS

                       
                               
                                        获得焦点事件

                       
                               
                                        EVENT_LOST_FOCUS

                       
                               
                                        失去焦点事件

                       
                               
                                        EVENT_DISCARD

                       
                               
                                        从内存中删除面板事件

                       
                               
                                        EVNET_CLOSE

                       
                               
                                        点击面板右上方的关闭按钮所产生的关闭面板事件

                       
                               
                                        EVENT_PANEL_SIZE

                       
                               
                                        改变面板大小事件

                       
                               
                                        EVENT_PANEL_MOVE

                       
                               
                                        移动面板事件

                       
         
        表1-7 控件事件表
                               
                                        常量名

                       
                               
                                        说明

                       
                               
                                        EVENT_COMMIT

                       
                               
                                        对控件实施任何一项操作所产生的事件

                       
                               
                                        EVENT_VAL_CHANGE

                       
                               
                                        改变控件值的事件

                       
                               
                                        EVENT_TIMER_TICK

                       
                               
                                        定时触发事件

                       
                               
                                        EVENT_DRAG

                       
                               
                                        控件拖拽事件(适用于Tree 和Splitter 控件)

                       
                               
                                        EVENT_DROP

                       
                               
                                        控件拖拽后产生的拖放位置改变事件(适用于Tree 和Splitter 控件)

                       
                               
                                        EVENT_DROPPED

                       
                               
                                        控件拖放事件(适用于Tree 和Splitter 控件)

                       
                               
                                        EVENT_SORT

                       
                               
                                        控件Tree 的排序事件

                       
                               
                                        EVENT_SELETION_CHANGE

                       
                               
                                        控件Tree 选项发生变化事件

                       
                               
                                        EVENT_HSCROLL

                       
                               
                                        控件的水平滑动(scroll )事件(适用于Tree 和Tab 控件)

                       
                               
                                        EVENT_VSCROLL

                       
                               
                                        控件Tree 的垂直滑动(scroll )事件

                       
                               
                                        EVENT_MARK_STATE_CHANGE

                       
                               
                                        选项的改变事件(适用于Tree 和List Box) )

                       
                               
                                        EVENT_COMBO_BOX_INSERT

                       
                               
                                        当用户在Table 控件中的组合框单元输入一个值,而此值并不存在于这个组合框中,则产生此事件,执行此事件后系统会自动添加该值到组合框中

                       
                               
                                        EVENT_ROW_SIZE_CHANGE

                       
                               
                                        改变Table 行宽的事件

                       
                               
                                        EVENT_COLUME_SIZE_CHANGE

                       
                               
                                        改变Table 和Tree 列宽的事件

                       
                               
                                        EVENT_ACTIVE_CELL_CHANGE

                       
                               
                                        当前激活单元格的值改变事件

                       
                               
                                        EVENT_EDIT_MODE_STATE_CHANGE

                       
                               
                                        控件Tree 进入或退出编辑状态

                       
                               
                                        EVENT_EXPAND

                       
                               
                                        展开控件Tree 的项目事件

                       
                               
                                        EVENT_COLLAPSE

                               
                                         

                       
                               
                                        收缩控件Tree 的项目事件

                       
         
        表1-8 鼠标事件表
                               
                                        常量名

                       
                               
                                        说明

                       
                               
                                        EVENT_COMMIT

                       
                               
                                        鼠标事件

                       
                               
                                        EVENT_RIGHT_DOUBLE_CLICK

                       
                               
                                        鼠标右双击事件

                       
                               
                                        EVENT_LEFT_CLICK

                       
                               
                                        鼠标左击(单击)事件

                       
                               
                                        EVENT_LEFT_DOUBLE_CLICK

                       
                               
                                        鼠标双击事件

                       
                               
                                        EVENT_RIGHT_CLICK

                       
                               
                                        鼠标右击事件

                       
                               
                                        EVENT_MOUSE_MOVE

                       
                               
                                        鼠标移动事件

                       
                               
                                        EVENT_LEFT_MOUSE_UP

                       
                               
                                        鼠标左击释放事件

                       
                               
                                        EVENT_RIGHT_MOUSE_UP

                       
                               
                                        鼠标右击释放事件

                       
         
        1.2.2 三态开关程序设计
        (1)面板设计
        利用Numeric Slide 控件编写一个利用三态开关进行电压正负转换程序,当三态开关处于中间位置(关)时,电源电压为0V,当三态开关处于上位(开+)时,电源电压为+5V ,当三态开关处于下位(开–)时,电源电压为–5V,并且开关状态的操作与电路状态变化实时关联,实现联动。其中,三态开关采用经典形式控件,即在面板上右击弹出快捷菜单,选择Classic-Style Controls→Numeric→Vertical Slide ,利用Picture Ring 控件显示电路状态图,双击该控件,修改属性Picture Ring→Image/Value Pairs… ,通过“Load Image… ”按钮选择图像,如图1-3 所示。面板设计如图1-4 所示,面板中主要控件属性设置如表1-9 所示。
       

         

        图1-3 Picture Ring 控件的图像/数值对话框  

       

         

        图1-4 三态开关面板

         
        表1-9 控件属性设置表
                                                                        常量名
                       
                                                                        控件类型
                       
                                                                        控件的主要属性
                       
                                                                        PANEL
                       
                                                                        Panel
                       
                                                                        标题:三态开关回调函数:PanelCB
                       
                                                                        SWITCH
                       
                                                                        Numeric Slide
                       
                                                                        标题:开关状态回调函数:onoff Range Values:0~2 Show/Hide Parts:No Markers 、No Ticks 、No Fill
                       
                                                                        PICTURERING
                       
                                                                        Picture Ring
                       
                                                                        标题:电路状态
                       
         
        (2)程序源代码
        //头文件声明
        #include <cvirte.h>
        #include <userint.h>
        #include "三态开关.h"
        static int panelHandle;
        //主函数
        int main (int argc, char *argv[])
        {
        if (InitCVIRTE (0, argv, 0) == 0)
        return &ndash;1; /* out of memory */
        if ((panelHandle = LoadPanel (0, " 三态开关.uir", PANEL)) < 0)
        return &ndash;1;
        DisplayPanel (panelHandle);
        RunUserInterface ();
        DiscardPanel (panelHandle);
        return 0;
        //面板回调函数
        int CVICALLBACK PanelCB (int panel, int event, void *callbackData,
        int eventData1, int eventData2)
        {
        switch (event)
        {
        case EVENT_CLOSE:
        QuitUserInterface (0);
        break;
        }
        return 0;
        }
        //开关状态按钮
        int CVICALLBACK onoff (int panel, int control, int event,
        void *callbackData, int eventData1, int eventData2)
        {
        int value;
        switch (event)
        {
        //响应事件
        case EVENT_VAL_CHANGED:
        // 获得开关状态值
        GetCtrlVal (panelHandle, PANEL_SWITCH, &value);
        // 设置电路状态图片框内容
        SetCtrlVal (panelHandle, PANEL_PICTURERING, value);
        break;
        }
        return 0;
        }
         
        3:程序注释
        ① GetCtrlVal 函数获得控件值。函数原型为:
        int GetCtrlVal (int Panel_Handle, int Control_ID, void *Value);
         *Value :控件值。其声明的数据类型需要与控件的数据类型匹配。
         
         
        ② EVENT 事件
        对开关状态按钮回调函数onoff 而言,可以采用EVENT_COMMIT、EVENT_LEFT_CLICK 或EVENT_VAL_CHANGED 等EVENT 事件,但EVENT_COMMIT 、EVENT_LEFT_CLICK 只能是鼠标事件完成后(鼠标按键释放后)才响应此事件,而EVENT_VAL_CHANGED 则当三态开关值改变时立即响应,与前两个事件相比,不存在时间上的延迟,鼠标操作与图像显示能保持一致。
         
        (4)运行效果图
        点击工具栏中的Debug Project 按钮,程序开始运行,其效果如图1-5 所示。
         

       

        图1-5 运行效果图
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2025-8-1 20:14 , 耗时 0.105790 秒, 22 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表