查看一段代码的运行时间

    有时候调试或者测试一段程序的时候,需要查看这段程序到底运行了多少时间。这里的时间还不同于程序所消耗的CPU时间,而就是指程序运行一遍直观的耗时。一般,编写一段简单程序就可以完成这个工作了,如下图所示。使用一个顺序结构,在被测程序开始前,记录下当前时间,程序运行结束在查看一下当前时间,差值就是程序运行的时间。

    不过还可以再懒惰一点,仅使用一个时间顺序结构也能完成同样的工作,如下图所示,Frame Duration 与上图的 x-y 含义相同。

    着两种方法的最小精度都是1毫秒,更快的速度就测不了了。

《我和 LabVIEW》目录

Advertisements

LabVIEW 工程资源管理器

    从 8.0 开始,LabVIEW 增加了一个工程资源管理器功能。LabVIEW 工程资源管理器就是一个可以方便查看、调整程序系统结构的工作区。与 VC, VB 等语言中的 project, workspace 相类似。Project 的出现使得 LabVIEW 对于大项目的管理更加方便。


图1:LabVIEW 工程资源管理器

    要想充分利用 LabVIEW 工程资源管理器带来的好处,那就需要我们改变一些以往的LabVIEW编程习惯。譬如说,在开始一个新的项目的时候,在 LabVIEW 8 以前的版本中,我们最先创建的是程序的主 VI;而现在,我们首先创建的应该是一个空的工程(Project),再在这个工程中添加相应的 VI和各种组件。

    工程管理器还有如下优点:
工程的树形结构表示了程序中 VI 的调用层次关系,利用VI的快捷菜单可以查看到调用该VI的程序,以及该VI的子程序,而不必再使用 VI Hierarchy 来查看。
在工程资源管理器的File页就可以直接调整文件存放的磁盘位置,而不必再另外打开操作系统提供的文件浏览器。
在工程资源管理器中集成源代码管理功能,不需要再使用源代码管理工具提供的界面了。(源代码管理工具是用来进行软件源代码版本控制的。大型软件开发通常需要这样的工具,用来记录每一次代码的修改、同时开发同一软件的不同版本、方便多人同时对同一段代码进行修改等。)

一、工程的结构

    图1是一个工程资源管理器的截图。它用一个树形的结构来表示工程中所有的 VI、各种组件和文件设置等。
树形结构的最顶层是工程的名称。
第二层是工程运行的目标机器。假如我的机器上只装了普通台式机版本的 LabVIEW,大家只能看到一个目标:“My Computer”。假如我的计算机上还装了 LabVIEW RT, FPGA 等用于其它硬件环境的 LabVIEW,那么在这一层还会出现其它那些目标设备。
第三层以下就是工程中所有使用到的文件了。用户可以添加虚拟文件夹,按自己的喜好组织文件结构。LabVIEW 从 8.0 起,文件及其它组件种类一下子丰富了许多。以前基本就只有 VI 和控件两种文件,现在又多了 Library, Class, XControl,XNode,共享变量等等。安装了其他功能模块,组件的种类还会更多。
右击树状结构中的每个条目,还可看到针对他们的更多设置。

    在 LabVIEW 8 之前,若要把 VI 源文件构建成可执行文件,必须使用Tools 菜单下的 APP Builder 工具。现在这个工具也被集成到了工程管理器中。在目标机器的最后一个条目“Build Specification”中包含了把源代码配置成为EXE, DLL 等的信息。
在旧版本 LabVIEW 中,保存VI时的一些高级选项,比如添加密码、移除 VI前面板,程序框图等选项;以及其它一些与运行有关的选项,例如禁止调试,自动弹出错误框等选项,也都被合并到此处了。在 Build Source Distribution 中可以找到相应的设置。

    在旧版本 LabVIEW 中,是绝对不允许把两个文件名相同,但内容不同的 VI 同时装入内存的。这也可以理解,VI 就好比是 C 语言中的函数,如果两个函数名相同,那到时究竟应该使用哪一个呢?但这毕竟不方便,比如我们需要同时运行两个程序,他们当中都有排序的功能。为了方便,VI的名字都起名为“Sort.vi”,但是他们的代码其实并不相同。为了让两个程序同时正常工作,我们应该允许在这两个程序内分别使用两个文件名相同,但内容不同的 VI。
