QModbusPdu Class

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

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

QModbusRequestQModbusResponse

공용 타입

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)

상세 설명

이 클래스는 모드버스 응용 프로토콜 사양 1.1b에 정의된 대로 원시 모드버스 프로토콜 패킷에 대한 액세스를 제공합니다.

멤버 유형 문서

enum QModbusPdu::ExceptionCode

이 열거형은 모드버스 예외 코드에 정의된 모든 가능한 오류 조건을 설명합니다. 서버는 요청에 대한 응답에서 적절한 오류 조건을 확인한 후 설정하며, 예외 코드를 작동하려면 클라이언트에서 디코딩해야 합니다.

상수설명
QModbusPdu::IllegalFunction0x01디바이스에서 지원하지 않는 기능 코드입니다.
QModbusPdu::IllegalDataAddress0x02쿼리에서 수신된 데이터 주소가 모드버스 서버에 허용되는 주소가 아닙니다.
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::EncapsulatedInterfaceTransport0x2B모드버스 사양의 부록 A를 참조하세요.
QModbusPdu::UndefinedFunctionCode0x100사용하지 마세요.

멤버 기능 문서

[constexpr noexcept] QModbusPdu::QModbusPdu()

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

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

함수 코드가 code 로 설정되고 페이로드가 data 로 설정된 QModbusPdu를 구축합니다. 데이터는 이미 빅 엔디안 바이트 순서로 저장될 것으로 예상됩니다.

[noexcept protected] 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);

참고: 사용은 quint8quint16 으로만 제한됩니다. 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));

참고: quint8quint16 으로만 사용이 제한됩니다. 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가 유효하면 참을 반환하고, 그렇지 않으면 거짓을 반환합니다.

메시지 코드가 소수점 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] QModbusPdu &QModbusPdu::operator=(const QModbusPdu &other)

other 의 복사본을 만들어 이 QModbusPdu 객체에 할당합니다.

멤버 변수 문서

const quint8 QModbusPdu::ExceptionByte

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

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

이 필드는 원시 모드버스 패킷의 기능 필드에서 예외 비트를 마스킹하는 데 사용할 수 있습니다.

관련 비회원

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

streampdu 을 작성하고 스트림에 대한 참조를 반환합니다.

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

debug 스트림에 모드버스 pdu 를 씁니다.

© 2025 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.