QModbusServer Class

QModbusServer 클래스는 모드버스 요청을 수신하고 처리하는 인터페이스입니다. 더 보기...

헤더: #include <QModbusServer>
CMake: find_package(Qt6 REQUIRED COMPONENTS SerialBus)
target_link_libraries(mytarget PRIVATE Qt6::SerialBus)
qmake: QT += serialbus
상속합니다: QModbusDevice
상속 대상

QModbusRtuSerialServerQModbusTcpServer

공용 유형

enum Option { DiagnosticRegister, ExceptionStatusOffset, DeviceBusy, AsciiInputDelimiter, ListenOnlyMode, …, UserOption }

공용 함수

QModbusServer(QObject *parent = nullptr)
bool data(QModbusDataUnit *newData) const
bool data(QModbusDataUnit::RegisterType table, quint16 address, quint16 *data) const
virtual bool processesBroadcast() const
int serverAddress() const
bool setData(const QModbusDataUnit &newData)
bool setData(QModbusDataUnit::RegisterType table, quint16 address, quint16 data)
virtual bool setMap(const QModbusDataUnitMap &map)
void setServerAddress(int serverAddress)
virtual bool setValue(int option, const QVariant &newValue)
virtual QVariant value(int option) const

Signals

void dataWritten(QModbusDataUnit::RegisterType table, int address, int size)

보호된 함수

virtual QModbusResponse processPrivateRequest(const QModbusPdu &request)
virtual QModbusResponse processRequest(const QModbusPdu &request)
virtual bool readData(QModbusDataUnit *newData) const
virtual bool writeData(const QModbusDataUnit &newData)

상세 설명

모드버스 네트워크에는 여러 개의 모드버스 서버가 있을 수 있습니다. 모드버스 서버는 QModbusClient 로 대표되는 모드버스 클라이언트에 의해 읽기/쓰기됩니다. QModbusServer는 모드버스 백엔드와 통신하여 사용자에게 편리한 API를 제공합니다.

멤버 유형 문서

enum QModbusServer::Option

각 모드버스 서버에는 각각 고유한 옵션과 함께 연결된 값 집합이 있습니다.

범용 옵션(및 관련 유형)은 다음과 같습니다:

상수설명
QModbusServer::DiagnosticRegister0서버의 진단 레지스터입니다. quint16
QModbusServer::ExceptionStatusOffset1서버의 예외 상태 바이트 오프셋입니다. quint16
QModbusServer::DeviceBusy2서버가 장시간 프로그램 명령을 처리 중임을 알리는 플래그입니다. quint16
QModbusServer::AsciiInputDelimiter3메시지 끝의 Modbus ASCII 구분 기호입니다. char
QModbusServer::ListenOnlyMode4서버의 수신 전용 모드를 설정하는 플래그입니다. 이 기능은 일반적으로 모드버스 직렬 장치에서만 지원됩니다. bool
QModbusServer::ServerIdentifier5서버 주소가 아닌 서버의 식별자입니다. quint8
QModbusServer::RunIndicatorStatus6서버의 실행 표시기입니다. quint8
QModbusServer::AdditionalData7서버의 추가 데이터입니다. QByteArray
QModbusServer::DeviceIdentification8서버의 물리적 및 기능적 설명. QModbusDeviceIdentification

사용자 옵션:

상수설명
QModbusServer::UserOption0x100사용자별 목적으로 사용할 수 있는 첫 번째 옵션입니다.

사용자 옵션의 경우, 사용할 유형을 결정하고 컴포넌트가 값에 액세스하고 설정할 때 올바른 유형을 사용하도록 하는 것은 개발자의 몫입니다.

멤버 함수 문서

[explicit] QModbusServer::QModbusServer(QObject *parent = nullptr)

지정된 parent 으로 모드버스 서버를 구축합니다.

bool QModbusServer::data(QModbusDataUnit *newData) const

newData 에 지정된 레지스터 범위의 값을 반환합니다.

newData 유효한 레지스터 유형, 시작 주소 및 valueCount를 제공해야 합니다. 반환된 newData 에는 주어진 범위와 연관된 레지스터 값이 포함됩니다.

newData 에 유효한 레지스터 유형이 포함되어 있지만 시작 주소가 음수인 경우 전체 레지스터 맵이 반환되고 적절한 크기의 newData 이 반환됩니다.

setData()도 참조하세요 .

bool QModbusServer::data(QModbusDataUnit::RegisterType table, quint16 address, quint16 *data) const

