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 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 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 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 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 toIntList(List step) { List resultList = new List(); foreach (double info in step) { resultList.Add(ToIntThousand(info)); } return resultList; } public void SetParameters1(List step) { AsyncLog.I($"[INFO]SetParameters1: " + string.Join(", ", step)); StepSet1(toIntList(step)); } public void SetParameters2(List step) { AsyncLog.I($"[INFO]SetParameters2: " + string.Join(", ", step)); StepSet2(toIntList(step)); } public void SetParameters3(List step) { AsyncLog.I($"[INFO]SetParameters3: " + string.Join(", ", step)); StepSet3(toIntList(step)); } public void SetParameters4(List 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 _canExecute; public RelayCommand(Action execute, Func 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 : ICommand { private readonly Action _execute; private readonly Func _canExecute; public RelayCommand(Action execute, Func 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 ToStringList() { return new List { 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 ToStringList() { return new List { 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 ToStringList() { var list = new List(); 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 toIntList(List step) { List resultList = new List(); foreach (double info in step) { resultList.Add(ToIntThousand(info)); } return resultList; } private void StepSet1(List 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 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 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 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 MakeData(List data1, List data2, List data3, List data4, List 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(); // 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; } }