间接变量的功能十分强大,用法相对于其它变量也稍微复杂,它的用法有以下几种:
假设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、定义数据库点
将导航器切换到数据库页,双击“点组态”选项,进入点组态管理程序,创建如下表所示的点:
2、定义间接变量
将导航器切换到画面页,双击“变量/间接变量”项,创建如下表所示的间接变量:
3、创建画面
将导航器切换到画面页,双击“窗口”项创建一个名为“Draw1”的窗口。在窗口上使用各种绘图工具,绘制如下所示的图形:
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个罐的数据,大大节省了工作量。
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个罐的数据,大大节省了工作量。