모드버스 서버에 저장된 데이터를 읽습니다. 모드버스 서버에는 4개의 테이블(table)이 있으며, 각 테이블에는 고유한 address 필드가 있어 원하는 필드에서 data 를 읽는 데 사용됩니다. 다른 테이블에 대한 자세한 내용은 QModbusDataUnit::RegisterType 을 참조하세요. 주소가 맵 범위를 벗어나거나 등록 유형이 정의되지 않은 경우 false 을 반환합니다.

QModbusDataUnit::RegisterTypesetData()도 참조하세요 .

[signal] void QModbusServer::dataWritten(QModbusDataUnit::RegisterType table, int address, int size)

이 신호는 모드버스 클라이언트가 하나 이상의 데이터 필드를 모드버스 서버에 썼을 때 발생합니다. 이 신호에는 기록된 필드에 대한 정보가 포함됩니다:

  • 기록된 레지스터 유형 (table),
  • address 작성된 첫 번째 필드의
  • address 에서부터 연속적으로 기록된 필드의 size 입니다.

값의 변경이 없어 기록할 필드가 변경되지 않은 경우에는 신호가 발생하지 않습니다.

[virtual protected] QModbusResponse QModbusServer::processPrivateRequest(const QModbusPdu &request)

이 기능은 사용자 지정 모드버스 서버에서 구현해야 합니다. 주어진 request 이 표준 모드버스 요청이 아닌 경우 processRequest()에 의해 호출됩니다.

이 함수를 덮어쓰면 모드버스 애플리케이션 프로토콜 사양 1.1b에 지정되지 않은 추가 기능 코드 및 하위 기능 코드를 처리할 수 있습니다. 재구현 시 이 함수를 다시 호출하여 사용자 지정 모드버스 구현이 처리하지 않는 모든 알 수 없는 기능 코드에 대해 예외 응답이 반환되도록 해야 합니다.

이 기본 구현에서는 request 함수 코드 및 오류 코드가 잘못된 함수로 설정된 QModbusExceptionResponse 을 반환합니다.

processRequest()도 참조하세요 .

[virtual protected] QModbusResponse QModbusServer::processRequest(const QModbusPdu &request)

모드버스 클라이언트 request 를 처리하고 모드버스 응답을 반환합니다. 이 함수는 요청의 성격에 따라 QModbusResponse 또는 QModbusExceptionResponse 을 반환합니다.

이 함수의 기본 구현은 모드버스 애플리케이션 프로토콜 사양 1.1b에 정의된 모든 표준 모드버스 기능 코드를 처리합니다. 사양에 포함되지 않은 다른 모든 Modbus 기능 코드는 processPrivateRequest()로 전달됩니다.

이 함수를 다시 구현하여 표준 모드버스 기능 코드 요청의 기본 처리를 덮어쓸 수 있습니다. 재정의는 해당 요청 유형을 처리하고 적절한 QModbusResponse 을 반환해야 합니다. 일반적인 이유는 데이터 값에 대한 기능 코드 요청을 필터링하여 읽기/쓰기 액세스를 제한하고 이더넷의 직렬 회선 진단 또는 Modbus Plus 전송 계층과 같은 특정 구현에서 원하지 않는 기능 코드를 제한하기 위한 것일 수 있습니다. 다른 모든 요청 유형은 이 기본 구현으로 전달되어야 합니다.

참고: 비표준 Modbus 요청 유형에 대한 사용자 지정 구현을 제공하기 위해 이 함수를 재정의해서는 안 됩니다.

processPrivateRequest()도 참조하세요 .

[virtual] bool QModbusServer::processesBroadcast() const

전송 계층이 브로드캐스트를 처리해야 하는 경우 서브클래스는 이 함수를 구현해야 합니다. 그러면 구현은 현재 처리된 요청이 브로드캐스트 요청인 경우 true 을 반환하고, 그렇지 않으면 false 을 반환해야 합니다. 기본 구현은 항상 false 를 반환합니다.

참고: 이 함수의 반환 값은 processRequest() 또는 processPrivateRequest() 내에서만 의미가 있으며, 그렇지 않으면 마지막으로 처리된 요청이 브로드캐스트 요청이라는 것만 알 수 있습니다.

[virtual protected] bool QModbusServer::readData(QModbusDataUnit *newData) const

