В данном разделе приведены некоторые примеры для 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-интерфейса рабочую таблицу значениями из проекта «КАСКАД Цифра».