상품

변수를 이용한 프로그래밍을 수행하려면 어떻게 해야 합니까?

등록일
2025. 12. 17.

변수를 이용한 프로그래밍을 수행하려면 어떻게 해야 합니까?



PLC(프로그래머블 로직 컨트롤러: Programmable Logic Controller)에서 변수를 이용한 프로그래밍을 수행할 경우, 해당 애플리케이션 개발의 효율화를 목적으로 제정된 「IEC 61131-3 *1」이라는 프로그래밍 언어 국제 규격이 있으므로, 이에 준거한 PLC 프로그래밍 언어로 애플리케이션 개발을 수행하는 것을 권장합니다.
*1 IEC 61131-3에 관한 자세한 정보는여기를 참조하십시오.

이 규격에서는 다음 5가지 언어가 정의되어 있지만, 어느 언어로든 "변수"를 사용하여 프로그래밍합니다.
①LD(래더 다이어그램: Ladder Diagram)
②FBD(기능 블록 다이어그램: Function Block Diagram)
③SFC(순차 기능 차트: Sequential Function Chart)
④IL(명령어 리스트: Instruction List)
⑤ST(구조화된 텍스트: Structured Text)

변수란 데이터를 저장하는 용기(메모리)에 붙이는 이름입니다.
기존 프로그래밍 도구에서는 용기의 이름을 '주소'라고 하며, 주소에 부속된 정보로 '주석'을 달았습니다. IEC 61131-3에서는 먼저 '변수'가 있고, 그 속성으로 '주석'이나 '데이터형' 등을 정의합니다. 그리고 그 속성 중 하나로, 외부 입출력 등 절대 주소가 필요한 경우를 위해 '할당 대상(주소)'도 정의할 수 있게 되어 있습니다.

■변수 프로그래밍의 장점
기존 프로그래밍 도구에서는 PLC 제조사마다 고유한 주소가 지정되어 있어, 제조사 변경은 물론 개조나 기종 변경 시에도 주소 관리에 주의와 노력이 필요했습니다 .
반면 IEC 61131-3에서는 외부 기기에 연결되는 입출력 신호 외에는 주소를 할당할 필요가 없습니다. 이로 인해 실적이 있는 프로그램을 재사용할 때도 변수 변경이 불필요합니다.
제조사를 변경하는 경우에도 IEC 611131-3 준거 PLC 간에는 외부 입출력 차이 등에 주의할 필요는 있지만, 기존 PLC에 비해 이식이 용이해집니다.
또한 이해하기 쉬운 변수명을 부여함으로써 프로그램의 '가독성'도 향상됩니다.
사내에서 변수 명명 규칙을 정해두면 동시 개발(분업)도 용이해집니다.
PC 등의 주변 기기에서의 접근도 변수를 지정하여 읽고 쓰는 방식으로, 설비 하드웨어 변경에 따른 주변 기기의 애플리케이션 프로그램 개조가 필요 없어집니다.

■NJ/NX 시리즈의 변수 프로그래밍 방법
여기서는 IEC 61131-3 프로그래밍 언어 중 사용 빈도가 높은 ①LD와 ⑤ST를 지원하는 NJ/NX 시리즈 컨트롤러를 예로 들어 그 변수 프로그래밍 방법을 소개합니다.
NJ/NX 시리즈 컨트롤러의 프로그래밍은 Sysmac Studio라는 Windows 소프트웨어를 사용합니다.
머신 오토메이션 컨트롤러 NJ/NX 시리즈에 대해서는 여기를 참조하십시오.

●변수의 종류와 속성
<글로벌 변수 정의와 외부 변수>
「글로벌 변수」란 모든 프로그램(후술하는 「프로그램 구성 요소와 실행 단위」 항목 참조)에서 접근 가능한 변수로, 각 프로그램에서 접근할 경우 프로그램별로 「외부 변수」라 불리는 로컬 변수를 통해 접근합니다.
글로벌 변수를 글로벌 변수 테이블에서 정의하고 각 프로그램 내에서 글로벌 변수명을 기술하면 자동으로 외부 변수로 등록됩니다.
(표1)은 NJ/NX 시리즈 컨트롤러의 글로벌 변수 정의 개요를 예시한 것입니다.

(표1) NJ/NX 컨트롤러의 변수 정의 예시
메모리 종류
변수의 주요 속성
명칭 *2 데이터 유형 코멘트 할당 대상(주소)
유지 속성 없음

기존 내부 보조 릴레이 등에 해당
OpReady BOOL 운전 준비 없음(내부 메모리에 자동 할당)
AirFlow DWORD 풍량 없음(내부 메모리에 자동 할당)
OpDay DATE 운전일 없음(내부 메모리에 자동 할당)
유지 속성 있음