在版本 8 中,LabVIEW 对此作了两点改进,一是引进了库的概念,类似给 VI 增加了名字空间。在不同的库中的 VI,即时文件名相同,它们的 VI 名字实际上也是不同的,因为 VI 名还包括库名作为前缀。(可以参考:http://ruanqizhen.spaces.live.com/blog/cns!5852D4F797C53FB6!783.entry
二是增加了运行环境的概念。LabVIEW 中,每一个工程都是一个独立的运行环境。为每一个的程序建立一个单独的工程,它们就有了一个独立的运行环境。一个运行环境中的 VI 不会影响到其它运行环境中的程序。这样,同时运行分属不同工程的两个程序,它们之间即便用到了同名的 VI,也不会相互影响。
但在单个工程中,还是不允许出现同名又不在库中的 VI。

二、按照文件的物理结构来查工程

    在需要创建一个新的类似工程,或版本备份时,程序经常被来回复制。在这个过程中,很可能会引起子VI的错误链接。比如,本来工程里应该使用的的是 Project One 文件夹下的一个子VI,但实际上却链接到了 Project Two 文件夹下的一个同名VI。我们可以把文件的真实路径同时显示在工程资源管理器的Item,以及File 页上,选取菜单 Project -> Show Item Paths,如图2所示。我们可以在这里检查每个文件的路径是否正确。
但是,文件比较多的时候,一条一条看下来,是比较麻烦的。这时可以按照文件的物理结构来查看工程中的文件。在工程资源管理器中选择“Files”标签页,看到的就是文件在物理硬盘上的真实结构。我们只要在这里检查一下,有没有不需要的文件夹出现,就可以判定是否出现了错误链接。
如果发现某些文件所存放的路径不恰当,需要调整,我们可以直接在工程资源管理器中来调整,而不需要打开文件浏览器去修改。

 
图2:按照文件的物理结构查看工程

三、VI 交叉连接

    前文提到程序可能会错误的链接子 VI,这在 LabVIEW 中被称为 VI 的交叉链接。除了前面提到的可能引起交叉链接的情况外,试图调用重名的VI,或把它加到工程里来等操作,都会引起 VI 的交叉链接。
VI 的交叉链接会引起很多问题,比如你在修改 VI 的时候,改动了不应该改动的那份;引起程序不可预知的行为等等。LabVIEW 的工程资源管理器可以帮助检查、修复 VI 的交叉链接。
当工程资源管理器发现程序中试图使用两个同名 VI 时,就会在这样的 VI 上打出一个惊叹号。如图2中所示的 Sub VI.vi。工程中试图用到了两个同名的VI,分别在路径 Project One 和 Project Two 下。你可以到引用这些 VI 的地方去把他们一一修正,也可以让工程资源管理器来修正它们。回到“Item”页面,在有惊叹号VI上点击鼠标右键,选择 Resolve Conflicts。这时候,就会出现修正冲突的对话框。在这个对话框中选择应该被选用的正确子VI,工程资源管理器就会自动更新程序,使它们链接到正确的VI上去。

《我和 LabVIEW》目录

图标编辑器上的鼠标双击技巧

    图标是 LabVIEW 语言很有特色的一个东西,其它语言大概都不需要给它的函数设置一个图形标识。认真给每一个 VI 加上一个有意义的图标是非常必要的,它可以帮助程序人员快速理解一段程序的含义。一个风格良好的 VI,只要扫一眼它的程序框图,就可以了解他的功能了,而不必要像文本语言那样一行行把程序读下来。LabVIEW 程序比文本语言的程序可读性要高得多,当然这是指在编程风格良好的情况下进行比较。
    有意义的图标是良好程序风格中非常重要的一项。编辑图标应该是一个很常见的工作,双击一个 VI 的图标就会出现图标编辑器,如下图所示。

    上图这个这个图标编辑器界面左上方是绘制图标的工具栏,里面工具被我编了号。不知道大家有没有试过鼠标双击这几个工具,我是经常双击他们的。

    编辑一个 VI 的图标,第一件事就是把他的默认图标删除,留一个空白框在上面就可以了。做这件工作不需要选中图标中的内容再删除,只要双击一次C2这个工具就可以了。
    如果不需要清楚图标中的内容,只想给他添个边框,那就双击C1这个工具。
    如果想选中整个图标,以备拷贝,按 Ctrl+A 是没用的,可以双击D1工具。
    双击D2,会出现一个字体设置对话框,在这里改变写到图标上的字体。如果要在图标上写英文,最适合的字体是“Small Fonts”,字号8。

《我和 LabVIEW》目录

几个常用博客服务网站的比较

    我最早接触博客用的是 blogpost,现在已经变成 google 网络服务的一部分了。它是最早一批的博客服务网站,并且功能强大,在国外一度占了主导地位。可惜的是这个网站在中国还没怎么流行起来就被政府和谐了。
    博客这东西出来之前,我等草根民众还从来都没有这么便捷的途径,可以把自己的思想不受约束的发布给大众。当思想可以自由表达的时候,必然有那么一些言论会戳到统治者的痛处。咱们政府对此的做法一向是凡力所能及堵得住的,一定堵起来。所以 Web 2.0 技术在中国注定不会一帆风顺的就发展起来。

    等我真正开始认真写blog,是在微软进入博客领域之后。msn space 开办的时候,博客在中国已经有一定的用户了。但当时,写博客的人主要还是计算机、网络领域相关的技术人员和学生。msn space 通过和 msn messenger 绑定在一起,成功的把博客的概念推销给了非技术的一般用户。msn space 也因为吸引了普通用户而在短时间内一举成为全球最大的博客服务商。
    我在 msn space 上安了家,最初的原因就是因为 msn messenger 上的一颗闪烁的星星可以把我的朋友吸引到自己的博客上来。我也可以及时了解到哪个朋友写了新文章。
    如今,msn space 已经改名为 Windows Live Space 了。我却越来越觉得它并不适合我了。我用博客主要是写写技术文章、记录自己的一些想法和生活。我希望我的博客可以简洁易用,反应速度快一点。华丽胡哨的附加功能对这种博客帮助不大。而
Windows Live Space 也不知道采取了什么技术,不但网速慢得出奇,还特别消耗系统资源。每次打开
space,我的浏览器都要休克半天。
    而我需要的功能,比如统计一下自己网站被访问的规律,Windows Live Space 却偏偏又做的很差;Google Ansyler 它也不支持。哎!

   
自 msn space 之后,博客一下子就红火起来了。现在中国几个主要的门户网站都有提供博客服务。这些服务我差不多都试过,最喜欢的还是百度空间。由于在同 Google
竞争中,百度采用过一些下流手段,我一直对其非常反感。但不得不承认,它的一些产品设计的是相当不错的。比如贴吧和百度空间。
    百度空间是所有 blog 中最干净利索、速度最快的,而且我需要的功能都支持的不错。有时候我真的很犹豫,要不要把我的博客搬到百度上呢?可惜,我已经在 Windows Live Space 上经营太久了,所有外部链接都指向的是那上边的文章。我已经不可能去一一修改那些链接了。真是上贼船容易,下贼船难啊。我只好继续用我的 Windows Live Space 了。

    随着 Web 2.0 技术的日趋完善,最初把我吸引到 msn space 上的那个 msn messenger 的闪烁的小黄星星也已失去了它的作用。我很久没留意过哪个联系人旁边有星星闪烁了。取而代之的是我开始使用 RSS 订阅的方式来阅读大家的博客和新闻。我实用的阅读器是 Google Reader。朋友们的博客都被我订阅了。
    在此提醒还没有打开 RSS 发布功能的博客们,赶紧开放这个功能哦,好让我方便的接收到你们的更新信息:)

