Класс QModbusServer
Класс QModbusServer — интерфейс для приема и обработки запросов Modbus. Подробнее...
| Заголовок: | #include <QModbusServer> |
| qmake: | QT += serialbus |
| С момента: | Qt 5.6 |
| Наследует: | QModbusDevice |
| Наследуется от: |
Открытые типы
| Перечисление | Option { DiagnosticRegister, ExceptionStatusOffset, DeviceBusy, AsciiInputDelimiter, ..., UserOption } |
Открытые функции
| QModbusServer(QObject *parent = nullptr) | |
| bool | data(QModbusDataUnit *newData) const |
| bool | data(QModbusDataUnit::RegisterType table, quint16 address, quint16 *data) const |
| virtual bool | processesBroadcast() const |
| int | serverAddress() const |
| bool | setData(const QModbusDataUnit &newData) |
| bool | setData(QModbusDataUnit::RegisterType table, quint16 address, quint16 data) |
| virtual bool | setMap(const QModbusDataUnitMap &map) |
| void | setServerAddress(int serverAddress) |
| virtual bool | setValue(int option, const QVariant &newValue) |
| virtual QVariant | value(int option) const |
- 7 открытых функций унаследовано от QModbusDevice
- 31 открытых функций унаследовано от QObject
Сигналы
| void | dataWritten(QModbusDataUnit::RegisterType register, int address, int size) |
- 2 сигнала унаследовано от QModbusDevice
- 2 сигнала унаследовано от QObject
Защищенные функции
| virtual QModbusResponse | processPrivateRequest(const QModbusPdu &request) |
| virtual QModbusResponse | processRequest(const QModbusPdu &request) |
| virtual bool | readData(QModbusDataUnit *newData) const |
| virtual bool | writeData(const QModbusDataUnit &newData) |
- 4 защищенных функции унаследовано от QModbusDevice
- 9 защищенных функций унаследовано от QObject
Дополнительные унаследованные члены
- 1 свойство унаследовано от QObject
- 1 открытый слот унаследовано от QObject
- 11 статических открытых членов унаследовано от QObject
Подробное описание
Класс QModbusServer — интерфейс для приема и обработки запросов Modbus.
В сетях Modbus может быть несколько серверов Modbus. Серверы Modbus читаются/записываются клиентом Modbus, представленным QModbusClient. QModbusServer взаимодействует с бэкендом Modbus, предоставляя пользователям удобный API.
Документация типов членов
перечисление QModbusServer::Option
Каждый сервер Modbus имеет набор связанных с ним значений, каждое со своим собственным параметром.
Общие параметры (и соответствующие типы):
| Константа | Значение | Описание |
|---|---|---|
QModbusServer::DiagnosticRegister |
0 |
Регистр диагностики сервера. quint16
|
QModbusServer::ExceptionStatusOffset |
1 |
Смещение байта состояния исключений сервера. 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 |
Дополнительные данные сервера. QByteArray
|
Параметры пользователя:
| Константа | Значение | Описание |
|---|---|---|
QModbusServer::UserOption |
0x100 |
Первый параметр, который может использоваться для целей, специфичных для пользователя. |
Для параметров пользователя разработчик должен определить используемые типы и гарантировать, что компоненты используют правильные типы при доступе и установке значений.
Документация функций членов
QModbusServer::QModbusServer(QObject *parent = nullptr)
Конструктор сервера Modbus со заданным parent.
bool QModbusServer::data(QModbusDataUnit *newData) const
Возвращает значения в диапазоне регистров, заданном newData.
newData должен содержать допустимый тип регистра, начальный адрес и значение количества. Возвращаемый newData будет содержать значения регистров, связанные с заданным диапазоном.
Если newData содержит допустимый тип регистра, но отрицательный начальный адрес, возвращается вся карта регистров, а newData соответствующим образом размерен.
См. также setData().
bool QModbusServer::data(QModbusDataUnit::RegisterType table, quint16 address, quint16 *data) const
Считывает данные, хранящиеся на сервере Modbus. Сервер Modbus имеет четыре таблицы (table), и каждая из них имеет уникальное поле address, которое используется для чтения data из желаемого поля. См. QModbusDataUnit::RegisterType для получения дополнительной информации о разных таблицах. Возвращает false если адрес находится вне диапазона карты или тип регистра даже не определен.
См. также QModbusDataUnit::RegisterType и setData().
Возвращает значение void QModbusServer::dataWritten(QModbusDataUnit::RegisterType register, int address, int size)
Этот сигнал излучается, когда клиент Modbus записал одно или несколько полей данных в сервер Modbus. Сигнал содержит информацию о записанных полях:
- тип регистра, который был записан,
- адрес первого поля, которое было записано,
- и размер последовательных полей, которые были записаны, начиная с адреса.
Сигнал не излучается, когда поля, которые должны быть записаны, не изменились из-за отсутствия изменения значения.
[virtual protected] QModbusResponse QModbusServer::processPrivateRequest(const QModbusPdu &request)
Эта функция должна быть реализована пользовательскими серверами Modbus. Она вызывается функцией processRequest() в случае, если заданная request не является стандартным запросом Modbus.
Переопределение этой функции позволяет обрабатывать дополнительные коды функций и подкоды функций, не указанные в спецификации протокола Modbus Application Protocol 1.1b. Реализации должны повторно вызвать эту функцию, чтобы гарантировать, что для всех неизвестных кодов функций, которые не обрабатываются пользовательской реализацией Modbus, возвращается ответ об исключении.
Эта реализация по умолчанию возвращает QModbusExceptionResponse с кодом функции request и кодом ошибки, установленным как «незаконная функция».
См. также processRequest().
[virtual protected] QModbusResponse QModbusServer::processRequest(const QModbusPdu &request)
Обрабатывает запрос клиента Modbus request и возвращает ответ Modbus. Эта функция возвращает QModbusResponse или QModbusExceptionResponse в зависимости от характера запроса.
Реализация по умолчанию этой функции обрабатывает все стандартные коды функций Modbus, как определено в спецификации протокола Modbus Application Protocol 1.1b. Все остальные коды функций Modbus, не включённые в спецификацию, передаются функции processPrivateRequest().
Стандартная обработка запросов по стандартным кодам функций Modbus может быть переопределена путём пере реализации этой функции. Переопределение должно обрабатывать соответствующий тип запроса и возвращать соответствующий ответ QModbusResponse. Типичной причиной может быть фильтрация запросов кода функций для значений данных для ограничения доступа к чтению/записи и кодов функций, нежелательных в конкретных реализациях, таких как диагностика последовательного канала в сетях Ethernet или транспортных слоях Modbus Plus.
Примечание: Эта функция не должна переопределяться для предоставления пользовательской реализации для типов нестандартных запросов Modbus.
См. также processPrivateRequest().
[virtual] bool QModbusServer::processesBroadcast() const
Подклассы должны реализовать эту функцию, если транспортный уровень должен обрабатывать широковещательные запросы. Тогда реализация должна вернуть true если текущий обрабатываемый запрос является широковещательным запросом; в противном случае false. Реализация по умолчанию всегда возвращает false.
Примечание: Значение возврата этой функции имеет смысл только изнутри processRequest() или processPrivateRequest(), в противном случае она может только сообщить, что последний обработанный запрос был широковещательным запросом.
[virtual protected] bool QModbusServer::readData(QModbusDataUnit *newData) const
Считывает значения в диапазоне регистров, заданном newData, и записывает данные обратно в newData. Возвращает true при успехе или false если newData 0, диапазон newData выходит за пределы диапазона карты или registerType() не существует.
Примечание: Подклассы, которые реализуют чтение из другого хранилища, отличного от стандартного, также должны реализовать setMap() и writeData().
См. также setMap() и writeData().
int QModbusServer::serverAddress() const
Возвращает адрес этой инстанции сервера Mobus.
См. также setServerAddress().
bool QModbusServer::setData(const QModbusDataUnit &newData)
Записывает newData в карту сервера Modbus. Возвращает false если диапазон newData выходит за пределы диапазона карты.
Если вызов был успешным, излучается сигнал dataWritten(). Обратите внимание, что сигнал не излучается, когда адресной регистр не изменился. Это может произойти, когда newData содержит точно такие же значения, что и регистр уже. Тем не менее, эта функция возвращает true в таких случаях.
См. также data().
bool QModbusServer::setData(QModbusDataUnit::RegisterType table, quint16 address, quint16 data)
Записывает данные в сервер Modbus. Сервер Modbus имеет четыре таблицы (table) и каждая имеет уникальное поле address, которое используется для записи data в нужное поле. Возвращает false если адрес выходит за пределы диапазона карты.
Если вызов был успешным, излучается сигнал dataWritten(). Обратите внимание, что сигнал не излучается, когда data не изменилось. Тем не менее, эта функция возвращает true в таких случаях.
См. также QModbusDataUnit::RegisterType, data() и dataWritten().
[virtual] bool QModbusServer::setMap(const QModbusDataUnitMap &map)
Устанавливает зарегистрированную структуру карты для запросов от других клиентов ModBus в map. Значения регистров инициализируются нулём. Возвращает true при успехе; в противном случае false.
Если эта функция не вызывается до подключения, настраивается регистр по умолчанию с нулевыми записями.
Примечание: Вызов этой функции отбрасывает любые значения регистров, которые были установлены ранее.
void QModbusServer::setServerAddress(int serverAddress)
Устанавливает адрес для этой инстанции сервера Modbus в serverAddress.
См. также serverAddress().
[virtual] bool QModbusServer::setValue(int option, const QVariant &newValue)
Устанавливает newValue для option и возвращает true при успехе; false в противном случае.
Примечание: Если тип, связанный с параметром, quint8 или quint16 и тип newValue больше, данные будут усечены или преобразование завершится неудачей.
| Ключ | Описание |
|---|---|
| QModbusServer::DiagnosticRegister | Устанавливает диагностический регистр сервера в кодировке, специфичной для устройства, в значение newValue. Значение по умолчанию — 0x0000. Значения битов регистра требуют документации, специфичной для устройства. |
| QModbusServer::ExceptionStatusOffset | Устанавливает смещение байта статуса исключения сервера в значение newValue, которое представляет собой абсолютный адрес смещения в обмотках (регистр 0x). Таблица регистров Modbus начинается с 0x0000h. Значение по умолчанию — 0x0000, используя обмотки статуса исключения, аналогичные процессорам Modicon 984 (обмотки 1-8).Функция возвращает |
| QModbusServer::DeviceBusy | Устанавливает флаг, сигнализирующий о том, что сервер занят обработкой команды программы с длительной продолжительностью. Допустимые значения — 0x0000 (не занят) и 0xffff (занят). Значение по умолчанию — 0x0000. |
| QModbusServer::AsciiInputDelimiter | Значение newValue становится разделителем конца сообщения для будущих сообщений Modbus ASCII. Значение по умолчанию — \n. |
| QModbusServer::ListenOnlyMode | Устанавливает состояние прослушивания только сервера в значение newValue. Если режим прослушивания только установлен в true, сообщения отслеживаются, но ответ не будет отправлен. Значение по умолчанию — false. |
| QModbusServer::ServerIdentifier | Устанавливает идентификатор производителя сервера в значение newValue. Возможные значения находятся в диапазоне от 0x00 до 0xff. Значение по умолчанию — 0x0a. |
| QModbusServer::RunIndicatorStatus | Устанавливает статус индикатора запуска сервера в значение newValue. Эти данные используются дополнительно функцией кода QModbusPdu::ReportServerId. Допустимые значения — 0x00 (ВЫКЛ) и 0xff (ВКЛ). Значение по умолчанию — 0xff (ВКЛ). |
| QModbusServer::AdditionalData | Устанавливает дополнительные данные сервера в значение newValue. Эти данные используются дополнительно функцией кода QModbusPdu::ReportServerId. Максимальный размер данных не должен превышать 249 байт, чтобы соответствовать ограничениям размера сообщения ответа. Значение по умолчанию — Qt Modbus Server. |
| QModbusServer::UserOption | Устанавливает значение пользовательского параметра в newValue. Примечание: Для пользовательских параметров разработчик решает, какие типы использовать и гарантирует, что компоненты используют правильные типы при доступе и установке значений. |
См. также value().
[virtual] QVariant QModbusServer::value(int option) const
Возвращает значение для option или недействительное значение QVariant, если параметр не задан.
| Параметр | Описание |
|---|---|
| QModbusServer::DiagnosticRegister | Возвращает значение диагностического регистра сервера. Диагностический регистр содержит специфичные для устройства данные, где каждый бит имеет определенное значение. |
| QModbusServer::ExceptionStatusOffset | Возвращает адрес смещения байта статуса исключения в регистре обмоток. |
| QModbusServer::DeviceBusy | Возвращает флаг, сигнализирующий о том, занят ли сервер обработкой команды программы с длительной продолжительностью. |
| QModbusServer::AsciiInputDelimiter | Возвращает разделитель конца сообщения сообщений Modbus ASCII. |
| QModbusServer::ListenOnlyMode | Возвращает состояние прослушивания только сервера. Сообщения отслеживаются, но ответ не будет отправлен. |
| QModbusServer::ServerIdentifier | Возвращает код идентификатора производителя сервера. Это может быть произвольное значение в диапазоне от 0x00 до 0xff. |
| QModbusServer::RunIndicatorStatus | Возвращает статус индикатора запуска сервера. Эти данные используются дополнительно функцией кода QModbusPdu::ReportServerId. |
| QModbusServer::AdditionalData | Возвращает дополнительные данные сервера. Эти данные используются дополнительно функцией кода QModbusPdu::ReportServerId. |
| QModbusServer::UserOption | Возвращает значение пользовательского параметра. Примечание: Для пользовательских параметров разработчик решает, какие типы использовать и гарантирует, что компоненты используют правильные типы при доступе и установке значений. |
См. также setValue().
[virtual protected] bool QModbusServer::writeData(const QModbusDataUnit &newData)
Записывает newData в карту сервера Modbus. Возвращает true при успехе или false если диапазон newData находится за пределами диапазона карты или registerType() не существует.
Примечание: Подклассы, которые реализуют запись в другой хранилище, отличном от стандартного, также должны реализовать setMap() и readData(). Сигнал dataWritten() также должен быть выпущен внутри реализации функций.
См. также setMap(), readData() и dataWritten().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.6/qmodbusserver.html