본문 바로가기
  • Welcome!
VBA For Creo

VBA Fundamentals #1

by ToolBOX01 2020. 11. 30.
반응형

 VB API를 사용하여 Creo Parametric에 대한 연결을 설정하는 방법에 대해 설명합니다.

□ Overview

비동기(asynchronous) 모드는 Creo Parametric과 VB API(Visual Basic Application Programming Interface)를 동시에 사용할 수 있도록 하는 기능입니다.  Creo(CAD 소프트웨어)와 Microsoft Excel, Word, Access 같은 프로그램을 연결해서 데이터를 주고받으며 작업을 자동화할 수 있게 해줍니다.

여기서 중요한 부분들을 풀어서 설명하자면:

  1. VB API: Visual Basic 언어를 사용해서 Creo를 제어하거나 데이터를 가져오는 도구입니다.
    예) Excel에서 데이터를 읽어서 Creo에서 자동으로 모델을 만들거나 업데이트할 수 있음.
  2. 비동기 모드:
    • 두 프로그램(예: Creo와 Excel)이 독립적으로 실행됩니다.
    • 서로 정보를 주고받으면서 작업하지만, 한쪽이 멈춰도 다른 쪽은 계속 작동합니다.
  3. COM 인터페이스와 PFC API:
    • COM 인터페이스: 두 프로그램을 연결하는 다리 역할.
    • PFC API: Creo의 모델이나 데이터를 제어하는 도구입니다.
  4. OLE 객체:
    • 예를 들어, Creo 모델에 Excel 데이터가 연결되어 있다면, 그 데이터는 OLE 객체를 통해 관리됩니다.
    • 이 객체를 VB 코드로 제어하면, Creo 모델을 자동으로 변경하거나 업데이트할 수 있습니다.
  5. 비동기 응용프로그램의 분류:
    • 단순 응용프로그램: Creo에서 필요한 최소한의 작업만 처리.
    • 전체 응용프로그램: Creo와 데이터 교환, 메시지 처리 등을 더 복잡하게 관리.

비동기 모드를 사용하면 Creo와 다른 소프트웨어가 서로 독립적으로 동작하면서도 데이터를 주고받아 작업 자동화를 할 수 있습니다. 예를 들어, Excel에 치수 데이터를 입력하면 자동으로 Creo 모델이 업데이트되도록 설정할 수 있습니다.

VB API 응용 프로그램 (SUB () 프로시져)은 Creo Parametric과 독립적으로 시작된 후 Creo Parametric 프로세스를 시작하거나 연결합니다. 비동기식 응용 프로그램이 Creo Parametric의 메시지를 처리하는 방법에 따라 응용 프로그램을 단순 또는 전체로 분류 할 수 있습니다. 


VB API의 제한 사항 - 비동기 COM 서버에는 다음과 같은 제한 사항이 있습니다.

•  Creo Parametric에 대한 API 호출은 단일 스레드에서만 수행해야 합니다. 다른 스레드는 비 Creo 파라메트릭 데이터를 
   처리하고 Creo파라메트릭스레드에서 볼 데이터를 설정할 수 있지만Creo Parametric과 통신할 수 있는 스레드는
   하나뿐입니다.
•  한 번에 하나의Creo Parametric세션에 하나의 활성 연결만 만들 수 있습니다

▷Simple Asynchronous Mode 

단순한 비동기식 응용 프로그램은 Creo Parametric에서 일어나는 일을 알아채지 못하는 방식으로 동작합니다.

  • 이런 응용 프로그램은 Creo가 무슨 일을 하는지 알 수 없고, 그에 반응할 수도 없습니다.
  • 예를 들어, Creo에서 메뉴 버튼을 추가하거나 클릭했을 때 실행될 기능을 정의할 수 없는 구조입니다.

이유는, VB API(Visual Basic Application Programming Interface)가 Creo에서 발생하는 이벤트(특정 동작이나 변화)를
"듣는 기능"이 없기 때문입니다.

  • Creo와 VB API가 서로 대화하지 않고, 단순히 독립적으로 동작합니다.
  • "Creo야, 무슨 일이 생기면 나한테 알려줘!" 같은 요청을 할 수 없는 것입니다.

결론적으로, 단순 비동기식 응용 프로그램Creo에서 명령을 보낼 수는 있지만, Creo가 무슨 일을 하는지 반응하거나 따라할 수 없는 제한적인 방식으로 동작합니다.

