VBScript
Tài liệu tham khảo này mô tả ngôn ngữ VisualBasic Scripting dùng để tạo script trong Altium Designer. Tài liệu cung cấp chi tiết về các câu lệnh, hàm và phần mở rộng của VisualBasic Scripting được hỗ trợ trong hệ thống scripting.
Ngoài ra, trong tài liệu tham khảo này còn có:
Ngôn ngữ VBScript
Visual Basic Scripting (hay gọi tắt là VBScript) có thể được dùng để tạo các script làm việc với các Object Model và Visual Component của Altium Designer. Trong tài liệu tham khảo này, giả định rằng bạn đã quen thuộc với các khái niệm lập trình cơ bản và cách vận hành cơ bản của Altium Designer.
Hệ thống scripting của Altium Designer hỗ trợ ngôn ngữ VBScript (cùng với các ngôn ngữ scripting khác), được phát triển dựa trên hệ thống Microsoft ActiveX Scripting. Vì vậy, chẳng hạn, bạn có thể sử dụng CScripts hoặc WScripts vốn dựa trên cùng bộ máy ActiveX scripting được dùng trong Altium Designer.
Tất cả các ngôn ngữ scripting được hỗ trợ trong Altium Designer đều không định kiểu, nghĩa là một script không thể định nghĩa bản ghi hoặc lớp và truyền con trỏ làm tham số cho hàm.
VBScript script example
Sub DisplayName (sName)
MsgBox "My Name is " & sName
End Sub
Altium Designer và Delphi RTL
Hệ thống Scripting hỗ trợ một phần của Embarcadero Delphi Run Time Library (RTL) và API của Altium Designer.
Các script VBScript có thể truy cập một số Object Model trong Altium Designer. Ví dụ, PCB Object Model có thể được dùng trong VBScript để làm việc với các đối tượng PCB trên một tài liệu PCB, hoặc Workspace Manager Object Model để làm việc với Project và các tài liệu của chúng nhằm trích xuất dữ liệu netlist.
Tài liệu Scripting Reference chứa thông tin về các interface liên quan đến Object Model của Altium Designer, các component, routine toàn cục, kiểu dữ liệu và biến tạo nên ngôn ngữ scripting này. Hãy tham khảo tài liệu Microsoft Visual Basic để biết thêm thông tin về các hàm VBScript.
Tiến trình máy chủ
Một script có thể được dùng để thực thi các server process, vốn đại diện cho các lệnh trong Altium Designer.
Tệp nguồn VBScript
Một project VBScript được tổ chức để lưu trữ các tài liệu script (script unit và script form). Một script có thể được thực thi từ một mục menu, nút thanh công cụ, hoặc từ hộp thoại Run Script trong menu hệ thống.
Các tệp PRJSCR, VBS và DFM
Các script được tổ chức thành project với phần mở rộng *.PRJSCR. Mỗi project VBScript bao gồm các tệp có phần mở rộng *.vbs. Các tệp có thể là script unit hoặc script form — mỗi form có một tệp script VBScript với phần mở rộng *.vbs và một form tương ứng với phần mở rộng *.dfm). Một script form là một cửa sổ đồ họa (hộp thoại) chứa các điều khiển khác nhau chạy trên Altium Designer.
Có thể gắn script vào các project khác nhau, và bạn nên tổ chức script thành các project riêng để quản lý số lượng script cũng như các thủ tục/hàm của chúng. Các script (script unit và script form) bao gồm các hàm/thủ tục có thể được gọi bên trong Altium Designer.
Ví dụ VBScript
Các ví dụ đơn giản có trong tài liệu tham khảo này minh họa các tính năng cơ bản của lập trình VBScript trong Altium Designer.
VBScript có thể sử dụng script form, script unit, các hàm và đối tượng từ scripting API của Altium Designer, cũng như một phần các hàm và đối tượng từ Embarcadero Delphi RTL được đưa ra trong hệ thống scripting.
Viết script VBScript
Phần này trình bày các khái niệm cơ bản khi viết VBScript trong Altium Designer.
Quy ước đặt tên trong VBScript
Các biến trong VBScript không phân biệt chữ hoa chữ thường — nghĩa là biến viết hoa hay viết thường đều có cùng ý nghĩa:
Example
The variables b and B are the same.
b = 60
B = 60
Biến cục bộ và biến toàn cục
Vì mọi script đều có biến cục bộ và biến toàn cục, nên điều quan trọng là phải có tên biến duy nhất trong các script của bạn trong một project script. Nếu các biến được định nghĩa outside bất kỳ thủ tục con và hàm nào, thì chúng là biến toàn cục và có thể được truy cập bởi bất kỳ unit nào trong cùng project.
Nếu biến được định nghĩa inside một routine, thì các biến cục bộ này sẽ không thể truy cập từ bên ngoài các routine đó. Vì script không định kiểu, nên biến không được khởi tạo cùng với kiểu của chúng.
Variable Initialization
Sub Example
Dim X
Dim s
' x set to 0
x = 0
' s set to empty
s = ""
End Sub
Thủ tục con và hàm
VBScript cho phép hai loại procedure: subroutine và function — chỉ function mới trả về giá trị. Cú pháp gọi một subroutine hoặc function trong script là:
Call SubRoutineA(parameters)
...hoặc
SubRoutine parameters
Subroutine example
Sub SetTheHeight AHeight
Set Component.Height = AHeight
End Sub
Function example
Function Addone(value)
AddOne = Value + 1
End Function
Another Function example
Function Test(s)
Test = S + " rules.."
End Function
Sub DisplayName (sName)
MsgBox sName
End Sub
Sub Main
Dim S
S = "Altium Designer"
DisplayName Test(s)
End Sub
Tham số và đối số
Trong VBScript, khai báo procedure thường có một danh sách tham số — lưu ý rằng các biến được xem là không định kiểu và hệ thống scripting sẽ tự động xác định kiểu biến là gì. Giá trị được dùng thay cho tham số khi bạn gọi một procedure được gọi là đối số.
Example of a subroutine with a parameter
Sub DisplayName (sName)
MsgBox "My Name is " & sName
End Sub
Example of calling a subroutine
Sub Main
DisplayName "Altium Designer Rules"
End Sub
Lưu ý rằng việc sử dụng từ khóa Call để gọi một subroutine hoặc function là tùy chọn (được giữ lại để tương thích ngược).
Chú thích trong script
Trong script, chú thích là các dòng mã không được thực thi, được thêm vào để hỗ trợ lập trình viên. Chú thích có thể được đặt ở hầu như bất kỳ đâu trong script.
Với chú thích trong VBScript:
-
Bất kỳ văn bản nào theo sau
'đều bị bỏ qua. -
Bất kỳ văn bản nào theo sau
Remđều bị bỏ qua.
Example
' This whole line is a comment
REM this whole line is also a comment
DocName = Document.Name ' Get name of active document
Tách một dòng script
Trong VBScript, mỗi câu lệnh mã được kết thúc ngay trên dòng đó (bằng tổ hợp CR/LF) để chỉ ra điểm kết thúc câu lệnh. VBScript cho phép bạn viết một câu lệnh trên nhiều dòng mã, để tách một lệnh dài thành hai hoặc nhiều dòng, bằng cách dùng ký tự gạch dưới (_).
VBScript không đặt ra giới hạn thực tế nào về độ dài của một dòng mã đơn trong script. Tuy nhiên, để dễ đọc và dễ gỡ lỗi, nên giới hạn độ dài của các dòng mã để chúng có thể dễ dàng được đọc trên màn hình hoặc ở dạng in. Nếu một dòng mã quá dài, nó có thể được tách thành nhiều dòng, và mã này sẽ được bộ thông dịch VB xử lý như thể nó được viết trên một dòng duy nhất.
Unformatted code example
If Not (PcbApi_ChooseRectangleByCorners(BoardHandle,"Choose first corner","Choose final corner",x1,y1,x2,y2)) Then EndIf
Formatted code example
If Not (PcbApi_ChooseRectangleByCorners(BoardHandle,_
“Choose first corner”,_
“Choose final corner”,_
x1,y1,x2,y2)) Then EndIf
Sử dụng Object Model của Altium Designer
Tính năng lớn nhất của hệ thống scripting là các Interface của các đối tượng Altium Designer (Object Interface) có sẵn để sử dụng trong VBScript. Ví dụ, bạn có thể cập nhật các đối tượng thiết kế trên tài liệu Schematic và PCB thông qua việc sử dụng các Schematic Interface và PCB Interface tương ứng.
Các Object Interface của Altium Designer có thể được sử dụng trong bất kỳ script nào. Thông thường trong script, không cần khởi tạo một interface. Interface đại diện cho một đối tượng Altium Designer hiện có sẽ được trích xuất, và từ interface này, các đối tượng interface nhúng hoặc tổng hợp có thể được trích xuất để lấy hoặc đặt các giá trị thuộc tính của chúng.
Để truy cập một tài liệu PCB và các đối tượng dữ liệu của nó, trước tiên bạn gọi hàm PCBServer. Theo quy ước, tên interface được đặt tiền tố bằng ký tự I — ví dụ, IPCB_Board đại diện cho một interface của một tài liệu PCB hiện có trong Altium Designer.
Example
' Checks if the current document is a Schematic document
If SchServer Is Nothing Then Exit Sub
Set CurrentSheet = SchServer.GetCurrentSchDocument
If CurrentSheet Is Nothing Then Exit Sub
Để có quyền truy cập vào một tài liệu PCB, hãy gọi PCBServer.
Creation of a PCB Object Using the PCB Object Model
Sub ViaCreation
Dim Board
Dim Via
Set Board = PCBServer.GetCurrentPCBBoard
If Board is Nothing Then Exit Sub
' Create a Via object
Via = PCBServer.PCBObjectFactory(eViaObject, eNoDimension, eCreate_Default)
Via.X = MilsToCoord(7500)
Via.Y = MilsToCoord(7500)
Via.Size = MilsToCoord(50)
Via.HoleSize = MilsToCoord(20)
Via.LowLayer = eTopLayer
Via.HighLayer = eBottomLayer
' Put this via in the Board object
Board.AddPCBObject(Via)
End Sub
Đối tượng, Interface và Hàm
Các Đối tượng, Interface và Hàm của Altium Designer có thể được truy cập trong script từ các thành phần sau:
- Client API
- PCB Server API
- Schematic Server API
- Work Space Manager Server API
- Nexus API
- Các hàm API của Altium Designer
- Các tiến trình tham số
Từ khóa và hàm dành riêng
Hệ thống scripting hỗ trợ ngôn ngữ VBScript, vốn được phát triển từ công nghệ ngôn ngữ Microsoft Active Scripting. Các từ khóa dành riêng của VBScript là:
A, B
Abs, Array, Asc, Atn
C
Call, Case, CBool, CByte, CCur, CDate, CDbl, Chr, CInt, Class, CLng, Const, Conversions, Cos, CreateObject, CSng, CStr
D, E
DateAdd, DateDiff, DatePart, DateSerial, DateValue, Day, Derived Math, Dim, Do, Each, Erase, Escape, Empty, Eval, Execute, Exit, Exp
F, G, H
False, Filter, For, FormatCurrency, FormatDateTime, FormatNumber, FormatPercent, Function GetLocale, GetObject, GetRef, Hex, Hour
I, L, M
If, Is, InputBox, Instr, InStrRev, Int, IsArray, IsDate, IsEmpty, IsNull, IsNumeric, IsObject, Join, LBound, LCase, Left, Len, LoadPicture, Log, LTrim, Maths, Mid, MInute, Month, MonthName, MsgBox
N, O
Next, Nothing, Now, Null, Oct, On Error
P, R
Private, Property, Public, Randomize, ReDim, Rem, RTrim, Replace, RGB, Right, Rnd, Round
S, T
ScriptEngine, ScriptEngineBuildVersion, ScriptEngineMajorVersion, ScriptEngineMinorVersion, Second, Select, Set, SetLocale, Sgn, Sin, Space, Split, Sqr, Stop, StrComp, String, StrReverse, Sub, Tan, Then, Time, Timer, Timeserial, TimeValue, Trim, True, TypeName
U, V, W, X, Y
UCase, Unescape, While, Wend, With, VarType, Weekday, WeekdayName, Year