VBScript
이 문서는 Altium Designer에서 스크립트를 작성하는 데 사용되는 Visual Basic 스크립팅 언어에 대해 설명합니다. 이 문서에서는 스크립팅 시스템에서 지원되는 Visual Basic 스크립팅 문, 함수 및 확장 기능에 대한 자세한 내용을 제공합니다.
또한 이 참조 문서에는 다음 내용이 포함되어 있습니다:
VBScript 언어
Visual Basic Scripting(줄여서 VBScript)을 사용하면 Altium Designer 객체 모델 및 시각적 컴포넌트를 다루는 스크립트를 작성할 수 있습니다. 이 참조 자료에서는 독자가 기본적인 프로그래밍 개념과 Altium Designer의 기본 작동 방식에 익숙하다고 가정합니다.
Altium Designer 스크립팅 시스템은 Microsoft ActiveX 스크립팅 시스템에서 파생된 VBScript 언어(및 기타 스크립팅 언어)를 지원합니다. 따라서 예를 들어, Altium Designer에서 사용되는 것과 동일한 ActiveX 스크립팅 엔진을 기반으로 하는 CScript나 WScript를 사용할 수 있습니다.
Altium Designer에서 지원하는 모든 스크립트 언어는 타입이 없거나 비유형(untyped)입니다. 즉, 스크립트에서는 레코드나 클래스를 정의할 수 없으며, 함수 파라미터로 포인터를 전달할 수도 없습니다.
Sub DisplayName (sName) MsgBox "My Name is " & sName End Sub
Altium Designer 및 Delphi RTL
스크립팅 시스템은 Embarcadero Delphi 런타임 라이브러리(RTL) 및 Altium Designer API의 하위 집합을 지원합니다.
VBScript 스크립트는 Altium Designer의 여러 객체 모델에 액세스할 수 있습니다. 예를 들어, VBScript에서 PCB 객체 모델을 사용하여 PCB 문서의 PCB 객체를 처리하거나, 워크스페이스 관리자 객체 모델을 사용하여 프로젝트 및 해당 문서를 다루고 넷리스트 데이터를 추출할 수 있습니다.
스크립팅 참조에는 이 스크립팅 언어를 구성하는 Altium Designer 객체 모델, 컴포넌트, 전역 루틴, 유형 및 변수와 관련된 인터페이스 정보가 포함되어 있습니다. VBScript 함수에 대한 자세한 내용은 Microsoft Visual Basic 설명서를 참조하십시오.
서버 프로세스
스크립트를 사용하여 Altium Designer의 명령을 나타내는 서버 프로세스를 실행할 수 있습니다.
VBScript 소스 파일
VBScript 프로젝트는 스크립트 문서(스크립트 유닛 및 스크립트 양식)를 저장하도록 구성되어 있습니다. 스크립트는 메뉴 항목, 도구 모음 버튼 또는 시스템 메뉴의
PRJSCR, VBS 및 DFM 파일
스크립트는 *.PRJSCR*.vbs*.vbs*.dfm
스크립트를 서로 다른 프로젝트에 연결할 수 있으며, 스크립트의 수와 그 프로시저/함수를 효율적으로 관리하기 위해 스크립트를 서로 다른 프로젝트로 구성하는 것이 매우 권장됩니다. 스크립트(스크립트 유닛 및 스크립트 폼)는 Altium Designer 내에서 호출할 수 있는 함수/프로시저로 구성됩니다.
VBScript 예제
이 참조 자료에 포함된 간단한 예제는 Altium Designer에서 VBScript 프로그래밍의 기본 기능을 보여줍니다.
VBScript는 스크립트 폼, 스크립트 유닛, 함수 및 Altium Designer 스크립팅 API의 객체를 사용할 수 있으며, 스크립팅 시스템에 노출된 Embarcadero Delphi RTL의 함수 및 객체 하위 집합도 사용할 수 있습니다.
VBScript 스크립트 작성
이 섹션에서는 Altium Designer에서 VBScript를 작성하는 데 필요한 기본 개념을 다룹니다.
VBScript 명명 규칙
VBScript 변수는 대소문자를 구분하지 않습니다. 즉, 대문자와 소문자로 표기된 변수는 동일한 의미를 가집니다:
The variables b and B are the same. b = 60 B = 60
로컬 및 전역 변수
모든 스크립트에는 로컬 변수와 전역 변수가 있으므로, 스크립트 프로젝트 내의 스크립트에서 변수 이름을 고유하게 지정하는 것이 중요합니다. 변수가
변수가
프로시저 내부의 지역 변수는 자동으로 초기화됩니다.
Sub Example Dim X Dim s ' x set to 0 x = 0 ' s set to empty s = "" End Sub
서브루틴과 함수
VBScript는 서브루틴과 함수라는 두 가지 종류의 프로시저를 허용합니다. 함수는 값만 반환합니다. 스크립트에서 서브루틴이나 함수를 호출하는 구문은 다음과 같습니다.
Call SubRoutineA(parameters)
...또는
SubRoutine parameters
Sub SetTheHeight AHeight Set Component.Height = AHeight End Sub
Function Addone(value) AddOne = Value + 1 End Function
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
파라미터와 인수
VBScript에서 프로시저 선언에는 일반적으로 파라미터 목록이 포함됩니다. 변수는 유형이 없는 것으로 간주되며, 스크립트 시스템이 변수의 유형을 자동으로 판단한다는 점에 유의하십시오. 프로시저 호출 시 파라미터 대신 사용되는 값을 인자라고 합니다.
Sub DisplayName (sName) MsgBox "My Name is " & sName End Sub
Sub Main DisplayName "Altium Designer Rules" End Sub
서브루틴이나 함수를 호출할 때 Call
스크립트의 Comment
스크립트에서 Comment는 프로그래머를 위해 포함된, 실행되지 않는 코드 줄입니다. Comment는 스크립트의 거의 모든 곳에 포함될 수 있습니다.
VBScript Comment의 경우:
-
다음 기호 뒤에 오는 모든 텍스트는
뒤에 오는 모든 텍스트는 무시됩니다.' -
다음에 이어지는 모든 텍스트
뒤에 오는 모든 텍스트는 무시됩니다.Rem
' This whole line is a comment REM this whole line is also a comment DocName = Document.Name ' Get name of active document
스크립트 라인 나누기
VBScript에서는 각 코드 문이 해당 줄의 끝(CR/LF 조합)에서 종료되어 문이 끝났음을 나타냅니다. VBScript에서는 밑줄(_
VBScript는 스크립트 내 싱글 코드 줄의 길이에 실질적인 제한을 두지 않습니다. 그러나 가독성과 디버깅의 용이성을 위해, 화면이나 인쇄물에서 쉽게 읽을 수 있도록 코드 줄의 길이를 제한하는 것이 좋습니다. 코드 한 줄이 매우 길 경우 여러 줄로 나눌 수 있으며, 이 코드는 VB 인터프리터에 의해 마치 한 줄로 작성된 것처럼 처리됩니다.
If Not (PcbApi_ChooseRectangleByCorners(BoardHandle,"Choose first corner","Choose final corner",x1,y1,x2,y2)) Then EndIf
If Not (PcbApi_ChooseRectangleByCorners(BoardHandle,_ “Choose first corner”,_ “Choose final corner”,_ x1,y1,x2,y2)) Then EndIf
Altium Designer 객체 모델 사용
스크립팅 시스템의 가장 큰 특징은 Altium Designer 개체의 인터페이스(Object Interfaces)를 VBScript에서 사용할 수 있다는 점입니다. 예를 들어, Schematic 인터페이스와 PCB 인터페이스를 각각 사용하여 Schematic 및 PCB 문서의 설계 개체를 업데이트할 수 있습니다.
Altium Designer 객체 인터페이스는 모든 스크립트에서 사용할 수 있습니다. 일반적으로 스크립트에서는 인터페이스를 인스턴스화할 필요가 없습니다. 기존 Altium Designer 객체를 나타내는 인터페이스가 추출되며, 이 인터페이스에서 내장 또는 집합 인터페이스 객체를 추출하여 해당 속성 값을 가져오거나 설정할 수 있습니다.
PCB 문서와 해당 데이터 객체에 액세스하려면 먼저 PCBServerIIPCB_Board
' 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
PCB 문서에 접근하려면 PCBServer
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
객체, 인터페이스 및 함수
Altium Designer 객체, 인터페이스 및 함수는 다음 경로를 통해 스크립트에서 액세스할 수 있습니다:
- 클라이언트 API
- PCB 서버 API
- Schematic 서버 API
- 워크스페이스 매니저 서버 API
- Nexus API
- Altium Designer API 함수
- 파라메트릭 프로세스
예약어 및 함수
이 스크립팅 시스템은 Microsoft Active Scripting 언어 기술에서 파생된 VBScript 언어를 지원합니다. VBScript의 예약어는 다음과 같습니다:
Abs, Array, Asc, Atn
Call, Case, CBool, CByte, CCur, CDate, CDbl, Chr, CInt, Class, CLng, Const, Conversions, Cos, CreateObject, CSng, CStr
DateAdd, DateDiff, DatePart, DateSerial, DateValue, Day, Derived Math, Dim, Do, Each, Erase, Escape, Empty, Eval, Execute, Exit, Exp
False, Filter, For, FormatCurrency, FormatDateTime, FormatNumber, FormatPercent, Function GetLocale, GetObject, GetRef, Hex, Hour
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
Next, Nothing, Now, Null, Oct, On Error
Private, Property, Public, Randomize, ReDim, Rem, RTrim, Replace, RGB, Right, Rnd, Round
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
UCase, Unescape, While, Wend, With, VarType, Weekday, WeekdayName, Year