PLC Engineer's Field Notes

Practical solutions for industrial automation


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

PLC 매뉴얼을 펼치면 명령어 수천 개가 나옵니다. 처음 보는 사람은 여기서 바로 막히죠. 하지만 현장은 다릅니다. 사용하는 것만 계속 씁니다.

PLC 로직이 안 풀릴 때, 대부분 이런 상황입니다.

  • 프로그램은 돌아가는데 원하는 동작이 안 나온다.
  • 데이터 값은 들어오는데 비교 조건이 안 맞는다.
  • 로직이 점점 길어지고 복잡해져서 수정이 겁난다.

이럴 때 대부분 새로운 명령어를 찾지만, 현장은 반대입니다. 기본 명령어 조합이 제대로 안 잡혀서 꼬인 경우가 대부분입니다.

[한 줄 직설] “명령어는 많이 아는 게 아니라, 상황에 맞게 꺼내 쓰는 게 실력이다.”

※ 본 글은 미쓰비시 MELSEC Q/R 시리즈, GX Works2/3 기준입니다.


1. MOV (Move): 데이터 전송의 기본

특정 값을 디바이스에 저장하거나, 디바이스 간의 값을 복사할 때 사용합니다.

  • 형식: [MOV K100 D0] (K100 값을 D0에 저장)
  • 실무 활용: 터치스크린 입력값 → PLC 내부 파라미터 전달
    • 현재 공정의 기종(MODEL) 번호 저장
    • 각종 설정값 복사
  • 한마디로: “값 이동은 무조건 MOV부터 시작입니다.”

D0, D20 같은 워드 디바이스가 익숙하지 않다면 먼저 보고 오세요
👉 [실무] D·W·R·Z 데이터 구조와 용도 제대로 이해하기


2. 비교 연산 (=, <, >, <= 등): 조건 판단용

데이터의 크기를 비교하여 조건이 맞을 때만 접점을 살리는 명령어입니다.

  • 형식: [= D0 K10] (D0가 10이면 해당 조건이 성립한다)
  • 실무 활용:
    • 목표 생산 수량 도달 체크
    • 센서 감지값이나 온도 조건 판단
    • 서보 위치 도달 여부 확인
  • 포인트: 비트 접점처럼 쓰는 ‘워드용 조건’이라고 보시면 편합니다.

📌 실무 팁
비교는 16bit 워드만 되는 게 아닙니다. 큰 값이나 누적 데이터는 32bit 더블워드 비교(D=, D>, D< 등) 를 사용해야 합니다.

예를 들어 엔코더 누적값, 생산 총카운트, 긴 거리 위치값은 일반 비교로 자르면 값이 틀어질 수 있습니다.
값 크기가 크면 비교 명령어도 같이 키워야 합니다.


3. 산술 연산 (+, -): 데이터 가공

데이터를 더하거나 빼는 가장 기초적인 연산입니다.

  • 형식: [+ D0 K1 D0] (D0 = D0 + 1)
  • 실무 활용:
    • 제품 통과 신호 들어올 때마다 생산 카운트 증가
    • 남은 수량(목표 – 현재) 계산
    • 로직 내 데이터 누적 처리
  • 현장 기준: 단순히 +1씩 증가시키는 경우에는 INCP 명령어가 더 직관적이고 실수도 적어 자주 사용됩니다. 다만, 연산 사용 빈도는 설비 구조에 따라 다릅니다. 단순 카운트 위주는 +, INCP가 많고, 비율 계산이나 보정이 필요한 설비는 *, / 연산이 더 많이 쓰이기도 합니다.

📌 실무 팁
연산도 마찬가지입니다. 값 범위가 크면 D+, D-, DMUL, DDIV 같은 32bit 더블워드 연산을 써야 안전합니다.

하루 생산량은 괜찮아도, 누적 생산량을 몇 달 쌓으면 16bit 범위를 넘기는 경우가 있습니다.
그때 일반 +만 쓰면 값이 튀거나 음수처럼 보일 수 있습니다.

값이 이상해지는 원인이 궁금하다면 아래 글을 먼저 보세요.

👉 [실무] 미쓰비시 PLC D메모리: 값이 깨지거나 음수로 튀는 이유 (16비트 vs 32비트 + GX Works 체크)


4. FMOV (Fill Move): 한 번에 초기화

동일한 데이터를 특정 범위의 디바이스에 한꺼번에 채울 때 사용합니다.

  • 형식: [FMOV K0 D0 K10] (D0부터 D9까지 10개를 전부 0으로 채움)
  • 실무 포인트:
    • 설비 리셋 시 수십 개의 데이터 레지스터 한 번에 초기화
    • 여러 레지스터 영역 한 번에 정리
  • 이거 없으면: 초기화 로직이 수십 줄로 늘어나는 반복 작성을 하게 됩니다.



