コード例 #1
0
 public DetectorRequestManager(DetectorsDataAccess dataAccess, DetectorsStatusManager statusManager, EventLoggerAccess logger)
     : base(dataAccess, statusManager, logger)
 {
     _logger     = logger;
     _dataAccess = dataAccess;
     _dataAccess.DisplayControlUpdateRequest += new DashboardControlUpdateHandler(ProcessControlUpdateRequest);
 }
コード例 #2
0
ファイル: ApcsAccess.cs プロジェクト: marzlia/CXPortal
        public ApcsAccess(EventLoggerAccess log)
        {
            Lgr = log;
            Debug.Assert(Lgr != null);

            _serverAddress = ConfigurationManager.AppSettings["ApcsAddress"];
            _serverPort    = int.Parse(ConfigurationManager.AppSettings["ApcsPort"]);
            Connected      = false;

            _responseEvent = new AutoResetEvent(false);
            SpeedMsgEvent  = new AutoResetEvent(false);

            _signOfLifeTimer        = new Timer(new TimerCallback(SignOfLifeCheck), null, Timeout.Infinite, Timeout.Infinite);
            _signOfLifeTimerDueTime = 20000;

            _connectionThread              = new Thread(new ThreadStart(ConnectionThreadMethod));
            _connectionThread.Name         = "APCS Command Connection Thread";
            _connectionThread.IsBackground = true;

            _responseThread              = new Thread(new ThreadStart(ResponseThreadMethod));
            _responseThread.Name         = "APCS Command Response Thread";
            _responseThread.IsBackground = true;

            _sendConfigDataThread              = new Thread(new ThreadStart(SetConfigurationThreadMethod));
            _sendConfigDataThread.Name         = "APCS Send Configuration Data Thread";
            _sendConfigDataThread.IsBackground = true;
        }
コード例 #3
0
ファイル: RequestManager.cs プロジェクト: marzlia/CXPortal
 public RequestManager(DataAccess dataAccess, StatusManager statusManager, EventLoggerAccess logger)
 {
     _Logger     = logger;
     _DataAccess = dataAccess;
     _DataAccess.DisplayControlUpdateRequest += new DashboardControlUpdateHandler(ProcessControlUpdateRequest);
     _StatusManager = statusManager;
 }
コード例 #4
0
        public RealTimeViewer(EventLoggerAccess log, DetectorsDataAccess dataAccess)
        {
            _log        = log;
            _dataAccess = dataAccess;
            _dataAccess.DisplayControlUpdateRequest += new Subsystem.DataAccessCore.DashboardControlUpdateHandler(_dataAccess_DisplayControlUpdateRequest);

            int    dataPort = int.Parse(ConfigurationManager.AppSettings["RealTimeViewerDataPort"]);
            string address  = ConfigurationManager.AppSettings["RealTimeViewerMulticastIPAddress"];

            _realTimeViewerBytesPerPixel   = uint.Parse(ConfigurationManager.AppSettings["RealTimeViewerBytesPerPixel"]);
            _realTimeViewerPixelsPerColumn = uint.Parse(ConfigurationManager.AppSettings["RealTimeViewerPixelsPerColumn"]);

            _masterControlAddress = string.Empty;

            if ((dataAccess.Detectors.PixelPerColumn > _realTimeViewerPixelsPerColumn) &&
                (_realTimeViewerPixelsPerColumn != 0))
            {
                float value = (float)dataAccess.Detectors.PixelPerColumn / (float)_realTimeViewerPixelsPerColumn;
                _pixelInterval = (int)(Math.Round(value, 0, MidpointRounding.ToEven));
            }
            else
            {
                _pixelInterval = 1;
            }

            try
            {
                _realTimeViewerHost = new RealTimeViewerHost(address, dataPort);
            }
            catch { }

            _inComingDataColl = new BlockingCollection <DataInfo>(AppConfiguration.DataCollectionMaxSize);
        }
コード例 #5
0
ファイル: UIManager.cs プロジェクト: marzlia/CXPortal
 public UIManager(EventLoggerAccess logger)
 {
     _Logger           = logger;
     _FrameWork        = new FrameWork(logger);
     _AssemblyDisplays = new List <AssemblyDisplays>();
     _DisplayLock      = new object();
 }