newData 에 지정된 등록 범위의 값을 읽고 newData 에 데이터를 다시 씁니다. 성공하면 true 를 반환하고 newData0 이거나 newData 범위가 맵 범위를 벗어나거나 registerType()이 존재하지 않는 경우 false 을 반환합니다.

참고: 기본값이 아닌 다른 백업 스토어에서 읽기를 구현하는 서브클래스도 setMap() 및 writeData()를 구현해야 합니다.

setMap() 및 writeData()도 참조하세요 .

int QModbusServer::serverAddress() const

이 모드버스 서버 인스턴스의 주소를 반환합니다.

setServerAddress()도 참조하세요 .

bool QModbusServer::setData(const QModbusDataUnit &newData)

newData 을 모드버스 서버 맵에 씁니다. newData 범위가 맵 범위를 벗어난 경우 false 을 반환합니다.

호출이 성공하면 dataWritten() 신호가 전송됩니다. 주소가 지정된 레지스터가 변경되지 않은 경우에는 신호가 발생하지 않습니다. newData 에 이미 레지스터와 정확히 동일한 값이 포함되어 있을 때 발생할 수 있습니다. 그럼에도 불구하고 이 함수는 이러한 경우 true 을 반환합니다.

data()도 참조하세요 .

bool QModbusServer::setData(QModbusDataUnit::RegisterType table, quint16 address, quint16 data)

모드버스 서버에 데이터를 씁니다. 모드버스 서버에는 4개의 테이블(table)이 있으며 각 테이블에는 고유한 address 필드가 있어 원하는 필드에 data 을 쓰는 데 사용됩니다. 주소가 지도 범위를 벗어난 경우 false 을 반환합니다.

호출에 성공하면 dataWritten() 신호가 전송됩니다. data 주소가 변경되지 않은 경우에는 신호가 발생하지 않습니다. 그럼에도 불구하고 이 함수는 이러한 경우 true 을 반환합니다.

QModbusDataUnit::RegisterType, data() 및 dataWritten()도 참조하세요 .

[virtual] bool QModbusServer::setMap(const QModbusDataUnitMap &map)

다른 모드버스 클라이언트의 요청에 대해 등록된 맵 구조를 map 로 설정합니다. 등록 값은 0으로 초기화됩니다. 성공하면 true 을 반환하고, 그렇지 않으면 false 을 반환합니다.

연결하기 전에 이 함수를 호출하지 않으면 항목이 0인 기본 레지스터가 설정됩니다.

참고: 이 함수를 호출하면 이전에 설정된 모든 레지스터 값이 삭제됩니다.

void QModbusServer::setServerAddress(int serverAddress)

이 모드버스 서버 인스턴스의 주소를 serverAddress 로 설정합니다.

serverAddress()도 참조하세요 .

[virtual] bool QModbusServer::setValue(int option, const QVariant &newValue)

option 에 대해 newValue 을 설정하고 성공하면 true, 그렇지 않으면 false 을 반환합니다.

참고: 옵션의 연결된 유형이 quint8 또는 quint16 이고 newValue 유형이 더 큰 경우 데이터가 잘리거나 대화가 실패합니다.

설명
QModbusServer::DiagnosticRegister서버의 진단 레지스터를 장치별 인코딩으로 newValue 으로 설정합니다. 기본값은 0x0000 으로 미리 설정되어 있습니다. 레지스터의 비트 값은 기기별 설명서가 필요합니다.
QModbusServer::ExceptionStatusOffset서버의 예외 상태 바이트 오프셋을 코일의 절대 오프셋 주소(0x 레지스터)인 newValue 로 설정합니다. 0x0000h 로 시작하는 모드버스 레지스터 테이블. 기본값으로 사전 설정된 0x0000 은 Modicon 984 CPU(코일 1-8)와 유사한 예외 상태 코일을 사용합니다.

이 함수는 코일 레지스터에 상태 코일을 저장하고 검색하는 데 필요한 8비트가 포함된 경우 true 을 반환하고 그렇지 않으면 false 을 반환합니다.

