-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();
            }

        }
    }
}

以上是获取步进电机当前位置的代码。下面是我的输出的链接。但我无法将其格式化为数字。

这是:步进电机的手动控制器(第 28 页)

这是输出:我的输出图片

4

1 回答 1

4

您大大高估了串行端口的速度;

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

ReadExisting:根据编码,在 SerialPort 对象的流和输入缓冲区中读取所有立即可用的字节。

当您调用ReadExisting时,它会立即返回串行端口缓冲区中已经可用的数据,可能远在连接的设备甚至收到POS命令之前。

于 2013-07-05T08:32:40.090 回答