[PLC] Petri Net을 ST 언어로 구현하기

Petri Net을 ST 언어로 구현하기

Petri Net은 시스템의 동작을 모델링하는 강력한 도구입니다. 이 모델은 시스템의 상태, 이벤트 발생, 그리고 상태 변화 간의 관계를 시각적으로 표현할 수 있어 다양한 시스템 설계와 분석에 활용됩니다. 오늘은 Petri Net을 ST(Structured Text) 언어로 구현하는 방법에 대해 알아보겠습니다.

Petri Net 개요

Petri Net은 기본적으로 세 가지 주요 요소로 구성됩니다:

  • Place(플레이스): 시스템의 상태를 나타내며, 이곳에 "Token"이 존재할 수 있습니다.
  • Transition(트랜지션): 시스템의 상태를 변화시키는 이벤트입니다. 조건이 충족되면 활성화되어 상태를 변경합니다.
  • Arc(아크): Place와 Transition을 연결하는 관계입니다. 트랜지션이 활성화되면 해당 Place의 상태가 변화하게 됩니다.

ST 언어로 Petri Net 구현하기

ST 언어는 PLC(Programmable Logic Controller)에서 널리 사용되는 고급 언어로, 논리적인 조건을 코드로 표현하는 데 유용합니다. Petri Net을 ST 언어로 구현하는 방식은 간단히 Place와 Transition을 변수로 정의하고, 트랜지션이 활성화될 때 Place 상태를 변경하는 방식으로 설계됩니다.

1. Place 변수 정의

Place는 시스템의 상태를 나타내는 변수로 정의됩니다. 예를 들어, "Token"이 존재하는지 여부를 BOOL 타입으로 관리합니다.


VAR
    P1: BOOL;   (* Place 1: Token 존재 여부 *)
    P2: BOOL;   (* Place 2: Token 존재 여부 *)
    P3: BOOL;   (* Place 3: Token 존재 여부 *)
END_VAR


2. Transition 변수 정의

Transition은 시스템 상태를 변경하는 이벤트입니다. 트랜지션이 활성화될 조건을 관리하는 BOOL 변수를 사용합니다.


VAR
    T1: BOOL;   (* Transition 1: 조건이 충족되면 활성화 *)
    T2: BOOL;   (* Transition 2: 조건이 충족되면 활성화 *)
END_VAR


3. Transition 활성화 및 Place 상태 변경

트랜지션이 활성화되면 해당 트랜지션과 연결된 Place의 상태를 변경합니다. 예를 들어, Transition 1이 활성화되면 Place 1에서 Token을 제거하고 Place 2에 Token을 추가하는 방식입니다.


(* Transition 1이 활성화되면 P1에서 P2로 Token 이동 *)
IF T1 THEN
    P1 := FALSE;   (* P1에서 Token 제거 *)
    P2 := TRUE;    (* P2에 Token 추가 *)
END_IF;

(* Transition 2가 활성화되면 P2에서 P3로 Token 이동 *)
IF T2 THEN
    P2 := FALSE;   (* P2에서 Token 제거 *)
    P3 := TRUE;    (* P3에 Token 추가 *)
END_IF;


4. Transition 조건 설정

Transition이 활성화되기 위한 조건을 설정합니다. 예를 들어, 외부 신호가 TRUE일 때 Transition 1을 활성화하는 방식입니다.


(* Transition 1의 조건: 외부 신호가 TRUE일 때 *)
IF ExternalSignal1 THEN
    T1 := TRUE;    (* Transition 1 활성화 *)
ELSE
    T1 := FALSE;   (* Transition 1 비활성화 *)
END_IF;

(* Transition 2의 조건: P1과 P2에 모두 Token이 있을 때 *)
IF P1 AND P2 THEN
    T2 := TRUE;    (* Transition 2 활성화 *)
ELSE
    T2 := FALSE;   (* Transition 2 비활성화 *)
END_IF;


복잡한 Petri Net 모델링

복잡한 시스템을 모델링할 때는 여러 개의 Place와 Transition을 사용하여 시스템의 동작을 보다 정교하게 표현할 수 있습니다. 예를 들어, 병렬적으로 실행되는 트랜지션이나 상호작용을 고려한 Petri Net을 구현할 수 있습니다.

ST 언어로 Petri Net 구현의 장점

ST 언어는 간단하면서도 강력한 논리 연산을 통해 Petri Net을 명확하게 모델링할 수 있습니다. PLC와 같은 제어 시스템에서는 이러한 모델을 통해 시스템 상태와 이벤트를 관리하고, 다양한 자동화 시스템에 쉽게 적용할 수 있습니다.

결론

ST 언어로 Petri Net을 구현하는 방법을 살펴보았습니다. Petri Net은 시스템의 동작을 명확하게 모델링할 수 있는 좋은 도구이며, ST 언어로 구현함으로써 제어 시스템에 직접 적용할 수 있습니다. 위에서 소개한 방식은 기본적인 예제에 불과하며, 필요에 따라 더 복잡한 모델을 설계할 수 있습니다.


참고 문헌

  1. Murata, T. (1989). Petri Nets: Properties, Analysis, and Applications. Proceedings of the IEEE, 77(4), 541-580.
  2. David, R., & Alla, H. (2010). Discrete, Continuous, and Hybrid Petri Nets. Springer Science & Business Media.
  3. IEC 61131-3: Programmable Controllers - Part 3: Programming Languages. International Electrotechnical Commission.

 

댓글

이 블로그의 인기 게시물

전력(kW) 계산하기 (직류, 교류 단상, 교류 삼상)

[PLC] PLC 아날로그 입출력 기본

제너 다이오드에 저항을 연결하는 이유

[농사] 실내 식물 재배 조명, 어떤 걸 선택해야 할까?

공압 속도 제어: 미터인 vs 미터아웃

[아두이노] 가변저항(Potential Divider)과 전압분배(Voltage Divider)

[스마트팜] 아쿠아포닉스에서 pH 제어를 자동화해보자! (Python 활용)

커패시터에 저장된 에너지 계산

[아두이노] 74HC595 시프트 레지스터 연동

[PLC] 릴레이와 전자 접촉기 (MC)