본문으로 바로가기

Structured Text

category Programming/PLC 2021. 4. 23. 17:04
반응형

Structured Text

Structured Text, 줄여서 ST언어라고 불리는 이 프로그래밍 언어는 이름에서부터 알 수 있듯이, IEC 61131-3의 표준으로 지정된 프로그래밍 언어 중 대표적인 텍스트 기반의 프로그래밍 언어이다.

PLC와 관련된 엔지니어들 중에서 높은 비율의 엔지니어들이 래더 다이어그램과 같은 그래픽 기반의 프로그래밍 언어에 익숙하다는 부분 때문에, ST 언어는 여러 많은 장점들을 가지고 있지만 실제로 활용되는 경우는 그렇게 많지 않다. 프로그램 개발자의 손을 거들기 위한 다양한 기능들을 여러 개발 환경에서 제공하고는 있지만, 프로그램에 필요한 여러 오브젝트들이 모두 텍스트로 구현되어야 한다는 점은 PLC 프로그램에 익숙하지 않은 여러 엔지니어들에게 높은 진입 장벽으로 다가올 수 밖에 없고, 다른 그래픽 기반의 언어와 비교했을 때 텍스트로만 구성된 프로그램에서 여러 변수들의 상태 값을 모니터링 하는 것 또한 이질감을 강하게 가지도록 만들기에 충분하다는 것도 하나의 이유가 될 수 있다.

이런 점에서 봤을 때, 다른 그래픽 기반의 프로그래밍 언어와 비교한다면, ST 언어를 이용한 프로그램의 작성과 디버깅에는 어느 정도의 숙련도를 요구한다고 말할 수 있고, 그래서 시스템 개발 엔지니어의 대부분이 다른 그래픽 기반의 프로그래밍 언어를 선호하는 현상으로 나타날 수 밖에 없을 것이다. 하지만, ST 언어는 다른 그래픽 기반에서는 사용할 수 없는 강력한 전용 명령어들을 다수 보유하고 있고, 이런 명령문의 조합은 다른 그래픽 기반의 프로그래밍 언어에서 흉내내기 어려울 정도로 복잡한 구조의 프로그램을 간단히 구현할 수 있도록 도와주면서, 지금까지 이야기된 ST 언어의 모든 단점들을 단번에 상쇄시킬 수 있을 정도로 확실한 장점이라 할 수 있다. 그래서, 라이브러리나 프로그램 모듈을 구현할 때는 십중팔구 ST 언어를 이용하게 되고, 객체 지향 프로그래밍에서도 ST 언어가 활용되는 모습을 자주 목격할 수 있다.

다른 프로그래밍 언어와 비교했을 때, ST 언어가 가진 가장 특이한 점을 하나 꼽으라고 한다면, 모든 프로그램 코드 라인의 마지막은 세미콜론 (;)으로 마무리 된다는 부분이다.

C 또는 Java와 같은 PC의 정적 프로그래밍 언어에 경험이 있는 사람이라면 당연하게 받아들여질 수 있는 부분이지만, 그렇지 않은 사람들을 위해 간단히 요약하자면, 처음 세미콜론 기호를 프로그램에 활용한 언어는 알골(ALGOL)이다. 수학식을 표현하는데 초점을 맞춘 알골은 명령문과 명령문을 구분하는 문자로 일반적인 개행 문자는 취급하기 어려웠기 때문에, 별도의 기호를 이용해서 명령문 사이를 구분하고자 하였지만, 구분의 기호로 많이 활용되던 콤마를 이미 리스트의 원소들을 구분하는데 활용하다보니, 비슷하게 생긴 세미콜론을 명령문 구분 기호로 사용하게 되었다. 이는 C 언어의 조상격인 PL/I의 설계자들이 세미콜론 기호를 명령문 끝에 추가하는 것이 여러 면에서 유용하다 판단하여, 항상 코드의 마지막에 세미콜론을 이용해서 마무리하는 규칙을 정하게 되었고, 이것이 ST 언어에도 영향을 끼치게 된 것이다. 이런 역사에 대한 부분은 넘어가더라도, 래더 다이어그램에서는 여러 래더 심볼이나 렁을 이용해서 프로그램이 표현되고, FBD나 CFC에서는 박스 형태의 오브젝트를 이용해 연산자들이 구분되므로, 각각의 연산 실행을 위한 프로그램 코드의 시작과 끝이 분명히 구분될 수 있지만, 모든 것이 텍스트로 구성된 ST에서는 프로그램 코드의 끝을 구분해주는 하나의 인식자가 필요하다는 관점에서 바라본다면, 충분히 이해될 수 있는 부분이라 할 수 있다.

