이 페이지에서

QModbusPdu Class

QModbusPdu는 Modbus ADU 내에 저장되는 기능 코드와 페이로드를 포함하는 추상 컨테이너 클래스입니다. 더 보기...

헤더: #include <QModbusPdu>
CMake: find_package(Qt6 REQUIRED COMPONENTS SerialBus)
target_link_libraries(mytarget PRIVATE Qt6::SerialBus)
qmake: QT += serialbus
상속된 항목:

QModbusRequest 그리고 QModbusResponse

공개 유형

enum ExceptionCode { IllegalFunction, IllegalDataAddress, IllegalDataValue, ServerDeviceFailure, Acknowledge, …, ExtendedException }
enum FunctionCode { Invalid, ReadCoils, ReadDiscreteInputs, ReadHoldingRegisters, ReadInputRegisters, …, UndefinedFunctionCode }

공개 함수

QModbusPdu()
virtual ~QModbusPdu()
QByteArray data() const
qint16 dataSize() const
void decodeData(Args &&... data) const
void encodeData(Args... data)
QModbusPdu::ExceptionCode exceptionCode() const
QModbusPdu::FunctionCode functionCode() const
bool isException() const
bool isValid() const
void setData(const QByteArray &data)
virtual void setFunctionCode(QModbusPdu::FunctionCode code)
qint16 size() const

정적 공용 멤버

const quint8 ExceptionByte

보호된 함수

QModbusPdu(QModbusPdu::FunctionCode code, const QByteArray &data)
QModbusPdu(const QModbusPdu &other)
QModbusPdu &operator=(const QModbusPdu &other)
QDataStream &operator<<(QDataStream &stream, const QModbusPdu &pdu)
QDebug operator<<(QDebug debug, const QModbusPdu &pdu)

상세 설명

이 클래스는 Modbus 애플리케이션 프로토콜 사양 1.1b에 정의된 원시 Modbus 프로토콜 패킷에 대한 액세스를 제공합니다.

멤버 유형 문서

enum QModbusPdu::ExceptionCode

이 열거형은 Modbus 예외 코드에 정의된 모든 가능한 오류 상태를 설명합니다. 이러한 코드는 요청에 대한 응답에서 해당 오류 상태를 확인한 후 서버에 의해 설정되며, 클라이언트는 예외 코드를 처리하기 위해 이를 해독해야 합니다.

상수값설명
QModbusPdu::IllegalFunction0x01장치가 해당 기능 코드를 지원하지 않습니다.
QModbusPdu::IllegalDataAddress0x02쿼리에서 수신된 데이터 주소가 Modbus 서버에서 허용되는 주소가 아닙니다.
QModbusPdu::IllegalDataValue0x03요청 데이터 필드에 포함된 값이 Modbus 서버에서 허용되는 값이 아닙니다.
QModbusPdu::ServerDeviceFailure0x04서버가 요청된 작업을 수행하려고 시도하는 동안 복구할 수 없는 오류가 발생했습니다.
QModbusPdu::Acknowledge0x05프로그래밍 명령과 함께 특수한 용도로 사용됩니다.
QModbusPdu::ServerDeviceBusy0x06서버가 장시간 소요되는 프로그램 명령을 처리 중입니다.
QModbusPdu::NegativeAcknowledge0x07서버가 쿼리에서 수신한 프로그램 기능을 수행할 수 없습니다. 이 코드는 프로그래밍 요청이 실패한 경우 반환됩니다. 클라이언트는 서버에 진단 또는 오류 정보를 요청해야 합니다.
QModbusPdu::MemoryParityError0x08확장 파일 영역이 일관성 검사를 통과하지 못했음을 나타냅니다. 기능 코드 20 및 21과 함께 사용됩니다. 이 예외 코드는 전송 라인의 패리티 설정을 나타내는 것이 아니라, 서버의 파일 레코드 내부 메모리만을 나타냅니다.
QModbusPdu::GatewayPathUnavailable0x0A게이트웨이가 요청 처리를 위해 입력 포트에서 출력 포트로 이어지는 내부 통신 경로를 할당할 수 없음을 나타냅니다.
QModbusPdu::GatewayTargetDeviceFailedToRespond0x0B게이트웨이 뒤편의 대상 장치로부터 응답을 받지 못했음을 나타냅니다. 일반적으로 이는 대상 장치가 네트워크에서 온라인 상태가 아님을 의미합니다.
QModbusPdu::ExtendedException0xFF이는 Modbus 사양에 따른 확장 예외입니다. 일반적으로 이 코드는 별도로 더 자세히 설명된 예외를 나타내는 데 사용됩니다.

