get_modbus_input (수동 모드)

이 절에서는 수동(교시) 작업 중에 get_modbus_input으로 외부 PLC나 인버터의 Modbus 레지스터에서 실시간 값을 읽어 진단하거나 검증하는 방법을 설명합니다.

일반적인 사용법

  • 코일이나 디스크리트 입력에서 상태 비트(예: READY, RUN, FAULT)를 모니터링합니다.

  • 입력 레지스터나 홀딩 레지스터에서 아날로그 피드백(예: 현재 속도, 토크, 위치)을 읽습니다.

  • 수동 설정 중 외부 Modbus 통신이 제대로 동작하는지 확인합니다.

참고

  • DISCRETE_INPUT과 INPUT_REGISTER 유형에 적용됩니다.

  • 쓰기 가능한 포인트에는 set_modbus_output을 사용하세요.

  • 장치가 올바른 주소 기준(0 기반/1 기반)과 바이트/워드 순서를 사용하는지 확인하세요.

예제: PLC READY와 인버터 속도 피드백 읽기

// 사전 조건:
// - 연결 완료(open_connection)
// - 수동(교시) 모드 활성
// - Modbus 심볼을 미리 등록한 상태

// 1) 입력 태그 등록
drfl.add_modbus_signal("PLC_READY", "192.168.0.10", 502,
                       MODBUS_REGISTER_TYPE_DISCRETE_INPUTS, 0, 0);
drfl.add_modbus_signal("INV_SPEED_FB", "192.168.0.10", 502,
                       MODBUS_REGISTER_TYPE_INPUT_REGISTER, 120, 0, 1);

// 2) READY 또는 제한 시간 초과까지 장치 폴링
bool ready = false;
for (int i = 0; i < 30; ++i) {
    unsigned short val = drfl.get_modbus_input("PLC_READY");
    if (val == 1) { ready = true; break; }
    std::this_thread::sleep_for(std::chrono::milliseconds(100));
}
printf("[PLC_READY] = %s\n", ready ? "ON" : "OFF");

// 3) 인버터 피드백 읽기(예: 0.01 Hz 단위 속도)
unsigned short fb = drfl.get_modbus_input("INV_SPEED_FB");
printf("[INV_SPEED_FB] = %u (%.2f Hz)\n", fb, fb / 100.0);

// 4) 정리
drfl.del_modbus_signal("PLC_READY");
drfl.del_modbus_signal("INV_SPEED_FB");

팁

  • 읽은 값이 계속 0이면 장치 매핑과 IP/포트 설정을 확인하세요.

  • 너무 빠르게 주기적으로 폴링하면 제한 시간 초과나 CRC 오류가 발생할 수 있습니다. 50–200 ms 간격을 사용하세요.

  • 여러 워드로 된 데이터(예: 32비트)는 장치 문서에 따라 연속된 레지스터를 조합하세요.