최신 버전 정보는 1.33.5에서 확인하세요.
query_modbus_data_list (수동 모드)
이 절에서는 수동(교시) 작업 중에 query_modbus_data_list를 사용하는 방법을 설명합니다. 이 함수는 컨트롤러에 등록된 현재 Modbus 신호 목록(입력과 출력 모두)을 가져옵니다. 작업자는 수동 설정이나 테스트 중에 통신 매핑을 확인하고, 연결된 장치를 모니터링하고, Modbus I/O 설정을 디버깅할 수 있습니다.
일반적인 사용법
시스템 시운전 중 등록된 Modbus 입출력 채널을 모두 표시합니다.
장치(예: PLC, 센서, 액추에이터)가 Modbus 네트워크에 제대로 연결되어 있는지 확인합니다.
자동 시퀀스를 실행하기 전에 신호 이름, 데이터 주소, 값을 검증합니다.
Modbus 장치가 응답하지 않거나 예상과 다르게 동작할 때 진단 도구로 사용합니다.
참고
이 함수는 읽기 전용 데이터를 반환하며, Modbus 연결을 수정하거나 새로 고치지 않습니다.
Modbus 항목을 관리하려면 add_modbus_signal과 del_modbus_signal을 사용하세요.
주로 네트워크 설정이나 신호 등록 후 설정이 올바른지 확인할 때 사용합니다.
예제: 등록된 Modbus 신호 모두 표시
// 사전 조건:
// - 연결 완료(open_connection)
// - 수동(교시) 모드 활성
// - add_modbus_signal()로 Modbus 장치 설정 완료
LPMODBUS_DATA_LIST pList = drfl.query_modbus_data_list();
if (pList) {
printf("-------------------------------------------\n");
printf("[MODBUS SIGNAL LIST]\n");
printf("Total Signals: %d\n", pList->_nCount);
for (int i = 0; i < pList->_nCount; ++i) {
const MODBUS_DATA& entry = pList->_tRegister[i];
printf("-------------------------------------------\n");
printf("Index : %d\n", i);
if (entry._iType == 0) { // 0: Modbus TCP 방식
const WRITE_MODBUS_TCP_DATA& data = entry._tData._tcp;
printf("Name : %s (TCP)\n", data._szSymbol);
printf("Address : %d\n", data._iRegIndex);
printf("Type : %d\n", data._iRegType);
printf("Value : %d\n", data._iRegValue);
} else { // 1: Modbus RTU 방식
const WRITE_MODBUS_RTU_DATA& data = entry._tData._rtu;
printf("Name : %s (RTU)\n", data._szSymbol);
printf("Address : %d\n", data._iRegIndex);
printf("Type : %d\n", data._iRegType);
printf("Value : %d\n", data._iRegValue);
}
}
printf("-------------------------------------------\n");
} else {
printf("[Modbus] No registered Modbus signals found.\n");
}
팁
현장 장치 매핑이나 I/O 검증 중에 이 함수를 자주 사용하세요.
신호 값이 갱신되지 않으면 Modbus 마스터/슬레이브 설정과 배선을 확인하세요.
get_modbus_input, set_modbus_output과 함께 사용해 실시간으로 테스트하세요.
전체 자동화 시퀀스를 실행하지 않고 교시 모드에서 바로 Modbus 네트워크 통신을 디버깅할 때 적합합니다.