리스너 (Listener) ?

 

Listener 란???

공부하면서 항상 궁금한게 공통적으로 사용되는 용어의 의미들이다. 그 의미들을 확실히 알아야 머리속에 ...

blog.naver.com

 

이러한 제한에도 불구하고 간단한 비동기 모드 응용 프로그램을 사용하여 Creo Parametric에서 프로세스를 자동화 할 수 있습니다. 응용 프로그램은 기존 Creo Parametric 세션을 시작하거나 연결할 수 있으며 대화식 또는 그래픽이 아닌 비대화 형 모드로 Creo Parametric에 액세스 할 수 있습니다. Creo Parametric이 그래픽과 함께 실행되는 경우 사용자가 사용할 수있는 대화식 프로세스입니다.

단순 비동기 모드에서 실행되도록 VB API 애플리케이션을 디자인 할 때 다음 사항에 유의하십시오.

1. Creo Parametric 프로세스와 VBA 응용 프로그램은 동시에 작업을 수행합니다.

2. VBA 응용 프로그램의 리스너 메서드는 Creo Parametric에서 호출 할 수 없습니다.


1. Starting and Stopping Creo Parametric

다음 방법은 VB API 응용 프로그램을 사용할 때 Creo Parametric을 시작하고 중지하는 데 사용됩니다.

사용 하는 Methods

  • CCpfcAsyncConnection.Start()
  • IpfcAsyncConnection.End()

VB 응용 프로그램은 CCpfcAsyncConnection.Start () 메서드를 사용하여 Creo Parametric 프로세스를 생성하고
연결할 수 있습니다. 이 메서드가 비동기 연결 객체를 반환 한 후 VB API 응용 프로그램은 적절한 API를 사용하여
Creo Parametric 프로세스를 호출 할 수 있습니다. 대화 형 모드에서 Creo Parametric 세션이 실행 중일 때에도
액세스 할 수 있습니다.

비동기 응용 프로그램은 Creo Parametric이 종료 될 때 종료되지 않습니다. 이는 응용 프로그램에서 Creo Parametric 작업을 간헐적으로 수행해야하므로 세션 중에 Creo Parametric을 두 번 이상 시작하고 중지해야 할 때 유용합니다. 응용 프로그램은 언제든지 하나의 Creo Parametric 세션에만 연결하거나 시작할 수 있습니다. VB API 애플리케이션이 두 번째 세션을 생성하면 첫 번째 세션에 대한 연결이 끊어집니다.

응용 프로그램이 연결된 Creo Parametric 프로세스를 종료하려면 pfcAsyncConnection.AsyncConnection.End 메서드를 호출합니다.

Dim asynconn As New pfcls.CCpfcAsyncConnection
Dim conn As pfcls.IpfcAsyncConnection
Set conn = asynconn.Connect("", "", ".", 5)

위 코드는 지정된 디스플레이를 사용하여 호스트에서 실행 중인 기존 Creo Parametric 프로세스에 VBA 응용 프로그램을 연결합니다. 단순하고 완전한 비동기 모드에서 사용하기 위한 것입니다. 메서드가 적절한 특성을 가진 둘 이상의 Creo Parametric 세션을 찾는 경우 IpfcXToolkitAmbiguous 예외가 발생합니다. 특정 Creo Parametric 세션에 연결하거나 다시 연결하려면 IpfcAsyncConnection.ConnectById() 메서드를 사용합니다. VBA 응용 프로그램은 한 번에 하나의 Creo Parametric 세션에만 연결할 수 있습니다. 사용자 실수로 2개의 Creo Parametric 프로그램을 실행하지 마십시요

ErrorHandler:
    ' IpfcXToolkitAmbiguous 예외 처리
    If Err.Description Like "*IpfcXToolkitAmbiguous*" Then
        MsgBox "Error: 여러 Creo 세션이 감지되었습니다. 세션을 명확히 지정해주세요.", vbCritical, "Ambiguous Session"
    Else
        ' 다른 예외 처리
        MsgBox "Unhandled Error: " & Err.Description, vbCritical, "Error"
    End If

 

2. Setting Up a Noninteractive Session

