2013-07-05 3 views
-1
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO.Ports; 
using System.Threading; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 

      SerialPort sp = new SerialPort(); 
      sp.PortName = "COM1"; 
      sp.BaudRate = 9600; 
      sp.Open(); 

      if (sp.IsOpen) 
      { 
       sp.Write("ENA;"); 
       Thread.Sleep(1000); 

       sp.Write("POS;"); 
       Thread.Sleep(1000);      
       string msgPos = sp.ReadExisting(); 

       Console.WriteLine(msgPos); 

       sp.Write("OFF;"); 
       sp.Close(); 
       Console.ReadKey(); 
      } 

     } 
    } 
} 

Выше приведен код для определения текущего положения шагового двигателя. под ссылкой на мой вывод. Но я не могу отформатировать его до цифр.Форматирование вывода в C#

Вот: Manual controler for stepper motor (page 28)

Вот результат: Picture of my output

+0

Спросите производителя шагового двигателя SDK. Никто другой не может сказать. Возможно, они могут, если вы объясните, что такое 'sp', какой SDK/API вы используете и какое руководство пришло с двигателем. – CodeCaster

+1

Хм, да, да ... (стиль Beavis и Butthead) 'POS' ... :-) На более серьезной ноте, что и где находится' sp'? Некоторые StreamReader? Вы используете библиотеку и какую библиотеку? Нам нужно больше кода, пожалуйста. – Belogix

ответ

4

Вы очень преувеличение скорости последовательного порта;

sp.Write("POS;");     // Writes the data to the serial port 
string msg = sp.ReadExisting(); // Immediately reads already available data 

ReadExisting: считывает все сразу доступные байты, на основании кодирования, как в потоке и входного буфера объекта SerialPort.

Когда вы звоните ReadExisting, он будет немедленно вернуться с данными, которые уже доступны в последовательный порт буферов, вероятно, задолго до того, подключенное устройство даже получил команду POS.

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