增加相机界面

This commit is contained in:
SIC1016\caipeilun 2026-08-13 22:07:07 +08:00
parent 326d2feaa8
commit 4f3e308d3d
7 changed files with 1365 additions and 0 deletions

View File

@ -11,6 +11,7 @@
<!--<menuItem id="EFEM" resKey="EFEM" viewmodel="SicUI.Client.Models.Platform.TM.EFEMViewModel,SicUI" />--> <!--<menuItem id="EFEM" resKey="EFEM" viewmodel="SicUI.Client.Models.Platform.TM.EFEMViewModel,SicUI" />-->
<!--<menuItem id="EFEM" resKey="EFEM" viewmodel="SicUI.Models.Maintenances.TM.EFEM2ViewModel,SicUI" />--> <!--<menuItem id="EFEM" resKey="EFEM" viewmodel="SicUI.Models.Maintenances.TM.EFEM2ViewModel,SicUI" />-->
<menuItem id="Device" resKey="Device" viewmodel="SicUI.Client.Models.Platform.TM.DeviceViewModel,SicUI" /> <menuItem id="Device" resKey="Device" viewmodel="SicUI.Client.Models.Platform.TM.DeviceViewModel,SicUI" />
<menuItem id="Vision" resKey="Vision" viewmodel="SicUI.Client.Models.Platform.TM.Device2ViewModel,SicUI" />
<menuItem id="ioPlatform" resKey="Platform IO" System="TM.io" viewmodel="MECF.Framework.UI.Client.CenterViews.Maitenances.IO3.IO3ViewModel,MECF.Framework.UI.Client" /> <menuItem id="ioPlatform" resKey="Platform IO" System="TM.io" viewmodel="MECF.Framework.UI.Client.CenterViews.Maitenances.IO3.IO3ViewModel,MECF.Framework.UI.Client" />
<menuItem id="LeakCheck" resKey="LeakCheck" viewmodel="SicUI.Client.Models.Platform.LeakCheck.TMLeakCheckViewModel,SicUI" /> <menuItem id="LeakCheck" resKey="LeakCheck" viewmodel="SicUI.Client.Models.Platform.LeakCheck.TMLeakCheckViewModel,SicUI" />
</menuItem> </menuItem>

View File

@ -0,0 +1,31 @@
<UserControl x:Class="SicUI.Controls.CameraControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:SicUI.Controls"
xmlns:deviceControl="clr-namespace:Aitex.Core.UI.DeviceControl;assembly=MECF.Framework.UI.Core"
mc:Ignorable="d"
d:DesignHeight="480" d:DesignWidth="520" Unloaded="CameraControl_Unloaded" Loaded="CameraControl_loaded">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="35"/>
<RowDefinition Height="*"/>
<RowDefinition Height="35"/>
</Grid.RowDefinitions>
<Label HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Content="CCD采集" Style="{DynamicResource Table_TitleStyle}" />
<Border Grid.Row="1" Background="{DynamicResource Table_BG_Title}" BorderBrush="{DynamicResource Table_BD}" BorderThickness="1,0,1,1">
<Image x:Name="imageControl" Width="480" Height="360"/>
</Border>
<Border Grid.Row="2" Background="{DynamicResource Table_BG_Content}" BorderBrush="{DynamicResource Table_BD}" BorderThickness="1,0,1,1">
<StackPanel Orientation="Horizontal">
<TextBlock Text="Connection:" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="12 3"/>
<deviceControl:AITSensor Margin="12 3" HorizontalAlignment="Center" VerticalAlignment="Center" CustomColorOff="Gray" CustomColorOn="Lime" LightOnValue="{Binding CamConnection}" IsCustomRender="True" />
<Button Content="采集" Width="80" Margin="12 3" Click="ButtonGrab_Click"/>
<Button Content="连续采集" Width="80" Click="ButtonGrabbing_Click" Margin="12 3"/>
<Button Content="停止" Width="80" Click="ButtonStop_Click" Margin="12 3"/>
<TextBlock Text="{Binding CamMessage}" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="12 3"/>
</StackPanel>
</Border>
</Grid>
</UserControl>

View File

