我是使用Kicad 8.0.3设计PCB的,请问大家我可以用什么工具生成符合嘉立创SMT要求的原件坐标文件呢?谢谢!
嘉立创SMT
全部评论 默认 最新
feifei
2024-07-19 14:29:24 来自广东
您好!要在KiCAD中导出坐标文件,可以按照以下步骤操作: 1. **安装插件**: - 首先,需要安装一个名为 `kicad_tools` 的插件。可以通过以下命令在Windows或MacOS上克隆该插件: ```bash # Windows git clone https://github.com/xtoolbox/kicad_tools.git %appdata%/kicad/scripting/plugins/kicad_tools # MacOS git clone https://github.com/xtoolbox/kicad_tools.git ~/Library/Preferences/kicad/scripting/plugins/kicad_tools ``` 2. **刷新KiCad插件**: - 打开KiCad的PCB编辑器,点击 `工具` -> `外部插件` -> `刷新插件`。这时,插件列表中会出现 `Gen Manufacture Docs`。 3. **生成文件**: - 点击插件界面上的 `Gen Manufacture Docs` 按钮执行命令。当选择生成BOM List、Position File、Gerber Files时,点击 `Generate Manufacture Docs` 按钮后,插件会一键生成BOM物料清单、坐标文件、Gerber文件、钻孔文件。生成的文件包括: - BOM文件和坐标文件会以CSV格式存放在电路板同级目录下。 - Gerber和钻孔文件放在电路板目录下的gerber目录中。 4. **注意事项**: - `GenMFDoc()` 会改变电路板的钻孔原点,建议先用 `GenMFDoc()` 生成BOM清单和位置文件,再生成Gerber文件。 5. **导出的坐标文件内容**: - 导出的坐标文件包含以下字段: - Designator:位号 - Comment:器件名称,一般是元件的制造商编号 - Footprint:封装,器件绑定的封装名 - Mid X, Mid Y:封装的焊盘中央点坐标 - Ref X,Ref Y:封装的原点坐标 - Pad X,Pad Y:封装第一个焊盘的坐标 - Layer:封装所在的层 - Rotation:封装的旋转角度 - SMD:封装是否属于全贴片 通过以上步骤,你可以在KiCAD中成功导出坐标文件,以便进行SMT贴片。
fairkid
2025-02-05 14:21:55 来自不列颠哥伦比亚
感谢您的提供的详细步骤。我也在用KiCAD8.0画图。但是使用这个插件生成SMT位置文件的时候,python出现了报错。请问如何修复?谢谢! Start generate position file set board aux origin to left bottom point, at (117300000, 107800000) Error: Traceback (most recent call last): File "C:\Users/xxx/OneDrive/Documents/KiCad/8.0/scripting\plugins\kicad_tools\mf_tool.py", line 777, in OnGenBom GenMFDoc(needGenBOM = self.chkBOM.GetValue(), needGenPos = self.chkPos.GetValue(), logger = lambda *args: self.log(*args) ) File "C:\Users/xxx/OneDrive/Documents/KiCad/8.0/scripting\plugins\kicad_tools\mf_tool.py", line 625, in GenMFDoc brd.GetDesignSettings().SetAuxOrigin(org_pt) File "C:\Program Files\KiCad\8.0\bin\Lib\site-packages\pcbnew.py", line 10694, in SetAuxOrigin return _pcbnew.BOARD_DESIGN_SETTINGS_SetAuxOrigin(self, aOrigin) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ TypeError: in method 'BOARD_DESIGN_SETTINGS_SetAuxOrigin', argument 2 of type 'VECTOR2I const &'
SMT小编 官方
2025-02-05 15:21:08 来自广东
尊敬的客户您好,您的错误可能是因为 setAuxorigin 需要的参数是 VECTOR2I 类型,而当前代码传入的可能不是正确的VECTOR2I 对象。 解决办法: 您可以尝试修改 mf tool.py 文件,在 GenMFDoc 函数中,将 org pt 转换为 pcbnew.VECTOR2I 类型: import pcbnew # 确保 org_pt 是一个 VECTOR2I 对象 org_pt = pcbnew.VECTOR2I(org_pt.x, org_pt.y) brd.GetDesignSettings().SetAuxOrigin(org_pt)
fairkid
2025-02-05 15:32:44 来自不列颠哥伦比亚
非常感谢!刚才的问题确实解决了。现在出现新的error信息,如下: Start generate position file set board aux origin to left bottom point, at (117300000, 107800000) Error: Traceback (most recent call last): File "C:\Users/fairkid/OneDrive/Documents/KiCad/8.0/scripting\plugins\kicad_tools\mf_tool.py", line 778, in OnGenBom GenMFDoc(needGenBOM = self.chkBOM.GetValue(), needGenPos = self.chkPos.GetValue(), logger = lambda *args: self.log(*args) ) File "C:\Users/fairkid/OneDrive/Documents/KiCad/8.0/scripting\plugins\kicad_tools\mf_tool.py", line 631, in GenMFDoc netList = loadnet.loadNet(brd) ^^^^^^^^^^^^^^^^^^^^ File "C:\Users/fairkid/OneDrive/Documents/KiCad/8.0/scripting\plugins\kicad_tools\loadnet.py", line 18, in loadNet c = parseFootprint(fp) ^^^^^^^^^^^^^^^^^^ File "C:\Users/fairkid/OneDrive/Documents/KiCad/8.0/scripting\plugins\kicad_tools\loadnet.py", line 24, in parseFootprint prop = fp.GetProperties() ^^^^^^^^^^^^^^^^ AttributeError: 'FOOTPRINT' object has no attribute 'GetProperties' 看上去是FOOTPRINT没有GetProperties()这个函数。应该如何修改呢?谢谢!
SMT小编 官方
2025-02-05 15:48:23 来自广东
您好,erro可能是因为 FOOTPRINT 类在 KiCAD 8.0 中可能不再有 GetProperties() 方法。可以尝试以下方法来解决: 解决方案: 将 fp.GetProperties() 替换为 fp.GetFPProperties() 在 loadnet.py 文件的 parseFootprint 函数中,找到以下代码: python 复制 编辑 prop = fp.GetProperties() 修改为: python 复制 编辑 prop = fp.GetFPProperties() 可能的原因: 在 KiCAD 7.x 或更早版本,GetProperties() 可能用于获取元件属性。 在 KiCAD 8.0 版本中,GetFPProperties() 可能是新的方法。 尝试修改后运行看看是否解决问题!如果仍然报错,可以打印 dir(fp) 来查看 fp 对象支持的方法: python 复制 编辑 print(dir(fp)) 然后找到正确的属性方法。
fairkid
2025-02-05 15:56:39 来自不列颠哥伦比亚
请问哪里可以看到 print 出来的信息?
SMT小编 官方
2025-02-05 16:02:26 来自广东
小伙伴您好,在vscode 终端控制台可以看到print出来的信息
fairkid
2025-02-05 16:06:56 来自不列颠哥伦比亚
看到了,KiCAD 8.0修改为 GetFields 了。但还有其他错误,我继续debug了。
fairkid
2025-02-05 16:30:35 来自不列颠哥伦比亚
坐标文件终于输出成功了,但是看到rotation的数字被除以10了,您可以帮忙确认一下是否需要将这个除以10删除了。代码的修改在这里: self.rot = int(mod.GetOrientation()/10) -> self.rot = int(mod.GetOrientationDegrees()/10) 请问,这里的除以10 需要删除吗? 我得到的坐标文件现在长这样子: "Designator","Footprint","Mid X","Mid Y","Ref X","Ref Y","Pad X","Pad Y","Layer","Rotation","Comment", "C1","C_0402_1005Metric","6.15mm","22.84mm","6.15mm","22.84mm","6.63mm","22.84mm","T","18","4u7", "C2","C_0402_1005Metric","11.75mm","24.49mm","11.75mm","24.49mm","11.75mm","24.97mm","T","-9","4u7", "C3","C_0402_1005Metric","6.15mm","25.24mm","6.15mm","25.24mm","6.63mm","25.24mm","T","18","4u7" 这里可以看到,Rotation分别为 18, -9, 18。
fairkid
2025-02-05 16:44:02 来自不列颠哥伦比亚
问题解决了,应该不用除以10。具体的代码修改如下: diff --git a/loadnet.py b/loadnet.py index 6dd35cf..b575162 100644 --- a/loadnet.py +++ b/loadnet.py @@ -21,7 +21,10 @@ def loadNet(brd = None): return {} def parseFootprint(fp): r = {} - prop = fp.GetProperties() + if hasattr(fp, "GetFields"): + prop = fp.GetFields() + else: + prop = fp.GetProperties() r['value'] = fp.GetValue() r['footprint'] = str(fp.GetFPID().GetLibItemName()) if "Datasheet" in prop: diff --git a/mf_tool.py b/mf_tool.py index 780efc9..d1fd591 100644 --- a/mf_tool.py +++ b/mf_tool.py @@ -483,7 +483,10 @@ class POSItem: print('Pad1 not found for mod') self.PadX = self.MidX self.PadY = self.MidY - self.rot = int(mod.GetOrientation()/10) + if hasattr(mod, "GetOrientationDegrees"): + self.rot = int(mod.GetOrientationDegrees()) + else: + self.rot = int(mod.GetOrientation()/10) self.ref = mod.GetReference() self.val = mod.GetValue() self.layer = layerName(mod.GetLayer()) @@ -618,6 +621,7 @@ def GenMFDoc(SplitTopAndBottom = False, ExcludeRef = [], ExcludeValue = [], brd return bound = GetBoardBound(brd) org_pt = pcbnew.wxPoint( bound.GetLeft(), bound.GetBottom()) + org_pt = pcbnew.VECTOR2I(org_pt.x, org_pt.y) logger("set board aux origin to left bottom point, at", org_pt) if hasattr(brd, 'SetAuxOrigin'): brd.SetAuxOrigin(org_pt)
SMT小编 官方
2025-02-05 16:47:24 来自广东
是的,GetOrientationDegrees() 返回的是 实际的角度值(单位:度),而 旧版 GetOrientation() 返回的是 0.1 度单位,所以 原先的 /10 只是为了转换单位。 应该删除 /10,修改如下: python 复制 编辑 self.rot = int(mod.GetOrientationDegrees()) # 直接获取角度,不除以 10 您的坐标文件问题: 目前 Rotation 数据是 18, -9, 18,这意味着旋转值被错误地缩小了 10 倍,实际应该是 180, -90, 180。 所以,删除 /10 后,再次运行,应该能得到正确的 Rotation 数值!
fairkid
2025-02-05 17:09:14 来自不列颠哥伦比亚
对应代码的修改PR已经在github上提交了,希望作者能够早日看到。 另外,这个代码修改只解决了坐标文件的输出问题。Gerber输出仍然有error。我现在暂时不需要这个插件输出Gerber。有空了再回来看。先去下单了。感谢@嘉立创SMT小编 !
SMT小编 官方
2025-02-06 09:24:57 来自广东
[比心]
没有更多啦~