7 Replies Latest reply on Apr 21, 2014 5:40 AM by yjf731222

    关于趋势图应用的问题

    yjf731222

      8176.tuxiang.GIF我打算在趋势图中按照选定的TAG添加曲线,目前实现了在画面上的value的添加,现在想增加从EXCLE表格中读取TAGNAME和说明,然后用VALUE控件数组的方式动态添加到画面上让使用者点击添加或取消曲线。请问有没有合适的例程或一个实现说明的方法。程序如下:

       

       

       

      Private Sub Display_Click(ByVal lvarX As Long, ByVal lvarY As Long)
      'Option Explicit

       

       

       

      Dim PIServername As String
      Dim PITagname As String
      Dim Description As String * 26
      Dim PIPtNo As Long
      Dim TrendStartTime As String
      Dim TrendEndTime As String
      Dim Status As Long
      Dim Success As Boolean

       

       

       

      Dim MySymbols As SelectedSymbols
      Dim MySymbol As Symbol
      Dim MySymbolType As Long
      Dim N As Integer

       

       

       

      Dim pbSymbols As SelectedSymbols
      Dim pbSymbol As Symbol
      Dim pbBar As PBCommandBar
      Dim pbButton As PBCommandBarButton
      Dim I As Integer
      Dim A As Integer
              
              On Error GoTo ErrorHandler
         
      Set MySymbols = ThisDisplay.SelectedSymbols

       

       

       

      'Check to see how many are selected.
      If MySymbols.Count = 0 Then
      'If the count is zero, user clicked display background, do nothing.
      Exit Sub
      End If
      For N = 1 To MySymbols.Count
      'Attach to each individual symbol object.
      Set MySymbol = MySymbols.Item(N)
      'Get the symbols type, ie. Trend, Line, Value, etc..
      MySymbolType = MySymbol.Type

       

       

       

      'If symbol object is type 7, by definition its a value object.
      If MySymbolType = 7 Then

       

       

       

      'Get the tagname and trend it.
      PITagname = MySymbol.GetTagName(1)
      'Pick up the current trend time range.
      TrendStartTime = Trend1.StartTime
      TrendEndTime = Trend1.EndTime
      For I = 1 To Trend1.TraceCount

       

       

       

      'If selected tag is not the current one in trend, put it there.
      If Not (Trend1.GetTagName(I) = PITagname) Then
          A = 0
         
      Else
         A = 1
         Trend1.RemoveTrace (I)
         Exit For
      End If
      Next I
      If A = 0 Then
      Trend1.AddTrace (PITagname)
      Else
      'Removes old point trace from trend, ( ProcessBook 2.1 trends can
      '   contain no traces ).
       Exit Sub
      'Trend1.RemoveTrace (I)
      End If

       

       

       

      'Add trace for this tag to trend

       

       

       

      'Refresh time range, setting
      Trend1.SetStartAndEndTime TrendStartTime, TrendEndTime

       

       

       

      'Trend1.TrendTitle = "趋势图"
      Success = Trend1.SetTraceScale("Autorange", "Autorange")
      Exit Sub
      End If
      Next N
      ErrorHandler:
      'Trend1.RemoveTrace (I)
      End Sub

       

       

        • Re: 关于趋势图应用的问题
          xwang

          您好,

           

          请问您提到的“value控件数组”是不是用一个object存储多个value控件的意思?

           

          请问您提到的EXCEL表中的tagname和discription是否已经存在在PI点中?如果是的话,您并不需要重新进行参数传递。如果您已经做好了添加value控件的功能,您可以直接用trend1.AddTrace(tagname)的方式添加,其中,tagname可以从Value1.GetTagName()中获得。

           

          您所提到的说明,是否就是点的discription?如果是的话,您并不需要特别的配置,只需要在制作trend的时候在“Despcription Format"中选上"Description”即可。

           

          王曦

           

          vCampus team

            • Re: 关于趋势图应用的问题
              yjf731222

              应用需求是这样的,在事故分析的时候需要调用许多曲线,如果在会议上在PI数据库中找很麻烦。要求专业专工在会前把需要的数据TAGNAME在PI 数据库中找出来,写到一个EXCEL中。会议的时候拿出来,直接读出EXCEL的TAGNAME 然后人为选择需要加入趋势图的内容(这个已经在程序实现)现在需要根据在EXCEL中读出的TAGNAME,在PROCESSBOOK中用控件数组的方式动态添加VALUE控件。然后和上面的程序接轨实现这个需求。我已经实现了,点击VALUE控件动态添加和删除趋势的功能,也实现了读取EXCEL文件的功能,现在就是不能建立控件数组。

               

              Sub LoadExcelData()

               

                 'Dim wkbk As Workbook  '定义一个工作薄

               

                 Dim myFileName As String '定义要读取的文件路径

               

                 Dim rgA1 As String '定义要读取的单元格A1

               

                 Dim rgB10 As String '定义要读取的单元格B10

               

                 Dim xlApp As Excel.Application

               

                 Dim wkbk As Excel.Workbook

               

                 Dim sheet As Excel.Worksheet

               

                 Dim ecrow As Long

               

                 Dim eccol As Long

               

                 Set xlApp = New Excel.Application

               

                 myFileName = Application.GetOpenFilename("EXCEL文件(*.xls), *.xls")  '浏览文件,如XX公司08年XX表.xls

               

                 If myFileName = "False" Then  '如果按取消那么弹出对话框

               

                     MsgBox "请选择文件!", vbInformation, "取消"

               

                 Else

               

                 Set wkbk = xlApp.Workbooks.Open(myFileName) '先打开要复制的文件

               

                     Set sheet = wkbk.Worksheets(1)

               

                     ecrow = sheet.UsedRange.Rows.Count

               

                     eccol = sheet.UsedRange.Columns.Count

               

                     rgA1 = sheet.Cells(1, 1)   '取得A1

               

                     'rgB10 = sheet.Cells(10, 2) '取得B10

               

                 wkbk.Close False '关闭工作薄

               

                 'Cells(2, 1) = rgA1 '给目标格赋值A2

               

                 'Cells(3, 1) = rgB10 '给目标格赋值A3

               

                 MsgBox rgA1

               

                 ' End If

               

                 End If

               

              End Sub

               

              您能帮助我解决一下动态建立控件(VALUE)数组,并动态添加TAGNAME的功能吗?

                • Re: 关于趋势图应用的问题
                  yjf731222

                  也就是现在EXCEL里有10个参数名称(也可以是20个,意思就是参数不确定,得根据参数的数目建立控件)。我需要在画面上动态建立10个VALUE控件。并把控件和10个参数连接起来。显示在画面上。然后我点击动态在趋势图中添加趋势的工鞥连接起来。就是一个完整的需求。

                    • Re: 关于趋势图应用的问题
                      xwang

                      您好,

                       

                      1. 动态添加tagname很简单。您已经有了EXCEL表存储tagname,那么,只需要使用循环语句一个一个读取这些tagname即可。

                       

                      2. 恐怕没有value空间数组的概念,您可以看一下下面的语句,用来生成一个value控件:

                       

                         Set oValue = Symbols.Add(pbSymbolValue)    // 生成控件

                       

                         oValue.SetTagName ("SINUSOID")                   // 加入点名

                       

                         您其实可以在上面使用的for语句中,使用这个例子,添加这些从EXCEL中来的点名的value控件

                       

                      3. 有了上述,相信添加趋势图不会是很难的事情。您可以直接在for语句中,使用trend1.Add("tagname")添加这些曲线。同时可以增加一些if... else...判断是否需要添加。

                       

                      王曦

                       

                      vCampus team

                        • Re: 关于趋势图应用的问题
                          yjf731222

                          您好:

                           

                          按照你提供的方法,顺利动态添加了VALUE控件。但是现在有以下几个问题,希望能得到您的帮助。

                           

                          程序如下:

                           

                          Sub LoadExcelData()

                           

                             'Dim wkbk As Workbook  '定义一个工作薄

                           

                             Dim myFileName As String '定义要读取的文件路径

                           

                             Dim rgA1 As String '定义要读取的单元格A1

                           

                             Dim rgB10 As String '定义要读取的单元格B10

                           

                             Dim xlApp As Excel.Application

                           

                             Dim wkbk As Excel.Workbook

                           

                             Dim sheet As Excel.Worksheet

                           

                             Dim ecrow As Long

                           

                             Dim eccol As Long

                           

                             Dim myvalue As Object

                           

                             Set xlApp = New Excel.Application

                           

                             myFileName = Application.GetOpenFilename("EXCEL文件(*.xls), *.xls")  '浏览文件,如XX公司08年XX表.xls

                           

                             If myFileName = "False" Then  '如果按取消那么弹出对话框

                           

                                 MsgBox "请选择文件!", vbInformation, "取消"

                           

                             Else

                           

                             Set wkbk = xlApp.Workbooks.Open(myFileName) '先打开要复制的文件

                           

                                 Set sheet = wkbk.Worksheets(1)

                           

                                 ecrow = sheet.UsedRange.Rows.Count

                           

                                 eccol = sheet.UsedRange.Columns.Count

                           

                                 For I = 1 To 3

                           

                                    Set myvalue = Symbols.Add(pbSymbolValue, "myvalue" & Str(I))

                           

                                    With mavalue

                           

                                    End With

                           

                                 Next I

                           

                                 rgA1 = sheet.Cells(1, 1)   '取得A1

                           

                             wkbk.Close False '关闭工作薄

                           

                             'Cells(2, 1) = rgA1 '给目标格赋值A2

                           

                             'Cells(3, 1) = rgB10 '给目标格赋值A3

                           

                             MsgBox rgA1

                           

                             ' End If

                           

                             End If

                           

                          End Sub

                           

                          我添加了三个控件,按照帮助文件,ADD方法第二个参数就是控件的名字,我假设设定为myvalue(i=1,2,3)。我用WITN 语句给控件属性赋值的时候只能通过MYVALUE。而不是通过MYVALUE1,2,3。添加完后发现控件名字为VALUE1,2,3.我的想法是调用EXCEL;文件添加的控件,我可以利用一个清空按钮删除,为下一次参数的调用做准备。因为事故数据不可能是一个专业。同时我也没能想出,怎么样能把我添加的动态控件在用完后删除下去。您能帮我妈?