news 2026/6/10 16:02:04

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

作者头像

张小明

前端开发工程师

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/6/10 4:44:37

【网络安全】一、虚拟局域网设置和应用

实验01&#xff1a;虚拟局域网设置和应用一、实验目的掌握虚拟局域网&#xff08;VLAN&#xff09;的基本概念与核心作用。熟练掌握跨多台交换机的 VLAN 配置及Trunk 链路的配置方法。验证 VLAN 对网络广播域的隔离效果&#xff0c;深入理解其在网络安全中 “访问控制、缩小攻击…

作者头像 李华
网站建设 2026/6/8 12:39:25

C++基础笔记(三)链表list

一、数据结构说明 list std::list 是一种双向链表&#xff08;doubly linked list&#xff09;&#xff0c;其底层数据结构是互不连续的节点。 刷题要点&#xff1a; 在任何位置进行元素的插入和删除都非常高效&#xff0c;时间复杂度为 O(1)。不支持随机访问&#xff08;如 li…

作者头像 李华
网站建设 2026/6/6 3:23:38

3分钟搞定Git SSH配置:传统vs快马AI方案对比

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个Git SSH配置效率对比工具&#xff0c;左侧显示传统手动配置的7个步骤(生成密钥、复制公钥、网站配置等)&#xff0c;右侧展示快马AI一键生成的完整配置代码。要求&#xff…

作者头像 李华
网站建设 2026/6/9 21:38:49

基于LangChain-ChatChat搭建金融知识问答机器人实战

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 构建一个金融知识问答系统&#xff0c;输入要求&#xff1a;1.使用LangChain-ChatChat处理用户金融术语查询 2.集成证监会政策文档作为知识库 3.实现风险评估问卷的对话式填写 4.对…

作者头像 李华
网站建设 2026/6/9 16:13:37

5分钟快速验证:解决声明查找问题的原型方案

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个声明查找问题快速验证工具原型&#xff0c;功能包括&#xff1a;1)最小化代码示例生成 2)多种解决方案A/B测试 3)即时效果对比。使用Next.js实现&#xff0c;集成Monaco编辑…

作者头像 李华
网站建设 2026/6/10 13:53:14

AI如何简化SOME/IP协议开发:从零到部署

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个基于SOME/IP协议的车辆状态监控系统Demo。要求&#xff1a;1. 使用标准SOME/IP协议格式 2. 包含车速、油量、发动机状态等数据字段 3. 实现服务发现和事件通知功能 4. 生成…

作者头像 李华