2013-07-20 2 views
1

У меня возник вопрос, связанный с чтением последовательного порта и обработкой кода.Чтение последовательного порта

Устройство Я работаю с это сканер/масштаб я делаю свою программу шоу постоянного веса, а также сканирование штрих-кода

comport.NewLine = "\r"; 
comport.Write("S14\r"); 
while (comport.BytesToRead > 0) 
{ 
    data = comport.ReadLine(); 

    if (data.StartsWith("S08")) 
    { 
     try 
     { 
      string data1 = data.Substring(4); 
      data1 = data1.Trim(); 

      textBox1.Clear(); 
      textBox1.AppendText(data1); 
      timer3.Stop(); 
      scan(); 
      timer3.Start(); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.ToString()); 
     } 
     comport.DiscardInBuffer(); 
    } 
    else if (data.StartsWith("S144")) 
    { 
     if (data == "S1440000") 
     { 
      label8.Text = "0.00"; 
     } 
     else 
     { 
      string data3 = data.Substring(4); 
      data3 = data3.Trim(); 
      var data4 = data3.Insert(2, "."); 
      string data5 = double.Parse(data4).ToString("F", CultureInfo.GetCultureInfo("en-US")); 

      label8.Text = data5; 
      comport.DiscardInBuffer(); 
     } 
    } 
    else if (data == "S143") 
    { 
     label8.Text = "0.00"; 
    } 
    else if(data =="S145") 
    { 
     label8.Text = "- - - - -"; 
    } 
    else if(data == "S141") 
    { 
     label8.Text = "- - - - -"; 
    } 
} 

Это покажет вес постоянно и до тех пор, пока не вес он сканирует штрих-код im, пытаясь понять, почему, когда есть вес, он не сканирует, обратите внимание, что если я скачу 7 раз, он может поймать его один раз из 10 раз

Редактировать ok Теперь я знаю, почему его нет он обрабатывает только upc, когда он первый в полученных данных от сканера, но я не знаю, как правильно сортировать это, я смотрел, как d ата был пришедший в и она была пришедшая несколько способов

когда-нибудь я буду получать это от сканера

S143.S08A07166200024. иногда S1440050.S08A0716620024. иногда S08A0716620024.S143.

есть ли у кого-нибудь какие-либо предложения по поводу того, как я должен читать это, чтобы все мои утверждения if загорелись независимо от того, какой заказ получил данные?

+0

Пожалуйста, удалите закомментированный код, если это действительно необходимо. –

ответ

0
comport.NewLine = "\r"; 
comport.Write("S14\r"); 
while (comport.BytesToRead > 0) 
{ 
    data = comport.ReadLine(); 

if (data.StartsWith("S08")) 
{ 
    try 
    { 
     string data1 = data.Substring(4); 
     data1 = data1.Trim(); 

     textBox1.Clear(); 
     textBox1.AppendText(data1); 
     timer3.Stop(); 
     scan(); 
     timer3.Start(); 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.ToString()); 
    } 
    comport.DiscardInBuffer(); 
} 
else if (data.StartsWith("S144")) 
{ 
    if (data == "S1440000") 
    { 
     label8.Text = "0.00"; 
    } 
    else 
    { 
     string data3 = data.Substring(4); 
     data3 = data3.Trim(); 
     var data4 = data3.Insert(2, "."); 
     string data5 = double.Parse(data4).ToString("F", CultureInfo.GetCultureInfo("en-US")); 

     label8.Text = data5; 
     comport.DiscardInBuffer(); 
    } 
} 
else if (data == "S143") 
{ 
    label8.Text = "0.00"; 
} 
else if(data =="S145") 
{ 
    label8.Text = "- - - - -"; 
} 
else if(data == "S141") 
{ 
    label8.Text = "- - - - -"; 
} 
} 

изменил мой, если цикл в то время как

0

им пытаются выяснить, почему, когда есть масса будет не сканировать, отметить, что, если я просматриваю 7 раз он может поймать его когда-то один из 10 раз

Вам нужно для отладки кода, поставить точку останова &/или Debug.Print (данные) заявления понять, почему только один из десяти раз она встречает первое if условие:

if (comport.BytesToRead > 0) 
{ 

if (data.StartsWith("S08")) 
    { 
     textBox1.Text = data.Substring(4).Trim(); 
     timer3.Stop(); 
     scan(); 
     timer3.Start(); 
    } 

if (data.StartsWith("S144")) 
    { 
     if (data == "S1440000") 
     { 
      label8.Text = "0.00"; 
     } 
     else 
     { 
      string data3 = data.Substring(4); 
      data3 = data3.Trim(); 
      var data4 = data3.Insert(2, "."); 
      string data5 = double.Parse(data4).ToString("F", CultureInfo.GetCultureInfo("en-US")); 

      label8.Text = data5; 
     } 
    } 

if (data == "S143") 
    { 
     label8.Text = "0.00"; 
    } 

if (data =="S145") 
    { 
     label8.Text = "- - - - -"; 
    } 

if (data == "S141") 
    { 
     label8.Text = "- - - - -"; 
    } 

    comport.DiscardInBuffer(); 
} 

Edit:

Кто-нибудь есть какие-либо предложения о том, как я должен идти о чтении этого так что все мои заявления, если огонь, независимо от того, что порядок данные Recevied в?

Не делайте их else if. Сделайте каждый свой собственный if. Очевидно, что если есть большое количество if-х вы хотели бы архитектор это немного умнее, например: Alternative to writing many if statements?

+0

Я попробую, как я сказал, что он всегда будет работать. Я не имею веса, пока есть вес, он отправляет постоянные данные, а маленький флип, где он отправляет первый ответ, может не хватить времени или чего-то. – quatre432

+0

ok я нашел проблему см. Edit – quatre432

+0

Пожалуйста, см. Мое редактирование –