Cadence Orcad导出BOM的方法与整理BOM的脚本分享

Cadence Orcad导出BOM的方法与整理BOM的脚本分享_第1张图片

前言

在电路原理图和PCB设计完成后,我们需要导出BOM(又称物料清单或焊接清单),用于器件采购和PCB焊接。在使用Cadence Orcad时,不同的设计方式对应不同的导出BOM的操作,本文总结了基于CIS数据库的设计方式以及普通设计方式分别如何导出BOM。

考虑到普通设计方式导出的BOM可能比较混乱,本文还分享一段Python脚本用于整理BOM。


一. 基于CIS数据库的设计方式导出BOM

1.1 选中*.dsn,右击 -> Part Manager,打开元器件管理界面

Cadence Orcad导出BOM的方法与整理BOM的脚本分享_第2张图片

1.2 选中任一行,右击,Update All Part Status,更新所有元器件,使其与数据库一致

Cadence Orcad导出BOM的方法与整理BOM的脚本分享_第3张图片

1.3 在工具栏上单击CIS,或者Reports -> CIS Bill of Materials-> Standard…,打开BOM配置界面

Cadence Orcad导出BOM的方法与整理BOM的脚本分享_第4张图片

1.4 选择要导出到BOM的属性并排序,选中Export BOM report to Excel,OK

如果不选中Export BOM report to Excel,则会导出以.bom结尾的BOM文件,需要使用Excel打开再另存为.xslx格式,相较于直接用Excel打开,多一步操作,故建议选中此项。

Cadence Orcad导出BOM的方法与整理BOM的脚本分享_第5张图片

1.5 查看BOM并保存

为方便展示,这里调整了原始的表格格式。

Cadence Orcad导出BOM的方法与整理BOM的脚本分享_第6张图片 Cadence Orcad导出BOM的方法与整理BOM的脚本分享_第7张图片

基于CIS数据库的方式设计原理图,导出的BOM属性均来自于数据库,每个元器件都是数据库中的一个单独元件,无需手动设置Value,PCB Footprint等属性,所以导出的BOM很规整,根据需要略作修改即可使用。


二. 普通设计方式导出BOM

2.1 Tools -> Bill of Meterials… 或者点击工具栏上的CIS图标,打开BOM配置界面

Cadence Orcad导出BOM的方法与整理BOM的脚本分享_第8张图片

2.2 配置Header与Combined property string,选中Place each part entry on a separate line,OK

Header指的是表头,它和Combined property string(组合属性字符串)是一一对应的,参考配置如下:

Header:

Item\tQuantity\tReference\tPart\tPCB Footprint\tMPN

Combined property string:

{Item}\t{Quantity}\t{Reference}\t{Value}\t{PCB Footprint}\t{Model}

其中MPN指的是manufacturer’s part number即制造商元器件编号,在我的原理图中用Model属性表示,需要根据实际情况修改

Cadence Orcad导出BOM的方法与整理BOM的脚本分享_第9张图片

这里有两种操作方式:

  1. 不选中Place each part entry on a separate line(每个元器件单独成行),则会将其它属性完全相同的位号合并,同时选中Open in Excel,则位号能正常合并为一行。如果未选中Open in Excel,则生成的BOM中位号无法正常合并,一行只能5个位号,如下图所示。
Cadence Orcad导出BOM的方法与整理BOM的脚本分享_第10张图片
  1. 选中Place each part entry on a separate line,则每行都只有一个元器件,方便后续通过脚本来调整同时不选中Open in Excel,就以.BOM为后缀生成原始BOM文件。

如果原理图设计比较规范,导出的BOM比较规整,稍作整理就可以使用,则推荐使用操作1;

如果原理图设计比较混乱,同型号的元器件Value值和制造商编号可能不统一,则推荐使用操作2,后续再通过本文分享的脚本整理BOM。

2.3 整理BOM,存为Excel,或者使用以下Python脚本自动整理BOM

因为不是基于CIS数据库的设计,所以很多参数都是手动修改的,这样就很难统一设计风格。特别是从一些老原理图中复制过来的电路,因为每个人的喜好不一致,同一个元器件的Value可能有多种不同的写法,如100nF电容有时会写做0.1uF或者0.1u,这使得原本是同一个元器件会因为Value值不一致被分开。

如下图展示了一个风格不一致的原理图中导出的BOM。

Cadence Orcad导出BOM的方法与整理BOM的脚本分享_第11张图片

从下图中可见,0805封装0.1uF的电容因为0.1u和0.1uF的区别,以及制造商物料型号的区分被分为了三块,其实在同一个电路板中,它们应都焊接同型号的电容。如果还有人喜欢将0.1uF写成100nF,则同型号电容会被分成更多块。

使用Python脚本来整理BOM将会节约大量的手工整理时间,且不会出错,脚本效果如下图所示。

