微波EDA网,见证研发工程师的成长!
首页 > 测试测量 > 测试测量技术文库 > Function Global 与Action Engine

Function Global 与Action Engine

时间:01-09 来源:互联网 点击:
Action Engine的概念在LV的书籍中是看不到,国外一些LV高手创造了这个概念.暂时翻译成动作器吧.

任何语言编程,都有数据封装的问题.在面向对象的编程语言中处处可见.LABVIEW8.X增加了一部分类的概念,对数据封装自然就容易多了.这是另外一个话题.

一个Action Engine,我的理解是一个黑匣子操作,它可以接受外部命令并自动自行相应的操作,命令的具体执行过程外部是看不到了,类似于类中的属性和方法的概念.

比如开车,作为一个司机,只需要用方向盘控制方向,用油门和档位来控制速度,具体是如何实现的,司机是并不关心的,所以具体实现过程对司机来说是不透明的,这就是动作器的含义.

就本质来说,是基于消息发送的机制.

windows就是典型的采用消息来发送命令的.

LRESULT SendMessage(
HWND hWnd, // 目标窗口句柄
UINT Msg, // 被发送的消息
WPARAM wParam, // 第一个消息参数
LPARAM lParam // 第二个消息参数
);

hWnd---是接受消息的窗口句柄 Msg----消息(命令), wParam 和lParam是要传递的数据.

实际所谓Action Engine也是基于这个原理的.


举一个实际应用问题来进一步说明.为了简单,消息只采用命令方式,不传递任何数据.

一般的数据采集卡都有一个8位的数字量输出,每一位对应一个外部的输出点,控制电机,方向阀等.

我们分别命名为:bit 0--->Relay 0,1--->Relay1 .....7---Relay 7,我们需要对其中每一位都有置0和置1的功能.

可编制如下的命令组:

Relay0 On

Relay0 Off

...

Port On (全部On)

Port Off(全部Off)

Keep(可以改变,但不输出)

显然我们需要一个Enum类型的数据来描述上述命令,强烈建议使用自定义控件中的strict tyep def,这样如果需要修改,程序中任何地方都可以自动更新.


我们需要用Function Global方法保存一个U8数据来做代表这个8位输出口.


下一步为每个命令配置一个CASE项目.


这样,一个AE就形成了,它是作为一个子VI而存在的,在其他部分可以非常方便地调用它.

这样,对于主循环来说,只是给AE发送相应的命令,具体实现过程与主循环无关,有效地封装的数据.

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top