上位机状态机开发之旋转标定
一 平移旋转标定
/// <summary>
/// 平移旋转标定
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void materialButton17_Click(object sender, EventArgs e)
{
// 一 初始化操作
var task1 = Task.Run(() =>
{
//// 1.回零
//commomCMD.ReturnOrg();
//// 2.回避让位
//commomCMD.MoveSafePlace();
});
// 二运行主流程
// 协同取消操作
cts3 = new CancellationTokenSource();
// 当前步骤
CurrentStep3 = 0;
Task task2 = task1.ContinueWith(new Action<Task>(
(t) =>
{
bool result = RotateCalibProcess();
}), cts3.Token);
}
二 定义旋转标定工序
public enum RotateStep
{
旋转1,
旋转2,
旋转3,
旋转4,
旋转5,
}
三 定义全局变量
private CancellationTokenSource cts3;
//当前步骤
private RotateStep CurrentStep3 = 0;
public bool IsPause3 = false;
四 RotateCalibProcess
/// <summary>
/// 旋转标定流程
/// </summary>
/// <returns></returns>
private bool RotateCalibProcess()
{
// 循环
while (cts3.IsCancellationRequested == false)
{
Invoke(new Action(() =>
{
rtb_info.AppendText($"执行到步骤【{(int)CurrentStep3 + 1}】:" + CurrentStep3.ToString() + "\n");
}));
switch (CurrentStep3)
{
case RotateStep.旋转1:
// 1.移动到第一个位置
commomCMD.Move(txtMStartX.Text.Trim(), txtMStartY.Text.Trim(), txtMStartZ.Text.Trim(), -20);
// 2.触发拍照
CommunicateService.Instance.Send3("Rotate,-20");
// 3.(等待拍照结束)拍照结束才能走
Thread.Sleep(3000);
CurrentStep3++;
break;
case RotateStep.旋转2:
// 1.移动到第二个位置
// 1.移动到第一个位置
commomCMD.Move(txtMStartX.Text.Trim(), txtMStartY.Text.Trim(), txtMStartZ.Text.Trim(), -10);
// 2.触发拍照
CommunicateService.Instance.Send3("Rotate,-10");
// 3.(等待拍照结束)拍照结束才能走
Thread.Sleep(3000);
CurrentStep3++;
break;
case RotateStep.旋转3:
// 1.移动到第一个位置
commomCMD.Move(txtMStartX.Text.Trim(), txtMStartY.Text.Trim(), txtMStartZ.Text.Trim(), 0);
// 2.触发拍照
CommunicateService.Instance.Send3("Rotate,0");
// 3.(等待拍照结束)拍照结束才能走
Thread.Sleep(3000);
CurrentStep3++;
break;
case RotateStep.旋转4:
// 1.移动到第一个位置
commomCMD.Move(txtMStartX.Text.Trim(), txtMStartY.Text.Trim(), txtMStartZ.Text.Trim(), 10);
// 2.触发拍照
CommunicateService.Instance.Send3("Rotate,10");
// 3.(等待拍照结束)拍照结束才能走
Thread.Sleep(3000);
CurrentStep3++;
break;
case RotateStep.旋转5:
// 1.移动到第一个位置
commomCMD.Move(txtMStartX.Text.Trim(), txtMStartY.Text.Trim(), txtMStartZ.Text.Trim(), 20);
// 2.触发拍照
CommunicateService.Instance.Send3("Rotate,20");
// 3.(等待拍照结束)拍照结束才能走
Thread.Sleep(3000);
CurrentStep3++;
break;
default:
break;
}
// 暂停
while (true)
{
if (IsPause3)
{
Thread.Sleep(20);
System.Windows.Forms.Application.DoEvents();
}
else
{
break;
}
}
}
return false;
}
五 停止流程
/// <summary>
/// 停止流程
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void materialButton16_Click(object sender, EventArgs e)
{
cts3.Cancel();
}
六 暂停流程
/// <summary>
/// 继续运行
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void materialButton11_Click(object sender, EventArgs e)
{
IsPause3 = true;
}
七 继续流程
/// <summary>
/// 继续运行
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void materialButton11_Click(object sender, EventArgs e)
{
IsPause3 = false;
}


690

被折叠的 条评论
为什么被折叠?



