[Plant Simulation Tutorial #06] Plant Simulation의 핵심, Simtalk이란 무엇인가? (소개 및 기초)

안녕하세요! 오늘은 지멘스(Siemens)의 Plant Simulation을 더 강력하게 만들어주는 프로그래밍 언어, Simtalk에 대해 알아보는 첫 번째 시간입니다.
시뮬레이션을 돌리다 보면 기본 객체(Object) 기능만으로는 구현하기 힘든 복잡한 로직이 필요할 때가 있죠? 이때 필요한 것이 바로 Simtalk입니다. 오늘은 Simtalk의 정의부터 핵심인 '트리거(Trigger)'의 개념까지 확실하게 정리해 드리겠습니다.
1. Simtalk이란 무엇인가?
Simtalk은 Plant Simulation에 통합된 전용 프로그래밍 언어입니다. 단순히 모델링을 하는 것을 넘어, 사용자가 원하는 구체적인 동작이나 논리를 구현할 수 있게 해줍니다.
- 강력한 제어: 각 시뮬레이션 객체와 긴밀하게 연결되어 있어, 객체의 모든 속성(Attribute)과 메서드(Method)에 접근하여 제어할 수 있습니다.
- 디버깅: 잘못된 구문이나 오류를 빠르게 잡아내고 수정할 수 있는 디버거 기능을 제공합니다.
- 버전: Plant Simulation 12 버전 이후 코드가 단순화된 Simtalk 2.0으로 업그레이드되었지만, 이전 버전인 1.0 구문도 문제없이 사용할 수 있습니다.
2. Simtalk의 구성 요소
Simtalk을 작성하기 위해 알아야 할 기본 개념은 크게 두 가지입니다.
1) 속성 (Attributes)과 경로 (Path)


모든 객체는 고유한 속성을 가지고 있습니다. 예를 들어 Store 객체라면 저장 용량을 뜻하는 Capacity 같은 속성이 있겠죠. Simtalk은 마치 폴더 경로를 찾아가듯 객체의 위치(Path)를 지정하고, 그 객체의 속성을 변경하거나 제어하는 방식으로 작동합니다.


2) 제어 구문 (Control Statements
일반적인 프로그래밍 언어처럼 함수를 사용하여 로직을 짭니다.
| Simtalk | 사용하는 대표적인 구문 |
| if...end | if 문으로 가장 대표적인 구문이다. |
| for...end | for 반복문, 1 부터 X 개수까지 반복하도록 한다. |
| while ... end | while 반복문으로, 특정 행동을 하는 동안 반복한다. |
| loop .. exitloop | 루프문 exitloop 로 루프를 빠져나온다. |
| wait | 특정 시간동안 기다리게 한다, waituntil 사용. |
| switch... case.. end |
보통 버튼을 누를 때 사용되는 method다. switch 에는 해당하는 조건문을 넣고 그 조건문을 만족하는 case 버튼들에 대해 작동하면 실행되는 코드들을 입력한다. |
| create | 무언가를 생성한다. |
| return | method 혹은 그 구문을 exit 한다. |
| waituntil | ~할 때까지 기다린다. |
| stopuntil | ~할 때까지 작동을 정지한다. |
- 조건문: if, switch 등
- 반복문: for, while 등
- 명령어: stop, wait, create, print 등
Tip: 코드가 제대로 작동하는지 확인하고 싶다면 <print> 함수를 사용해 보세요. 콘솔 창에 속성값을 띄워 설정이 맞는지 바로 확인할 수 있습니다.



3. 핵심 개념: Method와 트리거 (Trigger)
코드를 아무리 잘 짜서 Method에 저장해 두어도, 언제 실행하라고 명령하지 않으면 아무 일도 일어나지 않습니다. 이때 자동으로 코드를 실행시켜 주는 방아쇠 역할을 하는 것이 바로 **트리거(Trigger)**입니다.

가장 많이 사용되는 대표적인 트리거 4가지를 알아볼까요?
1) Entrance (진입)
- MU(제품, AGV 등)가 특정 객체(Station, Track 등)에 진입하는 순간 발동합니다.
- 예: 제품이 창고에 들어올 때마다 재고 카운트를 올리는 로직에 사용.
2) Exit (퇴장)
- MU가 객체에서 나가는 순간 발동합니다.
- 주로 제품이 공정을 마치고 다음 목적지로 어디로 갈지 정해줄 때(@.move) 많이 사용합니다.
3) Set-up (셋업)
- 정의: 동일한 공정이지만 툴 체인지(Tool Change)와 같이 사전 변경 작업이 필요할 때 사용됩니다.
- 활용: 주로 온도의 변화(Cool down, Warm up)나 3D 시뮬레이션 상에서 특정 준비 동작을 구현할 때 이용됩니다.
4) Pull (풀)
- 정의: 엘리베이터나 크레인 등 상하좌우 운동을 하는 물류 설비에서 주로 사용되는 컨트롤입니다.
- 참고: 사실 Entrance와 Exit만 잘 활용해도 Set-up과 Pull 과정을 충분히 구현할 수 있기 때문에, 처음 배우시는 분들은 Entrance와 Exit에 집중하는 것이 좋습니다.
* Front & Rear
Exit 컨트롤을 사용할 때 헷갈리기 쉬운 개념입니다.
- 주의: Front 사용 시에는 반드시 목적지를 설정해 주어야 합니다.
- Front: 제품(또는 AGV)의 머리 부분이 트랙의 끝점에 닿았을 때 발동합니다.
- 활용: 이미 목적지가 정해져 있거나 자유롭게 움직이는 상황에서 사용합니다
- Rear: 제품의 꼬리 부분이 트랙을 완전히 벗어나는 순간 발동합니다.



4. 정리하며
Simtalk은 단순히 코딩을 하는 것보다, **"어떤 시점(Trigger)에 어떤 로직(Method)을 적용할 것인가"**를 설계하는 것이 핵심입니다.
오늘은 Simtalk의 기본 정의와 Method를 실행시키는 트리거(Entrance, Exit)에 대해 알아보았습니다. 다음 시간에는 변수 선언과 자료형, 그리고 시뮬레이션의 꽃인 '분포(Distribution)' 표현에 대해 다뤄보겠습니다.
궁금한 점은 댓글로 남겨주세요!
