Энциклопедия АСУ ТП Спонсор проекта: Skip Navigation LinksЭнциклопедия АСУ ТП : 9 Программное обеспечение : 9.2 ОРС-сервер : 9.2.5 ОРС DA сервер в среде MS Excel Соспонсор:




Робот BotEyes




Промышленные контроллеры RealLab!

9.2.5. ОРС DA сервер в среде MS Excel

Microsoft Excel является хорошей средой для разработки несложных систем автоматизации благодаря тому, что он содержит удобный пользовательский интерфейс для обработки данных, для построения графиков, вставки рисунков, выполнения анимации и т. п. [Sanchez]. Он содержит также встроенные элементы управления (раскрывающиеся списки, "радиокнопки", "чек-боксы" и т. п. [Кузьменко]). Excel позволяет сделать специализированный пользовательский интерфейс, не уступающий по дизайну профессиональным SCADA-пакетам. Особенно удобным является простое сохранение выполненной работы в файл.

Недостатком MS Excel является низкое быстродействие при записи данных в ячейки таблицы и отсутствие в VBA возможности выполнения задач в нескольких параллельных потоках. VBA включает в себя Visual Basic и дополнительные функции, обеспечивающие работу с приложением, например, с ячейками MS Excel или с параграфами MS Word. Мы рекомендуем использовать MS Excel только для применений, использующих не более 10...30 тегов при периоде их опроса не менее 1 с. Однако это касается только операций в ячейках и динамического обновления графиков и не распространяется на обработку данных средствами языка VBA.

Возможность работы MS Excel (и других приложений Microsoft Office) с ОРС сервером обеспечивается благодаря тому, что Visual Basic, входящий в состав MS Excel, поддерживает технологию Automation (OLE Automation) фирмы Microsoft. Суть Automation состоит в том, что она позволяет одному приложению (клиенту) использовать объекты другого приложения (сервера). Применительно к задаче промышленной автоматизации это означает, что приложение-клиент может использовать объекты ОРС сервера, который, в свою очередь, может получать данные из физического устройства или записывать их в него.

Automation позволяет использовать в среде MS Excel также объекты других приложений, например, ActiveX объекты, объекты MS Word, Outlook Express и др. Интерфейс Automation позволяет использовать ОРС сервер с любыми другими приложениями, имеющими встроенный Visual Basic for Application.

Рис_9х_ОРС_иерархия_объектов.tif

Рис. 9.8. Иерархия объектов интерфейса Automation

Объекты, доступные в MS Excel через интерфейс Automation, видны в списке объектов "Object Browser" в меню "View" Microsoft Visual Basic, который открывается из пункта меню Сервис/Macros/Редактор Visual Basic в Excel 2003 и более старых версиях, или в меню "Разработчик/Visual Basic" в MS Excel 2007.

Для подключения ОРС сервера к MS Excel сначала необходимо инсталлировать на компьютере ОРС сервер. Стандартный ОРС сервер должен регистрироваться в реестре Windows автоматически. Затем нужно открыть пункт меню Tools/References в редакторе Visual Basic, найти в списке "Available References" и отметить галочкой ссылку на имя ОРС сервера. После этого в списке объектов "Object Browser" появляется список объектов ОРС сервера и их можно использовать по общим правилам программирования на Visual Basic. Более подробно о работе с объектами OLE Automation можно ознакомиться в руководствах по программированию, например, [Кузьменко].

На рис. 9.8 показана иерархия объектов, предоставляемых интерфейсом OPC Automation. Описание свойств и методов каждого объекта можно найти в документах [Data, OLE]. Значение данных, считанных из устройства ввода, параметр качества данных и временная метка хранятся в объекте OPCItem. Несколько OPCItem могут составлять коллекцию [Кузьменко]. Коллекция - это термин VBA, она представляет собой группу связанных объектов, каждый из которых называется элементом коллекции и может быть вызван по его индексу [Кузьменко]. Каждая коллекция имеет свойство Count, которое позволяет подсчитать количество элементов.

