News And Information
-技术与支持-
微信公众号-关注紫金桥
了解软件最新资讯
当前位置:首页 >> 技术与支持 >> 常见问题
销售热线:
400-678-6601
售后热线:
13304891586
0459-8151391
0459-8151518
如何使用间接变量
如何使用间接变量
  我们知道,在许多高级语言(比如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个罐的数据,大大节省了工作量。