前言
对于怎么建立本地CIS元件库,已经做了预研。 现在准备从头做一个自己的本地元件库。
实验
还原SPB17.4
在预研时,已经动了SPB17.4中的配置。 还好,我早想到这种情况,当初刚安装完SPB17.4 S026(还没执行和谐)时,就将Cadence服务停掉,压缩了一个本地备份。 当时做备份,是为了防止装新补丁(S027补丁就不能在win10上用)时,如果安装不成功,导致SPB17.4不能用,还要重新装,浪费本来可以节省的时间。
停掉Cadence服务
先重新启动计算机,进入桌面后,如果cadence服务在运行,先停掉。 否则删除cadence文件夹会显示文件夹在用,无法删除还原。
还原SPB17.4S026
删掉SPB文件夹(C盘和D盘2个地方),释放出备份(C盘和D盘2个地方)
和谐备份
刚还原的备份是不能正常运行的,因为我备份的时机,就是和谐之前的SPB17.4S026. 用阿狸狗进行和谐
试试和谐的SPB17.4是否能正常运行
打开 Capture CIS 17.4 和PCB Editor 17.4 都试试,看看是否为正常的S026. Capture CIS 17.4 正常启动,是S026版本 PCB Editor 17.4 正常启动,是S026版本。 退出 Capture CIS 17.4 和PCB Editor 17.4
选择CIS数据库的类型
我看网上各位同学用的数据库都是access. 看SPB17.4官方文档,只要支持ODBC的数据库就行。 SPB官方给的例子数据库,采用的是access和sqlite. sqlite更环保,我决定采用sqlite作为CIS数据库的类型。
安装ODBC的Sqlite驱动
我没太注意SQLite的ODBC驱动是啥时候装上的。 先去看看有没有sqlite的ODBC驱动 可以看到我的计算机已经安装了SQLite3的ODBC驱动。 但是好奇怪,这个驱动的版本是2014年的。 驱动对应的名称为SQLITE3ODBC.DLL 公司名称为 Christian Werner Software & Consulting
去找找,看看这个驱动是在哪个目录中? 我有点明白了,这个驱动是我装git的时候,安装上的。因为装git时,我选的是使用sqlite数据库。 看了sqlite3odbc.dll的版本,产品版本是V3.8.6,文件版本是0.999 确实是在ODBC驱动中看到的sqlite ODBC版本。
如果本机已装的git没有使用sqlite ODBC(其实我也不确定,是不是装git时,带上的sqlite ODBC驱动),那就装一个sqlite3 ODBC 驱动。
安装sqlite3 ODBC 驱动
从sqlite ODBC 驱动签名,找到sqlite ODBC 官网的地址是 http://www.ch-werner.de/, 但是这个官网访问不到。
在网上找了一会,没有找到sqlite odbc 驱动的安装包,要不是不适合在win10上安装,要不是要收费的驱动安装程序。
再想想,既然我计算机上装了sqlite odbc驱动,那安装包还在吧? 找找,居然找到在SPB17.4目录中的支持包目录下有sqlite ODBC驱动安装包。 那就是这个版本。如果没有sqlite驱动,就安装这个好了。 尝试手工安装了一次,安装的默认目录和现有sqlite ODBC驱动目录不一样,装完了,看odbc驱动,和开始安装好的驱动版本都一样。 用BC4进行2进制比较,除了uninstall.exe有3个字节不一样。其余文件都一样。那说明sqlite ODBC驱动的安装程序,就是SPB17.4自带这个sqliteodbc_w64.exe。
找个sqlite开源工具来建库
找个开源工具 sqlitestudio https://github.com/pawelsalawa/sqlitestudio/releases 当前版本是V3.3.3
从SPB17.4的例子数据库中导出表结构
DB中的一个表就是一类元件(e.g. 表-电阻类别,表-电容类别) 官方给的例子库为.db, 位置 = D:\Cadence\SPB_17.4\tools\capture\samples 2个DB名称为 BENCH.DB, DemoBENCH.DB 用sqlitestudio 打开一个大的例子库 BENCH.DB,有500KB, 估计元件多些。 打开DB后,看表设计字段,最多17个字段。 这些字段因为要和SPB设计文件相关联,其中有几个字段最好别改名称(最好使用英文作为字段名称),否则关联DB和设计文件时,因为DB字段和SPB设计文件要求的字段名称不同,要很专心才行。 将例子库中的表设计字段都导出为SQL脚本文件,看看表字段有些17个,有些15个字段,有些4个字段,字段名称和定义都有啥区别?
导出后的表定义
PRAGMA foreign_keys = off;
BEGIN TRANSACTION;
DROP TABLE IF EXISTS Capacitor;
CREATE TABLE Capacitor (
[Part Number] VARCHAR (255),
[Part Type] VARCHAR (255),
Value VARCHAR (255),
Description VARCHAR (255),
Voltage VARCHAR (255),
Tolerance VARCHAR (255),
[Schematic Part] VARCHAR (255),
[Allegro PCB Footprint] VARCHAR (50),
PSpice VARCHAR (255),
[Manufacturer Part Number] VARCHAR (255),
Manufacturer VARCHAR (255),
[Distributor Part Number] VARCHAR (255),
Distributor VARCHAR (255),
Price FLOAT,
Availability VARCHAR (255),
Datasheet VARCHAR (255),
ActivepartsID VARCHAR (255)
);
COMMIT TRANSACTION;
PRAGMA foreign_keys = on;
PRAGMA foreign_keys = off;
BEGIN TRANSACTION;
DROP TABLE IF EXISTS IC;
CREATE TABLE IC (
[Part Number] VARCHAR (255),
[Part Type] VARCHAR (255),
Value VARCHAR (255),
Description VARCHAR (255),
[Schematic Part] VARCHAR (255),
[Allegro PCB Footprint] VARCHAR (50),
PSpice VARCHAR (255),
[Manufacturer Part Number] VARCHAR (255),
Manufacturer VARCHAR (255),
[Distributor Part Number] VARCHAR (255),
Distributor VARCHAR (255),
Price FLOAT,
Availability VARCHAR (255),
Datasheet VARCHAR (255),
ActivepartsID VARCHAR (255)
);
COMMIT TRANSACTION;
PRAGMA foreign_keys = on;
PRAGMA foreign_keys = off;
BEGIN TRANSACTION;
DROP TABLE IF EXISTS Inductor;
CREATE TABLE Inductor (
[Part Number] VARCHAR (255),
[Part Type] VARCHAR (255),
Value VARCHAR (255),
Description VARCHAR (255),
[Current] VARCHAR (255),
Tolerance VARCHAR (255),
[Schematic Part] VARCHAR (255),
[Allegro PCB Footprint] VARCHAR (255),
PSpice VARCHAR (255),
[Manufacturer Part Number] VARCHAR (255),
Manufacturer VARCHAR (255),
[Distributor Part Number] VARCHAR (255),
Distributor VARCHAR (255),
Price VARCHAR (255),
Availability VARCHAR (255),
Datasheet VARCHAR (255),
ActivepartsID VARCHAR (255)
);
COMMIT TRANSACTION;
PRAGMA foreign_keys = on;
PRAGMA foreign_keys = off;
BEGIN TRANSACTION;
DROP TABLE IF EXISTS Misc;
CREATE TABLE Misc (
[Part Number] VARCHAR (255),
[Part Type] VARCHAR (255),
Value VARCHAR (255),
Description VARCHAR (255),
Rating VARCHAR (255),
Tolerance VARCHAR (255),
[Schematic Part] VARCHAR (255),
[Allegro PCB Footprint] VARCHAR (50),
PSpice VARCHAR (255),
[Manufacturer Part Number] VARCHAR (255),
Manufacturer VARCHAR (255),
[Distributor Part Number] VARCHAR (255),
Distributor VARCHAR (255),
Price FLOAT,
Availability VARCHAR (255),
Datasheet VARCHAR (255),
ActivepartsID VARCHAR (255)
);
COMMIT TRANSACTION;
PRAGMA foreign_keys = on;
PRAGMA foreign_keys = off;
BEGIN TRANSACTION;
DROP TABLE IF EXISTS Resistor;
CREATE TABLE Resistor (
[Part Number] VARCHAR (255),
[Part type] VARCHAR (255),
Value VARCHAR (255),
Description VARCHAR (255),
Power VARCHAR (255),
Tolerance VARCHAR (255),
[Schematic Part] VARCHAR (255),
[Allegro PCB Footprint] VARCHAR (50),
PSpice VARCHAR (255),
[Manufacturer Part Number] VARCHAR (255),
Manufacturer VARCHAR (255),
[Distributor Part Number] VARCHAR (255),
Distributor VARCHAR (255),
Price FLOAT,
Availability VARCHAR (255),
Datasheet VARCHAR (255),
ActivepartsID VARCHAR (255)
);
COMMIT TRANSACTION;
PRAGMA foreign_keys = on;
PRAGMA foreign_keys = off;
BEGIN TRANSACTION;
DROP TABLE IF EXISTS TMPPRTS;
CREATE TABLE TMPPRTS (
TMPPRTNO VARCHAR (64),
RELPRTNO VARCHAR (64),
USERNAME VARCHAR (64),
CREATETIME VARCHAR (128)
);
COMMIT TRANSACTION;
PRAGMA foreign_keys = on;
用BC4比较这几个导出表
电容表比IC表多了 Voltage VARCHAR (255), // 电压 Tolerance VARCHAR (255), // 精度
电感表和电容表的区别: 1. 电感表的特性是[Current] 电容表是 Voltage 因为没有空格,所以字段名称不用[]包裹。 2. [Allegro PCB Footprint] 的varchar长度不一样,这个都搞成255长度就好。 3. Price 一个是VARCHAR[255], 一个是FLOAT. 这个都搞成FLOAT, 算板子成本时方便。
Misc表用了字段Rating(分级) 电容表用了字段Voltage(电压) 电阻表用了 Power 电容表用了 Voltage
tmpprts.sql 这个表并不是一个正常的元器件类别的表。里面有用户名,创建时间,临时表号码,关联表号码这样的字段。 这应该是CIS数据库应用的多表查询那种高级用法或者就是一个临时表,先不用管。要加载了BENCH.DB,作为CIS数据库,才能看出这个表怎么用。
表字段定义的规则
可以看出除了TMPPRTS表,其他表都是正常普通的CIS数据库的表。 其中, 有些字段是完全相同的定义。 另外,根据元件类别(e.g. 电阻类,电容类)的不同,有些特定的参数不一样。 那些公用的字段名称最好和官方给的一样,在将DB和SPB设计文件关联时,方便一些。 元件类别表名称可以根据大电子元器件网站(e.g. digikey)的分类搞。自己分类也行,觉得分类不合适了,再调整就行。一个完善规范的CIS库中的表结构和表名称规划,也不是那么容易的。
公用字段定义和含义
Part Number
公司内的元器件编号 e.g. ECE-A2EU100W or XX_PART_ID_0001
[Part Number] VARCHAR (255),
Part Type
元件类型 e.g. 电容表中的 [Part Type] = Electrolytic or 电解电容
[Part Type] VARCHAR (255),
Value
元件值 e.g. 260R
Value VARCHAR (255),
Description
元件概述(描述) e.g. 10UF 250V SU RAP ALUM ELECT CAP.
Description VARCHAR (255),
Schematic Part
原理图符号的标识 (格式 : 库名称 + “\” + 元件名称), 这个字符串要传到capture中要用的,写错了,放数据库元件时,就没有原理图符号。
e.g. DTOA\AD390 这是1个元件,是DTOA目录下的AD390元件 e.g. OPAMP\AD811/SO16 一个元件,目录和元件的分隔符号是’/‘或’‘都可以 e.g. 74HC374,SN74HC374 这是2个元件,即2个元件都用这1个原理图符号,2个元件用’,'号隔开 其实2个元件可以搞2个原理图符号,不必共用1个原理图符号。
[Schematic Part] VARCHAR (255),
Allegro PCB Footprint
PCB封装名称。 这个名称不能像原理图元件属性那样,用库+""+元件名称 来表示。 必须直接写封装名称。 如果封装找不到,需要自己加载对应的PCB库。或指定库路径。 e.g. dip14_3 这是一个封装 e.g. dip14_3,soic14 这是2个封装,用’,'隔开. 即这个元件有2个封装可选。
[Allegro PCB Footprint] VARCHAR (255),
PSpice
仿真模型符号
PSpice VARCHAR (255),
Manufacturer Part Number
原厂物料编号/原厂器件型号/制造商元件编号 e.g. LM2902M
[Manufacturer Part Number] VARCHAR (255),
Manufacturer
元件厂商名称/制造商名称 e.g. ANALOG DEVICES e.g. ST
Manufacturer VARCHAR (255),
Distributor Part Number
经销商元件编号 e.g. LM2902M-ND 这个是具体型号 e.g. C10001 嘉立创销售时,给的对应嘉立创商品编号. 嘉立创作为销售商.
[Distributor Part Number] VARCHAR (255),
Distributor
销售商名称 e.g. Digi-Key e.g. 嘉立创
Distributor VARCHAR (255),
Price
元件购买价格 e.g. 4.37
Price VARCHAR (255),
Availability
元件可用性/是否可以买到/供货周期 e.g. In Stock 现货 e.g. 60 days 订货需要60天 e.g. Historical Data 历史数据 已经停产 买不到了
Availability VARCHAR (255),
Datasheet
该元件对应的数据表文档位置名称。(这个字段有用) e.g. http://www.analog.com/pdf/AD811_d.pdf 在线文档 e.g. d:\my_SPB_lib\datasheet\AD811_d.pdf 本地文档
Datasheet VARCHAR (255),
ActivepartsID
活动元件ID (不理解这个字段啥意思) e.g. http://cds.orcad.com/default.asp?PID=188723 官方给出的url访问不到 估计这个字段是元件设计文件(原理图库/PCB库)的在线更新页面
ActivepartsID VARCHAR (255)
必须的字段ID
建立好的CIS元件表和SPB设计文件交互时,有些字段是必须的,如下: Part_Number Value Part_Type Schematic_Part PCB_Footprint PSpice_Model
为啥这6个字段是必须的呢?因为关联CIS数据表和SPB设计文件的实际操作,就必须要指定这6个字段。具体操作见cadence SPB17.4 part database,这个实验有指定这6个字段的实际操作。
非必须的字段ID
非必须的字段ID根据元器件种类的不同,会有区别。可以视元件类的特性不同,酌情添加。
为了使BOM表单(嘉立创BOM单模板)做出后,直接可以用来下单。可以酌情修改字段名称和添加必要的字段。
根据在线下单模板来调整字段名称或增加字段
现在能在线下单的供应商,只发现嘉立创商城有这功能。 以前用AD做出的BOM单,还需要手工调整。 如果SPB做出的料单,能直接下单,那不是更好么? 嘉立创模板的例子如下 将这个模板再上传到嘉立创下单助手中,点击配单如下 点击搜索后,会让选择BOM单套数。 确实很方便。但是如果有匹配不到的元件,就要调整这些关键字和嘉立创的商品关键字一致才行。
嘉立创需要的CIS库元素核对
型号 => Part Type 品牌 => Manufacturer 商品编号 => Distributor Part Number 封装 => 并不是 Allegro PCB Footprint,而是要再增加一个 Footprint name. 查看DemoBENCH.DB时,发现SPB官方给出这个封装名称字段为 Layout PCB Footprint 用量 => 这个是出料单时,才统计出的一个列,不需要将这个字段放入CIS数据库。
所以要用出好的BOM单,去嘉立创自动买料,还需要增加一个字段 Footprint name ,对应嘉立创上的自动买料流程。
在嘉立创上自动买料时,先上传BOM文件,再手工选择这5个元素的对应列,再手工选择有效料单的开始行和结束行。所以自己做的BOM料单上,有这5个关键元素就行,列名称不需要和嘉立创的列名称相同。
针对不同元件类特有的字段
可以加在公用字段的后面,根据所分元件类的不同特点,增加实际需要的字段。
共有字段的数量确定
SPB官方整的例子数据库,应该说是很规范的。 如果要去掉自己不需要的字段, 根据自己的理解,将不要的可选字段去掉。
确定自用的CIS库中的表模板(只包含公用字段)
直接写为SQL建表模板,不同的元件类表,在这个模板上修改表名,在后面增加特有的字段就可以了。
PRAGMA foreign_keys = off;
BEGIN TRANSACTION;
DROP TABLE IF EXISTS tbl_cis_template;
CREATE TABLE tbl_cis_template (
[Part Number] VARCHAR (255),
[Part Type] VARCHAR (255),
Value VARCHAR (255),
Description VARCHAR (255),
[Schematic Part] VARCHAR (255),
[Footprint name] VARCHAR (255),
[Allegro PCB Footprint] VARCHAR (255),
Datasheet VARCHAR (255),
PSpice VARCHAR (255),
Manufacturer VARCHAR (255),
[Manufacturer Part Number] VARCHAR (255),
Distributor VARCHAR (255),
[Distributor Part Number] VARCHAR (255),
Price FLOAT,
Availability VARCHAR (255)
);
COMMIT TRANSACTION;
PRAGMA foreign_keys = on;
元件类表的命名建议
看了从x宝上弄来的成品CIS库,可以看到,人家的表名是中文的。 那我也想搞UTF8中文表名。 中文表名 对应和元器件的类型,这个类型因为是想用嘉立创的自动买料。我决定元器件类的表名,就用在嘉立创找到元件上表明的元器件类的中文名称。
e.g. 现在要做一个 6pin 2.54mm间距的绿端子,在嘉立创上搜到一个有货的商品链接如下 那么这个元件要做的时候,就放到“弹簧式接线端子”这个表中。如果这个表不存在,就新建一个表来用。 大厂商品归类,是很规范的(绝对不是拍着脑门想出来的)。采用他们的分类,八九不离十都是正确的。
如果像从头这样建库建表,慢慢累积,用到啥元件,就建立什么类型的表。时间长了,自己自然能积累一些可用的库。而且这些库都是自己常用的元件。
如果真是从头来建库,那么可以先将原理图符号先在表中建立好,然后画原理图,等原理图画完后,自己审核过,再画封装,补充封装到自己的CIS库的对应元件类表中。然后再走画PCB的流程。
建立空CIS库
运行SQLiteStudio.exe
添加一个数据库,可以是已有的库或者要建立的新库全路径名称
连接数据库
数据库连接成功 打开SQL编辑器
建立一个新的元件类的表
假设我现在要加入一个表贴0603的红色发光2极管。 先去力创上找一个。 可以看到力创分类为“发光二极管”,那我新建的表名也叫“发光二极管” 改好的建表SQL如下,加入了一个颜色的新字段,在公用字段后面。
从建表模板上改成一个sql
PRAGMA foreign_keys = off;
BEGIN TRANSACTION;
DROP TABLE IF EXISTS 发光二极管;
CREATE TABLE 发光二极管 (
[Part Number] VARCHAR (255),
[Part Type] VARCHAR (255),
Value VARCHAR (255),
Description VARCHAR (255),
[Schematic Part] VARCHAR (255),
[Footprint name] VARCHAR (255),
[Allegro PCB Footprint] VARCHAR (255),
Datasheet VARCHAR (255),
PSpice VARCHAR (255),
Manufacturer VARCHAR (255),
[Manufacturer Part Number] VARCHAR (255),
Distributor VARCHAR (255),
[Distributor Part Number] VARCHAR (255),
Price FLOAT,
Availability VARCHAR (255),
颜色 VARCHAR (255)
);
COMMIT TRANSACTION;
PRAGMA foreign_keys = on;
在SQL编辑器中粘贴进这个SQL内容,全选,然后执行建表的SQL 看看建立成功的表 向表"发光二极管"中添加新纪录 点击数据页按钮,进入数据(记录)添加页面。 点击按钮的菜单,向表尾部增加一条空记录 如果是要增加的是第一条记录,就直接按添加按钮,而不用去选按钮菜单。 我现在只填写信息,然后去做原理图库,画原理图,然后再做封装,画板子。
假设我就填写这个发光二极管的信息。但是后续的详细实验还没做,不知道填的对不对,先这样。至少元件类的表和内容都有了。 关闭数据库 数据库已经关闭
csdn博客编辑+保存后,放在那里,过一段时间就会网页崩溃,要重新载入才行。如果没及时保存,重新载入后,没保存的那段内容就消失了。算不算是csdn博客系统的bug呢?
下一步就是做原理图库,画原理图。 等消化完现有内容后,后续实验再做笔记。 先这样。
|