PLC & Industrial Automation Field Notes

Practical solutions for industrial automation


[실무] MOV·BMOV·FMOV로 래더 줄이는 방법

PLC 명령어는 종류가 많지만, 실제 현장에서 반복적으로 사용하는 명령어는 어느 정도 정해져 있습니다. 그중에서도 MOV, BMOV, FMOV는 데이터 처리 로직에서 가장 자주 사용하는 기본 명령어입니다. 값을 옮기고, 여러 데이터를 묶어서 복사하고, 특정 영역을 한 번에 초기화하는 구조를 이해하면 래더가 길어지는 문제를 줄일 수 있습니다.

데이터 명령어를 먼저 이해해야 하는 이유

PLC 로직이 복잡해지는 원인은 어려운 명령어를 몰라서만은 아닙니다. 기본 데이터 명령어를 적절히 쓰지 못해 같은 동작을 반복 접점과 반복 MOV로 길게 작성하는 경우가 많습니다.

예를 들어 다음과 같은 상황에서 데이터 명령어가 필요합니다.

상황필요한 처리
HMI에서 입력한 값을 PLC 내부 설정값으로 저장MOV
모델별 레시피를 한 번에 불러오기BMOV
리셋 시 여러 D 영역을 0으로 초기화FMOV
생산 수량 또는 위치값 비교비교 명령
누적값 증가 또는 남은 수량 계산산술 연산

본 글은 미쓰비시 MELSEC Q/R 시리즈 및 GX Works2/3 기준의 일반적인 내용을 바탕으로 작성했습니다. 실제 명령어 지원 범위, 16비트·32비트 처리 방식, 디바이스 사용 가능 범위는 CPU 모델과 프로젝트 설정에 따라 달라질 수 있으므로 적용 전 매뉴얼을 확인해야 합니다.

MOV는 데이터 전송의 기본이다

MOV는 특정 값을 다른 디바이스로 옮기는 명령어입니다. 상수값을 D 영역에 저장하거나, D 영역의 값을 다른 D 영역으로 복사할 때 사용합니다.

예를 들어 MOV K100 D0은 K100 값을 D0에 저장하는 형태입니다.

MOV는 다음과 같은 상황에서 자주 사용됩니다.

사용 예설명
HMI 입력값 저장터치스크린에서 입력한 값을 PLC 내부 파라미터로 전달
모델 번호 저장현재 선택된 기종 번호를 D 영역에 저장
설정값 복사운전 조건에 따라 기준값을 다른 영역으로 복사
현재값 백업운전 중인 값을 특정 시점에 보관

MOV는 데이터 처리의 기본입니다. 값 이동이 필요할 때는 먼저 MOV로 처리할 수 있는 구조인지 확인하는 것이 좋습니다.

MOV를 사용할 때 확인할 점

MOV는 단순한 명령어처럼 보이지만, 데이터 크기를 확인하지 않으면 값이 깨지거나 음수처럼 보일 수 있습니다.

일반 MOV는 16비트 데이터를 기준으로 사용하는 경우가 많습니다. 큰 수치, 엔코더 누적값, 긴 거리 위치값, 장기간 생산 누적값처럼 16비트 범위를 넘을 수 있는 데이터는 32비트 명령어 사용 여부를 확인해야 합니다.

예를 들어 32비트 데이터를 다룰 때는 DMOV 같은 더블워드 명령어를 검토해야 합니다. 이동을 32비트로 했다면 비교나 연산도 32비트 기준으로 맞춰야 합니다.

구분확인 기준
16비트 데이터일반 설정값, 짧은 범위의 수치
32비트 데이터누적 생산량, 엔코더 값, 큰 위치값
부호 있는 값음수 표시 가능성 확인
부호 없는 값표시 범위와 비교 조건 확인

데이터가 이상하게 표시될 때는 명령어 자체보다 데이터 크기와 해석 방식이 맞는지 먼저 확인해야 합니다.

비교 명령은 워드 데이터를 조건으로 바꾸는 역할을 한다

비교 명령은 D 값이나 상수값을 비교해 조건이 맞을 때 로직을 실행하는 명령어입니다.

예를 들어 = D0 K10은 D0 값이 10일 때 조건이 성립하는 형태입니다.