Объект OPСServer представляет собой экземпляр ОРС сервера. Этот объект должен быть создан до того, как будут установлены ссылки на другие объекты. Он содержит коллекцию OPCGroups и создает объект OPCBrowser, который используется в ОРС клиенте для построения навигатора тегов.

Рассмотрим пример чтения значения тега из ОРС сервера в ячейку листа MS Excel. Сначала необходимо создать модуль в Visual Basic, входящем в состав MS Excel. В заголовке модуля объявляются переменные Server и Group как имеющие тип OPCServer и OPCGroup соответственно, с областью видимости Public (строки 1 и 2 в листинге 1):

Листинг 1. Подсоединение к ОРС серверу

1

Public Server As OPCServer

2

Public Group As OPCGroup

3

Sub Connect()

4

    If Server Is Nothing Then

5

        Set Server = New OPCServer

6

    End If

7

    If Group Is Nothing Then GoTo noGroup

8

    Set Group = Nothing

9

noGroup:

10

    Server.Connect "NLopc.server"

11

    Set Group = Server.OPCGroups.Add("RLDA")

12

End Sub

Первым делом нужно создать связь MS Excel с ОРС сервером. Для этого используется процедура Connect() (строка 3). Для того, чтобы не создавать новые объекты, если они уже существуют, используется проверка существования объекта Server (строка 4) и если он не существует, то создается новый оператором
New (строка 5).

Аналогично поступают с объектом Group (строка 7). Если объект не существует, то переходят к метке noGroup:, за которой вызывается метод Connect объекта Server, который осуществляет соединение с сервером "NLopc.server" (в этом примере использован ОРС сервер Nopc, www.RealLab.ru). Далее создается новая объектная переменная Group и добавляется методом Add в коллекцию OPCGroups с любым именем, например, "RLDA". Если объект Group существует, то его сначала удаляют (строка 8), чтобы не проверять, откуда он появился, затем создают заново (строка 10, 11).

После выполнения процедуры листинга 1 можно прочитать данные из ОРС сервера. Пример чтения данных иллюстрирует листинг 2.

Предположим, что нужно считать данные тега, указанного на рис. 9.1. Его имя присваивают переменной tagname (строка 7). Далее имя тега нужно добавить к коллекции OPCItems с помощью метода AddItem (строка 8). Второй переменной после имени тега является номер тега в коллекции. После этого объектную переменную anItem ассоциируют с объектом Item, имеющим порядковый номер 1, под этим номером в коллекцию OPCItems был добавлен наш тег.

Объект anItem имеет метод Read, который позволяет прочесть параметры интересующего нас тега: значение Value, качество Quality и временную метку TimeStamp (строка 10).

После чтения этих переменных (строка 10) их значения записываются ячейки листа Excel с именем Лист1, находящиеся на пересечении 10-й, 11-й и 12-й строки с 5-м столбцом. Функция DoEvents необходима для того, чтобы Excel мог обрабатывать другие события, происходящие в системе, когда процедура Read() используется в цикле.

После получения данных от ОРС сервера тег нужно удалить из коллекции. Для этого находят его указатель с помощью метода ServerHandle (строка 15), затем удаляют из коллекции OPCItems методом Remove. Далее удаляют ассоциацию объектной переменной anItem с реальным объектом (строка 17).

Листинг 2. Чтение данных из ОРС сервера

1

Sub Read()

2

    If Server Is Nothing Then Exit Sub

3

    If Group Is Nothing Then Exit Sub

4

    Dim serverHandles(1) As Long, Errors() As Long

5

    Dim tagname As String, anItem As OPCItem

6

    Dim Value, Quality, TimeStamp As Variant

7

    tagname = "NL8TI.Laboratory32.Top.Vin4"

8

    Group.OPCItems.AddItem tagname, 1

