Класс QModbusPdu
QModbusPdu — это абстрактный контейнерный класс, содержащий код функции и полезную нагрузку, хранящиеся внутри Modbus ADU. Подробнее...
| Заголовок: | #include <QModbusPdu> |
| qmake: | QT += serialbus |
| С момента: | Qt 5.6 |
| Наследуется от: |
Типы
| перечисление | ExceptionCode { НезаконнаяФункция, НезаконныйАдресДанных, НезаконноеЗначениеДанных, СбойУстройстваСервера, ..., РасширенноеИсключение } |
| перечисление | FunctionCode { Недействительно, ЧтениеОбмоток, ЧтениеДискретныхВходов, ЧтениеРегистровЗадержки, ..., НеопределенныйКодФункции } |
Открытые функции
| QModbusPdu() = default | |
| virtual | ~QModbusPdu() = default |
| QByteArray | data() const |
| qint16 | dataSize() const |
| void | decodeData(Args &&... data) const |
| void | encodeData(Args... data) |
| ExceptionCode | exceptionCode() const |
| FunctionCode | functionCode() const |
| bool | isException() const |
| bool | isValid() const |
| void | setData(const QByteArray &data) |
| virtual void | setFunctionCode(FunctionCode code) |
| qint16 | size() const |
Статические открытые члены
| const quint8 | ExceptionByte = 0x80 |
Защищенные функции
| QModbusPdu(FunctionCode code, const QByteArray &data) | |
| QModbusPdu(const QModbusPdu &other) = default | |
| QModbusPdu & | operator=(const QModbusPdu &other) = default |
Связанные внешние члены
| QDebug | operator<<(QDebug debug, const QModbusPdu &pdu) |
| QDataStream & | operator<<(QDataStream &stream, const QModbusPdu &pdu) |
Подробное описание
QModbusPdu — это абстрактный контейнерный класс, содержащий код функции и полезную нагрузку, хранящиеся внутри Modbus ADU.
Класс предоставляет доступ к сырым пакетам протокола Modbus, как определено в Спецификации протокола Modbus Application Protocol 1.1b.
Документация по типу члена
перечисление 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. В целом этот код используется для описания исключения, которое в противном случае описывается более подробно. |
перечисление 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 |
Запрос на изменение содержимого указанного регистра хранения с использованием комбинации маски ИЛИ или И, и текущего содержимого регистра. |
QModbusPdu::ReadWriteMultipleRegisters |
0x17 |
Запрос состояния одного или нескольких регистров хранения и одновременной записи одного или нескольких регистров хранения на устройстве. |
QModbusPdu::ReadFifoQueue |
0x18 |
Запрос на чтение содержимого очереди FIFO (First-In-First-Out) регистров в удалённом устройстве. |
QModbusPdu::EncapsulatedInterfaceTransport |
0x2B |
См. Приложение А спецификации Modbus. |
QModbusPdu::UndefinedFunctionCode |
0x100 |
Не использовать. |
Документация по функциям-членам
[default] QModbusPdu::QModbusPdu()
Создаёт невалидный QModbusPdu.
[protected] QModbusPdu::QModbusPdu(FunctionCode code, const QByteArray &data)
Создаёт QModbusPdu с кодом функции, установленным в code, и полезной нагрузкой, установленной в data. Ожидается, что данные уже хранятся в формате big-endian.
[default protected] QModbusPdu::QModbusPdu(const QModbusPdu &other)
Создаёт QModbusPdu, который является копией other.
[default] QModbusPdu::~QModbusPdu()
Удаляет QModbusPdu.
QByteArray QModbusPdu::data() const
Возвращает полезную нагрузку PDU, исключая код функции. Полезная нагрузка хранится в формате big-endian.
См. также setData().
qint16 QModbusPdu::dataSize() const
Возвращает размер данных PDU, исключая код функции.
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 операторы потоков не только добавляют необработанные данные, но также, например, размер, количество и т. д. для сложных типов.
void QModbusPdu::encodeData(Args... data)
Устанавливает полезную нагрузку в data. Данные преобразуются и хранятся в формате big-endian.
QModbusRequestPdu request(QModbusPdu::ReadCoils); // starting address and quantity of coils request.encodeData(quint16(0x0c), quint16(0x0a));
Примечание: Использование ограничено quint8 и quint16 только. Это связано с тем, что QDataStream операторы потоков не только добавляют необработанные данные, но также, например, размер, количество и т. д. для сложных типов.
ExceptionCode QModbusPdu::exceptionCode() const
Возвращает код исключения ответа.
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. Ожидается, что данные уже хранятся в формате big-endian.
См. также data().
[virtual] void QModbusPdu::setFunctionCode(FunctionCode code)
Устанавливает код функции PDU в code.
См. также functionCode().
qint16 QModbusPdu::size() const
Возвращает полный размер PDU, включая код функции и размер данных.
[default protected] QModbusPdu &QModbusPdu::operator=(const QModbusPdu &other)
Создаёт копию other и присваивает её объекту QModbusPdu.
Документация по переменным-членам
const quint8 QModbusPdu::ExceptionByte = 0x80
Переменная инициализирована значением 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/archives/qt-5.6/qmodbuspdu.html