Example #1
0
        private void StartProgram()
        {
            try
            {
                if (!IsProgramRunning)
                {
                    LogDateTimeStart = DateTime.Now;
                    PropertiesToolStripMenuItem.Enabled = false;
                    SPort.PortName = PortName;
                    SPort.Open();
                    _continue            = true;
                    TimeLeft             = 0;
                    TimeLeftTextBox.Text = ((TimerSetting - TimeLeft) / 1000) + @" сек.";
                    // Включаем таймер обновления времени и даты.
                    DateTimeUpdateTimer.Enabled  = true;
                    RotateTimer.Interval         = TimerSetting;
                    RotateTimer.Enabled          = true;
                    ErrorEmailSendTimer.Interval = (2 * TimerSetting + 1000 * 60 * 10);
                    ErrorEmailSendTimer.Enabled  = true;

                    // Считаем угол азимута и элевации.
                    CalculateCurrentAngles(false);

                    DrawAzimuth((int)Math.Round(_SPAData.Azimuth, 0));
                    DrawElevation((int)Math.Round(90 - _SPAData.Zenith, 0));

                    AzimuthTextBox.Text   = Math.Round(_SPAData.Azimuth, 1) + @"°";
                    ElevationTextBox.Text = Math.Round(90 - _SPAData.Zenith, 1) + @"°";

                    ToggleProgramStatus(true);

                    Program.ConsoleForm.Show();
                    Program.ConsoleForm.Invoke(СonsoleDelegate, new Object[] { "Программа запущена (" +
                                                                               $"Широта: {AreaLatitude}, " +
                                                                               $"Долгота: {AreaLongitude}, " +
                                                                               $"Часовой пояс: {(TimeZone > 0 ? "+" + TimeZone : TimeZone.ToString())} (GTM), " +
                                                                               $"Уставка по времени: {$"{(TimerSetting) / 1000 / 60 / 60 % 24} ч. {(TimerSetting) / 1000 / 60 % 60} м. {(TimerSetting) / 1000 % 60} с."}, " +
                                                                               $"Порт: {PortName}, " +
                                                                               $"Драйвер трекера: {DriverPath.Split('\\').Last()}).",
                                                                               Color.Red });

                    CalculateCurrentAngles(true);

                    // Если солнце не зашло, то поворачиваемся.
                    if (90 - _SPAData.Zenith > 0)
                    {
                        SPortWrite((string)DriverMethod.Invoke(null, new object[] { Math.Round(_SPAData.Azimuth, 1), Math.Round(_SPAData.Zenith, 1) }));
                        Program.ConsoleForm.Invoke(СonsoleDelegate, new Object[] { $"Производится поворот на угол по азимуту: {Math.Round(_SPAData.Azimuth, 1)}°, по элевации: {Math.Round(90 - _SPAData.Zenith, 1)}° (команда: {(string)DriverMethod.Invoke(null, new object[] { Math.Round(_SPAData.Azimuth, 1), Math.Round(_SPAData.Zenith, 1) })}).", Color.Green });
                    }
                    else
                    {
                        Program.ConsoleForm.Invoke(СonsoleDelegate, new Object[] { $"Солнце зашло (расчетная элевация {Math.Round(90 - _SPAData.Zenith, 1)}°). Поворот не требуется.", Color.Green });
                    }
                }
                else
                {
                    ToggleProgramStatus(false);
                    Program.ConsoleForm.Invoke(СonsoleDelegate, new Object[] { "Программа остановлена.", Color.Red });
                    SPort.Close();
                }
            }
            catch (Exception ex)
            {
                ToggleProgramStatus(false);
                CalculateCurrentAngles(false);
                Program.ConsoleForm.Invoke(СonsoleDelegate, new Object[] { "Программа остановлена.", Color.Red });
                SPort.Close();
                Program.ConsoleForm.Invoke(СonsoleDelegate, new Object[] { $"В ходе запуска программы возникла ошибка: {ex}. \n\nПожалуйста, проверьте настройки программы.", Color.Red });
            }
        }
Example #2
0
 private void Form1_FormClosed(object sender, FormClosedEventArgs e)
 {
     SPort.Close();
     readSerial.Abort();
     buttonReader.Abort();
 }
        //*** These methods will be for the arduino scale model. ***//

        /// <summary>
        /// Closes the serial port that was opened in SPort.
        /// </summary>
        public void CloseSerialPort()
        {
            SPort.Close();
            logger.Info("Serial port has been closed.");
        }