xieh_17 发表于 2013-7-1 09:10:30

求助:如何判断PCB中是否有slot槽孔存在?

我的思路是:
1.先选中PCB中所有的pad,不知道用什么函数可以实现?
2.再筛选出pad中,属性为slot孔,不知道pad是否有相关的属性可以作判断?
请高手指点,谢谢!

vivienluo 发表于 2013-7-1 10:02:12

可使用axlAddSelectAll() 函数选择所有焊盘。
pinPadName = axlDBGetPad(Pad_pin pinLayer "REGULAR")
Pad_pin->isThrough && pinPadName->figureName != "CIRCLE"
即所选择的孔为通孔且非圆形。
具体你可以查找资料。这也只是我能记得的地方,不一定正确。仅供参考

xieh_17 发表于 2013-7-1 11:25:48

vivienluo 发表于 2013-7-1 10:02 static/image/common/back.gif
可使用axlAddSelectAll() 函数选择所有焊盘。
pinPadName = axlDBGetPad(Pad_pin pinLayer "REGULAR")
Pa ...

用Regular参数好像无法判断出是否为slot孔,有可能PAD的焊盘为椭圆,但孔为圆形的情况。
打开Pad_designer->Parameters->Drill/slot hole->Hole type选项应该是决定是否为slot孔的因素,但不知道如何获取该参数的内容,再作判断。

vivienluo 发表于 2013-7-5 21:48:04

xieh_17 发表于 2013-7-1 11:25 static/image/common/back.gif
用Regular参数好像无法判断出是否为slot孔,有可能PAD的焊盘为椭圆,但孔为圆形的情况。
打开Pad_design ...
你还可以通过判断其size x ,size y,如果为槽孔,那么肯定x y大小是不一样的。
pinPadName->definition->drillFigureWidth != pinPadName->definition->drillFigureHeight
说明其大小是非圆形的。

以下是选择所有焊盘。然后再筛选所有通孔,再判读是否为异型孔。
axlVisibleLayer("PIN/TOP" t)
axlVisibleLayer("PIN/BOTTOM" t)
axlClearSelSet()
axlSetFindFilter( ?enabled list("noall" "pins") ?onButtons list("noall" "pins"))
axlAddSelectAll()
allPins = axlGetSelSet()

xieh_17 发表于 2013-7-9 10:50:26

vivienluo 发表于 2013-7-5 21:48 static/image/common/back.gif
你还可以通过判断其size x ,size y,如果为槽孔,那么肯定x y大小是不一样的。
pinPadName->definition ...

感谢大大的回复!
通过size x ,size y,确实可以判断是否为slot孔,但是参数:drillFigureWidth和drillFigureHeight并不能得到size x, size y ,而是获得以下位置的数值,Drill/slot symblol,width , Height,这个数值当孔为圆形时,也可以设置为不一样的值,如图所示:
另外,我想请教一下是如何查到drillFigureWidth和drillFigureHeight这两个参数,我在所有帮忙文档中,都没有找到。

vivienluo 发表于 2013-7-10 00:05:49

xieh_17 发表于 2013-7-9 10:50 static/image/common/back.gif
感谢大大的回复!
通过size x ,size y,确实可以判断是否为slot孔,但是参数:drillFigureWidth和drillFi ...

design = axlDBGetDesign()
pads = design->padstacks
用于获取板上所有的盘
至于其属性,可以指定一个dbid,然后同过"?"来获取其属性。
比如:
design->? 可以获取到design下所有的属性
design->??可以获取到所有属性及属性的值。(建议别用design来测试,因为其有太多属性了)

至于获取其slot属性的函数,目前我也不知道。

vivienluo 发表于 2013-7-10 00:28:26

貌似16.5版本的可以直接通过
pin->definition ->holeType获取其过孔类型。
你可以测试下。
可能15版本的不行。

XYX365 发表于 2013-7-10 08:19:09

xieh_17 发表于 2013-7-9 10:50 static/image/common/back.gif
感谢大大的回复!
通过size x ,size y,确实可以判断是否为slot孔,但是参数:drillFigureWidth和drillFi ...

你可以試試看下面

axlClearSelSet()
axlSetFindFilter(?enabled '("noall" "pins" "vias") ?onButtons '("noall" "pins" "vias"))
axlAddSelectAll()
lAllPins = axlGetSelSet()
tPadName = " "
foreach(dOne lAllPins
    when(tPadName != dOne->name
      tPadName = dOne->name
      bThrough = dOne->isThrough
      tPlating = axlDBGetDrillPlating(tPadName)
      ;bIsMech = dOne->isMech
      dPadstack = dOne->definition ;此為Padstack 裡面所有的資料
      nDrillDiameter = dPadstack->drillDiameter
      tDrillName = dPadstack->drillFigureName
      tDrillChar = dPadstack->drillChar
      nDrillWidth = dPadstack->drillFigureWidth
      nDrillHeight = dPadstack->drillFigureHeight
      lPad = dPadstack->pads
    )
)               
   

xieh_17 发表于 2013-7-10 11:17:04

vivienluo 发表于 2013-7-10 00:28 static/image/common/back.gif
貌似16.5版本的可以直接通过
pin->definition ->holeType获取其过孔类型。
你可以测试下。


15.X版本不能获得pin->definition ->holeType这个参数。

xieh_17 发表于 2013-7-10 11:21:19

XYX365 发表于 2013-7-10 08:19 static/image/common/back.gif
你可以試試看下面

axlClearSelSet()


这些都不是判断是否为slot孔的关键参数,在有些情况下有bug,其它主要是判断Hole type参数,或者Slot size X/Slot size Y参数才是比较准确的,不知XYX365大大知道如何获得这两个参数的吗?
页: [1] 2
查看完整版本: 求助:如何判断PCB中是否有slot槽孔存在?