コード例 #6
0
 public SubsystemServices(EventLoggerAccess logger) :
     base()
 {
     _Shutdown = false;
     _Logger   = logger;
     _SubsystemCommTimeoutMsec = 30000;
 }
コード例 #7
0
        public BusinessManager(DetectorsDataAccess dataAccess, EventLoggerAccess log)
        {
            _dataAccess = dataAccess;
            _log        = log;

            _statusManager  = new DetectorsStatusManager(dataAccess, log);
            _requestManager = new RequestManager(dataAccess, (StatusManager)_statusManager, log);

            log.LogInfo("Using calibration: " + AppConfiguration.CalibrationMode.ToString());
            if (AppConfiguration.CalibrationMode == AppConfiguration.CalibrationModeEnum.Inline)
            {
                _calibration = new CalibrationInline(log, _dataAccess, _statusManager);
            }
            else if (AppConfiguration.CalibrationMode == AppConfiguration.CalibrationModeEnum.Persistent)
            {
                _calibration = new CalibrationPersistent(log, _dataAccess, _statusManager);
            }
            else if (AppConfiguration.CalibrationMode == AppConfiguration.CalibrationModeEnum.InlineStandstill)
            {
                _calibration = new CalibrationInline(log, _dataAccess, _statusManager);
            }
            _normalize = new NormalizeData(log, dataAccess, _calibration);

            _processThread = Threads.Create(ProcessDataThreadMethod, ref _processEnd, "Business Data thread");
            _processThread.Start();
        }
コード例 #8
0
        public DetectorsStatusManager(DetectorsDataAccess dataAccess, EventLoggerAccess logger) :
            base(dataAccess, logger)
        {
            _logger = logger;
            Dictionary <int, string> ConnectionValueMapping = new Dictionary <int, string>();

            ConnectionValueMapping.Add(0, TagValueTypes.Error);
            ConnectionValueMapping.Add(1, TagValueTypes.Clear);

            StatusElement detectorConnect = new StatusElement(_DetectorConnectTag, 0, TagTypes.Status, ConnectionValueMapping);

            //detectorConnect.Value =
            _Statuses.Add(detectorConnect);


            StatusElement apcsConnect = new StatusElement(_APCSConnectTag, 0, TagTypes.Status, ConnectionValueMapping);

            _Statuses.Add(apcsConnect);

            dataAccess.DetectorConnectionStateUpdate +=
                new ConnectionStateChangeHandler(OnDetectorsConnectionChange);
            dataAccess.APCSConnectionStateUpdate +=
                new ConnectionStateChangeHandler(OnApcsConnectionChange);

            Dictionary <int, string> DetectorsValueMapping = new Dictionary <int, string>();

            DetectorsValueMapping.Add(0, TagValueTypes.Clear);
            DetectorsValueMapping.Add(1, TagValueTypes.Warning);
            DetectorsValueMapping.Add(2, TagValueTypes.Error);
            DetectorsValueMapping.Add(3, TagValueTypes.Warning);

            StatusElement detectorStatus = new StatusElement(_DetectorStatusTag, 0, TagTypes.Status, DetectorsValueMapping);

            _Statuses.Add(detectorStatus);
        }
コード例 #9
0
        public MainWindow()
        {
            InitializeComponent();

            _Logger = new EventLoggerAccess();

            _DataAccess      = new DataAccess(_Logger);
            _BusinessManager = new BusinessManager(_DataAccess, _Logger);
        }
コード例 #10
0
ファイル: LinacDataAccess.cs プロジェクト: marzlia/CXPortal
 public LinacDataAccess(EventLoggerAccess logger) : 
     base(logger)
 {
     string ipAddress = ConfigurationManager.AppSettings["LinacIP"];
     int port = Convert.ToInt32(ConfigurationManager.AppSettings["LinacPort"]);
     int time = Convert.ToInt32(ConfigurationManager.AppSettings["LinacPingTime"]);
     _LinacAccess = new LinacAccess(logger, ipAddress, port, time);
     _LinacAccess.ConnectionStateChangeEvent += new ConnectionStateChangeHandler(LinacAccess_ConnectionStateChangeEvent);
 }
