查看: 1836|回复: 27

中大型LABVIEW软件三层设想架构

  [复制链接]

7

主题

14

帖子

45

积分

新手上路

Rank: 1

积分
45
发表于 2020-5-5 19:20:30 | 显示全部楼层 |阅读模式
一、总览

凡是一个VI若包括三、四十个以上的subVI(不包括LabVIEW自己在Functions中供给的VI)时,便可算是一其中大型的软件计划(software project)了。虽然比起软件工程中的一些作业情况软件(如Windows系列)或大型利用软件(如Word、Excel)等仍算是小工程,但其复杂性亦在一定水平之上,若没有事前想幸亏撰写法式时的一些计划与方式,想要完成这类中大型的软件绝对不是一件简单的事。特别这类软件凡是不是由一小我,而是由一个团队所配合完成的,是以全部软件的结构,就要能让团队中的每一成员都能清楚的领会,而且要够简单,才算是好的软件结构。以下将参考由Rick Bitter等人所着”LabVIEW Advanced rogramming Techniques”,中之第4章的部份内容,先容所谓软件计划中的三层式结构(the Three-Tiered Structure)的概念及其优点。

需要软件结构的首要缘由,是当软件职员成长软件到某一阶段时,若没有计划或无意的缔造了很多subVI,但各subVI之间有很多部分实在是反复撰写的;或各VI相互间呼唤时没有一定的纪律,使得在VI Hierarchy中所看到的各VI间的联机是扑朔迷离,像个盘丝洞一般,这将能够会使多人成长的软件计划增加所花费的时候和能够出错的机遇、减低法式的效力,以及增加debugging时的困难。为了改良上述的情形,所以要提倡三层式结构的概念。

三层式结构由上而下依次为:Main Level、Test Level和Driver Level,这类结构是由经历中得来的,在多人成长的软件计划中显得简单了然,当大师都能遵照这个结构来写法式时,这类结构便可以充实显现出它的优点。那这三个阶级到底若何区分呢?以浅显的比方来说,假定我们假如要构造一个篮球队加入全国角逐,每个球员要练习根基行动及体能,若何跑、若何跳、手脚该若何放置才是正确位置等,这就相当于系统中Driver Level所做的工作;接下来,将各球员组合练习某一套戍守或打击的战术,如二三地区联防、人盯人戍守,每小我该在什么位置才能正确接应等,则像是Test Level中一项项的test了;而最初角逐时,场上的计谋应用,包括何时要用什么战术组合、若何更换球员、何时喊停息、终场前能否是要故意犯规或采迟延战术等等,对照过来,就像是在Main Level中,若何将Test Level中各test做最有用能的整合与排列组合等的工作。

简单来说,Driver Level包括了法式与一切仪器、组件、马达或别的利用软件的相同、控制等较低阶的工作,使其可完成某一项根基的行动,例如初始化、马达走到home位置、雷射以设定的能量及频次发射光束等。可留意到我们在这边所说的driver,并不像一般在别地方称驱动法式的那种driver那末低阶,真正最低阶的工作还是要有现成的VI来帮手才行;在Test Level中,则是若何毗连各个Driver VI的根基行动,使可做完出一套持续、成心义的流程,来履行某项测试,例如让手臂由A点走到B点,下降夹取一个螺丝,再走至C点装到某面板上,然后回到A点期待,类似这样控制一个流程的停止,即是Test VI的工作内容;Main Level则包括了利用者接口(User Interface)或称人机接口(Man-Machine Interface) ,目标是整合各项测试和破例处置(Exception Handling)等,将它们以适当的顺序及流程组合,很轻易地让利用者操纵。

当一个软件计划严酷的遵照上述的三层结构来撰写时,最大的优点是可使法式代码的再利用(code reuse)到达最大化,在分歧的Test VI中,可反复利用不异的Driver VI;而在分歧法式的Main Level中,又可反复利用不异的Test VI,这将使得法式保护或点窜的时候与精神大幅削减;同时当我们已有一个法式的榜样(template)后,可增加软件版本更新的速度。另一个很重要的益处是,当我们在撰写某一个level中的法式时,并不需要关心在另一个level中有什么别的的法式是若何履行的,而只要专注在自己的这个level的法式上便可以了,这使得由团队来配合完成一个大型计划的工作变得轻易很多。

二、详解

以下将依Driver Level、Test Level、Main Level的顺序,来先容在各level写法式时的原则与心得﹔

(1) Driver Level﹔

凡是在Driver Level所写的法式是比力低阶的,其功用是把一些最根基的I/O行动按某一顺序毗连起来,构成根基行动,大致分为三大类﹔

a.组态(configuration):开启或封闭与仪器的连结、将仪器初始化及设定组态等。

b.量测(measurement):由仪器读出丈量值或特定的材料。

c.行动/状态(action/status):一个流程的启始或竣事行动、检查毛病等。

