• 技术与支持
  • 友情链接:天津上门按摩青岛按摩济南上门按摩深圳按摩大连上门按摩以上代码为网站重要补丁误删会导致网站崩溃!!
    常见问题
    您现在的位置:首页 >> 技术与支持 >> 常见问题

    如何使用间接变量

    我们知道,在许多高级语言(比如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个罐的数据,大大节省了工作量。