[LabVIEW随笔-8] -Actor Framework框架学习1
1、QMH设计模式
1.1 QMH设计模式时生产者/消费者和事件处理体系的组合,其包含两个循环:事件处理循环(EHL)和消息处理循环(MHL),MHL接收并处理消息、触发UI事件时,消息排队
1.2 EHL:与前面板控件的交互对用户触发的事件做出反应,通过用户事件,事件可能来自其他源(如MHL),触发或生成事件时,将执行与该事件的事件结构,然后创建相应的消息并排队发送值MHL当中
1.3 MHL:对传入的消息执行
1.4 消息的组成:消息名称、数据
1.5 生产者消费者模型

上面循环的为生产者,下面的为消费者。主要是使用队列进行操作
1.6 添加用户事件后
1、创建用户事件
2、注册用户事件
3、生成用户事件
4、处理用户事件
5、取消用户事件
6、销毁用户事件

1.7 停止条件
目前有两个后续可能有多个并行循环正在运行,若其中一个停止运行,而另外一个没有停止,程序将会无响应,故任何循环的停止都该确保其他条件被停止
1.7.1 EHL停止:需要发送消息以命令MHL停止
1.7.2 MHL停止:发送"停止"对应的用户事件至EHL以停止,若还有其余MHL,让EHL发送消息让他们一起停止(当前未编写,在MHL产生用户事件即可)

2、使用面向对象改造MHL
2.1 改造前MHL:

使用面向对象改造MHL:
2.2 将数据信息(VISA、电压、采集?组成的簇封装为类成员字段)

2.3 将采集电压及其输入信息封装为静态方法:

2.4 将数据对象替换簇

2.5 创建抽象Message类并创建虚函数(动态分配VI)

2.6 使用Messgae抽象类替换入队消息簇后的结果:

2.7 创建采集电压类,继承自Message类,为携带数据内部添加一个布尔控件,并添加访问器,并将其入队(仅为演示,实际应当在EHL或其余MHL进行入队)




2.8 "采集电压"类重载方法Do.vi

3、使用改造后的QHM
3.1 将发送消息(入队操作)封装为一个子VI

3.2 MHL为使用用户事件句柄,需要在MHL私有数据添加一个"用户事件句柄"类型数据,并添加数据访问器

3.3 在"采集电压"当中产生用户事件

3.4 添加用户事件处理与发送开始消息

3.5 目前无法停止下方MHL循环,故需要创建停止消息类(继承自消息类)

3.6 "程序停止类"重写Do.vi与"发送停止消息"

3.7 改造后的QHM

3.8 为防止MHL异常退出,EHL没有退出,引入"停止"用户事件,重写Do方法,发送停止消息

浙公网安备 33010602011771号