注册登陆后可查看附件和大图,以及购买相关内容
您需要 登录 才可以下载或查看,没有账号?注册会员
x
LabVIEW Vision图像处理开发宝典-第二章 结构框架-第一节 编程风格
第二章结构框架第一节编程风格软件编程,编写到一定程度后,其实不是再考虑技术问题、函数问题、功能问题,而是风格问题。风格中,框架是非常重要的,因为一个好的框架,对于软件后期的维护、升级、改造等,都是非常有帮助的。而且一个好的框架,可以将函数功能模块化,可以让整个团队参与进来进行开发,也可以充分利用以往的模块函数,从而使编程变得更简单。 对于LabVIEW编程来讲,风格、框架显得尤为重要。LabVIEW是一款图形化编程语言,其中有一个关键的概念叫数据流,即它的数据是通过在线、节点之间流动的,这个在编程调试使用慢动作(幻灯片:高亮执行显示过程)时,就特别生动。
图1 点击此灯泡工具,使用慢动作
图1 点击此灯泡工具,使用慢动作
图2 高亮执行过程
图2 高亮执行过程 由图2中看到,当高亮执行程序时,可以看到数据线上有一个圆点在流动,这个就是数据流的概念。 高亮执行程序在调试时,是非常有用的,这样可以清楚知道数据流向以及当前的节点中的数据值等。所以这对于调试来讲,这是经常用到的工具。 好工具有了,这时还得有好的框图。图2中的框图是通用平台中的部分代码,比较简单明了,还有非常丰富的解释,因此调试也会变得简单。如果给你上一盘炒面,你就会觉得LabVIEW调试会变得多么的苍白无力:
图3 略显复杂的程序框图
图3 略显复杂的程序框图 图3所示的程序框图,其连线明显要多许多了,这是要调试,就麻烦许多了。LabVIEW编程,特别是在初学时,不会使用一些高级的框架,这时就使劲的连线、连线、再连线,最后的结果就是一个程序就一个VI,程序框图在一个屏幕中都无法显示完,得拉好几页才能看完,可能某一页或几页,全是五颜六色的线条,那时我们调试将变成崩溃状态。 因此使用LabVIEW编程,一定要善于使用框架以及一些基本的良好编程习惯,如常用功能子VI化,同一VI的参数捆绑成簇,相同功能的模块使用动状态机,主要功能位置添加注释信息等。只有这样,我们编写的程序,才能在后面的维护、修改、或者其它人使用时,可以轻松的上手。不然的话,就算当时把程序编写完成了,可是过几个月后说要升级一下,结果自己都看不明白了。 下图所示,是将图像处理函数子VI化,当然我们也可以将子VI的框图在主程序中实现,但是这样会给程序显示、调试带来许多麻烦。
图4 功能函数子VI化
图4 功能函数子VI化
图5 函数参数捆绑成簇
图5 函数参数捆绑成簇 上图所示,为图像处理函数子VI,可以看到,参数传递是通过图像参数这个族来控制的,进入子VI后,再解除捆绑,这样在主调用VI的程序框图中(图4中),连线将变得非常简单,而在子VI中连线也相对简单。虽然中间加入了按名称捆绑族以及按名称解除捆绑等操作,会略微耗费一点时间,但是这点耗时对于整个程序来讲,是微不足道的,反而可以提高我们的编程效率。
图6 状态机
图6 状态机 状态机不仅可以用于生产者消费者模式,也可以用于功能函数中。特别是对于功能模块,其中会包含多个搜索过程的模块,则完全可以考虑使用状态机。如上图所示的数据库操作,以及其它的如用户登录、配置文件操作、相机操作、图像内存操作等等。这些功能模块,可能会有一个共同的特点,即其中会有一个引用,如数据库引用、配置文件引用、相机引用、图像内存引用等。使用状态机,将引用保存到移位寄存器中,只要调用的主程序未停止,则引用会一直在子VI的移位寄存器中有效的保存,这就给主程序中调用状态机中不同的状态提供了可能。如果不使用状态机和移位寄存器,则引用可能无法传递,也就不能在不同的地方调用了,要想调用,就得连线,这对于大型程序而言,是不可想象的。 LabVIEW编程风格类的书籍,大家可以在书店或网络中找到相关的教程,如《软件工程方法在LabVIEW中的应用》、《The Labview Style Book》(国内有翻译小组专门翻译过,有双语版)等教程,都是介绍LabVIEW编程风格、框架、使用技巧方面的书籍。
|