Пример #1
0
        /// <summary>
        /// Zobrazení informací o programu (verze a pod...)
        /// </summary>
        private void comAboutExecute(object sender, ExecutedRoutedEventArgs e)
        {
            Vizualizace.Log(TypUdalosti.Info, "comAboutExecute");
            WindowAbout aboutDlg = new WindowAbout();

            aboutDlg.ShowDialog();
        }
Пример #2
0
        /// <summary>
        /// Globální ošetření vyjímek, na které programátor zapomněl
        /// </summary>
        public void GlobalExceptionHandler(Exception e)
        {
            Vizualizace.Log(TypUdalosti.Exception, e.Message);

            if (vizualizace != null)
            {
                vizualizace.ShowErrorMsg(e.Message + "\n\nAplikace bude ukončena.");
            }
            this.Close();
        }
Пример #3
0
        /// <summary>
        /// PLC nekomunikuje (Nebliká LiveBit, zobrazí se odpočet pro vypnutí PC)
        /// </summary>
        void watchDogShutdown_OnTimeout()
        {
            Vizualizace.Log(TypUdalosti.Info, "Aktivován odpočet do vypnutí PC");
            WindowShutdown winShutdown = new WindowShutdown(60);

            winShutdown.OnTestKomunikace += () => { return(watchDogShutdown.Aktivni); };  //WindowShutdown se pomocí události OnTestKomunikace dotazuje, zda PLC již náhodou opět nekomunikuje
            if (winShutdown.ShowDialog().Value)
            {
                Vizualizace.Log(TypUdalosti.Info, "Vizualizace vypíná PC");
                System.Diagnostics.Process.Start("shutdown", "-s -t 00");
                mainWinRef.Close();
            }
        }
Пример #4
0
 /// <summary>
 /// Reakce na událost OPC clienta, že došlo k chybě komunikace se serverem. Chybu komunikace PLC s OPC serverem je nutné ošetřit jinak - např. livebitem
 /// </summary>
 private void opcClient_OnChybaKomunikace(string Message, bool autorestart)
 {
     Application.Current.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate
     {
         if (autorestart)
         {
             Vizualizace.Log(TypUdalosti.Error, Message + ". Pokusím se o restart komunikace.");
         }
         else
         {
             HandlerChyby("Chyba komunikace s OPC serverem!\n" + Message, true);
         }
     }));
 }
Пример #5
0
 /// <summary>
 /// Zobrazí se návod k aplikaci v nainstalovaném PDF prohlížeči
 /// </summary>
 private void comNnavodExecute(object sender, ExecutedRoutedEventArgs e)
 {
     try
     {
         System.Diagnostics.Process.Start(InitInfo.AdresarAplikace + @"\Data\Navod.pdf");
         Vizualizace.Log(TypUdalosti.Info, "comNnavodExecute");
     }
     catch (Exception ex)
     {
         Vizualizace.Log(TypUdalosti.Error, "Nepodařilo se otevřít soubor s návodem. Message: " + ex.ToString());
         MessageBox.Show("Nepodařilo se otevřít soubor s návodem\n\n" + ex.Message, "Chyba", MessageBoxButton.OK, MessageBoxImage.Error);
     }
     e.Handled = true;
 }
Пример #6
0
        /// <summary>
        /// Vytvoření a zobrazení okna pro ovládání stroje v režimu seřizování, načtení textů z XML, obsluha událostí...
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void comIOExecute(object sender, ExecutedRoutedEventArgs e)
        {
            Strana str       = WinVyberStrany.VyberStrany(false);
            bool   rightSide = ((str & Strana.Prava) != 0);

            string           strXml        = @"\Data\SerizovaniL.xml";
            WindowSerizovani winSerizovani = vizualizace.WinSerizovaniL;

            if (rightSide)
            {
                strXml = @"\Data\SerizovaniP.xml";
            }

            if ((str != Strana.Zadna) && (InitInfo.Ladeni || (vizualizace.Stroj.OpcClient != null && vizualizace.Stroj.OpcClient.PrijataData.EnableManual.Value)))
            {
                try
                {
                    Vizualizace.Log(TypUdalosti.Info, "Aktivován režim seřizování");
                    winSerizovani       = new WindowSerizovani(InitInfo.AdresarAplikace + strXml);
                    winSerizovani.Title = rightSide ? "Seřizování - Pravá strana" : "Seřizování - Levá strana";
                    if (rightSide)
                    {
                        vizualizace.WinSerizovaniP = winSerizovani;
                    }
                    else
                    {
                        vizualizace.WinSerizovaniL = winSerizovani;
                    }
                    winSerizovani.ShowDialog();
                    vizualizace.WinSerizovaniL = null;
                    vizualizace.WinSerizovaniP = null;
                }
                catch (Exception ex)
                {
                    try { winSerizovani.Close(); }
                    catch { }
                    winSerizovani = null;
                    string strErr = "Nepodařilo se vytvořit formulář vstupů/výstupů. ";
                    vizualizace.HandlerChyby(strErr + "Message: " + ex.Message, false);
                }
            }
        }