비대화 형 및 비 그래픽 인 Creo Parametric 세션을 생성 할 수 있습니다. 비동기 모드에서 Creo Parametric 시작 또는 CCpfcAsyncConnection.Start ()에 대한 연결 호출에 다음 문자열을 포함합니다.

-g:no_graphics     -> Turn off the graphics display.
-i:rpc_input         ->  Creo Parametric에서 비동기 응용 프로그램의 입력 만 예상하도록합니다.

이 두 인수는 모두 필수이지만 순서는 중요하지 않습니다. 비대화 형 비 그래픽 세션에 대한 호출 구문은 다음과 같습니다.
Dim ccAC as New CcpfcAsyncConnection
Dim aC as IpfcAsyncConnection
aC = ccAC.Start ("pro -g:no_graphics -i:rpc_input",<text_dir>)

여기서 pro는 Creo Parametric을 시작하는 명령입니다.

▷ VB 프로그램 예제 (IpfcAsyncConnection)

<creo_vbapi_loadpoint> / vbapi_examples에있는 pfcAsynchronousModeExamples.vb 파일의 샘플 코드는 VB API를 사용하여 Creo Parametric을 비동기 적으로 시작하고 세션을 검색하며 Creo Parametric에서 모델을 여는 방법을 보여줍니다.

이 예제는 Visual Basic for Applications로 작성된 매크로의 VB API 구문을 보여줍니다. 예를 들어 Microsoft Word 문서 또는 Microsoft Excel 스프레드 시트의 단추로 실행됩니다. 이 예제는 구문을 제외하고 이전 예제와 동일합니다.

VBA 프로그램 시작 과 끝의 코드

SUB VbaStart()

	Dim asynconn As New pfcls.CCpfcAsyncConnection
	Dim conn As pfcls.IpfcAsyncConnection
	Set conn = asynconn.Connect("", "", ".", 5)





        conn.Disconnect (2)
    
End Sub

VBA 프로그램은  Sub  ~ End Sub로 끝납니다.

VBA 프로그램을 CREO와 연결을 위해 "IpfcAsyncConnection" 함수를 사용합니다. 이 클래스는 Creo Parametric에 대한 비동기 연결을 나타냅니다. 변수 "asynconn" 를  "CCpfcAsyncConnection" 체로 정의 합니다. 변수 "conn" 를  "IpfcAsyncConnection" 객체로 정의 합니다.  "CCpfcAsyncConnection" 개체는 지정된 디스플레이를 사용하여 호스트에서 실행 중인 기존 Creo Parametric 프로세스에 응용 프로그램을 연결합니다. 단순하고 완전한 비동기 모드에서 사용하기 위한 것입니다.

Set conn = asynconn.Connect("", "", ".", 5)를 사용 하여 VBA  프로그램과 CREO를 연결 합니다. 

conn.Disconnect (2)를 사용 하여 VBA  프로그램과 CREO를 연결을 단절 합니다.  

연결된 CREO ID 정보 코드

Option Explicit
Sub VbaStart()

    Dim asynconn As New pfcls.CCpfcAsyncConnection
    Dim conn As pfcls.IpfcAsyncConnection
    Set conn = asynconn.CONNECT("", "", ".", 5)
    
    Dim oConnectionId As IpfcConnectionId
    Set oConnectionId = conn.GetConnectionId
    
    MsgBox oConnectionId.ExternalRep
    
    conn.Disconnect (2)
    
End Sub

 

[프로그램 실행 결과 ]


IpfcAsyncConnection 개체 
Function IsRunning () as Boolean

현재 능동적으로 응답하는 Creo Parametric 세션에 연결되어 있는지 확인합니다. "True"이면 연결되어 있습니다.

Option Explicit
Sub VbaStart()

    Dim asynconn As New pfcls.CCpfcAsyncConnection
    Dim conn As pfcls.IpfcAsyncConnection
    Set conn = asynconn.CONNECT("", "", ".", 5)
        
    MsgBox conn.IsRunning
    
    conn.Disconnect (2)
    
End Sub

[프로그램 실행 결과 ]

 

 

VBA Fundamentals #2

VBA는 계층적 구조의 개체를 사용하여 프로그램을 개발 합니다. Creo의 "부모 /자식" 관계로 이해 하십시요 Option Explicit Sub CreoExecution() Dim asynconn As New pfcls.CCpfcAsyncConnection Dim conn As pfcls.IpfcAsyncConnect

tool-2020.tistory.com