Beispiel #1
0
        private void frmMain_Load(object sender, EventArgs e)
        {
            ReadConfigSetting();
            CreateMenuReport();
            /* Создаем объект порт */
            cPort = new SPort();
            try
            {
                cPort.Open();
            }
            catch
            {
                MessageBox.Show("Нет доступа к порту!", "Ошибка запуска.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            try
            {
                Config cConf = new Config();
                intervalNewData = cConf.getPeriod() * 1000;
                //StartStopProcess(TermStart);
            }
            catch (Exception err)
            {
                StartStopProcess(Convert.ToBoolean(TerminalAct.Stop));
                MessageBox.Show(err.Message, "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                lblInfo.Text = "Ошибка в работе системы!";
            }

            //cPort.CurrentDataMode = SPort.DataMode.Hex;
            //cPort.SendData("2f3f210D0A");

            //cPort.SendData("8D0AAF3F218D0A1001101F1D10020930093030330C1003C515");
            //string retdata = cPort.ReturnData();
        }
Beispiel #2
0
        private void SPortRead(object sender, SerialDataReceivedEventArgs e)
        {
            while (_continue)
            {
                try
                {
                    if (SPort.IsOpen)
                    {
                        byte[] buffer    = new byte[SPort.ReadBufferSize];
                        int    bytesRead = SPort.Read(buffer, 0, buffer.Length);
                        _tString += Encoding.ASCII.GetString(buffer, 0, bytesRead);

                        if (_tString.IndexOf((char)_char) > -1)
                        {
                            string workingString = _tString.Substring(0, _tString.IndexOf((char)_char));
                            _tString = _tString.Substring(_tString.IndexOf((char)_char));
                            Program.ConsoleForm.Invoke(СonsoleDelegate, new Object[] { workingString, Color.Blue });
                            if (workingString.StartsWith("OK"))
                            {
                                OldCurrentAzimuth   = CurrentAzimuth;
                                OldCurrentElevation = CurrentElevation;
                                CurrentAzimuth      =
                                    float.Parse(workingString.Replace("OK", string.Empty).Replace('.', ',').Split(' ')[0]);
                                CurrentElevation =
                                    float.Parse(workingString.Replace("OK", string.Empty).Replace('.', ',').Split(' ')[1]);
                            }
                            _tString = string.Empty;
                        }
                    }
                }
                catch (Exception) { }
            }
            GC.WaitForPendingFinalizers();
            GC.Collect();
        }
Beispiel #3
0
 void Serial()
 {
     while (true)
     {
         lblMostra.Text += SPort.ReadLine();
         lblMostra.Text += "\r\n";
     }
 }
 public bool SendSerialPortMessage(string jsonOrientation)
 {
     Data = System.Text.Encoding.ASCII.GetBytes(jsonOrientation);
     Thread.Sleep(10);
     SPort.Write(Data, 0, Data.Length);
     Thread.Sleep(10);
     logger.Info("Message sent to Arduino");
     return(true);
 }
        /// <summary>
        /// Gets a message from the specified serial port in SPort.
        /// </summary>
        /// <returns> Returns a string that was read from the serial port. </returns>
        public string GetSerialPortMessage()
        {
            Message = string.Empty;

            // Read all existing bytes in the stream.
            Message = SPort.ReadExisting();

            logger.Info("Message received from Arduino.");
            return(Message);
        }
Beispiel #6
0
        public void Init(String Port)
        {
            SPort.PortName = Port;
            SPort.BaudRate = 9600;
            SPort.Open();
            Thread.Sleep(100);

            PinMode(22, INPUT);
            PinMode(PinDefs.MotorLR, OUTPUT);     //LR
            PinMode(PinDefs.MotorLF, OUTPUT);     //LF
            PinMode(PinDefs.MotorRR, OUTPUT);     //RR
            PinMode(PinDefs.MotorRF, OUTPUT);     //RF
        }
Beispiel #7
0
 private void findPort()
 {
     for (int i = 0; i <= 20; i++)
     {
         try
         {
             SPort.PortName = "COM" + i;
             SPort.Open();
             ComboPorta.Text = "COM" + i;
             if (SPort.IsOpen)
             {
                 break;
             }
         }
         catch (System.IO.IOException) { }
     }
 }
Beispiel #8
0
 private void sendData(string data)
 {
     transformingDataToString(data);
     SPort.WriteLine(data);
 }
Beispiel #9
0
 private void Form1_FormClosed(object sender, FormClosedEventArgs e)
 {
     SPort.Close();
     readSerial.Abort();
     buttonReader.Abort();
 }
Beispiel #10
0
 private void SPortWrite(string message)
 {
     message = message.Replace(',', '.') + "\r";
     SPort.Write(message.ToCharArray(), 0, message.Length);
 }
Beispiel #11
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 });
            }
        }
        //*** 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.");
        }