Класс QModbusRequest
QModbusRequest — это контейнерный класс, содержащий код функции и полезную нагрузку, хранящиеся внутри Modbus ADU. Подробнее...
| Заголовок: | #include <QModbusRequest> |
| qmake: | QT += serialbus |
| С момента: | Qt 5.8 |
| Наследует: | QModbusPdu |
Открытые функции
| QModbusRequest() = default | |
| QModbusRequest(const QModbusPdu &pdu) | |
| QModbusRequest(FunctionCode code, const QByteArray &data = QByteArray()) | |
| QModbusRequest(FunctionCode code, Args... data) |
- 11 открытых функций унаследовано от QModbusPdu
Статические открытые члены
| int | calculateDataSize(const QModbusRequest &request) |
| int | minimumDataSize(const QModbusRequest &request) |
| void | registerDataSizeCalculator(FunctionCode fc, CalcFuncPtr calculator) |
- 1 статический открытый член унаследован от QModbusPdu
Связанные нечлены
| QDataStream & | operator>>(QDataStream &stream, QModbusRequest &pdu) |
Дополнительные унаследованные члены
- 1 защищенная функция унаследована от QModbusPdu
Подробное описание
QModbusRequest — это контейнерный класс, содержащий код функции и полезную нагрузку, хранящиеся внутри Modbus ADU.
Запрос Modbus обычно состоит из одного байта, описывающего FunctionCode и N байтов полезной нагрузки
Типичный запрос Modbus может выглядеть так:
QModbusRequest request(QModbusRequest::WriteMultipleCoils,
QByteArray::fromHex("0013000a02cd01")); Примечание: При использовании конструктора, принимающего QByteArray, убедитесь, что содержащие данные преобразованы в порядок байтов big-endian перед созданием запроса.
Тот же запрос можно создать так, если значения известны во время компиляции:
quint16 startAddress = 19, numberOfCoils = 10;
quint8 payloadInBytes = 2, outputHigh = 0xcd, outputLow = 0x01;
QModbusRequest request(QModbusRequest::WriteMultipleCoils, startAddress, numberOfCoils,
payloadInBytes, outputHigh, outputLow); Документация по функциям-членам
[default] QModbusRequest::QModbusRequest()
Создает недействительный QModbusRequest.
QModbusRequest::QModbusRequest(const QModbusPdu &pdu)
Создаёт копию pdu.
QModbusRequest::QModbusRequest(FunctionCode code, const QByteArray &data = QByteArray())
Создает QModbusResponse с кодом функции, установленным в code, и полезной нагрузкой, установленной в data. Ожидается, что данные уже хранятся в порядке байтов big-endian.
QModbusRequest::QModbusRequest(FunctionCode code, Args... data)
Создает QModbusRequest с кодом функции, установленным в code, и полезной нагрузкой, установленной в data. Данные преобразуются и хранятся в порядке байтов big-endian.
Примечание: Использование ограничено quint8 и quint16 только. Это связано с тем, что QDataStream операторы потоков не будут просто добавлять сырые данные, но также, например, размер, количество и т.д. для сложных типов.
[static] int QModbusRequest::calculateDataSize(const QModbusRequest &request)
Вычисляет ожидаемый размер данных для request, основываясь на коде функции запроса и данных. Возвращает полный размер части данных запроса; -1 если размер не может быть правильно вычислен.
См. также minimumDataSize и registerDataSizeCalculator.
[static] int QModbusRequest::minimumDataSize(const QModbusRequest &request)
Возвращает ожидаемый минимальный размер данных для request, основываясь на коде функции запроса; -1 если код функции неизвестен.
[static] void QModbusRequest::registerDataSizeCalculator(FunctionCode fc, CalcFuncPtr calculator)
Эта функция регистрирует пользовательскую реализацию для вычисления размера данных запроса для кода функции fc. Она может быть использована для расширения или переопределения реализации внутри QModbusRequest::calculateDataSize().
Тип CalcFuncPtr — это псевдоним для указателя на пользовательскую функцию calculator со следующим сигнатуром:
int myCalculateDataSize(const QModbusRequest &pdu);
Связанные нечлены
QDataStream &operator>>(QDataStream &stream, QModbusRequest &pdu)
Читает pdu из stream и возвращает ссылку на поток.
Примечание: Функция может некорректно обрабатывать PDU с кодом функции QModbusPdu::Diagnostics или QModbusPdu::EncapsulatedInterfaceTransport из-за отсутствия указателя размера внутри PDU. В частности, это может произойти, когда PDU встроено в поток, который не заканчивается самим диагностическим/инкапсулированным запросом.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.9/qmodbusrequest.html