일상에 꼭 필요한 정보, 늘 함께하는 나침반 일상에 꼭 필요한 정보, 늘 함께하는 나침반

Structured Text란?|텍스트로 PLC 프로그램을 작성하는 방법

읽는 시간 약 18분

Structured Text는 조건문, 반복문, 연산식 등을 텍스트 형태로 작성하는 PLC 프로그래밍 언어입니다. ST의 기본 문법과 IF·CASE·FOR 사용법, Ladder와의 차이, 실제 자동화 프로그램에서 활용하는 방법을 알아봅니다.

PLC 프로그램이라고 하면 가장 먼저 Ladder Diagram을 떠올리는 경우가 많습니다.

접점과 Coil을 이용하는 Ladder는 전기회로와 형태가 비슷해 입력과 출력의 관계를 직관적으로 확인하기 좋습니다. 하지만 수식 계산이나 여러 조건의 데이터 처리, Array 연산처럼 프로그램이 복잡해지면 Ladder만으로 작성하기 불편한 경우가 있습니다.

이때 사용할 수 있는 PLC 언어가 Structured Text, 줄여서 ST입니다.

Structured Text는 일반적인 프로그래밍 언어처럼 명령어를 텍스트로 작성하기 때문에 복잡한 계산과 조건처리, 반복작업을 비교적 간결하게 표현할 수 있습니다.

Structured Text란 무엇일까?

Structured Text는 텍스트 기반으로 PLC 프로그램을 작성하는 고급 프로그래밍 언어입니다.

IEC 61131-3에서 정의하는 PLC 프로그래밍 언어 중 하나이며 일반적으로 ST라고 줄여서 부릅니다.

Structured Text에서는 변수와 연산자, 조건문, 반복문 등을 이용하여 프로그램을 작성합니다.

예를 들어 온도가 설정값보다 높으면 Cooling 출력을 ON하는 간단한 조건은 개념적으로 다음과 같이 표현할 수 있습니다.

IF Temperature > SetTemperature THEN
    Cooling := TRUE;
ELSE
    Cooling := FALSE;
END_IF;

Ladder에서는 접점과 비교 명령, Coil 등을 이용해 표현할 수 있는 내용을 ST에서는 텍스트 형태로 작성할 수 있습니다.

C나 Pascal 같은 일반 프로그래밍 언어를 접해본 사람이라면 비교적 익숙하게 느껴질 수 있습니다.

다만 실제 문법과 지원되는 데이터형, 함수 및 명령은 PLC 제조사와 개발환경에 따라 차이가 있으므로 해당 시스템의 Programming Manual을 확인해야 합니다.

Structured Text에서는 변수를 어떻게 사용할까?

ST 프로그램에서는 PLC의 데이터를 변수로 사용합니다.

예를 들어 다음과 같은 변수가 있다고 가정해 보겠습니다.

Temperature
SetTemperature
MotorSpeed
ProductCount
MotorRun
Alarm

각 변수에는 데이터의 성격에 맞는 Data Type이 지정됩니다.

온도나 계산값에는 REAL을 사용할 수 있고 제품 개수에는 INT나 DINT 계열의 정수형을 사용할 수 있습니다. ON/OFF 상태는 BOOL로 표현하는 방식이 일반적입니다.

예를 들어 다음과 같은 연산을 작성할 수 있습니다.

Difference := SetTemperature - Temperature;

또는 생산수량을 증가시키는 연산을 표현할 수 있습니다.

ProductCount := ProductCount + 1;

이처럼 ST에서는 변수에 값을 대입하거나 여러 데이터를 계산하는 프로그램을 텍스트 형태로 작성할 수 있습니다.

여기서 :=는 일반적으로 변수에 값을 대입하는 Assignment 연산자로 사용됩니다.

IF문은 어떻게 사용할까?

Structured Text에서 가장 많이 사용하는 제어문 중 하나가 IF문입니다.

특정 조건이 TRUE인지 확인한 뒤 서로 다른 프로그램을 실행할 때 사용합니다.

예를 들어 탱크 수위가 High Limit 이상이면 Pump를 정지한다고 가정해 보겠습니다.

IF TankLevel >= HighLimit THEN
    PumpRun := FALSE;
END_IF;

조건을 두 방향으로 나누려면 ELSE를 사용할 수 있습니다.

IF Temperature >= HighLimit THEN
    Cooling := TRUE;
ELSE
    Cooling := FALSE;
