以虚拟信号发生器为例,介绍了Lebview编程中人机界面的整体模式、弹出式模式及动态调用模式的设计与实现方法,并分析比较了各自的应用特点。
1 前言
Lebview现在已经越来越广泛地应用于测量、控制、教学、科研等领域,它采用图形化编程方式,内置大量功能,能够很方便地完成数据采集分析显示、仪器控制、测量测试、工业过程仿真及控制等多种操作,并具有良好的可扩展性。
在应用Lebview进行实际项目开发时往往要求程序能够实现多功能集成化,这时程序界面的统一化、便于操作等要求就十分重要。本文以虚拟信号发生器的开发过程为例,对使用Labview开发虚拟仪器时人机界面模式的设计与实现进行了研究。
2 虚拟信号发生器的系统要求及分析
2.1 系统要求
虚拟信号发生器的总体设计要求如下'1、实现多功能信号发生,能够产生常用波形(正弦波、三角波、方波、齿锯波等)、用户自定义函数波形、加噪波形等。2、可进行参数调节、并完成波形的数字存储功能。3、要求良好的人机交互界面,易于操作。
2.2 设计分析
在Lebview中实现单一功能的信号发生较为简单,只需在前面板放置相应的控件进行波形参数设置、波形显示及数据存储路径选择,然后在框图程序窗口选择合适的功能节点,并完成各节点及端点的逻辑连接即可达到要求。
按照系统设计要求,程序不但需要实现多种功能,同时还应该具有能让用户便捷地进行操作的特点,而简单地将多个子功能程序放在一起并不能满足要求。
我们针对"便于操作、良好的人机交互界面"这个系统要求进行了综合分析,设计了三种具有不同特点的人机界面模式:整体界面模式、弹出式界面模式、动态调用界面模式。
3 虚拟信号发生器的人机界面设计
3.1整体界面模式设计
整体界面模式的特点:所有功能模块的参数设置及实现均在同一界面下,不同的功能对应不同的功能按钮。当按下某一按钮时,将实现相应的功能操作。
3.1.1 前面板设计
在前面板设计中,我们将公共参数放在一组,以免出现重复控件;将各子功能的特征参数分在不同的组中,以方便用户操作。波形的显示由一个graph控件完成,数据存储也共用同一功能区。用互锁按钮实现各子功能之间的切换。该模式下的前面板如图1所示。
图1 整体界面模式的前面板
3.1.2 框图程序设计要点
我们选用了选择结构来完成整体界面模式的实现:将常用信号模块、用户函数信号模块、加噪信号模块分别作为选择结构的三个分支。当按下所需功能按钮时,执行所选的子框图程序,完成相应操作。这里需要注意的是各子功能按钮应该设置为互锁关系,即在任一时刻只允许有一个按钮被按下。当另一按钮被按下时,原先在按下状态的按钮将自动弹起。
我们将各子功能按钮放入一个数组中,则该数组内容对应各按钮的开关状态。然后设置一个while循环结构,利用循环结构的移位寄存器比较本次循环中的按钮数组内容和上次循环中的按钮数组内容,若相等,则说明没有按下其他按钮;若不等,说明有另外的按钮按下,此时需要将按钮数组的内容重写:原来按下的按钮逻辑值应该改为"false",而新按下的按钮逻辑值应变为"true".可将当前按钮状态内容与前一次的按钮状态内容进行异或运算来实现这两步功能。更新后的按钮状态通过局部变量对原按钮数组内容进行重写完成。互锁逻辑的框图程序如图2所示。
图2 互锁逻辑框图程序
整体界面模式的优点在于所有子功能模块均在同一界面下,整体可视性、可操作性较好。但当子模块类型较多时,将出现界面过于臃肿而不易操作、编程过于繁杂的问题,此时我们可以通过Tab控件进行功能模块的分类,以达到简化前面板界面的目的。
3.2 弹出式界面模式
弹出式界面模式的特点:在主程序面板按下子功能按钮时,将弹出相应功能的子程序面板,子面板运行完毕后将返回主面板。
3.2.1 前面板设计
我们将各子功能模块做成多个子程序,为调用方便与主程序放置在同一路径下。主程序的前面板只需实现相应功能的调用按钮配置。当需要使用某项功能时,按下对应的按钮即可将子程序界面调出,执行完毕后关闭子程序则可退回主程序界面,进行其他功能的调用。虚拟信号发生器运行过程中的弹出式界面如图3所示(调用"常用波形发生"子功能程序)。
图3 弹出式界面模式下的前面板架构
3.2.2 框图程序设计要点
利用Labview的事件驱动功能可以较容易地实现弹出式界面的设计要求,因此我们选择事件结构来实现虚拟信号发生器的弹出式界面的程序设计。
在主程序的事件结构中,为每个功能按钮的事件发生指定相应子功能程序的调用。这样,每次当某一功能按钮按下时,Labview会自动通知程序所发生的事件,然后按照为这个事件指定的程序代码对事件进行响应。主程序的框图设计如图4所示。
图4 弹出式界面模式的主框图程序
弹出式界面模式的优点在于界面及程序结构清晰,所有子模块单独编程,由主程序按需调用,这样可以大大减少编程的复杂程度。
3.3 动态调用模式
动态调用模式的特点:子功能程序仅在被调用时动态加载入内存,调用结束后即释放。
3.3.1前面板设计
我们将程序界面分为左右两个区域:左边区域设置各功能按钮,可按需调用子功能;右边区域由子面板控件subpanel构成,在子功能被调用时显示和运行相应界面及功能。图5所示的是程序调用"函数信号发生"子功能程序时的界面情况。
图5 动态调用模式的前面板
3.3.2 框图程序设计要点
为了方便调用子功能程序,将主程序和各子功能程序保存在同一路径下。
主程序运行时,当需要调用某一子功能程序时,首先应该知道该子程序的整体路径:可以先使用cur-renl VI'S Poih函数和Stdp Path函数获取主程序的路径,将此路径与需要调用的子程序名合成子程序的整体路径。然后由loodondRun函数将已知路径的子程序加载并启动,最后在subponel控件对应的调用节点中使用Insert VI方法将子程序的面板插入子面板控件中。
不同子功能程序的选择要求由选择结构实现。
动态调用界面模式的优点在于子模块单独编程,结构清楚,编程的复杂程度低;程序动态加载,占用内存少,加载速度快。
4 总结
我们基于虚拟信号发生器的设计对Labview编程中常用的三种人机界面模式:整体界面模式、弹出式界面模式、动态调用界面模式进行了详细的分析和研究,在实际项目开发中可以根据具体情况直接选用这些模式进行界面设计,也将它们综合使用,以达到更高的设计要求。
另外需要指出的是,每种模式的实现方法也是灵活多变的,比如2.1中涉及到的互锁按钮也可以用枚举(Enum)控件实现相同的功能。而互锁逻辑的实现也能使用事件结构结合设置控件属性节点的方法实现:当某一功能按钮(如"常用波形"按钮)按下时,执行相应程序代码:将自身的逻辑值置为lrue,同时使其他功能按钮的值为false.
-
LabVIEW
+关注
关注
1970文章
3654浏览量
323257 -
人机界面
+关注
关注
5文章
526浏览量
44131 -
信号发生器
+关注
关注
28文章
1472浏览量
108739
发布评论请先 登录
相关推荐
评论