IEC 61131-3 Reference
PLC 프로그래밍 표준 5개 언어(ST/LD/FBD/IL/SFC) 레퍼런스
IEC 61131-3 Reference 소개
IEC 61131-3 레퍼런스는 PLC 프로그래밍 언어 국제 표준에 대한 완전하고 검색 가능한 가이드입니다. 표준에서 정의한 5개 언어를 모두 다룹니다. 구조화 텍스트(ST)의 IF/ELSIF/THEN, CASE 상태 머신, FOR/WHILE 루프, 변수 선언(BOOL, INT, REAL, STRING, TIME), VAR_INPUT/VAR_OUTPUT 함수 블록, STRUCT/ARRAY 복합 데이터 타입을 포함하며, 모터 제어 상태 머신과 파라미터 기반 자동화 같은 실용적인 코드 예제를 제공합니다.
그래픽 프로그래밍 언어도 상세히 다룹니다. 래더 다이어그램(LD)의 NO/NC 접점(a접점, b접점), 상승/하강 엣지 감지(P/N 접점), 출력 코일, 세트/리셋 래치, 자기유지 회로, 타이머 연동을 포함합니다. 함수 블록 다이어그램(FBD)의 직렬, 병렬, 피드백 연결 패턴과 명령어 리스트(IL)의 연산자(LD, ST, AND, OR, ADD, CAL, JMP) 및 수정자(N 부정, C 조건부 실행, 괄호 그룹)도 수록합니다.
고급 주제도 포함합니다. 순차 기능 차트(SFC)의 스텝, 전이, 액션 한정자(N 비저장, P 펄스, S 세트, R 리셋, L 시간 제한, D 시간 지연), 선택 분기와 동시 분기 패턴을 다룹니다. IEC 61131-3 데이터 타입 계층(ANY 트리: ANY_BIT, ANY_NUM, ANY_STRING, ANY_DATE), 명시적 타입 변환 함수(*_TO_* 패턴), 표준 함수 블록(TON/TOF/TP 타이머, CTU/CTD/CTUD 카운터, R_TRIG/F_TRIG 엣지 감지, SR/RS 플립플롭), 스캔 주기 관리를 위한 PROGRAM/TASK 구성도 안내합니다.
주요 기능
- IF/CASE/FOR 구문, 변수 선언, 함수 블록 호출, STRUCT/ARRAY 타입을 포함한 구조화 텍스트(ST) 문법 레퍼런스
- NO/NC 접점, P/N 엣지 접점, 출력 코일, 세트/리셋 래치, 자기유지 회로를 다루는 래더 다이어그램(LD) 가이드
- AND/OR/TON 블록 예제와 함께 직렬, 병렬, 피드백 연결 패턴을 포함한 함수 블록 다이어그램(FBD)
- 스텝/전이 설계, 10개 액션 한정자(N, P, P0, S, R, L, D, SD, DS, SL), 선택/동시 분기를 포함한 순차 기능 차트(SFC)
- LD/ST/AND/OR/ADD/CAL/JMP 연산자와 N/C 수정자, 괄호 그룹을 포함한 명령어 리스트(IL)
- BOOL~LREAL, STRING/WSTRING, TIME/DATE/DT, ANY 제네릭 타입을 포함한 IEC 61131-3 데이터 타입 계층
- TON/TOF/TP 타이머, CTU/CTD/CTUD 카운터, R_TRIG/F_TRIG 엣지 감지, SR/RS 플립플롭 표준 함수 블록
- 스캔 주기 설정(예: T#10MS 메인 태스크, T#1MS 고속 모션 태스크)을 포함한 PROGRAM/TASK 구성
자주 묻는 질문
IEC 61131-3의 5가지 프로그래밍 언어는 무엇인가요?
IEC 61131-3은 5가지 프로그래밍 언어를 정의합니다. (1) 구조화 텍스트(ST) - Pascal/VB와 유사한 고수준 텍스트 언어, (2) 래더 다이어그램(LD) - 릴레이 회로 논리 기반 그래픽 언어, (3) 함수 블록 다이어그램(FBD) - 연결된 함수 블록을 사용하는 그래픽 언어, (4) 순차 기능 차트(SFC) - 상태 기반 순차 제어를 위한 그래픽 언어, (5) 명령어 리스트(IL) - 어셈블리와 유사한 저수준 텍스트 언어입니다. 현대 PLC 프로그래밍에서는 ST와 LD가 가장 널리 사용됩니다.
구조화 텍스트에서 상태 머신은 어떻게 구현하나요?
CASE 문과 정수 스텝 변수를 사용합니다. CASE nStep OF 0: (초기화, nStep := 10); 10: (시작 대기, IF bStart THEN nStep := 20); 20: (공정 실행); 100: (에러 처리); ELSE nStep := 0; END_CASE. 이 패턴은 ST에서 순차 자동화 로직의 표준 접근법으로, 명확한 상태 전이와 쉬운 디버깅을 제공합니다. 각 상태에서 함수 블록을 호출하고 출력을 설정할 수 있습니다.
TON, TOF, TP 타이머의 차이점은 무엇인가요?
TON(On-Delay)은 IN이 TRUE가 된 후 PT 경과 시 Q가 TRUE가 되며, IN이 FALSE가 되면 즉시 Q가 FALSE입니다. TOF(Off-Delay)는 IN이 TRUE가 되면 즉시 Q가 TRUE이고, IN이 FALSE가 된 후 PT 경과 시 Q가 FALSE가 됩니다. TP(Pulse)는 IN의 상승 엣지에서 PT 길이의 고정 펄스를 생성하며, 펄스 중 IN 변화는 무시합니다.
SFC 액션 한정자는 어떻게 작동하나요?
SFC 액션 한정자는 스텝 액션의 실행 조건을 결정합니다. N(Non-stored)은 스텝 활성 중 매 스캔 실행, P(Pulse)는 스텝 진입 시 1회 실행, P0는 스텝 종료 시 1회 실행, S(Set)는 스텝 비활성 후에도 유지, R(Reset)은 이전에 세트된 액션 해제, L(time-Limited)은 지정 시간 동안 활성, D(time-Delayed)는 지연 후 활성, SD(Stored+Delayed), DS(Delayed+Stored), SL(Stored+time-Limited)입니다.
IEC 61131-3의 ANY 타입 계층은 어떻게 구성되나요?
ANY는 함수 오버로딩에 사용되는 제네릭 타입 계층의 루트입니다. ANY_BIT에는 BOOL, BYTE, WORD, DWORD, LWORD가 포함됩니다. ANY_NUM은 ANY_INT(SINT, INT, DINT, LINT 및 부호없는 USINT, UINT, UDINT, ULINT)와 ANY_REAL(32비트 IEEE 754 REAL, 64비트 LREAL)로 나뉩니다. ANY_STRING은 STRING과 WSTRING, ANY_DATE는 DATE, TOD, DT, ANY_DURATION은 TIME을 포함합니다. 암시적 타입 변환이 없으므로 INT_TO_REAL() 같은 명시적 *_TO_* 함수를 사용해야 합니다.
구조화 텍스트에서 함수 블록을 어떻게 선언하고 사용하나요?
FUNCTION_BLOCK FB_Name으로 선언한 후 VAR_INPUT, VAR_OUTPUT, 내부 VAR 섹션을 정의합니다. 인스턴스를 선언(VAR fbValve1 : FB_Valve; END_VAR)한 후 fbValve1(bOpen := TRUE)로 호출합니다. 출력은 점 표기법으로 접근합니다: IF fbValve1.bOpened THEN ... END_IF. 함수 블록은 스캔 사이클 간 상태를 유지하지만, FUNCTION은 영구 상태 없이 단일 값만 반환합니다.
SR과 RS 플립플롭의 차이점은 무엇이고 언제 사용하나요?
SR(Set 우선)은 SET1과 RESET이 동시에 TRUE이면 Q1이 TRUE입니다. RS(Reset 우선)은 SET과 RESET1이 동시에 TRUE이면 Q1이 FALSE입니다. RS(Reset 우선)는 비상정지처럼 리셋/정지 조건이 항상 우선해야 하는 안전 관련 애플리케이션에 사용합니다. SR(Set 우선)은 운전/시작 조건이 유지되어야 하는 자기유지 회로에 사용합니다.
PROGRAM과 TASK 할당은 어떻게 구성하나요?
PROGRAM은 메인 실행 로직을 포함하는 최상위 POU(Program Organization Unit)입니다. TASK는 실행 스케줄을 정의합니다. TASK Main_Task(INTERVAL := T#10MS); PROGRAM Main WITH Main_Task로 프로그램을 태스크에 할당합니다. 시간 민감 작업에는 별도의 고속 태스크를 생성합니다: TASK Fast_Task(INTERVAL := T#1MS); PROGRAM Motion WITH Fast_Task. 이렇게 하면 일반 로직에 10ms, 모션 제어에 1ms 같이 제어 루프별로 다른 스캔 주기를 설정할 수 있습니다.