QModbusPdu Class
QModbusPdu는 Modbus ADU 내에 저장되는 기능 코드와 페이로드를 포함하는 추상 컨테이너 클래스입니다. 더 보기...
| 헤더: | #include <QModbusPdu> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS SerialBus) target_link_libraries(mytarget PRIVATE Qt6::SerialBus) |
| qmake: | QT += serialbus |
| 상속된 항목: |
공개 유형
| 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) |
멤버 유형 문서
enum QModbusPdu::ExceptionCode
이 열거형은 Modbus 예외 코드에 정의된 모든 가능한 오류 상태를 설명합니다. 이러한 코드는 요청에 대한 응답에서 해당 오류 상태를 확인한 후 서버에 의해 설정되며, 클라이언트는 예외 코드를 처리하기 위해 이를 해독해야 합니다.
| 상수 | 값 | 설명 |
|---|---|---|
QModbusPdu::IllegalFunction | 0x01 | 장치가 해당 기능 코드를 지원하지 않습니다. |
QModbusPdu::IllegalDataAddress | 0x02 | 쿼리에서 수신된 데이터 주소가 Modbus 서버에서 허용되는 주소가 아닙니다. |
QModbusPdu::IllegalDataValue | 0x03 | 요청 데이터 필드에 포함된 값이 Modbus 서버에서 허용되는 값이 아닙니다. |
QModbusPdu::ServerDeviceFailure | 0x04 | 서버가 요청된 작업을 수행하려고 시도하는 동안 복구할 수 없는 오류가 발생했습니다. |
QModbusPdu::Acknowledge | 0x05 | 프로그래밍 명령과 함께 특수한 용도로 사용됩니다. |
QModbusPdu::ServerDeviceBusy | 0x06 | 서버가 장시간 소요되는 프로그램 명령을 처리 중입니다. |
QModbusPdu::NegativeAcknowledge | 0x07 | 서버가 쿼리에서 수신한 프로그램 기능을 수행할 수 없습니다. 이 코드는 프로그래밍 요청이 실패한 경우 반환됩니다. 클라이언트는 서버에 진단 또는 오류 정보를 요청해야 합니다. |
QModbusPdu::MemoryParityError | 0x08 | 확장 파일 영역이 일관성 검사를 통과하지 못했음을 나타냅니다. 기능 코드 20 및 21과 함께 사용됩니다. 이 예외 코드는 전송 라인의 패리티 설정을 나타내는 것이 아니라, 서버의 파일 레코드 내부 메모리만을 나타냅니다. |
QModbusPdu::GatewayPathUnavailable | 0x0A | 게이트웨이가 요청 처리를 위해 입력 포트에서 출력 포트로 이어지는 내부 통신 경로를 할당할 수 없음을 나타냅니다. |
QModbusPdu::GatewayTargetDeviceFailedToRespond | 0x0B | 게이트웨이 뒤편의 대상 장치로부터 응답을 받지 못했음을 나타냅니다. 일반적으로 이는 대상 장치가 네트워크에서 온라인 상태가 아님을 의미합니다. |
QModbusPdu::ExtendedException | 0xFF | 이는 Modbus 사양에 따른 확장 예외입니다. 일반적으로 이 코드는 별도로 더 자세히 설명된 예외를 나타내는 데 사용됩니다. |
enum QModbusPdu::FunctionCode
서버에서 요구하는 기능 코드와 암시적 동작 유형을 정의합니다. 모든 Modbus 장치가 동일한 기능 코드 세트를 처리할 수 있는 것은 아닙니다.
| 상수 | 값 | 설명 |
|---|---|---|
QModbusPdu::Invalid | 0x00 | 기본 생성자에 의해 설정되므로 사용하지 마십시오. |
QModbusPdu::ReadCoils | 0x01 | 장치에서 하나 이상의 코일의 상태를 요청합니다. |
QModbusPdu::ReadDiscreteInputs | 0x02 | 장치에서 하나 이상의 입력 레지스터의 상태를 요청합니다. |
QModbusPdu::ReadHoldingRegisters | 0x03 | 장치에서 하나 이상의 홀딩 레지스터 값의 상태를 요청합니다. |
QModbusPdu::ReadInputRegisters | 0x04 | 장치에서 하나 이상의 입력 레지스터 값의 상태를 요청합니다. |
QModbusPdu::WriteSingleCoil | 0x05 | 장치에 단일 코일을 쓰도록 요청합니다. |
QModbusPdu::WriteSingleRegister | 0x06 | 장치에 단일 홀딩 레지스터를 쓰도록 요청합니다. |
QModbusPdu::ReadExceptionStatus | 0x07 | 장치에 있는 8개의 예외 상태 출력의 상태를 요청합니다. |
QModbusPdu::Diagnostics | 0x08 | 클라이언트-서버 통신 시스템을 확인하거나 내부 상태를 확인하기 위한 일련의 테스트를 수행하는 데 사용됩니다. |
QModbusPdu::GetCommEventCounter | 0x0B | 장치의 통신 이벤트 카운터에서 상태 워드와 이벤트 수를 요청합니다. |
QModbusPdu::GetCommEventLog | 0x0C | 장치에서 상태 워드, 이벤트 수, 메시지 수 및 이벤트 바이트 필드를 요청합니다. |
QModbusPdu::WriteMultipleCoils | 0x0F | 장치에 하나 이상의 코일을 쓰도록 요청합니다. |
QModbusPdu::WriteMultipleRegisters | 0x10 | 장치에 하나 이상의 홀딩 레지스터를 쓰도록 요청합니다. |
QModbusPdu::ReportServerId | 0x11 | 장치의 유형, 현재 상태 및 기타 장치별 정보에 대한 설명을 요청합니다. |
QModbusPdu::ReadFileRecord | 0x14 | 파일 레코드 읽기를 요청합니다. |
QModbusPdu::WriteFileRecord | 0x15 | 파일 레코드 쓰기를 요청합니다. |
QModbusPdu::MaskWriteRegister | 0x16 | AND 또는 OR 마스크와 레지스터의 현재 내용을 조합하여 지정된 홀딩 레지스터의 내용을 수정하도록 요청합니다. |
QModbusPdu::ReadWriteMultipleRegisters | 0x17 | 하나 이상의 홀딩 레지스터의 상태를 요청하고, 동시에 장치에 하나 이상의 홀딩 레지스터를 기록하도록 요청합니다. |
QModbusPdu::ReadFifoQueue | 0x18 | 원격 장치의 FIFO(선입선출) 레지스터 큐의 내용을 읽도록 요청합니다. |
QModbusPdu::EncapsulatedInterfaceTransport | 0x2B | Modbus 사양의 부록 A를 참조하십시오. |
QModbusPdu::UndefinedFunctionCode | 0x100 | 사용하지 마십시오. |
멤버 함수 설명서
[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.