비교 명령은 비트 접점처럼 보이지만, 실제로는 워드 데이터를 기준으로 조건을 만드는 역할을 합니다.

현장에서는 다음과 같은 용도로 자주 사용됩니다.

사용 예설명
목표 수량 도달 확인현재 생산 수량이 목표값 이상인지 판단
온도 조건 판단현재 온도가 설정 범위에 들어왔는지 확인
위치 도달 확인서보 현재 위치가 목표 위치에 도달했는지 판단
모델 번호 분기선택된 모델 번호에 따라 로직 분기

비교 명령도 데이터 크기를 맞춰야 합니다. 32비트로 저장된 값을 비교할 때 16비트 비교를 사용하면 조건이 맞지 않는 문제가 생길 수 있습니다. 큰 값은 D=, D>, D< 같은 더블워드 비교 명령 사용 여부를 확인해야 합니다.

산술 연산은 데이터를 가공할 때 사용한다

산술 연산은 데이터를 더하거나 빼고, 필요에 따라 곱하거나 나누는 명령입니다. 생산 수량 누적, 남은 수량 계산, 보정값 적용, 위치 오프셋 계산에 자주 사용됩니다.

예를 들어 + D0 K1 D0은 D0 값에 1을 더해 다시 D0에 저장하는 형태입니다.

산술 연산은 다음과 같은 상황에서 사용됩니다.

사용 예설명
생산 카운트 증가제품 통과 시 현재 수량 증가
남은 수량 계산목표 수량에서 현재 수량을 빼서 표시
위치 보정기준 위치에 보정값을 더해 목표 위치 계산
검사값 보정센서값에 오프셋을 적용

단순히 1씩 증가시키는 목적이라면 INCP 같은 증가 명령어가 더 직관적인 경우도 있습니다. 다만 설비 구조에 따라 기본 산술 연산이 더 적합한 경우도 있으므로 목적에 맞게 선택해야 합니다.

연산도 데이터 크기를 확인해야 합니다. 누적 생산량이나 위치값처럼 범위가 큰 데이터는 D+, D-, DMUL, DDIV 같은 32비트 연산이 필요한지 검토해야 합니다.

FMOV는 같은 값을 여러 영역에 채울 때 사용한다

FMOV는 Fill Move의 의미로, 같은 값을 연속된 디바이스 영역에 한 번에 채우는 명령어입니다.

예를 들어 FMOV K0 D0 K10은 D0부터 D9까지 10개 영역에 모두 0을 넣는 형태입니다.

FMOV는 주로 초기화에 사용됩니다.

사용 예설명
설비 리셋여러 데이터 영역을 한 번에 0으로 초기화
알람 데이터 정리알람 표시용 D 영역 초기화
임시 연산 영역 초기화자동 운전 시작 전 임시값 정리
HMI 표시값 정리화면에 남은 이전 데이터 제거

FMOV를 사용하지 않으면 같은 초기화 로직을 여러 줄 작성해야 합니다. 초기화 대상이 많을수록 FMOV를 사용하는 편이 로직이 짧고 관리하기 쉽습니다.

FMOV 사용 시 주의할 점

FMOV는 지정한 범위에 같은 값을 모두 써 넣습니다. 따라서 범위를 잘못 지정하면 필요한 데이터까지 같이 지워질 수 있습니다.

예를 들어 D0부터 D99까지 임시 데이터 영역으로 정해 둔 경우에는 FMOV K0 D0 K100처럼 한 번에 초기화할 수 있습니다. 하지만 그 중간에 모델 설정값이나 생산 누적값이 섞여 있다면 FMOV 한 번으로 중요한 값까지 초기화될 수 있습니다.

FMOV를 사용할 때는 다음 항목을 확인해야 합니다.

확인 항목설명
시작 주소초기화할 첫 주소가 맞는지 확인
개수 K값몇 개의 워드를 초기화할지 확인
중간 주소 용도범위 안에 다른 용도 데이터가 없는지 확인
래치 데이터 포함 여부유지해야 할 값이 포함되지 않았는지 확인
실행 조건매 스캔 실행되는지, 특정 조건에서만 실행되는지 확인

