QModbusServer Class
QModbusServer 클래스는 Modbus 요청을 수신하고 처리하는 인터페이스입니다. 더 보기...
| 헤더: | #include <QModbusServer> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS SerialBus) target_link_libraries(mytarget PRIVATE Qt6::SerialBus) |
| qmake: | QT += serialbus |
| 상속: | QModbusDevice |
| 상속받는 항목: |
공개 유형
| 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 |
신호
| 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) |
상세 설명
Modbus 네트워크에는 여러 Modbus 서버가 있을 수 있습니다. Modbus 서버는 QModbusClient 로 표현되는 Modbus 클라이언트에 의해 읽기/쓰기 작업이 수행됩니다. QModbusServer는 Modbus 백엔드와 통신하여 사용자에게 편리한 API를 제공합니다.
멤버 유형 문서
enum QModbusServer::Option
각 Modbus 서버에는 일련의 값이 할당되어 있으며, 각 값에는 고유한 옵션이 있습니다.
일반적인 용도의 옵션(및 관련 유형)은 다음과 같습니다:
| 상수 | 값 | 설명 |
|---|---|---|
QModbusServer::DiagnosticRegister | 0 | 서버의 진단 레지스터입니다. quint16 |
QModbusServer::ExceptionStatusOffset | 1 | 서버의 예외 상태 바이트 오프셋입니다. quint16 |
QModbusServer::DeviceBusy | 2 | 서버가 장시간 지속되는 프로그램 명령을 처리 중임을 나타내는 플래그. quint16 |
QModbusServer::AsciiInputDelimiter | 3 | Modbus ASCII 메시지 끝 구분자. char |
QModbusServer::ListenOnlyMode | 4 | 서버의 수신 전용 모드를 설정하는 플래그. 이 기능은 일반적으로 Modbus 직렬 장치에서만 지원됩니다. bool |
QModbusServer::ServerIdentifier | 5 | 서버 주소가 아닌 서버의 식별자입니다. quint8 |
QModbusServer::RunIndicatorStatus | 6 | 서버의 실행 표시기. quint8 |
QModbusServer::AdditionalData | 7 | 서버의 추가 데이터. QByteArray |
QModbusServer::DeviceIdentification | 8 | 서버에 대한 물리적 및 기능적 설명. QModbusDeviceIdentification |
사용자 옵션:
| 상수 | 값 | 설명 |
|---|---|---|
QModbusServer::UserOption | 0x100 | 사용자별 목적으로 사용할 수 있는 첫 번째 옵션입니다. |
사용자 옵션의 경우, 어떤 유형을 사용할지 결정하고, 컴포넌트가 값에 접근하거나 설정할 때 올바른 유형을 사용하도록 보장하는 것은 개발자의 몫입니다.
멤버 함수 문서
[explicit] QModbusServer::QModbusServer(QObject *parent = nullptr)
지정된 parent 를 사용하여 Modbus 서버를 생성합니다.
bool QModbusServer::data(QModbusDataUnit *newData) const
newData 로 지정된 레지스터 범위의 값을 반환합니다.
newData 유효한 레지스터 유형, 시작 주소 및 valueCount를 반드시 지정해야 합니다. 반환된 newData 에는 지정된 범위에 해당하는 레지스터 값들이 포함됩니다.
newData 에 유효한 레지스터 유형이 포함되어 있지만 시작 주소가 음수인 경우, 전체 레지스터 맵이 반환되며 ` newData `의 크기는 이에 맞게 조정됩니다.
setData()도 참조하십시오 .
bool QModbusServer::data(QModbusDataUnit::RegisterType table, quint16 address, quint16 *data) const
Modbus 서버에 저장된 데이터를 읽습니다. Modbus 서버에는 네 개의 테이블(table)이 있으며, 각 테이블에는 고유한 ‘ address ’ 필드가 있습니다. 이 필드는 원하는 필드의 ‘ data ’를 읽는 데 사용됩니다. 각 테이블에 대한 자세한 내용은 QModbusDataUnit::RegisterType 을 참조하십시오. 주소가 맵 범위를 벗어났거나 레지스터 유형이 정의되지 않은 경우 ‘ false ’를 반환합니다.
QModbusDataUnit::RegisterType 및 setData()함수도 참조하십시오 .
[signal] void QModbusServer::dataWritten(QModbusDataUnit::RegisterType table, int address, int size)
이 신호는 Modbus 클라이언트가 Modbus 서버에 하나 이상의 데이터 필드를 기록한 경우 전송됩니다. 이 신호에는 기록된 필드에 대한 정보가 포함되어 있습니다:
- 쓰여진 레지스터 유형(table),
- address 쓰여진 첫 번째 필드의 레지스터 번호,
- address 부터 시작하여 순차적으로 기록된 필드의 size.
값의 변경이 없어 기록 대상 필드가 변경되지 않은 경우에는 이 신호가 발생하지 않습니다.
[virtual protected] QModbusResponse QModbusServer::processPrivateRequest(const QModbusPdu &request)
이 함수는 사용자 정의 Modbus 서버에서 구현해야 합니다. 지정된 함수 코드( request )가 표준 Modbus 요청이 아닌 경우, ` processRequest()`에 의해 이 함수가 호출됩니다.
이 함수를 재정의하면 Modbus 애플리케이션 프로토콜 사양 1.1b에 명시되지 않은 추가 기능 코드 및 하위 기능 코드를 처리할 수 있습니다. 재구현 시에는 사용자 정의 Modbus 구현에서 처리하지 않는 모든 알 수 없는 기능 코드에 대해 예외 응답이 반환되도록 이 함수를 다시 호출해야 합니다.
이 기본 구현은 request 함수 코드와 오류 코드를 '불법 함수'로 설정한 QModbusExceptionResponse 를 반환합니다.
processRequest()도 참조하십시오 .
[virtual protected] QModbusResponse QModbusServer::processRequest(const QModbusPdu &request)
Modbus 클라이언트 request 를 처리하고 Modbus 응답을 반환합니다. 이 함수는 요청의 유형에 따라 QModbusResponse 또는 QModbusExceptionResponse 를 반환합니다.
이 함수의 기본 구현은 Modbus 애플리케이션 프로토콜 사양 1.1b에 정의된 모든 표준 Modbus 함수 코드를 처리합니다. 사양에 포함되지 않은 그 외의 모든 Modbus 함수 코드는 processPrivateRequest()로 전달됩니다.
이 함수를 재구현하여 표준 Modbus 기능 코드 요청에 대한 기본 처리를 재정의할 수 있습니다. 재정의된 함수는 해당 요청 유형을 처리하고 적절한 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 를 반환하고, newData 가 0 인 경우, newData 범위가 맵 범위를 벗어난 경우, 또는 registerType()이 존재하지 않는 경우에는 false 를 반환합니다.
setMap() 및 writeData()도 참조하십시오 .
int QModbusServer::serverAddress() const
이 Modbus 서버 인스턴스의 주소를 반환합니다.
setServerAddress()도 참조하십시오 .
bool QModbusServer::setData(const QModbusDataUnit &newData)
Modbus 서버 맵에 ` newData `를 기록합니다. ` newData ` 범위가 맵 범위를 벗어날 경우 ` false `를 반환합니다.
호출이 성공하면 dataWritten() 신호가 발생합니다. 주소가 지정된 레지스터의 값이 변경되지 않은 경우에는 신호가 발생하지 않는다는 점에 유의하십시오. 이는 newData 에 레지스터와 정확히 동일한 값이 포함되어 있는 경우에 발생할 수 있습니다. 그럼에도 불구하고 이 함수는 이러한 경우에도 true 을 반환합니다.
data()도 참조하십시오 .
bool QModbusServer::setData(QModbusDataUnit::RegisterType table, quint16 address, quint16 data)
Modbus 서버에 데이터를 기록합니다. Modbus 서버에는 네 개의 테이블(table)이 있으며, 각 테이블에는 고유한 address 필드가 있어, 이를 통해 data 를 원하는 필드에 기록할 수 있습니다. 주소가 맵 범위를 벗어날 경우 false 를 반환합니다.
호출이 성공하면 dataWritten() 신호가 발생합니다. data 가 변경되지 않은 경우에는 신호가 발생하지 않는다는 점에 유의하십시오. 그럼에도 불구하고 이 함수는 이러한 경우에도 true 를 반환합니다.
QModbusDataUnit::RegisterType, data(), dataWritten()도 참조하십시오 .
[virtual] bool QModbusServer::setMap(const QModbusDataUnitMap &map)
다른 ModBus 클라이언트로부터의 요청에 대해 등록된 맵 구조를 ` map`로 설정합니다. 레지스터 값은 0으로 초기화됩니다. 성공 시 ` true `를 반환하고, 그렇지 않은 경우 ` false`를 반환합니다.
연결 전에 이 함수를 호출하지 않으면, 항목이 없는 기본 레지스터가 설정됩니다.
참고: 이 함수를호출하면 이전에 설정된 모든 레지스터 값이 삭제됩니다.
void QModbusServer::setServerAddress(int serverAddress)
이 Modbus 서버 인스턴스의 주소를 serverAddress 로 설정합니다.
serverAddress()도 참조하십시오 .
[virtual] bool QModbusServer::setValue(int option, const QVariant &newValue)
option 의 newValue 을 설정하고, 성공 시 true 을 반환하며, 그렇지 않은 경우 false 을 반환합니다.
참고: 옵션과 연관된 유형이 quint8 또는 quint16 이고, newValue 의 유형이 더 큰경우 , 데이터가 잘리거나 변환이 실패합니다.
| 키 | 설명 |
|---|---|
| QModbusServer::DiagnosticRegister | 서버의 진단 레지스터를 장치별 인코딩으로 newValue 로 설정합니다. 기본값은 0x0000 입니다. 레지스터의 비트 값은 장치별 설명서를 참조해야 합니다. |
| QModbusServer::ExceptionStatusOffset | 서버의 예외 상태 바이트 오프셋을 newValue 로 설정합니다. 이는 코일(0x 레지스터) 내의 절대 오프셋 주소입니다. Modbus 레지스터 테이블은 0x0000h 로 시작합니다. 기본값은 0x0000 이며, Modicon 984 CPU(코일 1-8)와 유사한 예외 상태 코일을 사용합니다.이 함수는 코일 레지스터에 상태 코일을 저장하고 검색하는 데 필요한 8비트가 포함되어 있으면 |
| QModbusServer::DeviceBusy | 서버가 장시간 소요되는 프로그램 명령을 처리 중임을 나타내는 플래그를 설정합니다. 유효한 값은 0x0000 (비바쁨) 및 0xffff (바쁨)입니다. 기본값은 0x0000 입니다. |
| QModbusServer::AsciiInputDelimiter | newValue 는 향후 Modbus ASCII 메시지의 메시지 종료 구분자로 사용됩니다. 기본값은 \n 입니다. |
| QModbusServer::ListenOnlyMode | 서버의 수신 전용 상태를 newValue 로 설정합니다. 수신 전용 모드가 true 로 설정된 경우, 메시지는 모니터링되지만 응답은 전송되지 않습니다. 기본값은 false 입니다. |
| QModbusServer::ServerIdentifier | 서버의 제조업체 식별자를 newValue 로 설정합니다. 가능한 값은 0x00 에서 0xff 사이의 범위입니다. 기본값은 0x0a 입니다. |
| QModbusServer::RunIndicatorStatus | 서버의 실행 표시기 상태를 newValue 로 설정합니다. 이 데이터는 QModbusPdu::ReportServerId 기능 코드에 의해 부가 정보로 사용됩니다. 유효한 값은 0x00 (OFF) 및 0xff (ON)입니다. 기본값은 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 | Modbus 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)
Modbus 서버 맵에 ` newData `를 기록합니다. 성공 시 ` true `를 반환하고, ` newData ` 범위가 맵 범위를 벗어났거나 `registerType()`이 존재하지 않는 경우 ` false `를 반환합니다.
참고: 기본 백킹 스토어와 다른 백킹 스토어에 쓰기 기능을 구현하는서브클래스도 setMap() 및 readData()을 구현해야 합니다. 또한 dataWritten() 신호는 해당 함수 구현 내부에서 발생시켜야 합니다.
setMap(), readData(), dataWritten()도 참조하십시오 .
© 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.