在C#串行接口中写入紧急停止按钮

时间:2016-05-31 18:08:59

标签: c# serial-port backgroundworker

我正在编写一个串行接口来与控制器进行通信,控制器控制我的机器人的短链接。我担心它会在移动时撞墙,所以我想创建一个紧急停止按钮,这样当我按下它时,机器人将立即停止移动,只有当我发送释放命令“!MG”时才能继续工作。

现在我有两个短按钮和长链接按钮,即。 CW和CCW。我希望停止按钮可以阻止两个链接同时移动。如何通过使用backgroundWorker来实现这一点?我不知道如何在DoWork中安排代码,因为只有点击CW或CCW按钮才能移动长链接和短链接,这使得在DoWork中很难监视它/ p>

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e){}

这是我的shortLinkCW按钮示例,我使用了另一种方法       ShortLinkCW(字符串角度) 覆盖所有命令应该在CW按钮中完成,

  private void ShortLinkCW(string Angle)
    {
        backgroundWorker1.WorkerReportsProgress = true;
        backgroundWorker1.RunWorkerAsync();
        DateTime dt = DateTime.Now;
        String dtn = dt.ToShortTimeString();
        String angle_string = Angle;
        double angle = Convert.ToDouble(angle_string);
        int encoder = 0;
        String encoder_string = encoder.ToString();
        String data = "!PR 1 " + encoder_string + '\r';
        while (angle > 60)
        {

            encoder = Convert.ToInt32(60 * 22.76);
            encoder_string = encoder.ToString();
            data = "!PR 1 " + encoder_string + '\r';
            shortPort.Write(data);
            angle = angle - 60;
            Thread.Sleep(2000);
        }
        encoder = Convert.ToInt32(angle * 22.76);
        encoder_string = encoder.ToString();
        data = "!PR 1 " + encoder_string + '\r';
        shortPort.Write(data);
        txtReceive.AppendText("[" + dtn + "] " + "Sent: " + data + "\n");
        Thread.Sleep(2000);
        getEncoderValueAndCoordinates();

    }

对于CW按钮,我只是调用此方法。

    private void ShortLinkClockwise_Click(object sender, EventArgs e)
    {
        if (shortPort == null)
            txtReceive.AppendText("ShortPort isn't open yet!" + "\n");
        else
            esSCW(ShortLinkAngle.Text, "shortCW");
    }

有什么建议让我监控Do_work中链接的移动并随时阻止它们(see image here)?

我突然想到的一件事是,如果我能以某种方式注意到在Do_work中点击CW或CWW按钮,然后我可以像ShortLinkCW(字符串角度)一样调用该函数,然后在必要时停止它。有可能吗?

0 个答案:

没有答案