이 블로그는 원래 cimetrix.com에 게시되었습니다.
장비에 SECS/GEM 인터페이스를 추가하는 것은 자동화의 첫걸음입니다. 적절한 도구 세트가 없다면 이는 압도적인 작업처럼 느껴질 수 있습니다. CIMConnect™ 툴킷은 개발자와 통합업체에게 SECS/GEM 인터페이스를 신속하게 생성하고 완벽하게 다듬을 수 있는 능력을 제공합니다.
최근 Cimetrix CIMConnect 툴킷을 소개받았습니다. 실습 중심의 고객 교육 행사에 참석할 기회가 있었는데, SECS/GEM에 대한 제 지식이 거의 없었음에도 불구하고 사흘 만에 CIMConnect를 활용한 SECS/GEM 인터페이스 구현의 기초를 익힐 수 있었습니다. 이 매우 긍정적인 경험의 주요 내용을 공유하고자 합니다.
CIMConnect
CIMConnect는 개발자가 장비 제어 애플리케이션에서 SECS/GEM 인터페이스를 구현하고 관리할 수 있도록 지원하는 강력한 소프트웨어 개발 키트를 제공합니다. CIMConnect는 항상 최신 SEMI 표준 버전을 반영하여 GEM 호환 인터페이스 제작 과정을 간소화합니다. CIMConnect 설치 시 제공되는 다양한 도구를 통해 개발 및 테스트를 간편하고 효율적으로 수행할 수 있습니다.
CIMConnect 샘플 프로젝트
CIMConnect 샘플은 SECS/GEM 애플리케이션의 작동 예시를 제공합니다. 샘플 프로젝트는 C#, VB.NET 및 C++로 제공됩니다. 본 문서에서는 교육 과정에서 사용한 C# 샘플을 기준으로 설명하겠습니다.
이 샘플은 필수 요소를 처리함으로써 개발을 가속화할 수 있는 "정상 작동이 확인된" 환경을 제공합니다. SECS/GEM 연결 측면을 의심하기보다는 애플리케이션에서 작업 중인 범위의 디버깅에 집중할 수 있었습니다.
C# 샘플 기능
- 처리 시뮬레이션: 샘플은 장비 작동을 시뮬레이션하는 루프를 제공합니다. 여기에는 이벤트 트리거링 및 변수 값 업데이트가 포함됩니다.
- EM서비스 초기화: 샘플이 컴파일되어 실행되면 CIMConnect가 초기화되고 GEM 통신이 시작됩니다.
- GEM 운영자 제어: GEM 통신 상태는 GEM 상태 머신을 사용하여 실시간으로 표시됩니다. 통신은 샘플의 사용자 인터페이스에서 제어할 수 있습니다.
- 멀티스레딩 예시: 데이터는 별도의 스레드에서 처리됩니다. 이는 좋은 관행이며, 데이터가 비동기적으로 효과적으로 처리되는 동안 사용자 인터페이스가 반응성을 유지할 수 있게 합니다.
- 지연된 GEM 통신 초기화: 이는 초기화 과정에서 장비가 준비될 때까지 대기하는 개념을 보여줍니다.
- 트리거 이벤트: 이벤트는 프로세스 시뮬레이션 루프에서 트리거됩니다. 이벤트가 트리거되면 관련 변수가 업데이트됩니다.
- 변수 값 가져오기 및 설정하기: 이 샘플은 다양한 데이터 유형의 변수 값을 프로그래밍 방식으로 가져오고 설정하는 여러 예시를 제공합니다.
- 알람 설정 및 해제: 사용자 인터페이스에서 체크박스를 토글하여 예시 알람을 설정하거나 해제할 수 있습니다.
- 터미널 서비스: 터미널 서비스는 장비 사용자 인터페이스에 실시간 메시지를 표시함으로써 효과적인 로깅의 사례를 제공합니다.
- 원격 명령: 이 샘플은 사용자가 호스트에서 SECS-II 메시지를 전송하여 처리 시뮬레이션을 시작하고 중지할 수 있도록 합니다.
훈련 과정
교육 과정 교육은 매우 상호작용적입니다. 강사가 새로운 주제를 시연한 후, 교육생들이 직접 시도해 볼 시간을 부여합니다. 새로운 기능을 시험해 볼 때, 저는 먼저 버튼이나 체크박스를 생성하여 해당 기능이 제대로 작동하는지 확인하는 것이 도움이 된다는 것을 알게 되었습니다. 그 다음으로, 해당 기능을 애플리케이션에 통합했습니다. 각 과정을 이렇게 두 단계로 나누면 모호함을 제거하고 불필요한 디버깅을 피할 수 있습니다.
진행 속도는 고객이 정했습니다. 강사는 필요 시 지원을 제공할 수 있었습니다. 교육은 커리큘럼을 따르지만, 각 세션은 교육을 요청한 고객의 요구에 맞춰 개별적으로 구성됩니다.
제 신청서
교육 전에 C# 애플리케이션을 제작했습니다. 이 애플리케이션은 XML 레시피를 읽어 와퍼 가공을 시뮬레이션했습니다. 교육 중 수정할 수 있는 작동하는 애플리케이션이 있었던 것은 실제 현장 구현을 모사했기 때문에 매우 유용했습니다.
SECS/GEM 인터페이스 추가
첫 번째 단계는 CIMConnect를 초기화하는 것이었습니다. 샘플 프로젝트에서 초기화 함수를 추출함으로써 이 단계는 단순화되었습니다. CIMConnect가 초기화된 것을 확인한 후, SECS/GEM 기능 추가로 진행할 수 있었습니다.
API 호출
제 애플리케이션은 CIMConnect에 API 호출을 보내고 콜백을 수신합니다. 각 호출이 허용하는 사용자 정의 기능으로 인해 초기에는 API 호출을 이해하기 다소 어려웠습니다.
래퍼 함수
샘플 프로젝트는 API 호출을 구현하는 여러 유용한 래퍼 함수를 제공합니다. API 호출의 오버헤드는 래퍼 내부에서 처리됩니다. 래퍼 함수를 사용하면 개발자가 API 호출이 잘못되었는지 여부보다 결과가 자신의 기대와 일치하는지에 집중할 수 있다는 장점이 있습니다.
API 호출을 위해 래퍼 함수를 성공적으로 사용한 후, 저는 직접 수정하여 나만의 래퍼 함수를 만들기 시작했습니다. 결국에는 API를 직접 호출하는 데 익숙해졌습니다.
장비 구성
CIMConnect는 구성 파일에서 이벤트, 알람, 변수 및 기타 속성을 정적으로 정의할 수 있게 합니다. 제 파일에서는 애플리케이션과 관련된 여러 변수를 생성했습니다. 이후 애플리케이션이 대신 동적으로 항목을 정의할 수 있다는 사실을 알게 되었습니다. 또한 애플리케이션이 프로그래밍 방식으로 구성된 속성을 재정의할 수도 있었습니다. 이러한 기능은 사소한 차이를 가진 다양한 장비 유형을 생산하는 기업에 유용할 것이라고 생각합니다.
이벤트 및 알람 추가
제가 생성한 첫 번째 이벤트는 FOUP가 로드 포트에 도착했을 때 호스트에 알리는 것이었습니다. SendCollectionEventWithData() 래퍼 함수를 사용하여 이벤트를 트리거하고, 이전에 구성 파일에서 정의한 변수를 증가시켰습니다. 이 변수는 입력 포트에 도착한 FOUP의 개수를 제공했습니다.
AlarmSET() 및 AlarmClear() 함수를 사용하여 3개의 알람을 생성했습니다. EMO 버튼과 같은 하드웨어가 없었기 때문에, 각 알람의 동작을 전환하기 위해 체크박스를 사용했습니다.
SECS/GEM 인터페이스를 갖춘 내 애플리케이션.
CIMConnect 제어판을 사용한 개발
CIMConnect 제어판은 CIMConnect의 내부 작동 방식을 관찰할 수 있는 방법을 제공하는 그래픽 사용자 인터페이스 유틸리티입니다.
개발 과정에서 제어판을 자주 사용했습니다. 애플리케이션 내 각 체크박스를 토글할 때마다 경보 상태가 변화하는 것을 확인할 수 있었습니다. 이벤트 기록과 경보 기록은 실시간 업데이트를 제공했습니다. 제어판에서 변수 값을 변경하고 이벤트를 트리거한 후, 애플리케이션을 계속 수정하지 않고도 호스트에서 결과를 검증할 수 있었습니다.
제 애플리케이션의 GEM 컨트롤을 사용하면서 제어판에서 GEM 통신 상태가 변경되는 것을 지켜보았습니다. 또한 제어판에서 상태를 변경하면 제 애플리케이션에서도 상태가 변경되는 것을 확인할 수 있었습니다.

