【Qt】QModbusServer类
生活随笔
收集整理的這篇文章主要介紹了
【Qt】QModbusServer类
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
00. 目錄
文章目錄
- 00. 目錄
- 01. 概述
- 02. 開發環境
- 03. 公有類型
- 04. 成員方法
- 05. 信號
- 06. 附錄
01. 概述
QModbusServer類是用于接收和處理Modbus請求的接口。
Header: #include <QModbusServer>qmake: QT += serialbus Since: Qt 5.8 Inherits: QModbusDevice Inherited By: QModbusRtuSerialSlave and QModbusTcpServerModbus網絡可以具有多個Modbus服務器。Modbus服務器由QModbusClient代表的Modbus客戶端讀取/寫入。QModbusServer與Modbus后端通信,為用戶提供了便捷的API。
02. 開發環境
Windows系統:Windows10
Qt版本:Qt5.15或者Qt6
03. 公有類型
enum Option { DiagnosticRegister, ExceptionStatusOffset, DeviceBusy, AsciiInputDelimiter, ListenOnlyMode, …, UserOption }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 | 可以用于用戶特定目的的第一個選項。 |
對于用戶選項,由開發人員決定使用哪種類型,并確保組件在訪問和設置值時使用正確的類型。
04. 成員方法
QModbusServer(QObject *parent = nullptr)用指定的parent構造一個Modbus服務器。bool data(QModbusDataUnit *newData) const返回newData給定的寄存器范圍內的值。newData必須提供有效的寄存器類型,起始地址和valueCount。返回的newData將包含與給定范圍關聯的寄存器值。如果newData包含有效的寄存器類型但起始地址為負,則返回整個寄存器映射,并適當調整newData的大小。bool data(QModbusDataUnit::RegisterType table, quint16 address, quint16 *data) const讀取Modbus服務器中存儲的數據。Modbus服務器具有四個表(table),每個表都有一個唯一的地址字段,該地址字段用于從所需字段讀取數據。有關不同表的更多信息,請參見QModbusDataUnit :: RegisterType。false如果地址超出映射范圍,或者甚至未定義寄存器類型,則返回。virtual bool processesBroadcast() const如果傳輸層應處理廣播,則子類應實現此功能。true如果當前處理的請求是廣播請求,則實現應返回;否則,返回。否則false。默認實現始終返回false。注意:此函數的返回值僅在processRequest()或processPrivateRequest()內部有意義,否則只能告訴最后處理的請求是廣播請求。int serverAddress() const返回此Mobus服務器實例的地址。bool setData(const QModbusDataUnit &newData)將newData寫入Modbus服務器映射。false如果newData范圍不在地圖范圍內,則返回。如果調用成功,則發出dataWritten()信號。請注意,當尋址的寄存器未更改時,不會發射信號。當newData包含與寄存器已經完全 相同的值時,可能會發生這種情況。盡管如此,true在這種情況下該函數仍會返回。bool setData(QModbusDataUnit::RegisterType table, quint16 address, quint16 data)將數據寫入Modbus服務器。Modbus服務器具有四個表(table),每個表都有一個唯一的地址字段,該地址字段用于將數據寫入所需的字段。返回false地址是否在地圖范圍之外。如果調用成功,則發出dataWritten()信號。請注意,當數據未更改時,不會發射信號。盡管如此,true在這種情況下該函數仍會返回。virtual bool setMap(const QModbusDataUnitMap &map)設置注冊的映射結構,以供其他ModBus客戶端請求映射。寄存器值初始化為零。true成功回報;否則false。如果在連接之前未調用此函數,則會設置一個零條目的默認寄存器。注意:調用此函數將丟棄先前設置的任何寄存器值。void setServerAddress(int serverAddress)將此Modbus服務器實例的地址設置為serverAddress。virtual bool setValue(int option, const QVariant &newValue)設置NEWVALUE的選項和返回true成功; false除此以外。virtual QVariant value(int option) const返回選項的值,QVariant如果未設置選項,則返回無效值。virtual QModbusResponse processPrivateRequest(const QModbusPdu &request)此功能應由定制Modbus服務器實現。如果給定的請求不是標準的Modbus請求,則由processRequest()調用。覆蓋此功能可處理未在Modbus應用協議規范1.1b中指定的其他功能代碼和子功能代碼。重新實現應再次調用此函數,以確保針對 自定義Modbus實現不處理的所有未知函數代碼返回異常響應。此默認實現返回QModbusExceptionResponse,其中請求功能代碼和錯誤代碼設置為非法功能。virtual QModbusResponse processRequest(const QModbusPdu &request)處理Modbus客戶端請求并返回Modbus響應。此函數根據請求的性質返回QModbusResponse或QModbusExceptionResponse。該功能的默認實現處理Modbus應用協議規范1.1b定義的所有標準Modbus功能代碼。規范中未包括的所有其他Modbus功能代碼均 轉發至processPrivateRequest()。通過重新實現此功能,可以覆蓋標準Modbus功能代碼請求的默認處理。重寫必須處理有問題的請求類型,并返回適當的 QModbusResponse。一個常見的原因可能是過濾掉對數據值的功能代碼請求,以限制讀/寫訪問和特定實現(例如,以太網 或Modbus Plus傳輸層上的串行線路診斷)所不需要的功能代碼。其他所有請求類型都應轉發到此默認實現。注意:不應重寫此功能,以為非標準Modbus請求類型提供自定義實現。virtual bool readData(QModbusDataUnit *newData) const讀取newData給定的寄存器范圍內的值,并將數據寫回到newData。true成功返回,或者false如果newData為0,則返回newData范圍超出映射范圍,或者registerType()不存在。注意:實現從其他后備存儲讀取(然后從默認后備存儲讀取)的子類也需要實現setMap()和writeData()。virtual bool writeData(const QModbusDataUnit &newData) 將newData寫入Modbus服務器映射。返回true表示成功,或false如果newData范圍是地圖范圍或registerType()之外不存在。注意:實現寫入不同后備存儲(然后是默認后備存儲)的子類也需要實現setMap()和readData()。所述dataWritten()信號需要 從功能執行內部以及發射。05. 信號
void dataWritten(QModbusDataUnit::RegisterType table, int address, int size)當Modbus客戶端已將一個或多個數據字段寫入Modbus服務器時,將發出此信號。該信號包含有關已寫入字段的信息:寫入的寄存器類型(表),寫入的第一個字段的地址,和從address開始寫入的連續字段的大小。當待寫入字段由于值不變而沒有變化時,不發射信號。06. 附錄
6.1 Qt教程匯總
網址:https://dengjin.blog.csdn.net/article/details/115174639
總結
以上是生活随笔為你收集整理的【Qt】QModbusServer类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Qt】QModbusRtuSerial
- 下一篇: 【Qt】QModbusTcpClient