“您是否還在為團隊成員元件庫版本不一、BOM 表整理繁瑣而煩惱?KiCad Http Library 功能為您提供了一個優雅的解決方案。與傳統的基于 ODBC 的數據庫解決方案不同, Httplib 采用 Rest API,更開放、靈活,可以快速地與企業的 ERP/PLM 等系統進行集成,共享數據。”

老生常談的“統一”器件庫問題
對于每一位硬件工程師來說,一個規整、信息全面的元件庫是高效設計的基石。然而,在傳統的 EDA 工作流程中,元件庫的管理往往是一件令人頭疼的事情:
團隊協作難: 每個工程師本地都有一份元件庫,版本不一,常常導致設計失誤和生產問題。
信息孤島: 原理圖符號、PCB 封裝、3D 模型、規格書、供應商信息、庫存數量…… 這些關鍵信息散落在各處,難以統一管理和調用。
重復勞動多: 每個新項目,都需要花費大量時間整理、核對元件信息,制作 BOM 表,效率低下。
傳統的解決方案通常是基于 ODBC 的數據庫方案,常用的有 Altium 的 DBLib、Cadence 的 CIS、KiCad 的 Database Library 等。這些都是不錯的解決方案,但問題是維護成本較高:即使一個獨立的 SQL 數據庫也不是大部分電子工程師可以搞定的;如果需要和 PLM/PDM 集成,更是需要電子工程師(業務)和 IT 反復溝通、確認需求,即使最終落地,也很難應用起來...

Altium 是最早意識到這個問題的公司,于是才有了后面的 Altium 365,那玩意雖然很強大也很有用,但著實太貴了,不是每個人都用得起;而且 A365 是個閉源的生態,當需要與 ERP、PLM 等企業內部系統對接時,仍然非常麻煩。