コード例 #11
0
        public StatusInfoDisplay(EventLoggerAccess logger)
        {
            InitializeComponent();
            CultureResources.registerDataProvider(this);

            _Logger = logger;

            CriticalErrorsArea.SizeChanged  += new SizeChangedEventHandler(CriticalErrorsArea_SizeChanged);
            WarningMessagesArea.SizeChanged += new SizeChangedEventHandler(WarningMessagesArea_SizeChanged);
        }
コード例 #12
0
        public DataAccess(EventLoggerAccess logger) :
            base(logger)
        {
            _logger = logger;
            Configuration configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

            _OpcClient = new OpcClient(configuration.GetSection("opcSection") as OpcSection, ConfigurationManager.AppSettings["TagGroup"], _logger);
            _OpcClient.OpcTagUpdate += new OpcTagUpdateHandler(_OpcClient_OpcTagUpdate);
            _OpcClient.Open();
        }
コード例 #13
0
        public NormalizeData(EventLoggerAccess log, DetectorsDataAccess dataAccess, Calibration calibration)
        {
            _log          = log;
            _dataAccess   = dataAccess;
            _calibration  = calibration;
            _objectSearch = new ObjectSearch(log, dataAccess, _calibration);
            _rawDataColl  = new BlockingCollection <DataInfo>();

            _normalizeThread = Threads.Create(NormalizeAgent, ref _normalizeEnd, "Normalization thread");
            _normalizeThread.Start();
        }
コード例 #14
0
        public RealTimeViewerHost(string address, int dataPort, int udpClientPort, EventLoggerAccess logger)
        {
            _logger = logger;
            IPAddress multicastAddress = IPAddress.Parse(address);

            _udpClient = new UdpClient(udpClientPort);
            _udpClient.JoinMulticastGroup(multicastAddress);
            _udpClient.Ttl = 255;
            _udpClient.Connect(new IPEndPoint(multicastAddress, dataPort));
            _logger.LogInfo(MethodBase.GetCurrentMethod().Name + ": joined multicast group " +
                            multicastAddress.ToString() + ":" + udpClientPort.ToString());
        }
コード例 #15
0
        public LinacStatusManager(LinacDataAccess dataAccess, EventLoggerAccess logger) :
            base(dataAccess, logger)
        {
            InitializeLinacTags();

            _dataAccess = dataAccess;

            //dataAccess.DetectorConnectionStateUpdate += new ConnectionStateChangeHandler(DataAccessDetectors_ConnectionStateUpdate);
            //dataAccess.APCSConnectionStateUpdate += new ConnectionStateChangeHandler(DataAccessAPCS_ConnectionStateUpdate);

            dataAccess.LinacConnectionStateChangeEvent += new ConnectionStateChangeHandler(dataAccess_LinacConnectionStateChangeEvent);
        }
コード例 #16
0
ファイル: StatusManager.cs プロジェクト: marzlia/CXPortal
        public StatusManager(DataAccess dataAccess, EventLoggerAccess logger)
        {
            Logger     = logger;
            _Statuses  = new StatusElements();
            DataAccess = dataAccess;

            _StatusLock = new object();

            ReadTagConfig();

            DataAccess.TagUpdate            += new PLCTagUpdateHandler(PLCTagUpdate);
            DataAccess.DisplayUpdateRequest += new DashboardUpdateRequestHandler(DashboardUpdateRequest);
        }
コード例 #17
0
        public ObjectSearch(EventLoggerAccess log, DetectorsDataAccess dataAccess, Calibration calibration)
        {
            _log         = log;
            _dataAccess  = dataAccess;
            _archiveData = new ArchiveData(log, calibration);

            _inComingDataColl = new BlockingCollection <DataInfo>();

            _searchThread = Threads.Create(SearchAgent, ref _searchEnd, "Object Search thread");
            _searchThread.Start();

            _foundObject = false;
        }
コード例 #18
0
        /// <summary>Create and prepare a new class instance.</summary>
        /// <param name="eventLogger">
        /// Event Logger specifies a <see cref="EventLoggerAccess"/> instance and must not be
        /// null...</param>
        /// <exception cref="ArgumentNullException">
        /// If <paramref name="eventLogger"/> specifies null, an exception is thrown.</exception>
        public DataAccess(EventLoggerAccess eventLogger) :
            base(eventLogger)
        {
            if (/*invalid?*/ eventLogger == null)
            {
                throw new ArgumentNullException(ClassName + " EventLoggerAccess reference argument (eventLogger) must not be null");
            }
            Logger = eventLogger;
            Configuration configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

            _opcClient = new OpcClient(configuration.GetSection("opcSection") as OpcSection, ConfigurationManager.AppSettings["TagGroup"], Logger);
            _opcClient.OpcTagUpdate += new OpcTagUpdateHandler(OpcTagUpdate);
            _opcClient.Open();
        }
