using Aurora; using static AuroraPLC.PLCBase; namespace AuroraPLC.Views { public class PLCStatic { #region PLC 뷰 관련 // 뷰모델 For Bit & Word private static UCPLCBitViewModel ViewModelBitMonitor { get; set; } private static UCPLCBitViewModel ViewModelMBitMonitor { get; set; } private static UCPLCWordViewModel ViewModelWordMonitor { get; set; } private static UCPLCWordViewModel ViewModelDWordMonitor { get; set; } // 동기화를 위한 뮤텍스 private static readonly object _lockBitVM = new object(); private static readonly object _lockWordVM = new object(); // 싱글톤 패턴으로 구현 public static UCPLCBitViewModel GetInstanceBitVM(IAuroraEnvironment auroraEnv, string deviceID, ePLCNetType netType, ePLCDevice device = ePLCDevice.B) { if (device == ePLCDevice.M) { if (ViewModelMBitMonitor is null) { lock (_lockBitVM) { if (ViewModelMBitMonitor is null) { ViewModelMBitMonitor = new UCPLCBitViewModel(auroraEnv, deviceID, netType, device); } } } return ViewModelMBitMonitor; } else { if (ViewModelBitMonitor is null) { lock (_lockBitVM) { if (ViewModelBitMonitor is null) { ViewModelBitMonitor = new UCPLCBitViewModel(auroraEnv, deviceID, netType, device); } } } return ViewModelBitMonitor; } } public static UCPLCWordViewModel GetInstanceWordVM(IAuroraEnvironment auroraEnv, string deviceID, ePLCNetType netType, ePLCDevice device = ePLCDevice.W) { if (device == ePLCDevice.D) { if (ViewModelDWordMonitor is null) { lock (_lockWordVM) { if (ViewModelDWordMonitor is null) { ViewModelDWordMonitor = new UCPLCWordViewModel(auroraEnv, deviceID, netType, device); } } } return ViewModelDWordMonitor; } else { if (ViewModelWordMonitor is null) { lock (_lockWordVM) { if (ViewModelWordMonitor is null) { ViewModelWordMonitor = new UCPLCWordViewModel(auroraEnv, deviceID, netType, device); } } } return ViewModelWordMonitor; } } public static bool IsViewEnabled { get; set; } = true; #endregion } }