0

ステージを制御するためのスクリプトをZaber コンソールで作成しましたが、移動中にセンサーの読み取り値を取得したいと考えています。ステージを動かして読み、またステージを動かしたい。センサーの読み取り値が、必要な動きに影響を与えることがあります。動きをセンサーの読み取り値とどのように調整できますか?

1 つのシリアル ポートで Zaber デバイスと通信し、2 番目のシリアル ポートでセンサーと通信したいと考えています。

4

1 に答える 1

0

Zaber コンソール スクリプトを作成すると、Microsoft.NET フレームワークのすべてにアクセスできるため、自分で 2 つ目のシリアル ポートを開くことができます。これは、圧力センサーで一定の圧力を維持しようとする簡単な例です。ループを通過するたびに、圧力センサーを読み取り、デバイスを引っ込めて圧力を上げるか、デバイスを伸ばして圧力を下げます。

// C# example that shows how to communicate with a second serial port
#template(simple)

const string LOAD_PORT = "COM9";
const int MAX_SPEED = 20000;
const int TARGET_PRESSURE = 1000; // in thousandths of a pound

// set up load cell on serial port
using (var port = new System.IO.Ports.SerialPort())
{
    port.PortName = "COM9";
    port.BaudRate = 9600;
    port.ReadTimeout = 500;
    port.WriteTimeout = 500;

    port.Open();

    port.WriteLine("ct0\r");
    port.ReadLine();

    while ( ! IsCanceled)
    {
        port.WriteLine("o0w1\r");
        var pressure = Int32.Parse(port.ReadLine());
        int velocity = (pressure - TARGET_PRESSURE) * 20;
        int speed = Math.Min(Math.Abs(velocity), MAX_SPEED);
        velocity = speed * Math.Sign(velocity);
        Conversation.Device.Send(Command.MoveAtConstantSpeed, velocity);
    }
}

このusingブロックは、エラーが発生した場合でもシリアル ポートを確実に閉じます。私が使用した圧力センサーはct0、風袋コマンドおよびo0w1現在の圧力を返すコマンドとして理解されていました。センサーのマニュアルを参照して、センサーが理解できるコマンドを確認する必要があります。また、使用するボーレートやその他の設定を調べる必要があります。SerialPortドキュメントには、設定できるすべての通信パラメータがリストされています。

センサーの読み取り値からデータを記録する場合、1 つのオプションはOutput.WriteLine(data)、出力ウィンドウにデータ値をダンプするために使用することです。次に、それらをコピーしてスプレッドシートまたはその他のファイルに貼り付けることができます。ファイルに直接書き込みたい場合は、File.CreateText()メソッドを参照してください。

于 2012-10-10T18:45:41.593 に答える