@ -0,0 +1,160 @@
using Aitex.Core.RT.Log;
using CommandLine;
using MECF.Framework.Common.DataCenter;
using SicUI.Controls.M2C4Parts;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Security.Cryptography;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Threading;
using VM.PlatformSDKCS;
namespace SicUI.Controls
{
/// <summary>
/// CameraControl.xaml 的交互逻辑
/// </summary>
public partial class CameraControl : UserControl
{
private WriteableBitmap _bitmap;
private Int32Rect _rect;
private CancellationTokenSource _cts;
public CameraControl()
{
InitializeComponent();
// 获取摄像头分辨率
var width = (int)QueryDataClient.Instance.Service.GetConfig("HikGigeCamera.Width");
var height = (int)QueryDataClient.Instance.Service.GetConfig("HikGigeCamera.Height");
// 创建 WriteableBitmap注意像素格式需要与摄像头输出匹配例如 Bgr24
_bitmap = new WriteableBitmap(width, height, 96, 96, System.Windows.Media.PixelFormats.Bgr24, null);
_rect = new Int32Rect(0, 0, _bitmap.PixelWidth, _bitmap.PixelHeight);
// 只需设置一次 Source不必每帧重新赋值
imageControl.Source = _bitmap;
}
private async Task CaptureLoop(CancellationToken token)
{
while (!token.IsCancellationRequested)
{
try
{
var obj = QueryDataClient.Instance.Service.GetData($"LoadLock.HikGigeCamera.CamBitmap");
if (obj != null)
{
Bitmap b = BytesToBitmap((byte[])obj);
// 在 UI 线程更新图像数据
#pragma warning disable CS4014
Application.Current.Dispatcher.BeginInvoke(
DispatcherPriority.Background,
new Action(() => UpdateBitmap(b)));
#pragma warning restore CS4014
}
}
catch (Exception ex)
{
LOG.Warning($"Camera Capture failed{ex}");
}
// 根据需要调整延时,防止 CPU 占用过高
// 异步延时,释放后台线程资源,并响应取消请求
try
{
await Task.Delay(20, token);
}
catch (OperationCanceledException)
{
break;
}
}
}
public Bitmap BytesToBitmap(byte[] bytes)
{
using (MemoryStream ms = new MemoryStream(bytes))
{
return new Bitmap(ms); // 或使用Image.FromStream:ml-citation{ref="1,18" data="citationList"}
}
}
/// <summary>
/// 更新预先创建的 WriteableBitmap 的像素数据
/// </summary>
private void UpdateBitmap(Bitmap frame)
{
if (frame == null || _bitmap == null) return;
_bitmap.Lock();
try
{
// 3. 移除类级别的 _bitmapData改为局部变量
var rect = new System.Drawing.Rectangle(0, 0, frame.Width, frame.Height);
var bitmapData = frame.LockBits(rect, ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
try
{
int size = bitmapData.Height * bitmapData.Stride;
_bitmap.WritePixels(_rect, bitmapData.Scan0, size, bitmapData.Stride, 0, 0);
}
finally
{
// 4. 无论如何必须解锁 GDI 数据
frame.UnlockBits(bitmapData);
}
}
finally
{
// 5. 无论如何必须释放 Bitmap 和解锁 WriteableBitmap
frame.Dispose();
_bitmap.Unlock();
}
}
private void ButtonGrab_Click(object sender, RoutedEventArgs e)
{
InvokeClient.Instance.Service.DoOperation($"LoadLock.HikGigeCamera.Grab","UIGrab");
}
private void ButtonGrabbing_Click(object sender, RoutedEventArgs e)
{
InvokeClient.Instance.Service.DoOperation($"LoadLock.HikGigeCamera.Grabbing");
}
private void CameraControl_Unloaded(object sender, RoutedEventArgs e)
{
_cts?.Cancel();
InvokeClient.Instance.Service.DoOperation($"LoadLock.HikGigeCamera.Stop");
}
private void CameraControl_loaded(object sender, RoutedEventArgs e)
{
_cts = new CancellationTokenSource();
_ = CaptureLoop(_cts.Token);
}
private void ButtonStop_Click(object sender, RoutedEventArgs e)
{
InvokeClient.Instance.Service.DoOperation($"LoadLock.HikGigeCamera.Stop");
}
}
}

View File

@ -0,0 +1,841 @@
<UserControl
x:Class="SicUI.Client.Models.Platform.TM.Device2View"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:cal="http://www.caliburn.org"
xmlns:controls="clr-namespace:SicUI.Controls"
xmlns:ctrl="http://OpenSEMI.Ctrlib.com/presentation"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:deviceControl="clr-namespace:Aitex.Core.UI.DeviceControl;assembly=MECF.Framework.UI.Core"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:lex="http://wpflocalizeextension.codeplex.com"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:unitControls="clr-namespace:MECF.Framework.UI.Client.Ctrlib.UnitControls;assembly=MECF.Framework.UI.Client"
xmlns:Release="clr-namespace:VMControls.WPF.Release;assembly=VMControls.WPF.Release"
d:DesignHeight="800"
d:DesignWidth="1980"
lex:LocalizeDictionary.DesignCulture="en"
lex:ResxLocalizationProvider.DefaultAssembly="Sicentury.Localization"
lex:ResxLocalizationProvider.DefaultDictionary="lang_common"
mc:Ignorable="d">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="500" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid Grid.Column="0" Margin="0 0 5 0">
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid Grid.Row="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="80" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="80" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="24" />
<RowDefinition Height="32" />
<RowDefinition Height="32" />
<RowDefinition Height="40" />
<RowDefinition Height="40" />
<RowDefinition Height="40" />
<RowDefinition Height="40" />
<RowDefinition Height="40" />
<RowDefinition Height="40" />
<RowDefinition Height="40" />
<RowDefinition Height="40" />
<RowDefinition/>
</Grid.RowDefinitions>
<Label
Grid.ColumnSpan="6"
HorizontalContentAlignment="Center"
VerticalContentAlignment="Center"
Content="Load Rotation"
Style="{DynamicResource Table_TitleStyle}" />
<Border
Grid.Row="1"
Padding="5,1,0,1"
Background="{DynamicResource Table_BG_Title}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="1,0,1,1">
<TextBlock
VerticalAlignment="Center"
FontFamily="Arial"
FontSize="12"
Foreground="{DynamicResource FG_Black}"
Text="{lex:Loc ID_TXT_Busy}"
TextWrapping="Wrap" />
</Border>
<Border
Grid.Row="1"
Grid.Column="1"
Padding="5,1,0,1"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="0,0,0,1">
<deviceControl:AITSensor
HorizontalAlignment="Center"
GreenColor="True"
LightOnValue="{Binding LdRotationIsBusy}" />
</Border>
<Border
Grid.Row="1"
Grid.Column="2"
Padding="5,1,0,1"
Background="{DynamicResource Table_BG_Title}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="1,0,1,1">
<TextBlock
VerticalAlignment="Center"
FontFamily="Arial"
FontSize="12"
Foreground="{DynamicResource FG_Black}"
Text="{lex:Loc ID_TXT_Servo_On}"
TextWrapping="Wrap" />
</Border>
<Border
Grid.Row="1"
Grid.Column="3"
Padding="5,1,0,1"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="0,0,0,1">
<deviceControl:AITSensor
HorizontalAlignment="Center"
GreenColor="True"
LightOnValue="{Binding LdRotationIsServoOn}" />
</Border>
<Border
Grid.Row="1"
Grid.Column="4"
Padding="5,1,0,1"
Background="{DynamicResource Table_BG_Title}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="1,0,1,1">
<TextBlock
VerticalAlignment="Center"
FontFamily="Arial"
FontSize="12"
Foreground="{DynamicResource FG_Black}"
Text="{lex:Loc ID_TXT_Done}"
TextWrapping="Wrap" />
</Border>
<Border
Grid.Row="1"
Grid.Column="5"
Padding="5,1,0,1"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="0,0,0,1">
<deviceControl:AITSensor
HorizontalAlignment="Center"
GreenColor="True"
LightOnValue="{Binding LdRotationIsServoDone}" />
</Border>
<Border
Grid.Row="2"
Grid.Column="0"
Padding="5,1,0,1"
Background="{DynamicResource Table_BG_Title}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="1,0,1,1">
<TextBlock
VerticalAlignment="Center"
lex:ResxLocalizationProvider.DefaultDictionary="lang_deviceview"
FontFamily="Arial"
FontSize="12"
Foreground="{DynamicResource FG_Black}"
Text="{lex:Loc ID_TXT_WaferPlaced}"
TextWrapping="Wrap" />
</Border>
<Border
Grid.Row="2"
Grid.Column="1"
Padding="5,1,0,1"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="0,0,0,1">
<deviceControl:AITSensor
HorizontalAlignment="Center"
VerticalAlignment="Center"
CustomColorOff="Gray"
CustomColorOn="Lime"
DeviceData="{Binding LoadWaferPlaced}"
IsCustomRender="True" />
</Border>
<Border
Grid.Row="2"
Grid.Column="2"
Padding="5,1,0,1"
Background="{DynamicResource Table_BG_Title}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="1,0,1,1">
<TextBlock
VerticalAlignment="Center"
lex:ResxLocalizationProvider.DefaultDictionary="lang_deviceview"
FontFamily="Arial"
FontSize="12"
Foreground="{DynamicResource FG_Black}"
Text="{lex:Loc ID_TXT_TrayHomeSensor}"
TextWrapping="Wrap" />
</Border>
<Border
Grid.Row="2"
Grid.Column="3"
Padding="5,1,0,1"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="0,0,0,1">
<deviceControl:AITSensor
HorizontalAlignment="Center"
VerticalAlignment="Center"
CustomColorOff="Gray"
CustomColorOn="Lime"
DeviceData="{Binding LoadTraySensor}"
IsCustomRender="True" />
</Border>
<Border
Grid.Row="2"
Grid.Column="4"
Padding="5,1,0,1"
Background="{DynamicResource Table_BG_Title}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="1,0,1,1">
<TextBlock
VerticalAlignment="Center"
FontFamily="Arial"
FontSize="12"
Foreground="{DynamicResource FG_Black}"
Text="{lex:Loc ID_TXT_Error}"
TextWrapping="Wrap" />
</Border>
<Border
Grid.Row="2"
Grid.Column="5"
Padding="5,1,0,1"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="0,0,0,1">
<deviceControl:AITSensor
HorizontalAlignment="Center"
GreenColor="True"
LightOnValue="{Binding LdRotationIsServoError}" />
</Border>
<Border
Grid.Row="5"
Grid.Column="0"
Grid.ColumnSpan="2"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="1,0,1,1">
<Button
Width="130"
Height="30"
HorizontalAlignment="Center"
lex:ResxLocalizationProvider.DefaultDictionary="lang_deviceview"
Content="{lex:Loc ID_BTN_RelativeHome_Content}"
IsEnabled="{Binding LdRotationBtnEnable}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="LdRotationRelativeHome" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</Border>
<Border
Grid.Row="5"
Grid.Column="2"
Grid.ColumnSpan="2"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="1,0,1,1">
<Button
Width="130"
Height="30"
HorizontalAlignment="Center"
Content="Offset"
IsEnabled="{Binding LdRotationBtnEnable}"
Visibility="Hidden">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="LdRotationRelativeHomeOffset" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</Border>
<Border
Grid.Row="5"
Grid.Column="4"
Grid.ColumnSpan="2"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="1,0,1,1">
<Button
Width="80"
Height="30"
HorizontalAlignment="Center"
Content="{lex:Loc ID_BTN_Stop_Content}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="LdRotationStop" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</Border>
<Border
Grid.Row="6"
Grid.Column="0"
Grid.ColumnSpan="2"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="1,0,1,1">
<Button
Width="130"
Height="30"
HorizontalAlignment="Center"
lex:ResxLocalizationProvider.DefaultDictionary="lang_deviceview"
Content="{lex:Loc ID_BTN_JogCW_Content}"
IsEnabled="{Binding LdRotationBtnEnable}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="LdRotationJogCW">
<cal:Parameter Value="{Binding Path=Text, ElementName=LdStationJogDegree}" />
</cal:ActionMessage>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</Border>
<Border
Grid.Row="6"
Grid.Column="2"
Grid.ColumnSpan="2"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="1,0,1,1">
<StackPanel Orientation="Horizontal">
<TextBox
x:Name="LdStationJogDegree"
MinWidth="90"
Margin="10,10,10,9.6"
HorizontalAlignment="Stretch"
VerticalAlignment="Center"
FontFamily="Arial"
FontSize="12"
Text="0.00" />
<TextBlock
HorizontalAlignment="Center"
VerticalAlignment="Center"
Text="°" />
</StackPanel>
</Border>
<Border
Grid.Row="6"
Grid.Column="4"
Grid.ColumnSpan="2"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="1,0,1,1">
<Button
Width="80"
Height="30"
HorizontalAlignment="Center"
Content="{lex:Loc ID_BTN_ServoOn_Content}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="LdRotationServoOn" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</Border>
<Border
Grid.Row="7"
Grid.Column="0"
Grid.ColumnSpan="2"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="1,0,1,1">
<Button
Width="130"
Height="30"
HorizontalAlignment="Center"
lex:ResxLocalizationProvider.DefaultDictionary="lang_deviceview"
Content="{lex:Loc ID_BTN_JogCCW_Content}"
IsEnabled="{Binding LdRotationBtnEnable}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="LdRotationJogCCW">
<cal:Parameter Value="{Binding Path=Text, ElementName=LdStationJogDegree}" />
</cal:ActionMessage>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</Border>
<Border
Grid.Row="7"
Grid.Column="2"
Grid.ColumnSpan="2"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="1,0,1,1" />
<Border
Grid.Row="7"
Grid.Column="4"
Grid.ColumnSpan="2"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="1,0,1,1">
<Button
Width="80"
Height="30"
HorizontalAlignment="Center"
Content="{lex:Loc ID_BTN_Reset_Content}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="LdRotationReset" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</Border>
<Border
Grid.Row="3"
Grid.Column="0"
Padding="5,1,0,1"
Background="{DynamicResource Table_BG_Title}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="1,0,1,1">
<TextBlock
VerticalAlignment="Center"
lex:ResxLocalizationProvider.DefaultDictionary="lang_deviceview"
FontFamily="Arial"
FontSize="12"
Foreground="{DynamicResource FG_Black}"
Text="{lex:Loc ID_TXT_CurrentPos}"
TextWrapping="Wrap" />
</Border>
<Border
Grid.Row="3"
Grid.Column="1"
Padding="5,1,0,1"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="0,0,0,1">
<TextBlock
HorizontalAlignment="Center"
VerticalAlignment="Center"
FontFamily="Arial"
FontSize="12"
Foreground="{DynamicResource FG_Black}"
Text="{Binding LdRotationCurPos, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, StringFormat={}{0:F1}}"
TextWrapping="Wrap" />
</Border>
<Border
Grid.Row="3"
Grid.Column="2"
Padding="5,1,0,1"
Background="{DynamicResource Table_BG_Title}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="1,0,1,1">
<TextBlock
VerticalAlignment="Center"
lex:ResxLocalizationProvider.DefaultDictionary="lang_deviceview"
FontFamily="Arial"
FontSize="12"
Foreground="{DynamicResource FG_Black}"
Text="{lex:Loc ID_TXT_TrayPresence}"
TextWrapping="Wrap" />
</Border>
<Border
Grid.Row="3"
Grid.Column="3"
Padding="5,1,0,1"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="0,0,0,1">
<deviceControl:AITSensor
HorizontalAlignment="Center"
VerticalAlignment="Center"
CustomColorOff="Gray"
CustomColorOn="Lime"
DeviceData="{Binding LoadTrayPresence}"
IsCustomRender="True" />
</Border>
<Border
Grid.Row="2"
Grid.Column="3"
Padding="5,1,0,1"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="0,0,0,1">
<deviceControl:AITSensor
HorizontalAlignment="Center"
VerticalAlignment="Center"
CustomColorOff="Gray"
CustomColorOn="Lime"
DeviceData="{Binding LoadTrayHomeSensor}"
IsCustomRender="True" />
</Border>
<Border
Grid.Row="3"
Grid.Column="4"
Grid.ColumnSpan="2"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="1,0,1,1" />
<Border
Grid.Row="4"
Grid.Column="0"
Grid.ColumnSpan="2"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="1,0,1,1">
<Button
Width="130"
Height="30"
HorizontalAlignment="Center"
lex:ResxLocalizationProvider.DefaultDictionary="lang_deviceview"
Content="{lex:Loc ID_BTN_MoveOneCircle_Content}"
IsEnabled="{Binding LdRotationBtnEnable}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="LdRotationMoveOneCircle" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</Border>
<Border
Grid.Row="4"
Grid.Column="2"
Grid.ColumnSpan="2"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="1,0,1,1" />
<Border
Grid.Row="4"
Grid.Column="4"
Grid.ColumnSpan="2"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="1,0,1,1" />
<Border
Grid.Row="8"
Grid.Column="0"
Grid.ColumnSpan="2"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="1,0,1,1">
<Button
Width="130"
Height="30"
HorizontalAlignment="Center"
lex:ResxLocalizationProvider.DefaultDictionary="lang_deviceview"
Content="{lex:Loc ID_BTN_CCDPos1_Content}"
IsEnabled="{Binding LdRotationBtnEnable}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="LdRotationMoveCCD1Pos" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</Border>
<Border
Grid.Row="8"
Grid.Column="2"
Grid.ColumnSpan="2"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="1,0,1,1">
<TextBlock
HorizontalAlignment="Center"
VerticalAlignment="Center"
FontFamily="Arial"
FontSize="12"
Foreground="{DynamicResource FG_Black}"
Text="{Binding LdCCD1Degree, StringFormat={}{0:F1}}"
TextWrapping="Wrap" />
</Border>
<Border
Grid.Row="8"
Grid.Column="4"
Grid.ColumnSpan="2"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="1,0,1,1" />
<Border
Grid.Row="9"
Grid.Column="0"
Grid.ColumnSpan="2"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="1,0,1,1">
<Button
Width="130"
Height="30"
HorizontalAlignment="Center"
lex:ResxLocalizationProvider.DefaultDictionary="lang_deviceview"
Content="{lex:Loc ID_BTN_CCDPos2_Content}"
IsEnabled="{Binding LdRotationBtnEnable}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="LdRotationMoveCCD2Pos" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</Border>
<Border
Grid.Row="9"
Grid.Column="2"
Grid.ColumnSpan="2"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="1,0,1,1">
<TextBlock
HorizontalAlignment="Center"
VerticalAlignment="Center"
FontFamily="Arial"
FontSize="12"
Foreground="{DynamicResource FG_Black}"
Text="{Binding LdCCD2Degree, StringFormat={}{0:F1}}"
TextWrapping="Wrap" />
</Border>
<Border
Grid.Row="9"
Grid.Column="4"
Grid.ColumnSpan="2"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="1,0,1,1" />
<Border
Grid.Row="10"
Grid.Column="0"
Grid.ColumnSpan="2"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="1,0,1,1">
<Button
Width="130"
Height="30"
HorizontalAlignment="Center"
lex:ResxLocalizationProvider.DefaultDictionary="lang_deviceview"
Content="CCDPos3"
IsEnabled="{Binding LdRotationBtnEnable}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="LdRotationMoveCCD3Pos" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</Border>
<Border
Grid.Row="10"
Grid.Column="2"
Grid.ColumnSpan="2"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="1,0,1,1">
<TextBlock
HorizontalAlignment="Center"
VerticalAlignment="Center"
FontFamily="Arial"
FontSize="12"
Foreground="{DynamicResource FG_Black}"
Text="{Binding LdCCD3Degree, StringFormat={}{0:F1}}"
TextWrapping="Wrap" />
</Border>
<Border
Grid.Row="10"
Grid.Column="4"
Grid.ColumnSpan="2"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="1,0,1,1" />
</Grid>
<controls:CameraControl IsEnabled="{ Binding LdRotationBtnEnable}" Grid.Row="1" Margin="0 5 0 0"/>
</Grid>
<Grid Grid.Column="1" Grid.Row="0" Margin="5 0">
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
<RowDefinition Height="*"/>
<RowDefinition Height="40"/>
</Grid.RowDefinitions>
<Label HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Content="视觉检测" Style="{DynamicResource Table_TitleStyle}" />
<Release:VmRenderControl Grid.Row="1" IImageSource="{Binding OutputRanderImage}" />
<Border Grid.Row="2" Background="{DynamicResource Table_BG_Content}" BorderBrush="{DynamicResource Table_BD}" BorderThickness="1,0,1,1">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="350"/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Padding="5,1,0,1" Background="{DynamicResource Table_BG_Title}" BorderBrush="{DynamicResource Table_BD}" BorderThickness="1,0,1,1">
<StackPanel Orientation="Horizontal" Grid.Column="0">
<TextBlock Grid.Row="2" Margin="12 3" VerticalAlignment="Center" Text="Load:"/>
<deviceControl:AITSensor HorizontalAlignment="Center" GreenColor="True" LightOnValue="{Binding VMIsLoad}" />
<TextBlock Grid.Row="2" Margin="12 3" VerticalAlignment="Center" Text="Processing:"/>
<deviceControl:AITSensor HorizontalAlignment="Center" GreenColor="True" LightOnValue="{Binding VMIsProcessing}" />
<Button Content="重载程式" Width="100" Height="30" Margin="12 3">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="ReloadSolution">
</cal:ActionMessage>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</StackPanel>
</Border>
<Border Grid.Column="1" Padding="5,1,0,1" Background="{DynamicResource Table_BG_Content}" BorderBrush="{DynamicResource Table_BD}" BorderThickness="1,0,1,1">
<StackPanel Orientation="Horizontal">
<TextBlock Grid.Row="2" Width="70" Margin="12 3" VerticalAlignment="Center" Text="放晶圆检测"/>
<Button Content="测试本地照片" Width="100" Height="30" Margin="12 3">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="TestLocalFile">
<cal:Parameter Value="UIWaferPlaceCheck"/>
<cal:Parameter Value="false"/>
</cal:ActionMessage>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
<Button Content="测试当前照片" Width="100" Height="30" Margin="12 3">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="TestCCD">
<cal:Parameter Value="UIWaferPlaceCheck"/>
<cal:Parameter Value="false"/>
</cal:ActionMessage>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
<Button Content="设此为模板" Width="100" Height="30" Margin="12 3">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="SetSample">
<cal:Parameter Value="UIWaferPlaceCheck"/>
</cal:ActionMessage>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</StackPanel>
</Border>
<Border Grid.Column="2" Padding="5,1,0,1" Background="{DynamicResource Table_BG_Content}" BorderBrush="{DynamicResource Table_BD}" BorderThickness="1,0,1,1">
<StackPanel Orientation="Horizontal" Grid.Column="2">
<TextBlock Grid.Row="2" Width="70" Margin="12 3" VerticalAlignment="Center" Text="组合检测"/>
<CheckBox x:Name="cbx6inch" VerticalAlignment="Center">
<TextBlock Text="6寸平边"/>
</CheckBox>
<Button Content="测试本地照片" Width="100" Height="30" Margin="12 3">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="TestLocalFile">
<cal:Parameter Value="UIGroupCheck"/>
<cal:Parameter Value="{Binding ElementName=cbx6inch,Path=IsChecked}"/>
</cal:ActionMessage>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
<Button Content="测试当前照片" Width="100" Height="30" Margin="12 3">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="TestCCD">
<cal:Parameter Value="UIGroupCheck"/>
<cal:Parameter Value="{Binding ElementName=cbx6inch,Path=IsChecked}"/>
</cal:ActionMessage>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
<Button Content="设此为模板" Width="100" Height="30" Margin="12 3">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="SetSample">
<cal:Parameter Value="GroupCheck"/>
</cal:ActionMessage>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</StackPanel>
</Border>
</Grid>
</Border>
</Grid>
<!--<Grid Grid.Column="2" Grid.Row="0" Margin="5 0">
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
<RowDefinition Height="500"/>
<RowDefinition Height="60"/>
</Grid.RowDefinitions>
<Label HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Content="组合检测" Style="{DynamicResource Table_TitleStyle}" />
<Release:VmRenderControl Grid.Row="1" IImageSource="{Binding OutputRanderImage}"/>
<Border Grid.Row="2" Background="{DynamicResource Table_BG_Content}" BorderBrush="{DynamicResource Table_BD}" BorderThickness="1,0,1,1">
<StackPanel Orientation="Horizontal">
-->
<!--<TextBlock Grid.Row="2" Width="50" Margin="12 3" VerticalAlignment="Center" Text="Func"/>-->
<!--
<Button Content="TestLocalFile" Width="100" Height="30" Margin="12 3">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="TestLocalFile"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
<Button Content="TestCCD" Width="100" Height="30" Margin="12 3">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="TestCCD">
</cal:ActionMessage>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
<Button Content="SetSample" Width="100" Height="30" Margin="12 3">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="SetSample"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
-->
<!--<Button Content="ReloadSolution" Width="100" Height="30" Margin="12 3">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="ReloadSolution"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>-->
<!--
<TextBlock Grid.Row="2" Margin="12 3" VerticalAlignment="Center" Text="Load:"/>
<deviceControl:AITSensor HorizontalAlignment="Center" GreenColor="True" LightOnValue="{Binding VMIsLoad}" />
<TextBlock Grid.Row="2" Margin="12 3" VerticalAlignment="Center" Text="Processing:"/>
<deviceControl:AITSensor HorizontalAlignment="Center" GreenColor="True" LightOnValue="{Binding VMIsProcessing}" />
</StackPanel>
</Border>
</Grid>-->
</Grid>
</UserControl>

View File

@ -0,0 +1,29 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using VMControls.Interface;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace SicUI.Client.Models.Platform.TM
{
/// <summary>
/// DeviceView.xaml 的交互逻辑
/// </summary>
public partial class Device2View : UserControl
{
public Device2View()
{
InitializeComponent();
}
}
}

View File

@ -0,0 +1,216 @@
using SicUI.Models;
using System;
using System.Collections.Generic;
using Aitex.Core.Common.DeviceData;
using System.IO;
using System.Drawing;
using Aitex.Core.Util;
using VM.PlatformSDKCS;
namespace SicUI.Client.Models.Platform.TM
{
public class Device2ViewModel : SicUIViewModelBase
{
[Subscription("Load.Rotation.IsServoBusy")]
public bool LdRotationIsBusy { get; set; }
[Subscription("Load.Rotation.IsServoOn")]
public bool LdRotationIsServoOn { get; set; }
[Subscription("Load.Rotation.IsMoveDone")]
public bool LdRotationIsServoDone { get; set; }
[Subscription("Load.Rotation.IsServoError")]
public bool LdRotationIsServoError { get; set; }
[Subscription("TM.LLTrayPresence.DeviceData")]
public AITSensorData LoadTrayPresence { get; set; }
[Subscription("TM.LoadTrayHomeSensor.DeviceData")]
public AITSensorData LoadTrayHomeSensor { get; set; }
[Subscription("TM.LLWaferPlaced.DeviceData")]
public AITSensorData LoadWaferPlaced { get; set; }
[Subscription("Load.Rotation.CurPos")]
public double LdRotationCurPos { get; set; }
[Subscription("Load.Rotation.CCD1Degree")]
public double LdCCD1Degree { get; set; }
[Subscription("Load.Rotation.CCD2Degree")]
public double LdCCD2Degree { get; set; }
[Subscription("Load.Rotation.CCD3Degree")]
public double LdCCD3Degree { get; set; }
[Subscription("LoadLock.IsOnline")]
public bool LoadLockIsOnline { get; set; }
[Subscription("LoadLock.Status")]
public string LLStatus { get; set; }
public bool LdRotationBtnEnable => !LdRotationIsBusy && !LdRotationIsServoError && !LoadLockIsOnline && LLStatus == "Idle";
public Device2ViewModel()
{
}
protected override void OnActivate()
{
base.OnActivate();
}
protected override void OnDeactivate(bool close)
{
base.OnDeactivate(close);
}
//protected override void InvokeAfterUpdateProperty(Dictionary<string, object> data)
//{
// base.InvokeAfterUpdateProperty(data);
// if (data.ContainsKey("LoadLock.HikVisionMaster.OutputImage"))
// {
// var bp = (Bitmap)data["LoadLock.HikVisionMaster.OutputImage"];
// OutputRanderImage = new(bp);
// }
//}
private byte[] _oldbyte;
protected override void InvokeBeforeUpdateProperty(Dictionary<string, object> data)
{
base.InvokeBeforeUpdateProperty(data);
var bp = (byte[])QueryDataClient.Instance.Service.GetData("LoadLock.HikVisionMaster.OutputImage");
if (bp != null)
{
if (_oldbyte!=null&&!Array.Equals(_oldbyte,bp))
{
Bitmap b = BytesToBitmap(bp);
OutputRanderImage?.Dispose();
OutputRanderImage = new ImageBaseData(b);
}
}
_oldbyte = bp;
}
public Bitmap BytesToBitmap(byte[] bytes)
{
using (MemoryStream ms = new MemoryStream(bytes))
{
return new Bitmap(ms); // 或使用Image.FromStream:ml-citation{ref="1,18" data="citationList"}
}
}
public void LdRotationStop()
{
InvokeClient.Instance.Service.DoOperation($"Load.Rotation.Stop");
}
public void LdRotationReset()
{
InvokeClient.Instance.Service.DoOperation($"Load.Rotation.ServoReset");
}
public void LdRotationServoOn()
{
InvokeClient.Instance.Service.DoOperation($"Load.Rotation.ServoOn");
}
public void LdRotationMoveOneCircle()
{
InvokeClient.Instance.Service.DoOperation($"LoadLock.MoveOneCircle");
}
public void LdRotationRelativeHome()
{
InvokeClient.Instance.Service.DoOperation($"Load.Rotation.MoveRelativeHome");
}
public void LdRotationRelativeHomeOffset()
{
InvokeClient.Instance.Service.DoOperation($"Load.Rotation.HomeOffset");
}
public void LdRotationMoveCCD1Pos()
{
InvokeClient.Instance.Service.DoOperation($"Load.Rotation.MoveCCD1Pos");
}
public void LdRotationMoveCCD2Pos()
{
InvokeClient.Instance.Service.DoOperation($"Load.Rotation.MoveCCD2Pos");
}
public void LdRotationMoveCCD3Pos()
{
InvokeClient.Instance.Service.DoOperation($"Load.Rotation.MoveCCD3Pos");
}
public void LdRotationJogCW(float angle)
{
InvokeClient.Instance.Service.DoOperation($"Load.Rotation.JogCW", angle);
}
public void LdRotationJogCCW(float angle)
{
InvokeClient.Instance.Service.DoOperation($"Load.Rotation.JogCCW", angle);
}
#region CCD
[Subscription("LoadLock.HikGigeCamera.IsConnected")]
public bool CamConnection { get; set; }
[Subscription("LoadLock.HikGigeCamera.Message")]
public string CamMessage { get; set; }
public bool CTS { get; set; } = false;
#endregion
#region VM
[Subscription("LoadLock.HikVisionMaster.SampleCircle")]
public double[] SampleCircle { get; set; }
[Subscription("LoadLock.HikVisionMaster.CurrentCircle")]
public double[] CurrentCircle { get; set; }
[Subscription("LoadLock.HikVisionMaster.Distance")]
public double Distance { get; set; }
[Subscription("LoadLock.HikVisionMaster.IsProcessing")]
public string VMIsProcessing { get; set; }
[Subscription("LoadLock.HikVisionMaster.LoadFile")]
public string VMIsLoad { get; set; }
[Subscription("LoadLock.HikVisionMaster.ModuleStatus")]
public bool VMRun { get; set; }
[Subscription("LoadLock.HikVisionMaster.Result")]
public bool VMResult { get; set; }
public ImageBaseData OutputRanderImage { get; set; }
public void TestLocalFile(string value, bool isinch6)
{
InvokeClient.Instance.Service.DoOperation($"LoadLock.HikVisionMaster.ExecuteLocalFile", value + (isinch6 ? "FindLine" : ""));
}
public void TestCCD(string value,bool isinch6)
{
InvokeClient.Instance.Service.DoOperation($"LoadLock.HikVisionMaster.ExecuteGrab", value + (isinch6? "FindLine" : ""));
}
public void SetSample(string value)
{
InvokeClient.Instance.Service.DoOperation($"LoadLock.HikVisionMaster.SetSample", value);
}
public void ReloadSolution()
{
InvokeClient.Instance.Service.DoOperation($"LoadLock.HikVisionMaster.ReloadSolution");
}
#endregion
}
}

View File

@ -57,9 +57,41 @@
</PropertyGroup> </PropertyGroup>
<PropertyGroup /> <PropertyGroup />
<ItemGroup> <ItemGroup>
<Reference Include="Apps.Data, Version=1.0.0.0, Culture=neutral, PublicKeyToken=5defd79a1cc9b45b, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\Dependencies\VisionMaster\Apps.Data.dll</HintPath>
</Reference>
<Reference Include="CalculatorModuleCs, Version=1.0.0.0, Culture=neutral, PublicKeyToken=05c54d68067b9216, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\Dependencies\VisionMaster\CalculatorModuleCs.dll</HintPath>
</Reference>
<Reference Include="CommandLine"> <Reference Include="CommandLine">
<HintPath>..\..\Dependencies\CommandLine.dll</HintPath> <HintPath>..\..\Dependencies\CommandLine.dll</HintPath>
</Reference> </Reference>
<Reference Include="GlobalVariableModuleCs, Version=1.0.0.0, Culture=neutral, PublicKeyToken=df9beaf7c020f858, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\Dependencies\VisionMaster\GlobalVariableModuleCs.dll</HintPath>
</Reference>
<Reference Include="IfModuleCs, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1ba1107829384f3c, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\Dependencies\VisionMaster\IfModuleCs.dll</HintPath>
</Reference>
<Reference Include="ImageSourceModuleCs, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6a03c4a48a6df5e6, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\Dependencies\VisionMaster\ImageSourceModuleCs.dll</HintPath>
</Reference>
<Reference Include="IMVSCaliperEdgeModuCs, Version=1.0.0.0, Culture=neutral, PublicKeyToken=2e9b837021fe7c82, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\Dependencies\VisionMaster\IMVSCaliperEdgeModuCs.dll</HintPath>
</Reference>
<Reference Include="IMVSCircleFitModuCs, Version=1.0.0.0, Culture=neutral, PublicKeyToken=43056db02cf11d53, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\Dependencies\VisionMaster\IMVSCircleFitModuCs.dll</HintPath>
</Reference>
<Reference Include="IMVSLineFindModuCs, Version=1.0.0.0, Culture=neutral, PublicKeyToken=15941e18b10db20b, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\Dependencies\VisionMaster\IMVSLineFindModuCs.dll</HintPath>
</Reference>
<Reference Include="KXGEM"> <Reference Include="KXGEM">
<HintPath>..\..\Dependencies\KXGEM.dll</HintPath> <HintPath>..\..\Dependencies\KXGEM.dll</HintPath>
</Reference> </Reference>
@ -72,6 +104,10 @@
</Reference> </Reference>
<Reference Include="PresentationFramework.Aero" /> <Reference Include="PresentationFramework.Aero" />
<Reference Include="presentationframework.aero2" /> <Reference Include="presentationframework.aero2" />
<Reference Include="SaveImageCs, Version=1.0.0.0, Culture=neutral, PublicKeyToken=71ec4914c8d95fd5, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\Dependencies\VisionMaster\SaveImageCs.dll</HintPath>
</Reference>
<Reference Include="SciChart.Charting"> <Reference Include="SciChart.Charting">
<HintPath>..\..\Dependencies\SciCart\SciChart.Charting.dll</HintPath> <HintPath>..\..\Dependencies\SciCart\SciChart.Charting.dll</HintPath>
</Reference> </Reference>
@ -104,6 +140,42 @@
<Reference Include="System.Xaml"> <Reference Include="System.Xaml">
<RequiredTargetFramework>4.0</RequiredTargetFramework> <RequiredTargetFramework>4.0</RequiredTargetFramework>
</Reference> </Reference>
<Reference Include="VM.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=61600122bc9264b9, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\Dependencies\VisionMaster\VM.Core.dll</HintPath>
</Reference>
<Reference Include="VM.PlatformSDKCS, Version=1.0.0.0, Culture=neutral, PublicKeyToken=c1484a72052ee3d4, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\Dependencies\VisionMaster\VM.PlatformSDKCS.dll</HintPath>
</Reference>
<Reference Include="VM.Util, Version=1.0.0.0, Culture=neutral, PublicKeyToken=a8f590f1c0b8da86, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\Dependencies\VisionMaster\VM.Util.dll</HintPath>
</Reference>
<Reference Include="VM.Utility, Version=1.0.0.0, Culture=neutral, PublicKeyToken=11e824e986ec8874, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\Dependencies\VisionMaster\VM.Utility.dll</HintPath>
</Reference>
<Reference Include="VMControls.BaseInterface, Version=1.0.0.0, Culture=neutral, PublicKeyToken=14444b8df74b6e6a, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\Dependencies\VisionMaster\VMControls.BaseInterface.dll</HintPath>
</Reference>
<Reference Include="VMControls.Interface, Version=1.0.0.0, Culture=neutral, PublicKeyToken=cb41614600cf774b, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\Dependencies\VisionMaster\VMControls.Interface.dll</HintPath>
</Reference>
<Reference Include="VMControls.RenderInterface, Version=1.0.0.0, Culture=neutral, PublicKeyToken=4bcfc50547abbb24, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\Dependencies\VisionMaster\VMControls.RenderInterface.dll</HintPath>
</Reference>
<Reference Include="VMControls.Winform.Release, Version=1.0.0.0, Culture=neutral, PublicKeyToken=2efa940dfee4dc7e, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\Dependencies\VisionMaster\VMControls.Winform.Release.dll</HintPath>
</Reference>
<Reference Include="VMControls.WPF.Release, Version=1.0.0.0, Culture=neutral, PublicKeyToken=fdd2c8be7291c30c, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\Dependencies\VisionMaster\VMControls.WPF.Release.dll</HintPath>
</Reference>
<Reference Include="WindowsBase" /> <Reference Include="WindowsBase" />
<Reference Include="PresentationCore" /> <Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" /> <Reference Include="PresentationFramework" />
@ -142,6 +214,9 @@
<Compile Include="Controls\BodyLid.xaml.cs"> <Compile Include="Controls\BodyLid.xaml.cs">
<DependentUpon>BodyLid.xaml</DependentUpon> <DependentUpon>BodyLid.xaml</DependentUpon>
</Compile> </Compile>
<Compile Include="Controls\CameraControl.xaml.cs">
<DependentUpon>CameraControl.xaml</DependentUpon>
</Compile>
<Compile Include="Controls\ChooseDialogBoxView.xaml.cs"> <Compile Include="Controls\ChooseDialogBoxView.xaml.cs">
<DependentUpon>ChooseDialogBoxView.xaml</DependentUpon> <DependentUpon>ChooseDialogBoxView.xaml</DependentUpon>
</Compile> </Compile>
@ -213,6 +288,10 @@
<DependentUpon>RuntimeView.xaml</DependentUpon> <DependentUpon>RuntimeView.xaml</DependentUpon>
</Compile> </Compile>
<Compile Include="Models\Maintenances\RuntimeViewModel.cs" /> <Compile Include="Models\Maintenances\RuntimeViewModel.cs" />
<Compile Include="Models\Maintenances\TM\Device2View.xaml.cs">
<DependentUpon>Device2View.xaml</DependentUpon>
</Compile>
<Compile Include="Models\Maintenances\TM\Device2ViewModel.cs" />
<Compile Include="Models\Maintenances\TM\DeviceView.xaml.cs"> <Compile Include="Models\Maintenances\TM\DeviceView.xaml.cs">
<DependentUpon>DeviceView.xaml</DependentUpon> <DependentUpon>DeviceView.xaml</DependentUpon>
</Compile> </Compile>
@ -371,6 +450,10 @@
<SubType>Designer</SubType> <SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>
</Page> </Page>
<Page Include="Controls\CameraControl.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Controls\ChooseDialogBoxView.xaml"> <Page Include="Controls\ChooseDialogBoxView.xaml">
<SubType>Designer</SubType> <SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>
@ -447,6 +530,10 @@
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType> <SubType>Designer</SubType>
</Page> </Page>
<Page Include="Models\Maintenances\TM\Device2View.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Models\Maintenances\TM\DeviceView.xaml"> <Page Include="Models\Maintenances\TM\DeviceView.xaml">
<SubType>Designer</SubType> <SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>