앞에서 이야기한 대로, ST 언어가 다른 IEC 표준 언어와 비교했을 때, 복잡한 로직을 구현하는데 효과적인 것은 ST에서만 사용할 수 있는 강력한 명령문 때문이다. 여기에는 여러 명령문들이 있지만, ST 언어에서 가장 많이 사용되는 2가지를 꼽으라면 단연 IFFOR 문을 가장 먼저 거론할 수 있다.

프로그램에서 IF 문은 위 그림과 같은 형태로 사용된다. 간단히 줄여서 IF 문이라 부르지만, 실제로는 IF와 THEN, ELSIF, ELSE, 그리고 END_IF라는 다섯 개의 키워드와 함께 사용된다. 이 중에서 ELSIF와 ELSE는 상황에 따라 쓰일 수도 있고, 생략될 수도 있지만, IF와 THEN, 그리고 END_IF는 반드시 한 세트로 사용되어야 한다.

그림에서 볼 수 있듯이, IF 문은 IF와 THEN 사이에 조건이 추가되어야 한다. 조건 부분에는 BOOL 타입의 변수나 BOOL 타입의 결과를 출력으로 반환하는 연산 식이 들어갈 수 있고, 조건의 상태가 TRUE인지 FALSE 인지에 따라 실행되어야 하는 프로그램의 코드를 다르게 선택할 수 있도록 만들어주는 명령문이다.

FOR 문은 위 그림과 같은 형태로 사용된다. 간단히 줄여서 FOR 문이라 부르지만, FOR, TO, BY, DO, END_FOR라는 다섯 개의 키워드와 함께 사용되고, 주어진 조건에 따라 DO와 END_FOR 사이에 작성된 프로그램 코드를 단일 스캔 사이클에서 반복 실행시켜줄 때 사용된다. FOR 문에서 코드의 반복 실행 횟수는 초기값과 최종값, 그리고 증감값에 의해 결정된다. 처음 FOR 문이 실행되면, 인덱스 변수에는 초기값이 할당된다. 그리고 DO와 END_FOR 사이의 프로그램 코드들이 실행되고 나면, 인덱스 변수에 저장된 초기값은 증감값만큼 증가 또는 감소하고, 변경된 인덱스 변수의 상태 값이 최종값을 넘어서면 (증가의 경우 크거나, 감소의 경우 작게되면…) END_FOR의 다음 코드로 실행 순서가 넘어가게 된다. 주로, 반복 실행 횟수를 예상할 수 있을 때 FOR 문을 사용하고, 중괄호로 감싸진 BY와 증감값은 상황에 따라 생략할 수 있으며, 이들이 생략된 경우에는 증감값이 1로 정의된다.

FOR 문의 사용에서는 거의 발견되지 않지만, 그래도 단일 스캔 사이클에서 지정된 영역의 프로그램 코드를 반복 실행되도록 만들어주는 명령어이기 때문에, 무한 반복이 되지 않도록 프로그램이 작성되어야 한다. 만약, 인덱스 변수의 변화가 최종값에 영원히 도달할 수 없게 설정된 상태에서 FOR 문이 실행될 경우, DO와 END_FOR 사이의 프로그램 코드는 무한 반복해서 실행되고, 이것은 PLC의 스캔 사이클이 종료되지 않는 상황으로 이어질 수 있으므로, 반드시 주의해야 한다.

 

이번 글에서는 ST의 강력한 전용 명령문 중에서 IF와 FOR에 대해서만 소개하고 있지만,
프로그램을 돕는 그 외 많은 여러 명령문들이 있습니다.
이 부분과 관계된 더욱 자세한 내용은 전자책을 통해 확인하실 수 있습니다.
아래 Link를 클릭하면 전자책 구매 사이트 (크몽)으로 연결되니,
전자책 구매에 관심 있으신 분들은 참고하시기 바랍니다.

(전자책 구매하러가기)

지금 읽고 계신 글이 유익했다면, 커피 한 잔 부탁드립니다.
더욱 참신한 글로 여러분의 후원에 보답하겠습니다.


donaricano-btn

반응형

'Programming > PLC' 카테고리의 다른 글

사용자 정의형 데이터 타입  (0) 2021.05.16
Sequential Function Chart  (0) 2021.05.15
FBD와 CFC  (0) 2021.04.19
래더 다이어그램  (2) 2021.04.18
변수의 종류  (0) 2021.04.07