OpenPNP里程碑配置
本文最后更新于:2025年4月15日 凌晨
前言
由于OpenPNP软件功能较为复杂,所以开发人员想到了一个好方法来解决上手困难的问题,那就是问题与解决方案(Issues and Solutions),俗称里程碑,软件会一步步指导你完成操作,走完里程碑,贴片机基本上就可以开始工作了。
里程碑界面(Milestone)

转到问题与解决方案选项卡中,此页面就是软件的里程碑界面。
吸嘴单元(ReferenceHead H1)
本次DIY的贴片机使用2个吸嘴单元,由Z电机使用皮带传动控制2个吸嘴进行上下往复运动,所以按照如下图进行配置:

点击接受(Accept)后会有一个警告(Warming)弹窗,这是OpenPNP会根据你选择的吸嘴单元数量及传动方式在贴片机配置选项卡中生成相应的配置,一般情况选择“是(Y)”即可,可以看到ReferenceHead H1主题内容的当前状态由“Open”变为“Solved”,接下来按照下图步骤完成当前里程碑。

顶部相机(ImageCamera Top)
底部相机(SimulateUpCamera Bottom)
驱动器定义(NullDriver NullDriver)
新建驱动器
对于Marlin固件,使用GcodeDriver即可。

点击接受(Accept)后,OpenPNP会自动在贴片机配置选项卡的驱动定义下生成一个GcodeDriver驱动器;以下简单说明一下OpenPNP中各驱动器类型的功能:
NullDriver
系统模拟的虚拟驱动器。
GcodeDriver[1]
同步驱动器,每次发送命令后会等待硬件返回ok才会发送下一条命令。
GcodeAsyncDriver[2]
异步驱动器,通过队列机制管理命令,无需等待硬件确认,可提高执行效率。
NeoDen4Driver
配置GcodeDriver驱动器
主板接通电源,并用USB数据线连接上电脑,将GcodeDriver驱动器中的串口号设置成电脑识别出的主板COM口,波特率和Marlin固件里的BAUDRATE参数保持一致。

再转到驱动配置选项卡,点击检测固件查看是否能成功显示固件信息,否则在进入下一里程碑时,OpenPNP会提示未检测到固件的警告:

再回到查找问题和解决方案选项卡,按照如下图操作,会出来一个错误事件,提示当前固件不支持ABC轴(旋转轴),这是由于我的Marlin固件除了基础的XYZ轴,另外2个轴分别为E0,E1,所以会提示不支持,在后续配置中会将E0、E1定义为相应的旋转轴,此处我们选择拒绝(Dismissed)即可。

设置串口流控制

点接受(Accept)击后,OpenPNP会将串口的流控制由Off改为RtsCts;接着完成当前里程碑即可。
分配各轴字母

OpenPNP软件自动为x轴分配了轴字母:X,所以直接点击接受(Accept),将会为贴片机配置选项卡中的轴 -> x轴字母分配为X,其他的y、Z1轴也以此类推即可。

对于C1、C2、C3、C4旋转轴,软件无法自动分配轴字母,所以我们手动改为E,然后点接受(Accept)即可:

执行上述操作后再次点击 查找问题与解决方案 按钮,会看出来一些新的主题内容,其中有2条错误事件,显示C1、C2轴使用了相同的轴字母,我们都选择拒绝(Dismissed)即可。

再次点击 查找问题与解决方案 按钮,还是存在2条关于C1、C2轴的警告主题,显示尽量避免使用E作为轴字母,我们都选择拒绝(Dismissed)即可。

配置驱动器的Gcode
点击 查找问题与解决方案 按钮,往下翻可以看到OpenPNP建议配置驱动器对应的Gcode,我们都选择接受(Accept)即可,OpenPNP会自动填写对应的Gcode。
命令确认
| Gcode | 正则表达式 |
|---|---|
| COMMAND_CONFIRM_REGEX | ^ok.* |

报告位置
| Gcode | 正则表达式 |
|---|---|
| POSITION_REPORT_REGEX | ^.*X:(?<X>-?\d+\.\d+)\s*Y:(?<Y>-?\d+\.\d+)\s*Z:(?<Z>-?\d+\.\d+)\s*E:(?<E>-?\d+\.\d+)\s*E:(?<E>-?\d+\.\d+).* |

连接命令
| Gcode | 正则表达式 |
| CONNECT_COMMAND | G21 ; Set millimeters mode |
| G90 ; Set absolute positioning mode |

归位命令
| Gcode | 正则表达式 |
| HOME_COMMAND | {Acceleration:M204 S%.2f ; Initialize acceleration} |
| G28 ; Home all axes |

全局偏移量命令
| Gcode | 正则表达式 |
|---|---|
| SET_GLOBAL_OFFSETS_COMMAND | G92 {X:X%.4f} {Y:Y%.4f} {Z:Z%.4f} {E:E%.4f} {E:E%.4f} ; reset coordinates |

获取位置命令
| Gcode | 正则表达式 |
|---|---|
| GET_POSITION_COMMAND | M114 ; get position |

移动命令
| Gcode | 正则表达式 |
| MOVE_TO_COMMAND | {Acceleration:M204 S%.0f } |
| G1 {X:X%.4f} {Y:Y%.4f} {Z:Z%.4f} {E:E%.4f} {E:E%.4f} {FeedRate:F%.0f} ; move to target |

移动完成命令
| Gcode | 正则表达式 |
|---|---|
| MOVE_TO_COMPLETE_COMMAND | M400 ; Wait for moves to complete before returning |
