news 2026/4/23 11:33:29

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

作者头像

张小明

前端开发工程师

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/4/21 5:20:02

AI如何优化计数排序?智能代码生成实战

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 使用快马平台生成一个优化的计数排序算法实现&#xff0c;要求&#xff1a;1.支持整数数组输入 2.自动检测数据范围 3.可视化排序过程 4.包含时间复杂度分析 5.提供测试用例。使用K…

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

零基础入门:Java Base64原理与简单实现

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 生成一个面向Java初学者的Base64教学代码&#xff0c;要求&#xff1a;1.分步骤实现Base64编码过程 2.每个步骤都有详细的注释说明 3.提供可视化演示的main方法 4.包含常见错误的示…

作者头像 李华
网站建设 2026/4/21 23:22:18

AI如何帮你自动解决Visual C++ 2015运行库问题

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个智能诊断工具&#xff0c;能够自动检测用户系统是否缺少Visual C 2015 Redistributable组件。工具应包含以下功能&#xff1a;1) 系统环境扫描模块&#xff0c;检查已安装的…

作者头像 李华
网站建设 2026/4/21 15:40:56

1小时搭建DeepFM推荐原型:快马平台实战

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 在快马平台快速构建DeepFM推荐原型。输入需求&#xff1a;1. 使用电商用户行为数据 2. 自动生成特征处理代码 3. 配置DeepFM网络结构 4. 输出推荐结果API 5. 包含简单前端展示界面。…

作者头像 李华
网站建设 2026/4/21 3:20:37

AI自动生成Base64编解码工具:Java开发新姿势

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 请生成一个完整的Java Base64工具类&#xff0c;要求&#xff1a;1.包含Base64编码和解码的核心方法 2.支持URL安全的Base64编解码 3.添加异常处理逻辑 4.包含性能优化的注释说明 5…

作者头像 李华
网站建设 2026/4/17 7:52:04

hot100-48腐烂的橘子

代码学习的是小红书的尼布斯老师&#xff0c;写的好好&#xff0c;思路写的也好好&#xff0c;很清晰易懂。力扣的代码学习主要参考小红书的尼布斯老师和小熊饼干老师。一、题目m x n 的网格 grid 中&#xff0c;每个单元格可以有三个值&#xff1a;0、1、2。每分钟&#xff0c…

作者头像 李华