기존의 유지 릴레이,
데이터 메모리 등에 해당
TotalTime TIME 누적 운전 시간 없음(내부 메모리에 자동 할당)
디지털 입력 DI_StartFun BOOL 팬 시작 IOBus://unit#1/Input Bit 00
*3
디지털 출력 DO_FunMotor BOOL 팬 모터 IOBus://unit#2/Output Bit 00
*3
아날로그 출력 AO_AirFlow INT 풍량 출력 IOBus://unit#3/Ch1 Analog Output Value ※3
*2 변수 이름은 알파벳 외에도 시스템에서 사용하지 않는 "_: 언더바" 등의 기호나 가타카나·히라가나·한자 등도 사용할 수 있습니다.
*3 외부 입출력에 할당한 변수를 특히 디바이스 변수라고 부르며, I/O 맵 화면에서 외부 입출력과 연결하여 정의합니다. 연결된 각 디바이스 변수는 변수 테이블의 "할당 대상" 속성에 다음과 같이 URI 형식으로 표기됩니다.
・EtherCAT 슬레이브 디바이스 변수: ECAT://node#[노드 번호]/ [I/O 포트명]
・CPU 랙 상의 NX 유닛(NX 버스) 디바이스 변수: IOBus://unit#[NX 유닛 번호]/I/O 포트명
・EtherCAT 슬레이브 터미널 상의 NX 유닛(NX 버스) 디바이스 변수: ECAT://node#[EtherCAT 커플러 노드 주소, NX 유닛 번호]/I/O 포트 이름
・NJ의 CJ 유닛(CJ 버스) 디바이스 변수: IOBus://rack#[랙 번호]/slot#[슬롯 번호]/[I/O 포트 이름]

또한 NJ/NX 시리즈 컨트롤러에서는 주소로 관리하던 기존 기종 CJ 시리즈 PLC 등과의 호환성을 확보하기 위해 별도로 CJ 유닛 메모리라는 I/O 메모리를 탑재하고 있습니다. 예를 들어 10채널의 5비트째(10.5)라면 "%10.5",데이터 메모리의 100번째 채널(D100)은 "%D100"과 같이 기존 I/O 메모리 주소에 "%"를 붙여 CJ 유닛 메모리의 주소를 정의할 수 있습니다.
또한, EtherNet/IP 상의 컨트롤러나 디바이스와 태그 데이터 링크를 할 때의 변수 정의는 위와 같이 "%"를 붙여 CJ 유닛 메모리에 할당된 I/O 메모리로 링크를 설정하거나, 변수 속성의 "네트워크 공개" 속성에서 "입력(수신 측)" 또는 "출력(송신 측)"을 추가하여 변수를 정의합니다.

<로컬
변수
정의와 내부 변수>
"로컬 변수"란 동일 프로그램 내에서만 접근 가능한 변수로, 프로그램 내에서 사용할 경우 "내부 변수"라고 부릅니다.
프로그램 내에서 변수명을 기술하면, 글로벌 변수명과 동일한 경우 우선적으로 외부 변수로 등록되며, 글로벌 변수명과 다른 경우 자동으로 내부 변수로 등록됩니다.

●프로그램 구성 요소와 실행 단위
IEC 61131-3에서는 사용자 프로그램을 구성하는 기본 요소를 POU(프로그램 구성 요소: Program Organization Unit)라고 부르며, 아래에 제시된 「프로그램」「기능 블록」「기능」의 3가지 유형이 있습니다.
POU는 이 3가지 요소를 조합하여 구성합니다.
또한 POU는 여러 개 생성할 수 있습니다.
생성한 사용자 프로그램은 실행 조건과 실행 순서를 지정하는 "태스크"라는 실행 단위에 할당하여 실행합니다.

・프로그램
메인 루틴에 해당하는, 알고리즘을 기술하는 주요 요소입니다.
알고리즘에는 모든 명령어, 기능, 기능 블록을 기술할 수 있습니다.
・함수 블록(이하 'FB'로 약칭)
FB는 문자 그대로 '기능을 가진 상자'로, 미리 준비된 타이머나 카운터 등의 단순 기능 FB형 명령은 물론, 실적이 있는 프로그램을 재사용하기 위해 사용자가 직접 제작하여 프로그램을 캡슐화(부품화)할 수 있는 요소입니다.
내부 상태를 가질 수 있으므로, 입력 값이 같아도 다른 값의 출력을 할 수 있습니다.
FB는 미리 작성한 「FB 정의」와 이를 실제 프로그램에서 사용하기 위한 「인스턴스」로 구성됩니다.
FB 정의에는 FB 내에서 사용 가능한 로컬 변수(내부 변수·외부 변수·입력 변수·출력 변수·입출력 변수)와 알고리즘을 기술합니다.
FB는 프로그램 또는 다른 FB로부터 호출됨으로써 실행됩니다.
・함수(이하 'FUN'으로 약칭)
사칙 연산이나 형 변환 등 미리 준비된 내부 상태를 가지지 않는 FUN형 명령과, 실적이 있는 상태에 의존하지 않는 프로그램을 재사용하기 위해 사용자가 직접 작성하는 FUN이 있으며, 둘 다 입력 값이 같으면 항상 동일한 값을 출력하는 요소입니다.
FUN은 프로그램, FB 또는 FUN에서 호출됨으로써 실행됩니다.