END_IF;

여러 조건을 구분해야 한다면 ELSIF를 사용할 수 있습니다.

IF Temperature >= HighHighLimit THEN
    AlarmLevel := 2;
ELSIF Temperature >= HighLimit THEN
    AlarmLevel := 1;
ELSE
    AlarmLevel := 0;
END_IF;

이러한 구조는 아날로그 데이터의 범위를 판단하거나 운전상태에 따라 서로 다른 처리를 수행할 때 유용합니다.

CASE문은 언제 사용할까?

PLC에서 State Machine이나 Sequence Control을 작성할 때 Structured Text의 CASE문이 유용하게 사용될 수 있습니다.

예를 들어 현재 공정 Step을 숫자로 관리한다고 가정해 보겠습니다.

CASE Step OF

    0:
        MotorRun := FALSE;

    10:
        ClampForward := TRUE;

    20:
        ProcessMotor := TRUE;

    30:
        ClampForward := FALSE;

END_CASE;

현재 Step 값에 따라 해당하는 프로그램만 실행하는 구조입니다.

Step 전환조건도 함께 구성할 수 있습니다.

CASE Step OF

    0:
        IF StartButton THEN
            Step := 10;
        END_IF;

    10:
        ClampForward := TRUE;

        IF ClampForwardSensor THEN
            Step := 20;
        END_IF;

    20:
        ProcessMotor := TRUE;

        IF ProcessComplete THEN
            Step := 30;
        END_IF;

END_CASE;

이러한 방식은 여러 개의 상태나 공정단계를 관리하는 프로그램에서 활용할 수 있습니다.

특히 이전에 살펴본 State Machine과 Sequence Control을 ST로 구현할 때 CASE문을 활용하기 좋습니다.

FOR문은 어떤 경우에 사용할까?

Structured Text에서는 같은 작업을 여러 번 반복해야 할 때 반복문을 사용할 수 있습니다.

대표적인 것이 FOR문입니다.

예를 들어 Array에 저장된 10개의 데이터를 초기화한다고 가정해 보겠습니다.

FOR i := 0 TO 9 DO
    Data[i] := 0;
END_FOR;

Ladder에서 각각의 데이터를 하나씩 초기화한다면 비슷한 명령을 여러 번 작성해야 할 수 있지만 ST에서는 반복문으로 간결하게 처리할 수 있습니다.

Recipe 데이터를 검사하거나 여러 센서 데이터를 순차적으로 계산하는 작업에서도 반복문을 활용할 수 있습니다.

하지만 PLC에서 반복문을 사용할 때는 Scan Time을 반드시 고려해야 합니다.

FOR문이 한 번 실행되는 동안 매우 많은 반복작업을 수행하면 해당 Scan의 프로그램 실행시간이 증가할 수 있습니다.

특히 반복 횟수가 지나치게 많거나 반복문 내부에서 복잡한 계산을 수행하면 Watchdog Time에 영향을 줄 수도 있습니다.

따라서 반복문의 실행량이 PLC의 실시간 제어성에 어떤 영향을 주는지 확인하는 것이 중요합니다.

WHILE문을 사용할 때는 더 주의해야 한다

Structured Text에서는 조건이 TRUE인 동안 반복하는 WHILE 구조를 지원하는 환경도 있습니다.

개념적으로 다음과 같습니다.

WHILE Condition DO
    Calculation := Calculation + 1;
END_WHILE;

문제는 Condition이 계속 TRUE라면 반복문이 끝나지 않을 가능성이 있다는 것입니다.

PLC는 프로그램을 반복적으로 Scan해야 하는 장치이므로 하나의 Scan에서 반복문이 빠져나오지 못하면 정상적인 Scan Cycle을 진행하지 못할 수 있습니다.

결과적으로 Scan Time이 비정상적으로 증가하거나 CPU의 Watchdog 오류로 연결될 수 있습니다.

따라서 ST의 반복문은 일반적인 PC 프로그램과 동일한 감각으로 무제한 사용하기보다 PLC의 Scan 방식과 실행시간을 고려하여 작성해야 합니다.

Structured Text가 계산에 유리한 이유

ST의 장점이 크게 나타나는 영역이 수식과 데이터 처리입니다.

예를 들어 아날로그 센서의 Raw Data를 실제 Engineering Value로 변환해야 한다고 가정해 보겠습니다.

ST에서는 여러 연산을 하나의 계산식으로 표현할 수 있습니다.

