Пример для EXCEL

В данном разделе приведены некоторые примеры для COM-менеджера, а также методы, описанные ранее.

Примеры были выполнены с помощью макросов в программе Excel (языком программирования был язык VBA), чтобы проиллюстрировать доступ к данным в «КАСКАД Цифра» посредством COM-интерфейса. Чтобы пройтись по примерам, выполните следующие действия:

  • Запустите «КАСКАД Цифра» с проектом (точки данных, определенные в проекте, должны использоваться в коде).
  • Запустите MS Excel.
  • Откройте новую таблицу (новая таблица создается автоматически при открытии программы — вы можете увидеть sheet1 в строек заголовка)
  • Откройте редактор Microsoft Visual Basic в программе Excel через Extras > Macro > Visual Basic editor> (Дополнительно >> Макрос > Редактор Visual Basic). Откроется новое окно с оболочкой приложения Visual Basic.
  • Обратитесь к библиотеке WCCOACom 1.0 Type Library в проекте. Выберите пункт меню Extras > References… и активируйте библиотеку во всплывающем окне, которое отображается.

ПРИМЕР

Создайте новый модуль для sheet1 в проекте Visual Basic и добавьте в модуль следующий код:

Тестовая среда для COM-менеджера

Option Explicit

 Const CMDLINE = «-num 2»

 Const CMDLINE = «-proj <название проекта>»

 Private moComMan As «КАСКАД Цифра»

 Private moComMan As ComManager

‘Управляет ходом выполнения тестирования

Public Sub test()

Dim iAnswer As Integer

Dim ws As Worksheet

  On Error GoTo test_error

  iAnswer = MsgBox(«Start test?», vbQuestion + vbYesNo, «COM Test»)

  If iAnswer <> vbYes Then Exit Sub

  Set ws = ThisWorkbook.Worksheets(1)

  ws.Range(«A:K»).Value = «»

  Call Init(ws)

  Call dpGet(ws)

  Call dpSet

  Call dpGetAsynch(ws)

  Call dpQuery(ws)

  Call dpTypes(ws)

  Call dpNames(ws)

  Call dpElementType(ws)

  ws.Range(«A1:K1»).EntireColumn.AutoFit

Exit Sub

test_error:

  Call MsgBox(Err.Description, vbCritical + vbOKOnly, Err.Number)

End Sub

‘ Инициализирует (запускает) COM-менеджер — пример для init()

Private Sub Init(ws As Worksheet)

Dim sConfigFile As String

  sConfigFile = Environ(«PVSS_II»)

  If moComMan Is Nothing Then

    Set moComMan = New «КАСКАД Цифра»

    Set moComMan = New ComManager

    Call moComMan.Init(sConfigFile, CMDLINE)

    Call moComMan.Init(CMDLINE)

  End If

End Sub

‘Пример для dpGet()

Private Sub dpGet(ws As Worksheet)

Dim asDpName(2) As String

Dim avValue As Variant

Dim rg As Range

Dim n As Long

  asDpName(0) = «ExampleDP_Arg1.:_online.._value»

  asDpName(1) = «ExampleDP_Arg2.:_online.._value»

  asDpName(2) = «ExampleDP_Result.:_online.._value»

  Call moComMan.dpGet(asDpName, avValue)

  Set rg = ws.Range(«A1»)

  rg.Value = «Beispiel dpGet()»

  For n = 0 To UBound(avValue)

    rg.Offset(n + 1, 0).Value = asDpName(n)

    rg.Offset(n + 1, 1).Value = avValue(n)

  Next n

End Sub

‘Пример для dpSet()

Private Sub dpSet()

Dim sDpName As String

Dim vValue  As Variant

  sDpName = «ExampleDP_AlertHdl1.:_original.._value»

  vValue = 1

  Call moComMan.dpSet(sDpName, vValue)

  sDpName = «ExampleDP_AlertHdl2.:_original.._value»

  vValue = 1

  Call moComMan.dpSet(sDpName, vValue)

End Sub

‘Пример для dpGetAsynch()

Private Sub dpGetAsynch(ws As Worksheet)

Dim dtVon       As Date

Dim asDpName()  As String

Dim avValue     As Variant

Dim avTime      As Variant

Dim avType      As Variant

Dim rg          As Range

Dim n           As Long