コード例 #19
0
 /// <summary>Create and prepare a new class instance.</summary>
 /// <param name="dataAccess">
 /// Data Access specifies a <see cref="DataAccess"/> instance and must not be
 /// null...</param>
 /// <param name="eventLogger">
 /// Event Logger specifies a <see cref="EventLoggerAccess"/> instance and must not be
 /// null...</param>
 /// <exception cref="ArgumentNullException">
 /// If either <paramref name="dataAccess"/> or <paramref name="eventLogger"/> specifies
 /// null, an exception is thrown.</exception>
 public BusinessManager(DataAccess dataAccess, EventLoggerAccess eventLogger)
 {
     if (/*invalid?*/ eventLogger == null)
     {
         throw new ArgumentNullException(ClassName + " EventLoggerAccess reference argument (eventLogger) must not be null");
     }
     Logger = eventLogger;
     if (/*invalid?*/ dataAccess == null)
     {
         throw new ArgumentNullException(ClassName + " DataAccess reference argument (dataAccess) must not be null");
     }
     StatusManagerReference  = new StatusManager(dataAccess, eventLogger);
     RequestManagerReference = new RequestManager(dataAccess, StatusManagerReference, eventLogger);
 }
コード例 #20
0
ファイル: TestAPCS.xaml.cs プロジェクト: marzlia/CXPortal
        private void SpeedMsgAgent()
        {
            EventLoggerAccess logger = ApcsAccess.Logger;

            try
            {
                PanelUpdate update = new PanelUpdate(SpeedModePanel_Update);
                while (/*run?*/ !_speedMsgEnd.WaitOne(Utilities.TimeTENTH) && (DetectorsAccess != null) && (DetectorsAccess.Apcs != null) && (DetectorsAccess.Apcs.SpeedMessageEvent != null))
                {
                    OperatingModePortalAdaptivePNL.Dispatcher.BeginInvoke(update, null);
                }
            }
            catch (Exception ex) { _speedMsgException = ex; }
        }
コード例 #21
0
ファイル: frmOcrSnmMonitor.cs プロジェクト: marzlia/CXPortal
        public formOcrMonitor()
        {
            //
            // Required for Windows Form Designer support
            //
            InitializeComponent();

            // Get runtime settings from our .config file.
            IPAddress OCR_Host          = IPAddress.Parse((string)ConfigurationManager.AppSettings["OCR_host"]);
            Int32     OCR_Port          = Int32.Parse(ConfigurationManager.AppSettings["OCR_port"]);
            string    OCR_MessagePrefix = ConfigurationManager.AppSettings["OCR_MessagePrefix"];
            string    CargoSenderName   = ConfigurationManager.AppSettings["CargoSenderName"];
            bool      ConnectAsListener = Boolean.Parse(ConfigurationManager.AppSettings["ConnectAsListener"]);

            m_OCRMonitor = new OCRMonitor(OCR_Host,
                                          OCR_Port,
                                          ConnectAsListener,
                                          OCR_MessagePrefix,
                                          CargoSenderName
                                          );
            // Register for OCR connection status updates.
            m_OCRMonitor.UpdateConnectionStatus +=
                new OCRMonitor.OCRConnectionStatusNotifier(ConnectionStatusUpdate);
            // Register for notification of receipt of OCR messages.
            m_OCRMonitor.NotifyRxACK +=
                new OCRMonitor.OCRMessageHandler(ReceivedOcrMessage);
            m_OCRMonitor.NotifyRxNACK +=
                new OCRMonitor.OCRMessageHandler(ReceivedOcrMessage);
            m_OCRMonitor.NotifyRxOCR_MASTER +=
                new OCRMonitor.OCRMessageHandler(ReceivedOCR_MASTER);
            m_OCRMonitor.NotifyRxOCR_NEW_EVENT +=
                new OCRMonitor.OCRMessageHandler(ReceivedOCR_NEW_EVENT);
            m_OCRMonitor.NotifyRxOCR_ULD +=
                new OCRMonitor.OCRMessageHandler(ReceivedOcrMessage);
            m_OCRMonitor.NotifyRxPING +=
                new OCRMonitor.OCRMessageHandler(ReceivedOcrMessage);
            m_OCRMonitor.NotifyRxREGISTER +=
                new OCRMonitor.OCRMessageHandler(ReceivedREGISTER);
            m_OCRMonitor.NotifyRxUNREGISTER +=
                new OCRMonitor.OCRMessageHandler(ReceivedUNREGISTER);

            m_OCRMonitor.Start();

            _logger = new EventLoggerAccess();

            //if (m_OCRMonitor.IsRunning)
            {
                m_cargoHostIF = new CargoHostInterface(_logger);
            }
        }