EngineeringValue :=
    (RawValue - RawMin) *
    (EngMax - EngMin) /
    (RawMax - RawMin) +
    EngMin;

복잡한 수식을 Ladder로도 구현할 수 있지만 연산 단계가 많아지면 여러 명령 블록을 연결해야 할 수 있습니다.

ST에서는 계산식을 수학식과 비슷한 형태로 작성할 수 있기 때문에 복잡한 데이터 처리 프로그램을 읽고 수정하기 편리할 수 있습니다.

PID 주변 계산, 좌표 계산, 데이터 변환, 통계 처리, Recipe 데이터 처리 등에서도 ST가 유용하게 사용될 수 있습니다.

Array와 Structured Text를 함께 사용하면 편리하다

Array는 같은 데이터형의 여러 값을 하나의 변수 그룹으로 관리하는 방법입니다.

예를 들어 100개의 제품 데이터를 각각 별도의 변수로 만들기보다 Array로 관리할 수 있습니다.

ProductData[0]
ProductData[1]
ProductData[2]

ST에서는 반복문과 Array를 함께 사용하기 좋습니다.

예를 들어 여러 데이터의 합계를 계산한다면 다음과 같은 구조를 생각할 수 있습니다.

Total := 0;

FOR i := 0 TO 9 DO
    Total := Total + ProductData[i];
END_FOR;

이러한 특징 때문에 다수의 데이터를 처리하거나 Recipe, 검사결과, 측정데이터 등을 관리할 때 ST가 효과적일 수 있습니다.

단, Array의 인덱스가 허용범위를 벗어나지 않도록 관리해야 하며 실제 PLC의 배열 범위 처리방식도 확인해야 합니다.

Structured Text와 Ladder는 무엇이 다를까?

Structured Text와 Ladder Diagram은 서로 경쟁하는 언어라기보다 각각 잘 맞는 작업이 다른 PLC 프로그래밍 방식으로 이해하는 것이 좋습니다.

구분Structured TextLadder Diagram
표현방식텍스트 기반접점·Coil 기반
조건제어IF, CASE 등접점 논리
반복처리FOR 등 사용 가능상대적으로 복잡할 수 있음
수식 계산표현이 간결함연산이 많으면 복잡해질 수 있음
Array 처리유리함환경에 따라 불편할 수 있음
현장 모니터링코드 추적 필요접점 상태 확인이 직관적
State 처리CASE 활용 가능Step Bit 등으로 구현 가능

단순한 Motor Start/Stop이나 Interlock은 Ladder가 이해하기 쉬운 경우가 많습니다.

반대로 여러 수식을 처리하거나 Array를 반복적으로 계산해야 한다면 ST가 더 간결할 수 있습니다.

따라서 하나의 프로젝트에서 Ladder와 ST를 함께 사용하는 경우도 많습니다.

Ladder와 Structured Text를 함께 사용할 수 있을까?

PLC 개발환경에 따라 하나의 프로젝트에서 여러 IEC 61131-3 언어를 함께 사용할 수 있습니다.

예를 들어 기본적인 장치 Interlock과 I/O Logic은 Ladder로 작성하고 복잡한 계산과 데이터 처리는 Structured Text로 구성할 수 있습니다.

State Machine이나 Recipe 처리도 ST Function Block으로 구성한 뒤 Ladder에서 호출하는 방식으로 설계할 수 있습니다.

이렇게 하면 각 언어의 장점을 활용할 수 있습니다.

다만 어떤 PLC에서 어떤 언어를 지원하는지, 서로 다른 언어의 Program이나 Function Block을 어떤 방식으로 호출하는지는 제조사와 CPU에 따라 다릅니다.

ST로 State Machine을 만들 수 있을까?

Structured Text는 State Machine 구현에 적합한 언어 중 하나입니다.

CASE문을 이용하면 현재 State에 따라 프로그램을 명확하게 분리할 수 있기 때문입니다.

예를 들어 다음과 같이 구성할 수 있습니다.

CASE MachineState OF

    0:  (* Idle *)
        IF StartCommand THEN
            MachineState := 10;
        END_IF;

    10: (* Ready *)
        IF AllReady THEN
            MachineState := 20;
        END_IF;

    20: (* Running *)
        IF Fault THEN
            MachineState := 90;
        ELSIF ProcessComplete THEN
            MachineState := 30;
        END_IF;

    30: (* Complete *)
        IF ResetCommand THEN
            MachineState := 0;
        END_IF;

    90: (* Error *)
        IF FaultCleared AND ResetCommand THEN
            MachineState := 0;
        END_IF;

