QModbusPdu Class
QModbusPdu는 모드버스 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
이 열거형은 모드버스 예외 코드에 정의된 모든 가능한 오류 조건을 설명합니다. 서버는 요청에 대한 응답에서 적절한 오류 조건을 확인한 후 설정하며, 예외 코드를 작동하려면 클라이언트에서 디코딩해야 합니다.
상수 | 값 | 설명 |
---|---|---|
QModbusPdu::IllegalFunction | 0x01 | 디바이스에서 지원하지 않는 기능 코드입니다. |
QModbusPdu::IllegalDataAddress | 0x02 | 쿼리에서 수신된 데이터 주소가 모드버스 서버에 허용되는 주소가 아닙니다. |
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 | 모드버스 사양의 부록 A를 참조하세요. |
QModbusPdu::UndefinedFunctionCode | 0x100 | 사용하지 마세요. |
멤버 기능 문서
[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);
참고: 사용은 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가 유효하면 참을 반환하고, 그렇지 않으면 거짓을 반환합니다.
메시지 코드가 소수점 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)
stream 에 pdu 을 작성하고 스트림에 대한 참조를 반환합니다.
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.