コード例 #22
0
 public MainWindow()
 {
     InitializeComponent();
     _eventLoggerAccess = new EventLoggerAccess();
     _eventLoggerAccess.LogMessageUpdate += new LogMessageUpdateHandler(LogMessage);
     _eventLoggerAccess.LogInfo("DetectorsApp Started");
     _dataAccess      = new DetectorsDataAccess(_eventLoggerAccess);
     _businessManager = new BusinessManager(_dataAccess, _eventLoggerAccess);
     _dataAccess.Connect();
     CurrentLineIdTextBlk.DataContext = _dataAccess.Detectors;
     TestAPCS.Content    = new TestAPCS(_dataAccess);
     TestNCB.Content     = new TestNCB(_dataAccess, _businessManager);
     TestAPCS.Visibility = AppConfiguration.ShowDebugDisplays ? Visibility.Visible : Visibility.Collapsed;
     TestNCB.Visibility  = TestAPCS.Visibility;
 }
コード例 #23
0
ファイル: RealTimeViewer.cs プロジェクト: marzlia/CXPortal
        public RealTimeViewer(EventLoggerAccess log)
        {
            _log                = log;
            IsDualEnergy        = false;
            _realTimeViewerHost = new RealTimeViewerHost(AppConfiguration.RealTimeViewerMulticastIPAddress,
                                                         AppConfiguration.RealTimeViewerDataPort,
                                                         AppConfiguration.RealTimeViewerUdpClientPort,
                                                         log);

            _inComingDataColl = new BlockingCollection <DataInfo>();


            _sendThread = Threads.Create(SendAgent, ref _sendEnd, "Real Time View Data Send thread");
            _sendThread.Start();
        }
コード例 #24
0
ファイル: MainWindow.xaml.cs プロジェクト: marzlia/CXPortal
        public MainWindow()
        {
            InitializeComponent();

            EventLoggerAccess log = null;

            _apcsAccess = new ApcsAccess(log);
            _apcsAccess.Start();
            SignOfLifeSequenceTBK.DataContext = _apcsAccess;

            _speedMsgThread = new Thread(new ThreadStart(SpeedMsgAgent));
            _speedMsgThread.IsBackground = true;
            _speedMsgThread.Name         = "Main Window Speed Message thread";
            _speedMsgEnd.Reset();
            _speedMsgThread.Start();
        }
コード例 #25
0
        public DetectorSimulator(DataAccessDetectors dataAccess, EventLoggerAccess logger, BusinessManager businessManager)
        {
            try
            {
                InitializeComponent();

                _dataAccess                 = dataAccess;
                _logger                     = logger;
                _businessManager            = businessManager;
                _businessManager.RecordData = false;
            }
            catch
            {
                throw;
            }
        }
コード例 #26
0
ファイル: Dashboard.xaml.cs プロジェクト: marzlia/CXPortal
        public App()
        {
            bool createdNew = true;

            mutex = new Mutex(true, "Dashboard", out createdNew);

            if (createdNew)
            {
                if (Environment.GetCommandLineArgs().Length > 1)
                {
                    foreach (string arg in Environment.GetCommandLineArgs())
                    {
                        if (string.Compare(arg, "Operator", true) == 0 ||
                            string.Compare(arg, "Supervisor", true) == 0 ||
                            string.Compare(arg, "Maintenance", true) == 0 ||
                            string.Compare(arg, "Engineer", true) == 0)
                        {
                            ConfigurationManager.AppSettings["SystemOperationMode"] = arg;
                            break;
                        }
                    }

                    EventLoggerAccess logger = new EventLoggerAccess();
                    _UIManager       = new UIManager(logger);
                    _DataAccess      = new DataAccess(logger);
                    _AssemblyManager = new AssemblyManager(_UIManager, _DataAccess, logger);

                    _DataAccess.StartUp();
                    _UIManager.Show();
                    logger.LogInfo("Dashboard Client Started");
                }
                else
                {
                    Application.Current.Shutdown();
                }
            }
            else
            {
                Process current = Process.GetCurrentProcess();
                foreach (Process process in Process.GetProcessesByName(current.ProcessName))
                {
                    SetForegroundWindow(process.MainWindowHandle);
                }

                Application.Current.Shutdown();
            }
        }