초기화 명령은 편리하지만, 잘못 쓰면 데이터가 사라지는 원인이 됩니다. 특히 전원 투입 시 초기화, 모델 변경 시 초기화, 알람 리셋 시 초기화는 각각 범위를 다르게 잡는 것이 안전합니다.

BMOV는 연속된 데이터를 묶어서 복사한다

BMOV는 Block Move의 의미로, 연속된 여러 데이터를 한 번에 복사하는 명령어입니다.

예를 들어 BMOV D0 D20 K3은 D0부터 D2까지의 값을 D20부터 D22까지 한 번에 복사하는 형태입니다.

BMOV는 레시피 데이터, 모델별 설정값, 위치 데이터 묶음처럼 연속된 데이터를 통째로 이동할 때 유용합니다.

사용 예설명
레시피 불러오기모델별 설정값 묶음을 현재 운전 영역으로 복사
위치 데이터 이동여러 축의 위치값을 한 번에 복사
설정값 백업현재 설정값을 백업 영역으로 저장
패턴 데이터 적용제품별 패턴 데이터를 운전 영역으로 이동

데이터가 1개라면 MOV를 사용하고, 연속된 여러 개의 데이터라면 BMOV를 검토하는 것이 일반적입니다.

BMOV를 사용할 때 가장 중요한 조건

BMOV는 연속된 주소를 통째로 복사합니다. 따라서 복사 대상 영역이 실제로 하나의 묶음인지 반드시 확인해야 합니다.

예를 들어 D100부터 D119까지가 모델 1번 레시피이고, D200부터 D219까지가 현재 운전 영역이라면 BMOV로 복사하기 좋습니다. 하지만 D100부터 D119 중간에 알람 이력, 수동 설정값, 임시 계산값이 섞여 있다면 BMOV를 사용하면 안 됩니다.

BMOV 사용 전에는 다음 항목을 확인해야 합니다.

확인 항목설명
원본 시작 주소복사할 데이터의 시작 위치가 맞는지 확인
목적지 시작 주소덮어쓸 영역이 맞는지 확인
복사 개수K값이 실제 데이터 개수와 일치하는지 확인
중간 주소 용도블록 안에 다른 용도 데이터가 없는지 확인
데이터 크기16비트·32비트 구조가 섞여 있지 않은지 확인
실행 조건모델 변경 시 한 번만 실행되는지 확인

BMOV는 MOV 여러 줄을 줄일 수 있는 좋은 명령어지만, 범위가 잘못되면 여러 값을 한 번에 덮어씁니다. 따라서 메모리 맵이 정리되어 있지 않은 상태에서는 신중하게 사용해야 합니다.

MOV와 BMOV를 구분하는 기준

MOV와 BMOV는 모두 데이터를 옮기는 명령어지만 목적이 다릅니다.

구분MOVBMOV
이동 단위1개 데이터연속된 여러 데이터
주요 용도설정값 1개 저장, 값 복사레시피, 패턴, 설정값 묶음 복사
장점단순하고 명확함로직을 크게 줄일 수 있음
주의점반복 사용 시 로직이 길어짐범위 오류 시 여러 데이터가 한 번에 덮임

기준은 간단합니다. 하나의 값만 옮기면 MOV를 사용하고, 연속된 데이터 묶음을 옮기면 BMOV를 사용합니다.

다만 BMOV를 쓰기 위해 억지로 데이터 구조를 맞추기보다, 처음부터 레시피나 설정값 영역을 연속 주소로 설계하는 것이 좋습니다.

16비트와 32비트 명령어를 맞춰야 한다

데이터 명령어에서 가장 자주 발생하는 문제 중 하나가 16비트와 32비트 혼용입니다.

일반적으로 D가 붙은 명령어는 더블워드, 즉 32비트 처리를 의미하는 경우가 많습니다. 예를 들어 DMOV, D+, D= 같은 명령어는 32비트 데이터를 처리할 때 사용합니다.

문제는 이동, 비교, 연산의 데이터 크기가 서로 다를 때 발생합니다.

예를 들어 위치값을 DMOV로 32비트 복사해 놓고, 비교는 일반 = 명령으로 16비트만 비교하면 값은 들어가 있는데 조건이 맞지 않는 상황이 생길 수 있습니다.

다음 기준을 기억하는 것이 좋습니다.

