using Aurora.Api; using AuroraLaser.Amplitude.Satsuma; using AuroraLaser.Coherent.Arm; using AuroraLaser.Coherent.Compact; using AuroraLaser.Coherent.HyperRapid; using AuroraLaser.Coherent.RapidLX; using AuroraLaser.Ekspla; using AuroraLaser.Ekspla.NL202; using AuroraLaser.IPG.YLPN; using AuroraLaser.IPG.YLPP; using AuroraLaser.IPG.YLS; using AuroraLaser.Trumpf.TruDisk; using AuroraLaser.Trumpf.TruPulseNano; using Hermes; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Media.Animation; namespace AuroraLaser { public enum eLaserType { Amplitude_Satsuma_Laser, Coherent_Arm_Laser, Coherent_Compact_Laser, Coherent_HyperRapid_Laser, Coherent_RapidLX_Laser, Ekspla_NL202_Laser, IPG_YLPN_Laser, IPG_YLPP_Laser, IPG_YLS_Laser, Trumpf_TruDisk_Laser, Trumpf_TruPulseNano_Laser, Coherent_Arm_Laser_IO, IPG_Laser_IO, Trumpf_Laser_IO, } public class LaserDevice : Device, ILaserDevice { protected Logger Log = new Logger("Laser"); private ILaserDevice _LaserDevice; private ILaserDevice _LaserDeviceWithIO; private IDeviceConfig _LaserDeviceDefaultConfig; public LaserConfig Config { get; set; } public LaserDevice(string deviceId, ILaserDevice laserDeviceWithIO) { CommType = CommunicationType.Etc; DeviceId = deviceId; _LaserDeviceWithIO = laserDeviceWithIO; } protected override int DoActivate(IDeviceConfig config) { Config = config as LaserConfig; return ActivateDevice(); } protected override int DoDeactivate() { return DeactivateDevice(); } public IDeviceConfig GetConfig() { return Config; } public int ActivateDevice() { if (IsActivated) { return E1.OK; } if (IsSimul) { return E1.OK; } switch (Config.LaserType) { case eLaserType.Amplitude_Satsuma_Laser: _LaserDevice = new LaserDeviceSatsumaDisplay(DeviceId); _LaserDeviceDefaultConfig = LaserSatsumaConfig.GetDefaultConfig(); (_LaserDevice as LaserDeviceSatsumaDisplay).Config = (_LaserDeviceDefaultConfig as LaserSatsumaConfig); // Modbus localhost 로 붙음. SerialConfig or SocketConfig 불필요 break; case eLaserType.Coherent_Arm_Laser: _LaserDevice = new LaserDeviceArm(DeviceId); _LaserDeviceDefaultConfig = LaserArmConfig.GetDefaultConfig(); //_LaserDeviceDefaultConfig.ConnConfig = Config.ConnConfig; _LaserDeviceDefaultConfig.ConnConfig = Config.SocketConfig; (_LaserDevice as LaserDeviceArm).Config = (_LaserDeviceDefaultConfig as LaserArmConfig); break; case eLaserType.Coherent_Compact_Laser: _LaserDevice = new LaserDeviceCompact(DeviceId); _LaserDeviceDefaultConfig = LaserCompactMiniConfig.GetDefaultConfig(); //_LaserDeviceDefaultConfig.ConnConfig = Config.ConnConfig; _LaserDeviceDefaultConfig.ConnConfig = Config.SerialConfig; (_LaserDevice as LaserDeviceCompact).Config = (_LaserDeviceDefaultConfig as LaserCompactMiniConfig); break; case eLaserType.Coherent_HyperRapid_Laser: _LaserDevice = new LaserDeviceHyperRapid(DeviceId, 1); _LaserDeviceDefaultConfig = LaserHyperRapidConfig.GetDefaultConfig(); //_LaserDeviceDefaultConfig.ConnConfig = Config.ConnConfig; _LaserDeviceDefaultConfig.ConnConfig = Config.SerialConfig; (_LaserDevice as LaserDeviceHyperRapid).Config = (_LaserDeviceDefaultConfig as LaserHyperRapidConfig); break; case eLaserType.Coherent_RapidLX_Laser: _LaserDevice = new LaserDeviceRapidLX(DeviceId); _LaserDeviceDefaultConfig = LaserRapidLXConfig.GetDefaultConfig(); //_LaserDeviceDefaultConfig.ConnConfig = Config.ConnConfig; _LaserDeviceDefaultConfig.ConnConfig = Config.SocketConfig; (_LaserDevice as LaserDeviceRapidLX).Config = (_LaserDeviceDefaultConfig as LaserRapidLXConfig); break; case eLaserType.Ekspla_NL202_Laser: _LaserDevice = new LaserDeviceNL202(DeviceId); _LaserDeviceDefaultConfig = LaserEksplaConfig.GetDefaultConfig(eLaserEksplaDeviceType.NL202); //_LaserDeviceDefaultConfig.ConnConfig = Config.ConnConfig; _LaserDeviceDefaultConfig.ConnConfig = Config.SerialConfig; (_LaserDevice as LaserDeviceNL202).Config = (_LaserDeviceDefaultConfig as LaserEksplaConfig); break; case eLaserType.IPG_YLPN_Laser: _LaserDevice = new LaserDeviceYLPN(DeviceId); _LaserDeviceDefaultConfig = LaserYLPNConfig.GetDefaultConfig(); //_LaserDeviceDefaultConfig.ConnConfig = Config.ConnConfig; _LaserDeviceDefaultConfig.ConnConfig = Config.SerialConfig; (_LaserDevice as LaserDeviceYLPN).Config = (_LaserDeviceDefaultConfig as LaserYLPNConfig); break; case eLaserType.IPG_YLPP_Laser: _LaserDevice = new LaserDeviceYLPP(DeviceId); _LaserDeviceDefaultConfig = LaserYLPPConfig.GetDefaultConfig(); //_LaserDeviceDefaultConfig.ConnConfig = Config.ConnConfig; _LaserDeviceDefaultConfig.ConnConfig = Config.SocketConfig; (_LaserDevice as LaserDeviceYLPP).Config = (_LaserDeviceDefaultConfig as LaserYLPPConfig); break; case eLaserType.IPG_YLS_Laser: _LaserDevice = new LaserDeviceYLS(DeviceId); _LaserDeviceDefaultConfig = LaserYLSConfig.GetDefaultConfig(); //_LaserDeviceDefaultConfig.ConnConfig = Config.ConnConfig; _LaserDeviceDefaultConfig.ConnConfig = Config.SocketConfig; (_LaserDevice as LaserDeviceYLS).Config = (_LaserDeviceDefaultConfig as LaserYLSConfig); break; case eLaserType.Trumpf_TruDisk_Laser: _LaserDevice = new LaserDeviceTruDisk(DeviceId); _LaserDeviceDefaultConfig = LaserTruDiskConfig.GetDefaultConfig(); //_LaserDeviceDefaultConfig.ConnConfig = Config.ConnConfig; _LaserDeviceDefaultConfig.ConnConfig = Config.SocketConfig; (_LaserDevice as LaserDeviceTruDisk).Config = (_LaserDeviceDefaultConfig as LaserTruDiskConfig); break; case eLaserType.Trumpf_TruPulseNano_Laser: _LaserDevice = new LaserDeviceTruPulseNano(DeviceId); _LaserDeviceDefaultConfig = LaserTruPulseNanoConfig.GetDefaultConfig(); //_LaserDeviceDefaultConfig.ConnConfig = Config.ConnConfig; _LaserDeviceDefaultConfig.ConnConfig = Config.SocketConfig; (_LaserDevice as LaserDeviceTruPulseNano).Config = (_LaserDeviceDefaultConfig as LaserTruPulseNanoConfig); break; // Laser IO Control case eLaserType.Coherent_Arm_Laser_IO: case eLaserType.IPG_Laser_IO: case eLaserType.Trumpf_Laser_IO: _LaserDevice = _LaserDeviceWithIO; break; default: Log.E(string.Format("Check Laser Type Setting")); _LaserDevice = null; break; } if (_LaserDevice == null) { Log.E(string.Format("LaserDevice is Null")); return E1.ARGUMENT; } int result = _LaserDevice.ActivateDevice(); if (result == E1.OK) { SetIsActivated_InAllLaserDevice(true); } return result; } private void SetIsActivated_InAllLaserDevice(bool isActivated_InAllLaserDevice) { switch (Config.LaserType) { case eLaserType.Amplitude_Satsuma_Laser: (_LaserDevice as LaserDeviceSatsumaDisplay).IsActivated_InAllLaserDevice = isActivated_InAllLaserDevice; break; case eLaserType.Coherent_Arm_Laser: (_LaserDevice as LaserDeviceArm).IsActivated_InAllLaserDevice = isActivated_InAllLaserDevice; break; case eLaserType.Coherent_Compact_Laser: (_LaserDevice as LaserDeviceCompact).IsActivated_InAllLaserDevice = isActivated_InAllLaserDevice; break; case eLaserType.Coherent_HyperRapid_Laser: (_LaserDevice as LaserDeviceHyperRapid).IsActivated_InAllLaserDevice = isActivated_InAllLaserDevice; break; case eLaserType.Coherent_RapidLX_Laser: (_LaserDevice as LaserDeviceRapidLX).IsActivated_InAllLaserDevice = isActivated_InAllLaserDevice; break; case eLaserType.Ekspla_NL202_Laser: (_LaserDevice as LaserDeviceNL202).IsActivated_InAllLaserDevice = isActivated_InAllLaserDevice; break; case eLaserType.IPG_YLPN_Laser: (_LaserDevice as LaserDeviceYLPN).IsActivated_InAllLaserDevice = isActivated_InAllLaserDevice; break; case eLaserType.IPG_YLPP_Laser: (_LaserDevice as LaserDeviceYLPP).IsActivated_InAllLaserDevice = isActivated_InAllLaserDevice; break; case eLaserType.IPG_YLS_Laser: (_LaserDevice as LaserDeviceYLS).IsActivated_InAllLaserDevice = isActivated_InAllLaserDevice; break; case eLaserType.Trumpf_TruDisk_Laser: (_LaserDevice as LaserDeviceTruDisk).IsActivated_InAllLaserDevice = isActivated_InAllLaserDevice; break; case eLaserType.Trumpf_TruPulseNano_Laser: (_LaserDevice as LaserDeviceTruPulseNano).IsActivated_InAllLaserDevice = isActivated_InAllLaserDevice; break; // Laser IO Control case eLaserType.Coherent_Arm_Laser_IO: case eLaserType.IPG_Laser_IO: case eLaserType.Trumpf_Laser_IO: // IO LaserDevice 는 IsActivated check 를 IO Device 로 해야 하므로 불필요 break; } } public int DeactivateDevice() { if (!IsActivated) { return E1.OK; } if (IsSimul) { return E1.OK; } if (_LaserDevice == null) { Log.E(string.Format("LaserDevice is Null")); return E1.ARGUMENT; } int result = _LaserDevice.DeactivateDevice(); if (result == E1.OK) { SetIsActivated_InAllLaserDevice(false); } return result; } public int LaserOn() { if (IsSimul) { if (_LaserDevice != null) { _LaserDevice.LaserOff(); // 시뮬 모드에서는 절대 레이저를 사용하지 않도록하기 위함. } return E1.OK; } if (IsActivated == false || _LaserDevice == null) { return E1.GENERIC; } return _LaserDevice.LaserOn(); } public int LaserOff() { if (IsSimul) { return E1.OK; } if (IsActivated == false || _LaserDevice == null) { return E1.GENERIC; } return _LaserDevice.LaserOff(); } public int PilotLaserOn() { if (IsSimul) { return E1.OK; } if (IsActivated == false || _LaserDevice == null) { return E1.GENERIC; } return _LaserDevice.PilotLaserOn(); } public int PilotLaserOff() { if (IsSimul) { return E1.OK; } if (IsActivated == false || _LaserDevice == null) { return E1.GENERIC; } return _LaserDevice.PilotLaserOff(); } public bool GetPilotLaserStatus() { if (IsSimul) { return true; } if (IsActivated == false || _LaserDevice == null) { return false; } return _LaserDevice.GetPilotLaserStatus(); } public bool GetWarningStatus() { if (IsSimul) { return true; } if (IsActivated == false || _LaserDevice == null) { return false; } return _LaserDevice.GetWarningStatus(); } public bool GetEStop() { if (IsSimul) { return true; } if (IsActivated == false || _LaserDevice == null) { return false; } return _LaserDevice.GetEStop(); } public bool GetLaserError() { if (IsSimul) { return false; } if (IsActivated == false || _LaserDevice == null) { return false; } return _LaserDevice.GetLaserError(); } public string GetControlMode() { if (IsSimul) { return ""; } if (IsActivated == false || _LaserDevice == null) { return ""; } return _LaserDevice.GetControlMode(); } public bool GetEmissionStatus() { if (IsSimul) { return true; } if (IsActivated == false || _LaserDevice == null) { return false; } return _LaserDevice.GetEmissionStatus(); } public bool GetStartLaserSetBitStatus() { if (IsSimul) { return true; } if (IsActivated == false || _LaserDevice == null) { return false; } return _LaserDevice.GetStartLaserSetBitStatus(); } public bool GetLaserStartSetBitStatus() { if (IsSimul) { return true; } if (IsActivated == false || _LaserDevice == null) { return false; } return _LaserDevice.GetLaserStartSetBitStatus(); } public bool GetLaserReady() { if (IsSimul) { return true; } if (IsActivated == false || _LaserDevice == null) { return false; } return _LaserDevice.GetLaserReady(); } public bool GetPilotLaserSetBitStatus() { if (IsSimul) { return true; } if (IsActivated == false || _LaserDevice == null) { return false; } return _LaserDevice.GetPilotLaserSetBitStatus(); } public bool GetLaserResetSetBitStatus() { if (IsSimul) { return true; } if (IsActivated == false || _LaserDevice == null) { return false; } return _LaserDevice.GetLaserResetSetBitStatus(); } public string GetPowerCenter() { if (IsSimul) { return ""; } if (IsActivated == false || _LaserDevice == null) { return ""; } return _LaserDevice.GetPowerCenter(); } public string GetPowerRing() { if (IsSimul) { return ""; } if (IsActivated == false || _LaserDevice == null) { return ""; } return _LaserDevice.GetPowerRing(); } public bool GetControlModeSetStatus() { if (IsSimul) { return true; } if (IsActivated == false || _LaserDevice == null) { return false; } return _LaserDevice.GetControlModeSetStatus(); } public bool GetInitCommunication() { if (IsSimul) { return true; } if (IsActivated == false || _LaserDevice == null) { return false; } return _LaserDevice.GetInitCommunication(); } public bool GetConnected() { if (IsSimul) { return true; } if (IsActivated == false || _LaserDevice == null) { return false; } return _LaserDevice.GetConnected(); } public int SetData(int nTarget, int value) { if (IsSimul) { return E1.OK; } if (IsActivated == false || _LaserDevice == null) { return E1.GENERIC; } return _LaserDevice.SetData(nTarget, value); } public int ResetLaser() { if (IsSimul) { return E1.OK; } if (IsActivated == false || _LaserDevice == null) { return E1.GENERIC; } return _LaserDevice.ResetLaser(); } #region IPG Ethernet 전용 Alarm 및 Status 정보 수신 public List Alarm1String() { if (IsSimul) { return null; } if (Config.LaserType != eLaserType.IPG_YLS_Laser) { return null; } if (IsActivated == false || _LaserDevice == null) { return null; } return ((_LaserDevice as LaserDeviceYLS)).Alarm1String(); } public List Alarm2String() { if (IsSimul) { return null; } if (Config.LaserType != eLaserType.IPG_YLS_Laser) { return null; } if (IsActivated == false || _LaserDevice == null) { return null; } return ((_LaserDevice as LaserDeviceYLS)).Alarm2String(); } public List AlarmString() { if (IsSimul) { return null; } if (Config.LaserType != eLaserType.Coherent_Arm_Laser) { return null; } if (IsActivated == false || _LaserDevice == null) { return null; } return ((_LaserDevice as LaserDeviceArm)).GetErrorMessages(); } public List StatusString() { if (IsSimul) { return null; } if (Config.LaserType != eLaserType.IPG_YLS_Laser) { return null; } if (IsActivated == false || _LaserDevice == null) { return null; } return ((_LaserDevice as LaserDeviceYLS)).StatusString(); } public bool GetLaserInterlock() // [25.09.16] ubs.cmy - Laser Interlock 추가 { if(IsSimul) return true; if (IsActivated == false || _LaserDevice == null) return false; return _LaserDevice.GetLaserInterlock(); } public eLaserType GetLaserType() { return Config.LaserType; } #endregion #region PowerProfile // PowerMeter 로 측정된 Calibration data 는 Laser 에 Dependent 하므로 Laser Class 에서 관리한다. private string pathPowerProfile = "PowerProfileTest.json"; public TopRootObject LoadPowerProfile() { //TopRootObject toproot; var json = File.ReadAllText(pathPowerProfile); var root = JsonConvert.DeserializeObject(json); return root; } public void AddPowerProfile() { TopRootObject root; if (File.Exists(pathPowerProfile)) { var json = File.ReadAllText(pathPowerProfile); root = JsonConvert.DeserializeObject(json); } else { root = new TopRootObject { PowerProfilesLists = new List() }; } PowerProfilesList profilelist = new PowerProfilesList(); PowerProfile profile = new PowerProfile(); PowerProfileParam param = new PowerProfileParam(); profile.PowerProfileParams.Add(param); profilelist.PowerProfiles.Add(profile); root.PowerProfilesLists.Add(profilelist); var outputjson = JsonConvert.SerializeObject(root, Formatting.Indented); File.WriteAllText(pathPowerProfile, outputjson); } public void CopyPowerProfile(int profileListSelectedIndex) { var json = File.ReadAllText(pathPowerProfile); var root = JsonConvert.DeserializeObject(json); PowerProfilesList profilelist = new PowerProfilesList(); for (int i = 0; i < root.PowerProfilesLists[profileListSelectedIndex].PowerProfiles.Count; i++) { PowerProfile profile = new PowerProfile(); profile.PowerProfileParams.Add(new PowerProfileParam()); profile.PowerProfileParams[0].Copy(root.PowerProfilesLists[profileListSelectedIndex].PowerProfiles[i].PowerProfileParams[0]); profilelist.PowerProfiles.Add(profile); } root.PowerProfilesLists.Add(profilelist); var outputjson = JsonConvert.SerializeObject(root, Formatting.Indented); File.WriteAllText(pathPowerProfile, outputjson); } public void SavePowerProfile(int profileListSelectedIndex) { var json = File.ReadAllText(pathPowerProfile); var root = JsonConvert.DeserializeObject(json); } public void DeleteProfiles(int profileListSelectedIndex) { try { var json = File.ReadAllText(pathPowerProfile); var root = JsonConvert.DeserializeObject(json); root.PowerProfilesLists.RemoveAt(profileListSelectedIndex); var outputjson = JsonConvert.SerializeObject(root, Formatting.Indented); File.WriteAllText(pathPowerProfile, outputjson); } catch (Exception ex) { Log.E($"{ex.Message}"); } } public void AddPowerProfileParam(int profileListSelectedIndex) { TopRootObject root = new TopRootObject(); if (File.Exists(pathPowerProfile)) { var json = File.ReadAllText(pathPowerProfile); root = JsonConvert.DeserializeObject(json); } else { Log.E(string.Format($"PowerPorfile Jason file이 존재하지 않습니다.")); } PowerProfile profile = new PowerProfile(); PowerProfileParam param = new PowerProfileParam(); profile.PowerProfileParams.Add(param); root.PowerProfilesLists[profileListSelectedIndex].PowerProfiles.Add(profile); var JASON = JsonConvert.SerializeObject(root, Formatting.Indented); File.WriteAllText(pathPowerProfile, JASON); } public void CopyProfileParam(int profileListSelectedIndex, int listboxProfileListSelectedIndex) { var json = File.ReadAllText(pathPowerProfile); var root = JsonConvert.DeserializeObject(json); PowerProfilesList profilelist = new PowerProfilesList(); PowerProfile profile = new PowerProfile(); profile.PowerProfileParams.Add(new PowerProfileParam()); profile.PowerProfileParams[0].Copy(root.PowerProfilesLists[profileListSelectedIndex].PowerProfiles[listboxProfileListSelectedIndex].PowerProfileParams[0]); root.PowerProfilesLists[profileListSelectedIndex].PowerProfiles.Add(profile); var outputjson = JsonConvert.SerializeObject(root, Formatting.Indented); File.WriteAllText(pathPowerProfile, outputjson); } public void DeleteProfileParam(int profileListSelectedIndex, int listboxProfileListSelectedIndex) { try { var json = File.ReadAllText(pathPowerProfile); var root = JsonConvert.DeserializeObject(json); root.PowerProfilesLists[profileListSelectedIndex].PowerProfiles.RemoveAt(listboxProfileListSelectedIndex); var outputjson = JsonConvert.SerializeObject(root, Formatting.Indented); File.WriteAllText(pathPowerProfile, outputjson); } catch (Exception ex) { Log.E($"{ex.Message}"); } } #endregion } }