设计可调节大小的程序界面2 – 窗格和分隔栏

每个VI有一个前面板(Panel),每个前面板又可以是由多个窗格(Pane)组成的。默认情况下,比如新建一个VI,这个VI的前面板就是有单个一个窗格组成的。由于大多数情况,每个面板只有一个窗格,以至于很多人都忽略了窗格的存在。但是在编程时,一定要意识到:LabVIEW程序中的控件是摆放在窗格上,而不是前面板上的;窗格才是摆放在前面板上的。

使用分隔栏可以在前面板上分割出更多的窗格来。分隔栏在控件选板“[xx风格]->Containers”中。分隔栏有横竖之分,可以把原有的方块按照不同方向分成两块。控件无论被放在哪个窗格里,对程序功能都没有影响,只对程序外观有影响。

当前面板的大小改变时,分隔栏也可以跟着移动。在分隔栏的鼠标右键菜单中可以设置一个状态栏跟随面板的哪个边沿一起移动,或者是按比例移动。

image_thumb3

在分隔栏的右键菜单最后两项用来设置分隔栏两侧窗格的一些属性。比如,界面划分成窗格后通常不需要显示窗格内的拖动条,在这里可以在这里找到相应设置的子菜单禁止其显示。

在分隔栏的属性也可以通过程序在运行状态下通过程序来设置。它算然不像控件那样在程序框图上有个接线端,但却仍然可以使用右键菜单创建它的属性节点和调用节点。有了这些属性和方法,就可以在程序中调整分隔栏的位置等属性了。比如下面这段程序可以从左到右挪动上图状态栏的位置。

image_thumb1

在程序运行时,用户仍然可以再界面上移动分隔栏。若不希望用户改变分隔栏位置,可以在分隔栏的右键菜单中选中“Lock”,这样分隔栏的位置就被锁定了。

分隔栏没有隐藏属性。若希望程序运行时看不到分隔栏,可以通过改变分隔栏颜色来达到“隐藏”的目的。首先,把分隔栏的风格改为经典“Classic”,然后把它的颜色染成与程序框图相同,这样就程序运行时就看不到分割栏了。顺便提一句,分隔栏两侧的窗格是可以有不同背景色的。

窗格也是没有隐藏属性的。在程序运行时需要隐藏某个窗格,只要调整它周围分隔栏的位置,把这个窗格缩起来就行了。

 

 

 

 

广告

设计可调节大小的程序界面1

程序的界面应该有多大呢?如果程序可能会被很多用户使用,就难免会运行在各类尺寸的屏幕上。如果界面太大,小尺寸的显示屏就无法完全显示;如果界面太小,对于大显示屏来说又是一种浪费。从用户体验的角度考虑,最好程序的界面尺寸是可调的,用户可以选择适合自己的任意尺寸。

程序界面尺寸发生变化,界面上的控件也必须随之调整。控件跟随界面尺寸变化有两种方式:

一种是控件尺寸需要跟随调整的。数据量较大的控件,比如波形显示控件,表格,大文本框等,常常需要调整尺寸以获得尽量大的显示区域。

而有些控件的尺寸最好是固定的,比如按钮,选择框等控件。它们虽然不需要调整尺寸,但是当界面尺寸变化时,它们的位置可能需要调整以获得最佳界面布局。

我打算接下来几天比较一下各种动态调整界面布局的方法,帮助程序员选择最适合当前程序的方法。

反馈节点 3 – 子VI有多个实例

今天又想到一个问题,于是编程序验证了一下。如果一个包含反馈节点的VI在主VI中有多个调用实例,那么它们之间是共享一个移位寄存器呢,还是每个实例有自己的移位寄存器呢?

这是子VI:
image

这是主VI:
image

程序运行结果如下:
image

看来它们是分享了同一个移位寄存器。

甚至子VI在不同的循环中被调用,它们也还是共用同一个顶层移位寄存器。比如下图这个程序:
image

运行结果:
image

只有把子VI设置成为每个实例都生成副本的可重入运行方式时,不同的子VI实例才会有独立的移位寄存器。

之前介绍的反馈节点内容:https://ruanqizhen.wordpress.com/2008/08/20/循环结构的反馈节点https://ruanqizhen.wordpress.com/2011/05/22/反馈节点

Scratch编程语言 1

八戒2师兄的提示,玩了一下Scratch这个软件。我前面介绍的Modit软件正是模仿了Scratch的编程方法和界面风格,所以两者在编程习惯上完全一致。但这两种软件是应用在完全不同的领域的。

