Класс QModbusServer
Класс QModbusServer — это интерфейс для получения и обработки запросов Modbus. Подробнее...
| Заголовок: | #include <QModbusServer> |
| qmake: | QT += serialbus |
| С тех пор: | Qt 5.8 |
| Наследует: | 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
- 32 функций публичного доступа унаследовано от 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::DeviceIdentification |
8 |
Физическое и функциональное описание сервера. QModbusDeviceIdentification
|
Варианты для пользователей:
| Постоянная | Значение | Описание |
|---|---|---|
QModbusServer::UserOption |
0x100 |
Первый вариант, который может использоваться для целей, специфичных для пользователя. |
Для пользовательских вариантов разработчик должен сам решить, какие типы использовать и убедиться, что компоненты используют правильные типы при доступе и установке значений.
Документация функций членов
QModbusServer::QModbusServer(QObject *parent = nullptr)
Создаёт сервер Modbus со указанным parent.
bool QModbusServer::data(QModbusDataUnit *newData) const
Возвращает значения в диапазоне регистров, заданном newData.
newData должен содержать допустимый тип регистра, начальный адрес и значениеCount. Возвращаемый 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().
[signal] void QModbusServer::dataWritten(QModbusDataUnit::RegisterType register, int address, int size)
Этот сигнал испускается, когда клиент Modbus записал одно или несколько полей данных в сервер Modbus. Сигнал содержит информацию о записанных полях:
- тип записанного регистра register,
- адрес первого записанного поля address,
- и размер последовательных записанных полей, начиная с address, size.
Сигнал не испускается, если записываемые поля не изменились из-за отсутствия изменения значения.
[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::DeviceIdentification | Устанавливает физическое и функциональное описание сервера. По умолчанию дополнительных данных идентификации устройства нет. |
| 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::DeviceIdentification | Возвращает физическое и функциональное описание сервера. |
| 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/qt-5.9/qmodbusserver.html