0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

怎样撰写自己的PCB数据库转换器

PCB线路板打样 来源:ct 2019-08-14 01:18 次阅读

编写自己的PCB数据库翻译器
1.0简介

众所周知,高科技公司的设计环境可能会不时“不稳定”。设计环境甚至设计师经常做出改变。这些变化源于采用更好的技术或公司收购/兼并。如果发生这种情况,可能必须将正在进行的设计从一组工具转移到另一组工具。

假设一家公司已将多个印刷电路板(PCB)设计放置在一个计算机辅助设计(CAD)工具中何时必须更改该工具。有两种选择。首先,更换新CAD工具中的所有PCB设计,但每个设计至少需要3周时间。其次,编写一个翻译器将现有的展示位置文件转换为新工具的文件。最多需要几天的时间才能使这个翻译器正确运行,每个设计只运行几秒钟。

如果有5个PCB,第一个选项至少需要15周。有了翻译,那个时间减少到1周或更短。第二种选择的优势和需求是显而易见的。不幸的是,这个翻译器可能不适用于您的特定CAD工具。

在本文中,我们提出了一种使用编程语言Perl [1]编写PCB布局数据库转换器的系统方法。另外,我们提供一些代码来说明细节。如果不使用特定的CAD工具作为示例,这些主题将难以讨论。因此,选择Mentor Graphics Corp.的BoardStation和Cadence Design Systems的Allegro。这两种工具都可以放置和布线PCB设计。我们的翻译器将BoardStation的放置数据库转换为Allegro的放置数据库,但本文中介绍的原理和技术适用于任何其他两个CAD工具。

我们的翻译人员必须执行以下三个主要任务:

对于我们的讨论,BoardStation表面贴装几何使用引脚1作为原点(不是行业标准,但有些公司会这样做)。 Allegro使用几何中心代替。使用此信息,翻译人员必须正确翻译几何体的放置位置。

如果BoardStation几何体的方向与其Allegro对应物的方向不同,则翻译者必须正确翻译方向。

翻译人员必须正确地将BoardStation展示位置文件的格式转换为Allegro展示位置文件的格式。 BoardStation的放置文件称为comps.comps _ ##和job_parts,其中_ ##是版本号,例如_01。 Allegro的放置文件名为place_txt.txt。

最后,有关为什么选择Perl来编写我们的翻译器的说法,尽管任何其他完整的计算机语言也可以完成这项工作。 Perl最初设计用于文本解析和处理。这正是我们工作的主要部分,后面会很明显。

2.0开始翻译

首先,我们的翻译需要3个输入文件(除了BoardStation和Allegro放置文件)。它们可能已存在于公司PCB设计数据库中,或者可能必须手工创建。以下是作者选择文件名的列表。请注意,bs_指的是BoardStation,al_指的是Allegro,bs_al_指的是这两个工具。