現在輪到 KiCad Http Library 出場了,和 ODBC 不同,Httplib采用了更現代、更靈活的 Rest API 方式。這意味著它的后端不再局限于一個特定的數據庫,而可以是任何能夠提供符合 KiCad 規范的 API 接口的 Web 服務。這為與現代云服務、SaaS 應用(如 InvenTree)以及企業自研的 Web 系統集成打開了無限可能。
我們用一張表來對比一下這些解決方案:
| 功能對比 | KiCad Http Library | Cadence Capture CIS (ODBC) | Altium DBLib | KiCad Database Library |
| 核心架構 | Rest API (Http/Https) | ODBC (開放數據庫連接) | ODBC (開放數據庫連接) | ODBC (開放數據庫連接) |
| 數據源 | 任何支持API的Web服務 (如InvenTree, ERP, 自研系統) | 任何支持ODBC的數據庫 (如SQL Server, Oracle, Access) | 任何支持ODBC的數據庫 (如SQL Server, Oracle, Access, Excel) | 任何支持ODBC的數據庫 (如SQLite, MySQL, PostgreSQL) |
| 設置復雜度 | 中等 (需要配置服務端點和客戶端文件) | 復雜 (需配置ODBC數據源, ini文件, 數據庫表結構) | 復雜 (需配置ODBC數據源, svn/git, 數據庫表結構) | 較高 (需配置ODBC驅動, .kicad_dbl文件, 數據庫表結構) |
| 實時性 | 極高(每次訪問都可從服務器獲取最新數據) | 較高 (依賴數據庫實時連接) | 較高 (依賴數據庫實時連接) | 較高 (依賴數據庫實時連接) |
| 跨平臺性 | 極佳(天然跨平臺, 僅需網絡連接) | 較差 (ODBC驅動在不同系統下配置繁瑣) | 較差 (ODBC驅動在不同系統下配置繁瑣) | 較好 (比商業軟件靈活, 但仍受ODBC驅動限制) |
| 團隊協作 | 非常適合(天生為遠程協作設計, 權限控制靈活) | 適合 (需數據庫服務器支持遠程訪問) | 適合 (需數據庫服務器支持遠程訪問) | 適合 (需數據庫服務器支持遠程訪問) |
| 亮點 | 靈活性和Web集成,可與任何現代Web系統對接 | 可與企業PLM系統集成,需定制開發 | 可與企業PLM系統集成,需定制開發 | 為KiCad生態提供的原生開源數據庫方案 |
| 典型場景 | 互聯網團隊、需要與自研系統/InvenTree集成的團隊 | 大型企業,有嚴格物料管理和審批流程 | 使用Altium生態系統進行設計和數據管理的企業 | 希望在KiCad中使用結構化數據庫管理元件的團隊/個人 |
注:KiCad 的 Database Library 暫不支持連接 Access,Excel。 可以看到,KiCad HTTP Library 最大的亮點是使用 Rest API 的方式與各種系統集成。簡單來說,只要企業內的系統開發符合規范的查詢接口,KiCad 通過 httplib 就可以直接讀取分類、數據及器件細節,非常高效。這就是為什么說 httplib 是一個“企業級”的功能,且目前其他 EDA 工具沒有類似的功能。 下面我們就來看下 Httplib 的實現方式。
HTTP Library
HTTP 庫是 KiCad 符號庫的一種,它能從外部源(例如 ERP 系統)獲取元器件數據。與標準的 KiCad 庫不同,它們本身不包含任何符號或封裝的定義。相反,它們引用的是在其他 KiCad 庫中找到的符號和封裝。
HTTP 庫目前是只讀的,但未來將支持讀/寫操作。目前僅支持 REST 或類 REST 的 API,但未來可以輕松添加對其他類型庫的支持。
HTTP Library 配置文件
要創建 HTTP 庫,您必須創建一個配置文件,其中包含 KiCad 連接到提供庫 (API) 并從中檢索數據所需的信息。以下是一個完整的配置文件:
{
"meta": {
"version": 1.0
},
"name": "KiCad HTTP Library",
"description": "A KiCad library sourced from a REST API",
"source": {
"type": "REST_API",
"api_version": "v1",
"root_url": "http://localhost:8000/kicad-api",
"token": "usertokendatastring",
"timeout_parts_seconds": 60,
"timeout_categories_seconds": 600
}
}
將以上模板復制到一個新文件中,并使用.kicad_httplib文件擴展名保存。然后,應該編輯此文件,并將root_url和token值替換為您自己的值。保存后,使用“配置符號庫”對話框將此文件添加到全局符號庫表中,該對話框位于 “設置”→“管理符號庫…” 下。

