Класс QModbusPdu
QModbusPdu — это абстрактный контейнерный класс, содержащий код функции и полезную нагрузку, хранящиеся внутри Modbus ADU. Подробнее...
| Заголовок: | #include <QModbusPdu> |
| qmake: | QT += serialbus |
| С момента: | Qt 5.8 |
| Наследуется: |
Открытые типы
| перечисление | КодИсключения { НезаконнаяФункция, НезаконныйАдресДанных, НезаконноеЗначениеДанных, НеисправностьУстройстваСервера, Подтверждение, …, РасширенноеИсключение } |
| перечисление | КодФункции { Недействительный, ЧтениеОбмоток, ЧтениеДискретныхВходов, ЧтениеРегистровЗадержания, ЧтениеРегистровВхода, …, НеопределенныйКодФункции } |
Открытые функции
| QModbusPdu() | |
| виртуальный | ~QModbusPdu() |
| QByteArray | data() const |
| qint16 | размерДанных() const |
| void | decodeData(Args &&... data) const |
| void | encodeData(Args... data) |
| QModbusPdu::КодИсключения | кодИсключения() const |
| QModbusPdu::КодФункции | кодФункции() const |
| bool | исключение() const |
| bool | действительно() const |
| void | установитьДанные(const QByteArray &data) |
| виртуальный void | установитьКодФункции(QModbusPdu::КодФункции code) |
| qint16 | размер() const |
Статические открытые члены
| const quint8 | БайтИсключения |
Защищенные функции
| QModbusPdu(const QModbusPdu &other) | |
| QModbusPdu(QModbusPdu::КодФункции code, const QByteArray &data) | |
| QModbusPdu & | operator=(const QModbusPdu &other) |
Связанные нечлены
| QDebug | operator<<(QDebug debug, const QModbusPdu &pdu) |
| QDataStream & | operator<<(QDataStream &stream, const QModbusPdu &pdu) |
Подробное описание
Класс предоставляет доступ к сырым пакетам протокола Modbus, как определено в спецификации протокола Modbus Application Protocol 1.1b.
Документация по типам членов
перечисление QModbusPdu::КодИсключения
Это перечисление описывает все возможные ошибки, как определено кодами исключений 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. Обычно этот код используется для описания исключения, которое в противном случае описывается более подробно. |
перечисление QModbusPdu::КодФункции
Определяет код функции и неявный тип действия, требуемого от сервера. Не все 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 |
Запрос изменения содержимого указанного регистра хранения с помощью комбинации маски ИЛИ или И, и текущего содержимого регистра. |
QModbusPdu::ReadWriteMultipleRegisters |
0x17 |
Запрос состояния одного или нескольких регистров хранения и одновременной записи одного или нескольких регистров хранения на устройстве. |
QModbusPdu::ReadFifoQueue |
0x18 |
Запрос чтения содержимого очереди «первый вошёл — первый вышел» (FIFO) регистра в удалённом устройстве. |
QModbusPdu::EncapsulatedInterfaceTransport |
0x2B |
См. Приложение А спецификации Modbus. |
QModbusPdu::UndefinedFunctionCode |
0x100 |
Не использовать. |
Документация по функциям-членам
[protected] QModbusPdu::QModbusPdu(const QModbusPdu &other)
Создаёт QModbusPdu, являющийся копией other.
[protected] QModbusPdu::QModbusPdu(QModbusPdu::FunctionCode code, const QByteArray &data)
Создаёт QModbusPdu с кодом функции, установленным в code, и полезной нагрузкой, установленной в data. Данные предполагается уже хранятся в порядке байт большого эндиана.
QModbusPdu::QModbusPdu()
Создаёт невалидный QModbusPdu.
[protected] QModbusPdu &QModbusPdu::operator=(const QModbusPdu &other)
Создаёт копию other и присваивает её этому объекту QModbusPdu.
[virtual] QModbusPdu::~QModbusPdu()
Удаляет QModbusPdu.
QByteArray QModbusPdu::data() const
Возвращает полезную нагрузку PDU, за исключением кода функции. Полезная нагрузка хранится в порядке байт большого эндиана.
См. также setData().
qint16 QModbusPdu::dataSize() const
Возвращает размер данных PDU, за исключением кода функции.
template <typename Args> void QModbusPdu::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);
Примечание: Использование ограничено quint8 и quint16 только. Это связано с тем, что QDataStream операторы потока не только будут добавлять сырые данные, но также, например, размер, счёт и т.д. для сложных типов.
template <typename Args> void QModbusPdu::encodeData(Args... data)
Устанавливает полезную нагрузку в data. Данные преобразуются и хранятся в порядке байт большого эндиана.
QModbusRequestPdu request(QModbusPdu::ReadCoils); // starting address and quantity of coils request.encodeData(quint16(0x0c), quint16(0x0a));
Примечание: Использование ограничено quint8 и quint16 только. Это связано с тем, что QDataStream операторы потока не только будут добавлять сырые данные, но также, например, размер, счёт и т.д. для сложных типов.
QModbusPdu::ExceptionCode QModbusPdu::exceptionCode() const
Возвращает код исключения ответа.
QModbusPdu::FunctionCode QModbusPdu::functionCode() const
Возвращает код функции PDU.
См. также setFunctionCode().
bool QModbusPdu::isException() const
Возвращает true, если PDU содержит код исключения; в противном случае false.
bool QModbusPdu::isValid() const
Возвращает true, если PDU валиден; в противном случае false.
PDU считается валидным, если код сообщения находится в диапазоне от 1 до 255 в десятичной системе, а составной размер PDU (код функции + данные) не превышает 253 байта. Установленный по умолчанию PDU невалиден.
void QModbusPdu::setData(const QByteArray &data)
Устанавливает полезную нагрузку функции PDU в data. Данные предполагается уже хранятся в порядке байт большого эндиана.
См. также data().
[virtual] void QModbusPdu::setFunctionCode(QModbusPdu::FunctionCode code)
Устанавливает код функции PDU в code.
См. также functionCode().
qint16 QModbusPdu::size() const
Возвращает полный размер PDU, включая код функции и размер данных.
Документация по переменным-членам
const quint8 QModbusPdu::ExceptionByte
Переменная инициализируется значением 0x80.
Исключения сообщаются в определённом формате пакета. Клиенту-запрашивателю возвращается код функции, равный исходному коду функции, за исключением того, что его старший бит установлен. Это эквивалентно добавлению 0x80 к значению исходного кода функции.
Это поле может использоваться для маскировки бита исключения в поле кода функции в сыром пакете Modbus.
Связанные нечлены
QDebug operator<<(QDebug debug, const QModbusPdu &pdu)
Записывает Modbus pdu в поток debug.
QDataStream &operator<<(QDataStream &stream, const QModbusPdu &pdu)
Записывает pdu в stream и возвращает ссылку на поток.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qmodbuspdu.html