Scratch是由麻省理工开发的一款图形化编程语言,针对儿童,专用于编程实现简单动画效果。我在Scratch的社区下载了几个小朋友们编写的动画游戏,还是非常有趣的。这让我想起了我小时候曾经看到过的LOGO编程语言,从计算机刚刚开始普及,人们就没有忽视如何帮助儿童来学习编写程序。

我猜专为儿童设计的编程语言,短期经济效益不会很高。毕竟除了厂商,愿意为软件开发工具付费的个人不会太多。但这项投资的长期回报是不可忽略的,学生们长大毕业之后,会把曾经的编程经验带入工作中。Modit作为一个纯工业领域的行业软件,完全采纳了Scratch的语法,可见说Scratch的影响力已经从教育迈向了商业领域。

LabVIEW也有针对学生使用的版本,还有和乐高合作生产的专供儿童编程玩乐高玩具的LabVIEW版本。但我觉得不足的是,即便是为学生们使用的LabVIEW依然保持着强烈的测控背景,依然在强调数据采集、测量、控制等功能。如果学生们一提到LabVIEW就想到测控,无疑会限制他们使用LabVIEW的热情和创新。而Scratch这种用来做动画的工具肯定会比做测控的软件更受孩子们欢迎。其实LabVIEW也可以搞个专门编写动画的版本给小朋友们的,让孩子们从小就习惯LabVIEW的语法,以后就离不开它了。

Modkit 一种图形化编程语言

目前,像LabVIEW这样功能强大,比较通用的图形化编程语言可能绝无仅有的。但市面上,比较小型的,针对特定应用的图形化编程语言却五花八门,随处可见。今天同事又给我介绍了一款,叫做Modkit,官方网站:http://www.modk.it (河蟹们访问需翻墙)。

这款编程语言是基于Web的,也就是打开了网页就可以直接开始编程,不需安装额外软件。这一点与NI去年发布的 LabVIEW Web UI Builder 相类似。区别在于LabVIEW Web UI Builder 是基于Silverlight的,而 Modkit 据我观察,没有使用任何插件,很可能基于HTML5标准编写的。

如果可以选择,我个人会倾向于使用HTML标准开发程序,而不是使用Silverlight。目前来说,开发Silverlight程序的确比开发HTML5程序要容易。但是,Silverlight只是微软一个无足轻重的产品,随时可以被抛弃;而HTML标准却是w3c组织最核心的产品,又有一干顶尖厂商的支持。从长远来看,HTML可能更会被广泛采用。

回头再说 Modkit 这个产品,同为图形化编程语言,它的风格与LabVIEW迥然不同。我觉得它的设计最有两点的地方就是把编程序搞得像玩拼图游戏一样:

它的每个程序模块是一个拼图(或者叫积木)模块,搭在一起形成一个完整程序。它的模块之间不需连接数据线,贴在一起就行。

图形化编程语言可能都免不了模仿一些已有的概念。比如Modkit模仿拼贴画、LabVIEW模仿电路图、VEE模仿流程图。想不起来,对于一个任何背景知识的人来说,拼贴画最易入门。

Modkit 使用颜色来区分不同种类的模块,比如:蓝色表示对硬件进行配置;紫色表示数据输入输出通道;绿色表示运算模块;橘黄色用于流程控制。

用拼图的形状来保证数据类型安全。有的拼图块是方的(数值数据),有的拼图块带个卡口(执行模块),有的拼图块两侧带尖的(表示逻辑数据)。插槽也是有形状的,这样,只有形状匹配的积木才能放进相应的插槽。这和拼图的理念完全一致。

看,这就是我编的一小段简单程序:
image

Modkit是专用来对Arduino这款硬件进行编程的。这种针对特定硬件设计的编程语言,最大优势就是效率高。我在和LabVIEW用户聊天时,听到的一类比较多的抱怨就是LabVIEW太大了,包含了各种他们不需要的功能,拖累的他们的程序爬都爬不动。

单从用户的角度来考虑,把LabVIEW的功能分离开来,搞出一系列针对特定硬件的精简版本来,会更利于使用。我得理想情况是:为每个硬件设备都安装一个基于Web的LabVIEW编程服务,这样用户只要使用浏览器打开一个硬件设备,就可以直接为它编写程序了。不过从商业利益考虑,这件事只能是硬件厂商自己去做了。