FoxPro Club Главная

Конференция Решения Фотоальбом Сайт М.Дроздова Статьи Файловый архив Книга Visual FoxPro 9.0 Русский Help для Visual FoxPro
Пользователей: 9176
Вход

Применение Visual FoxPro 9 в задачах АСУ ТП с использованием технологии OPC

Цель статьи – познакомить программистов и инженеров АСУ ТП с возможностью создания на VFP приложений решающих типовые задачи автоматизации с использованием OPC интерфейсов различного типа промышленных контроллеров, регистраторов, счётчиков и проч. оборудования автоматизации.

 

Введение
Создаём лабораторную среду OPC-сервера
Приступаем к программированию на Visual FoxPro

 

Введение

В настоящее время сложно приобрести высокотехнологичное промышленное оборудование без системы автоматизированного управления. Так, например, если завод железобетонных изделий приобретает новую линию подготовки цементной смеси или пивзавод – новый конвейер бутилированного розлива, не сомневайтесь, в спецификации оборудования будет раздел «Оборудование АСУ» и в него будут входить датчики, промышленные контроллеры, регистраторы параметров. Даже, типовой для данного процесса человеко-машинный интерфейс АСУ (SCADA) будет входить в спецификацию. Т.е. чтобы выполнять автоматизацию на таком уровне, не нужно быть инженером – нужно быть покупателем!
Но что делать, когда вы эксплуатируете несколько (возможно десятков) АСУ, от разных поставщиков и производителей, на разные технологические процессы. Значит – вам нужна ещё одна АСУ: диспетчерского управления локальными АСУ (СОДУ). В этой системе не требуется полной детализации всех параметров локальных АСУ, как правило, достаточно только данных для оперативного расчёта себестоимости в рамках управленческого учёта (расход ресурсов, выход продукции) и данных о безопасности производственного процесса (аварийные режимы). Даже если вы примите решение заказывать разработку СОДУ у сторонних подрядчиков, на этот раз вам придётся глубоко погрузиться в обсуждение применяемых технических решений и границ автоматизации. А раз так, может быть эффективнее выполнить разработку самостоятельно. Конечно, речь идёт об ответственном решении, но если вы располагаете опытом программирования на VFP – это возможно.

Несколько определений

OPC (OLE for Process Control) – набор повсеместно принятых спецификаций предоставляющих универсальный механизм обмена данными в системах контроля и управления. OPC технология обеспечивает независимость потребителей от наличия или отсутствия драйверов или протоколов, что позволяет выбирать оборудование и программное обеспечение, наиболее полно отвечающее реальным потребностям бизнеса. В спецификации OPC для обмена данными определены два компонента: OPC-клиент и OPC-сервер.
OPC-сервер - программа, получающая данные во внутреннем формате устройства или системы и преобразующая эти данные в формат OPC. OPC-сервер является источником данных для OPC-клиентов.
OPC-клиент - программа, принимающая от OPC-серверов данные в формате OPC и преобразующая их во внутренний формат устройства или системы.
OPC Data Access (OPC DA) – самая распространенная спецификация OPC, обеспечивающая обмен текущими данными.

