4使用SQLite存储组件参数,支持灵活的组件定义和用户自定义模块
10from typing
import Dict, List, Any, Optional
11from dataclasses
import dataclass
18 parameters: Dict[str, Any]
19 electrical_params: Dict[str, Any]
20 physical_params: Dict[str, Any]
21 technology_node: str =
"28nm"
22 manufacturer: str =
"Generic"
24 tags: Optional[List[str]] =
None
33 def __init__(self, db_path: str =
"components.db"):
41 CREATE TABLE IF NOT EXISTS components (
44 category TEXT NOT NULL,
45 parameters TEXT NOT NULL,
46 electrical_params TEXT NOT NULL,
47 physical_params TEXT NOT NULL,
48 technology_node TEXT DEFAULT '28nm',
49 manufacturer TEXT DEFAULT 'Generic',
50 description TEXT DEFAULT '',
51 tags TEXT DEFAULT '[]'
56 CREATE TABLE IF NOT EXISTS modules (
59 description TEXT DEFAULT '',
60 components TEXT NOT NULL,
61 connections TEXT NOT NULL
71 cursor = self.
conn.execute(
"SELECT COUNT(*) FROM components")
72 if cursor.fetchone()[0] > 0:
87 "temperature_coefficient": 100
94 tags=[
"passive",
"resistor"]
97 name=
"capacitor_100nf",
100 "capacitance": 100e-9,
106 "temperature_range": [-55, 125]
112 description=
"100nF陶瓷电容",
113 tags=[
"passive",
"capacitor"]
116 name=
"inductor_10uh",
121 "current_rating": 1.0
124 "dc_resistance": 0.1,
131 description=
"10μH电感",
132 tags=[
"passive",
"inductor"]
136 for comp
in basic_components:
141 component_id = str(uuid.uuid4())
143 self.
conn.execute(
'''
144 INSERT INTO components (id, name, category, parameters, electrical_params,
145 physical_params, technology_node, manufacturer, description, tags)
146 VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
151 json.dumps(spec.parameters),
152 json.dumps(spec.electrical_params),
153 json.dumps(spec.physical_params),
154 spec.technology_node,
157 json.dumps(spec.tags)
165 cursor = self.
conn.execute(
166 "SELECT * FROM components WHERE id = ?", (component_id,)
168 row = cursor.fetchone()
176 parameters=json.loads(row[3]),
177 electrical_params=json.loads(row[4]),
178 physical_params=json.loads(row[5]),
179 technology_node=row[6],
182 tags=json.loads(row[9])
186 category: Optional[str] =
None,
187 name_pattern: Optional[str] =
None) -> List[Dict[str, Any]]:
189 query =
"SELECT id, name, category, description FROM components WHERE 1=1"
193 query +=
" AND category = ?"
194 params.append(category)
197 query +=
" AND name LIKE ?"
198 params.append(f
"%{name_pattern}%")
200 cursor = self.
conn.execute(query, params)
203 for row
in cursor.fetchall():
208 "description": row[3]
215 parameters: Dict[str, Any],
216 electrical_params: Optional[Dict[str, Any]] =
None,
217 physical_params: Optional[Dict[str, Any]] =
None,
218 description: str =
"") -> str:
223 parameters=parameters,
224 electrical_params=electrical_params
if electrical_params
else {},
225 physical_params=physical_params
if physical_params
else {},
226 description=description,
234 components: List[str],
235 connections: List[Dict[str, Any]],
236 description: str =
"") -> str:
238 module_id = str(uuid.uuid4())
242 name = f
"module_{module_id[:8]}"
244 self.
conn.execute(
'''
245 INSERT INTO modules (id, name, description, components, connections)
246 VALUES (?, ?, ?, ?, ?)
251 json.dumps(components),
252 json.dumps(connections)
260 cursor = self.
conn.execute(
'''
261 SELECT category, COUNT(*) as count
267 for row
in cursor.fetchall():
268 category, count = row
269 library[category] = count
279if __name__ ==
"__main__":
284 print(
"=== 基本组件库 ===")
285 library = db.get_component_library()
286 for category, count
in library.items():
287 print(f
"{category}: {count} 个组件")
290 print(
"\n=== 搜索无源器件 ===")
291 passive_components = db.search_components(category=
"passive")
292 for comp
in passive_components:
293 print(f
"- {comp['name']}: {comp['description']}")
296 print(
"\n=== 创建自定义组件 ===")
297 custom_id = db.create_custom_component(
298 name=
"custom_op_amp",
305 "supply_voltage": [3.3, 5.0],
306 "input_impedance": 1e12
308 description=
"自定义运算放大器"
310 print(f
"创建自定义组件ID: {custom_id}")
313 print(
"\n=== 创建中间模块 ===")
314 module_id = db.create_module(
315 name=
"amplifier_stage",
316 components=[custom_id],
317 connections=[{
"from":
"input",
"to":
"op_amp_in"}],
320 print(f
"创建模块ID: {module_id}")
323 print(
"\n=== 组件详情 ===")
324 comp = db.get_component(custom_id)
326 print(f
"组件名: {comp.name}")
327 print(f
"类别: {comp.category}")
328 print(f
"参数: {comp.parameters}")
List[Dict[str, Any]] search_components(self, Optional[str] category=None, Optional[str] name_pattern=None)
Optional[ComponentSpec] get_component(self, str component_id)
_populate_basic_components(self)
str create_custom_component(self, str name, Dict[str, Any] parameters, Optional[Dict[str, Any]] electrical_params=None, Optional[Dict[str, Any]] physical_params=None, str description="")
str add_component(self, ComponentSpec spec)
Dict[str, Any] get_component_library(self)
str create_module(self, str name, List[str] components, List[Dict[str, Any]] connections, str description="")
__init__(self, str db_path="components.db")