首先我尝试指定问题。我有2个设备通过串口连接到我的笔记本电脑。 SerialPort2是传感器,另一个是电机。我在程序中提前保存了一个特定的Motorposition。我现在想让电机返回到这个位置,然后从传感器读取值。
与电机的通信如下:
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"但它并没有打破循环。电机无响应发出停止旋转的信号。任何帮助都会被贬低。