Пример #7
0
        /// <summary>
        /// Inicializace watchdogů, které budou hlídat, jestli bliká livebit
        /// </summary>
        private void inicializaceWatchDogu()
        {
            watchDog            = new WatchDog(8);
            watchDog.OnTimeout += () =>
            {
                mainWinRef.labelErrKomunikacePLC.Visibility = Visibility.Visible;  //Varovná hláška, že PLC nekomunikuje
                Vizualizace.Log(TypUdalosti.Warning, "PLC nekomunikuje");
            };
            watchDog.OnReseted += () => { mainWinRef.labelErrKomunikacePLC.Visibility = Visibility.Collapsed; };
            Stroj.OpcClient.PrijataData.LiveBitCopy.OnChangeValue += (varValue) => { watchDog.Reset(); };

            watchDogShutdown = new WatchDog(40);
            XmlRW xmlRw = new XmlRW(InitInfo.AdresarDat + SettingsXml);

            if (xmlRw.ReadBool("ShutdounWatchdog", "Enable", true) && !InitInfo.Ladeni)
            {
                watchDogShutdown.OnTimeout += new WatchDog.TimeoutHandler(watchDogShutdown_OnTimeout);  //Vypnutí PC
            }
            Stroj.OpcClient.PrijataData.LiveBitCopy.OnChangeValue += (varValue) => { watchDogShutdown.Reset(); };
        }
Пример #8
0
        /// <summary>
        /// Konstruktor hlavního okna, při jeho provádění je zobrazen splashscreen
        /// </summary>
        public MainWindow()
        {
            InitializeComponent();

            vizualizace = VizualizaceZ215060_8.Instance; //Inicializace základní třídy vizualizace
            Vizualizace.Log(TypUdalosti.Info, "Spuštění programu (Verze " + WindowAbout.GetVersion() + ")");

            /*nacistDataZXml();*/

            if (InitInfo.ParWait != 0)  //Prodleva před inicializací (aplikace byla spuštěna s parametrem "/Wait")
            {
                System.Threading.Thread.Sleep(InitInfo.ParWait);
            }

            // VyssiOpravneni = new Role("VyssiOpravneni", InitInfo.AdresarDat + SettingsXml, 5);  //Objekt sloužící k přihlášení do vyššího uživatelského oprávnění a odhlášení
            VizualizaceZ215060_8.VyssiOpravneni.OnAutologout += () => { ((ICommand)CommandLogout).Execute(null); };  //Zavolání commandu logout  Poznámka: pokud by zde bylo this.comLogoutExecute(this, null);, LogOut by se zavolal i když hlavní okno nemá focus. To by ale mohlo způsovit, že by se nějaké modální okno (např WinSeřizování) dospalo při přechodu do celoobrazovkového režimu dolu a aplikace by jakoby vytuhla.
            akce();

            try
            {
                vizualizace.InicializaceVizualizace();
            }
            catch (Exception ex)
            {
                vizualizace.HandlerChyby("Chyba při inicializaci vizualizace: " + ex.Message, true);
            }

            if (InitInfo.Ladeni)
            {
                Vizualizace.Log(TypUdalosti.Info, "Aktivován režim \"ladění\"");
                this.Title = this.Title + "  ***REŽIM LADĚNÍ***";
            }
            else
            {
                StackPanelLadeni.Visibility = Visibility.Collapsed;
            }

            InitInfo.InitDone = true;
        }
Пример #9
0
 /// <summary>
 /// Reakce na chybu - vhození hlášky, zapsání do logu, případně ukončení aplikace
 /// </summary>
 /// <param name="hlaska"></param>
 /// <param name="ukonceni"></param>
 public void HandlerChyby(string hlaska, bool ukonceni)
 {
     dispatcher.Invoke(DispatcherPriority.Send, new Action(delegate
     {
         string strLog  = hlaska;
         string strMess = hlaska;
         if (ukonceni)
         {
             string konec = " Aplikace bude ukončena";
             strLog      += konec;
             strMess     += "\n\n" + konec;
         }
         Vizualizace.Log(TypUdalosti.Error, strLog);
         ShowErrorMsg(strMess);
         if (ukonceni)
         {
             MainWindow mw = Application.Current.MainWindow as MainWindow;
             if (mw != null)
             {
                 mw.Close();
             }
         }
     }));
 }
Пример #10
0
        /// <summary>
        /// Vynulování statistik
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void comVynulovatExecute(object sender, ExecutedRoutedEventArgs e)
        {
            Strana str = WinVyberStrany.VyberStrany(true);

            if (str != Strana.Zadna)
            {
                MessageBoxResult mBRes = MessageBox.Show("Chcete opravdu vynulovat statistiky?", "Vynulování", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No);
                if (mBRes == MessageBoxResult.Yes)
                {
                    vizualizace.Stroj.OpcClient.DataKOdeslani.L.ResetStatistik.Value = ((str & Strana.Leva) != 0);
                    vizualizace.Stroj.OpcClient.DataKOdeslani.P.ResetStatistik.Value = ((str & Strana.Prava) != 0);
                    DispatcherTimer dt = new DispatcherTimer();
                    dt.Interval = TimeSpan.FromSeconds(2);
                    dt.Tick    += (se, ea) =>
                    {
                        vizualizace.Stroj.OpcClient.DataKOdeslani.L.ResetStatistik.Value = false;
                        vizualizace.Stroj.OpcClient.DataKOdeslani.P.ResetStatistik.Value = false;
                        dt.Stop();
                    };
                    dt.Start();
                    Vizualizace.Log(TypUdalosti.Info, "Vynulovány statistiky");
                }
            }
        }
Пример #11
0
        //Metody pro obsluhu různých událostí (klávesové zkratky, ukonření aplikace, neošetřený vyjímka apod...)
        #region Udalosti

        //Ukončení aplikace
        private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
        {
            vizualizace.UvolnitZdroje();
            Vizualizace.Log(TypUdalosti.Info, "Ukončení programu");
        }