【Qt】QModbusPdu类
00. 目錄
文章目錄
- 00. 目錄
- 01. 概述
- 02. 開發環境
- 03. 公有類型
- 04. 成員方法
- 05. 成員變量
- 06. 附錄
01. 概述
QModbusPdu是一個抽象的容器類,其中包含存儲在Modbus ADU中的功能代碼和數據。
該類提供對Modbus應用協議規范1.1b所定義的原始Modbus協議數據包的訪問。
Header: #include
qmake: QT += serialbus
Since: Qt 5.8
Inherited By: QModbusRequest and QModbusResponse
02. 開發環境
Windows系統:Windows10
Qt版本:Qt5.15或者Qt6
03. 公有類型
enum ExceptionCode { IllegalFunction, IllegalDataAddress, IllegalDataValue, ServerDeviceFailure, Acknowledge, …,ExtendedException }enum FunctionCode { Invalid, ReadCoils, ReadDiscreteInputs, ReadHoldingRegisters, ReadInputRegisters, …, UndefinedFunctionCode }enum QModbusPdu::ExceptionCode
該枚舉描述了Modbus異常代碼所定義的所有可能的錯誤情況。服務器在檢查對請求的答復中的適當錯誤條件之后,會設置它們,并且必須由客戶端進行解碼才能對異常代碼進行操作。
| QModbusPdu::IllegalFunction | 0x01 | 設備不支持功能代碼。 |
| QModbusPdu::IllegalDataAddress | 0x02 | 查詢中收到的數據地址不是Modbus服務器允許的地址。 |
| 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 | 請求設備上八個異常狀態輸出的狀態。 |
| 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 | 請參考Modbus規范的附件A。 |
| QModbusPdu::UndefinedFunctionCode | 0x100 | 不使用。 |
04. 成員方法
公有成員方法
QModbusPdu() 構造一個無效的QModbusPdu。virtual ~QModbusPdu()析構函數QByteArray data() const返回PDU的有效數據,不包括功能代碼。有效數據以大端字節順序存儲。qint16 dataSize() const返回PDU的數據大小,不包括功能碼。 void 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);void encodeData(Args... data)將有效數據設置為data。數據被轉換并以大端字節順序存儲。 QModbusRequestPdu request(QModbusPdu::ReadCoils);// starting address and quantity of coilsrequest.encodeData(quint16(0x0c), quint16(0x0a));QModbusPdu::ExceptionCode exceptionCode() const返回響應的異常代碼。 QModbusPdu::FunctionCode functionCode() const返回PDU的功能碼。 bool isException() const如果PDU包含異常代碼,則返回true;否則,返回false。 bool isValid() const如果PDU有效,則返回true;否則,返回true。 如果消息代碼在1到255的十進制范圍內,并且PDU的復合大小(功能代碼+數據)不超過253個字節,則認為PDU有效。默認構造的PDU無效。void setData(const QByteArray &data)將PDU的功能有效數據設置為data。數據應該已經按大端字節順序存儲。 virtual void setFunctionCode(QModbusPdu::FunctionCode code)將PDU的功能代碼設置為code。 qint16 size() const返回PDU的完整大小,包括功能代碼和數據大小。受保護成員方法
QModbusPdu(const QModbusPdu &other) 構造一個QModbusPdu是副本等。QModbusPdu(QModbusPdu::FunctionCode code, const QByteArray &data) 構造一個QModbusPdu,其功能碼設置為code,數據設置為data。數據應該已經按大端字節順序存儲。QModbusPdu &operator=(const QModbusPdu &other) 使得副本等,并為其指派該QModbusPdu對象。05. 成員變量
const quint8 QModbusPdu::ExceptionByte
該變量初始化為0x80。
異常以定義的數據包格式報告。除了設置了最高有效位以外,其他功能代碼均與原始功能代碼一樣返回給請求的客戶端。這等效于在原始功能代碼的值上加上0x80。
該字段可用于屏蔽原始Modbus數據包功能字段中的異常位。
06. 附錄
6.1 Qt教程匯總
網址:https://dengjin.blog.csdn.net/article/details/115174639
總結
以上是生活随笔為你收集整理的【Qt】QModbusPdu类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Qt】QModbusException
- 下一篇: 【Qt】QModbusReply类