立创EDA + AI 生成 STM32 原理图教程4
第8章 AI 网表生成与原理图自动绘制8.1 网表 JSON 完整结构interfaceAIGeneratedNetlist{components:Array{lcsc:string;// LCSC 元件编号,如 "C8304"designator:string;// 位号,如 "U1", "R1", "C1"deviceType:"resistor"|"capacitor"|"chip"|"diode"|"triode"|"oscillator"|"inductive"|"otherDevice";x?:number;// 可选坐标y?:number;// 可选坐标rotation?:number;// 可选旋转角度};nets:Array{name:string;// 网络名,如 "VCC_3V3", "GND", "USB_DP"connections:Array{designator:string;// 元件位号pinNumber:string;// 引脚编号};};netFlags?:Array{type:"ground"|"power"|"analogGround"|"protectGround";netName:string;};netPorts?:Array{type:"in"|"out"|"bi";netName:string;position:{x:number;y:number};};}8.2 三步绘制流程Step 1: AI Agent 分析需求 → 生成网表 JSON Step 2: EDA 扩展读取网表 → 创建 + 放置元件 Step 3: 自动布局 + 自动布线 → 人工微调8.3 完整绘制代码import{eda,ESYS_ToastMessageType}from'@jlceda/pro-api-types';// ============ Step 1: 放置元件 ============asyncfunctionplaceComponents(netlist:AIGeneratedNetlist){for(constcompofnetlist.components){constcomponent=eda.sch_PrimitiveComponent.create();component.setSupplierId(comp.lcsc);component.setDesignator(comp.designator);component.setX(comp.x||0);component.setY(comp.y||0);component.setRotation(comp.rotation||0);awaitcomponent.done();// 必须串行 await}}// ============ Step 2: 创建网络标志 ============asyncfunctioncreateNetFlags(netlist:AIGeneratedNetlist){if(!netlist.netFlags)return;for(constflagofnetlist.netFlags){constnetFlag=eda.sch_PrimitiveComponent.createNetFlag();// 根据 type 设置对应的网络标志switch(flag.type){case"ground":eda.sch_PrimitiveComponent.setNetFlagComponentUuid_Ground();break;case"power":eda.sch_PrimitiveComponent.setNetFlagComponentUuid_Power();break;case"analogGround":eda.sch_PrimitiveComponent.setNetFlagComponentUuid_AnalogGround();break;case"protectGround":eda.sch_PrimitiveComponent.setNetFlagComponentUuid_ProtectGround();break;}awaitnetFlag.done();}}// ============ Step 3: 自动布局 + 自动布线 ============asyncfunctionautoLayoutAndRoute(netlist:AIGeneratedNetlist){constallComponents=awaiteda.sch_PrimitiveComponent.getAll();constuuids=allComponents.map(c=c.getPrimitiveId());consttypeMap=Object.fromEntries(netlist.components.map(c=[c.designator,c.deviceType]));// 自动布局awaiteda.sch_Document.autoLayout({uuids:uuids,netlist:netlist,designatorDeviceTypeMap:typeMap}