Revision control

++ <?xml version="1.0" encoding="UTF-8"?>
++ <ui version="4.0">
++ <class>MainWindow</class>
++ <widget class="QMainWindow" name="MainWindow">
++ <property name="geometry">
++ <rect>
++ <x>0</x>
++ <y>0</y>
++ <width>620</width>
++ <height>581</height>
++ </rect>
++ </property>
++ <property name="sizePolicy">
++ <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
++ <horstretch>0</horstretch>
++ <verstretch>0</verstretch>
++ </sizepolicy>
++ </property>
++ <property name="windowTitle">
++ <string>Modbus Custom Command</string>
++ </property>
++ <widget class="QWidget" name="centralwidget">
++ <layout class="QGridLayout" name="gridLayout_3">
++ <item row="0" column="0">
++ <layout class="QGridLayout" name="gridLayout">
++ <item row="0" column="0">
++ <widget class="QLabel" name="label_4">
++ <property name="text">
++ <string>Address &amp; Port:</string>
++ </property>
++ </widget>
++ </item>
++ <item row="0" column="1">
++ <widget class="QLineEdit" name="addressPort">
++ <property name="sizePolicy">
++ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
++ <horstretch>0</horstretch>
++ <verstretch>0</verstretch>
++ </sizepolicy>
++ </property>
++ <property name="text">
++ <string>127.0.0.1:50200</string>
++ </property>
++ </widget>
++ </item>
++ <item row="0" column="2">
++ <spacer name="horizontalSpacer_2">
++ <property name="orientation">
++ <enum>Qt::Orientation::Horizontal</enum>
++ </property>
++ <property name="sizeType">
++ <enum>QSizePolicy::Policy::Maximum</enum>
++ </property>
++ <property name="sizeHint" stdset="0">
++ <size>
++ <width>13</width>
++ <height>17</height>
++ </size>
++ </property>
++ </spacer>
++ </item>
++ <item row="0" column="3">
++ <widget class="QLabel" name="label_28">
++ <property name="sizePolicy">
++ <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
++ <horstretch>0</horstretch>
++ <verstretch>0</verstretch>
++ </sizepolicy>
++ </property>
++ <property name="text">
++ <string>Server Address:</string>
++ </property>
++ </widget>
++ </item>
++ <item row="0" column="4">
++ <widget class="QSpinBox" name="serverAddress">
++ <property name="sizePolicy">
++ <sizepolicy hsizetype="Maximum" vsizetype="Fixed">
++ <horstretch>0</horstretch>
++ <verstretch>0</verstretch>
++ </sizepolicy>
++ </property>
++ <property name="minimum">
++ <number>1</number>
++ </property>
++ <property name="maximum">
++ <number>247</number>
++ </property>
++ </widget>
++ </item>
++ <item row="0" column="5">
++ <widget class="QPushButton" name="connectButton">
++ <property name="sizePolicy">
++ <sizepolicy hsizetype="Maximum" vsizetype="Fixed">
++ <horstretch>0</horstretch>
++ <verstretch>0</verstretch>
++ </sizepolicy>
++ </property>
++ <property name="text">
++ <string>Connect</string>
++ </property>
++ <property name="checkable">
++ <bool>false</bool>
++ </property>
++ <property name="autoDefault">
++ <bool>false</bool>
++ </property>
++ <property name="default">
++ <bool>true</bool>
++ </property>
++ </widget>
++ </item>
++ <item row="1" column="0" colspan="6">
++ <widget class="Line" name="line">
++ <property name="orientation">
++ <enum>Qt::Orientation::Horizontal</enum>
++ </property>
++ </widget>
++ </item>
++ </layout>
++ </item>
++ <item row="1" column="0">
++ <layout class="QGridLayout" name="gridLayout_2">
++ <item row="0" column="0">
++ <widget class="QLabel" name="label">
++ <property name="sizePolicy">
++ <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
++ <horstretch>0</horstretch>
++ <verstretch>0</verstretch>
++ </sizepolicy>
++ </property>
++ <property name="text">
++ <string>Custom Function code (Read):</string>
++ </property>
++ </widget>
++ </item>
++ <item row="0" column="1">
++ <widget class="QLabel" name="label_9">
++ <property name="font">
++ <font>
++ <bold>true</bold>
++ </font>
++ </property>
++ <property name="text">
++ <string>0x41</string>
++ </property>
++ </widget>
++ </item>
++ <item row="0" column="2" rowspan="2">
++ <spacer name="horizontalSpacer">
++ <property name="orientation">
++ <enum>Qt::Orientation::Horizontal</enum>
++ </property>
++ <property name="sizeType">
++ <enum>QSizePolicy::Policy::Fixed</enum>
++ </property>
++ <property name="sizeHint" stdset="0">
++ <size>
++ <width>40</width>
++ <height>20</height>
++ </size>
++ </property>
++ </spacer>
++ </item>
++ <item row="0" column="3" rowspan="2">
++ <widget class="QLabel" name="label_7">
++ <property name="text">
++ <string>The Modbus specification reserves two ranges of user-defined function codes, i.e. 0x41 to 0x48 and from 0x64 to 0x6e.</string>
++ </property>
++ <property name="wordWrap">
++ <bool>true</bool>
++ </property>
++ </widget>
++ </item>
++ <item row="1" column="0">
++ <widget class="QLabel" name="label_2">
++ <property name="sizePolicy">
++ <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
++ <horstretch>0</horstretch>
++ <verstretch>0</verstretch>
++ </sizepolicy>
++ </property>
++ <property name="text">
++ <string>Custom Function code (Write):</string>
++ </property>
++ </widget>
++ </item>
++ <item row="1" column="1">
++ <widget class="QLabel" name="label_10">
++ <property name="sizePolicy">
++ <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
++ <horstretch>0</horstretch>
++ <verstretch>0</verstretch>
++ </sizepolicy>
++ </property>
++ <property name="font">
++ <font>
++ <bold>true</bold>
++ </font>
++ </property>
++ <property name="text">
++ <string>0x42</string>
++ </property>
++ </widget>
++ </item>
++ </layout>
++ </item>
++ <item row="2" column="0">
++ <layout class="QHBoxLayout" name="horizontalLayout_2">
++ <item>
++ <widget class="QGroupBox" name="server">
++ <property name="title">
++ <string>Server</string>
++ </property>
++ <layout class="QFormLayout" name="formLayout_2">
++ <item row="0" column="0">
++ <widget class="QLabel" name="address">
++ <property name="sizePolicy">
++ <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
++ <horstretch>0</horstretch>
++ <verstretch>0</verstretch>
++ </sizepolicy>
++ </property>
++ <property name="text">
++ <string>Address</string>
++ </property>
++ <property name="alignment">
++ <set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
++ </property>
++ </widget>
++ </item>
++ <item row="0" column="1">
++ <widget class="QLabel" name="label_3">
++ <property name="text">
++ <string>Registers</string>
++ </property>
++ </widget>
++ </item>
++ <item row="1" column="0">
++ <widget class="QLabel" name="label_21">
++ <property name="text">
++ <string>0</string>
++ </property>
++ <property name="alignment">
++ <set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
++ </property>
++ </widget>
++ </item>
++ <item row="1" column="1">
++ <widget class="QLineEdit" name="register_0">
++ <property name="maxLength">
++ <number>32767</number>
++ </property>
++ <property name="placeholderText">
++ <string>Hexadecimal A-F, a-f, 0-9.</string>
++ </property>
++ </widget>
++ </item>
++ <item row="2" column="0">
++ <widget class="QLabel" name="label_22">
++ <property name="text">
++ <string>1</string>
++ </property>
++ <property name="alignment">
++ <set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
++ </property>
++ </widget>
++ </item>
++ <item row="2" column="1">
++ <widget class="QLineEdit" name="register_1">
++ <property name="maxLength">
++ <number>32767</number>
++ </property>
++ <property name="placeholderText">
++ <string>Hexadecimal A-F, a-f, 0-9.</string>
++ </property>
++ </widget>
++ </item>
++ <item row="3" column="0">
++ <widget class="QLabel" name="label_23">
++ <property name="text">
++ <string>2</string>
++ </property>
++ <property name="alignment">
++ <set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
++ </property>
++ </widget>
++ </item>
++ <item row="3" column="1">
++ <widget class="QLineEdit" name="register_2">
++ <property name="maxLength">
++ <number>32767</number>
++ </property>
++ <property name="placeholderText">
++ <string>Hexadecimal A-F, a-f, 0-9.</string>
++ </property>
++ </widget>
++ </item>
++ <item row="4" column="0">
++ <widget class="QLabel" name="label_11">
++ <property name="text">
++ <string>3</string>
++ </property>
++ <property name="alignment">
++ <set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
++ </property>
++ </widget>
++ </item>
++ <item row="4" column="1">
++ <widget class="QLineEdit" name="register_3">
++ <property name="maxLength">
++ <number>32767</number>
++ </property>
++ <property name="placeholderText">
++ <string>Hexadecimal A-F, a-f, 0-9.</string>
++ </property>
++ </widget>
++ </item>
++ <item row="5" column="0">
++ <widget class="QLabel" name="label_8">
++ <property name="text">
++ <string>4</string>
++ </property>
++ <property name="alignment">
++ <set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
++ </property>
++ </widget>
++ </item>
++ <item row="5" column="1">
++ <widget class="QLineEdit" name="register_4">
++ <property name="maxLength">
++ <number>32767</number>
++ </property>
++ <property name="placeholderText">
++ <string>Hexadecimal A-F, a-f, 0-9.</string>
++ </property>
++ </widget>
++ </item>
++ <item row="6" column="0">
++ <widget class="QLabel" name="label_12">
++ <property name="text">
++ <string>5</string>
++ </property>
++ <property name="alignment">
++ <set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
++ </property>
++ </widget>
++ </item>
++ <item row="6" column="1">
++ <widget class="QLineEdit" name="register_5">
++ <property name="maxLength">
++ <number>32767</number>
++ </property>
++ <property name="placeholderText">
++ <string>Hexadecimal A-F, a-f, 0-9.</string>
++ </property>
++ </widget>
++ </item>
++ <item row="7" column="0">
++ <widget class="QLabel" name="label_13">
++ <property name="text">
++ <string>6</string>
++ </property>
++ <property name="alignment">
++ <set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
++ </property>
++ </widget>
++ </item>
++ <item row="7" column="1">
++ <widget class="QLineEdit" name="register_6">
++ <property name="maxLength">
++ <number>32767</number>
++ </property>
++ <property name="placeholderText">
++ <string>Hexadecimal A-F, a-f, 0-9.</string>
++ </property>
++ </widget>
++ </item>
++ <item row="8" column="0">
++ <widget class="QLabel" name="label_14">
++ <property name="text">
++ <string>7</string>
++ </property>
++ <property name="alignment">
++ <set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
++ </property>
++ </widget>
++ </item>
++ <item row="8" column="1">
++ <widget class="QLineEdit" name="register_7">
++ <property name="maxLength">
++ <number>32767</number>
++ </property>
++ <property name="placeholderText">
++ <string>Hexadecimal A-F, a-f, 0-9.</string>
++ </property>
++ </widget>
++ </item>
++ <item row="9" column="0">
++ <widget class="QLabel" name="label_15">
++ <property name="text">
++ <string>8</string>
++ </property>
++ <property name="alignment">
++ <set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
++ </property>
++ </widget>
++ </item>
++ <item row="9" column="1">
++ <widget class="QLineEdit" name="register_8">
++ <property name="maxLength">
++ <number>32767</number>
++ </property>
++ <property name="placeholderText">
++ <string>Hexadecimal A-F, a-f, 0-9.</string>
++ </property>
++ </widget>
++ </item>
++ <item row="10" column="0">
++ <widget class="QLabel" name="label_16">
++ <property name="text">
++ <string>9</string>
++ </property>
++ <property name="alignment">
++ <set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
++ </property>
++ </widget>
++ </item>
++ <item row="10" column="1">
++ <widget class="QLineEdit" name="register_9">
++ <property name="maxLength">
++ <number>32767</number>
++ </property>
++ <property name="placeholderText">
++ <string>Hexadecimal A-F, a-f, 0-9.</string>
++ </property>
++ </widget>
++ </item>
++ </layout>
++ </widget>
++ </item>
++ <item>
++ <widget class="QGroupBox" name="groupBox">
++ <property name="title">
++ <string>Client</string>
++ </property>
++ <layout class="QFormLayout" name="formLayout">
++ <item row="0" column="0">
++ <widget class="QLabel" name="label_5">
++ <property name="text">
++ <string>Start address:</string>
++ </property>
++ </widget>
++ </item>
++ <item row="0" column="1">
++ <widget class="QSpinBox" name="startAddress">
++ <property name="maximum">
++ <number>9</number>
++ </property>
++ </widget>
++ </item>
++ <item row="1" column="0">
++ <widget class="QLabel" name="label_6">
++ <property name="text">
++ <string>Number of registers:</string>
++ </property>
++ </widget>
++ </item>
++ <item row="1" column="1">
++ <widget class="QComboBox" name="numberOfRegisters">
++ <property name="currentIndex">
++ <number>9</number>
++ </property>
++ <item>
++ <property name="text">
++ <string>1</string>
++ </property>
++ </item>
++ <item>
++ <property name="text">
++ <string>2</string>
++ </property>
++ </item>
++ <item>
++ <property name="text">
++ <string>3</string>
++ </property>
++ </item>
++ <item>
++ <property name="text">
++ <string>4</string>
++ </property>
++ </item>
++ <item>
++ <property name="text">
++ <string>5</string>
++ </property>
++ </item>
++ <item>
++ <property name="text">
++ <string>6</string>
++ </property>
++ </item>
++ <item>
++ <property name="text">
++ <string>7</string>
++ </property>
++ </item>
++ <item>
++ <property name="text">
++ <string>8</string>
++ </property>
++ </item>
++ <item>
++ <property name="text">
++ <string>9</string>
++ </property>
++ </item>
++ <item>
++ <property name="text">
++ <string>10</string>
++ </property>
++ </item>
++ </widget>
++ </item>
++ <item row="2" column="0" colspan="2">
++ <widget class="QTreeView" name="registersTable">
++ <property name="showDropIndicator" stdset="0">
++ <bool>true</bool>
++ </property>
++ <property name="alternatingRowColors">
++ <bool>true</bool>
++ </property>
++ <property name="rootIsDecorated">
++ <bool>false</bool>
++ </property>
++ <property name="uniformRowHeights">
++ <bool>true</bool>
++ </property>
++ <property name="itemsExpandable">
++ <bool>false</bool>
++ </property>
++ <property name="expandsOnDoubleClick">
++ <bool>false</bool>
++ </property>
++ <attribute name="headerVisible">
++ <bool>true</bool>
++ </attribute>
++ </widget>
++ </item>
++ <item row="3" column="0" colspan="2">
++ <layout class="QHBoxLayout" name="horizontalLayout">
++ <item>
++ <spacer name="horizontalSpacer_3">
++ <property name="orientation">
++ <enum>Qt::Orientation::Horizontal</enum>
++ </property>
++ <property name="sizeHint" stdset="0">
++ <size>
++ <width>13</width>
++ <height>17</height>
++ </size>
++ </property>
++ </spacer>
++ </item>
++ <item>
++ <widget class="QPushButton" name="readButton">
++ <property name="sizePolicy">
++ <sizepolicy hsizetype="Maximum" vsizetype="Fixed">
++ <horstretch>0</horstretch>
++ <verstretch>0</verstretch>
++ </sizepolicy>
++ </property>
++ <property name="text">
++ <string>Read</string>
++ </property>
++ </widget>
++ </item>
++ <item>
++ <widget class="QPushButton" name="writeButton">
++ <property name="text">
++ <string>Write</string>
++ </property>
++ </widget>
++ </item>
++ </layout>
++ </item>
++ </layout>
++ </widget>
++ </item>
++ </layout>
++ </item>
++ </layout>
++ </widget>
++ <widget class="QMenuBar" name="menubar">
++ <property name="geometry">
++ <rect>
++ <x>0</x>
++ <y>0</y>
++ <width>620</width>
++ <height>26</height>
++ </rect>
++ </property>
++ <widget class="QMenu" name="menuDevice">
++ <property name="title">
++ <string>Device</string>
++ </property>
++ <addaction name="actionConnect"/>
++ <addaction name="actionDisconnect"/>
++ <addaction name="separator"/>
++ <addaction name="actionExit"/>
++ </widget>
++ <addaction name="menuDevice"/>
++ </widget>
++ <widget class="QStatusBar" name="statusbar"/>
++ <action name="actionExit">
++ <property name="text">
++ <string>Quit</string>
++ </property>
++ </action>
++ <action name="actionConnect">
++ <property name="enabled">
++ <bool>true</bool>
++ </property>
++ <property name="icon">
++ <iconset resource="images.qrc">
++ <normaloff>:/images/connect.png</normaloff>:/images/connect.png</iconset>
++ </property>
++ <property name="text">
++ <string>Connect</string>
++ </property>
++ </action>
++ <action name="actionDisconnect">
++ <property name="enabled">
++ <bool>false</bool>
++ </property>
++ <property name="icon">
++ <iconset resource="images.qrc">
++ <normaloff>:/images/disconnect.png</normaloff>:/images/disconnect.png</iconset>
++ </property>
++ <property name="text">
++ <string>Disconnect</string>
++ </property>
++ </action>
++ </widget>
++ <resources>
++ <include location="images.qrc"/>
++ </resources>
++ <connections/>
++ </ui>