Revision control
++ // Copyright (C) 2023 The Qt Company Ltd.
++ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
++
++ /*! \example modbus/client
++ \title Modbus Client
++ \ingroup qtserialbus-examples
++ \examplecategory Connectivity
++
++ \brief The example implements a Modbus client application.
++
++ The example acts as Modbus client sending Modbus request via serial line
++ or TCP. The shown dialog allows the definition of standard requests and
++ displays incoming responses.
++
++ The example must be used in conjunction with the
++ \l {modbus/server}{Modbus Server example} or another Modbus device which is
++ either connected via TCP or Serial Port.
++
++ Key classes used in this example:
++
++ \list
++ \li \l QModbusClient
++ \li \l QModbusDataUnit
++ \li \l QModbusReply
++ \endlist
++
++ \image ../images/modbusclient.png
++ {Modbus Client with connection settings, Read/Write sections,
++ and result showing register addresses with hexadecimal values}
++
++ \section1 Creating a QModbusClient
++
++ An instance of \l QModbusClient is required to perform any communication.
++ Depending on the specified connection type, the example can instantiate
++ a \l QModbusRtuSerialClient (for serial communication), or a
++ \l QModbusTcpClient (for TCP-based communication).
++
++ \snippet modbus/client/mainwindow.cpp create_client_0
++
++ Once the client is created, use the
++ \l {QModbusClient::}{setConnectionParameter()} method to specify the
++ connection parameters. The parameters vary depending on the communication
++ type:
++
++ \snippet modbus/client/mainwindow.cpp create_client_1
++
++ After the client is created and all the parameters are specified, use
++ \l {QModbusClient::connectDevice()} to connect to Modbus network.
++
++ \section1 Reading Data
++
++ To read data from Modbus server, the client needs to specify a
++ server address and the parameters of objects that it wants to read:
++ \list
++ \li \l {QModbusDataUnit::}{RegisterType}
++ \li \l {QModbusDataUnit::startAddress}{start address}
++ \li \l {QModbusDataUnit::valueCount}{number of entries to read}
++ \endlist
++
++ The object parameters are represented by the \l QModbusDataUnit class:
++
++ \snippet modbus/client/mainwindow.cpp read_data_0
++
++ Once the parameters are collected, the
++ \l {QModbusClient::}{sendReadRequest()} method is used to send the actual
++ request. The method returns a \l QModbusReply which should be processed
++ in an asynchronous way, so the \l QModbusReply::finished() signal is used
++ to check when the reply is ready.
++
++ \snippet modbus/client/mainwindow.cpp read_data_1
++
++ Once the \l QModbusReply::finished() signal is received, the reply object
++ can be used to get the data or to check for read errors:
++
++ \snippet modbus/client/mainwindow.cpp read_data_2
++
++ \section1 Writing Data
++
++ To write the data to the Modbus server, the client needs to specify the
++ server address, and the parameters of objects that it wants to write.
++ As with reading the data, the \l QModbusDataUnit class is used to represent
++ the information about the data to be written. This time the data also
++ includes the desired \l {QModbusDataUnit::}{values}.
++ The \l {QModbusClient::}{sendWriteRequest()} method is used to write the
++ desired data:
++
++ \snippet modbus/client/mainwindow.cpp write_data_0
++
++ Like with reading the data, the returned \l QModbusReply object is used
++ to check for write errors.
++
++ \include examples-run.qdocinc
++ */