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
    +关注

    关注

    4316

    文章

    22959

    浏览量

    395875
  • 数据库
    +关注

    关注

    7

    文章

    3754

    浏览量

    64253
  • 华强pcb线路板打样

    关注

    5

    文章

    14629

    浏览量

    42962
收藏 人收藏

    评论

    相关推荐

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

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

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

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

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

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

    如何创建自己数据库

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

    拔掉数据库的电源会怎样

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

    大型数据库实验指导

    大型数据库实验指导  一、实验目的??1、培养学生动手编程解决实际问题的能力。??2、深入理解关系数据库实现的基本原理。??3、锻炼学生撰写科技
    发表于 09-03 22:51 1558次阅读

    关系数据库是什么?

    关系数据库是什么? 数字时代伊始,数据库就一直是商业计算的核心组成部分。事实上,关系数据库诞生于1970年。那一年,IBM的研究员E.F. Codd撰写了一篇论文,概述了主
    发表于 07-31 12:26 2196次阅读

    数据库教程之如何进行数据库设计

    本文档的主要内容详细介绍的是数据库教程之如何进行数据库设计内容包括了:1 数据库设计概述 ,2 数据库需求分析 ,3 数据库结构设计 ,4
    发表于 10-19 10:41 21次下载
    <b class='flag-5'>数据库</b>教程之如何进行<b class='flag-5'>数据库</b>设计

    数据库课件教程之数据库的启动与关闭讲解资料说明

    本文档的详细介绍的是数据库课件教程之数据库的启动与关闭讲解资料说明主要内容包括了:1.数据库的启动,2.数据库的关闭,3.数据库的状态
    发表于 01-24 11:34 7次下载
    <b class='flag-5'>数据库</b>课件教程之<b class='flag-5'>数据库</b>的启动与关闭讲解资料说明

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

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

    数据库是未来的数据库商业的成功,却是技术的倒退

    在越来越多的会议、媒体、文章、报道上看到一种说法:“未来的数据库是云数据库的时代,云数据库厂商终将取代传统数据库厂商”。首先我并不否认这种说法,但是云
    的头像 发表于 10-14 15:51 2103次阅读
    云<b class='flag-5'>数据库</b>是未来的<b class='flag-5'>数据库</b>商业的成功,却是技术的倒退

    数据库和自建数据库的区别及应用

    数据库是指优化和部署在云端的数据库,阿里云和腾讯云都提供云数据库,云数据库自己搭建的数据库
    的头像 发表于 11-20 16:26 4566次阅读
    云<b class='flag-5'>数据库</b>和自建<b class='flag-5'>数据库</b>的区别及应用

    Orcad CIS器件数据库

    Orcad原理图库,PCB和Access的器件数据库。 3.Access的器件数据库里的器件信息是基于上传的Orcad原理图库和PCB
    的头像 发表于 02-15 10:55 7506次阅读

    基于VB的转换Access数据库为Excel文件实验

    基于VB的转换Access数据库为Excel文件实验(电源技术及应用各章总结)-基于VB的转换Access数据库为Excel文件实验,适合感兴趣的学习者学习,可以提高
    发表于 09-16 14:28 20次下载
    基于VB的<b class='flag-5'>转换</b>Access<b class='flag-5'>数据库</b>为Excel文件实验

    python读取数据库数据 python查询数据库 python数据库连接

    python读取数据库数据 python查询数据库 python数据库连接 Python是一门高级编程语言,广泛应用于各种领域。其中,Python在
    的头像 发表于 08-28 17:09 1736次阅读