任何语言编程,都有数据封装的问题.在面向对象的编程语言中处处可见.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发送相应的命令,具体实现过程与主循环无关,有效地封装的数据.
上一篇:shift register 与循环结构
下一篇:Shift Register 与 Function Global
推荐阅读最新更新时间:2024-03-30 23:03