《技术文章和问题讨论》目录

公司年会

    大约一个月前的某天,HR的头跑来把我叫到小会议室里对我说:“今年公司开年会(年末娱乐性质的),你来做主持吧”。我当时就有一种不祥的预感,如果有好事,她是绝对不会想到我的。不过鉴于她是负责发工资的,直接回绝恐怕不太好。犹豫了一下,我还是答应了,我说“反正我脸皮厚,随便你们捉弄就是了”。HR的头临走的时候神神秘秘的说:“你可要做好自毁形象的准备啊”。我突然感到后背发凉,天啊,以我对她的了解,她不是打算让我演“如花”吧。如果这样,我就宁死不从。
    过了几天,几个主持人聚在一起讨论晚会的安排和分工。果然没说几句,HR的头就蹦出来提议让我扮如花,也不知道我啥时候就把她给得罪了。虽然我还没厚脸皮到可以扮如花的程度,但耍赖还是可以的。在巧妙利用了几个主持人之间的意见分歧,以及我死皮赖脸的坚持下,终于躲过一劫,HR头的恶心提议被否决了。
    大家最终讨论的结果是让我演唐僧。虽然也是个跑龙套的,但还可以接受。

    除了当龙套主持人,我们组自己还出了一个节目,是演唱双截棍加伴舞。算然演出时音响出了一点小故障,但是总体来数,俺们的表演还是相当成功的:) 。我是“伴舞”之一,角色是“英雄”,被一群小混混爆扁。
    像我们这种小公司的年会,优势是参与广泛,估计至少有三分之一的员工可以到舞台上去亮亮相;劣势是缺乏创意,毕竟不是专业人士嘛。我们的节目来源无非就是卡拉OK;模仿或改编流行笑话、小品、影视剧、综艺节目等等。不过,今年同事们的表演让我觉得非常惊喜。节目质量比去年提高一大截。尤其是AE部门的舞台剧,非常有新意:用歌舞等形式演示我们产品的工作原理。把俺们的虚拟仪器表演出来,还真是得动一番脑筋。其他几个节目也很有看头。看来,以后要想在公司年会上吸引观众目光,是越来越困难了。

    由于我自己没有拍照片,只能收集一些同事的视频和照片了:
    http://www.youtube.com/watch?v=zhAuS-A1f3U
    http://cid-31b3d9bfa6dfb5b5.spaces.live.com/Photos/cns!31B3D9BFA6DFB5B5!1012

