*附件:面向对象试验机测控系统.zip
一、actor对象描述
1、actor对象本身就是一个队列状态机类,空白的一个对象即具备了队列状态机功能。但是具备不代表无条件立即运行;这些功能必须在几个关键函数的作用下才能产生作用:
1)必须使用---获取当前类带入队列
2)必须----在获取队列后,必须向队列里发送消息。这里也引出了后续的知识点
2、队列的消息如何生成或者获取:
1)在actor对象里创建程序要实现的功能---即“方法”。
(///该功能可能只是一个空白的VI,目的是有很多同类型的actor对象要继承前述actor对象时,可以继承这个方法,并对方法的内容进行修改,实现具体的需求。///)
2)创建方法后,利用actor框架自带的“创建消息”功能,右击方法VI,选择创建消息,labview会自动生成一个针对该方法的消息类对象(注意:针对一个方法,生成的是类)
3)消息类中:自动生产了“发送该消息”的VI, (注:这个vi中包含方法中对外连接的端子)
3、至此 actor对象的方法和消息都已创建,可以编程使用了
二、具体到控制中心和数据采集工作站的讲解
1、首先创建了一个定时发送消息的actor
1)该actor,只有一个私有数据---用于产生定时周期,用于采集周期
2)该actor,只有一个方法---timer,这是一个空的方法,用于继承类实现具体功能
3)针对唯一的方法生成唯一的timer消息类,发送timer对应的消息
4)重写actor的核心vi---actor core,这个核心,就是队列状态机。
4.1)在这个核心中,新设一个while循环,while循环的周期利用“等待下一个整数毫秒”
4.2)在这个核心中,先调用“获取当前类队列”,再向队列中接入timer的消息vi
5)至此,该定时actor即具备了,周期循环调用timer方法的功能
2、创建数据采集工作站actor
1)数据采集工作站actor,继承定时actor
2)重写timer方法
3)在timer方法中收集数据
但是,接着面临一个问题:收集的数据怎么传送给控制台呢?
也即不同actor之间如何传递数据?
答案:方法有很多,选取“用户事件”方法,原因是该方法与界面显示数据的控件没有关联也称耦合。
有了上述方法后,如何实现具体的传递呢:利用actor框架自带的“获取调用方带入队列”+“发送该队列消息”
注:这里很重要,本人也是反复使用后才明白此处的功能。timer方法是被反复定时调用的,在该方法每次调用生成了数据,在生成数据的同时,把数据传送给了---上一级(即调用它的actor)actor的队列消息---注意是“队列消息是名词---理解为队列的消息”。
至此,可以回想下 队列消息状态机的“入队列”vi,在该VI中入队列,进入队列的消息经常是以簇的形式出现,簇中既有状态消息,也有数据消息
所以数据的传递是通过队列的“消息”传送的。
关键1:“获取调用方队列”是现有的vi,此处调用方指向控制台actor,因为控制台需要这些数据。
关键2:如何生产,“发送该队列消息”,即如何生产控制台队列的消息?
待续......
对actor对象使用的“消息”的理解:
1、消息是一个类,它封装了一个操作(方法.vi),包括该操作需要的数据。
actor对象的理解:
1、actor对象是一个独立的类,是一个独立的对象,它拥有自己的私有数据和行为(方法vi);该对象通过“消息”与其他操作者进行通信,或通过“消息”在自己内部调用具体某个行为vi。
2、每个actor对象都运行在自己独立的执行线程中。