PCB genesis加尾孔实现方法

一.为什么增加尾孔呢

          看一看下图在panel中增加尾孔的效果;如下图所示,主要有2点原因.

        1.孔径大小测量

            假设如果不增加尾孔,要检测孔径大小是否符合要求,那么QA检测会选择最后钻的孔进大小进行测量, 但钻孔路径优化后,是不知道哪个孔是最后一个孔钻孔,为了让钻孔QA清楚的知道哪个孔是尾孔,CAM制作时会将每把刀最一个孔放到统一的一个区域内排列。

       2.防止漏钻刀

           如果最后一把刀尾孔漏钻了,那么QA一眼就看出来漏钻刀了

        说一下钻孔工序QA检测孔径要求是:用针规全部测量其尾孔,并随机测量一些板内的孔,检查有无孔大孔小

二.增加尾孔有哪些要求

      1.尾孔钻刀大小排序

          正常是尾孔的钻刀排序和钻孔输出的钻刀排序一致,每个工厂钻刀排序不同,需结合每个工厂排刀要求而定,通常钻孔是:先排工具孔,再排圆孔,再排槽孔,接着再排除尘孔。这里测试代码钻刀从小到大排列(见下方代码)。

      2.尾孔间距

        尾孔间距要求比较宽松,0.5-2.0mm之间,一般取中间值就好了,但如遇到钻刀数太多了,会导致孔整个尾孔区域的长度超长了,尾孔会与其它图形或钻孔重叠,这时候可以考虑钻孔间距减少一些了.

      3.尾孔位置

         通常尾孔加到板角, 尾孔的方向如下图所示

 

三.C#简易代码实现:

1.genesis加尾孔代码

//钻孔尺寸按小到大排序      实际钻刀输出钻刀排序进行排序     
            var OrderSizeList = symbolsList.OrderBy(tt => tt.width).Select(tt=>tt.width *0.001 ).ToList();

            gPoint StartPoint = new gPoint(300, 100); //起点
            double Hole2Hole = 1;//孔边到孔边
            double Ang_direction = 45; //方位角
            List<gP> HoleList =  calc2.p_2plist(OrderSizeList, StartPoint, Hole2Hole, Ang_direction);
            addCOM.pad(HoleList);

2.计算函数

/// <summary>
        /// 通过已排序孔大小列表生成点链
        /// </summary>
        /// <param name="OrderSizeList">已排序钻孔</param>
        /// <param name="StartPoint">起始点</param>
        /// <param name="Hole2Hole">孔边到孔边</param>
        /// <param name="Ang_direction">方位角</param>
        /// <returns></returns>
        public List<gP> p_2plist(List<double> OrderSizeList, gPoint StartPoint, double Hole2Hole, double Ang_direction)
        {
            List<gP> HoleList = new List<gP>();
            gPoint newP = StartPoint;
            int HoleSizeCount = OrderSizeList.Count();
            double PreRadSize = 0;
            if (HoleSizeCount > 0)
            {
                HoleList.Add(new gP(newP, OrderSizeList[0] * 1000));
                PreRadSize = OrderSizeList[0] * 0.5;
            }
            for (int i = 1; i < HoleSizeCount; i++)
            {
                var val = PreRadSize + Hole2Hole + OrderSizeList[i] * 0.5;
                newP = p_val_ang(newP, val, Ang_direction);
                HoleList.Add(new gP(newP, OrderSizeList[i] * 1000));
                PreRadSize = OrderSizeList[i] * 0.5;
            }
            return HoleList;
        }
       /// <summary>
        /// 求增量坐标
        /// </summary>
        /// <param name="ps">起点</param>
        /// <param name="val">增量值</param>
        /// <param name="ang_direction">角度</param>
        /// <returns></returns>
        public gPoint p_val_ang(gPoint ps, double val, double ang_direction)
        {
            gPoint pe;
            pe.x = ps.x + val * Math.Cos(ang_direction * Math.PI / 180);
            pe.y = ps.y + val * Math.Sin(ang_direction * Math.PI / 180);
            return pe;
        }

3.Point,PAD数据结构

/// <summary>
    /// PAD  数据类型
    /// </summary>
    public struct gP
    {
        public gP(double x_val, double y_val, double width_)
        {
            this.p = new gPoint(x_val, y_val);
            this.negative = false;
            this.angle = 0;
            this.mirror = false;
            this.symbols = "r";
            this.attribut = string.Empty;
            this.width = width_;
        }
        public gPoint p;
        public bool negative;//polarity-- positive  negative
        public double angle;
        public bool mirror;
        public string symbols;
        public string attribut;
        public double width;
        public static gP operator +(gP p1, gP p2)
        {
            p1.p += p2.p;
            return p1;
        }
        public static gP operator -(gP p1, gP p2)
        {
            p1.p -= p2.p;
            return p1;
        }
    }
    /// <summary>
    /// 点  数据类型 (XY)
    /// </summary>
    public struct gPoint
    {
        public gPoint(gPoint p_)
        {
            this.x = p_.x;
            this.y = p_.y;
        }
        public gPoint(double x_val, double y_val)
        {
            this.x = x_val;
            this.y = y_val;
        }
        public double x;
        public double y;
        public static gPoint operator +(gPoint p1, gPoint p2)
        {
            p1.x += p2.x;
            p1.y += p2.y;
            return p1;
        }
        public static gPoint operator -(gPoint p1, gPoint p2)
        {
            p1.x -= p2.x;
            p1.y -= p2.y;
            return p1;
        }
    }

四.实现效果

本文转载:PCB genesis加尾孔实现方法 - pcbren - 博客园

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Genesis2000 是个线路板方面的计算机辅助制造软件,它是由以色列的Orbotech与Valor的合资公司----Frontline公司开发的,而且它还在不断开发更多功能,它还允许你可以自己开发设计适合自己规范的功能。 由于Genesis2000的优势太多,被许多大小线路板厂和光绘公司广泛采用。本培训教程把人家设计出来的线路板,根据厂里的机器能力,用Genesis2000去处理后,为生产各工序提供某些工具(比如各种菲林、钻带、锣带等),方便生产用,起的是辅助制造作用。也就是说学的是CAM范围,而不属于CAD范围。 一般来说,线路板厂接到客户订单时,客户会以电脑文件的形式提供他自己的样品资料,我们就是修正客户提供的原始资料文件,使它方便自己厂里的机器生产出符合客户要求的线路板。 该教程包含如下内容: 1、PADS2009文件转换Gerber文件 2、protel99se及DXP文件转换Gerber文件 3、AutoCAD文件转换Gerber文件 GENESIS2000软板安装 4、Gerber文件导入与技巧 5、GENESIS2000各菜单的讲解 6、文件的初步处理 (层别命名、定属性、排序、各层的对位等) 7、钻孔的制作 (校正、属性定义、补偿、刀具合并,分图转等) 8、多层板内层正片的制作 9、多层板内层负片的制作 10、外层线路的制作第一课(补偿,定SMD属性,优化等) 11、外层线路的制作第二课(掏铜皮,Npth削铜,网络检查等) 12、铜皮转网格、网格转铜皮 13、防焊的制作(优化、检查) 14、文字的制作(smybol的替代制作、检查和加UL Logo) 15、set排版(手动排版,加板边和V-CUT、光学点、定位) 16、pnl自动排版(加板边和定位, 电镀面积计算) 17、金手指+喷锡板的处理方法、加引线的具体要求 18、锣带及开模图,外形图制作 19、文件导出,涨缩讲解 20、MI制作及工艺流程讲解, 21、开料软件的应用,层压图计算 22、阻抗的计算及阻搞条的设计
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值