bs_insertion.file:它必须包含每个BoardStation几何名称以及它是否是表面贴装。对于表面贴装,它必须指定从原点(引脚1)到中心的以mils为单位的X偏移和Y偏移。这些信息非常重要,因为正如上面第1.0节所述,我们已选择几何中心作为Allegro的原点。 bs_insertion.file可以简单如下(#表示注释):类型1表示表面安装,类型2表示非表面安装。

非表面贴装几何体可以是通孔或分立或连接器组件。通常,几何体不能同时是表面贴装和非表面贴装。但是,如果组件具有两个版本并且它们在同一设计中使用,则必须使用两个不同的几何名称。请注意,几何名称中的大写或小写对某些CAD工具很重要。

通常,与bs_insertion.file类似或相同的数据库应该已由公司维护,并且不需要创建此文件用手。但它可能包含的信息多于我们的翻译器所需的信息,例如轴向组件的旋转,宽度和高度信息。在这种情况下,翻译器应该不解析这种数据。

bs_insertion.file由翻译器解析并存储到两个内部关联数组中,可以调用$ bs_insertion_type和$ matrix。 $ bs_insertion_type中每个条目的键是BoardStation几何名称,值是组件类型,它是1或2. $ matrix的键可以是字符串geometry_name = xoffset或geometry_name = yoffset,值是偏移值。

例如,对于上面给出的几何名称100AMPTCH,条目$ matrix {100AMPTCH = xoffset}存储371.2,条目$ matrix {100AMPTCH = yoffset}存储350.0。稍后将扩展$ matrix数组以存储更多信息。

bs_al_list.file:它包含所有BoardStation几何及其Allegro对应项。它可能如下所示(#表示注释):

两个BoardStation几何图形可能与相同的Allegro几何图形匹配。同样,几何名称中的大写或小写也适用于某些CAD工具。

bs_al_list.file通常是手工创建的。它由转换器解析并存储到内部关联数组中,可以称为$ bs_al_list。其关键是BoardStation几何名称,其值为Allegro几何名称。对于上面给出的示例,bs_al_list {7827-150HT}存储CONN-SMD_2X25。

al_orientation.file:它包含所有Allegro几何及其默认方向。为了简化操作,请为每个方向分配一个代码,如表1所示,对于特定应用程序可能完成也可能不完整。

al_orientation.file通常是手工创建的,它可能如下所示(#表示评论):

该文件由翻译器解析并存储到内部关联数组中,可以称为$ al_orientation。它的关键是Allegro几何名称,它的值是一个方向代码。对于上面给出的示例,al_orientation {FIDUCIAL40}存储0.同样,几何名称中的大写或小写对某些CAD工具很重要。

表格1 ?? Allegro几何的方向代码

现在我们可以开始系统地开发翻译器了。正如上面第1.0节中简要提到的,有两个步骤可以完成。首先,我们将解析BoardStation的展示位置文件。其次,我们将使用该信息生成Allegro的放置文件。

3.0处理BoardStation的job_parts文件

如前所述,BoardStation有两个放置位置文件,即job_parts和comps.comps _ ##。本节讨论我们的翻译器如何使用job_parts来查找和计算每个BoardStation几何体的方向。结果存储在名为$ bs_orientation的内部关联数组中。此外,可以选择将此结果写入文件,以便我们可以手动检查翻译器是否正确计算了这些方向。

job_parts唯一列出PCB设计中的每个BoardStation几何体及其物理信息,例如它的名称和引脚(包括引脚号和位置)。每个几何条目如下所示:

$$ create_component(“BoardStation_Geometry_Name”);

与$$ create_component()条目关联的每个pin条目如下所示:

$$属性( “COMPONENT_PIN_DEFINITION”,“25”,, @ scale ,, [6.175,-8.89]);

其中“25”是引脚编号,[6.175,-8.89]是引脚位置,单位为英寸。 2引脚几何结构(如电容)具有以下3个条目:

$$ create_component(“CC1206”);

$$属性(“COMPONENT_PIN_DEFINITION” ,“1”,, @ scale ,, [-0.067,0.0]);

$$属性(“COMPONENT_PIN_DEFINITION”,“2”,@ scale ,, [0.067,0.0] );

1针几何图形,例如基准点,有以下两个条目:

$$ create_component(“FIDUCIAL1”);

$$属性(“COMPONENT_PIN_DEFINITION”,“1”,@ scale,[0.0,0.0]);

请注意,$$ create_component()条目始终位于其关联的$$属性()条目之前。

我们的转换程序在每个BoardStation几何名称中进行分析。接下来,它通过在$ bs_insertion_type内部关联数组中查找来确定此几何是否是表面贴装(参见上面的第2.0节)。如果是,请将其存储在名为$ sm_array的新内部关联数组中。如果没有,请将其存储在另一个名为$ nsm_array的新内部关联数组中。

还会解析BoardStation几何体的每个引脚以确定以下内容:

如果引脚number是纯数字且为1或2或3,将其X和Y坐标存储在新的$ pin_1_2_3内部关联数组中。保存3个引脚,以便转换器稍后可以确定哪个几何结构为2引脚。

对于每个数字纯数字的引脚,确定最小X,最大X,最小Y和最大Y坐标到目前为止,将此信息存储到$ matrix内部关联数组中(参见上面的第2.0节)。

如果引脚号不是纯数字,例如A1或B1,则不要执行上面的两个子弹。相反,将此BoardStation几何图形放入新的$ odd_pin关联数组中,并停止查找其引脚。这是因为传统意义上无法确定哪个引脚是引脚1,因为我们可以在同一几何结构上具有A1,B1和C1引脚。下面将进一步讨论这种特殊情况。

执行上述操作的Perl代码概述如下:

单击此处查看代码示例

总而言之,对于每个BoardStation几何体,$ matrix内部关联数组具有键(字符串)和下面表2中给出的值。在此表中,键的geometry_name部分是BoardStation中使用的实际几何名称,对于每个唯一组件它是唯一的。

表2 ??每个唯一BoardStation几何体的$矩阵条目

接下来,我们使用存储在这些内部关联数组中的信息来确定pin1的位置,假设每个BoardStation几何体上的针都是逆时针计数的。它可以是表3中列出的四个中的一个。然后,此信息用于确定几何体的方向,其代码在表1中给出。每个BoardStation几何体及其计算的方向随后存储在新的内部关联数组中$ bs_orientation。

表3 ?? BoardStation几何体上pin1的位置

目前,有必要讨论一些无法轻松处理的特殊BoardStation几何图形。它们的方向代码(表1中给出)必须在翻译器中进行硬编码。下面将讨论3种情况。

如前所述,如果几何体不具有纯数字引脚数(例如A1或B1或C1而不仅仅是1),那么就不可能找到哪个引脚是引脚1,并且转换器无法计算几何方向。假设取向代码为10(硬编码)。我们还可以查看此几何图形并找到其确切方向。如果看到这些几何,则由翻译器内部存储在内部关联数组$ odd_pin中。

对于某些几何,引脚1和2的X坐标不相等,它们的Y坐标也不相等,例如如图1所示的连接器。在这种情况下,翻译器不能轻易地计算几何方向,并且假定方向代码为10。我们还可以查看这个几何体并找到它的确切方向。


图1 - Pin坐标不相等

如果是过时的几何体错误地使用(可能发生),不存储在任何公司数据库中,首先查看它,然后在翻译器中硬编码其方向代码。

在上面的前两种情况中,方向代码假定为10因为大多数几何都是这样放置的。所以这是最安全的赌注,但仍然是赌注。由于这个原因和其他原因,翻译可能并不完全适用于少数组件。但正如5.0节将讨论的那样,很容易纠正这些微小的不匹配。有些无关紧要,甚至可以单独留下。

此时,我们的翻译器将简单地处理$ sm_array,$ nsm_array和$ odd_pin内部关联数组,以创建$ bs_orientation内部关联数组。我们还(可选)将此结果写入bs_orientation.file文件。首先,打开此文件进行如下编写:

处理$ odd_pin内部关联数组的Perl代码概述很简单:

处理$ sm_array内部关联数组的Perl代码概述如下:

进一步处理$ sm_array中的每个“普通”BoardStation几何体。首先,找到引脚1,2和3的几何中心和位置(2引脚几何结构没有引脚3)。 Perl代码的概述是:

接下来,检查引脚1和2的X坐标在这个几何上是否相等(情况2)上面讨论过)。同时检查这两个引脚的Y坐标。

现在检查引脚1和2是否具有相同的X坐标。如果是,请执行以下操作。首先,确定引脚1是否位于几何结构的底部,引脚1和引脚2是否彼此相对,包括2引脚几何结构(例如垂直放置的电容器电阻器):

其次,确定引脚1是否位于几何结构的顶部,引脚1和2是否彼此相对,包括2引脚几何形状:

最后,确定引脚1是否位于几何体的左侧或右侧(请记住引脚是逆时针计数的):

单击此处查看代码示例

现在检查引脚1和2是否具有相同的Y坐标。如果是,请采取适当的措施。到目前为止已经提供了大量的Perl代码示例,因此我们在此不再重复。相反,我们将简要讨论这个过程。首先,确定引脚1是否位于几何结构的左侧,引脚1和2是否彼此面对。如果是,则方向代码可以是1或2或3.

其次,确定引脚1是否位于几何体的右侧,引脚1和2是否彼此面对。如果是,则方向代码可以是4或5或6.第三,确定引脚1的X坐标是否位于几何体的顶部。如果是,则方向代码可以是7或8或9.第四,确定引脚1是否在底部。如果是,则方向代码可以是10或11或12.

$ nsm_array内部关联数组的处理方式应与$ sm_array相同。

此时,可以读取bs_orientation.file文件(如果已创建)以确保计算的BoardStation几何方向正确。如果没有,翻译人员需要进行微调。

4.0生成Allegro的place_txt.txt展示位置文件

BoardStation的展示位置文件(也是称为组件文件)称为comps.comps _ ##,每个条目的格式都非常简单:

Ref_des是参考标号用于PCB原理图。 Symbol_name是原理图符号的名称。 Board_location是引脚1在10纳米中的位置,它必须转换为Allegro放置文件中表面贴装元件的几何中心,如前所述。此外,10纳米单位必须转换成Allegro的密耳。

Board_side表示该组件放置在电路板的哪一侧(1:顶部,2:底部)。旋转指示在放置期间该组件是否已旋转(90度或180度或270度)。对于BoardStation和Allegro,旋转必须始终为逆时针。

Allegro的place_txt.txt放置文件具有以下格式:

每列的含义,从U115的第2行开始,在下面的表4中说明。


表4 ?? Allegro的展示位置文件的含义

现在,我们的翻译人员可以将comps.comps _ ##转换为place_txt.txt。执行此操作的Perl代码的一部分在下面给出并且不言自明:

单击此处查看代码示例

如果转换程序运行时没有任何错误,则Allegro放置文件place_txt .txt已创建。现在您可以尝试将此文件读入Allegro以检查其格式。如果Allegro标记任何格式错误,则需要修改我们的翻译器。

5.0最终评论

BoardStation和Allegro是两个非常不同的工具,对于某些特殊情况,他们的展示位置文件之间没有直接的翻译。上面的3.0节列出了其中一些。因此,对于少数组件,转换可能不准确。

例如,如果组件的旋转不是100%正确,那么它可以在Allegro中手动旋转(例如微处理器)或单独使用(如电容器)。一些组件也可能与其邻居部分重叠。同样,这可以在Allegro中手动纠正。平均而言,需要一个小时或更短的时间来手动检查Allegro放置文件是否存在这些问题。

6.0参考文献

1。 Larry Wall,Tom Christiansen,Jon Orwant,“Programming Perl”,第3版,O'Reilly& Associates,Inc.,2000
2。 Luke L. Chang,“编写自己的PCB设计规则检查器”,EEdesign,2003年9月

Luke L. Chang是英特尔存储元件部门的高级验证负责人(Hudson) , 嘛)。在此之前,他曾在多家高科技公司担任过工程和管理职位,涉及硬件设计/验证和电子设计自动化领域。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • pcb
    pcb
    +关注

    关注

    4214

    文章

    22442

    浏览量

    385215
  • 数据库
    +关注

    关注

    7

    文章

    3583

    浏览量

    63343
  • 华强pcb线路板打样

    关注

    5

    文章

    14629

    浏览量

    42567
收藏 人收藏

    评论

    相关推荐

    用Delphi做中BDE连接SQL数据库(学习Delphi环境中数据库操作的方法和数据库应用程序

    考虑服务是否具有这样的功能。(3)允许使用者在不同的平台上对不同数据库数据做联集(join)。(4)增加了数据在不同平台上的可移植性。数据库
    发表于 05-10 11:09

    LabVIEW数据库

    在LabVIEW中将采集到的数据怎样存入SQL 2000数据库中,请哪位高手指点一下啊
    发表于 07-10 11:29

    labview 连接数据库 怎样创建新的列

    各位大神拜托了怎样数据库中创建新的列?
    发表于 04-09 09:43

    排列数据库数据

    LABVIEW 怎样把最新数据放在表格第一行?或者说倒序排列数据库数据... 希望大家帮助!
    发表于 04-18 12:23

    在labview中,怎样数据库中的数据用XY图来显示

    在labview中使用LABSQL连接了数据库数据库中存储了一个信号的信息,也就是一个二维数组,请问要怎样将这个信号在XY图中显示
    发表于 01-27 22:35

    怎样把信号采集的数据添加到数据库中,数据库的表该怎么设计?

    我把数据采集的数据暂时存放到了txt文件中,但是要求存放到数据库中,应该怎样存放这些数据呢?我每秒采集1M个信号,存放到了1000个文件中,
    发表于 08-17 10:51

    labview怎样连接SQL数据库,和MATLAB程序??大神们,求指导!!

    labview中调用数据库,然后输入数据数据库数据比较?怎样调用数据库中的
    发表于 05-05 10:46

    labview和access数据库数据类型转换问题

    各位大神,小弟遇到一难题求解答我用labview往access数据库中写入簇或者数组数据,access数据库中存储的数据类型是OLE长二进制,当从
    发表于 07-23 09:35

    数据库管理

    如题:用labview操作access数据库做公司测试流程管控。因测试数据量大,数据生成多,现在accdb文件已经有50M了,现在发现数据库在本地操作都很快,但是放在远端服务
    发表于 11-08 16:58

    请问传感收集的数据通过wifi怎么传送到主机数据库

    目前我有一阿里云服务,我想将传感采集的信息通过wifi模块通过网关传送到我的服务数据库。比如温湿度传感,我要
    发表于 07-09 02:28

    labview怎样实现数据库远程控制

    使用LABVIEW编写的登陆界面使用LabSQL生成数据库,将程序生成EXE后不能打开数据库,LabSQL生成的数据库只在本机有效。请问怎样才能在客户端也能调用
    发表于 08-06 11:08

    如何创建自己数据库

    创建自己数据库
    发表于 02-03 07:02

    关于波形存储至Access数据库和从数据库调用数据的几个问题

    VI"(图2)将其转换为2进制流后存入数据库。但我在做从数据库调用数据(图3)时会比较慢,比如我存储的数据总量为大概80万条,那么我从
    发表于 09-22 17:21

    拔掉数据库的电源会怎样

    拔掉数据库的电源会怎样?假设我们拔掉数据库的电源会怎样?在日前举行的阿里云“企业级”云灾备解决方案发布会上,阿里云智能技术战略总监陈绪就来了一场现场“断电”演示,拔掉了
    发表于 12-29 07:09

    PCB工具之间怎样更好的数据交换

    作为将工具集成到PCB设计阵容中的一部分,Cadence Design Systems正在开发一种能够实现数据库转换器数据库转换器
    的头像 发表于 08-14 23:30 985次阅读