ARTICLE · 1136874
【Orcad Tcl源码】原理图转换踩坑记:如何用Tcl脚本揪出OrCAD中隐藏的管脚错误


欢度国庆 共谱华章
我们经常会遇到不同EDA软件之间的工程转换问题,最近发现某原理图软件转换到OrCAD时,有一个非常隐蔽的坑:部分电容、电阻等基础器件的管脚号(Pin Number)在转换后出现了异常(比如不是常规的1和2),并且最致命的是,这些错误的管脚号在OrCAD原理图页面上是默认隐藏不显示的!
这种“看不见”的错误如果流到后续的网表导出和PCB Layout阶段,极易导致网表和封装不匹配以及浪费时间查找。

为了提前预防和排查这类转换带来的隐患,依靠人工去双击一个个器件检查属性显然是不现实的。因此,我编写了一个简单的OrCAD Tcl脚本,用于一键扫描整个工程,并按位号顺序导出所有器件的管脚名和管脚号,让所有隐藏错误在文本文档中无所遁形。
今天把这个脚本源码分享给大家,经常做原理图审查或工程转换的同行可以收藏备用,同时也是记录脚本学习。

脚本核心功能

全工程扫描:不局限于当前打开的图纸,脚本会自动遍历整个.dsn工程下的所有原理图文件夹和页面,确保零遗漏。
智能排序:导出的数据会先按照器件位号(Reference)进行字典序排序(如C1, C2, C10),同一器件的管脚也会按数字大小排列,极其利于比对。
格式对齐:输出的纯文本文件采用固定字符宽度对齐,强迫症福音,查阅体验极佳。

使用方法

在电脑D盘根目录(或其他全英文路径)新建一个文本文件,命名为 export_pins.tcl。
将下方的完整源码复制进去并保存。
打开OrCAD Capture,在左侧的项目管理器(Project Manager)中用鼠标左键单击选中你的 .dsn 文件。
在底部的命令窗口(Command Window)中输入以下命令并回车:source {D:/export_pins.tcl}
提示完成后,前往D盘打开 pin_list.txt,即可在Excel或文本编辑器中快速排查非法的管脚号。

完整 Tcl 源码:
# ============================================================# export_pins.tcl# 功能:遍历当前OrCAD工程的所有器件,导出位号、管脚号与管脚名# 用法:在Command Window输入 source {D:/export_pins.tcl}# ============================================================set lStatus [DboState]set lNullObj NULLset lOutFile "D:/pin_list.txt"# 1. 智能获取当前工程 (Design)set lDesign ""if { [catch {set lDesign [GetActivePMDesign]}] == 0 && $lDesign != $lNullObj && $lDesign != "" } {# 成功获取到顶层设计} else {# 后备方案:从当前打开的页面顺藤摸瓜找工程if { [catch {set lPage [GetActivePage]}] == 0 && $lPage != $lNullObj && $lPage != "" } {set lSchem [$lPage GetSchematic $lStatus]set lDesign [$lSchem GetDesign $lStatus]} else {puts "Error: Cannot find active design. Please open a schematic page or select the .dsn file."return}}set all_pins_list {}# 2. 遍历整个工程里的所有“视图/文件夹” (Views)set lViewsIter [$lDesign NewViewsIter $lStatus]set lView [$lViewsIter NextView $lStatus]while { $lView != $lNullObj } {if { [catch {set lSchematic [DboViewToDboSchematic $lView]}] == 0 && $lSchematic != $lNullObj } {# 3. 遍历当前文件夹下的所有页面 (Pages)set lPageIter [$lSchematic NewPagesIter $lStatus]set pPage [$lPageIter NextPage $lStatus]while { $pPage != $lNullObj } {# 4. 遍历当前页面上的所有器件set lPartInstsIter [$pPage NewPartInstsIter $lStatus]set lInst [$lPartInstsIter NextPartInst $lStatus]while { $lInst != $lNullObj } {set lPlacedInst [DboPartInstToDboPlacedInst $lInst]if { $lPlacedInst != $lNullObj } {# 获取实际显示的位号set lRef [DboTclHelper_sMakeCString]set lRefProp [DboTclHelper_sMakeCString "Part Reference"]$lPlacedInst GetEffectivePropStringValue $lRefProp $lRefset lRefStr [DboTclHelper_sGetConstCharPtr $lRef]if { $lRefStr == "" } {$lPlacedInst GetReferenceDesignator $lRefset lRefStr [DboTclHelper_sGetConstCharPtr $lRef]}# 遍历器件管脚set lPinIter [$lPlacedInst NewPinsIter $lStatus]set lPin [$lPinIter NextPin $lStatus]while { $lPin != $lNullObj } {set lPinName [DboTclHelper_sMakeCString]$lPin GetPinName $lPinNameset lPinNameStr [DboTclHelper_sGetConstCharPtr $lPinName]set lPinNum [DboTclHelper_sMakeCString]$lPin GetPinNumber $lPinNumset lPinNumStr [DboTclHelper_sGetConstCharPtr $lPinNum]# 追加到内存列表lappend all_pins_list [list $lRefStr $lPinNumStr $lPinNameStr]set lPin [$lPinIter NextPin $lStatus]}catch {delete_DboPartInstPinsIter $lPinIter}}set lInst [$lPartInstsIter NextPartInst $lStatus]}catch {delete_DboPagePartInstsIter $lPartInstsIter}set pPage [$lPageIter NextPage $lStatus]}catch {delete_DboSchematicPagesIter $lPageIter}}set lView [$lViewsIter NextView $lStatus]}catch {delete_DboDesignViewsIter $lViewsIter}# 检查是否成功抓取数据if { [llength $all_pins_list] == 0 } {puts "Warning: No pins found in the entire design. File not created."return}# 5. 全局字典序排序 (先排位号,再排管脚号)set sorted_all_pins [lsort -dictionary $all_pins_list]# 6. 一次性格式化写入文件set lFh [open $lOutFile w]puts $lFh [format "%-15s %-15s %-20s" "Reference" "PinNumber" "PinName"]puts $lFh [format "%-15s %-15s %-20s" "---------" "---------" "-------"]foreach pin_data $sorted_all_pins {set pRef [lindex $pin_data 0]set pNum [lindex $pin_data 1]set pName [lindex $pin_data 2]puts $lFh [format "%-15s %-15s %-20s" $pRef $pNum $pName]}close $lFhputs "Done: Pin list of the ENTIRE DESIGN has been successfully written to $lOutFile"
EDA软件不仅是一个画图工具,借助脚本接口往往能大幅提升我们的防呆查错效率。希望这个小工具能帮大家在处理格式转换或进行BOM/网表审查时少走弯路。