데이터 처리16비트 예32비트 예
이동MOVDMOV
비교=, >, <D=, D>, D<
덧셈+D+
뺄셈D-
곱셈*DMUL
나눗셈/DDIV

큰 값을 다루는 경우에는 이동만 32비트로 맞추는 것이 아니라 비교와 연산도 32비트 기준으로 맞춰야 합니다.

데이터 명령어 사용 전 점검할 항목

MOV, BMOV, FMOV는 기본 명령어지만 잘못 사용하면 원인 파악이 어려운 문제가 생깁니다. 로직을 작성하거나 수정할 때는 다음 항목을 확인하는 것이 좋습니다.

점검 항목확인 내용
MOV 값 확인원본 값이 목적지에 정상적으로 들어갔는지 확인
비교 기준 확인K값이나 D값이 실제 기준과 맞는지 확인
연산 결과 확인결과값이 정상 범위 안에 있는지 확인
FMOV 범위 확인초기화하면 안 되는 영역이 포함되지 않았는지 확인
BMOV 개수 확인복사 개수 K값이 실제 데이터 개수와 맞는지 확인
16비트·32비트 확인데이터 크기와 명령어가 일치하는지 확인
실행 조건 확인매 스캔 실행인지, 1회 실행인지 확인

특히 BMOV와 FMOV는 한 번에 여러 주소를 처리하기 때문에 실행 조건이 중요합니다. 모델 변경 버튼을 누르는 동안 매 스캔 반복 복사되는 구조인지, 상승엣지로 한 번만 복사되는 구조인지 확인해야 합니다.

래더를 줄이는 방향으로 명령어를 사용한다

MOV, BMOV, FMOV를 잘 사용하면 래더를 줄일 수 있습니다. 하지만 단순히 줄이는 것만 목표로 하면 안 됩니다. 유지보수자가 나중에 봤을 때 어떤 데이터가 어디로 이동하는지 이해할 수 있어야 합니다.

좋은 데이터 명령어 사용 기준은 다음과 같습니다.

기준설명
용도별 주소 분리설정값, 현재값, 레시피, 임시값 영역을 구분
주석 작성BMOV, FMOV 범위와 목적을 명확히 표시
연속 주소 설계레시피나 패턴 데이터는 처음부터 연속 주소로 배치
1회 실행 조건모델 변경, 초기화는 필요한 순간에만 실행
데이터 크기 통일16비트와 32비트 구조를 섞지 않도록 관리

명령어를 많이 아는 것보다 데이터 구조를 먼저 정리하는 것이 중요합니다. 데이터 구조가 정리되어 있으면 MOV, BMOV, FMOV만으로도 많은 로직을 단순하게 만들 수 있습니다.

MOV·BMOV·FMOV 정리

MOV는 하나의 값을 옮기는 기본 명령어입니다. HMI 입력값 저장, 모델 번호 저장, 설정값 복사처럼 단일 데이터 이동에 사용합니다.

BMOV는 연속된 여러 데이터를 묶어서 복사하는 명령어입니다. 레시피, 패턴 데이터, 위치값 묶음처럼 구조가 정리된 데이터 영역에 적합합니다.

FMOV는 같은 값을 여러 디바이스에 한 번에 채우는 명령어입니다. 설비 리셋, 알람 데이터 정리, 임시 연산 영역 초기화처럼 여러 주소를 동일한 값으로 초기화할 때 사용합니다.

이 세 가지 명령어를 정확히 구분하면 반복 MOV를 줄이고, 초기화 로직을 단순하게 만들며, 레시피 데이터 관리도 안정적으로 구성할 수 있습니다. 다만 BMOV와 FMOV는 범위를 잘못 지정하면 여러 데이터를 한 번에 덮어쓸 수 있으므로 메모리 맵과 실행 조건을 반드시 확인해야 합니다.

PLC 로직은 복잡한 명령어를 많이 쓰는 것보다 기본 명령어를 정확한 위치에 사용하는 것이 중요합니다. MOV, BMOV, FMOV는 데이터 처리 로직의 기본이므로, 16비트·32비트 구분과 복사 범위만 정확히 관리해도 현장 로직의 가독성과 안정성을 크게 높일 수 있습니다.