[PLC] ST 언어에서 C언어 기반 디자인 패턴 활용하기
1. 서론
PLC 프로그래밍에서 ST(Structured Text) 언어는 C언어와 문법적으로 유사한 구조를 가지고 있습니다. 그렇다면, C언어에서 자주 활용되는 디자인 패턴을 ST에서도 사용할 수 있을까요? 본 글에서는 C언어의 디자인 패턴을 ST 언어에 적용하는 방법과 고려해야 할 사항을 정리해보겠습니다.
2. ST 언어와 C언어의 차이점
C언어의 디자인 패턴을 적용할 때 고려해야 할 ST 언어의 특징은 다음과 같습니다.
-
메모리 관리 차이: C언어는 동적 메모리 할당(
malloc/free
)을 지원하지만, ST는 정적 변수 할당을 기본으로 합니다. -
객체지향적 개념 제한: ST는 클래스(Class) 개념이 없고, 대신 함수 블록(Function Block, FB)을 활용해야 합니다.
-
실시간성과 PLC 실행 주기: PLC 프로그램은 스캔 주기마다 실행되므로, 옵저버 패턴 등의 이벤트 기반 패턴을 변형해야 할 수 있습니다.
3. ST 언어에서 활용할 수 있는 디자인 패턴
(1) 싱글톤 패턴 (Singleton)
싱글톤 패턴은 한 개의 인스턴스만 유지하는 패턴으로, PLC에서는 글로벌 변수와 함수 블록(FB)을 활용하여 구현할 수 있습니다.
FUNCTION_BLOCK Singleton
VAR
instance : INT := 0; (* 싱글톤 인스턴스 *)
END_VAR
METHOD GetInstance : INT
BEGIN
IF instance = 0 THEN
instance := 1; (* 초기화 *)
END_IF;
GetInstance := instance;
END_METHOD
이렇게 하면 GetInstance
메서드를 호출하여 단일 인스턴스를 유지할 수 있습니다.
(2) 팩토리 패턴 (Factory Pattern)
PLC에서는 동적 객체 생성을 직접 지원하지 않으므로, 여러 개의 함수 블록을 사전에 정의한 후 선택적으로 호출하는 방식으로 팩토리 패턴을 구현할 수 있습니다.
FUNCTION_BLOCK Motor
VAR_INPUT
motorType : INT;
END_VAR
VAR_OUTPUT
speed : INT;
END_VAR
METHOD Initialize
VAR_INPUT
motorType : INT;
END_VAR
BEGIN
CASE motorType OF
1: speed := 100;
2: speed := 200;
ELSE
speed := 50;
END_CASE;
END_METHOD
Motor
블록을 호출하면 입력값에 따라 적절한 설정이 적용됩니다.
(3) 옵저버 패턴 (Observer Pattern)
PLC의 주기적 실행 특성을 고려하여, 값이 변경될 때만 동작하는 옵저버 패턴을 구현할 수 있습니다.
FUNCTION_BLOCK Observer
VAR_INPUT
observedValue : INT;
END_VAR
VAR
prevValue : INT;
END_VAR
METHOD CheckChange : BOOL
BEGIN
IF observedValue <> prevValue THEN
prevValue := observedValue;
CheckChange := TRUE; (* 값이 변경됨 *)
ELSE
CheckChange := FALSE;
END_IF;
END_METHOD
이 방식은 CheckChange
메서드를 호출하여 값이 변경되었는지 감지하는 방식으로 활용할 수 있습니다.
4. 추천 도서
ST 언어와 디자인 패턴을 깊이 있게 이해하려면 아래 도서를 추천합니다.
📖 ST 언어 관련 도서
-
"PLC Structured Text Programming Guide" - PLC ST 언어의 기초부터 응용까지 다루는 입문서
-
"IEC 61131-3: Programming Industrial Automation Systems" - 국제 표준을 기반으로 한 PLC 프로그래밍 가이드
📖 C 언어 디자인 패턴 관련 도서
-
"Design Patterns: Elements of Reusable Object-Oriented Software" (GoF) - 디자인 패턴의 개념과 활용 방법을 정리한 대표적인 서적
-
"Head First Design Patterns" - 디자인 패턴을 직관적으로 설명하는 책
5. 결론
C언어의 디자인 패턴을 ST에서도 적용할 수 있으며, 특히 싱글톤, 팩토리, 옵저버 패턴이 유용합니다. 다만, ST 언어의 특징을 고려하여 메모리 관리 방식, 실행 주기, 동적 객체 생성의 제한을 감안해야 합니다.
ST 기반 PLC 프로그래밍을 효율적으로 설계하려면 함수 블록(FB)을 적극 활용하고, 디자인 패턴을 변형하여 적용하는 것이 중요합니다.
댓글
댓글 쓰기