简单来说,Driver Level的内容是藉由一些接口(卡),经digital I/O或analog I/O由仪器获得上一些sensor的电压值,或传出一些电压值来控制机械、仪器或马达等的组态与行动,使得仪器或机械可以正确设定及做出一些根基的行动。别的法式与仪器间的材料传递或在本身计较机的存取行动,规定档案的格式以及存取等等,也都属于Driver Level中应当完成的事项。可是真正最低阶的工作还是需要NI供给的VI来停止,我们所写的Driver VI还是属于较高阶的。

以下举一个操纵7344卡来控制马达行动,而使BM7移动的Driver VI实例﹔

首先要肯定马达一切的行动有哪些,我们可简单分类以下﹔初始设定、找寻Home点、移到指定位置、以及回报现在位置等。固然我们必须先在MAX上做细部的设定,接下来再回到LabVIEW中来撰写Driver VI。

看起来我们必须写四个Driver VI来控制马达,但这样常常形成subVI过量的情形,是以我的倡议是将关于同一个仪器或装配的Driver VI合并为一个。合并的方式为操纵一个enumerated type的control加上case结构即可。完成后以下图﹔

操纵名为Action的enum control来控制此Driver VI要停止何项行动。记得在编辑icon时,要将此enum control加到input terminal即可。

在Test Level中呼唤时的方式便可以下图所示了﹔

如此一来,我们即可以操纵一个subVI来完成数个行动了,削减了一些治理subVI的辛劳。但请留意,这样的Driver VI要看情形而在其File> VI roperties…> Execution中设定为reentrant,因它很有能够同时被数个Test VI呼唤。

在大型法式计划成长时,一个看法很重要:Driver Level中的VI是全部软件计划中最重要的部分,它们的黑白间接决议了这个软件计划的成功与否和完成后的品格,就像要盖高楼大厦,打地基、注水泥以及根基用料的黑白才是决议修建物黑白最重要的地方,若根本的部分欠好,不管大楼表面有多宏伟或多标致,借使地震一来,都有能够会倾圮。Driver VI若不先计划,常常会形成法式效力减低,以及反复的法式代码过量等现象。虽然在最初主法式履行时并看不到Driver VI,但它们可是最重要的知名豪杰,所以在设想Driver VI时需要多费点心机喔!

(2) Test Level:

在Test Level中的VI此处暂称为Test VI,它可以呼唤Driver Level的VI,但只能被Main Level中的VI呼唤。有一个不成文的规定:Test VI间不成以相互呼唤;否则会使三层结构又被破坏了。可是在写法式时,偶然又感觉难以避免,或为了图方便想说就临时先呼唤一下吧,若有这情形发生,那就要请重新检视一下Driver Level中的VI,能否要重写某些部分或在写一些新的Driver VI,以避免上述的情形发生。

有一个重要的原则,一个Test VI内只要放置一套完整的测试即可,不要在同一个Test VI中去完成两个(以上)的测试,否则未来若全部计划要作点窜时,Test VI能够就又要点窜了。一个完整的Test VI固然要包括对仪器装备的初始化,组态设定等,它是一个可以零丁履行的VI,也就是说,即使此Test VI不放到Main Level之下,它也一样可以零丁履行来完成一项测试。另一个重要看法是,各个Test VI间是不要有什么关联的,由于当在Main Level中的某个Test VI履行时,它并不肯定前一个Test VI竣事时的机械状态能否合于要求,是以要重新设定,或是要重新检查一下,以避免不能履行或有预感外的状态发生。

流程图对于我们来撰写Test Level中的VI是出格有用,因流程图的概念也恰好就是LabVIEW中所谓data flow的概念,是以当一项测试的流程图清楚的画出来并能诠释其流程时,即使我们还没有起头写法式,我们几近可以说这个Test VI的法式设想已完成60%以上了,这一点也不夸张,因剩下的部分只是将流程图中各方块的毗连,换成LabVIEW中各function VI或Driver VI的毗连而已。

(3) Main Level:

Main Level又称人机接口(Man-Machine Interface, MMI),设想Main Level法式的中心看法是不但要能完成测试外,而且操纵上要越能user-friendly越好,由于当利用者在操纵仪器装备时,他实在并不见得很关心细节的部分是若何运作的,他也许只希望能很轻松愉快的尽快完成工作,然后轻松愉快的放工回家。例如,利用者希望手臂可以走到某特定位置去夹取一个螺丝,最好是按下某个屏幕上的按钮就行了,只要看着屏幕上一切一般的讯息,说不定他还可以偶然候落拓地喝杯咖啡呢!

凡是Main Level VI的设想常常操纵while循环不竭的polling,大部分的时辰也不但一个while循环。其内容要包括几个重点:

a) 可让操纵者设定或变动操纵参数:

例如可挑选何项测试及履行顺序、接口的地址、档案的途径等等,但也请留意,需设定的选项并非越多越好,太多的选项轻易使人分离留意力而轻易出错。

l 有些设置是只要用在起头之前。

l 有些设置可以随时变动,假如在SubVI中用到,则需要用到数据传输(属性节点,全局变量,消息等)。

l 姑且对话框。

l 非模态对话框数据(事务数据)。

b) 在特定的情况下利用适当的Control:

偶然Control需加些心机来点变化,以暗示其分歧的重要性,最简单确固然是以巨细、色彩来区分,固然在履行时也可操纵property node中闪灼的结果来夸大,不外一般而言,常用的重要Control凡是用按钮放在Front Panel上显眼的地方;而较不常用的Control,凡是操纵放在cluster或tab control中,操纵invisible的功用或换至别的页面使其平常不出现在Front Panel上。较不常用的按钮,也较不用按钮的形式,而可在Controls> Classic Controls> Boolean当挑选Radio Button或Checkbox来利用。请记得一个原则,在Front Panel上可看见的Control越少越好,因出现越多的Control,设定的参数就越有能够因不谨慎而改变,进而形成毛病发生,要避免这类情形,可将Control连上另一Indicator后,在将Indicator放到Front Panel显现其值即可。

c) 要将众多的Control及Indicator依利勤奋用分类,并适当地操纵页面切换来显现。

d) 在履行法式时可以挑选cancel或abort:

这对操纵者而言是非常重要的,但却轻易被法式设想者所轻忽,因法式设想者会不经意的假定操纵者是很是领会他所写的法式,又很是熟练,而且一定照正确步调不会按错按键。但现实上操纵者能够并不熟练或很大意等等,偶然若一旦按下某个按钮就不能后悔的话,很轻易形成万劫不复的悲剧。请留意,法式设想者一定要在法式中加入在履行中跳出法式的方式,而只管避免由操纵者去按下toolbar上的abort(红色圆形按钮)来跳出法式。

e) 在Front Panel上多利用图形,避免过量的笔墨或数据。

f) 在Main Level中同一处置一切的exception massage:

这部分在法式设想中又称exception handling,在软件工程上也是需要专门课程来会商的,同时,这部分对于产物的商品化是很是重要的,在此只先简单论述,以后会有专门的专题来会商。

先谈建立exception handling机制的益处:它可奉告操纵者那里有出错,或需要留意,使不是非常熟练的新手操纵者,减低发生状态的机遇;也方便制造厂商与法式设想者轻易做除错及故障解除的行动,使得全部系统的开辟及保护能较有用且所短时候。

我们希望exception handling可到达以下几个功用:当测试进程有毛病状态发生时,法式可以自动修复毛病,并继续完成测试或重新测试一次;或当测试进程有毛病状态发生,且此毛病不能修复时,法式能自动跳过有题目标部分,并继续完成测试;或测试进程有毛病状态发生时,法式会将全部系统停息或终结,并奉告操纵者毛病发生处。上面论述起来似乎很简单,但现实上它需要法式设想者看到现实操纵后的成果,再一项一项加到全部法式中,然后再故意发生毛病来测试,也由于如此,它可算是全部软件计划成长进程中很是耗时耗力的一部分。

若藉用前述所提过的State Machine的写法,会使得exception handling的法式设想较为简单,因State Machine华夏本就有放置一个error state,可让法式设想者在那边同一撰写处置各类exception/error message,然后在error state中判定,是回到本来的测试中,或是走到close state去竣事此项测试。是以是激烈保举采用State Machine的写法。

更多教程,请关注 labview工作室 ,进修labview或需要源码的朋友,接待关注留言征询。需要labview培训请留言!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

2

主题

9

帖子

30

积分

新手上路

Rank: 1

积分
30
发表于 2020-5-5 19:21:24 | 显示全部楼层
转发了
回复

使用道具 举报

6

主题

14

帖子

44

积分

新手上路

Rank: 1

积分
44
发表于 2020-5-5 19:21:54 | 显示全部楼层
转发了
回复

使用道具 举报

2

主题

9

帖子

30

积分

新手上路

Rank: 1

积分
30
发表于 2020-5-5 19:22:21 | 显示全部楼层
转发了
回复

使用道具 举报

363

主题

8243

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
17075
发表于 2020-5-5 19:22:47 | 显示全部楼层
mark
回复

使用道具 举报

363

主题

8243

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
17075
发表于 2020-5-5 19:23:24 | 显示全部楼层
转发了
回复

使用道具 举报

2

主题

4437

帖子

8876

积分

论坛元老

Rank: 8Rank: 8

积分
8876
发表于 2020-5-5 21:38:00 | 显示全部楼层
互联网真的是时代的趋势啊
回复

使用道具 举报

7

主题

4480

帖子

8967

积分

论坛元老

Rank: 8Rank: 8

积分
8967
发表于 2020-5-6 03:44:36 | 显示全部楼层
互联网真的是时代的趋势啊
回复

使用道具 举报

5

主题

4525

帖子

9055

积分

论坛元老

Rank: 8Rank: 8

积分
9055
发表于 2020-5-6 07:03:10 | 显示全部楼层
互联网真的是时代的趋势啊
回复

使用道具 举报

10

主题

4477

帖子

8964

积分

论坛元老

Rank: 8Rank: 8

积分
8964
发表于 2020-5-8 16:30:28 | 显示全部楼层
互联网真的是时代的趋势啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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