본문 바로가기
테크 루틴 테크 루틴

FC03과 FC04 기능 코드의 레지스터 읽기 동작 비교

junuyanolja 읽는 시간 약 8분

산업 현장의 통신 언어 모드버스 FC03과 FC04의 이해

산업 자동화 분야에서 가장 널리 사용되는 통신 프로토콜인 모드버스(Modbus)를 다루다 보면 반드시 마주하게 되는 것이 바로 기능 코드(Function Code)입니다. 그중에서도 데이터를 읽어오는 역할을 하는 FC03과 FC04는 언뜻 보면 비슷해 보이지만, 실제 데이터 구조와 접근 방식에서 명확한 차이를 보입니다. 이 두 코드를 정확히 이해하는 것은 PLC(프로그래머블 로직 컨트롤러), HMI, 그리고 각종 센서 간의 원활한 통신을 구축하는 데 필수적인 요소입니다.

기능 코드의 기본 정의와 역할

모드버스 프로토콜에서 기능 코드는 마스터 장치가 슬레이브 장치에게 무엇을 해야 하는지 지시하는 명령 체계입니다. FC03은 ‘Holding Register(홀딩 레지스터)’를 읽는 코드이고, FC04는 ‘Input Register(입력 레지스터)’를 읽는 코드입니다. 두 코드 모두 16비트 단위의 데이터를 읽어온다는 공통점이 있지만, 데이터를 저장하고 있는 메모리 영역의 성격에 따라 구분됩니다.

FC03 Holding Register 읽기

FC03은 읽기 및 쓰기가 모두 가능한 영역인 홀딩 레지스터에 접근합니다. 주로 설정값, 운전 파라미터, 장비의 상태 정보 등을 저장하는 데 사용됩니다. 사용자가 직접 값을 변경하거나 기록해야 하는 데이터가 이 영역에 위치하므로, 제어 시스템에서 매우 빈번하게 호출되는 코드입니다.

FC04 Input Register 읽기

FC04는 읽기 전용 영역인 입력 레지스터에 접근합니다. 이는 주로 센서로부터 들어오는 실시간 데이터, 즉 온도, 압력, 전압, 전류와 같이 외부에서 측정된 값들을 담고 있습니다. 슬레이브 장치(센서 등)가 데이터를 생성하여 제공하며, 마스터 장치는 이를 읽기만 할 뿐 값을 수정할 수는 없습니다.

두 기능 코드의 기술적 차이점 비교

현장에서 두 코드를 혼동하면 통신 에러가 발생하거나 데이터가 정상적으로 불러와지지 않는 문제가 생깁니다. 아래 표를 통해 두 코드의 차이를 명확히 확인해 보시기 바랍니다.

구분 FC03 (Holding Register) FC04 (Input Register)
접근 방식 읽기 및 쓰기 가능 읽기 전용
주요 용도 설정값, 제어 파라미터 센서 데이터, 측정값
데이터 성격 고정되거나 변경 가능한 값 실시간으로 변하는 측정치
메모리 주소 4xxxx 영역 3xxxx 영역

실생활 및 산업 현장에서의 활용 방법

실제 엔지니어링 현장에서는 장비의 매뉴얼을 확인하는 것이 가장 중요합니다. 예를 들어, 인버터(VFD)를 제어한다고 가정해 보겠습니다. 인버터의 목표 주파수를 변경하려면 FC06(단일 쓰기)이나 FC16(다중 쓰기)을 사용해야 하므로, 이와 관련된 주소는 당연히 FC03으로 읽어야 하는 홀딩 레지스터 영역에 있습니다. 반면, 인버터가 현재 출력하고 있는 모터의 회전 속도나 내부 온도는 실시간 측정값이므로 FC04로 읽어야 하는 입력 레지스터 영역에 할당되어 있을 가능성이 큽니다.

현장 실무자들은 종종 “왜 데이터가 들어오지 않나요?”라는 질문을 받곤 합니다. 대부분의 경우 통신 배선 문제도 있지만, 기능 코드를 잘못 설정한 경우가 많습니다. 읽어야 할 데이터가 입력 레지스터인데 홀딩 레지스터로 요청을 보내면, 슬레이브 장치는 “해당 주소는 유효하지 않다”는 에러 응답을 보내게 됩니다.

자주 발생하는 오해와 사실 관계

많은 초보자가 “FC03으로 모든 데이터를 읽을 수 있지 않나요?”라고 묻곤 합니다. 이론적으로는 기기 설계자가 모든 데이터를 홀딩 레지스터 영역에 몰아넣을 수도 있습니다. 하지만 표준적인 산업용 장비들은 데이터의 성격에 따라 레지스터 영역을 엄격히 구분합니다. 이는 데이터 보호 차원에서도 중요한데, 중요한 설정값을 실수로 덮어쓰지 않도록 읽기 전용인 입력 레지스터(FC04)로 분리해 두는 것이 안전하기 때문입니다.

