Kyungshin-Welder/Machines/ILSOS_KS/Views/PopUP/PopupWindowViewModel.cs
2026-01-26 14:51:28 +09:00

1171 lines
56 KiB
C#

using Aurora;
using Aurora.Api;
using Aurora.Util.HislogPlus;
using CoreUnit.Control.UserControl.Canvas;
using CoreUnit.Scanner.UserControl.ScannerCanvas;
using Cysharp.Text;
using ILSOS_KS.Sequences;
using NPOI.Util;
using OpenCvSharp;
using OpenCvSharp.WpfExtensions;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Timers;
using System.Windows;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Xml.Linq;
using VisionCommon;
using WeldingCommon;
using WeldingCommon.Recipes;
using WpfAnimatedGif;
namespace ILSOS_KS.Views.PopUP
{
public class PopupWindowViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string name) =>
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
private BitmapSource _ImageLeftTop;
public BitmapSource ImageLeftTop
{
get => _ImageLeftTop;
set { _ImageLeftTop = value; OnPropertyChanged(nameof(ImageLeftTop)); }
}
private BitmapSource _ImageLeftBottom;
public BitmapSource ImageLeftBottom
{
get => _ImageLeftBottom;
set { _ImageLeftBottom = value; OnPropertyChanged(nameof(ImageLeftBottom)); }
}
private BitmapSource _ImageRightTop;
public BitmapSource ImageRightTop
{
get => _ImageRightTop;
set { _ImageRightTop = value; OnPropertyChanged(nameof(ImageRightTop)); }
}
private BitmapSource _ImageRightBottom;
public BitmapSource ImageRightBottom
{
get => _ImageRightBottom;
set { _ImageRightBottom = value; OnPropertyChanged(nameof(ImageRightBottom)); }
}
private double _Progressbar;
public double Progressbar
{
get => _Progressbar;
set
{
if (_Progressbar != value)
{
_Progressbar = value;
OnPropertyChanged(nameof(Progressbar));
}
}
}
private Visibility _progressBarVisibility = Visibility.Collapsed;
public Visibility ProgressBarVisibility
{
get => _progressBarVisibility;
set
{
if (_progressBarVisibility != value)
{
_progressBarVisibility = value;
OnPropertyChanged(nameof(ProgressBarVisibility));
}
}
}
private string _StepLBAD;
public string StepLBAD
{
get => _StepLBAD;
set
{
_StepLBAD = value;
OnPropertyChanged(nameof(StepLBAD));
if (value.Trim().Equals("OK", StringComparison.OrdinalIgnoreCase)) { StepLBADNO = Brushes.Green; }
else { StepLBADNO = Brushes.Red; }
}
}
private Brush _StepLBADNO = Brushes.Black;
public Brush StepLBADNO
{
get => _StepLBADNO;
set { _StepLBADNO = value; OnPropertyChanged(nameof(StepLBADNO)); }
}
private string _StepWELDING;
public string StepWELDING
{
get => _StepWELDING;
set
{
_StepWELDING = value;
OnPropertyChanged(nameof(StepWELDING));
if (value.Trim().Equals("OK", StringComparison.OrdinalIgnoreCase)) { StepWELDINGNO = Brushes.Green; }
else { StepWELDINGNO = Brushes.Red; }
}
}
private Brush _StepWELDINGNO = Brushes.Black;
public Brush StepWELDINGNO
{
get => _StepWELDINGNO;
set { _StepWELDINGNO = value; OnPropertyChanged(nameof(StepWELDINGNO)); }
}
private BitmapImage _LoadingGifSource;
public BitmapImage LoadingGifSource
{
get => _LoadingGifSource;
set { _LoadingGifSource = value; OnPropertyChanged(nameof(LoadingGifSource)); }
}
private bool _IsLoadingLeftTop = true;
public bool IsLoadingLeftTop
{
get => _IsLoadingLeftTop;
set { _IsLoadingLeftTop = value; OnPropertyChanged(nameof(IsLoadingLeftTop)); }
}
private bool _IsLoadingRightTop = true;
public bool IsLoadingRightTop
{
get => _IsLoadingRightTop;
set { _IsLoadingRightTop = value; OnPropertyChanged(nameof(IsLoadingRightTop)); }
}
private bool _IsLoadingLeftBottom = true;
public bool IsLoadingLeftBottom
{
get => _IsLoadingLeftBottom;
set { _IsLoadingLeftBottom = value; OnPropertyChanged(nameof(IsLoadingLeftBottom)); }
}
private bool _IsLoadingRightBottom = true;
public bool IsLoadingRightBottom
{
get => _IsLoadingRightBottom;
set { _IsLoadingRightBottom = value; OnPropertyChanged(nameof(IsLoadingRightBottom)); }
}
public KS_Step Step1 { get; set; }
public KS_Step Step2 { get; set; }
public PopupWindowViewModel()
{
//// 이벤트 구독
//ImageProcessor.Instance.ProgressChanged += progress =>
//{
// Progressbar = progress * 100; // 0~100
//};
//ImageProcessor.Instance.ProgressBarVisibilityChanged += visible =>
//{
// ProgressBarVisibility = visible ? Visibility.Visible : Visibility.Collapsed;
//};
var uri = new Uri("pack://application:,,,/ILSOS_KS;component/Assets/loading.gif", UriKind.Absolute);
BitmapImage bitmapImage = new BitmapImage(uri);
LoadingGifSource = bitmapImage;
Step1 = new KS_Step(6, 3); // Ring 6개, Spiral 3개
Step2 = new KS_Step(6, 3);
}
public Mat CropRectResize(Mat src, OpenCvSharp.Rect roi, double scale = 1.0)
{
if (roi.X < 0 || roi.Y < 0 || roi.X + roi.Width > src.Width || roi.Y + roi.Height > src.Height)
throw new ArgumentException("ROI가 이미지 범위를 벗어났습니다.");
Mat cropped = new Mat(src, roi).Clone();
if (scale == 1.0)
return cropped;
// 리사이즈할 크기 계산
int newWidth = (int)(cropped.Width * scale);
int newHeight = (int)(cropped.Height * scale);
Mat resized = new Mat();
Cv2.Resize(cropped, resized, new OpenCvSharp.Size(newWidth, newHeight), 0, 0, InterpolationFlags.Linear);
return resized;
}
public static BitmapSource MemoryStreamToBitmapSource(MemoryStream ms)
{
if (ms == null || ms.Length == 0) return null;
BitmapImage bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.CacheOption = BitmapCacheOption.OnLoad; // 스트림 닫아도 유지
bitmap.StreamSource = ms;
bitmap.EndInit();
bitmap.Freeze(); // 다른 쓰레드에서도 안전하게 사용 가능
return bitmap;
}
public Mat CropMat(Mat src, OpenCvSharp.Rect roi)
{
if (roi.X < 0 || roi.Y < 0 ||
roi.X + roi.Width > src.Width ||
roi.Y + roi.Height > src.Height)
{
throw new ArgumentException("ROI가 이미지 범위를 벗어났습니다.");
}
// roi 영역을 복사해서 새 Mat 반환
return new Mat(src, roi).Clone();
}
public void SetImages1(Mat LeftTop, OpenCvSharp.Rect roi)
{
IsLoadingLeftTop = true; // 1) 로딩 GIF 켜기
Task.Run(() =>
{
BitmapSource bmp = null;
string fullPath = null;
if (LeftTop != null && !LeftTop.Empty())
{
var cropped = CropMat(LeftTop, roi);
bmp = cropped.ToBitmapSource();
bmp.Freeze();
fullPath = System.IO.Path.Combine(
ConfigurationManager.AppSettings.Get("DATA_PATH"),
"_vision", "RealTimeScout",
$"Page1_{DateTime.Now:yyyy_MM_dd}/out/{DateTime.Now:HHmmss}.jpg"
);
//ImageProcessor.Instance.SaveImageFile(LeftTop, fullPath, 100);
}
// 2) UI 스레드에서 업데이트
Application.Current.Dispatcher.Invoke(() =>
{
if (bmp != null)
{
ImageLeftTop = new WriteableBitmap(bmp);
}
IsLoadingLeftTop = false; // 3) 로딩 GIF 끄기
});
});
}
public void SetImages2(Mat RightTop, OpenCvSharp.Rect roi)
{
IsLoadingRightTop = true; // 1) 로딩 GIF 켜기
Task.Run(() =>
{
BitmapSource bmp = null;
string fullPath = null;
if (RightTop != null && !RightTop.Empty())
{
var cropped = CropMat(RightTop, roi);
bmp = cropped.ToBitmapSource();
bmp.Freeze();
fullPath = System.IO.Path.Combine(
ConfigurationManager.AppSettings.Get("DATA_PATH"),
"_vision", "RealTimeScout",
$"Page2_{DateTime.Now:yyyy_MM_dd}/out/{DateTime.Now:HHmmss}.jpg"
);
//ImageProcessor.Instance.SaveImageFile(RightTop, fullPath, 100);
}
// 2) UI 스레드에서 업데이트
Application.Current.Dispatcher.Invoke(() =>
{
if (bmp != null)
{
ImageRightTop = new WriteableBitmap(bmp);
}
IsLoadingRightTop = false; // 3) 로딩 GIF 끄기
});
});
}
public void SetImages3(Mat LeftBottom, OpenCvSharp.Rect roi)
{
IsLoadingLeftBottom = true; // 1) 로딩 GIF 켜기
Task.Run(() =>
{
BitmapSource bmp = null;
string fullPath = null;
if (LeftBottom != null && !LeftBottom.Empty())
{
var cropped = CropMat(LeftBottom, roi);
bmp = cropped.ToBitmapSource();
bmp.Freeze();
fullPath = System.IO.Path.Combine(
ConfigurationManager.AppSettings.Get("DATA_PATH"),
"_vision", "RealTimeScout",
$"Page3_{DateTime.Now:yyyy_MM_dd}/out/{DateTime.Now:HHmmss}.jpg"
);
//ImageProcessor.Instance.SaveImageFile(LeftBottom, fullPath, 100);
}
// 2) UI 스레드에서 업데이트
Application.Current.Dispatcher.Invoke(() =>
{
if (bmp != null)
{
ImageLeftBottom = new WriteableBitmap(bmp);
}
IsLoadingLeftBottom = false; // 3) 로딩 GIF 끄기
});
});
}
public void SetImages4(Mat RightBottom, OpenCvSharp.Rect roi)
{
IsLoadingRightBottom = true; // 1) 로딩 GIF 켜기
Task.Run(() =>
{
BitmapSource bmp = null;
string fullPath = null;
if (RightBottom != null && !RightBottom.Empty())
{
var cropped = CropMat(RightBottom, roi);
bmp = cropped.ToBitmapSource();
bmp.Freeze();
fullPath = System.IO.Path.Combine(
ConfigurationManager.AppSettings.Get("DATA_PATH"),
"_vision", "RealTimeScout",
$"Page3_{DateTime.Now:yyyy_MM_dd}/out/{DateTime.Now:HHmmss}.jpg"
);
//ImageProcessor.Instance.SaveImageFile(RightBottom, fullPath, 100);
}
// 2) UI 스레드에서 업데이트
Application.Current.Dispatcher.Invoke(() =>
{
if (bmp != null)
{
ImageRightBottom = new WriteableBitmap(bmp);
}
IsLoadingRightBottom = false; // 3) 로딩 GIF 끄기
});
});
}
private void StepSet1(List<int> Step)
{
// String.Format("{0:F2}", num / 100.0);
//
Step1.Ring1.LowerLimit = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring1_BeadWidthLowerLimit] / 100.0);
Step1.Ring1.UpperLimit = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring1_BeadWidthUpperLimit] / 100.0);
Step1.Ring1.BeadSize1 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring1_Bead1] / 100.0);
Step1.Ring1.BeadSize2 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring1_Bead2] / 100.0);
Step1.Ring1.BeadSize3 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring1_Bead3] / 100.0);
Step1.Ring1.BeadSize4 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring1_Bead4] / 100.0);
Step1.Ring1.Value = Step[(int)EWeldingStepRing.Ring1_BeadWidthOK_NG] == 100 ? "OK" : "NG";
//
Step1.Ring2.LowerLimit = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring2_BeadWidthLowerLimit] / 100.0);
Step1.Ring2.UpperLimit = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring2_BeadWidthUpperLimit] / 100.0);
Step1.Ring2.BeadSize1 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring2_Bead1] / 100.0);
Step1.Ring2.BeadSize2 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring2_Bead2] / 100.0);
Step1.Ring2.BeadSize3 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring2_Bead3] / 100.0);
Step1.Ring2.BeadSize4 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring2_Bead4] / 100.0);
Step1.Ring2.Value = Step[(int)EWeldingStepRing.Ring2_BeadWidthOK_NG] == 100 ? "OK" : "NG";
//
Step1.Ring3.LowerLimit = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring3_BeadWidthLowerLimit] / 100.0);
Step1.Ring3.UpperLimit = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring3_BeadWidthUpperLimit] / 100.0);
Step1.Ring3.BeadSize1 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring3_Bead1] / 100.0);
Step1.Ring3.BeadSize2 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring3_Bead2] / 100.0);
Step1.Ring3.BeadSize3 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring3_Bead3] / 100.0);
Step1.Ring3.BeadSize4 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring3_Bead4] / 100.0);
Step1.Ring3.Value = Step[(int)EWeldingStepRing.Ring3_BeadWidthOK_NG] == 100 ? "OK" : "NG";
//
Step1.Ring4.LowerLimit = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring4_BeadWidthLowerLimit] / 100.0);
Step1.Ring4.UpperLimit = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring4_BeadWidthUpperLimit] / 100.0);
Step1.Ring4.BeadSize1 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring4_Bead1] / 100.0);
Step1.Ring4.BeadSize2 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring4_Bead2] / 100.0);
Step1.Ring4.BeadSize3 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring4_Bead3] / 100.0);
Step1.Ring4.BeadSize4 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring4_Bead4] / 100.0);
Step1.Ring4.Value = Step[(int)EWeldingStepRing.Ring4_BeadWidthOK_NG] == 100 ? "OK" : "NG";
//
Step1.Ring5.LowerLimit = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring5_BeadWidthLowerLimit] / 100.0);
Step1.Ring5.UpperLimit = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring5_BeadWidthUpperLimit] / 100.0);
Step1.Ring5.BeadSize1 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring5_Bead1] / 100.0);
Step1.Ring5.BeadSize2 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring5_Bead2] / 100.0);
Step1.Ring5.BeadSize3 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring5_Bead3] / 100.0);
Step1.Ring5.BeadSize4 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring5_Bead4] / 100.0);
Step1.Ring5.Value = Step[(int)EWeldingStepRing.Ring5_BeadWidthOK_NG] == 100 ? "OK" : "NG";
//
Step1.Ring6.LowerLimit = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring6_BeadWidthLowerLimit] / 100.0);
Step1.Ring6.UpperLimit = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring6_BeadWidthUpperLimit] / 100.0);
Step1.Ring6.BeadSize1 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring6_Bead1] / 100.0);
Step1.Ring6.BeadSize2 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring6_Bead2] / 100.0);
Step1.Ring6.BeadSize3 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring6_Bead3] / 100.0);
Step1.Ring6.BeadSize4 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring6_Bead4] / 100.0);
Step1.Ring6.Value = Step[(int)EWeldingStepRing.Ring6_BeadWidthOK_NG] == 100 ? "OK" : "NG";
}
private void StepSet2(List<int> Step)
{
//
Step1.Spiral1.HorizontalLowerLimit = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral1_HorizontalLowerLimit] / 100.0);
Step1.Spiral1.HorizontalUpperLimit = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral1_HorizontalUpperLimit] / 100.0);
Step1.Spiral1.HorizontalResult = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral1_HorizontalResult] / 100.0);
Step1.Spiral1.VerticalLowerLimit = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral1_VerticalLowerLimit] / 100.0);
Step1.Spiral1.VerticalUpperLimit = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral1_VerticalUpperLimit] / 100.0);
Step1.Spiral1.VerticalResult = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral1_VerticalResult] / 100.0);
Step1.Spiral1.Value = Step[(int)EWeldingStepSpiral.Spiral1_BeadWidthOK_NG] == 100 ? "OK" : "NG";
//
Step1.Spiral2.HorizontalLowerLimit = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral2_HorizontalLowerLimit] / 100.0);
Step1.Spiral2.HorizontalUpperLimit = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral2_HorizontalUpperLimit] / 100.0);
Step1.Spiral2.HorizontalResult = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral2_HorizontalResult] / 100.0);
Step1.Spiral2.VerticalLowerLimit = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral2_VerticalLowerLimit] / 100.0);
Step1.Spiral2.VerticalUpperLimit = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral2_VerticalUpperLimit] / 100.0);
Step1.Spiral2.VerticalResult = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral2_VerticalResult] / 100.0);
Step1.Spiral2.Value = Step[(int)EWeldingStepSpiral.Spiral2_BeadWidthOK_NG] == 100 ? "OK" : "NG";
//
Step1.Spiral3.HorizontalLowerLimit = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral3_HorizontalLowerLimit] / 100.0);
Step1.Spiral3.HorizontalUpperLimit = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral3_HorizontalUpperLimit] / 100.0);
Step1.Spiral3.HorizontalResult = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral3_HorizontalResult] / 100.0);
Step1.Spiral3.VerticalLowerLimit = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral3_VerticalLowerLimit] / 100.0);
Step1.Spiral3.VerticalUpperLimit = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral3_VerticalUpperLimit] / 100.0);
Step1.Spiral3.VerticalResult = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral3_VerticalResult] / 100.0);
Step1.Spiral3.Value = Step[(int)EWeldingStepSpiral.Spiral3_BeadWidthOK_NG] == 100 ? "OK" : "NG";
}
private void StepSet3(List<int> Step)
{
//
Step2.Ring1.LowerLimit = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring1_BeadWidthLowerLimit] / 100.0);
Step2.Ring1.UpperLimit = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring1_BeadWidthUpperLimit] / 100.0);
Step2.Ring1.BeadSize1 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring1_Bead1] / 100.0);
Step2.Ring1.BeadSize2 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring1_Bead2] / 100.0);
Step2.Ring1.BeadSize3 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring1_Bead3] / 100.0);
Step2.Ring1.BeadSize4 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring1_Bead4] / 100.0);
Step2.Ring1.Value = Step[(int)EWeldingStepRing.Ring1_BeadWidthOK_NG] == 100 ? "OK" : "NG";
//
Step2.Ring2.LowerLimit = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring2_BeadWidthLowerLimit] / 100.0);
Step2.Ring2.UpperLimit = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring2_BeadWidthUpperLimit] / 100.0);
Step2.Ring2.BeadSize1 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring2_Bead1] / 100.0);
Step2.Ring2.BeadSize2 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring2_Bead2] / 100.0);
Step2.Ring2.BeadSize3 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring2_Bead3] / 100.0);
Step2.Ring2.BeadSize4 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring2_Bead4] / 100.0);
Step2.Ring2.Value = Step[(int)EWeldingStepRing.Ring2_BeadWidthOK_NG] == 100 ? "OK" : "NG";
//
Step2.Ring3.LowerLimit = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring3_BeadWidthLowerLimit] / 100.0);
Step2.Ring3.UpperLimit = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring3_BeadWidthUpperLimit] / 100.0);
Step2.Ring3.BeadSize1 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring3_Bead1] / 100.0);
Step2.Ring3.BeadSize2 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring3_Bead2] / 100.0);
Step2.Ring3.BeadSize3 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring3_Bead3] / 100.0);
Step2.Ring3.BeadSize4 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring3_Bead4] / 100.0);
Step2.Ring3.Value = Step[(int)EWeldingStepRing.Ring3_BeadWidthOK_NG] == 100 ? "OK" : "NG";
//
Step2.Ring4.LowerLimit = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring4_BeadWidthLowerLimit] / 100.0);
Step2.Ring4.UpperLimit = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring4_BeadWidthUpperLimit] / 100.0);
Step2.Ring4.BeadSize1 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring4_Bead1] / 100.0);
Step2.Ring4.BeadSize2 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring4_Bead2] / 100.0);
Step2.Ring4.BeadSize3 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring4_Bead3] / 100.0);
Step2.Ring4.BeadSize4 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring4_Bead4] / 100.0);
Step2.Ring4.Value = Step[(int)EWeldingStepRing.Ring4_BeadWidthOK_NG] == 100 ? "OK" : "NG";
//
Step2.Ring5.LowerLimit = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring5_BeadWidthLowerLimit] / 100.0);
Step2.Ring5.UpperLimit = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring5_BeadWidthUpperLimit] / 100.0);
Step2.Ring5.BeadSize1 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring5_Bead1] / 100.0);
Step2.Ring5.BeadSize2 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring5_Bead2] / 100.0);
Step2.Ring5.BeadSize3 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring5_Bead3] / 100.0);
Step2.Ring5.BeadSize4 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring5_Bead4] / 100.0);
Step2.Ring5.Value = Step[(int)EWeldingStepRing.Ring5_BeadWidthOK_NG] == 100 ? "OK" : "NG";
//
Step2.Ring6.LowerLimit = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring6_BeadWidthLowerLimit] / 100.0);
Step2.Ring6.UpperLimit = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring6_BeadWidthUpperLimit] / 100.0);
Step2.Ring6.BeadSize1 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring6_Bead1] / 100.0);
Step2.Ring6.BeadSize2 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring6_Bead2] / 100.0);
Step2.Ring6.BeadSize3 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring6_Bead3] / 100.0);
Step2.Ring6.BeadSize4 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring6_Bead4] / 100.0);
Step2.Ring6.Value = Step[(int)EWeldingStepRing.Ring6_BeadWidthOK_NG] == 100 ? "OK" : "NG";
}
private void StepSet4(List<int> Step)
{
//
Step2.Spiral1.HorizontalLowerLimit = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral1_HorizontalLowerLimit] / 100.0);
Step2.Spiral1.HorizontalUpperLimit = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral1_HorizontalUpperLimit] / 100.0);
Step2.Spiral1.HorizontalResult = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral1_HorizontalResult] / 100.0);
Step2.Spiral1.VerticalLowerLimit = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral1_VerticalLowerLimit] / 100.0);
Step2.Spiral1.VerticalUpperLimit = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral1_VerticalUpperLimit] / 100.0);
Step2.Spiral1.VerticalResult = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral1_VerticalResult] / 100.0);
Step2.Spiral1.Value = Step[(int)EWeldingStepSpiral.Spiral1_BeadWidthOK_NG] == 100 ? "OK" : "NG";
//
Step2.Spiral2.HorizontalLowerLimit = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral2_HorizontalLowerLimit] / 100.0);
Step2.Spiral2.HorizontalUpperLimit = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral2_HorizontalUpperLimit] / 100.0);
Step2.Spiral2.HorizontalResult = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral2_HorizontalResult] / 100.0);
Step2.Spiral2.VerticalLowerLimit = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral2_VerticalLowerLimit] / 100.0);
Step2.Spiral2.VerticalUpperLimit = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral2_VerticalUpperLimit] / 100.0);
Step2.Spiral2.VerticalResult = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral2_VerticalResult] / 100.0);
Step2.Spiral2.Value = Step[(int)EWeldingStepSpiral.Spiral2_BeadWidthOK_NG] == 100 ? "OK" : "NG";
//
Step2.Spiral3.HorizontalLowerLimit = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral3_HorizontalLowerLimit] / 100.0);
Step2.Spiral3.HorizontalUpperLimit = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral3_HorizontalUpperLimit] / 100.0);
Step2.Spiral3.HorizontalResult = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral3_HorizontalResult] / 100.0);
Step2.Spiral3.VerticalLowerLimit = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral3_VerticalLowerLimit] / 100.0);
Step2.Spiral3.VerticalUpperLimit = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral3_VerticalUpperLimit] / 100.0);
Step2.Spiral3.VerticalResult = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral3_VerticalResult] / 100.0);
Step2.Spiral3.Value = Step[(int)EWeldingStepSpiral.Spiral3_BeadWidthOK_NG] == 100 ? "OK" : "NG";
}
public static int ToIntThousand(double value)
{
decimal decValue = (decimal)value;
return (int)Math.Round(decValue * 100m, MidpointRounding.AwayFromZero); // 100m 2자리, 1000m 3자리
}
public List<int> toIntList(List<double> step)
{
List<int> resultList = new List<int>();
foreach (double info in step)
{
resultList.Add(ToIntThousand(info));
}
return resultList;
}
public void SetParameters1(List<double> step)
{
AsyncLog.I($"[INFO]SetParameters1: " + string.Join(", ", step));
StepSet1(toIntList(step));
}
public void SetParameters2(List<double> step)
{
AsyncLog.I($"[INFO]SetParameters2: " + string.Join(", ", step));
StepSet2(toIntList(step));
}
public void SetParameters3(List<double> step)
{
AsyncLog.I($"[INFO]SetParameters3: " + string.Join(", ", step));
StepSet3(toIntList(step));
}
public void SetParameters4(List<double> step)
{
AsyncLog.I($"[INFO]SetParameters4: " + string.Join(", ", step));
StepSet4(toIntList(step));
}
public void DisposeImages()
{
Application.Current.Dispatcher.Invoke(() =>
{
// BitmapSource 참조 해제
ImageLeftTop = null;
ImageLeftBottom = null;
// GC 수집 강제 호출 (선택적)
GC.Collect();
GC.WaitForPendingFinalizers();
});
}
}
public class RelayCommand : ICommand
{
private readonly Action _execute;
private readonly Func<bool> _canExecute;
public RelayCommand(Action execute, Func<bool> canExecute = null)
{
_execute = execute;
_canExecute = canExecute;
}
public bool CanExecute(object parameter) => _canExecute?.Invoke() ?? true;
public void Execute(object parameter) => _execute();
public event EventHandler CanExecuteChanged;
}
public class RelayCommand<T> : ICommand
{
private readonly Action<T> _execute;
private readonly Func<T, bool> _canExecute;
public RelayCommand(Action<T> execute, Func<T, bool> canExecute = null)
{
_execute = execute;
_canExecute = canExecute;
}
public bool CanExecute(object parameter)
{
if (parameter == null && typeof(T).IsValueType) return false;
return _canExecute?.Invoke((T)parameter) ?? true;
}
public void Execute(object parameter) => _execute((T)parameter);
public event EventHandler CanExecuteChanged;
}
}
public enum EWeldingStepRing
{
Ring1_BeadWidthLowerLimit, // Ring #1 bead 폭 하한
Ring1_BeadWidthUpperLimit, // Ring #1 bead 폭 상한
//Ring1_BeadWidthResult,
//Ring1_BeadMIN,
//Ring1_BeadMAX,
Ring1_Bead1,
Ring1_Bead2,
Ring1_Bead3,
Ring1_Bead4,
Ring1_BeadWidthOK_NG, // Ring #1 (0 = OK, 1 = NG)
Ring2_BeadWidthLowerLimit, // Ring #2 bead 폭 하한
Ring2_BeadWidthUpperLimit, // Ring #2 bead 폭 상한
//Ring2_BeadWidthResult,
//Ring2_BeadMIN,
//Ring2_BeadMAX,
Ring2_Bead1,
Ring2_Bead2,
Ring2_Bead3,
Ring2_Bead4,
Ring2_BeadWidthOK_NG, // Ring #2 (0 = OK, 1 = NG)
Ring3_BeadWidthLowerLimit, // Ring #3 bead 폭 하한
Ring3_BeadWidthUpperLimit, // Ring #3 bead 폭 상한
//Ring3_BeadWidthResult,
//Ring3_BeadMIN,
//Ring3_BeadMAX,
Ring3_Bead1,
Ring3_Bead2,
Ring3_Bead3,
Ring3_Bead4,
Ring3_BeadWidthOK_NG, // Ring #3 (0 = OK, 1 = NG)
Ring4_BeadWidthLowerLimit, // Ring #4 bead 폭 하한
Ring4_BeadWidthUpperLimit, // Ring #4 bead 폭 상한
//Ring4_BeadWidthResult,
//Ring4_BeadMIN,
//Ring4_BeadMAX,
Ring4_Bead1,
Ring4_Bead2,
Ring4_Bead3,
Ring4_Bead4,
Ring4_BeadWidthOK_NG, // Ring #4 (0 = OK, 1 = NG)
Ring5_BeadWidthLowerLimit, // Ring #5 bead 폭 하한
Ring5_BeadWidthUpperLimit, // Ring #5 bead 폭 상한
//Ring5_BeadWidthResult,
//Ring5_BeadMIN,
//Ring5_BeadMAX,
Ring5_Bead1,
Ring5_Bead2,
Ring5_Bead3,
Ring5_Bead4,
Ring5_BeadWidthOK_NG, // Ring #5 (0 = OK, 1 = NG)
Ring6_BeadWidthLowerLimit, // Ring #6 bead 폭 하한
Ring6_BeadWidthUpperLimit, // Ring #6 bead 폭 상한
//Ring6_BeadWidthResult,
//Ring6_BeadMIN,
//Ring6_BeadMAX,
Ring6_Bead1,
Ring6_Bead2,
Ring6_Bead3,
Ring6_Bead4,
Ring6_BeadWidthOK_NG, // Ring #6 (0 = OK, 1 = NG)
}
public enum EWeldingStepSpiral
{
Spiral1_HorizontalLowerLimit, // Spiral #1 _ 가로 하한
Spiral1_HorizontalUpperLimit, // Spiral #1 _ 가로 상한
Spiral1_HorizontalResult,
Spiral1_VerticalLowerLimit, // Spiral #1 _ 세로 하한
Spiral1_VerticalUpperLimit, // Spiral #1 _ 세로 상한
Spiral1_VerticalResult,
Spiral1_BeadWidthOK_NG, // Spiral #1 _ bead 폭 OK/NG
Spiral2_HorizontalLowerLimit, // Spiral #2 _ 가로 하한
Spiral2_HorizontalUpperLimit, // Spiral #2 _ 가로 상한
Spiral2_HorizontalResult,
Spiral2_VerticalLowerLimit, // Spiral #2 _ 세로 하한
Spiral2_VerticalUpperLimit, // Spiral #2 _ 세로 상한
Spiral2_VerticalResult,
Spiral2_BeadWidthOK_NG, // Spiral #2 _ bead 폭 OK/NG
Spiral3_HorizontalLowerLimit, // Spiral #3 _ 가로 하한
Spiral3_HorizontalUpperLimit, // Spiral #3 _ 가로 상한
Spiral3_HorizontalResult,
Spiral3_VerticalLowerLimit, // Spiral #3 _ 세로 하한
Spiral3_VerticalUpperLimit, // Spiral #3 _ 세로 상한
Spiral3_VerticalResult,
Spiral3_BeadWidthOK_NG, // Spiral #3 _ bead 폭 OK/NG
}
#region Base Class
// INotifyPropertyChanged 구현
public class NotifyPropertyChangedEntity : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
#region Models
// 링 정보
public class KS_Ring : NotifyPropertyChangedEntity
{
private string _lowerLimit;
public string LowerLimit
{
get => _lowerLimit;
set { _lowerLimit = value; OnPropertyChanged(nameof(LowerLimit)); }
}
private string _upperLimit;
public string UpperLimit
{
get => _upperLimit;
set { _upperLimit = value; OnPropertyChanged(nameof(UpperLimit)); }
}
//private string _result;
//public string Result
//{
// get => _result;
// set { _result = value; OnPropertyChanged(nameof(Result)); }
//}
public string BeadSize1 { get => _beadSize1; set { _beadSize1 = value; OnPropertyChanged(nameof(BeadSize1)); } }
private string _beadSize1;
public string BeadSize2 { get => _beadSize2; set { _beadSize2 = value; OnPropertyChanged(nameof(BeadSize2)); } }
private string _beadSize2;
public string BeadSize3 { get => _beadSize3; set { _beadSize3 = value; OnPropertyChanged(nameof(BeadSize3)); } }
private string _beadSize3;
public string BeadSize4 { get => _beadSize4; set { _beadSize4 = value; OnPropertyChanged(nameof(BeadSize4)); } }
private string _beadSize4;
private string _value;
public string Value
{
get => _value;
set { _value = value; OnPropertyChanged(nameof(Value)); }
}
public List<string> ToStringList()
{
return new List<string> { LowerLimit, UpperLimit, BeadSize1, BeadSize2, BeadSize3, BeadSize4, Value };
}
}
// 스파이럴 정보
public class KS_Spiral : NotifyPropertyChangedEntity
{
private string _horizontalLowerLimit;
public string HorizontalLowerLimit
{
get => _horizontalLowerLimit;
set { _horizontalLowerLimit = value; OnPropertyChanged(nameof(HorizontalLowerLimit)); }
}
private string _horizontalUpperLimit;
public string HorizontalUpperLimit
{
get => _horizontalUpperLimit;
set { _horizontalUpperLimit = value; OnPropertyChanged(nameof(HorizontalUpperLimit)); }
}
private string _horizontalResult;
public string HorizontalResult
{
get => _horizontalResult;
set { _horizontalResult = value; OnPropertyChanged(nameof(HorizontalResult)); }
}
private string _verticalLowerLimit;
public string VerticalLowerLimit
{
get => _verticalLowerLimit;
set { _verticalLowerLimit = value; OnPropertyChanged(nameof(VerticalLowerLimit)); }
}
private string _verticalUpperLimit;
public string VerticalUpperLimit
{
get => _verticalUpperLimit;
set { _verticalUpperLimit = value; OnPropertyChanged(nameof(VerticalUpperLimit)); }
}
private string _verticalResult;
public string VerticalResult
{
get => _verticalResult;
set { _verticalResult = value; OnPropertyChanged(nameof(VerticalResult)); }
}
private string _value;
public string Value
{
get => _value;
set { _value = value; OnPropertyChanged(nameof(Value)); }
}
public List<string> ToStringList()
{
return new List<string> {
HorizontalLowerLimit, HorizontalUpperLimit, HorizontalResult,
VerticalLowerLimit, VerticalUpperLimit, VerticalResult,
Value
};
}
}
#endregion
public class KS_Step
{
public KS_Ring[] Rings { get; private set; }
public KS_Spiral[] Spirals { get; private set; }
public KS_Step(int ringCount, int spiralCount)
{
Rings = Enumerable.Range(0, ringCount).Select(_ => new KS_Ring()).ToArray();
Spirals = Enumerable.Range(0, spiralCount).Select(_ => new KS_Spiral()).ToArray();
}
// 명시적으로 접근할 수 있도록 편의 프로퍼티 제공
public KS_Ring Ring1 => Rings[0];
public KS_Ring Ring2 => Rings[1];
public KS_Ring Ring3 => Rings[2];
public KS_Ring Ring4 => Rings[3];
public KS_Ring Ring5 => Rings[4];
public KS_Ring Ring6 => Rings[5];
public KS_Spiral Spiral1 => Spirals[0];
public KS_Spiral Spiral2 => Spirals[1];
public KS_Spiral Spiral3 => Spirals[2];
public List<string> ToStringList()
{
var list = new List<string>();
foreach (var ring in Rings) list.AddRange(ring.ToStringList());
foreach (var spiral in Spirals) list.AddRange(spiral.ToStringList());
return list;
}
}
public class KS_WeldingInfo
{
public KS_Step Step1 { get; set; }
public KS_Step Step2 { get; set; }
public int Line_LaserPower1 { get; set; } = 0;
public int Line_LaserPower2 { get; set; } = 0;
public int Line_MarkSpeed { get; set; } = 0;
public int Arc_LaserPower1 { get; set; } = 0;
public int Arc_LaserPower2 { get; set; } = 0;
public int Arc_MarkSpeed { get; set; } = 0;
public int Spline_LaserPower1 { get; set; } = 0;
public int Spline_LaserPower2 { get; set; } = 0;
public int Spline_MarkSpeed { get; set; } = 0;
public string StepLBAD { get; set; } = "";
public string StepWELDING { get; set; } = "";
public KS_WeldingInfo()
{
Step1 = new KS_Step(6, 3); // Ring 6개, Spiral 3개
Step2 = new KS_Step(6, 3);
}
public static int ToIntThousand(double value)
{
decimal decValue = (decimal)value;
return (int)Math.Round(decValue * 100m, MidpointRounding.AwayFromZero); // 100m 2자리, 1000m 3자리
}
public List<int> toIntList(List<double> step)
{
List<int> resultList = new List<int>();
foreach (double info in step)
{
resultList.Add(ToIntThousand(info));
}
return resultList;
}
private void StepSet1(List<int> Step)
{
// String.Format("{0:F2}", num / 100.0);
//
Step1.Ring1.LowerLimit = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring1_BeadWidthLowerLimit] / 100.0);
Step1.Ring1.UpperLimit = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring1_BeadWidthUpperLimit] / 100.0);
Step1.Ring1.BeadSize1 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring1_Bead1] / 100.0);
Step1.Ring1.BeadSize2 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring1_Bead2] / 100.0);
Step1.Ring1.BeadSize3 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring1_Bead3] / 100.0);
Step1.Ring1.BeadSize4 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring1_Bead4] / 100.0);
Step1.Ring1.Value = Step[(int)EWeldingStepRing.Ring1_BeadWidthOK_NG] == 100 ? "OK" : "NG";
//
Step1.Ring2.LowerLimit = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring2_BeadWidthLowerLimit] / 100.0);
Step1.Ring2.UpperLimit = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring2_BeadWidthUpperLimit] / 100.0);
Step1.Ring2.BeadSize1 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring2_Bead1] / 100.0);
Step1.Ring2.BeadSize2 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring2_Bead2] / 100.0);
Step1.Ring2.BeadSize3 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring2_Bead3] / 100.0);
Step1.Ring2.BeadSize4 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring2_Bead4] / 100.0);
Step1.Ring2.Value = Step[(int)EWeldingStepRing.Ring2_BeadWidthOK_NG] == 100 ? "OK" : "NG";
//
Step1.Ring3.LowerLimit = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring3_BeadWidthLowerLimit] / 100.0);
Step1.Ring3.UpperLimit = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring3_BeadWidthUpperLimit] / 100.0);
Step1.Ring3.BeadSize1 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring3_Bead1] / 100.0);
Step1.Ring3.BeadSize2 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring3_Bead2] / 100.0);
Step1.Ring3.BeadSize3 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring3_Bead3] / 100.0);
Step1.Ring3.BeadSize4 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring3_Bead4] / 100.0);
Step1.Ring3.Value = Step[(int)EWeldingStepRing.Ring3_BeadWidthOK_NG] == 100 ? "OK" : "NG";
//
Step1.Ring4.LowerLimit = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring4_BeadWidthLowerLimit] / 100.0);
Step1.Ring4.UpperLimit = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring4_BeadWidthUpperLimit] / 100.0);
Step1.Ring4.BeadSize1 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring4_Bead1] / 100.0);
Step1.Ring4.BeadSize2 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring4_Bead2] / 100.0);
Step1.Ring4.BeadSize3 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring4_Bead3] / 100.0);
Step1.Ring4.BeadSize4 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring4_Bead4] / 100.0);
Step1.Ring4.Value = Step[(int)EWeldingStepRing.Ring4_BeadWidthOK_NG] == 100 ? "OK" : "NG";
//
Step1.Ring5.LowerLimit = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring5_BeadWidthLowerLimit] / 100.0);
Step1.Ring5.UpperLimit = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring5_BeadWidthUpperLimit] / 100.0);
Step1.Ring5.BeadSize1 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring5_Bead1] / 100.0);
Step1.Ring5.BeadSize2 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring5_Bead2] / 100.0);
Step1.Ring5.BeadSize3 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring5_Bead3] / 100.0);
Step1.Ring5.BeadSize4 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring5_Bead4] / 100.0);
Step1.Ring5.Value = Step[(int)EWeldingStepRing.Ring5_BeadWidthOK_NG] == 100 ? "OK" : "NG";
//
Step1.Ring6.LowerLimit = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring6_BeadWidthLowerLimit] / 100.0);
Step1.Ring6.UpperLimit = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring6_BeadWidthUpperLimit] / 100.0);
Step1.Ring6.BeadSize1 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring6_Bead1] / 100.0);
Step1.Ring6.BeadSize2 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring6_Bead2] / 100.0);
Step1.Ring6.BeadSize3 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring6_Bead3] / 100.0);
Step1.Ring6.BeadSize4 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring6_Bead4] / 100.0);
Step1.Ring6.Value = Step[(int)EWeldingStepRing.Ring6_BeadWidthOK_NG] == 100 ? "OK" : "NG";
}
private void StepSet2(List<int> Step)
{
//
Step1.Spiral1.HorizontalLowerLimit = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral1_HorizontalLowerLimit] / 100.0);
Step1.Spiral1.HorizontalUpperLimit = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral1_HorizontalUpperLimit] / 100.0);
Step1.Spiral1.HorizontalResult = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral1_HorizontalResult] / 100.0);
Step1.Spiral1.VerticalLowerLimit = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral1_VerticalLowerLimit] / 100.0);
Step1.Spiral1.VerticalUpperLimit = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral1_VerticalUpperLimit] / 100.0);
Step1.Spiral1.VerticalResult = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral1_VerticalResult] / 100.0);
Step1.Spiral1.Value = Step[(int)EWeldingStepSpiral.Spiral1_BeadWidthOK_NG] == 100 ? "OK" : "NG";
//
Step1.Spiral2.HorizontalLowerLimit = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral2_HorizontalLowerLimit] / 100.0);
Step1.Spiral2.HorizontalUpperLimit = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral2_HorizontalUpperLimit] / 100.0);
Step1.Spiral2.HorizontalResult = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral2_HorizontalResult] / 100.0);
Step1.Spiral2.VerticalLowerLimit = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral2_VerticalLowerLimit] / 100.0);
Step1.Spiral2.VerticalUpperLimit = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral2_VerticalUpperLimit] / 100.0);
Step1.Spiral2.VerticalResult = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral2_VerticalResult] / 100.0);
Step1.Spiral2.Value = Step[(int)EWeldingStepSpiral.Spiral2_BeadWidthOK_NG] == 100 ? "OK" : "NG";
//
Step1.Spiral3.HorizontalLowerLimit = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral3_HorizontalLowerLimit] / 100.0);
Step1.Spiral3.HorizontalUpperLimit = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral3_HorizontalUpperLimit] / 100.0);
Step1.Spiral3.HorizontalResult = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral3_HorizontalResult] / 100.0);
Step1.Spiral3.VerticalLowerLimit = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral3_VerticalLowerLimit] / 100.0);
Step1.Spiral3.VerticalUpperLimit = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral3_VerticalUpperLimit] / 100.0);
Step1.Spiral3.VerticalResult = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral3_VerticalResult] / 100.0);
Step1.Spiral3.Value = Step[(int)EWeldingStepSpiral.Spiral3_BeadWidthOK_NG] == 100 ? "OK" : "NG";
}
private void StepSet3(List<int> Step)
{
//
Step2.Ring1.LowerLimit = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring1_BeadWidthLowerLimit] / 100.0);
Step2.Ring1.UpperLimit = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring1_BeadWidthUpperLimit] / 100.0);
Step1.Ring1.BeadSize1 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring1_Bead1] / 100.0);
Step1.Ring1.BeadSize2 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring1_Bead2] / 100.0);
Step1.Ring1.BeadSize3 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring1_Bead3] / 100.0);
Step1.Ring1.BeadSize4 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring1_Bead4] / 100.0);
Step2.Ring1.Value = Step[(int)EWeldingStepRing.Ring1_BeadWidthOK_NG] == 100 ? "OK" : "NG";
//
Step2.Ring2.LowerLimit = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring2_BeadWidthLowerLimit] / 100.0);
Step2.Ring2.UpperLimit = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring2_BeadWidthUpperLimit] / 100.0);
Step1.Ring2.BeadSize1 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring2_Bead1] / 100.0);
Step1.Ring2.BeadSize2 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring2_Bead2] / 100.0);
Step1.Ring2.BeadSize3 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring2_Bead3] / 100.0);
Step1.Ring2.BeadSize4 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring2_Bead4] / 100.0);
Step2.Ring2.Value = Step[(int)EWeldingStepRing.Ring2_BeadWidthOK_NG] == 100 ? "OK" : "NG";
//
Step2.Ring3.LowerLimit = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring3_BeadWidthLowerLimit] / 100.0);
Step2.Ring3.UpperLimit = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring3_BeadWidthUpperLimit] / 100.0);
Step1.Ring3.BeadSize1 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring3_Bead1] / 100.0);
Step1.Ring3.BeadSize2 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring3_Bead2] / 100.0);
Step1.Ring3.BeadSize3 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring3_Bead3] / 100.0);
Step1.Ring3.BeadSize4 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring3_Bead4] / 100.0);
Step2.Ring3.Value = Step[(int)EWeldingStepRing.Ring3_BeadWidthOK_NG] == 100 ? "OK" : "NG";
//
Step2.Ring4.LowerLimit = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring4_BeadWidthLowerLimit] / 100.0);
Step2.Ring4.UpperLimit = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring4_BeadWidthUpperLimit] / 100.0);
Step1.Ring4.BeadSize1 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring4_Bead1] / 100.0);
Step1.Ring4.BeadSize2 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring4_Bead2] / 100.0);
Step1.Ring4.BeadSize3 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring4_Bead3] / 100.0);
Step1.Ring4.BeadSize4 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring4_Bead4] / 100.0);
Step2.Ring4.Value = Step[(int)EWeldingStepRing.Ring4_BeadWidthOK_NG] == 100 ? "OK" : "NG";
//
Step2.Ring5.LowerLimit = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring5_BeadWidthLowerLimit] / 100.0);
Step2.Ring5.UpperLimit = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring5_BeadWidthUpperLimit] / 100.0);
Step1.Ring5.BeadSize1 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring5_Bead1] / 100.0);
Step1.Ring5.BeadSize2 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring5_Bead2] / 100.0);
Step1.Ring5.BeadSize3 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring5_Bead3] / 100.0);
Step1.Ring5.BeadSize4 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring5_Bead4] / 100.0);
Step2.Ring5.Value = Step[(int)EWeldingStepRing.Ring5_BeadWidthOK_NG] == 100 ? "OK" : "NG";
//
Step2.Ring6.LowerLimit = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring6_BeadWidthLowerLimit] / 100.0);
Step2.Ring6.UpperLimit = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring6_BeadWidthUpperLimit] / 100.0);
Step1.Ring6.BeadSize1 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring6_Bead1] / 100.0);
Step1.Ring6.BeadSize2 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring6_Bead2] / 100.0);
Step1.Ring6.BeadSize3 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring6_Bead3] / 100.0);
Step1.Ring6.BeadSize4 = String.Format("{0:F2}", Step[(int)EWeldingStepRing.Ring6_Bead4] / 100.0);
Step2.Ring6.Value = Step[(int)EWeldingStepRing.Ring6_BeadWidthOK_NG] == 100 ? "OK" : "NG";
}
private void StepSet4(List<int> Step)
{
//
Step2.Spiral1.HorizontalLowerLimit = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral1_HorizontalLowerLimit] / 100.0);
Step2.Spiral1.HorizontalUpperLimit = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral1_HorizontalUpperLimit] / 100.0);
Step2.Spiral1.HorizontalResult = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral1_HorizontalResult] / 100.0);
Step2.Spiral1.VerticalLowerLimit = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral1_VerticalLowerLimit] / 100.0);
Step2.Spiral1.VerticalUpperLimit = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral1_VerticalUpperLimit] / 100.0);
Step2.Spiral1.VerticalResult = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral1_VerticalResult] / 100.0);
Step2.Spiral1.Value = Step[(int)EWeldingStepSpiral.Spiral1_BeadWidthOK_NG] == 100 ? "OK" : "NG";
//
Step2.Spiral2.HorizontalLowerLimit = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral2_HorizontalLowerLimit] / 100.0);
Step2.Spiral2.HorizontalUpperLimit = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral2_HorizontalUpperLimit] / 100.0);
Step2.Spiral2.HorizontalResult = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral2_HorizontalResult] / 100.0);
Step2.Spiral2.VerticalLowerLimit = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral2_VerticalLowerLimit] / 100.0);
Step2.Spiral2.VerticalUpperLimit = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral2_VerticalUpperLimit] / 100.0);
Step2.Spiral2.VerticalResult = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral2_VerticalResult] / 100.0);
Step2.Spiral2.Value = Step[(int)EWeldingStepSpiral.Spiral2_BeadWidthOK_NG] == 100 ? "OK" : "NG";
//
Step2.Spiral3.HorizontalLowerLimit = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral3_HorizontalLowerLimit] / 100.0);
Step2.Spiral3.HorizontalUpperLimit = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral3_HorizontalUpperLimit] / 100.0);
Step2.Spiral3.HorizontalResult = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral3_HorizontalResult] / 100.0);
Step2.Spiral3.VerticalLowerLimit = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral3_VerticalLowerLimit] / 100.0);
Step2.Spiral3.VerticalUpperLimit = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral3_VerticalUpperLimit] / 100.0);
Step2.Spiral3.VerticalResult = String.Format("{0:F2}", Step[(int)EWeldingStepSpiral.Spiral3_VerticalResult] / 100.0);
Step2.Spiral3.Value = Step[(int)EWeldingStepSpiral.Spiral3_BeadWidthOK_NG] == 100 ? "OK" : "NG";
}
public List<string> MakeData(List<double> data1, List<double> data2, List<double> data3, List<double> data4, List<short> recipe, string LBAD, string WELDING)
{
StepSet1(toIntList(data1));
StepSet2(toIntList(data1));
StepSet3(toIntList(data1));
StepSet4(toIntList(data1));
// Line -> LaserPower1, LaserPower2, MarkSpeed, Arc -> LaserPower1, LaserPower2, MarkSpeed , spline -> LaserPower1, LaserPower2, MarkSpeed
Line_LaserPower1 = recipe[0];
Line_LaserPower2 = recipe[0];
Line_MarkSpeed = recipe[0];
Arc_LaserPower1 = recipe[0];
Arc_LaserPower2 = recipe[0];
Arc_MarkSpeed = recipe[0];
Spline_LaserPower1 = recipe[0];
Spline_LaserPower2 = recipe[0];
Spline_MarkSpeed = recipe[0];
StepLBAD = LBAD;
StepWELDING = WELDING;
var list = new List<string>();
// Step1, Step2 값
list.AddRange(Step1.ToStringList());
list.AddRange(Step2.ToStringList());
// WeldingInfo 자체 값
list.AddRange(new[]
{
Line_LaserPower1.ToString(),
Line_LaserPower2.ToString(),
Line_MarkSpeed.ToString(),
Arc_LaserPower1.ToString(),
Arc_LaserPower2.ToString(),
Arc_MarkSpeed.ToString(),
Spline_LaserPower1.ToString(),
Spline_LaserPower2.ToString(),
Spline_MarkSpeed.ToString(),
StepLBAD,
StepWELDING
});
return list;
}
}