END_CASE;

이런 구조에서는 현재 설비가 어떤 State에 있고 어떤 조건으로 다른 State로 이동하는지 코드에서 비교적 명확하게 확인할 수 있습니다.

실제 프로그램에서는 Interlock, Entry 처리, Recovery, Timeout 등 추가적인 조건을 설비 특성에 맞게 구성해야 합니다.

Structured Text에서도 Scan Cycle을 이해해야 한다

ST가 일반적인 프로그래밍 언어와 비슷하게 보이더라도 실행되는 환경은 PLC입니다.

따라서 PLC의 Scan Cycle을 이해해야 합니다.

PLC는 일반적으로 입력 상태를 확인하고 사용자 프로그램을 실행한 뒤 출력과 시스템 처리를 수행하는 과정을 반복합니다. 정확한 처리순서와 I/O 갱신방식은 PLC 시스템에 따라 차이가 있습니다.

Structured Text 역시 PLC Task 또는 Program 안에서 실행된다면 해당 실행주기에 따라 반복적으로 수행됩니다.

예를 들어 다음 코드를 작성했다고 가정해 보겠습니다.

ProductCount := ProductCount + 1;

이 명령이 조건 없이 주기적으로 실행되는 프로그램 안에 있다면 프로그램이 실행될 때마다 ProductCount가 계속 증가할 수 있습니다.

따라서 센서가 ON될 때 한 번만 증가시키려면 Rising Edge와 같은 조건을 적용해야 합니다.

이처럼 ST에서도 한 줄의 코드가 언제, 몇 번 실행되는지를 항상 고려해야 합니다.

Structured Text를 사용할 때 주의할 점

Structured Text는 복잡한 프로그램을 간결하게 만들 수 있지만 코드가 짧다고 해서 반드시 좋은 프로그램인 것은 아닙니다.

하나의 IF문에 지나치게 많은 조건을 넣거나 여러 단계의 중첩문을 사용하면 프로그램을 읽기 어려워질 수 있습니다.

변수 이름도 중요합니다.

A, B, C와 같은 이름보다 MotorReady, ClampForwardSensor, HighTempAlarm처럼 의미를 파악할 수 있는 변수명을 사용하는 것이 유지보수에 유리합니다.

반복문에서는 실행 횟수를 관리해야 하고 Array를 사용할 때는 Index 범위를 확인해야 합니다.

나눗셈에서는 0으로 나누는 조건도 방지해야 하며 데이터형 변환 과정에서 값의 범위나 정밀도 문제가 발생하지 않는지도 확인해야 합니다.

특히 프로그램이 복잡해질수록 ST 코드를 기능별 Function이나 Function Block으로 분리하여 관리하는 방법을 고려할 수 있습니다.

Structured Text 핵심 정리

Structured Text는 텍스트 형태로 PLC 프로그램을 작성하는 IEC 61131-3 기반 프로그래밍 언어입니다.

Ladder Diagram이 접점과 Coil을 이용해 논리적인 제어를 시각적으로 표현한다면 ST에서는 IF, CASE, FOR 등의 구문과 수식을 이용하여 프로그램을 작성할 수 있습니다.

특히 복잡한 수학연산, Array 데이터 처리, Recipe 관리, State Machine, 데이터 변환 등의 프로그램에서 장점을 가질 수 있습니다.

하지만 일반적인 PC 프로그램과 달리 PLC에서는 Scan Cycle과 실시간 제어 특성을 함께 고려해야 합니다.

반복문이 지나치게 오래 실행되면 Scan Time이 증가할 수 있고 조건 없이 작성한 명령은 프로그램 실행주기마다 반복될 수 있습니다.

따라서 Structured Text를 잘 사용하려면 문법만 익히는 것이 아니라 PLC의 Scan 구조, 데이터형, Task 실행주기와 실제 설비의 동작방식까지 함께 이해하는 것이 중요합니다.

jssj2627

함께 보면 좋은 글

댓글 0

첫 댓글을 남겨보세요.

error: Content is protected !!

광고 차단 알림

광고 클릭 제한을 초과하여 광고가 차단되었습니다.

단시간에 반복적인 광고 클릭은 시스템에 의해 감지되며, IP가 수집되어 사이트 관리자가 확인 가능합니다.