VBA는 계층적 구조의 개체를 사용하여 프로그램을 개발 합니다. Creo의 "부모 /자식" 관계로 이해 하십시요
Option Explicit
Sub CreoExecution()
Dim asynconn As New pfcls.CCpfcAsyncConnection
Dim conn As pfcls.IpfcAsyncConnection
Set conn = asynconn.Start("C:\PTC\Creo 8.0.6.0\Parametric\bin\parametric.bat", "")
End Sub
위 코드를 실행 하면 Creo를 실행 할수 있습니다. Creo Parametric에 대한 비동기 연결을 설정하는 것을 목표로 합니다.
각각의 함수의 역활은 아래와 같습니다
1) Option Explicit:
이 문장은 변수를 선언하지 않고 사용하는 것을 방지하기 위한 VBA의 필수 옵션입니다.
변수를 명시적으로 선언하도록 강제합니다.
2) pfcls.CCpfcAsyncConnection
Creo와 VBA 스크립트 간에 비동기적인 작업을 처리하기 위해 사용될 수 있습니다. 비동기 연결은 일반적으로 오래 걸리거나 블로킹되지 않고 백그라운드에서 실행되어 다른 작업을 계속할 수 있는 상황에서 유용합니다.
이 클래스는 Creo Parametric과 비동기적으로 통신하기 위한 기능을 제공합니다.
Creo VBA 스크립트를 작성하려는 경우 pfcls.CCpfcAsyncConnection을 사용하여 비동기적 작업을 처리하는 데 도움을 줄 수 있습니다. 이를 사용하면 한 작업이 완료될 때까지 다른 작업을 수행할 수 있으므로 작업 효율성을 높일 수 있습니다.
비동식적이란?
- 비동기식(Asynchronous) 프로그래밍은 작업이 다른 작업의 완료를 기다리지 않고 병렬로 진행되는 프로그래밍 방식을 말합니다. 이는 일반적으로 작업이 완료될 때까지 기다리지 않고, 대신에 작업이 백그라운드에서 비동기적으로 실행되며, 결과가 나중에 콜백 함수나 이벤트 핸들러를 통해 처리됩니다.
3) IpfcAsyncConnection
비동기 연결은 일반적으로 프로그래밍에서 작업이 백그라운드에서 수행되거나 동시에 여러 작업이 처리될 수 있는 상황을 지원하는 데 사용됩니다.Creo VBA를 사용하는 경우, IpfcAsyncConnection을 사용하여 Creo와 연결하고 비동기 작업을 수행하는 것이 가능할 것입니다. 예를 들면, Creo 모델을 생성, 수정, 분석하는 동안 사용자는 다른 작업을 계속할 수 있을 것입니다.
3) CCpfcAsyncConnection.Start 메서드 (Function)
Set conn = asynconn.Start("C:\PTC\Creo 8.0.6.0\Parametric\bin\parametric.bat", "")
위 코드에서 "asynconn" 변수는 "CCpfcAsyncConnection" 함수 입니다. 이것은 비동기 연결을 시작하는 함수입니다.
Function : CCAsyncConnection.Start (CmdLine as String, TextPath as String [optional]) as IpfcAsyncConnection
CmdLine
Creo Parametric을 시작하는 데 사용되는 시작 명령, 배치 파일 또는 스크립트 파일의 전체 경로입니다.
TextPath
메시지 및 메뉴 파일이 보관되는 경로입니다. 외부 메시징이나 메뉴가 필요하지 않은 경우 null을 전달합니다.
이 메서드를 사용하면 비동기 연결을 설정하고 해당 연결을 활성화하여 작업을 백그라운드에서 실행할 수 있습니다.
IpfcAsyncConnection 개체를 사용하여 Creo를 ShotDown 합니다.
Option Explicit
Sub CreoShotDown()
Dim asynconn As New pfcls.CCpfcAsyncConnection
Dim conn As pfcls.IpfcAsyncConnection
conn.End
End Sub
■ IpfcBaseSession / IpfcSession
IpfcBaseSession 클래스는 Creo Parametric 세션에 대한 기본적인 인터페이스를 제공합니다. Creo Parametric의 실행 및 제어, 모델 열기/저장, 파트/어셈블리 조작, 기하학적 작업, 설정 관리 등의 작업을 수행하는 데 사용됩니다. IpfcBaseSession 클래스는 Creo Parametric의 시작과 종료, 모델과 파트 관리, 세션 설정 등에 대한 메서드와 속성을 제공합니다.
IpfcSession은 PTC Creo Parametric의 VBA 환경에서 사용되는 중요한 클래스입니다. 이 클래스는 Creo Parametric 세션을 나타내며, Creo Parametric 모델을 조작하고 모델 관리 작업을 수행하는 데 사용됩니다. IpfcSession 클래스는 Creo Parametric과 상호작용하며 모델 열기/저장, 파트/어셈블리 조작, 기하학적 작업, 설정 관리 등 다양한 작업에 필요한 인터페이스와 메서드를 제공합니다. "IpfcBaseSession" 클래스와 차이점은 "UI"를 사용 하는것 입니다.
IpfcBaseSession.CreateAssembly는 Creo Session에 새로운 어셈블 파일을 생성 합니다
Option Explicit
Sub CreateAssemble()
Dim asynconn As New pfcls.CCpfcAsyncConnection
Dim conn As pfcls.IpfcAsyncConnection
Set conn = asynconn.CONNECT("", "", "", 5)
Dim BaseSession As pfcls.IpfcBaseSession
Set BaseSession = conn.session
Dim NewAssemble As IpfcAssembly
Set NewAssemble = BaseSession.CreateAssembly("korea005.asm")
End Sub
"korea005.asm" 파일이 "Session - 메모리(?)"에 생성됩니다.
■ IpfcBaseSession / IpfcSession 사용 예제
▷ IpfcBaseSession 사용 예제 - Session으로 모델 가져오기
▷ IpfcBaseSession 사용 예제 - Sub ChangeDirectory
▷ IpfcBaseSession 사용 예제 - Function 이해
▷ IpfcBaseSession 사용 예제 - sub 이해
▷ IpfcBaseSession 사용 예제 - 폴더
▷ IpfcBaseSession 사용 예제 - Session에 있는 모델들 이름 모두 표시
▷ IpfcSession 사용 예제
■ 예제
VBA 프로그램으로 하드디크에 저장된 "korea.prt" 파일을 읽고, 매개변수 실수 타입 매개변수 이름 "LENGTH"를 읽고 , 50.5 값을 입력하는 프로그램 입니다. 다음과 같은 순서로 프로그램을 코딩 합니다.
1. Session으로 "korea.prt" 파일 읽기
2. 파일에 저장된 매개변수 읽기
3. 파일에 저장된 LENGTH 매개변수 확인
5. 매개 변수 값 "50.5" 입력
1단계 : Creo와 VBA 프로그램 연결
대부분의 VBA 프로그램은 IpfcBaseSession 클래스로 부터 상속 하여 시작 합니다. 아래 코드는 Creo와 VBA를 연결 하는 코드 입니다. 또한 오류 가 발생하면 에러 코드를 표시하는 코드가 있습니다.
Sub Parameter01()
On Error GoTo RunError
Dim asynconn As New pfcls.CCpfcAsyncConnection
Dim conn As pfcls.IpfcAsyncConnection
Dim session As pfcls.IpfcBaseSession
Set conn = asynconn.Connect("", "", ".", 5)
Set session = conn.session
conn.Disconnect (2)
RunError:
If Err.Number <> 0 Then
MsgBox "Process Failed : Unknown error occurred." + Chr(13) + _
"Error No: " + CStr(Err.Number) + Chr(13) + _
"Error: " + Err.Description, vbCritical, "Error"
If Not conn Is Nothing Then
If conn.IsRunning Then
conn.Disconnect (2)
End If
End If
End If
End Sub
2단계 : LOCAL 하드 디스크의 Creo Part 파일 읽기
엑셀의 폴더 및 CREO 파일 이름을 입력합니다. 작업 공간의 입력 창 주소는 cells (4, "E") 이고,
Creo 파일 이름 입력 창 주소는 cells (5, "E") 입니다. VBA 프로그램은 작업 공간을 변경 하고, Creo Window에
입력한 모델을 찾아 파일을 표시 합니다.
Dim oForderName As String
oForderName = cells (4, "E")
session.ChangeDirectory (oForderName)
Dim oCreofileName As String
oCreofileName = cells (5, "E")
Dim oModelDescriptorCreate As New CCpfcModelDescriptor
Dim oModelDescriptor As IpfcModelDescriptor
Set oModelDescriptor = oModelDescriptorCreate.Create(EpfcMDL_PART,oCreofileName, Null)
Dim oModel As pfcls.IpfcModel
Set oModel = session.RetrieveModel(oModelDescriptor)
Dim oWindow As pfcls.IpfcWindow
Set oWindow = session.OpenFile(oModelDescriptor)
oWindow.Activate
만일 Creo ASSEMBLE 파일을 읽으려면 어떻게 해야 할까요? "EpfcMDL_PART"를 변경 합니다. 설명자의 유형은 아래와 같습니다
EpfcMDL_ASSEMBLY - An assembly.
EpfcMDL_PART - A part.
EpfcMDL_DRAWING - A drawing.
EpfcMDL_2D_SECTION - A two-dimensional section.
EpfcMDL_LAYOUT - A layout.
EpfcMDL_DWG_FORMAT - A drawing format.
EpfcMDL_MFG - A manufacturing model.
EpfcMDL_REPORT - A report.
EpfcMDL_MARKUP - A drawing markup.
EpfcMDL_DIAGRAM - A diagram.
EpfcMDL_UNSPECIFIED - Not specifying a particular model type
EpfcMDL_CE_SOLID - Layout model; NOTE: this type is read-only, passing it back to Creo may lead to unpredictable behavior.
EpfcMDL_CE_DRAWING - Reserved for internal use.
EpfcModelType_nil - Use this enumerated value to represent "null" passed to optional properties or method arguments.
3단계 : Creo 파일의 매개변수 검색
Creo 파일의 매개변수에서 "LENGTH" 매개 변수를 검색하고 값 50.5로 변경 합니다. 다음과 같은 동작 순서가
정의 되어야 합니다
1) "LENGTH" 매개 변수가 있는지 검색
2) 존재 한다면 값만 변경
3) 존재 하지 않는다면, 매개 변수 "LENGTH" 추가 및 값 입력
코드가 미완성 되어 추가 하지 않았습니다.
■ 예제 파일 사용 주의 사항
1. 현재 작업 공간에 "korea.prt" 만들고 저장 합니다. 단, 매개변수는 모두 지웁니다
(ez_param4와 동일한 매개변수가 존재 한다면, 오류가 발생합니다.)
2. Creo Session에 모든 Creo 파일을 지웁니다.
3. VBA 프로그램을 실행 하면, 현재의 작업공간을 체크하는 메세지 박스를 표시합니다.
4. 프로그램이 파일 "korea.prt" OPEN 합니다. 아래 이미지는 "PRT0001.PRT"를 읽은 경우 입니다
5. 매개변수 이름 "EZ_PARAM4"을 생성하고, 타입은 실수 이며, 값은 38.5를 자동으로 입력 된다.
6. 만일 파일에 동일한 매개 변수 "EZ_PARAM4" 이름이 존재 하면 오류가 표시 됩니다. -예외 처리를 해야 한다.
추가> 메세지 박스에 파일이 저장된 폴더 이름 불러오기
'Show the current Working Directory
MsgBox "This is the current Working Directory: " & vbCrLf & session.GetCurrentDirector
추가> vbcrLf 기능 설명
추가> korea. prt 파일 불러오기
다음과 같은 순서로 파일을 Open 합니다. 설명자 정의 -> 세션으로 불러오기 -> Creo 창에 보이기
설명자 정의는 아래와 같습니다. 여기서 "Korea.prt" 부분은 파일 이름과 확장자 입니다.
Dim oModelDescriptorCreate As New CCpfcModelDescriptor
Dim oModelDescriptor As IpfcModelDescriptor
Set oModelDescriptor = oModelDescriptorCreate.Create(EpfcMDL_PART, "KOREA.PRT", Null)
Function CCpfcModelDescriptor.Create (Type as IpfcModelType, InstanceName as String,
GenericName as String [optional]) as IpfcModelDescriptor
new 모델 설명자를 만드는 함수 입니다.함수에 사용하는 매개변수는 아래와 같습니다
1) Type - The model type
2) InstanceName - The name of the model, or, if the model is an instance, the instance name.
This string can be neither null nor empty.
3) GenericName - The name of the generic model. If the model is not an instance,
this attributemust be null or an empty string. (페밀리테이블)
리턴 값은 : The new ModelDescriptor
■ 입력한 폴더, 파일 이름으로 입려된 파라메터 값 보내기 코드
Option Explicit
Sub Main2()
Dim asynconn As New pfcls.CCpfcAsyncConnection
Dim conn As pfcls.IpfcAsyncConnection
Dim session As pfcls.IpfcBaseSession
Dim oModel As pfcls.IpfcModel
Dim oWindow As pfcls.IpfcWindow
'//MaKe an asynchronous connection with Creo
Set conn = asynconn.Connect("", "", ".", 5)
'//Get the current session
Set session = conn.session
'//Show the current Working Directory
MsgBox "This is the current Working Directory: " & vbCrLf & session.GetCurrentDirectory
'//Create a modeldescriptor to the Pro/E Model
Dim oModelDescriptorCreate As New CCpfcModelDescriptor
Dim oModelDescriptor As IpfcModelDescriptor
Set oModelDescriptor = oModelDescriptorCreate.Create(EpfcMDL_PART, "KOREA.PRT", Null)
'// Retrieve the model into the oModel handle
Set oModel = session.RetrieveModel(oModelDescriptor)
'// Create a new window which displays the Pro/E Model
Set oWindow = session.OpenFile(oModelDescriptor)
'// Activate the new window
oWindow.Activate
'// Show the name of the Pro/E Model in a messagebox
MsgBox "Model name = " & oModel.Filename
Dim solid As IpfcSolid
Dim unitWithParam As pfcls.IpfcBaseParameter
Dim paramOwner As pfcls.IpfcParameterOwner
Dim ParamObject As New CMpfcModelItem
Dim ParamValue As New CpfcParamValue
Dim LenUnit As IpfcUnit
Set solid = oModel
Set LenUnit = solid.GetUnit("in", False)
Set ParamValue = ParamObject.CreateDoubleParamValue(38.5)
Set paramOwner = oModel
Set unitWithParam = paramOwner.CreateParamWithUnits("EZ_Param4", ParamValue, LenUnit)
oModel.Save
'Disconnect with Pro/ENGINEER
conn.Disconnect (2)
'Cleanup
Set asynconn = Nothing
Set conn = Nothing
Set session = Nothing
Set oModel = Nothing
End Sub
영업 문의 : lionkk@idt21c.com
'VBA For Creo' 카테고리의 다른 글
예제 코드) 활성화된 Session 파일 명 모델 타입 표시하기 (0) | 2020.12.06 |
---|---|
예제 코드 ) 어셈블리의 부품 리스트 - by PTC (0) | 2020.12.02 |
4-1 # Parameter : 이름 및 값 표시 하기 (0) | 2020.11.30 |
VBA Fundamentals #1 (0) | 2020.11.30 |
#1 VB API / 개발 환경 설정 (4) | 2020.11.29 |