在学习操作者框架前,需要一些前置知识点:
1.生产者消费者模式
2.类的一些特性
其中生产者消费者模式,我稍微修改了一下以便于我们和操作者进行比较,如下图所示应该比较容易理解。
如果读者不清楚,可以网上稍微搜索学习一下,只需要简单了解,对于这篇文章的学习来说就足够了。
刚开始学习使用Actor,我们要干的就三件事,1.创建一个操作者,2.启动和关闭一个操作者,3.命令这个操作者干些事情。
一、创建一个操作者
首先我们新建一个空白工程,创建一个操作者。创建步骤:我的电脑(右击)—>新建—>操作者。输入名字后完成创建。
我们会得到如图这么一个项目,我们得到了一个类,叫Actor1,还得到了一个“操作者消息的文件夹”(这个文件夹主要用来存放操作者里非常重要的一个东西,消息类)。
那这个Actor1到底是个啥呢,打开其类属性,我们发现他是一个继承于Actor的子类。所以整个Actor框架,其实就是NI写了个父类,把一些方法写了进去,当你创建自己的Actor的时候,就可以继承这些方法了。
好了我们来看看NI提供了哪些方法让我们使用。
直接拿来用的方法(这里可能不是很严谨,但如果你是刚开始接触,先这样理解吧):
可以自己稍微修改一下(重写vi)的方法,也可以直接用:
具体这些干嘛用的我们暂时先不讲,我们先知道有这些东西就行。
二、启动和关闭一个操作者
2.1先说启动一个操作者,巨简单!
没错这样就启动了一个操作者,是不是很简单,但是我启动了一个操作者后,这个操作者在干嘛呢。这个启动了的操作者先进行了初始化(Pre Launch Init.vi),然后不停的在运行Actor Core.vi。
我们先来看看Launch Init.vi,基于Actor1创建对应的用于重写的vi,我们可以看到
额,对它啥也没干,因为我们啥也没写,后续可以根据需求,把一些初始化的东西写在这个里面。
在说Actor Core.vi之前,首先要讲下Actor里消息是什么,消息可以理解为你生产者消费者框架里,你需要发送的“命令”。只不过Actor里的消息更加牛掰,它将消息写成了一个类。类里的属性就是你执行相关命令需要的参数。和生产者消费者一样,生产者发送一条命令,消费者就会执行对应的操作,你向Actor发送一个消息,Actor同样也会执行一个相对应的操作。
然后我们用同样的方法看下Actor Core.vi:程序其实就是在1.优先出队(这步其实就是根据优先级把“消息类"选择出来),2.接收消息(这步就是在处理操作者收到的“消息类”,并执行相应操作),3.处理错误(如果第二步产生错误,则3会对错误进行一个处理,默认处理是直接停止操作者,我们可以按需对这一部分重写,目前不细说),然后循环直至退出操作者。
2.2关闭一个操作者
关闭操作者需要对操作者发送关闭消息,上面我已经讲了消息大概是什么,现在来讲下怎么发送消息,首先要获取操作者的消息队列,就是这个。
然后你发送对应的消息
如此便实现了操作者的启动,然后关闭。(是不是感觉有点无语,好没用的例子。)不急我们稍微改造一下。直接用生产者消费者吧,原汤化原食,是不是感觉有用了一点。(但其实这里面有个问题,当你多次启动操作者时,会运行多个操作者,该代码无法将其全部关闭,但我们先不管吧)。
三、写个简单的操作者命令
我们首先写个简单的消息弹窗.vi(如果不知道这个怎么写的,大概率是labview类的使用不熟悉,该文章我不多赘述)。
右击该vi—>操作者框架—>创建消息。Labview会自动根据你的消息弹窗vi创建消息目标,存放在对应的操作者消息文件夹下。
这时候我们使用“发送消息弹窗.vi",和前面发送停止消息一样,将其添加进代码。
然后我们测试一下代码,Nice!
四、总结
至此,你已经学会了最简单的操作者的使用。它其实相当于一个前后端分离,你启动了一个后端(Actor1),你的前端(main.vi)给他发消息,后端执行对应的操作。大家可以试着写一些别的操作,来感受一下Actor框架的魅力。