QModbusServer::DeviceBusy서버가 장시간 프로그램 명령을 처리 중임을 알리는 플래그를 설정합니다. 유효한 값은 0x0000 (사용 중이 아님) 및 0xffff (사용 중)입니다. 기본값 사전 설정은 0x0000 입니다.
QModbusServer::AsciiInputDelimiternewValue 은 향후 Modbus ASCII 메시지의 메시지 구분 기호로 사용됩니다. 기본값 사전 설정은 \n 입니다.
QModbusServer::ListenOnlyMode서버의 수신 대기 상태를 newValue 으로 설정합니다. 수신 대기 모드가 true 으로 설정되어 있으면 메시지는 모니터링되지만 응답은 전송되지 않습니다. 기본값 사전 설정은 false 입니다.
QModbusServer::ServerIdentifier서버의 제조업체 식별자를 newValue 로 설정합니다. 사용 가능한 값은 0x00 ~ 0xff 범위입니다. 기본값 사전 설정은 0x0a 입니다.
QModbusServer::RunIndicatorStatus서버의 실행 표시기 상태를 newValue 로 설정합니다. 이 데이터는 QModbusPdu::ReportServerId 함수 코드에 의해 부록으로 사용됩니다. 유효한 값은 0x00 (꺼짐) 및 0xff (켜짐)입니다. 기본값 사전 설정은 0xff (ON)입니다.
QModbusServer::AdditionalData서버의 추가 데이터를 newValue 로 설정합니다. 이 데이터는 QModbusPdu::ReportServerId 기능 코드에 의해 부록으로 사용됩니다. 응답 메시지 크기 제한에 따라 최대 데이터 크기는 249바이트를 초과할 수 없습니다. 기본값 사전 설정은 Qt Modbus Server 입니다.
QModbusServer::DeviceIdentification서버의 물리적 및 기능적 설명을 설정합니다. 기본적으로 추가 장치 식별 데이터는 설정되어 있지 않습니다.
QModbusServer::UserOption사용자 옵션의 값을 newValue 로 설정합니다.

참고: 사용자 옵션의 경우 사용할 유형을 결정하고 컴포넌트가 값에 액세스하고 설정할 때 올바른 유형을 사용하도록 하는 것은 개발자의 몫입니다.

value()도 참조하세요 .

[virtual] QVariant QModbusServer::value(int option) const

option 값을 반환하거나 옵션이 설정되지 않은 경우 유효하지 않은 QVariant 값을 반환합니다.

옵션설명
QModbusServer::DiagnosticRegister서버의 진단 레지스터 값을 반환합니다. 진단 레지스터에는 각 비트가 특정 의미를 갖는 장치별 내용이 포함되어 있습니다.
QModbusServer::ExceptionStatusOffset코일 레지스터에서 예외 상태 바이트 위치의 오프셋 주소를 반환합니다.
QModbusServer::DeviceBusy서버가 장시간 프로그램 명령을 처리 중인지 여부를 알리는 플래그를 반환합니다.
QModbusServer::AsciiInputDelimiter모드버스 ASCII 메시지의 메시지 끝 구분자를 반환합니다.
QModbusServer::ListenOnlyMode서버의 대기 전용 상태를 반환합니다. 메시지는 모니터링되지만 응답은 전송되지 않습니다.
QModbusServer::ServerIdentifier서버 제조업체의 식별자 코드를 반환합니다. 0x00 ~ 0xff 범위의 임의의 값일 수 있습니다.
QModbusServer::RunIndicatorStatus서버의 실행 표시기 상태를 반환합니다. 이 데이터는 QModbusPdu::ReportServerId 함수 코드에 의해 부록으로 사용됩니다.
QModbusServer::AdditionalData서버의 추가 데이터를 반환합니다. 이 데이터는 QModbusPdu::ReportServerId 함수 코드에 의해 부록으로 사용됩니다.
QModbusServer::DeviceIdentification서버의 물리적 및 기능적 설명을 반환합니다.
QModbusServer::UserOption사용자 옵션의 값을 반환합니다.

참고: 사용자 옵션의 경우 사용할 유형을 결정하고 컴포넌트가 값에 액세스하고 설정할 때 올바른 유형을 사용하도록 하는 것은 개발자의 몫입니다.

setValue()도 참조하세요 .

[virtual protected] bool QModbusServer::writeData(const QModbusDataUnit &newData)

newData 을 모드버스 서버 맵에 씁니다. 성공하면 true, newData 범위가 맵 범위를 벗어나거나 registerType()이 존재하지 않으면 false 을 반환합니다.

참고: 기본값이 아닌 다른 백업 저장소에 쓰기를 구현하는 하위 클래스도 setMap() 및 readData()를 구현해야 합니다. dataWritten () 신호도 함수 구현 내에서 방출해야 합니다.

setMap(), readData() 및 dataWritten()도 참조하세요 .

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