enum QModbusPdu::FunctionCode

서버에서 요구하는 기능 코드와 암시적 동작 유형을 정의합니다. 모든 Modbus 장치가 동일한 기능 코드 세트를 처리할 수 있는 것은 아닙니다.

상수값설명
QModbusPdu::Invalid0x00기본 생성자에 의해 설정되므로 사용하지 마십시오.
QModbusPdu::ReadCoils0x01장치에서 하나 이상의 코일의 상태를 요청합니다.
QModbusPdu::ReadDiscreteInputs0x02장치에서 하나 이상의 입력 레지스터의 상태를 요청합니다.
QModbusPdu::ReadHoldingRegisters0x03장치에서 하나 이상의 홀딩 레지스터 값의 상태를 요청합니다.
QModbusPdu::ReadInputRegisters0x04장치에서 하나 이상의 입력 레지스터 값의 상태를 요청합니다.
QModbusPdu::WriteSingleCoil0x05장치에 단일 코일을 쓰도록 요청합니다.
QModbusPdu::WriteSingleRegister0x06장치에 단일 홀딩 레지스터를 쓰도록 요청합니다.
QModbusPdu::ReadExceptionStatus0x07장치에 있는 8개의 예외 상태 출력의 상태를 요청합니다.
QModbusPdu::Diagnostics0x08클라이언트-서버 통신 시스템을 확인하거나 내부 상태를 확인하기 위한 일련의 테스트를 수행하는 데 사용됩니다.
QModbusPdu::GetCommEventCounter0x0B장치의 통신 이벤트 카운터에서 상태 워드와 이벤트 수를 요청합니다.
QModbusPdu::GetCommEventLog0x0C장치에서 상태 워드, 이벤트 수, 메시지 수 및 이벤트 바이트 필드를 요청합니다.
QModbusPdu::WriteMultipleCoils0x0F장치에 하나 이상의 코일을 쓰도록 요청합니다.
QModbusPdu::WriteMultipleRegisters0x10장치에 하나 이상의 홀딩 레지스터를 쓰도록 요청합니다.
QModbusPdu::ReportServerId0x11장치의 유형, 현재 상태 및 기타 장치별 정보에 대한 설명을 요청합니다.
QModbusPdu::ReadFileRecord0x14파일 레코드 읽기를 요청합니다.
QModbusPdu::WriteFileRecord0x15파일 레코드 쓰기를 요청합니다.
QModbusPdu::MaskWriteRegister0x16AND 또는 OR 마스크와 레지스터의 현재 내용을 조합하여 지정된 홀딩 레지스터의 내용을 수정하도록 요청합니다.
QModbusPdu::ReadWriteMultipleRegisters0x17하나 이상의 홀딩 레지스터의 상태를 요청하고, 동시에 장치에 하나 이상의 홀딩 레지스터를 기록하도록 요청합니다.
QModbusPdu::ReadFifoQueue0x18원격 장치의 FIFO(선입선출) 레지스터 큐의 내용을 읽도록 요청합니다.
QModbusPdu::EncapsulatedInterfaceTransport0x2BModbus 사양의 부록 A를 참조하십시오.
QModbusPdu::UndefinedFunctionCode0x100사용하지 마십시오.

멤버 함수 설명서

[constexpr noexcept default] QModbusPdu::QModbusPdu()

유효하지 않은 QModbusPdu를 생성합니다.

[protected] QModbusPdu::QModbusPdu(QModbusPdu::FunctionCode code, const QByteArray &data)

함수 코드를 code 로, 페이로드를 data 로 설정하여 QModbusPdu를 생성합니다. 데이터는 이미 빅엔디안 바이트 순서로 저장되어 있어야 합니다.

[noexcept protected default] QModbusPdu::QModbusPdu(const QModbusPdu &other)

other 의 복사본인 QModbusPdu를 생성합니다.

[virtual noexcept] QModbusPdu::~QModbusPdu()

QModbusPdu 을 파괴합니다.