●변수 프로그래밍 예시
CX-Programmer를 통한 CS/CJ 시리즈 PLC 프로그래밍에서도 변수 프로그래밍은 가능했으나, 앞서 언급한 바와 같이 변수를 정의하더라도 모든 변수에 반드시 I/O 메모리 주소 할당이 필요했습니다.
또한 데이터 유형이 표준 규격과 일부 달랐거나, 래더 기술이 당사의 기존 명령어 및 기술 방식을 계승했기 때문에 IEC 표준 기술에 부합하지 않는 부분이 있었습니다.

여기서는 해당 FAQ에 게재된 CX-Programmer를 이용한 CS/CJ 시리즈 PLC 프로그램을 예로 들어, Sysmac Studio를 이용한 NJ/NX 시리즈 컨트롤러의 프로그래밍 방법을 비교하며 설명합니다. 아래 내용은 해당 FAQ와 비교하며 확인해 주시기 바랍니다.

(1) 변수
등록
그대로는 CS/CJ 시리즈 PLC처럼 채널과 비트 양쪽에서 접근할 수 없으므로, 멀티 뷰 탐색기의 '데이터형' 화면에서 비트와 더블워드 양쪽에서 접근 가능한 공용체*4 데이터형을 생성합니다.
또한, 비트 형식은 BOOL 형 데이터의 32개 배열로 합니다. (그림 1의 ①)
새로 만든 파생 데이터 형식 Flgs를 사용하여 BzFgs라는 공용체 형 변수와 기타 기본 데이터 형 변수를 글로벌 변수 테이블에서 생성합니다. (그림 1의 ②)
변수 중 외부 신호와 연결되는 변수에 대해서는 멀티뷰 익스플로러의 "CPU·확장 랙" 화면에서 유닛 구성 생성, 그리고 "I/O 맵" 화면에서 각 유닛의 포트와 변수를 연결합니다. (그림 1의 ③)

*4 미리 준비된
기본 데이터형 외에도 사용자가 새로 생성할 수 있는 파생 데이터형이 있으며, 공용체나 구조체는 이러한 파생 데이터형에 분류됩니다.
공용체 형식은 동일한 데이터에 대해 여러 개의 서로 다른 데이터 형식으로 접근할 수 있도록 한 것이지만, 접근 가능한 기본 데이터 형식으로는 BOOL 형식과 비트열 형식(BYTE, WORD, DWORD, LWORD)의 단일체 또는 배열만 가능합니다.
CS/CJ 시리즈 PLC 등에서 채널과 비트로 모두 접근하던 프로그램을 NJ/NX 시리즈로 교체할 경우, 이 공용체 형식의 변수로 등록하는 것이 편리합니다.
図1.Sysmac Studio による変数の登録
그림 1. Sysmac Studio를 통한 변수 등록

(2) 회로 입력
등록한 변수를 사용하여 래더 회로를 입력합니다.
입력 단축키는 CX-Programmer 클래식 모드와 거의 동일합니다.
프로그래밍 방법은 관련 FAQ 및 관련 정보 e-러닝을 참조하십시오.

<주소 오프셋 방식의 기술 예>
배열 변수에 ptr이라는 포인터 변수를 인덱스로 접근하는 「①주소 오프셋 방식」의 회로를 그림 2에 나타냅니다.
Sysmac Studio에서는 CX-Programmer와 달리, 4회로처럼 FB나 FUN 명령을 직렬로 기술할 수 있습니다.
図2.ノンロックイン・アナンシェータのラダー回路(①アドレスオフセット方式)
그림 2. 논록인 아나운서 래더 회로(① 주소 오프셋 방식)
Sysmac Studio에서는 CX-Programmer와 마찬가지로 ST 언어만으로 프로그램을 작성할 수도 있지만, 여기서는 CX-Programmer에는 없는 기능으로 래더 회로의 하나로 ST 언어 블록(인라인 ST라고 부름)을 작성하는 기능(그림 3의 3회로)에 대해 소개합니다.
또한, 그림 3의 회로는 그림 2의 회로 중 3, 4회로를 ST 언어로 대체한 것으로, 그림 2의 회로와 동등합니다.
이처럼 인라인 ST 명령어를 사용함으로써, 조건 분기나 반복 처리, 산술 연산 처리 등 ST 언어 기술에 적합한 처리를 래더 프로그램 내에 혼재하여 기술할 수 있습니다.
図3.ノンロックイン・アナンシェータのラダー回路(①アドレスオフセット方式)の一部をST言語で記述
그림 3. 논록인 아나운서 래더 회로(① 주소 오프셋 방식)의 일부를 ST 언어로 기술