《生活随笔》目录

《莺莺传》

    最近听《百家讲坛》讲到《莺莺传》,于是也到网上找来看了看。《莺莺传》是唐代元稹所著的一部短篇传奇小说,记载的是一件真人真事。元代王实甫又把它改编成杂曲《西厢记》。
   《西厢记》虽被各朝政府列为禁书,但却深受百姓喜爱,在民间流传甚广。到今日更是被列为中国古代十大喜剧,十大文学著作等。这一方面是因为《西厢记》宣扬自由恋爱;另一方面,它是大团圆结局。在故事的最后,“王子与公主从此过上了幸福生活”。《西厢记》成了那个父母之命,媒妁之言的年代中广大少男少女的梦想。
    但是原著《莺莺传》受到的欢迎度却远不及《西厢记》,这可能是因为原著讲述的故事太过悲凉。有句成语叫“始乱终弃”,就是出自这篇小说。《莺莺传》写的也正是这样一个始乱终弃的故事。

    故事说的是元稹有一个名叫张生的好友。张生不但人长得帅,而且品德高尚。他23岁那年,去京城谋取功名,途中偶遇自己的表姨一家,于是在表姨住处逗留了一段时日。他的表姨父催家乃是当地大户,生有一女,才貌双全,名叫莺莺。本来不近女色的张生对表妹一见钟情,于是开始死缠烂打。而莺莺对张生却忽冷忽热,若即若离。张生正在感叹女人心海底针的时候,莺莺却在某一晚主动跑到张生房里,跟张生行了夫妻之实(实在不像个大家闺秀的作为)。
    之后,二人便日日黏在一起,如胶似漆。但张生不能一辈子在表姨家混吃混喝,于是他离开莺莺去了京城一段时间。张生回来之后却态度大变,开始冷落莺莺。莺莺也预感到他与张生前途不妙,心里非常苦闷。数月之后,张生再次离去,到京城做了一个小官。而后,莺莺写信给张生,一方面叙述对张生的爱意,一方面希望张生兑现诺言,娶自己为妻。而张生反应却异乎寻常残忍。张生发了一个炫耀贴,他把莺莺的情书公开给自己的同事与朋友,对大家说:虽然有美女对我投怀送抱,但我张生深知女人是祸水,我决定一脚踹了她。
    几年以后,张生已经娶妻,莺莺也嫁了别人。张生以表哥的身份前去看望莺莺,却被拒之门外。莺莺只是托人给张生送来一封信说:被张生抛弃后,自己很痛苦,但更多的是为张生的行为感到羞耻。在张生返回之际,莺莺又送来一首绝交诗:“弃置今何道,当时且自亲。还将旧时意,怜取眼前人。”之后,两人就再也没有了联系。

    看完全文,我还是非常欣赏莺莺这个人的,除了她最开始与张生的交往中有些轻浮。莺莺是个懂得努力改变自己命运的人,有自尊。在被张生伤害后,没有自暴自弃,也没有一味指责张生,反而还写信规劝他善待妻子。并且,我也非常同情莺莺不幸的命运。
    张生则是个不择不扣的伪君子,后人塑造的陈世美恐怕也不及他这么无耻。小说中一直没有交代清楚,为什么张生要抛弃莺莺,无论如何都看不出莺莺哪里配不上张生了。张生厚着脸皮,就是不肯向莺莺家提亲那一段让人看着非常郁闷。感觉就好象:张生祖上阴德,被他抢到一块天鹅肉。而张生嚼了几下,居然一口吐掉,说:此等俗肉如何配得上我这般清高的癞蛤蟆!
    好在《莺莺传》是纪实小说,小说里没写清楚的地方,还可以参考一下史实。后人考证,《莺莺传》其实是一部自传体小说,文中的张生就是元稹本人。
    我最早知道元稹这个人是因为他的一首诗《离思》:“曾经沧海难为水,除却巫山不是云。取次花丛懒回顾,半缘修道半缘君。”从这首诗来看,元稹是个既重道德规范,又重感情的人,真的很难把他和始乱终弃联系在一起。
    据说这首《离思》是他怀念亡妻所作。不过我觉得,用这首诗纪念妻子稍稍有些不妥之处。花丛本意是指妓女。当然,现在为了符合当今人们的观念,一般就把花丛译为美女了。如果按本以来意思解释,那就是:“我不嫖妓,一半是因为我对自己的道德品质要求比较高,另一半就是因为曾经和老婆你相处过。”看同时代的人对元稹的评价,他不去烟花之地倒是事实。在晚唐的社会风气下,元稹这样有地位的文化人不留恋娱乐场所反而是挺另类的。但是用妓女来对比自己老婆,还是够别扭的。如果说这首诗是元稹怀念自己初恋情人的,或许还更合适一些。

    元稹祖上在隋朝时是做过国家级高官的,可惜后来一辈不如一辈,到元稹父亲那里已经彻底沦为平民了。复兴家族荣耀的担子最后落在了元稹身上。
    23岁时,元稹动身前往京城谋取仕途,却在途中遇到了自己的初恋情人,莺莺。莺莺不但相貌出众,而且琴棋书画无一不精。只可惜身份卑微,是个流落风尘的女子。元稹被莺莺的才貌所吸引,一见钟情;而莺莺也正急于找一个可以托付终身的人带自己从良。阅人无数的莺莺几经试探,觉得元稹确实不同于其他浪荡公子哥,或许正是那个可以带自己脱离苦海的人。于是两个人双双坠入情网,很快海誓山盟,做了有实无名的夫妻。
    短暂的蜜月过后,元稹继续前往京城,希望功成名就也好风风光光的迎娶莺莺。然而,元稹此行并不顺利,他虽然通过了吏部的公务员考试。但只是做了一个小小的政府职员,与自己的远大抱负相差甚远。元稹很快就发现,在当时的社会制度下仅有学问,没有门路,是根本不可能出人头地的。本身没有任何背景的元稹,要想寻求后台,就只有通过姻亲这条路了。元稹开始对自己和莺莺的婚事越来越犹豫,而就在这是,他被当时京城西安的市委书记相中,欲招他为婿。经过一番思想斗争的元稹最终还是决定为事业牺牲爱情,抛弃莺莺,迎娶豪门的千金小姐。
    本就才华横溢的元稹,如今又有了强硬后台。他在官场可谓春风得意,步步高升,一度官至宰相,最后病逝于武昌军节度使的任上。

    恐怕元稹一开始也没想到过,用爱情换来的仕途居然如此顺利。拥有了事业的元稹想再次找回爱情,但爱情再也回不来了。在他抛弃爱情的那一刻,爱情也抛弃了他。元稹只能将所有的情愫依托于诗词间,他一生写了大量的情诗追忆他与莺莺一起的幸福时光,由此开创了艳诗流派。
    不知道成为封疆大吏后的元稹有没有为自己当年的行径后悔过。也许会有吧,否则也不会在小说中把张生描写得这么龌龊。
