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