news 2026/4/18 5:14:42

雕刻机打标机切割机上位机C#源码,stm32f407控制板源码 打开上位机导入g代码点击开始即...

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
雕刻机打标机切割机上位机C#源码,stm32f407控制板源码 打开上位机导入g代码点击开始即...

雕刻机打标机切割机上位机C#源码,stm32f407控制板源码 打开上位机导入g代码点击开始即可自动加工。 1.界面还原g代码图形。 2.自动解析g代码 3.回原点控制 4.图形可鼠标拖动,缩放

最近在折腾雕刻机控制系统,顺手撸了个C#上位机和STM32F407下位机的开源方案。这玩意儿能直接导入G代码自动加工,鼠标拖拽预览图形还挺方便,分享几个核心功能的实现思路。

界面还原G代码图形这块用了GDI+绘图。解析完G代码后把坐标点存入List,用GraphicsPath来绘制轨迹:

GraphicsPath path = new GraphicsPath(); foreach (GCodeCommand cmd in gcodeCommands) { if (cmd.CommandType == CommandType.Move) { PointF scaledPoint = ScalePoint(cmd.X, cmd.Y); if (cmd.IsLinearMove) path.AddLine(previousPoint, scaledPoint); previousPoint = scaledPoint; } } // 重绘时加上这个 graphics.DrawPath(pen, path);

这里有个坑——G代码的坐标系和屏幕Y轴方向是反的,得做坐标变换。ScalePoint方法里除了缩放还要处理Y轴翻转。

G代码解析用正则表达式提取关键参数:

Regex regex = new Regex(@"G([0-9]+)(\s+X([+-]?\d+\.?\d*))?(\s+Y([+-]?\d+\.?\d*))?"); Match match = regex.Match(line); if (match.Success) { float x = match.Groups[3].Success ? float.Parse(match.Groups[3].Value) : lastX; float y = match.Groups[5].Success ? float.Parse(match.Groups[5].Value) : lastY; // 存入指令队列 }

注意得处理模态指令(比如G01之后可以省略G代码),还有相对/绝对坐标的转换。建议把解析后的指令封装成对象,后面处理起来方便。

雕刻机打标机切割机上位机C#源码,stm32f407控制板源码 打开上位机导入g代码点击开始即可自动加工。 1.界面还原g代码图形。 2.自动解析g代码 3.回原点控制 4.图形可鼠标拖动,缩放

回原点功能通过串口发送指令给下位机:

serialPort.Write($"$H\n");

STM32端接收到指令后启动限位开关检测:

void homing() { while(!X_MIN_PIN) { stepX(-1); } while(!Y_MIN_PIN) { stepY(-1); } // 碰到限位后归零坐标 currentPosition[X_AXIS] = 0; currentPosition[Y_AXIS] = 0; }

记得加软件去抖,机械限位开关容易产生毛刺信号。

图形交互部分实现缩放拖拽,主要靠矩阵变换:

Matrix transformMatrix = new Matrix(); // 缩放 transformMatrix.Scale(zoomFactor, zoomFactor); // 平移 transformMatrix.Translate(offsetX, offsetY); graphics.Transform = transformMatrix;

鼠标滚轮事件计算缩放中心点:

float scale = e.Delta > 0 ? 1.2f : 0.8f; PointF mousePos = e.Location; zoomMatrix.Translate(-mousePos.X, -mousePos.Y, MatrixOrder.Append); zoomMatrix.Scale(scale, scale, MatrixOrder.Append); zoomMatrix.Translate(mousePos.X, mousePos.Y, MatrixOrder.Append);

这样缩放时会以鼠标指针为中心,体验更自然。记得限制最大最小缩放倍数,防止图形飘走。

下位机运动控制用梯形速度规划,避免急停抖动。关键代码在定时器中断里:

void TIM3_IRQHandler() { if(stepCounter > 0) { STEP_PIN = 1; delay_us(2); STEP_PIN = 0; stepCounter--; } // 更新速度曲线... }

实际测试发现F407的定时器精度足够,但要注意中断优先级设置,避免通信阻塞。

完整源码里还包含加工进度显示、异常暂停、Z轴抬刀控制这些实用功能。开发时建议先模拟运行,毕竟直接控制硬件有风险。代码仓库里已经加了G代码样例和接线图,有兴趣的可以直接拉下来改参数用。

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

Speech Seaco Paraformer微信技术支持?科哥对接流程与问题反馈指南

Speech Seaco Paraformer微信技术支持?科哥对接流程与问题反馈指南 1. Speech Seaco Paraformer ASR阿里中文语音识别模型 构建by科哥 Speech Seaco Paraformer 是基于阿里云 FunASR 开源项目开发的高性能中文语音识别系统,由开发者“科哥”完成本地化…

作者头像 李华
网站建设 2026/4/17 17:55:58

WinSetView终极指南:3分钟搞定Windows文件夹视图统一配置

WinSetView终极指南:3分钟搞定Windows文件夹视图统一配置 【免费下载链接】WinSetView Globally Set Explorer Folder Views 项目地址: https://gitcode.com/gh_mirrors/wi/WinSetView 还在为Windows资源管理器中杂乱的文件夹视图而烦恼?每次打开…

作者头像 李华
网站建设 2026/4/17 22:59:47

终极Android投屏神器:QtScrcpy完整使用指南

终极Android投屏神器:QtScrcpy完整使用指南 【免费下载链接】QtScrcpy QtScrcpy 可以通过 USB / 网络连接Android设备,并进行显示和控制。无需root权限。 项目地址: https://gitcode.com/GitHub_Trending/qt/QtScrcpy QtScrcpy是一款功能强大的An…

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

IPTV频道智能检测工具:告别播放卡顿的终极解决方案

IPTV频道智能检测工具:告别播放卡顿的终极解决方案 【免费下载链接】iptv-checker IPTV source checker tool for Docker to check if your playlist is available 项目地址: https://gitcode.com/GitHub_Trending/ip/iptv-checker 还在为IPTV频道频繁失效而…

作者头像 李华
网站建设 2026/4/18 4:51:56

告别环境配置!用YOLOv13镜像一键启动目标检测

告别环境配置!用YOLOv13镜像一键启动目标检测 你是否也曾为跑通一个目标检测模型,花上整整两天时间折腾环境?CUDA版本不对、PyTorch不兼容、依赖包冲突……这些“配置地狱”问题,早已成为AI开发路上的常态。但现在,这…

作者头像 李华