Необходимые условия для начала разработки:

  • Вы должны знать типы контроллеров и других приборов, регистрирующих параметры локальных АСУ для выбора OPC-сервера.
    Исключительно редки случаи, когда производители оборудования промышленной автоматизации не сопровождают свои изделия OPC-серверами. Если вы всё же столкнулись с отсутствием OPC-сервера – вероятнее всего, вам его недопоставил подрядчик, обратитесь напрямую к производителю. Если производитель всемирно известная компания, такая, например, как Siemens, Allen Bradley или Mitsubishi – можно воспользоваться бесплатным OPC-сервером независимого американского разработчика Matrikon Inc (http://www.matrikonopc.com/opc-drivers/index.aspx).
  • Вы должны располагать таблицами сигналов всех контроллеров во всех проектах локальной автоматизации.
    Как правило, таблица сигналов является ключевым пунктом проектной документации автоматизированной системы ТП.

Создаём лабораторную среду OPC-сервера

Для создания приложения, демонстрирующего получение данных и отправку управляющих воздействий на промышленный контроллер, посредством OPC-сервера, нам потребуется эмулятор [MatrikonOPC Server for Simulation], от упомянутой ранее Matrikon Inc. Данный эмулятор доступен для бесплатного скачивания по адресу: http://www.matrikonopc.com/downloads/178/index.aspx, после необременительной процедуры регистрации.
Пусть мы имеем контроллер [Siemens S7-300] и таблица сигналов имеет вид:

 

  Переменная Группа/ контроллер тег
1

Уставка частоты вращения эл. двигателя
(2 очередь, север)

S7-300_002N S7-300_002N_Hz2N
2 Ток медной обмотки эл. двигателя
(2 очередь, север)
S7-300_002N S7-300_002N_ICu2N
3 Температура железной обмотки эл. двигателя
(2 очередь, север)
S7-300_002N S7-300_002N_TFe2N
  1. Запускаем [MatrikonOPC Server for Simulation];
  2. Создаём группу переменных [S7-300_002N];
  3. В группе [S7-300_002N] создаём переменные/теги, см. рис.

Конфигурация группы тегов [s7-300_002N] представленная на рисунке, доступна в приложении, файл [002N.xml].

Обратите внимание:

  • переменная […Hz2N] – помимо чтения, доступна для записи значений;
  • переменная […ICu2N] – имеет статус только чтение и получает значения из генератора случайных чисел 1000 раз в секунду;
  • переменная […TFe2N] – имеет статус только чтение и получает значения из генератора случайных чисел 1 раз в минуту.

В нашем случае это означает что, ток и температуру обмоток эл. двигателя мы считываем с заданной периодичностью. Уставкой частоты вращения, вносим управляющее воздействие на эл. двигатель и дополнительно можем контролировать значение уставки 1 раз в секунду, на случай если значение уставки изменили с местного щита управления.

Приступаем к программированию на Visual FoxPro

После настройки эмулятора OPC-сервера, можно приступать к программированию OPC-клиента:

Public poOPC As Object
 * создаём экземпляр OPC-клиента  
  m.poOPC=Createobject([Matrikon.OPC.Automation.1])
 * подключаемся к OPC-серверу  
  m.poOPC.Connect([Matrikon.OPC.Simulation.1])


  Public poOPCGroup As Object
 * создаём группу переменных   
  m.poOPCGroup=m.poOPC.OPCGroups.Add([s7-300_002N])
 * создаём в группе [s7-300_002N] переменную [S7-300_002N_Hz2N]  
  m.poOPCGroup.OPCItems.AddItem([s7-300_002N.S7-300_002N_Hz2N],1)


 * определяем значение переменной [S7-300_002N_Hz2N] в 11.12345  
  m.poOPCGroup.OPCItems.Item(1).Write(11.12345)
 * получаем значение переменной [S7-300_002N_Hz2N]  
  Local ln_Hz2N As Number
  m.ln_Hz2N=m.poOPCGroup.OPCItems.Item(1).Value
Данный пример, демонстрирует запись тега (передачу управляющего воздействия – уставку частоты вращения эл. двигателя) и синхронное чтение значения этой же переменной.
Синхронное чтение значений переменных контроллера не единственный способ взаимодействия с OPC-сервером, стандарт OPC DA также предусматривает асинхронное взаимодействие и чтение по уведомлению. Ниже приведён пример получения значений переменных по уведомлению об изменениях.

* создаём в группе [s7-300_002N] переменные
  m.poOPCGroup.OPCItems.AddItem([s7-300_002N.S7-300_002N_ICu2N],2)
  m.poOPCGroup.OPCItems.AddItem([s7-300_002N.S7-300_002N_TFe2N],3)

  Public poOPCGroupEvents As Object
 * перегружаем событие [DataChange] группы тегов [s7-300_002N]  
 * кодом события [DIOPCGroupEvent_DataChange] класса [myOPCGroupClass]  
  m.poOPCGroupEvents=Newobject([myOPCGroupClass])
  m.poOPCGroupEvents.AddProperty([OPCGroup],m.poOPCGroup)
  EventHandler(m.poOPCGroup,m.poOPCGroupEvents)

 * подписать группу на получение уведомлений  
  m.poOPCGroup.IsSubscribed=.T.

  Define Class myOPCGroupClass As Session OlePublic
        Implements DIOPCGroupEvent ;
        In [c:\program files\common files\matrikonopc\common\opcdaauto.dll]

        Procedure Init
        Set Date German
        Set Hours To 24

        Procedure DIOPCGroupEvent_DataChange(;
              TransactionID As Number,;
              NumItems As Number,;
              ClientHandles As VARIANT,;
              ItemValues As VARIANT,;
              Qualities As VARIANT,;
              TimeStamps As VARIANT) ;
              As VOID


              Local loItem2 As Object, loItem3 As Object
              m.loItem2=This.OPCGroup.OPCItems.Item(2)
             m.loItem3=This.OPCGroup.OPCItems.Item(3)


              Wait Window ;
                    Transform(m.loItem2.Value)+Chr(13)+;
                    Transform(m.loItem2.Quality)+Chr(13)+;
                    Transform(m.loItem2.Timestamp)+Chr(13)+Chr(13)+;
                   Transform(m.loItem3.Value)+Chr(13)+;
                    Transform(m.loItem3.Quality)+Chr(13)+;
                    Transform(m.loItem3.Timestamp)+Chr(13)+Chr(13)+;
                    Transform(Datetime()) ;
              Nowait Timeout 3


              Release loItem2,loItem3

        Endproc



        Procedure DIOPCGroupEvent_AsyncReadComplete(;
              TransactionID As Number,;
              NumItems As Number,;
              ClientHandles As VARIANT,;
              ItemValues As VARIANT,;
              Qualities As VARIANT,;
              TimeStamps As VARIANT,;
              Errors As VARIANT) ;
              As VOID
        Endproc


        Procedure DIOPCGroupEvent_AsyncWriteComplete(;
              TransactionID As Number,;
              NumItems As Number,;
              ClientHandles As VARIANT,;
              Errors As VARIANT) ;
              As VOID

        Endproc



        Procedure DIOPCGroupEvent_AsyncCancelComplete(CancelID As Number) ;
              As VOID
        Endproc

  Enddefine

В приведённом фрагменте, код класса [myOPCGroupClass] почти полностью сгенерирован автоматически утилитой входящей в поставку Visual FoxPrp 9 – [Object Browser], перетаскиванием интерфейса [DIOPCGroupEvent] библиотеки OPC-клиента [opcdaauto.dll] в процедурное окно.

В заключении осталось сказать что, по завершении работы с OPC-сервером следует не забывать выполнить отключение:


m.poOPC.Disconnect()

Спасибо за внимание. Замечания принимаются!

Маставичус Владас
alpha2omega@mail.ru



Вернуться к списку статей






© 2000-2017 Fox Club 
При размещении любых материалов с сайта на других ресурсах- прямая ссылка на www.foxclub.ru обязательна
Яндекс.Метрика