找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9688|回復: 9
打印 上一主題 下一主題
收起左側

針對PADS Layout把非中心對稱封裝的元件坐標導出所修改的Basic Script

[復制鏈接]
跳轉到指定樓層
樓主
ID:90228 發(fā)表于 2015-9-16 01:49 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
有時候,做元件封裝的時候,做得不是按中心設置為原點(不提倡這種做法),所以制成之后導出來的坐標圖和直接提供給貼片廠的要求相差比較大。比如,以元件的某一個pin 腳作為元件的原點,明顯就有問題,直接修改封裝的話,PCB又的重新調(diào)整。

所以想到一個方法:把每個元件所有的管腳的X坐標和Y坐標分別求平均值,
就為元件的中心。


對于大部分元件應該都是完全正確的。

但也有小部分可能稍微有點偏差,比如三極管、管腳間距不完全相等的繼電器,當然這部分是很少很少的部分,而且也偏差不大。

貼片廠貼片都會檢查一下,特別是不規(guī)則的封裝,
也無法認定中心應該設置在哪。

不要偏差太大,即可以稍微調(diào)整。


把以下代碼另存為*.bas文件,然后在PADS Layout中導入。

導入方法:tools——)Basic Script——)Basic Script——)Load file,把保存的.bas文件導入即可。

然后點擊run,方法和運行原來就有的我文件一樣。

如果 不會操作的 下載 !





Sub Main
' Open temporarly text file
Randomize
filename = DefaultFilePath & "\tmp"  & CInt(Rnd()*10000) & ".xls"
Open filename For Output As #1



' Output Headers
Print #1, "PartType"; Space(32);
Print #1, "RefDes"; Space(24);
Print #1, "PartDecal"; Space(32);
Print #1, "Pins"; Space(6);
Print #1, "Layer"; Space(26);
Print #1, "Orient."; Space(24);
Print #1, "X"; Space(30);
Print #1, "Y"; Space(29);
Print #1, "SMD"; Space(7);
Print #1, "Glued"; Space(0)

' Lock server to speed up process
LockServer

' Go through each component in the design and output values
For Each nextComp In ActiveDocument.Components

   Dim centerX  As Single
   Dim centerY  As Single
   Dim cout  As Integer
   centerX = 0.0
   centerY = 0.0
   cout = 0
   
Print #1, nextComp.PartType; Space$(40-Len(nextComp.PartType));
Print #1, nextComp.Name; Space$(30-Len(nextComp.Name));
Print #1, nextComp.Decal; Space$(40-Len(nextComp.Decal));
Print #1, nextComp.Pins.Count; Space$(10-Len(nextComp.Pins.Count));
Print #1, ActiveDocument.LayerName(nextComp.layer); Space$(30-Len(ActiveDocument.LayerName(nextComp.layer)));
Print #1, nextComp.Orientation; Space$(30-Len(nextComp.Orientation));

For Each nextCompPin In nextComp.Pins
centerX = centerX+nextCompPin.PositionX
centerY = centerY+nextCompPin.PositionY
Next nextCompPin
centerPositionX = Format$(centerX/(nextComp.Pins.Count), "#.00")
centerPositionY = Format$(centerY/(nextComp.Pins.Count), "#.00")

Print #1, centerPositionX;      Space$(30-Len(nextComp.PositionX));
Print #1, centerPositionY;      Space$(30-Len(nextComp.PositionY));
Print #1, nextComp.IsSMD; Space$(10-Len(nextComp.IsSMD));
Print #1, nextComp.Glued; Space$(10-Len(nextComp.Glued))
Next nextComp

' Unlock the server
UnlockServer

' Close the text file
Close #1

' Start Excel and loads the text file
On Error GoTo noExcel
Dim excelApp As Object
Set excelApp = CreateObject("Excel.Application")
On Error GoTo 0
excelApp.Visible = True
excelApp.Workbooks.OpenText FileName:= filename
excelApp.Rows("1:1").Select
With excelApp.Selection
.Font.Bold = True
.Font.Italic = True
End With
excelApp.Range("A1").Select
Set excelApp = Nothing
End

noExcel:
' Display the text file
Shell "Notepad " & filename, 3

End Sub


part_list_in_center.rar

1.12 KB, 下載次數(shù): 32, 下載積分: 黑幣 -5

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:332724 發(fā)表于 2018-5-18 09:18 | 只看該作者
謝謝
回復

使用道具 舉報

板凳
ID:354148 發(fā)表于 2018-6-19 14:26 | 只看該作者
此算法可能有問題,比如SOT23封裝
回復

使用道具 舉報

地板
ID:360421 發(fā)表于 2018-6-27 17:04 | 只看該作者
666,厲害,我們只能做伸手黨了,謝謝
回復

使用道具 舉報

5#
ID:360421 發(fā)表于 2018-6-27 17:05 | 只看該作者
非常謝謝
回復

使用道具 舉報

6#
ID:135713 發(fā)表于 2018-6-28 18:46 來自手機 | 只看該作者
支持分享
回復

使用道具 舉報

7#
ID:384710 發(fā)表于 2018-8-9 17:23 | 只看該作者
正在學習PADS ...謝謝
回復

使用道具 舉報

8#
ID:360421 發(fā)表于 2018-8-25 11:06 | 只看該作者
謝謝了
回復

使用道具 舉報

9#
ID:809368 發(fā)表于 2020-7-29 20:18 | 只看該作者
謝謝,對我很有用,非常感謝!
回復

使用道具 舉報

10#
ID:250544 發(fā)表于 2020-8-2 17:25 | 只看該作者
怎么學習的腳本編程,推薦一下
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表