《生活随笔》目录

汽车首保

    到今天为止(这是12月8号写的:),我的小车开了两个月又10天,2200公里。星期六嘛,不用上班,于是去首保。
    除了打算去保养之外,这两个月发现小车有些小毛病,也打算一并去修修。几个毛病分别是,汽车慢速转弯时,车轮部位发出吱呀吱呀,像生锈大铁门一样的动静;车内座位也有吱吱声;天窗有时打不开;报警器不响。

    我是上午11点多一点到了上海宏仁漕宝路的维修车间,进去后跟一个穿西服的人说明了车子的情况,他说让我去二楼等一下,约一个小时即可弄完。但是我打算观察一下他们是如何保养检修的,所以就一直呆在车间。
    最先来的一个工人主要负责检查,他首先打开我的前盖看了看,发现电池上的接线柱都送脱了;还发现防冻液,洗窗液都需要补一些。然后他就把我的车抬起,查看底盘,发现发动机过滤网处居然漏油。
    在检查的过程中,他建议我给发动机还好一点的机油,清洗发动机,并且加入保护液一类的东西。由于我对这些东西不了解,所以对他说,要花钱的一改不加,只进行基本的保养。他则劝我说不能太小气,汽车还是要好好保护的。不过呢,我决定还是先到网上调查过之后再说。
    他主要查看了一下漏油的情况,但是没有找到具体的漏油处,怀疑就是滤网没有拧紧。他跟我说这次换了滤网之后,自己注意以下,看看还漏油不。如果还漏,再来检修。

    在他查看过我的车之后,又换了两个工人给我更换发动机机油和过滤网。这两个人说我的机油特别脏,不过后来我看了其他车换下来的油,比我的也好不了多少。换号机油和滤网,这两个人又给我的雨刷喷水的水壶补满了水,并且找了一些别人剩下的防冻液给我加上了。
    
