上位机状态机开发之旋转标定 一 平移旋转标定 /// <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 ; }