news 2026/4/19 14:25:25

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

作者头像

张小明

前端开发工程师

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/15 10:27:42

嵌入式-硬件基础:了解三极管

目录 一、三极管的本质&#xff1a;半导体电流控制器 1. 核心定义 2. 结构与材料 3. 两种类型&#xff1a;NPN 型 vs PNP 型 二、工作原理&#xff1a;“以小控大” 的核心逻辑 1. 导通的前提&#xff1a;正确偏置 2. 载流子的运动过程&#xff08;三步曲&#xff09; …

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

【Java方法】--让你的代码变成一个独立的“任务”——方法

个人主页 目录前言1. 什么是方法&#xff1f;为什么我们需要它&#xff1f;2. 如何定义一个Java方法&#xff1f;**代码示例&#xff1a;**3. 如何调用方法&#xff1f;**代码示例&#xff1a;**4. 拓展&#xff1a;命令行传递参数**如何使用&#xff1f;**结尾前言 想象一下&a…

作者头像 李华
网站建设 2026/4/9 10:45:21

5分钟用vue.config.js搭建开发环境原型

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 请快速生成一个可用于原型开发的vue.config.js配置&#xff0c;要求&#xff1a;1. 配置热重载 2. 设置/api代理到本地3000端口 3. 允许跨域 4. 配置ESLint自动修复 5. 添加vue-rou…

作者头像 李华
网站建设 2026/4/18 8:14:03

小白必看:什么是WiFi密码字典及其基本用法

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个交互式WiFi密码字典学习应用&#xff0c;通过简单示例演示密码字典的工作原理。要求包含基础知识讲解、简单字典生成演示和实际应用场景说明。使用HTMLJavaScript实现可视化…

作者头像 李华
网站建设 2026/4/15 9:15:05

传统调试 vs AI辅助:解决Internal Server Error的效率对比

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 构建一个对比工具&#xff0c;左侧展示传统调试步骤&#xff08;查看日志、手动排查等&#xff09;&#xff0c;右侧展示AI辅助调试流程&#xff08;自动分析、建议修复&#xff09…

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

系统迁移时如何处理Temp文件夹?专家建议

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个系统迁移辅助工具&#xff0c;专门处理Temp目录&#xff1a;1) 分析临时文件使用情况 2) 智能识别需要保留的文件 3) 生成迁移报告 4) 支持自定义过滤规则 5) 与主流迁移工…

作者头像 李华