コード例 #27
0
 public StatusManager(DataAccess dataAccess, EventLoggerAccess eventLogger)
 {
     if (/*invalid?*/ eventLogger == null)
     {
         throw new ArgumentNullException(ClassName + " EventLoggerAccess reference argument (eventLogger) must not be null");
     }
     Logger = eventLogger;
     if (/*invalid?*/ dataAccess == null)
     {
         throw new ArgumentNullException(ClassName + " DataAccess reference argument (dataAccess) must not be null");
     }
     DataAccessReference = dataAccess;
     _statusElements     = new StatusElements();
     ReadTagConfig();
     DataAccessReference.OpcTagUpdateHandlers += new PLCTagUpdateHandler(PLCTagUpdate);
     DataAccessReference.DisplayUpdateRequest += new DashboardUpdateRequestHandler(DashboardUpdateRequest);
 }
コード例 #28
0
ファイル: OpcClient.cs プロジェクト: marzlia/CXPortal
        public OpcClient(OpcSection opcSection, string tagGroup, EventLoggerAccess logger)
        {
            _logger     = logger;
            _OpcSection = opcSection;
            _TagGroup   = tagGroup;

            _GroupReadState            = new SubscriptionState();
            _GroupReadState.Name       = _OpcSection.Server.TagGroup.GetElement(_TagGroup).Name + " Read";
            _GroupReadState.UpdateRate = _OpcSection.Server.TagGroup.GetElement(_TagGroup).UpdateRate;
            _GroupReadState.Active     = true;

            _GroupWriteState        = new SubscriptionState();
            _GroupWriteState.Name   = _OpcSection.Server.TagGroup.GetElement(_TagGroup).Name + " Write";
            _GroupWriteState.Active = false;

            _Items = new Item[_OpcSection.Server.TagGroup.GetElement(_TagGroup).Tags.Count];
        }
コード例 #29
0
ファイル: AssemblyManager.cs プロジェクト: marzlia/CXPortal
        public AssemblyManager(UIManager uiManager, DataAccess dataAccess, EventLoggerAccess logger)
        {
            _DataAccess = dataAccess;
            _DataAccess.setEvent(new SubsystemServiceListUpdateHandler(SubsystemServiceListUpdate));
            _Logger            = logger;
            _UIManager         = uiManager;
            _AssemblyInstances = new Dictionary <string, IDisplays>();

            if (Convert.ToBoolean(ConfigurationManager.AppSettings["StartUpClean"]))
            {
                string directory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,
                                                ConfigurationManager.AppSettings["SystemOperationMode"]);
                if (Directory.Exists(directory))
                {
                    DeleteDirectory(directory);
                }
            }
        }
コード例 #30
0
ファイル: DataAccessBase.cs プロジェクト: marzlia/CXPortal
        public DataAccessBase(EventLoggerAccess logger)
        {
            _AddressLock = new object();
            _TaskFactory = new TaskFactory(TaskCreationOptions.PreferFairness, TaskContinuationOptions.ExecuteSynchronously);
            _LastTask    = new Task(new Action(() => { }));
            _LastTask.RunSynchronously();

            _logger = logger;
            _AvailableConnections = new List <EndpointAddress>();
            _DashboardAccess      = new DashboardAccess();
            _DashboardAccess.Start();



            _SubsystemDisplayAccess = new SubsystemDisplayAccess();
            _SubsystemDisplayAccess.DisplayUpdateRequest += new DashboardUpdateRequestHandler(DisplaySendUpdate);
            _SubsystemDisplayAccess.ControlUpdateRequest += new DashboardControlUpdateHandler(DisplayControlUpdate);
        }