Dim m           As Long

  ReDim asDpName(0)

  asDpName(0) = «ApplicationProperties.demoDataStart:_online.._value»

  Call moComMan.dpGet(asDpName, avValue)

  dtVon = DateSerial(Year(avValue(0)), Month(avValue(0)), Day(avValue(0)) + 2)

  ReDim asDpName(1)

  asDpName(0) = «Reservoir_1_level.C3.AVG_WT0:_offline.._value»

  asDpName(1) = «Reservoir_2_level.C3.AVG_WT0:_offline.._value»

  Call moComMan.dpGetAsynch(dtVon, asDpName, avValue)

  Set rg = ws.Range(«A6»)

  rg.Value = «Beispiel dpGetAsynch()»

  For n = 0 To UBound(avValue)

    rg.Offset(n + 1, 0).Value = Left(asDpName(n), 17)

    rg.Offset(n + 1, 1).Value = avValue(n)

  Next n

End Sub

‘Пример для dpQuery()

Private Sub dpQuery(ws As Worksheet)

Dim sSQL As String

Dim avValue As Variant

Dim rg As Range

Dim n As Long

Dim m As Long

  sSQL = «SELECT ALERT ‘_alert_hdl.._value’,’_alert_hdl.._text'» & _

         «FROM ‘Reservoir_*.value'»

  Call moComMan.dpQuery(sSQL, avValue)

  Set rg = ws.Range(«G1»)

  rg.Offset(0, 1).Value = «Beispiel dpQuery()»

  For n = 0 To UBound(avValue)

    For m = 0 To UBound(avValue(n))

      If n > 0 And m = 2 Then

        rg.Offset(n + 1, m + 1).Value = CDbl(avValue(n)(m))

      Else

        rg.Offset(n + 1, m + 1).Value = avValue(n)(m)

      End If

    Next m

  Next n

End Sub

‘Пример для dpTypes()

Private Sub dpTypes(ws As Worksheet)

Dim sPattern As String

Dim asDpType() As String

Dim rg As Range

Dim n As Long

  sPattern = «*»

  Call moComMan.dpTypes(sPattern, asDpType)

  Set rg = ws.Range(«A14»)

  rg.Value = «Beispiel dpTypes()»

  For n = 1 To UBound(asDpType)

    If Left(asDpType(n), 1) <> «_» Then

      Set rg = rg.Offset(1, 0)

      rg.Value = asDpType(n)

    End If

  Next n

End Sub

‘Пример для dpNames()

Private Sub dpNames(ws As Worksheet)

Dim sDpPattern As String

Dim sDpType As String

Dim asDpName() As String

Dim n As Long

Dim rg As Range

  sDpPattern = «*»

  sDpType = «ANALOG1»

  Call moComMan.dpNames(sDpPattern, sDpType, asDpName)

  Set rg = ws.Range(«B14»)

  rg.Value = «Beispiel dpNames()»

  For n = 1 To UBound(asDpName)

    Set rg = rg.Offset(1, 0)

    rg.Value = asDpName(n)

  Next n

End Sub

‘Пример для dpElementType()

Private Sub dpElementType(ws As Worksheet)

Dim sDpPattern As String

Dim sDpType As String

Dim asDpName() As String

Dim n As Long

Dim rg As Range

  sDpPattern = «Reservoir_1_level.**»

  sDpType = «ANALOG1»

  Call moComMan.dpNames(sDpPattern, sDpType, asDpName)

  Set rg = ws.Range(«C14»)

  rg.Value = «Beispiel dpElementType()»

  For n = 1 To UBound(asDpName)

    If moComMan.dpElementType(asDpName(n)) = DPE_FLOAT Then

      Set rg = rg.Offset(1, 0)

      rg.Value = asDpName(n)

    End If

  Next n

End Sub

Чтобы макрос, содержащий примеры для COM-менеджера, выполнялся после открытия документа, добавьте следующие строки в рабочую таблицу (объект программы Excel «ThisWorksheet»), которая находится в отдельной части рабочей таблицы.

Private Sub Workbook_Open()

  Call ComMan.test ‘ComMan is the name of the module; test the test function

End Sub

Сохраните и закройте отредактированную рабочую таблицу, а затем откройте ее снова. Выберите activate macros (активировать макрос) при открытии файла. Макрос выполняется и заполняет посредством COM-интерфейса рабочую таблицу значениями из проекта «КАСКАД Цифра».

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *