2013-02-10 15 views
-1

Я написал простую программу, которая отправляет AT-команду через последовательный порт. я выполнил указание MSDN EXAMPLEПоследовательный порт WriteLine иногда не работает

Последовательный порт (38400, N, 8,1)

serialPort1.PortName = "COM" + "5";// textBox1.Text; 
     try 
     { 
      if (!(serialPort1.IsOpen)) 
       serialPort1.Open(); 


      // if (listBox1.SelectedIndex == 0 || listBox1.SelectedIndex == 1) 
       serialPort1.WriteLine("atrst"); 
      // else 
      //  serialPort1.WriteLine("araprst"); 

      serialPort1.Close(); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("Error opening/writing to serial port :: " + ex.Message, "Error!"); 
      Application.Exit(); 
     } 

Когда я использую команду WriteLine иногда команда AT не посылать в порт. Любая идея, почему ?, Есть ли способ узнать, что WriteLine (String) терпит неудачу?

+0

Каков ваш код? Насколько велика команда, какова ваша скорость в бодах. – Serdalis

+0

Вы пытались обработать событие [ErrorReceived] (http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.errorreceived.aspx)? –

+0

Это ваш фактический код? вы, кажется, ничего не настраиваете или даже не инициализируете SerialPort. – Serdalis

ответ

0

Есть несколько причин для того, что вы описали, и что в статье MSDN есть ... интересный ... код. Из вашего фрагмента кода я вижу, что вы правильно настроили последовательный порт, поэтому я опубликую рабочий пример с настройками, которые вы указали, и надеемся, что это поможет.

serialPort = new SerialPort(
       "COM5",  // port name 
       38400,  // baud rate 
       Parity.None, // parity 
       8,   // bits 
       StopBits.One // stop bits 
      ); 

serialPort.Handshake = Handshake.None; 
serialPort.WriteTimeout = 500; 

serialPort.Open(); 
serialPort.Write("atrst"); 
serialPort.Close(); 

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

+0

Привет Спасибо за ответ; проблема заключается не в настройке последовательного порта. Вся конфигурация порта была выполнена в окнах свойств. Я также пробовал ваш код, но проблема остается прежней, иногда пакет не передается на последовательный порт – user951538

+0

У вас есть правильное установление связи? Вы уверены, что пакет не передан, возможно, устройство просто не ожидает данных в это время и опустит его. Для тестирования вы должны использовать сочетание http://sourceforge.net/projects/com0com/ и 'putty', чтобы увидеть, действительно ли поток отправляет данные. – Serdalis

Смежные вопросы