흔한 오해

  • 오해 1: FC03과 FC04는 호환되므로 아무거나 써도 된다. (사실: 장비마다 할당된 영역이 다르므로 반드시 매뉴얼을 따라야 함)
  • 오해 2: 입력 레지스터는 FC03으로 읽으면 에러가 난다. (사실: 장비 설계에 따라 다르지만, 대부분의 표준 모드버스 장비는 영역을 구분하여 에러를 발생시킴)
  • 오해 3: 기능 코드는 소프트웨어 설정보다 하드웨어가 중요하다. (사실: 통신 프로토콜 설정은 소프트웨어적 해석이 핵심이므로 두 요소 모두 필수적임)

전문가가 제안하는 성공적인 통신 구축 팁

통신 시스템을 구축할 때 가장 먼저 해야 할 일은 해당 장비의 ‘모드버스 레지스터 맵(Register Map)’을 확보하는 것입니다. 이 문서에는 각 데이터가 어떤 주소에 있고, 어떤 기능 코드를 사용해야 하는지 명시되어 있습니다. 다음은 전문가가 제안하는 몇 가지 실용적인 조언입니다.

    • 매뉴얼의 주소 체계를 확인하세요: 어떤 제조사는 주소를 0부터 시작하고, 어떤 제조사는 1부터 시작합니다. 또한 40001번 주소를 FC03으로 읽을 때 실제 통신 패킷에는 0번 주소로 보내야 하는 경우가 많으니 ‘오프셋(Offset)’ 개념을 반드시 숙지해야 합니다.
    • 통신 로그를 분석하세요: 통신이 원활하지 않을 때, 시리얼 통신 분석기(Serial Monitor)를 사용하여 실제 송수신되는 헥사(Hex) 값을 확인해 보세요. 기능 코드가 03인지 04인지, 요청한 주소가 정확한지 눈으로 확인하는 것만큼 확실한 방법은 없습니다.
    • 데이터 타입을 고려하세요: 레지스터 하나는 16비트입니다. 만약 읽고자 하는 값이 32비트(Float, Long)라면 레지스터 두 개를 연속해서 읽어야 합니다. 이때도 FC03/FC04를 사용하여 연속 읽기(Multiple Read)를 수행해야 함을 기억하세요.
    • 에러 코드를 무시하지 마세요: 장비가 응답하는 예외 코드(Exception Code)를 확인하세요. 0x01(잘못된 기능 코드), 0x02(잘못된 주소) 등은 여러분이 FC03과 FC04를 잘못 사용하고 있다는 가장 강력한 신호입니다.

비용 효율적인 활용과 시스템 최적화

시스템의 통신 속도를 높이고 부하를 줄이는 것도 중요한 기술입니다. FC03과 FC04를 적절히 사용하면 통신 효율을 극대화할 수 있습니다. 예를 들어, 자주 변하지 않는 설정값은 FC03을 통해 초기 부팅 시 한 번만 읽어오고, 실시간으로 변하는 데이터는 FC04를 통해 주기적으로 읽어오는 방식을 사용하면 통신 대역폭을 낭비하지 않을 수 있습니다.

또한, 많은 데이터를 한꺼번에 읽기 위해 ‘연속 읽기’ 기능을 활용하세요. 레지스터 주소가 인접해 있다면, 여러 번 요청을 보내는 대신 한 번의 요청으로 데이터를 묶어서 가져오는 것이 통신 응답 시간을 획기적으로 줄여줍니다. 이는 네트워크 트래픽을 감소시키고 PLC의 스캔 타임을 단축하는 데 매우 효과적입니다.

현장 문제 해결을 위한 체크리스트

통신이 되지 않을 때 당황하지 말고 다음 항목을 차례대로 점검해 보세요.

    • 통신 배선(A, B 단자)이 바뀌지 않았는가?
    • 통신 속도(Baud rate)와 패리티 비트 설정이 일치하는가?
    • 슬레이브 ID(Slave ID)가 올바르게 설정되었는가?
    • 읽으려는 주소가 해당 기능 코드(FC03/FC04)의 영역 내에 있는가?
    • 데이터 타입(Integer, Float, Word)을 올바르게 해석하고 있는가?

모드버스 통신은 복잡해 보이지만, 결국 ‘데이터를 어디서 어떻게 가져올 것인가’에 대한 약속입니다. FC03과 FC04의 차이를 이해하는 것은 이 약속을 완벽하게 이행하기 위한 첫걸음입니다. 기술적인 깊이를 더해갈수록 통신 에러는 줄어들고, 구축하는 시스템의 안정성은 비약적으로 향상될 것입니다. 현장에서 매뉴얼을 꼼꼼히 읽고, 작은 실험부터 시작해 보시기 바랍니다. 이러한 노력들이 쌓여 여러분을 더욱 전문적인 자동화 엔지니어로 만들어 줄 것입니다.

junuyanolja

junuyanolja
함께 보면 좋은 글

댓글 0

첫 댓글을 남겨보세요.

error: Content is protected !!

광고 차단 알림

광고 클릭 제한을 초과하여 광고가 차단되었습니다.

단시간에 반복적인 광고 클릭은 시스템에 의해 감지되며, IP가 수집되어 사이트 관리자가 확인 가능합니다.