雕刻机打标机切割机上位机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代码样例和接线图,有兴趣的可以直接拉下来改参数用。