用戶可以選擇配置兩個超時設置。timeout_parts_seconds 設置規定了元件信息的有效期,而 timeout_categories_seconds 設置決定了類別的有效期。默認值分別設置為 60 秒和 600 秒,但如果預計數據通常保持不變,可以選擇更高的值。這將顯著加快符號選擇器的打開速度。值得注意的是,無論這些超時設置如何,KiCad 都會在首次啟動時重新緩存數據。
認證 (Authentication)
認證僅通過訪問令牌 (Access Token)完成;Token 通常由提供服務的應用程序頒發。此令牌將用于每個請求中,并使用以下請求頭格式:'AUTHORIZATION': 'Token usertokendatastring'。
REST API 端點定義
與 ODBC 不同,REST API 提供的是已預先格式化的信息。KiCad 不需要了解任何關于表的信息,也無需了解提供方應用程序(API)的底層數據庫結構。
KiCad 需要一個根 URL (root-url)和一個API 版本 (api-version)來訪問庫。這些信息必須通過配置文件提供。有兩個端點 (endpoint) 將為 KiCad 提供所有必要的數據,它們分別是:
categories
parts
示例
比如,使用配置文件中所示的root-url和api-version,返回屬于ID = 16的分類下的所有元器件:{root-url}/{api-version}/parts/category/16.json。參照示例配置文件,相當于:http://localhost:8000/kicad-api/v1/parts/category/16.json。
另一個例子是使用非整型 ID,例如Resistors:{root-url}/{api-version}/parts/category/Resistors.json。
如下文所示,KiCad 需要一個 ID(可以是數字或非數字)用于查詢 API,以及一個可選的、人類可讀的名稱,該名稱將作為元器件名稱顯示給用戶。如果 API 沒有返回可選的name鍵,KiCad 將使用id鍵作為元器件名稱。
請注意,KiCad 只接受字符串。所有整數、布爾值、雙精度浮點數、單精度浮點數等都必須在響應請求時轉換成字符串。
端點驗證 (Endpoint Validation)
KiCad 會查詢根 URL{root-url}/{api-version}/,并期望它返回一個以端點為鍵值對的字典。
HTTP_200_OKJSON{"categories":"","parts":""}
注意:只驗證鍵 (key)。值 (value)可以留空或設置為實際的 URL。
獲取分類 (Categories)
為了獲取分類,KiCad 使用標準的 GET 請求查詢{root-url}/{api-version}/categories.json。KiCad 期望服務器響應一個 JSON 格式的數組,其中包含一個或多個分類。對于每個分類,它只需要id和name,并將在符號選擇器 (Symbol Chooser)中將它們顯示為庫。屬于該分類的元器件將分別顯示在這些庫下面。
HTTP_200_OK[ { "id":"16", "name":"Active Parts/Clock and Timer ICs", "description":"A description of Active Parts/Clock and Timer ICs" }, { "id":"17", "name":"Active Parts/Driver ICs", "description":"A description of Active Parts/Driver ICs" }, { "id":"20", "name":"Active Parts/Embedded Processors and Controllers", "description":"A description of Active Parts/Embedded Processors and Controllers" }, { "id":"22", "name":"Active Parts/Interfaces", "description":"A description of Active Parts/Interfaces" }, { "id":"15", "name":"Active Parts/Logic ICs", "description":"A description of Active Parts/Logic ICs" }]
獲取元器件
為了在 KiCad 的符號選擇器中某個分類下顯示元器件,KiCad 會使用標準的 GET 請求查詢 parts 端點:{root-url}/{api-version}/parts/category/16.json;其中 16 是特定分類的數字 ID 示例。KiCad 期望服務器響應一個包含該特定分類下一個或多個元器件的數組。
對于每個元器件,KiCad 只需要一個id。如果需要在符號選擇器中顯示與id不同的名稱,可以使用如下所示的可選name鍵。此外,還可以使用description鍵提供元器件描述。
HTTP_200_OK[ { "id":"69", "name":"830050789", "description":"CRYSTAL 32.7680KHZ 12.5PF SMD" }, { "id":"40", "name":"NE555PSR", "description":"IC OSC SINGLE TIMER 100KHZ 8SO" }, { "id":"238", "name":"TLC555CPSR", "description":"IC OSC SINGLE TIMER 2.1MHZ 8SO" }]
提示:由于這些元器件詳情僅用于在符號選擇器中進行高層級的概覽,因此應該只響應所需的最少數據。這將加快數據獲取過程,從而提升用戶體驗。因此,KiCad 只期望獲取顯示元器件所需的最少量的信息。在此階段,任何其他的鍵/值對都將被忽略。但是,如果這樣更容易實現且帶寬不是問題,API 也可以發送完整的詳細信息。
獲取詳細元器件信息
當用戶在符號選擇器中點擊一個元器件時,KiCad 將嘗試使用 parts 端點和標準的 GET 請求來檢索該元器件的完整詳細信息:{root-url}/{api-version}/parts/16.json。KiCad 期望得到一個單一的 JSON 對象,包含如下所示的鍵(注意:此示例中使用了name鍵)。
字典fields可以包含任意數量的附加鍵/值對;這也可以是一個空字典!一個key代表一個在 KiCad 符號編輯器中可見的字段名稱 (FIELD Name)。服務器可以根據需要提供任意多的字段,沒有數量限制。
每個KiCad 字段 (FIELD)都用一個字典表示,并且必須至少包含value鍵。此外,API 還可以通過可選的visible鍵返回該字段是否可見。如果未指定此鍵,KiCad 將默認顯示該字段。
如上所述,所有類型都必須轉換為字符串。允許的布爾值字符串為:"1", "0", "true", "false", "yes", "no", "y", "n"。這些字符串不區分大小寫。
HTTP_200_OK{ "id":"16", "name":"R_0R0_0603_0.125W_1%", "symbolIdStr":"Device:R", "exclude_from_bom":"False", "exclude_from_board":"False", "exclude_from_sim":"True", "fields": { "footprint": { "value":"Resistor_SMD:R_0603_1608Metric", "visible":"False" }, "datasheet": { "value":"www.kicad.org", "visible":"False" }, "value": { "value":"0R0" }, "reference": { "value":"R" }, "description": { "value":"I am a resistor", "visible":"False" }, "keywords": { "value":"RES passive smd", "visible":"False" }, "custom1": { "value":"MyText1", "visible":"False" }, "custom2": { "value":"MyText2", "visible":"False" }, "custom3": { "value":"MyText3", "visible":"False" } }}
符號屬性 (Symbol Attributes)
如上例所示,API 提供了包含排除標志的功能。這些屬性用于在 KiCad 軟件中指定某些偏好設置。當前支持以下排除標志:
exclude_from_bom(從物料清單中排除)
exclude_from_board(從電路板中排除)
exclude_from_sim(從仿真中排除)
需要注意的是,如果這些排除標志中的一個或多個未被明確指定,KiCad 將假定它們未被設置為排除。換句話說,默認行為是在相關流程(BOM 生成、電路板布局和仿真)中包含所有項目和功能,除非使用這些排除標志明確指定。
服務器響應代碼 (Server Response Codes)
如果 KiCad 收到的不是HTTP 200響應,它將只向用戶顯示一條錯誤消息,并完全忽略該特定請求的結果。這意味著,如果 API 不符合要求,KiCad 最終可能無法顯示部分或任何分類或元器件。
如何實測?
由于需要服務端返回 Http library 約定的格式,因此實際測試不那么容易。大神可以自己起一個本地 Server 來模擬這一過程。其他同學嘗試在本地部署一些開源的系統進行嘗試,比如:
Part-DB:https://github.com/Part-DB/Part-DB-server
Inventree:https://inventree.org/
這兩個平臺都已經支持了 KiCad httplib,經過配置后可以直接連接。Inventree 還提供了一個插件,直接配置即可:
https://github.com/afkiwers/inventree_kicad
結束語 最后,我們以 Eli Hughes 在 KiCon US 上的演講結束 HTTP Library 的介紹。Eli 詳細講述了他如何在企業中使用 Httplib,以及同時讓 Altium 和 KiCad 使用一致的數據源: KiCad 已支持導入 Altium 工程(Project)
注意:如果想第一時間收到 KiCad 內容推送,請點擊下方的名片,按關注,再設為星標。
常用合集匯總:
和 Dr Peter 一起學 KiCad
KiCad 8 探秘合集
KiCad 使用經驗分享
KiCad 設計項目(Made with KiCad)
常見問題與解決方法
KiCad 開發筆記
插件應用
發布記錄
審核編輯 黃宇
-
元器件
+關注
關注
113文章
5004瀏覽量
99684 -
KiCAD
+關注
關注
5文章
321瀏覽量
10400
發布評論請先 登錄
國內企業級SSD廠商加速崛起
【產品介紹】Xpedition Enterprise--企業級電子設計全流程解決方案
華秋 KiCad 發行版 9.0.6 發布:云端庫添加華秋庫存、價格
華秋 KiCad 發行版 9.0.5 發布:更多元器件庫的選擇
華秋 KiCad 發行版 9.0.4 發布:屬于您自己的云端器件庫及模塊電路庫
Aisler 發布 Lovely Library:一個為 KiCad 打造的高質量歐洲元器件庫
企業級Linux磁盤維護的完整流程
2025 KiCon Asia KiCad 用戶大會
企業級智能體是什么?有什么作用?
企業級MySQL數據庫管理指南
企業級SSD的核心技術與市場趨勢
KiCad 與 PLM(產品生命周期管理)初學者入門指南
誰說高性能必須高能耗?揭秘企業級SSD功耗管理“黑科技”
詳解 KiCad HTTP Library:一個“企業級”的元器件庫管理功能
評論