之后是电工给我修理天窗和报警器的毛病,他修理的方法及其简单,换了天窗开关,和遥控器总成就好了。

    
之后就没人理我的车了,但是,我觉得最关键的问题其实是前轮异响的问题。我等了好一阵,估计他们认为我的汽车已经维护完了,没人搭理我。我只好主动找人来看了,我叫了他们的工头。
    我向工头描述了汽车前轮异响的问题,工头说要听听才能确定什么毛病。于是我和工头出去试车。但郁闷的是,我的前车轮这次无论如何也不发出那声音了。再外面转了好几圈,我只好难堪地说,这次算了吧,以后我再来检查。
    于是我就洗了车,结帐(我没有付任何钱),离开了修理车间。

    
刚出修理车间,我往左一转弯,就听见前轮尖利的吱呀一声。真是郁闷啊,我赶紧掉头,打算给修理工演示一下这个毛病,谁知掉过头来,前轮又不响了。这不是成
心跟我别扭嘛,我当时气急败坏。但回头一想,算了,这种时好时坏的毛病,查起来不知还要耽误多少时间,下次再修吧。于是回家。

    
这就是首保的经历。总结起来,我对宏仁这家店比较满意的地方是他们的工人看上去还是蛮负责任的。对我提出的问题都一一处理了。
    还有一些不满意的地方,主要是效率太低了。我进店的时候,一个穿西服的人跟我说一个小时搞定,但实际上,我开车离开时,已经过去将近4个小时了。我本来下午有约会,结果只能失约。另外,我忘记让他们帮我查查车胎气压了,后来我有点担心是不是应该冲点气了。
    头一次来保养,我坚持在车间里看他们检修,所以一站4个小时,很不爽,觉得太耽误时间。但是以后我就会聪明些了。就应该把车往那一放,随他们去弄,自己干点别的事情,到时来取车。可以节约半天的时间。 《生活随笔》目录