
先把結(jié)論放前面如果你的電腦里躺著幾十上百個 EasyEDA Pro 工程又有一半以上可能要被丟進 KiCad 繼續(xù)維護那 epro2kicad 這個命令行轉(zhuǎn)換工具值得你花一個下午認真試試。它把 EasyEDA Pro 的 .epro 工程直接在終端里轉(zhuǎn)成 KiCad 整套工程文件全程不需要打開兩次圖形界面不需要手動導(dǎo)出再導(dǎo)入更不需要對著兩個 EDA 的彈窗反復(fù)核對網(wǎng)絡(luò)表。這篇文章是我用這個工具把一批歷史項目從 EasyEDA Pro 遷到 KiCad 的實操記錄里面有安裝方式、命令參數(shù)、轉(zhuǎn)換原理和大量踩坑經(jīng)驗適合準備做庫遷移、格式交接、自動化構(gòu)建的硬件工程師。1. 為什么需要命令行轉(zhuǎn)換工具1.1 EasyEDA Pro 與 KiCad 的格式鴻溝EasyEDA Pro國內(nèi)習(xí)慣叫立創(chuàng) EDA 專業(yè)版和 KiCad 雖然都是做 PCB 設(shè)計但底層的文件格式完全是兩套邏輯。EasyEDA Pro 的工程文件本質(zhì)上是自有格式的 JSON 數(shù)據(jù)包原理圖和 PCB 的圖形對象、網(wǎng)絡(luò)連接、封裝信息都塞在結(jié)構(gòu)化的字段里而 KiCad 用的是文本化的 s-expression 格式從 .kicad_sch 到 .kicad_pcb 都是可以直接用編輯器打開的純文本。這兩者的差別有點像 Word 和 Markdown一個是私有打包一個是開放文本互相讀取本來就不容易。更麻煩的是EasyEDA Pro 的文件結(jié)構(gòu)里還大量引用立創(chuàng)自己的元件庫體系和封裝庫體系很多封裝在 KiCad 里根本沒有對應(yīng)名。就算人工導(dǎo)入也會遇到元器件找不到封裝焊盤形狀對不上這類問題。文件格式不兼容加上第三方庫依賴導(dǎo)致兩個工具之間不能靠簡單的另存為完成轉(zhuǎn)換。epro2kicad 做的事情就是在命令行里把這一層轉(zhuǎn)換邏輯封裝好解析 EasyEDA Pro 的工程數(shù)據(jù)重新組織成 KiCad 的工程結(jié)構(gòu)并盡量把層、網(wǎng)絡(luò)、封裝、焊盤映射過去。1.2 圖形界面導(dǎo)入的痛點其實 KiCad 官方和 EasyEDA Pro 本身都提供了一些交互式的導(dǎo)入辦法EasyEDA 有導(dǎo)出 KiCad 格式的入口KiCad 也有導(dǎo)入其他 EDA 格式的插件。但是走圖形界面的路有幾個實際痛點特別明顯。一是批量處理基本不可能。一次只能導(dǎo)一個工程如果有 30 個歷史工程要遷移點 30 次鼠標只是入門麻煩的是每個工程都可能彈提示、卡在封裝缺失上你必須在旁邊盯著手工確認。二是可重復(fù)性差。同一個工程這次導(dǎo)入和那次導(dǎo)入選項稍微點錯一點結(jié)果就不一樣。三是無法審計。圖形界面轉(zhuǎn)完就完事日志不規(guī)范出了問題你很難復(fù)盤是哪一步轉(zhuǎn)錯的。四是不好集成進自動化流程。硬件團隊一旦上了 CI 或者版本化工程管理就希望轉(zhuǎn)換動作本身是一個可調(diào)用的命令而不是人類坐在屏幕前點點點。這些痛點本質(zhì)上都是交互式操作和批量化、可腳本化之間的沖突。只要你有超過一個工程要轉(zhuǎn)或者你希望轉(zhuǎn)換步驟能寫進自動化流水線命令行工具的優(yōu)勢就壓過圖形界面了。1.3 命令行的獨特價值epro2kicad 這類工具最大的價值在于把轉(zhuǎn)換變成了一條可復(fù)用的指令。輸入是 .epro 工程文件輸出是 .kicad_pro / .kicad_sch / .kicad_pcb 文件集合中間所有映射規(guī)則都可以用參數(shù)或配置文件控制。這樣一來你可以寫一個 for 循環(huán)批量處理整個目錄下的工程也可以把轉(zhuǎn)換命令寫進 Jenkins 或 GitHub Actions每次提交 EasyEDA Pro 工程后自動生成 KiCad 版本。另一個容易被忽略的價值是差異對比。KiCad 的工程文件是文本格式轉(zhuǎn)換完以后你可以直接放進 Git 做 diff看看這次轉(zhuǎn)換改了什么、哪個焊盤漂移了、哪個網(wǎng)絡(luò)斷了。這一點是圖形界面轉(zhuǎn)換幾乎做不到的。2. 工具安裝與環(huán)境準備2.1 獲取 epro2kicad 的幾種方式epro2kicad 不是 KiCad 自帶的組件所以要先安裝。從我的經(jīng)驗來看它比較常見的發(fā)布方式是通過 Git 倉庫分發(fā)源碼需要你自己克隆代碼后安裝依賴也可能直接發(fā)布了 Python 包或 Rust 二進制。我這次用的是 Python 版本整個安裝過程沒有遇到編譯障礙相對省心。如果你習(xí)慣從源碼跑典型步驟是:git clone https://github.com/your-epro2kicad-repo/epro2kicad.git cd epro2kicad pip install -r requirements.txt python -m epro2kicad --version如果項目發(fā)布了包也可以直接通過 Python 包管理器安裝。不同環(huán)境會略有差異但通常不會要求你手動編譯 C 擴展所以整體安裝成本很低。2.2 依賴與運行要求以 Python 實現(xiàn)為例我建議在 Python 3.9 以上的環(huán)境里運行。它依賴的庫包括解析 JSON 用的標準庫、處理命令行參數(shù)用的 click 或 argparse、以及一些文件處理和日志庫。此外如果工具支持讀取加密或者壓縮過的工程包可能還會依賴解壓庫。反正我自己的建議是在開始轉(zhuǎn)換之前先建一個虛擬環(huán)境避免和系統(tǒng)里其他 Python 工具打架。KiCad 本身也需要安裝而且要保證版本不能太舊。epro2kicad 輸出的工程格式是 KiCad 6 以后的 s-expression 格式如果你電腦上還只有 KiCad 5可能打不開生成的工程。這也是我后面反復(fù)強調(diào)版本匹配的原因。轉(zhuǎn)換工具在生成文件時通常會按照某個目標版本來組織內(nèi)容版本不一致很可能會出現(xiàn)格式雖然生成了但打開就報錯的情況。2.3 快速驗證安裝裝好以后不要急著轉(zhuǎn)大工程先跑一下幫助命令確認工具正常epro2kicad --help正常能看到子命令列表比如 convert、inspect、list-layers 之類。然后再準備一個最小的測試工程最好是新建一個只有一個原理圖頁、一個 PCB 的簡單項目先跑一遍完整轉(zhuǎn)換確認打開后的 PCB 至少能正常顯示再去處理復(fù)雜的板子。這一步能幫你把問題和工具本身的 bug 區(qū)分開。3. 核心命令詳解與轉(zhuǎn)換實操3.1 基本轉(zhuǎn)換命令最核心的命令是 convert基本的用法非常直白epro2kicad convert ./demo.epro -o ./kicad_out命令行里的 demo.epro 是 EasyEDA Pro 的工程文件kicad_out 是輸出目錄。執(zhí)行完以后輸出目錄里會多出配套的工程文件。如果你的 EasyEDA Pro 工程是原理圖和 PCB 一體的那么轉(zhuǎn)換后會同時生成原理圖文件和 PCB 文件不需要分別指定。第一次跑的時候我建議打開日志輸出觀察每條轉(zhuǎn)換信息epro2kicad convert ./demo.epro -o ./kicad_out --verbose日志里會明確告訴你當前在解析什么對象、映射哪一層、跳過哪個封裝。這一步特別重要因為你能夠看到工具在哪些地方做了取舍哪些東西被丟棄了。很多工程師拿到轉(zhuǎn)換結(jié)果后直接打開 KiCad看到一堆封裝缺失、網(wǎng)絡(luò)丟失就開始罵工具不行。其實工具早就打了警告只是你開著默認日志沒看。3.2 常用參數(shù)與映射配置epro2kicad 的轉(zhuǎn)換參數(shù)里我實際用得最多的是下面這幾個參數(shù)作用使用建議-o / --output指定輸出目錄每次都用獨立目錄方便對比--verbose顯示詳細日志初次轉(zhuǎn)換務(wù)必開啟--board-only只轉(zhuǎn) PCB跳過原理圖原理圖本來就有問題的工程先用這個隔離--schematic-only只轉(zhuǎn)原理圖需要單獨處理原理圖時用--format 6/7/8指定 KiCad 目標版本必須和你安裝的 KiCad 主版本一致--skip-libraries不自動搜索缺的封裝庫庫目錄混亂時控制轉(zhuǎn)換范圍--map-file xxx.json指定自定義映射規(guī)則項目有固定封裝命名規(guī)則時用這個表格看起來簡單但實際用起來每個參數(shù)都可能影響最終結(jié)果。尤其是 --format 這個參數(shù)我曾經(jīng)在一臺只裝了 KiCad 7 的機器上回憶著默認值沒管就直接轉(zhuǎn)。工具默認生成的是它自己批次對應(yīng)的目標版本結(jié)果轉(zhuǎn)完的 .kicad_pcb 打開就報解析錯誤。后來強制指定 --format 7 重新轉(zhuǎn)換問題立刻消失。3.3 一個完整實例的轉(zhuǎn)換記錄我自己最先拿來做測試的是一塊雙電機驅(qū)動板板子上有兩顆大功率 MOS、一組 H 橋、若干限流電阻和各種接插件。轉(zhuǎn)換命令如下epro2kicad convert ./motor_driver.epro -o ./motor_driver_kicad --format 7 --verbose轉(zhuǎn)換過程比我想象的快一個三四十個元件的板子大概兩三秒就完成了。日志里能看到它在讀取 .epro 工程數(shù)據(jù)然后逐層掃描 PCB 的形狀、覆銅、絲印、鉆孔文件。生成的文件包括:motor_driver.kicad_proKiCad 工程文件motor_driver.kicad_sch原理圖文件motor_driver.kicad_pcbPCB 文件motor_driver.kicad_prt如果版本支持等打開 PCB 后板子外形、走線、焊盤基本都在。但我也發(fā)現(xiàn)絲印層上不少文本變成了默認字體以前在 EasyEDA Pro 里用中文標注的電源輸入電機A這些字符串在 KiCad 里要么變成問號要么變成方框。這是字體映射的問題后面我會專門講。3.4 轉(zhuǎn)換結(jié)果的目錄結(jié)構(gòu)轉(zhuǎn)換成功后建議不要直接把輸出目錄里的文件拖出來亂放。KiCad 工程通常是一個目錄加若干工程文件的結(jié)構(gòu)你最好讓 .kicad_pro、.kicad_sch、.kicad_pcb 保持同一個目錄。如果工具還輸出了封裝備份和緩存目錄也不要急于刪掉因為這些文件對于后續(xù)同步元件庫非常有用。有一個細節(jié)KiCad 的 .kicad_sch 和 .kicad_pcb 都是文本文件轉(zhuǎn)換完之后你可以用文本編輯器打開確認網(wǎng)絡(luò)名、焊盤坐標、覆銅區(qū)域是否合理。第一次看到這么直觀的 EDA 工程我是有點震驚的配合文本搜索定位某個網(wǎng)絡(luò)名比在圖形界面里找快多了。這也是我強烈建議硬件工程師適應(yīng) KiCad 格式的原因之一。4. 轉(zhuǎn)換原理與映射規(guī)則4.1 從 epro 的 JSON 結(jié)構(gòu)說起要理解 epro2kicad 為什么能轉(zhuǎn)為什么要這么轉(zhuǎn)得先看看 EasyEDA Pro 工程文件的內(nèi)部結(jié)構(gòu)。簡單來說.epro 是一個容器里面用 JSON 描述了原理圖頁面的符號、連線、網(wǎng)絡(luò)標簽、PCB 里層的圖形、走線、過孔和整板信息。工具做的第一件事不是直接把它當成 PCB 文件去讀而是先解包、解析 JSON再建立一套中間數(shù)據(jù)模型。這個中間數(shù)據(jù)模型很重要。它有點像翻譯過程中的語義層先把 EasyEDA Pro 里的對象變成中性的元器件、網(wǎng)絡(luò)、層、封裝描述然后再把這些描述輸出成 KiCad 的 s-expression。好處是將來 EasyEDA Pro 改版了工具作者只要改前端的解析器而不用重寫 KiCad 生成器。4.2 層、封裝、焊盤的映射邏輯PCB 的層映射是轉(zhuǎn)換里最核心的部分。EasyEDA Pro 的信號層命名和 KiCad 不一樣工具需要按照默認規(guī)則把 EasyEDA Pro 的頂層對應(yīng)到 F.Cu底層對應(yīng)到 B.Cu中間信號層對應(yīng)到 In1.Cu 到 In30.Cu。絲印層也是一樣頂層絲印對應(yīng) F.Silkscreen底層絲印對應(yīng) B.Silkscreen。如果板子上有機械層或者開窗層工具一般會映射到 KiCad 的 Edge.Cuts 或 User.Drawings但這部分就要小心了因為不同的 EasyEDA Pro 版本對開窗層的使用習(xí)慣并不一致轉(zhuǎn)換后必須人工核對。焊盤的映射要復(fù)雜一些。EasyEDA Pro 里的焊盤形狀有圓形、方形、圓角矩形、異形焊盤等KiCad 的焊盤模型雖然也有類似描述但參數(shù)細節(jié)不一樣。比如同樣是矩形焊盤EasyEDA Pro 通過角半徑、寬度、高度描述KiCad 可能還要關(guān)心焊盤旋轉(zhuǎn)角度、相對位置。工具轉(zhuǎn)換的時候如果直接把字段搬過去很可能出現(xiàn)角半徑丟失或者旋轉(zhuǎn)量差異這在連接器焊盤上尤其常見。我看到的現(xiàn)象是排針、貼片電阻電容這類簡單封裝基本能完美轉(zhuǎn)換而帶有圓形挖空、異形散熱焊盤的封裝轉(zhuǎn)出來之后需要手工修一下。封裝映射又是另一個坑。EasyEDA Pro 里元件引用的封裝名往往帶了立創(chuàng)庫的命名特征比如CAP-TH_5x11mm這種KiCad 自帶庫里未必有同名的封裝。工具通常提供兩種策略一是嘗試根據(jù)尺寸參數(shù)自動生成封裝文件二是把缺失的封裝記錄到日志里讓你在 KiCad 里手動補。我個人更偏好第二種至少不會出現(xiàn)裝錯封裝的風(fēng)險。4.3 一定會丟的東西任何轉(zhuǎn)換工具都不可能 100% 無損epro2kicad 也一樣。常見的丟失項包括EasyEDA Pro 的私有屬性字段比如自定義的 BOM 參數(shù)、采購鏈接、制造商編號部分 3D 模型路徑尤其是立創(chuàng)商城自帶的 step 模型關(guān)聯(lián)文檔級設(shè)置比如圖紙模板、自定義標題欄復(fù)用模塊和子圖邏輯如果原理圖里用了大量模塊復(fù)用轉(zhuǎn)換后很可能會被展開成普通圖塊中文文本的原始字體樣式理解這些丟失項不是為了勸退你而是為了在轉(zhuǎn)換前做好心理準備。我的原則是PCB 的物理連接、覆銅、走線、焊盤這些決定電路能否工作的信息優(yōu)先級最高絲印上的中文標注、自定義屬性這些錦上添花的信息轉(zhuǎn)完再花時間補不值得在轉(zhuǎn)換前花大量時間做格式對齊。5. 常見問題排查與避坑清單5.1 封裝庫缺失怎么辦這是我最常被問的問題也是轉(zhuǎn)換后打開 KiCad 第一眼最容易發(fā)現(xiàn)的毛病一堆封裝修補符。處理原則很簡單先判斷這個封裝是不是標準封裝。如果是標準封裝比如 0805 電阻電容、SOT-23 晶體管、DIP-8 芯片你直接在 KiCad 自帶的庫列表里搜索替換就行不需要從 EasyEDA Pro 那邊掙扎。如果不是標準封裝而是定制化的異形封裝建議把 EasyEDA Pro 里對應(yīng)的封裝信息導(dǎo)出然后在 KiCad 封裝編輯器里照著參數(shù)重新畫一個。千萬不要圖省事隨便找尺寸相近的封裝頂上熱焊盤或散熱焊盤尺寸差一點生產(chǎn)就可能出問題。如果你想批量處理可以利用工具提供的 --map-file 參數(shù)把 EasyEDA Pro 的封裝名映射到 KiCad 的標準庫封裝名。比如{ RES-0805: Resistor_SMD:R_0805_2012Metric, CAP-0805: Capacitor_SMD:C_0805_2012Metric }這種映射文件一次配置以后所有工程都能復(fù)用。我后來把項目里常用的五十多個封裝都整理到了映射文件里轉(zhuǎn)換舊工程的速度明顯快了很多。5.2 字體亂碼與漢字標注轉(zhuǎn)換后打開原理圖或 PCB最扎眼的就是原先的中文標注變成了一串方框。原理很簡單KiCad 默認的西文字體不含中文字形而 EasyEDA Pro 里你用的中文字體在 KiCad 里根本不存在。解決方案有三個層次。第一個層次是治標把不在絲印層的中文注釋刪掉把需要在板子上體現(xiàn)的標注改成英文比如電源輸入改成PWR IN。生產(chǎn)上大多數(shù)絲印標注用英文完全夠用還能讓板子更整潔。第二個層次是治本如果是原理圖里的中文注釋在 KiCad 里用文本工具重新錄入借助系統(tǒng)字體渲染顯示沒問題。第三個層次是給工具做字體映射讓轉(zhuǎn)換后的文本使用一個支持中文的字體文件。不過老實說這條路徑并不總是可靠因為 KiCad 本身對自定義字體的把持比較嚴格你最終可能還是要接受手工調(diào)整。5.3 網(wǎng)絡(luò)丟失和覆銅異常轉(zhuǎn)換后網(wǎng)絡(luò)丟失多半不是工具把網(wǎng)絡(luò)線弄丟了而是網(wǎng)絡(luò)名的映射規(guī)則出了問題。比如 EasyEDA Pro 里一個網(wǎng)絡(luò)叫VCC_5V0在 KiCad 里可能因為非法字符或長度限制被截斷導(dǎo)致原本應(yīng)該連接的網(wǎng)絡(luò)被分成了兩個弱連接域。出現(xiàn)這種問題時你可以在 .kicad_pcb 文件里搜索網(wǎng)絡(luò)名看看是否有類似截斷的字符串。覆銅是另一個高頻雷區(qū)。轉(zhuǎn)換后的覆銅區(qū)域不是自動填充狀態(tài)里面的熱焊盤連接和網(wǎng)格線都需要在 KiCad 里重新執(zhí)行一遍覆銅填充。這是 KiCad 的正常行為不是 bug。你打開 PCB 編輯器按一下 B 鍵或菜單里的 Fill All Zones覆銅才會真正鋪出來。另外轉(zhuǎn)完以后覆銅與焊盤的連接方式可能還是 EasyEDA Pro 的散熱連接設(shè)置如果生產(chǎn)廠家反饋銅皮連接異常優(yōu)先檢查覆銅熱焊盤的規(guī)則。5.4 焊盤和過孔參數(shù)對不上焊盤尺寸對不上最常見的原因是單位換算或精度舍入。EasyEDA Pro 默認單位有時是 mm有時在描述毫米小數(shù)四舍五入后KiCad 里以納米單位保存就會出現(xiàn)細微偏差。解決辦法是不要逐個焊盤去改而是先看全局的尺寸公差如果所有貼片焊盤都小了 0.01mm那大概率是精度丟失不是個別錯誤。過孔方面也有一個容易踩的坑EasyEDA Pro 里的盲埋孔定義和 KiCad 的層對結(jié)構(gòu)不同轉(zhuǎn)換后盲埋孔可能被當成普通通孔處理導(dǎo)致生產(chǎn)文件層面出現(xiàn)問題。如果你板子上有盲埋孔轉(zhuǎn)換后一定要逐層檢查孔信息確認 Start Layer 和 End Layer 正確。5.5 轉(zhuǎn)完打不開或報錯打開就報錯的情況九成是 KiCad 版本和目標格式不匹配。KiCad 6 工程的文件和 KiCad 7、8 并不完全兼容你在命令行指定 --format 的時候要嚴格用你電腦上實際安裝的那個 KiCad 版本號。如果開了新版本 KiCad預(yù)備把舊工程打開再自動升級也不一定 100% 成功所以最好第一次就指定正確版本。還有一類打不開的原因是輸出路徑下的文件名帶了中文或空格。KiCad 對工程路徑中的非英文字符不算友好我遇到過一次因為工程名帶了個中文括號導(dǎo)致原理圖和 PCB 關(guān)聯(lián)不上的詭異問題。建議轉(zhuǎn)換輸出前把工程命名統(tǒng)一改成英文字母、數(shù)字、下劃線組合。6. 這些場景用起來特別值6.1 批量遷移歷史工程前面說的都是單個工程轉(zhuǎn)換但 epro2kicad 真正的威力在批量處理。比如你有一個目錄里面存著幾十個 EasyEDA Pro 工程每個工程都有自己的 .epro 文件你可以用 shell 腳本一把梭for f in ./projects/*.epro; do dir./kicad_out/$(basename $f .epro) mkdir -p $dir epro2kicad convert $f -o $dir --format 7 --verbose done這個腳本看著簡單但有幾個細節(jié)要注意。一是每個工程單獨輸出目錄避免文件互相覆蓋。二是建議腳本里面加個循環(huán)內(nèi)的日志把轉(zhuǎn)換成功和失敗的工程名分別記錄下來方便批量跑完后集中處理。我第一次批量跑的時候以為全程順利結(jié)果后面打開一批文件才發(fā)現(xiàn)有幾塊板子的絲印層被映射成了內(nèi)層原因就是那幾個工程使用了不常見的機械層命名。所以批量跑完后必須抽查。6.2 在 CI 里做格式校驗如果你的團隊已經(jīng)開始用 Git 管理硬件工程epro2kicad 還能扮演格式校驗員的崗位??梢栽?push 或者 tag 時觸發(fā)一個任務(wù)把 EasyEDA Pro 工程轉(zhuǎn)換到 KiCad 格式并在轉(zhuǎn)換失敗時阻止合并。這樣就算團隊里有人仍然用 EasyEDA Pro也不會影響其他人用 KiCad 協(xié)作。我搭過的流程很簡單CI 容器里裝好 Python、克隆 epro2kicad 代碼、安裝依賴然后跑一條轉(zhuǎn)換命令最后用 git diff 檢查生成的工程文件有沒有實際變化。整個過程沒有任何圖形界面非常適合在服務(wù)器環(huán)境跑。6.3 團隊協(xié)作里減少工具鎖死硬件團隊常常會遇到一個問題少數(shù)人習(xí)慣 KiCad少數(shù)人習(xí)慣 EasyEDA Pro圖紙交給另一邊就完全打不開。過去遇到這種情況只能讓人手動導(dǎo)出文件既麻煩又容易帶丟數(shù)據(jù)。有了命令行轉(zhuǎn)換流程之后團隊可以約定EasyEDA Pro 工程為原始輸入KiCad 工程為發(fā)布輸出每次變更通過轉(zhuǎn)換命令生成新的 KiCad 版本。版本管理里同時保留兩種格式誰都能打開誰都能審查。而且 KiCad 工程是文本化的code review 的時候可以直接看網(wǎng)絡(luò)的增刪、元件的替換這在以前用私有格式時是完全不敢想的。我自己在實際操作后的體會是轉(zhuǎn)換工具有沒有用不在于它能不能把每個細節(jié)都完美搬過來而在于它能不能把換工具這件事從手動熬夜變成自動巡檢。epro2kicad 離完美還差得遠但方向已經(jīng)對了所有能交給命令行的就不要交給鼠標。