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 }); } }
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."); }