Управление производством. MEScontrol, DPA

 
Алёна Микшина
Сообщения: 2
Зарегистрирован: 24 окт 2016, 11:17
Компания: X-tensive

Открытый API для получения событий с DPA-сервера

11 фев 2017, 23:35

DPA предоставляет открытый API для сторонних разработчиков. С помощью этого API можно интегрировать DPA с другой системой. А так же если Вы занимаетесь разработкой собственной системы мониторинга :), то можно использовать все функции драйверов DPA для чтения данных со станков.

API очень прост в использовании.

Чтобы настроить получение событий с DPA-сервера, нужно выполнить несколько несложных шагов.

Прежде всего, добавьте сборки в ваш проект:
1.     Xtensive.DPA.Common;
2.     Xtensive.DPA.Contracts;
3.     Xtensive.DPA.EventManager;
4.     Xtensive.Project109.Host.Data;
5.     Xtensive.Orm; 
6.     log4net.
Первые 4 библиотеки можно взять из архива пакета DPA_X.X.X.XXX.proj109pack. Остальные можно загрузить с помощью Nuget.

Затем выполните инициализацию сервисов:
1.     EventService.StartServices(ipAdress, port)
IP-адрес и порт должны соответствовать настройкам WCF-транспорта сервера DPA.

2.     OneWayEventService.StartServices(queueName)
где queueName – имя очереди, указанное в MSMQ транспорте.

3.     CacheEventService.Initialize(new EventInfo[] { })
Инициализация кеширования. Вызвать с пустым массивом 
EventInfo, или можно заполнить исходными состояниями.
Не обязательно запускать оба транспорта. Достаточно использовать либо wcf, либо msmq.

Затем необходимо подписаться на получение изменений. Это можно сделать несколькими способами.
1) Чтобы получать все изменения какого-либо типа событий со всех драйверов, к примеру событие программы обработки:

CacheEventService.Subscribe(new CheckingEventInfo(EventInfoType.ProcessingProgram), OnChanged);
2) Чтобы получать все изменения какого-либо типа событий с конкретного драйвера, к примеру событие программы обработки:
CacheEventService.Subscribe(new CheckingEventInfoByDriverIdentifier(driverId, EventInfoType.ProcessingProgram), OnChanged);
3) Чтобы получать изменения конкретного события драйвера:
CacheEventService.Subscribe(new CheckingEventInfoByEventIdentifier(eventId, EventInfoType.ProcessingProgram, new []"MainProgram" }), OnChanged);
В данном методе, как видно из синтаксиса кода, можно подписаться на изменения конкретных свойств события.

 
Пример метода OnChanged:

private void OnChanged(Guid subscriptionIdentifier, EventInfo eventInfo)
{
  var processingProgramEventInfo = eventInfo as ProcessingProgramEventInfo;
  if (processingProgramEventInfo == null)
    throw new ArgumentOutOfRangeException("eventInfo");
  Console.WriteLine("Came an event: {0}"EventInfoType.ProcessingProgram);
  Console.WriteLine("  DriverIdentifier: {0}", processingProgramEventInfo.DriverIdentifier);
  Console.WriteLine("   EventIdentifier: {0}", processingProgramEventInfo.EventIdentifier);
  Console.WriteLine("       MainProgram: {0}", processingProgramEventInfo.MainProgram);
  Console.WriteLine("            Status: {0}", processingProgramEventInfo.Status);
  Console.WriteLine("      StartCounter: {0}", processingProgramEventInfo.StartCounter);
  Console.WriteLine("   CompleteCounter: {0}", processingProgramEventInfo.CompleteCounter);
  Console.WriteLine("       MainProgram: {0}", processingProgramEventInfo.CompleteCounter);
}

Архив с примером:
Program.zip
(756 байт) 236 скачиваний


Приятного программирования!