C#如何等待串口操作完成,直到执行下一次读取操作

时间:2016-12-12 16:20:09

标签: c# serial-port

首先我尝试指定问题。我有2个设备通过串口连接到我的笔记本电脑。 SerialPort2是传感器,另一个是电机。我在程序中提前保存了一个特定的Motorposition。我现在想让电机返回到这个位置,然后从传感器读取值。

与电机的通信如下:

  • 发送9字节数组,用于将输入信息存储到电机
  • 根据发送的命令,串口应答9字节数组。 getPosi()取一个空数组,用nessecary信息填充它并发送一个命令转换为"告诉我你当前的位置",答案包含这个位置。

我在全局缓冲变量" buf"中捕获DataReceived的所有答案。 (在我发送的每个命令之后被覆盖),并且稍后将我需要的位置存储在另一个全局" M" -varibal(单独保存方法)中的程序中。问题是,如果我发送命令MoveToSave()我立即得到答案,电机仍然旋转,下一个read()被执行(因此我得不到我想要的值)。

以下是代码,如果缺少任何重要的信息来理解代码,我稍后会添加。

    private void button14_Click(object sender, EventArgs e)
    {
        //move to save
        byte[] E = new byte[9];
        MoveToSave(E);
        byte[] F = new byte[9];
        do
        {
            getPosi(F); //overwrites buf with current position
        }
        while (M != buf)
        //code below is needed to get readable value from sensor
        serialPort2.WriteLine("SR,00,002\r\n");
        string b = serialPort2.ReadLine();
        decimal b1 = decimal.Parse(Regex.Split(b, "SR,00,002,")[1]);
        decimal Diffb = Math.Abs(b1 - caliberMid);
        textBox1.Text = "Mid Wall Thickness: " + Diffb;
        //move to 0
        byte[] D = new byte[9];
        MoveTo0(D);
    }

所以问题是,如何实现serialPort2.ReadLine()仅在电机返回其保存位置后执行。我目前的方式不起作用。它向我展示了getPosi()的答案,它和我存储的" M"但它并没有打破循环。电机无响应发出停止旋转的信号。任何帮助都会被贬低。

0 个答案:

没有答案