QByteArray QModbusPdu::data() const

함수 코드를 제외한 PDU의 페이로드를 반환합니다. 페이로드는 빅엔디안 바이트 순서로 저장됩니다.

setData()도 참조하십시오 .

qint16 QModbusPdu::dataSize() const

함수 코드를 제외한 PDU의 데이터 크기를 반환합니다.

template <typename... Args> void QModbusPdu::decodeData(Args &&... data) const

페이로드를 호스트 엔디안으로 변환하여 data 에 읽어옵니다. 데이터는 가변 길이 인자 목록일 수 있습니다.

QModbusResponsePdu response(QModbusPdu::ReportServerId);
response.encodeData(quint8(0x02), quint8(0x01), quint8(0xff));
quint8 count, id, run;
response.decodeData(&count, &id, &run);

참고: 사용은 quint8 및 quint16 로만 제한됩니다. 이는 QDataStream 스트림 연산자가 원시 데이터뿐만 아니라, 복합 유형의 경우 크기, 개수 등의 정보도 추가하기 때문입니다.

template <typename... Args> void QModbusPdu::encodeData(Args... data)

페이로드를 data 로 설정합니다. 데이터는 변환되어 빅엔디안 바이트 순서로 저장됩니다.

QModbusRequestPdu request(QModbusPdu::ReadCoils);
// starting address and quantity of coils
request.encodeData(quint16(0x0c), quint16(0x0a));

참고: 사용 범위는 quint8 및 quint16 로만 제한됩니다. 이는 QDataStream 스트림 연산자가 원시 데이터뿐만 아니라, 복합 유형의 경우 크기, 개수 등의 정보도 추가하기 때문입니다.

QModbusPdu::ExceptionCode QModbusPdu::exceptionCode() const

응답의 예외 코드를 반환합니다.

QModbusPdu::FunctionCode QModbusPdu::functionCode() const

PDU의 기능 코드를 반환합니다.

setFunctionCode()도 참조하십시오 .

bool QModbusPdu::isException() const

PDU에 예외 코드가 포함되어 있으면 true를 반환하고, 그렇지 않으면 false를 반환합니다.

bool QModbusPdu::isValid() const

PDU가 유효한 경우 true를 반환하고, 그렇지 않은 경우 false를 반환합니다.

메시지 코드가 1부터 255(십진수) 사이의 값이고, PDU의 합성 크기(함수 코드 + 데이터)가 253바이트를 초과하지 않는 경우, 해당 PDU는 유효한 것으로 간주됩니다. 기본값으로 생성된 PDU는 유효하지 않습니다.

void QModbusPdu::setData(const QByteArray &data)

PDU의 기능 페이로드를 data 로 설정합니다. 데이터는 이미 빅엔디안 바이트 순서로 저장되어 있어야 합니다.

data()도 참조하십시오 .

[virtual] void QModbusPdu::setFunctionCode(QModbusPdu::FunctionCode code)

PDU의 기능 코드를 code 로 설정합니다.

functionCode()도 참조하십시오 .

qint16 QModbusPdu::size() const

함수 코드 및 데이터 크기를 포함하여 PDU의 전체 크기를 반환합니다.

[noexcept protected default] QModbusPdu &QModbusPdu::operator=(const QModbusPdu &other)

other 의 복사본을 생성하여 이 QModbusPdu 객체에 할당합니다.

멤버 변수 설명

const quint8 QModbusPdu::ExceptionByte

이 변수는 0x80으로 초기화됩니다.

예외는 정의된 패킷 형식으로 보고됩니다. 요청한 클라이언트에게는 원래의 함수 코드와 동일하지만 최상위 비트가 설정된 함수 코드가 반환됩니다. 이는 원래 함수 코드의 값에 0x80을 더하는 것과 동일합니다.

이 필드는 원시 Modbus 패킷의 함수 필드에 있는 예외 비트를 마스킹하는 데 사용될 수 있습니다.

관련 비회원

QDataStream &operator<<(QDataStream &stream, const QModbusPdu &pdu)

` pdu `을 ` stream `에 기록하고, 해당 스트림에 대한 참조를 반환합니다.

QDebug operator<<(QDebug debug, const QModbusPdu &pdu)

Modbus pdu 를 debug 스트림에 기록합니다.

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.