<기능 블록 방식의 기술 예>
애너시어터 회로를 FB화하여 애너시어터 개수만큼 FB 인스턴스를 나열하여 기술하는 기능 블록 방식의 기술 예를 그림 4에 나타냅니다.
図4.ノンロックイン・アナンシェータのラダー回路(②ファンクションブロック方式)の回路 (図では長くなるので、ファンクションブロックインスタンスを2回路のみ記述)
그림 4. 논록인 아나운서터 래더 회로(② 기능 블록 방식)의 회로
(그림이 길어지므로 기능 블록 인스턴스를 2회로만 기술)


아나운서터의 기능 블록 정의를 그림 5에 나타냅니다.
주소를 가지지 않는 내부 변수와 입력 변수 및 출력 변수, 그리고 이를 사용하여 작성한 래더 회로로 정의합니다.
그림 5의 회로와 그림 2나 그림 3의 반복 및 전체 장치 판정 부분 회로를 제외한 회로 0~2회로까지를 비교해 보면, 모두 동일한 형태의 회로임을 알 수 있습니다.
즉, FB 정의에는 하나의 아나운서 장치 회로를 작성하는 요령으로 기술하기만 하면 됩니다.
동일한 기능이지만 다른 배선의 장치가 여러 개 있는 경우, 주소를 가지지 않는 하나의 기능 장치를 기능 블록 정의(그림 5)에 기술하고, 이를 메인 회로(그림 4)에 인스턴스로 붙여넣음으로써 여러 개의 서로 다른 배선(주소)을 가진 장치를 간단히 복제할 수 있습니다.
이는 안넨셔터 회로뿐만 아니라, 여러 장치와 통신하는 프로그램 등도 마찬가지로 하나의 통신 프로그램을 작성하면 인스턴스로 간단히 복제할 수 있음을 의미합니다.


図5.ノンロックイン・アナンシェータのラダー回路(②ファンクションブロック方式)のFB定義
그림 5. 논록인 아나운서터의 래더 회로(② 기능 블록 방식)의 FB 정의
(하나의 아나운서터 회로를 작성할 때와 동일한 형태의 회로가 됨)

(3) 회로 디버
깅
작성한 프로그램은 프로그램 체크와 빌드를 수행하여 오류가 없음을 확인한 후, 오프라인 시뮬레이션이나 온라인 실기 프로그램 전송 및 회로 디버깅을 수행합니다.
회로 디버깅에서는 ① 주소 오프셋 방식의 경우 각 신호의 주소가 매 사이클마다 지속적으로 변화하므로 래더 모니터로 간단히 디버깅할 수 없습니다. 그러나 ② 기능 블록 방식의 경우 1개의 장치가 1개의 FB 인스턴스에 대응하며 1개 신호의 주소가 고정되어 있으므로, 그림 6과 같이 1개의 장치를 디버깅할 때 1개의 FB 인스턴스의 입출력 신호 상태를 확인하면서 래더 모니터만으로 시각적으로 디버깅할 수 있습니다.
이는 트러블슈팅 시에도 효과적이며, 문제가 발생한 지점을 즉시 확인할 수 있음을 의미합니다.

図6.ノンロックイン・アナンシェータのラダー回路(②ファンクションブロック方式)のモニタ画面
그림 6. 논록인 아나운서 래더 회로(② 기능 블록 방식) 모니터 화면

간단하지만, Sysmac Studio를 사용한 NJ/NX 시리즈 컨트롤러의 변수 프로그래밍 개요를 논록인 아나운서 회로를 예로 들어 소개했습니다.

한편, NJ/NX 시리즈 컨트롤러 프로그래밍에 관한 상세 내용은 「 머신 오토메이션 컨트롤러 NJ/NX 시리즈 CPU 유닛 사용자 매뉴얼 소프트웨어 편(SBCA-467) 」, 「 오토메이션 소프트웨어 Sysmac Studio Version1 오퍼레이션 매뉴얼 SYSMAC-SE2□□□(SBCA-470) 」을 참조하십시오.
또한 IEC 프로그래밍에 관한 자세한 내용은 「 머신 오토메이션 컨트롤러 기술 도입 가이드 IEC 프로그래밍 편(SBCA-405) 」을 참조하십시오.
매뉴얼 다운로드는 무료 회원 가입 및 로그인이 필요합니다.