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

 
Анастасия Булавская
Сообщения: 42
Зарегистрирован: 24 окт 2016, 11:14
Компания: X-tensive

X-tensive API

19 апр 2017, 10:41

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

DPA предоставляет открытый API, позволяющий использовать данные, собираемые с ЧПУ, а так же сформированные Project109 состояния и элементы визуализации в стороннем программном обеспечении.
API состоит из двух библиотек: API Client и WPF Controls. API Client позволяет сторонним приложениям и библиотекам (в том числе WPF Controls) получать данные, собираемые DPA-Сервером и данные рассчитанные и сформированные с помощью конфигурируемой логики Project109. WPF Controls позволяет отображать все разнообразие виджетов Project109 в стороннем приложении.

1- DPA передает Project109 «сырые» данные, получаемые от ЧПУ
2- Project109 осуществляет обработку и журналирование данных и предоставляет их сторонним приложениям посредствам API Client
3- Project109 предоставляет сторонним приложениям инструменты визуализации обработанных и журналированных данных посредствам API Client и WPF Controls
 
API.png
API.png (55.12 КБ) 1237 просмотров


Использование API DPA позволит нарастить функциональные возможности существующих систем:
  • Без доработки!
  • Без обучения пользователей!
Библиотеки предъявляют минимальные требования к использованию – наличие Microsoft .NET Framework 4.
Подробно процесс настройки описан в теме «Открытый API для получения событий с DPA-сервера». 
 
Анастасия Булавская
Сообщения: 42
Зарегистрирован: 24 окт 2016, 11:14
Компания: X-tensive

Примеры использования

19 апр 2017, 10:44

Загрузка списка DPA серверов, подключенных к Proj109:
'''   using (DpaClient client = new DpaClient(new Uri("http://localhost:80"))) {
    client.Connect("login", "password");
    IDpaController controller = client.GetController<IDpaController>();
    IEnumerable<SimpleServerModel> servers = controller.GetServers();
   }''' 


Пример UI окна для WPF Controls
dpa:DpaConnection.Url="http://localhost:16736" - адрес Project109
dpa:DpaConnection.UserName="admin" - логин
dpa:DpaConnection.Password="admin" - пароль
 
'''<Window x:Class="Xtensive.DPA.WPF.Controls.Sample.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:dpa="http://schemas.x-tensive.com/dpa/wpf-controls"
        xmlns:apiClient="clr-namespace:Xtensive.DPA.ApiClient;assembly=Xtensive.DPA.ApiClient"
        mc:Ignorable="d"
        Title="MainWindow" Height="768" Width="1024"
    dpa:DpaConnection.Url="http://localhost:16736"
    dpa:DpaConnection.UserName="admin"
    dpa:DpaConnection.Password="admin">
 <TabControl>
  <TabItem Header="Equipment">
   <Grid Margin="10">
    <Grid.RowDefinitions>
     <RowDefinition Height="Auto" />
     <RowDefinition Height="Auto" />
     <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
 
    <WrapPanel>
     <dpa:EquipmentSelector x:Name="EquipmentSelector" HorizontalAlignment="Left" Margin="0 0 8 8" EquipmentSelectionMode="Single" />
     <dpa:EquipmentIndicatorsSelector x:Name="EquipmentIndicatorsSelector" EquipmentId="{Binding ElementName=EquipmentSelector, Path=SelectedEquipment.Id}" Margin="0 0 8 8" />
    </WrapPanel>
 
    <WrapPanel Grid.Row="1">
     <dpa:EquipmentStateTile Width="200" Height="200" Margin="0 0 8 8" EquipmentId="{Binding ElementName=EquipmentSelector, Path=SelectedEquipment.Id}" />
     <dpa:EquipmentModeTile Width="200" Height="200" Margin="0 0 8 8" EquipmentId="{Binding ElementName=EquipmentSelector, Path=SelectedEquipment.Id}" />
     <dpa:EquipmentControlProgramLogTile Width="408" Height="200" Margin="0 0 8 8" EquipmentId="{Binding ElementName=EquipmentSelector, Path=SelectedEquipment.Id}" />
     <dpa:EquipmentMessagesTile Width="408" Height="200" Margin="0 0 8 8" EquipmentId="{Binding ElementName=EquipmentSelector, Path=SelectedEquipment.Id}" />
    </WrapPanel>
   
    <ItemsControl Grid.Row="2" ItemsSource="{Binding ElementName=EquipmentIndicatorsSelector, Path=SelectedItems}">
     <ItemsControl.ItemsPanel>
      <ItemsPanelTemplate>
       <WrapPanel />
      </ItemsPanelTemplate>
     </ItemsControl.ItemsPanel>
     <ItemsControl.ItemTemplate>
      <DataTemplate DataType="{x:Type apiClient:DashboardIndicatorModel}">
       <dpa:EquipmentIndicatorTile Width="200" Height="200" Margin="0 0 8 8"
                     EquipmentId="{Binding ElementName=EquipmentSelector, Path=SelectedEquipment.Id}"
                     EquipmentIndicatorId="{Binding Id}"/>
      </DataTemplate>
     </ItemsControl.ItemTemplate>
    </ItemsControl>
   </Grid>
  </TabItem>
  <TabItem Header="Operator">
   <Grid Margin="10">
   
    <Grid.RowDefinitions>
     <RowDefinition Height="Auto" />
     <RowDefinition Height="*" />
    </Grid.RowDefinitions>
   
    <dpa:EquipmentSelector x:Name="EquipmentSelector2" HorizontalAlignment="Left" Margin="0 0 0 8" EquipmentSelectionMode="Multiple" />
   
    <ItemsControl Grid.Row="1" ItemsSource="{Binding ElementName=EquipmentSelector2, Path=SelectedEquipments}">
     <ItemsControl.ItemsPanel>
      <ItemsPanelTemplate>
       <WrapPanel Orientation="Horizontal" />
      </ItemsPanelTemplate>
     </ItemsControl.ItemsPanel>
     <ItemsControl.ItemTemplate>
      <DataTemplate DataType="{x:Type apiClient:EquipmentShortModel}">
       <dpa:EquipmentOperatorTile Width="300" Height="300" EquipmentId="{Binding Id}" Margin="0 0 8 8" />
      </DataTemplate>
     </ItemsControl.ItemTemplate>
    </ItemsControl>
   </Grid>
  </TabItem>
  <TabItem Header="Gantt">
   <dpa:EquipmentGantt Margin="10" />
  </TabItem>
  <TabItem Header="Timeline">
   <dpa:EquipmentTimeline Margin="10" />
  </TabItem>
 </TabControl>
</Window>'''