初学TCL对Orcad进行二次开发

#加载脚本#

source [file normalize {D:\Pro22\cdssetup\OrCAD_Capture\tclscripts\capAutoLoad\getNetNames.tcl}]

也可以新建一个load_tcl.tcl文件内容如下,以后每次只要在命令行敲命令ra就可以重新加载脚本。

proc ra {} {
    source "D:/Pro22/cdssetup/OrCAD_Capture/tclscripts/capAutoLoad/getNetNames.tcl"
}

#获取原理图中的网络名#

由于一点基础都没有,最近才开始看官方文档OrCAD_Capture_TclTk_Extensions.pdf

先让AI帮忙写了一段代码,虽然还不是很懂,但代码看起来很规范,也带有比较详细的注释。试着运行了以下,有报错,目前定位在while循环这部分。

#报错信息#

Invalid method. Must be one of: configure cget -acquire -disown -delete GetRefCount GetCMData GetDCFPath IsDesignCMDisabled IsDesignCMEnabled IsDesignPartiallyCMEnabled GetDesignLoadStateInCM setDesignLoadStateInCM SetCMData ClearCMData IncRefCount DecrefCount GetName GetOwner GetContainingLib IsModified IsPersistent IsEquivalent GetModifyTime GetCreateTime GetSourceLibName IsCachedCopy IsOutOfDate GetObjectType GetSemanticString GetParentObj MarkModified SetName SetObjectType SetSourceLibName
 

#源代码#

如下:

# 从设计中获取网络名
proc get_net_names_from_current_design {} {
    # 设置会话
    set session $::DboSession_s_pDboSession
    DboSession -this $session
    set lStatus [DboState]
    #set lPartInstIter [$pPage NewPartInstsIter $lStatus]
    #set lPartInst [$lPartInstIter NextPartInst $lStatus]
    #set lNullObj NULL

    # 获取活动设计

set lMessage "---------------------------------------------------------------------------------"
set lMessageStr [DboTclHelper_sMakeCString $lMessage]
DboState_WriteToSessionLog $lMessageStr
puts [DboTclHelper_sGetConstCharPtr $lMessageStr]
set lSession $::DboSession_s_pDboSession
DboSession -this $lSession
set lNullObj NULL
set lDesign [$lSession GetActiveDesign]

if { $lDesign == $lNullObj} {
set lError [DboTclHelper_sMakeCString "Active design not found"]
DboState_WriteToSessionLog $lError
puts [DboTclHelper_sGetConstCharPtr $lError]
return
}


    # 初始化网络名列表
    set all_net_names {}
    set status [DboState]

    # 获取原理图迭代器
    set schematic_iter [$lDesign NewViewsIter $status $::IterDefs_SCHEMATICS]
    set schematic [$schematic_iter NextView $status]
    set lNullObj NULL
    # 遍历原理图
    while {$schematic!= $lNullObj} {
        # 获取页面迭代器
        set pages_iter [$schematic NewPagesIter $status]
        set page [$pages_iter NextPage $status]

        # 遍历页面
        while {$page!= $lNullObj} {
            # 获取扁平网络迭代器
            set flat_nets_iter [$page NewFlatNetsIter $status]
            set flat_net [$flat_nets_iter NextFlatNet $status]

            # 遍历扁平网络
            while {$flat_net!= $lNullObj} {
                set net_name [DboTclHelper_sMakeCString]
                $flat_net GetName $net_name
                lappend all_net_names $net_name
                set flat_net [$flat_nets_iter NextFlatNet $status]
            }

            # 释放页面扁平网络迭代器
            delete_DboPageFlatNetsIter $flat_nets_iter
            set page [$pages_iter NextPage $status]
        }

        # 释放原理图页面迭代器
        delete_DboSchematicPagesIter $pages_iter
        set schematic [$schematic_iter NextView $status]
    }

    # 释放原理图迭代器
    delete_DboLibViewsIter $schematic_iter

    # 释放会话
    delete_DboSession $session

    return $all_net_names
}

# 注册运行命令
RegisterAction "getNCD" "get_net_names_from_current_design" "" "" ""

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值