上位机状态机开发之九点标定
一 开始运行
/// <summary>/// 开始运行/// </summary>/// <param name="sender"></param>/// <param name="e"></param>privatevoidmaterialButton13_Click(objectsender,EventArgse){// 一 初始化操作vartask1=Task.Run(()=>{//// 1.回零//commomCMD.ReturnOrg();//// 2.回避让位//commomCMD.MoveSafePlace();});// 二运行主流程// 协同取消操作cts=newCancellationTokenSource();// 当前步骤CurrentStep=0;Tasktask2=task1.ContinueWith(newAction<Task>((t)=>{boolresult=NinePointCalibProcess();}),cts.Token);}
二 定义全局变量
/// <summary>/// 协同取消操作/// </summary>privateCancellationTokenSourcects;//当前步骤privateNPointStepCurrentStep=0;
三 定义运行流程
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespace上位机程序.Procedures{publicenumNPointStep{平移1,平移2,平移3,平移4,平移5,平移6,平移7,平移8,平移9,平移10,平移11,平移12,平移13,平移14,}}
四 九点标定流程
/// <summary>/// 九点标定流程/// </summary>/// <returns></returns>privateboolNinePointCalibProcess(){// 循环while(cts.IsCancellationRequested==false){Invoke(newAction(()=>{rtb_info.AppendText($"执行到步骤【{(int)CurrentStep+1}】:"+CurrentStep.ToString()+"\n");}));switch(CurrentStep){caseNPointStep.平移1:// 1.移动到第一个位置commomCMD.Move1();// 2.触发拍照CommunicateService.Instance.Send3("Calib,140,10");// 3.(等待拍照结束)拍照结束才能走Thread.Sleep(3000);CurrentStep++;break;caseNPointStep.平移2:// 1.移动到第二个位置commomCMD.Move2();// 2.触发拍照CommunicateService.Instance.Send3("Calib,140,-10");// 3.(等待拍照结束)拍照结束才能走Thread.Sleep(3000);CurrentStep++;break;caseNPointStep.平移3:commomCMD.Move3();// 2.触发拍照CommunicateService.Instance.Send3("Calib,140,-30");// 3.(等待拍照结束)拍照结束才能走Thread.Sleep(3000);CurrentStep++;break;caseNPointStep.平移4:commomCMD.Move4();// 2.触发拍照CommunicateService.Instance.Send3("Calib,160,10");// 3.(等待拍照结束)拍照结束才能走Thread.Sleep(3000);CurrentStep++;break;caseNPointStep.平移5:commomCMD.Move5();// 2.触发拍照CommunicateService.Instance.Send3("Calib,160,-10");// 3.(等待拍照结束)拍照结束才能走Thread.Sleep(3000);CurrentStep++;break;caseNPointStep.平移6:commomCMD.Move6();// 2.触发拍照CommunicateService.Instance.Send3("Calib,160,-30");// 3.(等待拍照结束)拍照结束才能走Thread.Sleep(3000);CurrentStep++;break;caseNPointStep.平移7:commomCMD.Move7();// 2.触发拍照CommunicateService.Instance.Send3("Calib,180,10");// 3.(等待拍照结束)拍照结束才能走Thread.Sleep(3000);CurrentStep++;break;caseNPointStep.平移8:commomCMD.Move8();// 2.触发拍照CommunicateService.Instance.Send3("Calib,180,-10");// 3.(等待拍照结束)拍照结束才能走Thread.Sleep(3000);CurrentStep++;break;caseNPointStep.平移9:commomCMD.Move9();// 2.触发拍照CommunicateService.Instance.Send3("Calib,180,-30");// 3.(等待拍照结束)拍照结束才能走Thread.Sleep(3000);CurrentStep++;break;default:break;}// 暂停while(true){if(IsPause){Thread.Sleep(20);System.Windows.Forms.Application.DoEvents();}else{break;}}}returnfalse;}
五 定义停止标志位
// 暂停的标志位publicboolIsPause=false;
六 定义通用指令类
publicclassCommomCMD{/// <summary>/// 回原点/// </summary>publicvoidReturnOrg(){// 回原点CommunicateService.Instance.Send("machinestart\\nDeviceUp\\n\r\n");WaitCmdStop("回原点");}/// <summary>/// 移动到安全位置/// </summary>publicvoidMoveSafePlace(){CommunicateService.Instance.Send($"start\nG01 X117 Y-100 Z80 C0 F3000\n");WaitCmdStop("回避让位");}/// <summary>/// 移动到安全位置/// </summary>publicvoidMoveSafePlace2(){CommunicateService.Instance.Send($"start\nG01 X117 Y-100 Z80 C0 F3000\n");WaitCmdStop("回避让位");}/// <summary>/// 移动到OK位置/// </summary>publicvoidMoveOKPlace(){CommunicateService.Instance.Send($"start\nG01 X83 Y183 Z36 C0 F3000\n");WaitCmdStop("移动到OK位置");}/// <summary>/// 移动到OK位置/// </summary>publicvoidMoveOKPlaceUp(){CommunicateService.Instance.Send($"start\nG01 X83 Y183 Z80 C0 F3000\n");WaitCmdStop("移动到OK位置");}/// <summary>/// 下降/// </summary>publicvoidMoveOKPlaceDown(){CommunicateService.Instance.Send($"start\nG01 X86 Y183 Z8 C0 F3000\n");WaitCmdStop("移动到OK位置");}/// <summary>/// 移动到NG位置/// </summary>publicvoidMoveNGPlace(){CommunicateService.Instance.Send($"start\nG01 X202 Y151 Z80 C0 F3000\n");WaitCmdStop("移动到NG位置");}/// <summary>/// 移动到NG位置/// </summary>publicvoidMoveNGPlaceDown(){CommunicateService.Instance.Send($"start\nG01 X202 Y151 Z8 C0 F3000\n");WaitCmdStop("移动到NG位置");}/// <summary>/// 移动到抓取位置/// </summary>publicvoidMoveGrabPlace(){CommunicateService.Instance.Send($"start\nG01 X220 Y-43 Z80 C0 F3000\n");WaitCmdStop("移动到抓取位置");}publicvoidMoveGrabPlace2(){CommunicateService.Instance.Send($"start\nG01 X220 Y-43 Z5 C0 F3000\n");WaitCmdStop("移动到抓取位置");}/// <summary>/// 抬升/// </summary>publicvoidMoveGrabPlaceUp(){CommunicateService.Instance.Send($"start\nG01 X220 Y-43 Z80 C0 F3000\n");WaitCmdStop("移动到抓取位置");}/// <summary>/// 等待停止/// </summary>/// <param name="axis">轴号</param>/// <returns></returns>publicvoidWaitCmdStop(stringcmd){// 获取mainformvarmainForm1=Application.OpenForms.OfType<Form1>().FirstOrDefault();// 跨UImainForm1.Invoke(newAction(()=>{mainForm1.rtb_info.AppendText($"指令:{cmd}-开始执行\n");}));// 重置为0GlobalParameters.FinishFlag=0;do{Thread.Sleep(1);}while(GlobalParameters.FinishFlag==0);// 重置为0GlobalParameters.FinishFlag=0;// 跨UImainForm1.Invoke(newAction(()=>{mainForm1.rtb_info.AppendText($"指令:{cmd}-运行已结束\n");}));}/// <summary>/// 打开吸嘴/// </summary>publicvoidOpenXiZui(){CommunicateService.Instance.Send("start\nM3S11000\n");}/// <summary>/// 关闭吸嘴/// </summary>publicvoidCloseXiZui(){CommunicateService.Instance.Send("start\nm5\n");}publicvoidMove1(){CommunicateService.Instance.Send($"start\nG01 X140 Y10 Z40 C0 F3000\n");WaitCmdStop("移动到位置1");}publicvoidMove(doublex,doubley,doublez){CommunicateService.Instance.Send($"start\nG01 X{x}Y{y}Z{z}C0 F3000\n");WaitCmdStop($"移动到位置X{x}Y{y}Z{z}C0");}publicvoidMove(stringx,stringy,stringz,doublea){CommunicateService.Instance.Send($"start\nG01 X{x}Y{y}Z{z}C{a}F3000\n");WaitCmdStop($"移动到位置X{x}Y{y}Z{z}C{a}");}publicvoidMove2(){CommunicateService.Instance.Send($"start\nG01 X140 Y-10 Z40 C0 F3000\n");WaitCmdStop("移动到位置2");}publicvoidMove3(){CommunicateService.Instance.Send($"start\nG01 X140 Y-30 Z40 C0 F3000\n");WaitCmdStop("移动到位置3");}publicvoidMove4(){CommunicateService.Instance.Send($"start\nG01 X160 Y10 Z40 C0 F3000\n");WaitCmdStop("移动到位置4");}publicvoidMove5(){CommunicateService.Instance.Send($"start\nG01 X160 Y-10 Z40 C0 F3000\n");WaitCmdStop("移动到位置5");}publicvoidMove6(){CommunicateService.Instance.Send($"start\nG01 X160 Y-30 Z40 C0 F3000\n");WaitCmdStop("移动到位置6");}publicvoidMove7(){CommunicateService.Instance.Send($"start\nG01 X180 Y10 Z40 C0 F3000\n");WaitCmdStop("移动到位置7");}publicvoidMove8(){CommunicateService.Instance.Send($"start\nG01 X180 Y-10 Z40 C0 F3000\n");WaitCmdStop("移动到位置8");}publicvoidMove9(){CommunicateService.Instance.Send($"start\nG01 X180 Y-30 Z40 C0 F3000\n");WaitCmdStop("移动到位置9");}publicvoidMoveR1(){CommunicateService.Instance.Send($"start\nG01 X200 Y-20 Z40 C-20 F3000\n");WaitCmdStop("移动到位置10");}publicvoidMoveR2(){CommunicateService.Instance.Send($"start\nG01 X200 Y-20 Z40 C-10 F3000\n");WaitCmdStop("移动到位置11");}publicvoidMoveR3(){CommunicateService.Instance.Send($"start\nG01 X200 Y-20 Z40 C0 F3000\n");WaitCmdStop("移动到位置12");}publicvoidMoveR4(){CommunicateService.Instance.Send($"start\nG01 X200 Y-20 Z40 C10 F3000\n");WaitCmdStop("移动到位置13");}publicvoidMoveR5(){CommunicateService.Instance.Send($"start\nG01 X200 Y-20 Z40 C20 F3000\n");WaitCmdStop("移动到位置14");}}