You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
190 lines
5.6 KiB
190 lines
5.6 KiB
<refentry id="{@id}">
|
|
<refnamediv>
|
|
<refname>Phpmodbus user's guide</refname>
|
|
<refpurpose>Phpmodbus How-to</refpurpose>
|
|
</refnamediv>
|
|
<refsynopsisdiv>
|
|
<author>
|
|
Jan Krakora
|
|
<authorblurb>
|
|
{@link mailto:krakora.jan@googlemail.com email}
|
|
</authorblurb>
|
|
</author>
|
|
</refsynopsisdiv>
|
|
{@toc}
|
|
<refsect1 id="{@id intro}">
|
|
<title>Introduction</title>
|
|
<para>
|
|
Phpmodbus is a PHP library for the Modbus protocol. The library implements
|
|
Modbus TCP/UDP master class with subset of the most used Modbus commands.
|
|
</para>
|
|
<para>
|
|
The library implements:
|
|
<itemizedlist>
|
|
<listitem><para>FC 1: read multiple coils</para></listitem>
|
|
<listitem><para>FC 2: read input discretes</para></listitem>
|
|
<listitem><para>FC 3: read multiple registers</para></listitem>
|
|
<listitem><para>FC 6: write single register</para></listitem>
|
|
<listitem><para>FC 15: write multiple coils</para></listitem>
|
|
<listitem><para>FC 16: write multiple registers</para></listitem>
|
|
<listitem><para>FC 23: read write registers</para></listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
<para>
|
|
For more about Modbus protocol see [{@link http://www.modbus.org}] or
|
|
[{@link http://en.wikipedia.org/wiki/Modbus Wiki}]
|
|
</para>
|
|
</refsect1>
|
|
<refsect1 id="{@id install}">
|
|
<title>Install</title>
|
|
<para>
|
|
At the first, it is supposed an PHP solution has been already installed on
|
|
your server (LAMP, WAMP, MSS+CGI etc.).
|
|
</para>
|
|
<para>
|
|
Copy the Phpmodbus library to your PHP project folder.
|
|
</para>
|
|
<para>
|
|
Create a PHP script and assign the library using require_once() command
|
|
<programlisting role="c">
|
|
<![CDATA[require_once dirname(__FILE__) . '/Phpmodbus/ModbusMaster.php'; ]]>
|
|
</programlisting>
|
|
</para>
|
|
<para>
|
|
To create UDP Modbus master object communicating to an modbus slave
|
|
e.g. at IP address 192.168.1.1 write
|
|
<programlisting role="c" linenumbering="numbered" startinglinenumber="2">
|
|
<![CDATA[ $modbus = new ModbusMaster("192.168.1.1", "UDP"); ]]>
|
|
</programlisting>
|
|
</para>
|
|
<para>
|
|
To create TCP Modbus master use
|
|
<programlisting role="c" linenumbering="numbered" startinglinenumber="2">
|
|
<![CDATA[ $modbus = new ModbusMaster("192.168.1.1", "TCP"); ]]>
|
|
</programlisting>
|
|
</para>
|
|
<para>
|
|
To read 5 words (10 bytes) from the device ID=0 and its memory address 12288
|
|
use try-catch method call
|
|
<programlisting role="c" linenumbering="numbered" startinglinenumber="3">
|
|
<![CDATA[try {
|
|
// Function processing
|
|
$recData = $modbus->readMultipleRegisters(0, 12288, 5);
|
|
}
|
|
catch (Exception $e) {
|
|
// Exception processing, e.g. print error information
|
|
echo $modbus;
|
|
echo $e;
|
|
exit;
|
|
}]]>
|
|
</programlisting>
|
|
</para>
|
|
<para>
|
|
To process the function byte stream, use conversion to PHP types in
|
|
</para>
|
|
<programlisting role="c" linenumbering="numbered" startinglinenumber="15">
|
|
<![CDATA[echo PhpType::bytes2string($recData); ]]>
|
|
</programlisting>
|
|
<para>
|
|
For other examples see sections bellow.
|
|
</para>
|
|
</refsect1>
|
|
<refsect1 id="{@id examples}">
|
|
<title>Examples</title>
|
|
<para>
|
|
This section presents library features and examples
|
|
</para>
|
|
<refsect2 id="{@id example_fc1}">
|
|
<title>FC1 - read mutliple coils</title>
|
|
<para>
|
|
FC1 functionality example
|
|
</para>
|
|
<para>
|
|
{@example example_fc1.php}
|
|
</para>
|
|
</refsect2>
|
|
<refsect2 id="{@id example_fc2}">
|
|
<title>FC2 - read input discretes</title>
|
|
<para>
|
|
FC2 functionality example
|
|
</para>
|
|
<para>
|
|
{@example example_fc2.php}
|
|
</para>
|
|
</refsect2>
|
|
<refsect2 id="{@id example_fc3}">
|
|
<title>FC3 - read mutliple registers</title>
|
|
<para>
|
|
FC3 functionality example
|
|
</para>
|
|
<para>
|
|
{@example example_fc3.php}
|
|
</para>
|
|
</refsect2>
|
|
<refsect2 id="{@id example_fc6}">
|
|
<title>FC6 - write single register</title>
|
|
<para>
|
|
FC6 functionality example
|
|
</para>
|
|
<para>
|
|
{@example example_fc6.php}
|
|
</para>
|
|
</refsect2>
|
|
<refsect2 id="{@id example_fc15}">
|
|
<title>FC15 - write mutliple coils</title>
|
|
<para>
|
|
FC15 functionality example
|
|
</para>
|
|
<para>
|
|
{@example example_fc15.php}
|
|
</para>
|
|
</refsect2>
|
|
<refsect2 id="{@id example_fc16}">
|
|
<title>FC16 - write mutliple registers</title>
|
|
<para>
|
|
FC16 functionality example
|
|
</para>
|
|
<para>
|
|
{@example example_fc16.php}
|
|
</para>
|
|
</refsect2>
|
|
<refsect2 id="{@id example_fc23}">
|
|
<title>FC23 - read write registers</title>
|
|
<para>
|
|
FC23 functionality example
|
|
</para>
|
|
<para>
|
|
{@example example_fc23.php}
|
|
</para>
|
|
</refsect2>
|
|
<refsect2 id="{@id wago_example}">
|
|
<title>Dump of M-memory from WAGO 750-84x series coupler.</title>
|
|
<para>
|
|
Dump of M-memory from WAGO 750-84x series coupler.
|
|
</para>
|
|
<para>
|
|
{@example example_750841_Mmemory.php}
|
|
</para>
|
|
</refsect2>
|
|
<refsect2 id="{@id datatype}">
|
|
<title>Data conversion to PHP types.</title>
|
|
<para>
|
|
Conversion of the data bytes, received from Modbus, to a PHP type.
|
|
</para>
|
|
<para>
|
|
{@example example_datatype.php}
|
|
</para>
|
|
</refsect2>
|
|
</refsect1>
|
|
<refsect1 id="{@id back_comp}">
|
|
<title>Back compatibility</title>
|
|
<para>
|
|
This version is back compatible to the last versions. Just use
|
|
<programlisting role="c">
|
|
<![CDATA[require_once dirname(__FILE__) . '/Phpmodbus/ModbusMasterUdp.php';
|
|
$modbus = new ModbusMasterUdp("192.168.1.1");
|
|
// ... ]]>
|
|
</programlisting>
|
|
</para>
|
|
</refsect1>
|
|
</refentry> |