PLC Code : PLC 프로그램 코드 (always_On) : 출력 1개를 항상 ON(TRUE)으로 만들어주는 테스트용 프로그램


always_On.st

PROGRAM program0
VAR
  Out0 : BOOL;
END_VAR

Out0 := TRUE;

END_PROGRAM

CONFIGURATION Config0
  RESOURCE Res0 ON PLC
    TASK MainTask(INTERVAL := T#50ms, PRIORITY := 0);
    PROGRAM MainInstance WITH MainTask : program0;
  END_RESOURCE
END_CONFIGURATION

단순하게 출력 1개를 항상 ON(TRUE)으로 만들어 "PLC가 정상 실행되고, Modebus로 읽히는지"를 확인하는 테스트용 프로그램입니다.

1) 프로그램(로직) 정의 파트

PROGRAM program0
program0라는 이름의 PLC 프로그램(로직 블록)을 시작합니다.

VAR
프로그램 내부에서 사용할 변수를 선언하겠다는 뜻입니다.

Out0 AT %QX0.0 : BOOL;
Out0라는 불린(ON/OFF) 변수를 만듭니다.
AT %QX0.0은 이 변수를 PLC 출력 메모리 주소(%QX0.0)에 "붙여서(Located)" 쓰겠다는 뜻입니다.
결과적으로 이 변수는 Modbus에서 코일(coil)로 읽히는 대상이 됩니다.

END_VAR
변수 선언을 끝냅니다.

Out0 := TRUE;
매 스캔마다 Out0를 항상 TRUE(ON)로 만듭니다.
그래서 코일 0이 계속 1(ON)로 유지되는 테스트가 됩니다.

END_PROGRAM
프로그램(로직) 블록을 끝냅니다.


2) 실행 환경(스케줄) 정의 파트

CONFIGURATION Config0
PLC 실행 구성(설정) 블록을 시작합니다. 이름은 Config0.
OpenPLC 런타임은 이 CONFIGURATION이 있어야 Config0.c/Res0.c 같은 파일을 만들 수 있어 컴파일/실행이 정상화됩니다.

RESOURCE Res0 ON PLC
Res0라는 “리소스(실행 단위)”를 PLC 위에 생성합니다.
쉽게 말해 “이 PLC에서 돌아가는 실행 컨테이너” 같은 개념입니다.

TASK MainTask(INTERVAL := T#50ms, PRIORITY := 0);
MainTask라는 주기 실행 작업을 정의합니다.
INTERVAL := T#50ms → 50ms마다 한 번 실행(초당 20번)
PRIORITY := 0 → 우선순위(일반적으로 숫자가 작을수록 높게 취급되는 환경이 많음)

PROGRAM MainInstance WITH MainTask : program0;
위에서 만든 program0 프로그램을 MainTask 주기에 맞춰 실행하도록 연결합니다.
MainInstance는 그 프로그램의 “실행 인스턴스 이름”입니다.

END_RESOURCE
리소스 정의 종료

END_CONFIGURATION
구성 정의 종료

이 파일을 실행하면 무엇이 일어나나?

PLC가 50ms마다 program0를 실행
그때마다 Out0 := TRUE;가 실행되므로 %QX0.0(코일 0로 매핑되는 경우가 많음)가 계속 ON
Node-RED에서 Coil 0을 읽으면 [true, ...]처럼 보이면 정상입니다.
Reactions

댓글 쓰기

0 댓글