news 2026/4/15 5:30:51

直接上干货吧!这个C#运动控制上位机项目有点意思,核心代码我扒拉了几个通宵终于理清楚了。咱们先从最带劲的Gcode解析开始

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
直接上干货吧!这个C#运动控制上位机项目有点意思,核心代码我扒拉了几个通宵终于理清楚了。咱们先从最带劲的Gcode解析开始

运动控制系统上位机C#源码,可用于雕刻机,切割机,写字机,点胶机。 功能描述: 1.自动解析Gcode。 2.图形还原显示。 3.显示g代码坐标文件 4.回原点控制。 5.手动控制3轴运动。 6.支持图形缩放,鼠标拖动

//Gcode解析器核心代码 public void ParseGcode(string filePath) { var lines = File.ReadAllLines(filePath); foreach(var line in lines) { //用正则干掉注释和空白 string cleanLine = Regex.Replace(line.Split(';')[0], @"\s+", " ").Trim(); if(!string.IsNullOrEmpty(cleanLine)) { var cmd = new GcodeCommand(); var segments = cleanLine.Split(' '); foreach(var seg in segments) { char prefix = seg[0]; double value = double.Parse(seg.Substring(1)); switch(char.ToUpper(prefix)) { case 'G': cmd.GType = (int)value; break; case 'X': cmd.X = value; break; case 'Y': cmd.Y = value; break; case 'Z': cmd.Z = value; break; //...其他参数处理 } } commandQueue.Enqueue(cmd); } } }

这坨代码干了三件事:洗数据、拆零件、装对象。注意那个正则表达式,处理注释和多余空格相当暴力。不过实际项目里得加try-catch,不然遇到"X3.14.15"这种流氓数据直接崩给你看。

图形渲染这块有点门道,PictureBox+双缓冲是基本操作:

//图形绘制核心片段 private void pictureBox_Paint(object sender, PaintEventArgs e) { using(var g = Graphics.FromImage(canvas)) { g.Clear(Color.White); var scaleMatrix = new Matrix(); scaleMatrix.Scale(currentZoom, currentZoom); g.Transform = scaleMatrix; foreach(var path in gcodePaths) { using(var pen = new Pen(Color.Blue, 0.1f / currentZoom)) { g.DrawPath(pen, path); } } } e.Graphics.DrawImage(canvas, new Point(offsetX, offsetY)); }

这里有个骚操作——笔刷粗细随缩放自动调整。currentZoom小于1的时候,线条反而变粗,避免缩放后线条消失。矩阵变换用得飞起,比手动算坐标清爽多了。

手动控制三轴的代码最有机械感:

//手动运动控制 private async void btnXPlus_Click(object sender, EventArgs e) { if(!isHoming) { await serialPort.WriteLineAsync("$J=G91 X0.1 F500"); UpdatePositionIndicator(); } }

看见那个G91没?这是相对运动指令。每次点击走0.1mm,F500是进给速度。注意这里用了async/await,不然界面卡成狗。不过串口通信要加超时处理,否则卡死的时候用户能把你祖坟骂裂开。

运动控制系统上位机C#源码,可用于雕刻机,切割机,写字机,点胶机。 功能描述: 1.自动解析Gcode。 2.图形还原显示。 3.显示g代码坐标文件 4.回原点控制。 5.手动控制3轴运动。 6.支持图形缩放,鼠标拖动

回原点逻辑比想象中复杂:

List<string> homingCommands = new List<string>(){ "$HX", //X轴回零 "$HY", //Y轴回零 "$HZ" //Z轴回零 }; foreach(var cmd in homingCommands) { serialPort.WriteLine(cmd); while(!serialPort.ReadLine().Contains("ok")) { await Task.Delay(100); } }

这里用了阻塞式等待,新手容易踩坑——一定要开子线程跑,不然界面直接无响应。我见过有人在这里套了三个BeginInvoke,代码写得跟千层饼似的。

缩放拖拽处理鼠标事件才是真考验:

private void pictureBox_MouseWheel(object sender, MouseEventArgs e) { float zoomFactor = e.Delta > 0 ? 1.1f : 0.9f; currentZoom *= zoomFactor; pictureBox.Invalidate(); } private void pictureBox_MouseMove(object sender, MouseEventArgs e) { if(e.Button == MouseButtons.Left) { offsetX += e.X - lastMouseX; offsetY += e.Y - lastMouseY; pictureBox.Invalidate(); } lastMouseX = e.X; lastMouseY = e.Y; }

这里有个隐藏bug:没限制最小缩放值,放大到1000倍时坐标计算会溢出。解决方案是给currentZoom加个阈值限制,别问我怎么知道的——曾经把图形缩成纳米级找不回来,只能重启程序。

这套代码最牛逼的是坐标系转换,把Gcode的绝对坐标转成屏幕相对坐标,还要考虑机械限位。有个老哥在GitHub上魔改了三个月,最后把旋转雕刻功能加进去了,果然开源项目的尽头是魔改。

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

工业自动化实战:当西门子PLC遇上云端遥控

程序图纸全部奉上&#xff0c;含远程模块&#xff0c;远程模块支持云端控制 西门子 ST30 AI8模拟量输入 正弦变频器 欧姆龙接近开关 四路遥控装置最近在厂区自动化改造项目中折腾了一套支持云端控制的远程监控系统&#xff0c;核心设备清单有西门子ST30 PLC、AI8模拟量模…

作者头像 李华
网站建设 2026/4/12 18:47:05

Emotion2Vec+语音情感识别测评:准确率如何?真实数据告诉你

Emotion2Vec语音情感识别测评&#xff1a;准确率如何&#xff1f;真实数据告诉你 1. 引言&#xff1a;为什么语音情感识别正在变得重要&#xff1f; 你有没有这样的经历&#xff1a;客服电话里对方语气冷淡&#xff0c;哪怕说的是“没问题”&#xff0c;你也觉得事情没那么简…

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

如何优雅处理CUDA内存溢出?麦橘超然实战教学

如何优雅处理CUDA内存溢出&#xff1f;麦橘超然实战教学 1. 麦橘超然 (MajicFLUX) 离线图像生成控制台简介 本项目基于 DiffSynth-Studio 构建&#xff0c;提供一个轻量化的 Flux.1 图像生成 Web 服务。核心集成了“麦橘超然”模型&#xff08;majicflus_v1&#xff09;&…

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

BongoCat桌面萌宠:让每一次输入都充满惊喜的互动伴侣

BongoCat桌面萌宠&#xff1a;让每一次输入都充满惊喜的互动伴侣 【免费下载链接】BongoCat 让呆萌可爱的 Bongo Cat 陪伴你的键盘敲击与鼠标操作&#xff0c;每一次输入都充满趣味与活力&#xff01; 项目地址: https://gitcode.com/gh_mirrors/bong/BongoCat 还在为单…

作者头像 李华
网站建设 2026/4/10 5:24:16

BongoCat:你的专属桌面互动伙伴

BongoCat&#xff1a;你的专属桌面互动伙伴 【免费下载链接】BongoCat 让呆萌可爱的 Bongo Cat 陪伴你的键盘敲击与鼠标操作&#xff0c;每一次输入都充满趣味与活力&#xff01; 项目地址: https://gitcode.com/gh_mirrors/bong/BongoCat 你是否曾感到工作时的键盘敲击…

作者头像 李华
网站建设 2026/4/13 19:31:14

终极指南:用OpCore-Simplify轻松构建完美Hackintosh系统

终极指南&#xff1a;用OpCore-Simplify轻松构建完美Hackintosh系统 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 想要在普通PC上体验macOS的魅力&a…

作者头像 李华