をMS Visual Community 2015
で使用すると、次の問題を実装するより良い方法はありますか?私は確信していますが、私はC#に新しいので、質問です。"イベントハンドリング"の効率
private void button6_Click(object sender, EventArgs e)
{
byte[] a = new byte[9]; // this is just command for motor
a[0] = 1; // to start rotating
a[1] = 1; //
a[2] = 0; //
a[3] = 0; //
a[4] = 0; //
a[5] = 0; //
a[6] = 0; //
a[7] = 63; //
a[8] = 65; //
serialPort3.Write(a, 0, a.Length);
string b = serialPort2.ReadLine();
decimal caliber = decimal.Parse(Regex.Split(b, "SR,00,002,")[1]);
decimal b1 = 0;
do
{
serialPort2.WriteLine("SR,00,002\r\n");
string z = serialPort2.ReadLine();
b1 = decimal.Parse(Regex.Split(z, "SR,00,002,")[1]);
}
while (b1 <= caliber);
byte[] c = new byte[9]; // this is command to stop rotating
c[0] = 1; //
c[1] = 3; //
c[2] = 0; //
c[3] = 0; //
c[4] = 0; //
c[5] = 0; //
c[6] = 0; //
c[7] = 0; //
c[8] = 04; //
serialPort3.Write(c, 0, c.Length);
}
私は余分な機能としてモータコマンドを持っていますが、これはテスト用です。私の目標は、SerialPort
が値の変化を返すまでモータを回転させることです。 serialPort2
はセンサで、デフォルト値は約-3500です(常にちょっと変わってしまいますので、私は口径として設定します)。モーターはセンサーを動かします。私は口径から値が変わるとすぐにモーターを停止させたい(そしてモーターポジションは保存される)。
私のコードは計画どおりに動作していますが、私のマシン上ではかなり速いですが、効率的な方法がシリアルポート2スーパーを頻繁にチェックする必要があるかどうかはわかりません。
また、シリアルポートからデータを読み込んで返すための特別な関数を作成します。私の理解では、コードを実行する方法は変更されませんが、見た目は短くなります。
私のプログラマーのこの部分は、1回のキャリブレーションにのみ使用され、あまり頻繁には使用されませんが、「特定のイベントが発生するまでイベントを実行する」のような類似のものは、 C#のやり方については、あなたの意見や助けに感謝します。
['SerialPort.DataReceived event'](https://msdn.microsoft.com/en-us/library/system.io.ports.serialport.datareceived(v = vs.110))の使用を検討しましたか? aspx)? – stuartd
@stuartdまだありません。前述したように、これまでC#はあまりおこなわれていませんでしたが、これを読んでいます。ありがとう –
使用例については[シリアルポートポーリングとデータ処理](http://stackoverflow.com/questions/15124132/serial-port-polling-and-data-handling)を参照してください。 – stuartd