9

    Set anItem = Group.OPCItems.Item(1)

10

    anItem.Read OPCCache, Value, Quality, TimeStamp

11

    Лист1.Cells(10, 5).Value = Value

12

    Лист1.Cells(11, 5).Value = Quality

13

    Лист1.Cells(12, 5).Value = TimeStamp

14

    DoEvents

15

    serverHandles(1) = anItem.ServerHandle

16

    Group.OPCItems.Remove 1, serverHandles, Errors

17

    Set anItem = Nothing

18

End Sub

 

Упрощенный интерфейс EasyAccess

Описанная процедура работы с ОРС сервером хороша, когда на основе Visual Basic делается удобная заказная программа и нужно использовать все богатство возможностей ОРС сервера. Однако для быстрого получения данных при проведении несложного эксперимента применение ОРС сервера неоправданно сложно. В этих случаях можно использовать упрощенный СОМ объект EasyAccess [Денисенко], подробно описанный на вебсайте RealLab!. Для того, чтобы считать из ОРС сервера значение тега, например, "NL8TI.Laboratory32.Top.Vin4" (см. листинг 3), достаточно после объявления переменных создать объект функцией "CreateObject" (строка 5) и сразу после этого получить значение тега (строка 7). Строка 8 записывает это значение на лист Excel в ячейку (7, 6).

Листинг 3. Применение упрощенного интерфейса EasyAccess

1

Sub OnReadTag()

2

    Dim obj As Object

3

    Dim val As Variant

4

    Dim tag As String

5

    Set obj = CreateObject("NLopc.console")

6

    tag = "NL8TI.Laboratory32.Top.Vin4"

7

    obj.GetTagValue tag, val

8

    Лист1.Cells(7, 6).Value = val

9

End Sub

Для записи данных в физическое устройство вместо функции obj.GetTagValue используют obj.SetTagValue.

Построение графиков, обработка полученных данных выполняются обычными средствами Visual Basic [Кузьменко].

9.2.6. Применение ОРС сервера с Matlab и LabVIEW

В MatLab, начиная с версии 7, входит пакет OPC Toolbox, поддерживающий ОРС серверы версии v2.05a. Он содержит также блоки Simulink для обмена данными с ОРС серверами. Аналогично, LabVIEW, начиная с версии 7, также имеет встроенную поддержку стандарта ОРС.

Более ранние версии MatLab и LabVIEW не поддерживают ОРС, однако поддерживают OLE Automation. Для работы с такими программами можно использовать объект OPCWrapper.Service, разработанный RealLab! (www.RealLab. ru) и представляющий собой буфер, преобразующий стандартные вызовы OPC в стандартные вызовы OLE Automation. Для использования объекта OPCWrapper.Service сначала создают соединение с ним с помощью строки (в среде MatLab)

wrapper = actxserver(' OPCWrapper.Service'),

затем подключают объект к серверу:

invoke(wrapper,'OpcOpenServer','NLopc.Server',''),

где вместо "NLopc. Server" можно использовать имя любого ОРС сервера.

Значение тега, например, "NL8TI.Vin1" читают с помощью функции invoke из пакета MatLab:

value = invoke(wrapper,'OpcReadItem','NL8TI.Vin1').

Запись в физическое устройство дискретного значения "1" тега "NL8TI.Bit.Dout0" выполняется аналогично:

invoke(wrapper,'OpcWriteItem','NL8TI.Bit.Dout0',1).

Отсоединить объект от сервера можно следующим образом:

invoke(wrapper, 'OpcCloseServer').

После этого соединение с объектом OPCWrapper.Service необходимо закрыть:

release(wrapper).

Примеры работы пакета MatLab с физическими устройствами можно найти на сайте www.RealLab.ru, а также в работе [Grega].


© RLDA Ltd. info@rlda.ru  Рейтинг@Mail.ru Спонсоры проекта: , а также