CIMConnect 제어판 1.15.0
GEM Host Messenger를 통한 호스트 테스트
CIMConnect에는 장비와 SECS-II 메시지를 주고받을 수 있는 호스트 애플리케이션인 GEM Host Messenger가 포함되어 있습니다.
GEM Host Messenger를 사용하면 애플리케이션과 쉽게 연결할 수 있습니다. GEM Host Messenger는 메시지를 표시하고 해독하여 읽기 쉬운 형식으로 변환합니다.
S2F21 메시지 "START"와 "STOP"을 전송하여 애플리케이션의 처리를 제어할 수 있었습니다. 한때 독립적으로 작동하던 애플리케이션이 원격으로 제어되는 모습을 보니 매우 만족스러웠습니다.

젬 호스트 메신저 1.0.0
도움말 문서, 도구 및 지원
CIMConnect는 상세한 도움말 파일과 개발자 가이드를 제공합니다. 방대한 CIMConnect 라이브러리에서 제공하는 다양한 기능에 대한 세부 정보를 얻기 위해 저는 이 자료들을 자주 참고하게 되었습니다.
결론
CIMConnect를 통해 SECS/GEM 인터페이스를 신속하게 개발하고 기존 프로그램에 통합할 수 있었습니다. CIMConnect 교육을 통해 SECS/GEM에 익숙하지 않은 개발자도 단 3일 만에 기본 사항을 습득할 수 있습니다. 비록 간단한 예시였지만, CIMConnect는 모든 규모의 프로젝트를 지원할 수 있는 강력한 기능성을 갖추고 있습니다.