На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> Как опознать данные с порта COM в КПК? , VS 2005, C#, Pocket PC
    В общем, на кпк есть порты COM. На одном из их может быть GPS. ВОт таким кодом я их перебираю:
    ExpandedWrap disabled
      public void TestGPSConnections()
              {
                  System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.WaitCursor;
      //это я поставил значок загруженности
                  string[] lPorts = System.IO.Ports.SerialPort.GetPortNames();
      //взял из кпк все порты имеющиеся в наличии
                  String Portname="none";
      //и для каждого порта
                  foreach (string s in lPorts)
                  {
      //глобальные переменные
                      GPString = "";
      //строка гпс
                      MsgCount = 0;
                      GpsStop = false;
                      DataAvailable = false;
                      try
                      {
                          label1.Text = "Тестируется порт "+s;
                          Application.DoEvents();
                          serialPort1.Open();
                          timer1.Enabled = true;
                          while (MsgCount < 10)
                          {
                              
                              Application.DoEvents();
                          }
                          timer1.Enabled = false;
                          serialPort1.Close();
                          if (DataAvailable)
                              Portname = s;
                      }
                      catch
                      {
                      }
                  }
                  if (Portname == "none")
                  {  
                      MessageBox.Show("Не найдено GPS приемника");
                  }
                  else
                  {
                      MessageBox.Show("Найден GPS приемник на порте "+Portname);
                      comboBox1.Text = Portname;
                  }
                  System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.Default;
              }
       
      private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
              {
      //эта функция принимает данные
                  GPString = GPString + serialPort1.ReadExisting();
                  MsgCount++;
                  ParseGPSData();
              }
       
       
              public void ParseGPSData()
              {
      //эта их парсит и дает результ - данные являются ГПС или нет
                  string[] s = GPString.Split('\n');
                  GPString = s[s.Length - 1];
                  int i = 0;
                  foreach (string ss in s)
                  {
                      if (i == s.Length - 1)
                          break;
                      if (nmea(ss))
                          DataAvailable = true;
                      i++;
                  }
       
              }
       
      //это таймер. он на 1 секунду. Нужен потому что если порт открылся, но не передает данные, то MsgCOunt всегда будут=0 и программа будет в мертвом цикле
      private void timer1_Tick(object sender, EventArgs e)
              {
                  MsgCount++;
              }


    Но таймер не работает. ВОобще. Т.е. открывается первый порт и висит на нем пока не перезагрузишь КПК =(
    ЧТо делать?
    1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
    0 пользователей:


    Рейтинг@Mail.ru
    [ Script execution time: 0,0413 ]   [ 15 queries used ]   [ Generated: 18.07.25, 03:08 GMT ]