news 2026/5/9 13:01:07

上位机状态机开发之九点标定

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
上位机状态机开发之九点标定

上位机状态机开发之九点标定

一 开始运行

/// <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");}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/7 1:43:05

如何用AI自动生成Sharding-JDBC分库分表配置

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 请生成一个完整的Sharding-JDBC分库分表配置示例&#xff0c;要求&#xff1a;1. 基于订单系统的业务场景&#xff1b;2. 包含水平分库和水平分表&#xff1b;3. 使用user_id作为分…

作者头像 李华
网站建设 2026/4/29 19:17:39

二叉树基础与排序算法解析

基本二叉树&#xff08;空子树&#xff0c;左子树&#xff0c;右子树&#xff0c;完全二叉树&#xff0c;满二叉树&#xff09;二叉树的定义&#xff1a;每个节点最多有两个子节点的树&#xff0c;通常称为右子节点&#xff0c;左子节点。空子树&#xff1a;不包含任何节点左子…

作者头像 李华
网站建设 2026/5/4 17:34:33

如何用AI自动修复SSL证书过期问题

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个AI辅助工具&#xff0c;能够自动检测网站SSL证书状态&#xff0c;当发现certificate has expired错误时&#xff1a;1. 分析证书有效期和颁发机构 2. 根据证书类型自动生成…

作者头像 李华
网站建设 2026/5/8 3:49:13

WebRTC开发效率提升:传统vsAI辅助对比

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 生成一份对比报告&#xff0c;展示传统WebRTC开发与使用快马平台AI辅助开发的效率差异。要求&#xff1a;1. 列出传统开发需要掌握的完整技术栈&#xff1b;2. 演示如何使用快马平台…

作者头像 李华