所有0.1u,0.1uf,100n等格式都会被标准化为100nF;2200pF会被标准化为2.2nF,其它容值同理,电阻的1k和1kΩ会被标准化为1K。

所有同型号的制造商元器件编号均会被保留下来,由设计人员手动确认。

Cadence Orcad导出BOM的方法与整理BOM的脚本分享_第12张图片

Value以OPEN开头的元器件被认为不焊接,会被整理到BOM最后几行。

Cadence Orcad导出BOM的方法与整理BOM的脚本分享_第13张图片

经过此脚本整理的BOM,设计人员只需要确认最后一列的制造商元器件编号即可

Python脚本部分代码如下:

检查BOM格式是否正确:

# 存储错误行的序号
error_row_num = bom_components_begin_row_num
# 位号不允许重复 存储位号
reference_ls = []
# 检查BOM表是否出错,前两列应全为空或全为数字,第三列应为序号,应是字母+数字的形式且不能重复,第四列为Value和第五列PCB Footprint应不为空
is_valid_reference_pattern = r"^[A-Za-z]+\d+$"
for row in origin_sheet.iter_rows(min_row=bom_components_begin_row_num, values_only=True):
    if any(row):  # 判断整行是否存在非空值,为空则跳过
        if ((type(row[0]) == int and type(row[1]) == int) or (row[0] == None and row[1] == None)) == False:
            pyautogui.alert(f'第{error_row_num}行={row}的前两列格式错误,非空,也非数字', '提示')
            sys.exit()
        if (re.match(is_valid_reference_pattern, row[2]) == False):
            pyautogui.alert(f'第{error_row_num}行={row}的前三列格式错误,并非位号', '提示')
            sys.exit()
        elif (row[2].strip() in reference_ls):
            pyautogui.alert(f'第{error_row_num}行={row}的位号重复', '提示')
            sys.exit()
        else:
            reference_ls.append(row[2].strip())
        if row[3] == None:
            pyautogui.alert(f'第{error_row_num}行={row}的前四列格式错误, Value缺失', '提示')
            sys.exit()
        if row[4] == None:
            pyautogui.alert(f'第{error_row_num}行={row}的前五列格式错误, PCB Footprint缺失', '提示')
            sys.exit()
        error_row_num += 1

# pyautogui.alert('此BOM表格式正确!', '确认')

标准化电容值函数:

def convert_capacitance_unit(value):
    cap_unit_ls = ['mF', 'uF', 'nF', 'pF', 'fF']
    cap_value = 0.0
    index = 0
    cap_other = ''
    for j in range(len(cap_unit_ls)):
        for i in range(len(value)): 
            if value[i : i+2] == cap_unit_ls[j]:
                cap_value = float(value[:i])
                index = j
                cap_other = value[i+2:]
                break
        if cap_value != 0.0:
            break
    if cap_value >= 1000:
        cap_value = cap_value / 1000
        index = index - 1
    elif cap_value < 1:
        cap_value = cap_value * 1000
        index = index + 1
    else:
        pass
    if cap_value.is_integer():
        cap_value = int(cap_value)
    value = str(cap_value) + cap_unit_ls[index] + cap_other
    return value

三. 总结与分享

显然,使用CIS数据库的原理图设计方式是更具优势的,但元器件数据库需要专人维护,通常只有大公司才能负担得起,小公司一般还是使用的普通原理图设计方式,通常一些电路经过多人修改后,风格会非常混乱,整理BOM会花费大量时间,这部分工作枯燥且易出错,而使用Python脚本就能一步到位,所以,这里将我编写的BOM整理脚本分享出来,供需要的同学使用。

分享的文件包含脚本源文件Cadence Orcad BOM整理.py已经需要安装的库文件列表requirements.txt,如下图所示。

Cadence Orcad导出BOM的方法与整理BOM的脚本分享_第14张图片

对于Python小白,你需要先下载安装Python,参考:Python下载与安装教程_徐晓康的博客。

然后在命令行中运行以下命令,注意更改requirements.txt的路径,等待脚本运行需要的库安装成功。

pip install -r C:\Users\xu\Desktop\Cadence Orcad BOM整理脚本\requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/

请注意,要直接使用本脚本需要满足以下三个条件:

Cadence Orcad导出BOM的方法与整理BOM的脚本分享_第15张图片

推荐使用Vscode查看、修改与运行Python脚本

对改进脚本有兴趣的同学可以私信我。

欢迎大家关注我的公众号:徐晓康的博客,回复以下四位数字获取。

5101

建议复制过去不会码错字!

此脚本也分享在Gitee上:Cadence Orcad BOM处理 (gitee.com)。


徐晓康的博客持续分享高质量硬件、FPGA与嵌入式知识,软件,工具等内容,欢迎大家关注。

你可能感兴趣的:(Cadence,Cadence,Orcad,BOM,Python脚本,BOM整理)