using Aurora; using Aurora.Api; using Aurora.View; using AuroraCAS; using AuroraCellTracker; using AuroraIO; using AuroraLaser; using AuroraLaserScanner; using AuroraLBAD; using AuroraMotionBoard.Ajin; using AuroraOCT; using AuroraUIComponent.Dialog; //using PropertyTools.Wpf; using System.Collections.ObjectModel; using System.Configuration; using System.IO; using System.Windows; using System.Windows.Input; using WeldingCommon.Utils; namespace WeldingCommon.Views { public class UCTestDeviceViewModel : NotifyPropertyChangedBase { private readonly Logger Log = new Logger("UCTestDeviceViewModel"); private readonly IAuroraEnvironment _AuroraEnv; private readonly CAS _CAS; private readonly CellTracker _CellTracker; private readonly IODevice _IODevice; private readonly Laser _Laser; private readonly Scanner _Scanner; private readonly LBAD _LBAD; private readonly AJINDevice _AJINDevice; private readonly AJINMotor _AJINMotor; private readonly OCT _OCT; public ICommand CMD_VisibleChanged { get; } public ICommand CMD_TestDevice_CAS { get; } public ICommand CMD_TestDevice_CellTracker { get; } public ICommand CMD_TestDevice_IODevice { get; } public ICommand CMD_TestDevice_Laser { get; } public ICommand CMD_TestDevice_Scanner { get; } public ICommand CMD_TestDevice_LBAD { get; } public ICommand CMD_TestDevice_AJINDevice { get; } public ICommand CMD_TestDevice_OCT { get; } private bool _CASEnabled = false; public bool CASEnabled { get => _CASEnabled; set => SetProperty(ref _CASEnabled, value); } private bool _CellTrackerEnabled = false; public bool CellTrackerEnabled { get => _CellTrackerEnabled; set => SetProperty(ref _CellTrackerEnabled, value); } private bool _IODeviceEnabled = false; public bool IODeviceEnabled { get => _IODeviceEnabled; set => SetProperty(ref _IODeviceEnabled, value); } private bool _LaserEnabled = false; public bool LaserEnabled { get => _LaserEnabled; set => SetProperty(ref _LaserEnabled, value); } private bool _ScannerEnabled = false; public bool ScannerEnabled { get => _ScannerEnabled; set => SetProperty(ref _ScannerEnabled, value); } private bool _LBADEnabled = false; public bool LBADEnabled { get => _LBADEnabled; set => SetProperty(ref _LBADEnabled, value); } private bool _AJINDeviceEnabled = false; public bool AJINDeviceEnabled { get => _AJINDeviceEnabled; set => SetProperty(ref _AJINDeviceEnabled, value); } private bool _OCTEnabled = false; public bool OCTEnabled { get => _OCTEnabled; set => SetProperty(ref _OCTEnabled, value); } public ObservableCollection CASMethodList { get; set; } = new ObservableCollection(); public ObservableCollection CellTrackerMethodList { get; set; } = new ObservableCollection(); public ObservableCollection IODeviceMethodList { get; set; } = new ObservableCollection(); public ObservableCollection LaserMethodList { get; set; } = new ObservableCollection(); public ObservableCollection ScannerMethodList { get; set; } = new ObservableCollection(); public ObservableCollection LBADMethodList { get; set; } = new ObservableCollection(); public ObservableCollection AJINDeviceMethodList { get; set; } = new ObservableCollection(); public ObservableCollection OCTMethodList { get; set; } = new ObservableCollection(); private string _Selected_CASMethod; public string Selected_CASMethod { get => _Selected_CASMethod; set => SetProperty(ref _Selected_CASMethod, value); } private string _Selected_CellTrackerMethod; public string Selected_CellTrackerMethod { get => _Selected_CellTrackerMethod; set => SetProperty(ref _Selected_CellTrackerMethod, value); } private string _Selected_IODeviceMethod; public string Selected_IODeviceMethod { get => _Selected_IODeviceMethod; set => SetProperty(ref _Selected_IODeviceMethod, value); } private string _Selected_LaserMethod; public string Selected_LaserMethod { get => _Selected_LaserMethod; set => SetProperty(ref _Selected_LaserMethod, value); } private string _Selected_ScannerMethod; public string Selected_ScannerMethod { get => _Selected_ScannerMethod; set => SetProperty(ref _Selected_ScannerMethod, value); } private string _Selected_LBADMethod; public string Selected_LBADMethod { get => _Selected_LBADMethod; set => SetProperty(ref _Selected_LBADMethod, value); } private string _Selected_AJINDeviceMethod; public string Selected_AJINDeviceMethod { get => _Selected_AJINDeviceMethod; set => SetProperty(ref _Selected_AJINDeviceMethod, value); } private string _Selected_OCTMethod; public string Selected_OCTMethod { get => _Selected_OCTMethod; set => SetProperty(ref _Selected_OCTMethod, value); } public UCTestDeviceViewModel(IAuroraEnvironment aurora) { _AuroraEnv = aurora; //Device 있을때만 View에서 조작 가능하게 할 것. _CAS = _AuroraEnv.DeviceManager[CommonDeviceIds.CAS] as CAS; if (_CAS != null) { CASEnabled = true; } _CellTracker = _AuroraEnv.DeviceManager[CommonDeviceIds.CellTracker] as CellTracker; if (_CellTracker != null) { CellTrackerEnabled = true; } _IODevice = _AuroraEnv.DeviceManager[CommonDeviceIds.IODevice] as IODevice; if (_IODevice != null) { IODeviceEnabled = true; } _Laser = _AuroraEnv.DeviceManager[CommonDeviceIds.Laser] as Laser; if (_Laser != null) { LaserEnabled = true; } _Scanner = _AuroraEnv.DeviceManager[CommonDeviceIds.Scanner] as Scanner; if (_Scanner != null) { ScannerEnabled = true; } _LBAD = _AuroraEnv.DeviceManager[CommonDeviceIds.LBAD] as LBAD; if (_LBAD != null) { LBADEnabled = true; } _AJINDevice = _AuroraEnv.DeviceManager[CommonDeviceIds.AJIN] as AJINDevice; _AJINMotor = _AuroraEnv.DeviceManager[CommonDeviceIds.AJINStageMotorZ] as AJINMotor; if (_AJINDevice != null && _AJINMotor != null) { AJINDeviceEnabled = true; } _OCT = _AuroraEnv.DeviceManager[CommonDeviceIds.OCT] as OCT; if (_OCT != null) { OCTEnabled = true; } CMD_TestDevice_CAS = new DelegateCommand(PerformCmdTestDevice_CAS); CMD_TestDevice_CellTracker = new DelegateCommand(PerformCmdTestDevice_CellTracker); CMD_TestDevice_IODevice = new DelegateCommand(PerformCmdTestDevice_IODevice); CMD_TestDevice_Laser = new DelegateCommand(PerformCmdTestDevice_Laser); CMD_TestDevice_Scanner = new DelegateCommand(PerformCmdTestDevice_Scanner); CMD_TestDevice_LBAD = new DelegateCommand(PerformCmdTestDevice_LBAD); CMD_TestDevice_AJINDevice = new DelegateCommand(PerformCmdTestDevice_AJINDevice); CMD_TestDevice_OCT = new DelegateCommand(PerformCmdTestDevice_OCT); #region Make Method List //CAS CASMethodList.Add("GetCurrentWeight"); CASMethodList.Add("GetLowLimit"); CASMethodList.Add("GetHighLimit"); //CellTracker CellTrackerMethodList.Add("ReceiveData"); CellTrackerMethodList.Add("GetCellInfoStrings"); CellTrackerMethodList.Add("SaveSendingData"); //IODevice IODeviceMethodList.Add("WriteDoBit"); IODeviceMethodList.Add("ReadDiBit"); IODeviceMethodList.Add("ReadDoBit"); //Laser LaserMethodList.Add("GetConnected"); LaserMethodList.Add("Open"); LaserMethodList.Add("PilotLaserOff"); LaserMethodList.Add("LaserOff"); LaserMethodList.Add("GetLaserReady"); LaserMethodList.Add("GetPilotLaserStatus"); LaserMethodList.Add("GetPilotLaserSetBitStatus"); //Scanner ScannerMethodList.Add("StopExecution"); ScannerMethodList.Add("WriteDA"); ScannerMethodList.Add("SelectCorrectionTable"); ScannerMethodList.Add("Open"); ScannerMethodList.Add("GetTime"); ScannerMethodList.Add("GetBusyStatus"); ScannerMethodList.Add("GetXYPos"); ScannerMethodList.Add("GetLatestFile"); //LBAD LBADMethodList.Add("SendCellData"); LBADMethodList.Add("GetResult"); LBADMethodList.Add("GetLaserPower"); LBADMethodList.Add("GetConnected"); LBADMethodList.Add("DisConnect"); LBADMethodList.Add("Open"); //AJIN Device : MotionBoard AJINDeviceMethodList.Add("MoveABS"); AJINDeviceMethodList.Add("GetCurrentPosition"); AJINDeviceMethodList.Add("CheckInside"); AJINDeviceMethodList.Add("ReadInMotion"); //OCT OCTMethodList.Add("AddWorkPieceID"); OCTMethodList.Add("SetProgram"); OCTMethodList.Add("GetRemoteControl"); OCTMethodList.Add("SetRemoteControl"); OCTMethodList.Add("EnterRemoteMode"); OCTMethodList.Add("SaveMetaData"); #endregion } private void PerformCmdTestDevice_CAS(object commandParameter) { switch ((string)commandParameter) { case "GetCurrentWeight": { _CAS.GetCurrentWeight(); } break; case "GetLowLimit": { _CAS.GetLowLimit(); } break; case "GetHighLimit": { _CAS.GetHighLimit(); } break; default: break; } } private void PerformCmdTestDevice_CellTracker(object commandParameter) { switch ((string)commandParameter) { case "ReceiveData": { _CellTracker.ReceiveData(); } break; case "GetCellInfoStrings": { _CellTracker.GetCellInfoStrings(); } break; case "SaveSendingData": { #warning 원래는 EDC에 CellData를 주고, EDC로부터 strItem과 strData를 받아 Save 하는 메소드 string strItem = ""; string strData = ""; string strPath = ""; ExcelManagementUnit.AppendStringInCSV(strPath, strItem, strData); } break; } } private void PerformCmdTestDevice_IODevice(object commandParameter) { #warning Indx와 bit는 장비에 따라 수정해서 사용 int index = 1; bool bit = true; switch ((string)commandParameter) { case "WriteDoBit": { _IODevice._iOUnit.WriteDoBit(index, bit); } break; case "ReadDiBit": { _IODevice._iOUnit.ReadDiBit(index, ref bit); } break; case "ReadDoBit": { _IODevice._iOUnit.ReadDoBit(index, ref bit); } break; } } private void PerformCmdTestDevice_Laser(object commandParameter) { switch ((string)commandParameter) { case "GetConnected": { _Laser.GetConnected(); } break; case "Open": { _Laser.Open(_Laser.Config); } break; case "PilotLaserOff": { _Laser.PilotLaserOff(); } break; case "LaserOff": { _Laser.LaserOff(); } break; case "GetLaserReady": { _Laser.GetLaserReady(); } break; case "GetPilotLaserStatus": { _Laser.GetPilotLaserStatus(); } break; case "GetPilotLaserSetBitStatus": { _Laser.GetPilotLaserSetBitStatus(); } break; } } private void PerformCmdTestDevice_Scanner(object commandParameter) { switch ((string)commandParameter) { case "StopExecution": { _Scanner.StopExecution(); } break; case "WriteDA": { _Scanner.WriteDA(1, 0); } break; case "SelectCorrectionTable": { _Scanner.SelectCorrectionTable(1); } break; case "Open": { _Scanner.Open(); } break; case "GetTime": { _Scanner.GetTime(); } break; case "GetBusyStatus": { _Scanner.GetBusyStatus(); } break; case "GetXYPos": { _Scanner.GetXYPos(out double x, out double y); } break; case "GetLatestFile": { var DefaultPath = ConfigurationManager.AppSettings.Get("DATA_PATH"); string fullPath = Path.Combine(DefaultPath, "_device", "_scanner", "Record"); string metaDataFolderpath = fullPath + string.Format("\\Metadata"); _Scanner.GetLatestFile(metaDataFolderpath); } break; } } private void PerformCmdTestDevice_LBAD(object commandParameter) { switch ((string)commandParameter) { case "SendCellData": { _LBAD.SendCellData(); } break; case "GetResult": { _LBAD.GetResult(out short result); } break; case "GetLaserPower": { //_LBAD.GetLaserPower(out string SubPower, out string MainPower); // 함수 삭제 됨. } break; case "GetConnected": { _LBAD.GetConnected(); } break; case "DisConnect": { _LBAD.DisConnect(); } break; case "Open": { _LBAD.Open(_LBAD.Config); } break; } } private void PerformCmdTestDevice_AJINDevice(object commandParameter) { //Z축만 받아서 검증합니다. int Axis = 0; // 0번 Z축 double Pos = 0; switch ((string)commandParameter) { case "MoveABS": { _AJINDevice.MoveABS(Axis, Pos, _AJINMotor._Config.Speed, _AJINMotor._Config.Acceleration, _AJINMotor._Config.Deceleration); } break; case "GetCurrentPosition": { _AJINDevice.GetCurrentPosition(Axis); } break; case "CheckInside": { _AJINDevice.CheckInside(Pos, _AJINDevice.GetCurrentPosition(Axis)); } break; case "ReadInMotion": { _AJINDevice.ReadInMotion(Axis); } break; } } private void PerformCmdTestDevice_OCT(object commandParameter) { switch ((string)commandParameter) { case "AddWorkPieceID": { #warning ViewModel Recipe에서 직접 값을 가져오는 strID를 삽입하므로 값을 유추할수 없어 임의의 str을 넣었습니다. 사용에 유의바랍니다. _OCT.AddWorkPieceID("1"); } break; case "SetProgram": { _OCT.SetProgram(1); } break; case "GetRemoteControl": { _OCT.GetRemoteControl(); } break; case "SetRemoteControl": { _OCT.SetRemoteControl(2); } break; case "EnterRemoteMode": { _OCT.EnterRemoteMode(30000); } break; case "SaveMetaData": { #warning 이 함수는 현재 사용되지 않는 private 메소드의 일부이며, 검증에 필요한 매개변수가 너무 많으므로 Pass합니다. //_OCT.SaveMetaData(); } break; } } } }