5. BMOV (Block Move): 묶음 전송의 핵심

여러 개의 연속된 데이터를 통째로 복사할 때 사용합니다.

  • 형식: [BMOV D0 D20 K3] (D0~D2를 D20~D22로 한꺼번에 복사)
  • 실무 활용: 레시피 데이터 뭉치를 불러오거나, 패턴 데이터 세트를 통째로 이동할 때 필수입니다.
  • 현장 매너: 1개는 MOV, 묶음은 BMOV로 확실히 구분해서 짜야 나중에 봐도 로직이 한눈에 들어옵니다. “MOV 100줄 쓰는 작업을 BMOV 한 줄로 줄이는 게 실력입니다.”
PLC MOV 반복과 BMOV 블록 이동 비교 예시
[Fig. 1] MOV 반복 vs BMOV 블록 이동 비교 (같은 결과, 다른 방식)

💡 [실무 팁] “MOV 100줄 쓸래, BMOV 한 줄로 끝낼래?”

연속된 데이터라면 답은 거의 BMOV입니다. 로직도 짧아지고 나중에 보기도 훨씬 편하죠. 하지만 편한 만큼 확실한 조건이 붙습니다.

  • 반드시 연속된 목적의 데이터여야 합니다. BMOV는 블록 단위 복사라 중간에 주소가 비어 있거나 다른 용도의 데이터(알람 이력 등)가 섞여 있으면 통째로 덮어써 버립니다. 실제로 레시피 영역 중간에 알람 이력 디바이스가 끼어 있는 걸 모르고 BMOV를 쐈다가, 설비 조건이 통째로 바뀌는 사고도 많이 납니다. “이 구간이 정말 한 묶음이 맞는지” 확인이 우선입니다.
  • 중간 주소를 다른 로직이 쓰고 있으면 안 됩니다. 레시피 영역 중간에 뜬금없이 다른 인터락이나 표시용 디바이스가 끼어 있다면, BMOV 한 번에 엉뚱한 값까지 날아갑니다. “연속이네?” 하고 쏘기 전에 주소 점검부터 하세요.
  • 비교 연산도 데이터 크기를 맞춰야 합니다. 값이 커서 DMOV를 썼다면, 비교할 때도 D= 같은 더블워드 비교를 써야 합니다. 이동은 32비트로 해놓고 비교는 16비트로 하면, 값은 들어가 있는데 로직은 안 도는 황당한 상황이 터집니다.

“MOV를 백 줄 쓰는 건 몸이 고생하는 거고, 잘못 쓴 BMOV 한 줄은 설비를 고생시킵니다.”


⚠️ 실수 많이 나는 부분 (중요)

데이터 타입(크기) 확인 안 하면 사고 납니다.

  • 일반: 16bit
  • D가 붙으면: 32bit (DMOV, D+, D= 등)
  • 문제 상황: 큰 값을 넣었는데 값이 깨지거나 계산 결과가 이상하다면? 데이터 타입 불일치를 가장 먼저 의심해야 합니다. “내가 쓰는 데이터 크기부터 확인”하는 습관을 들이세요.

📌 빠른 점검 체크리스트

  • [ ] MOV로 값 제대로 들어갔나?
  • [ ] 비교 조건 기준값(K)이 맞나?
  • [ ] 연산 후 결과값이 정상 범위인가?
  • [ ] 초기화(FMOV) 누락된 영역은 없나?
  • [ ] BMOV 복사 범위(K)가 데이터 영역을 넘지 않나?
  • [ ] 16bit와 32bit 명령어를 정확히 구분했나?

문제는 대부분 복잡한 명령어가 아니라, 이런 기본에서 터집니다.


결론: 명령어 많이 외울 필요 없습니다

MOV, 비교, +, -, FMOV, BMOV. 이 6가지만 제대로 써도 많은 현장 로직은 이 기본 조합만으로도 충분히 구성됩니다.

[한 줄 직설] “PLC는 어려운 명령어가 아니라, 기본 명령어 조합이 전부다.”


[다음 포스팅 예고]

기초 명령어를 배웠으니 이제 실전입니다. 시간이 돈인 현장에서 가장 중요한 타이머와 카운터, 단순하게 쓰면 무조건 꼬입니다. 실전용 인터락과 조합하는 법을 공개합니다.

👉 [실무] 타이머·카운터를 ‘어디에’ 걸어야 오동작이 안 날까?