-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 に答える