最新技术文档
当前位置:首 页>> 技术支持>> 疑难解答 [阅读]

如何使用间接变量

    我们知道,在许多高级语言(比如C语言Pascal语言等)中都使用了指针的概念,通过使用指针,可以大大简化我们的编程,同时提供了较多的灵活性。在Jave和最新推出的C#中虽然去除了指针,但是实际上它提供了许多的指针的代用品,功能上和指针有些类似。在紫金桥系统中也提供了一种类似指针的变量,即间接变量。

    间接变量的功能十分强大,用法相对于其它变量也稍微复杂,它的用法有以下几种:

 

    假设Ptr为一个间接变量,同时A1和A2为数据库中定义的点,当仅仅简单的对间接变量Ptr进行赋值操作时,Ptr相当于一个普通变量。

    比如:Ptr = 100; 在这里Ptr和一个中间变量的作用相同,仅仅做为一个变量来保存一个数值100。

    

    当使用了间接变量重定向语句后,该间接变量的作用相当于一个指针。

    比如:

    Ptr = & A1.PV;

    Ptr = 100;

    在第一条语句执行时,Ptr变为了一个指向A1.PV的指针,对它的任何操作对变为对A1.PV的操作了。在第二条语句执行时,A1.PV的值变为了100。

 

 

    当在变量之后加数组引用,同时使用了间接变量重定向语句后,该间接变量的作用相当于一个指针数组。

    比如:

    这段程序执行完毕后,A1.PV的值被改为100,而A2.PV的值被改为200。

    总结如下:

    

作用

示例

说明

作为普通变量使用

Ptr = 100;

Ptr的值变成100

作为指针使用

Ptr = & A1.PV;

Ptr = 100;

Ptr指向了A1.PV

A1.PV的值变为100

作为指针数组使用

Ptr[0] = &A1.PV;

Ptr[1] = &A2.PV;

Ptr[0] = 100;

Ptr[1] = 200;

数组的第0个元素指向A1.PV

1个元素指向A1.PV

A1.PV的值为100

A2.PV的值为200

下面我们通过一个简单的小例子来说明一下间接变量的使用方法,小例子运行时如下所示:

    当我们分别点击“1号罐”、“2号罐”和“3号罐”按钮时,按钮上方罐的液位、温度和压力数值都显示对应的罐的数据,同时下方的字符串也对应提示相应的罐号。

 

    1、定义数据库点

    将导航器切换到数据库页,双击“点组态”选项,进入点组态管理程序,创建如下表所示的点:

点名

类型

初始值

Name1

模拟IO

DESC为:1号罐

Name2

模拟IO

DESC为:2号罐

Name3

模拟IO

DESC为:3号罐

Level1

模拟IO

PV为:60

Level2

模拟IO

PV为:20

Level3

模拟IO

PV为:80

Press1

模拟IO

PV为:1.05

Press2

模拟IO

PV为:1.02

Press3

模拟IO

PV为:1.11

Temp1

模拟IO

PV为:44

Temp2

模拟IO

PV为:38

Temp3

模拟IO

PV为:42

    2、定义间接变量

将导航器切换到画面页,双击“变量/间接变量”项,创建如下表所示的间接变量:

点名

类型

PtrName

字符型间接变量

PtrValue

实型间接变量

3、创建画面

将导航器切换到画面页,双击“窗口”项创建一个名为“Draw1”的窗口。在窗口上使用各种绘图工具,绘制如下所示的图形:

    双击液位右侧的文本,给它关联上模拟量输入输出的动画联接,将其和PtrValue[0]关联起来;同样把温度和压力右侧的文本分别和PtrValue[1]、PtrValue[2]关联起来。双击下方的文本,给它关联上文本输出的动画联接,把它和PtrName关联起来。同样给罐中的矩形关联一个垂直填充的动画联接,把它和PtrValue[0]关联起来。

 

4、编写脚本

    在导航器的画面页中,展开“窗口/Draw1”项,双击动作栏,在弹出的窗口动作编辑对话框的进入窗口页中输入:

    PtrName = &Name1.DESC;

    PtrValue[0] = &Level1.PV;

    PtrValue[1] = &Temp1.PV;

    PtrValue[2] = &Press1.PV;

    

    这样当打开窗口时,间接变量PtrName将指向&Name1.Desc,间接变量PtrValue将作为指针数组使用,其中它的第一个元素指向Level1.PV,第二个元素指向Temp1.PV,第三个元素指向Press1.PV。

 

    双击“1号罐”按钮,给它关联鼠标点击动作,输入脚本如下:

    PtrName = &Name1.DESC;

    PtrValue[0] = &Level1.PV;

    PtrValue[1] = &Temp1.PV;

    PtrValue[2] = &Press1.PV;

    

    脚本和进入窗口的动作相同,这样当我们点击此按钮时,因为进行了间接变量从定向,所以界面将显示
一号罐的数据。

    同样给“2号罐”按钮关联如下的鼠标点击动作:

    PtrName = &Name2.DESC;

    PtrValue[0] = &Level2.PV;

    PtrValue[1] = &Temp2.PV;

    PtrValue[2] = &Press2.PV;

    

给“3号罐”按钮关联如下的鼠标点击动作:

    PtrName = &Name3.DESC;

    PtrValue[0] = &Level3.PV;

    PtrValue[1] = &Temp3.PV;

    PtrValue[2] = &Press3.PV;

    

5、运行系统,观看结果

    运行整个系统我们可以看到,当我们切换到不同的罐时,界面上就会显示对应罐的数据。通过使用间接
变量,我们仅仅使用了一幅图就可以切换显示3个罐的数据,大大节省了工作量。