parent
c676c06e2e
commit
5300b2a867
@ -0,0 +1,4 @@ |
||||
/vendor |
||||
composer.lock |
||||
|
||||
*~ |
@ -1,7 +0,0 @@ |
||||
a88b5a87fb4cd49f16ce72062cce19d55f1fbf98 0.2 |
||||
a7f90c18859d31922bdd8c61299e2790f5e2eb1a 0.3 |
||||
bdf8b3f414c4d08fc0edf9fd1953f55db26e4bac 0.4 |
||||
1e09b0da7d8c62a9a292ee51540feac9de4c1222 0.4.1 |
||||
e1262f028e180c2719564f840ffa1a9f8672b6be 0.5 |
||||
079f8ac1f49faf4e6bbb84d62c39eee1507805f2 0.6 |
||||
5885b1a0d0dc89577eeb871ee2c3fba8e70dd4fb 0.7 |
@ -1,62 +1,89 @@ |
||||
The Phpmodbus License, Version 1 |
||||
============================ |
||||
|
||||
Copyright (c) 2004, 2013 Jan Krakora |
||||
All rights reserved. |
||||
|
||||
This license is a legal agreement between you and Jan Krakora (the "Author") |
||||
for the use of Phpmodbus (the "Software"). By obtaining, using and/or |
||||
copying the Software, you agree that you have read, understood, and will |
||||
comply with the terms and conditions of this license. |
||||
|
||||
|
||||
PERMITTED USE |
||||
------------- |
||||
|
||||
You are permitted to use, copy, modify, and distribute the Software and its |
||||
documentation, with or without modification, for any purpose, provided that |
||||
the following conditions are met: |
||||
|
||||
1. A copy of this license agreement must be included with the distribution. |
||||
|
||||
2. Redistributions of source code must retain the above copyright notice in |
||||
all source code files. |
||||
|
||||
3. Redistributions in binary form must reproduce the above copyright notice |
||||
in the documentation and/or other materials provided with the distribution. |
||||
|
||||
4. Products derived from the Software must include an acknowledgment that |
||||
they are derived from "Phpmodbus" in their documentation and/or other |
||||
materials provided with the distribution. |
||||
|
||||
5. The name "Phpmodbus" must not be used to endorse or promote products |
||||
derived from the Software without prior written permission from Author. |
||||
|
||||
6. Products derived from the Software may not be called "Phpmodbus", |
||||
nor may "Phpmodbus" appear in their name, without prior written |
||||
permission from Author. |
||||
|
||||
|
||||
INDEMNITY |
||||
--------- |
||||
|
||||
You agree to indemnify and hold harmless the Author and any contributors |
||||
for any direct, indirect, incidental, or consequential third-party claims, |
||||
actions or suits, as well as any related expenses, liabilities, damages, |
||||
settlements or fees arising from your use or misuse of the Software, |
||||
or a violation of any terms of this license. |
||||
|
||||
|
||||
DISCLAIMER OF WARRANTY |
||||
---------------------- |
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER "AS IS" AND |
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR |
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON |
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
+---------------------------------------------------------+ |
||||
| ACKNOWLEDGEMENTS | |
||||
+---------------------------------------------------------+ |
||||
|
||||
This project is based on work by Jan Krákora, (c) 2004-2013. |
||||
The original license is reproduced below. |
||||
|
||||
https://code.google.com/archive/p/phpmodbus/ |
||||
|
||||
Further improvements - John S. Long and other contributors |
||||
|
||||
https://github.com/adduc/phpmodbus |
||||
|
||||
Cleanup and namespaces - Ondřej Hruška, 2016 |
||||
|
||||
https://github.com/MightyPork/phpmodbus |
||||
|
||||
|
||||
+---------------------------------------------------------+ |
||||
| ORIGINAL LICENSE | |
||||
+---------------------------------------------------------+ |
||||
|
||||
|
||||
The Phpmodbus License, Version 1 |
||||
============================ |
||||
|
||||
Copyright (c) 2004, 2013 Jan Krakora |
||||
All rights reserved. |
||||
|
||||
This license is a legal agreement between you and Jan Krakora (the "Author") |
||||
for the use of Phpmodbus (the "Software"). By obtaining, using and/or |
||||
copying the Software, you agree that you have read, understood, and will |
||||
comply with the terms and conditions of this license. |
||||
|
||||
|
||||
PERMITTED USE |
||||
------------- |
||||
|
||||
You are permitted to use, copy, modify, and distribute the Software and its |
||||
documentation, with or without modification, for any purpose, provided that |
||||
the following conditions are met: |
||||
|
||||
1. A copy of this license agreement must be included with the distribution. |
||||
|
||||
2. Redistributions of source code must retain the above copyright notice in |
||||
all source code files. |
||||
|
||||
3. Redistributions in binary form must reproduce the above copyright notice |
||||
in the documentation and/or other materials provided with the distribution. |
||||
|
||||
4. Products derived from the Software must include an acknowledgment that |
||||
they are derived from "Phpmodbus" in their documentation and/or other |
||||
materials provided with the distribution. |
||||
|
||||
5. The name "Phpmodbus" must not be used to endorse or promote products |
||||
derived from the Software without prior written permission from Author. |
||||
|
||||
6. Products derived from the Software may not be called "Phpmodbus", |
||||
nor may "Phpmodbus" appear in their name, without prior written |
||||
permission from Author. |
||||
|
||||
|
||||
INDEMNITY |
||||
--------- |
||||
|
||||
You agree to indemnify and hold harmless the Author and any contributors |
||||
for any direct, indirect, incidental, or consequential third-party claims, |
||||
actions or suits, as well as any related expenses, liabilities, damages, |
||||
settlements or fees arising from your use or misuse of the Software, |
||||
or a violation of any terms of this license. |
||||
|
||||
|
||||
DISCLAIMER OF WARRANTY |
||||
---------------------- |
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER "AS IS" AND |
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR |
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON |
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
|
||||
|
||||
|
||||
End of file. |
@ -1,45 +1,47 @@ |
||||
phpmodbus |
||||
========= |
||||
This project deals with an implementation of the basic functionality of the Modbus TCP and UDP based protocol using PHP. |
||||
It's a copy of the releases from the project page over at [Google Code](https://code.google.com/p/phpmodbus/) with |
||||
composer support added. |
||||
|
||||
Features |
||||
-------- |
||||
|
||||
* Modbus master |
||||
* FC1 - Read coils |
||||
* FC2 - Read input discretes |
||||
* FC3 - Read holding registers |
||||
* FC4 - Read holding input registers |
||||
* FC5 - Write single coil |
||||
* FC6 - Write single register |
||||
* FC15 - Write multiple coils |
||||
* FC16 - Write multiple registers |
||||
* FC22 - Mask Write register |
||||
* FC23 - Read/Write multiple registers |
||||
|
||||
Example |
||||
------- |
||||
# phpmodbus |
||||
|
||||
Implementation of the basic functionality of the Modbus TCP and UDP based protocol using PHP. |
||||
|
||||
This is a fork of the original project at https://code.google.com/p/phpmodbus/ |
||||
|
||||
> **What's new** |
||||
> |
||||
> This fork adds a namespace and fixes issues encountered when porting to PHP 7 |
||||
|
||||
Implemented features: |
||||
* Modbus master |
||||
* FC1 - Read coils |
||||
* FC2 - Read input discretes |
||||
* FC3 - Read holding registers |
||||
* FC4 - Read holding input registers |
||||
* FC5 - Write single coil |
||||
* FC6 - Write single register |
||||
* FC15 - Write multiple coils |
||||
* FC16 - Write multiple registers |
||||
* FC23 - Read/Write multiple registers |
||||
|
||||
Example: |
||||
|
||||
```php |
||||
// Modbus master UDP |
||||
$modbus = new ModbusMaster("192.168.1.1", "UDP"); |
||||
// Read multiple registers |
||||
try { |
||||
$recData = $modbus->readMultipleRegisters(0, 12288, 5); |
||||
} |
||||
catch (Exception $e) { |
||||
// Print error information if any |
||||
echo $modbus; |
||||
echo $e; |
||||
exit; |
||||
} |
||||
// Print data in string format |
||||
echo PhpType::bytes2string($recData); |
||||
require_once dirname(__FILE__) . '/Phpmodbus/ModbusMaster.php'; |
||||
|
||||
// Modbus master UDP |
||||
$modbus = new ModbusMaster("192.168.1.1", "UDP"); |
||||
// Read multiple registers |
||||
try { |
||||
$recData = $modbus->readMultipleRegisters(0, 12288, 5); |
||||
} |
||||
catch (Exception $e) { |
||||
// Print error information if any |
||||
echo $modbus; |
||||
echo $e; |
||||
exit; |
||||
} |
||||
// Print data in string format |
||||
echo PhpType::bytes2string($recData); |
||||
``` |
||||
|
||||
For more see [documentation][] or [FAQ][]. |
||||
For more see [http://code.google.com/p/phpmodbus/downloads/list documentation] or [http://code.google.com/p/phpmodbus/wiki/FAQ FAQ]. |
||||
|
||||
[documentation]: https://code.google.com/p/phpmodbus/downloads/list |
||||
[FAQ]: https://code.google.com/p/phpmodbus/wiki/FAQ |
||||
Note: |
||||
* The PHP extension php_sockets.dll should be enabled (server php.ini file) |
||||
|
@ -1,17 +1,21 @@ |
||||
{ |
||||
"name": "adduc/phpmodbus", |
||||
"description": "Composer version of PhpModBus", |
||||
"license": "LGPL", |
||||
"authors": [ |
||||
{ |
||||
"name": "Honza Krakora", |
||||
"email": "krakora.jan@googlemail.com" |
||||
} |
||||
], |
||||
"autoload": { |
||||
"classmap": [ "Phpmodbus" ] |
||||
}, |
||||
"require": { |
||||
"ext-sockets": "*" |
||||
"name": "MightyPork/phpmodbus", |
||||
"keywords": ["phpmodbus","modbus"], |
||||
"description": "PhpModbus with namespaces and updated to PHP 7", |
||||
"license": "LGPL", |
||||
"require": { |
||||
"php": "^5.3.2 || ^7.0", |
||||
"ext-sockets": "*" |
||||
}, |
||||
"authors": [ |
||||
{ |
||||
"name": "Honza Krakora", |
||||
"email": "krakora.jan@googlemail.com" |
||||
} |
||||
], |
||||
"autoload": { |
||||
"psr-4": { |
||||
"PHPModbus\\": "src/" |
||||
} |
||||
} |
||||
} |
||||
|
@ -0,0 +1,3 @@ |
||||
Those examples have not been updated to use namespaces. |
||||
|
||||
They may not work. Just for reference. |
@ -1,133 +1,136 @@ |
||||
<?php |
||||
/** |
||||
* Phpmodbus Copyright (c) 2004, 2013 Jan Krakora |
||||
* |
||||
* This source file is subject to the "PhpModbus license" that is bundled |
||||
* with this package in the file license.txt. |
||||
* |
||||
* @author Jan Krakora |
||||
* @copyright Copyright (c) 2004, 2013 Jan Krakora |
||||
* @license PhpModbus license |
||||
* @category Phpmodbus |
||||
* @package Phpmodbus |
||||
* @version $id$ |
||||
*/ |
||||
|
||||
/** |
||||
* IecType |
||||
* |
||||
* The class includes set of IEC-1131 data type functions that converts a PHP |
||||
* data types to a IEC data type. |
||||
* |
||||
* @author Jan Krakora |
||||
* @copyright Copyright (c) 2004, 2010 Jan Krakora |
||||
* @package Phpmodbus |
||||
*/ |
||||
class IecType { |
||||
|
||||
/** |
||||
* iecBYTE |
||||
* |
||||
* Converts a value to IEC-1131 BYTE data type |
||||
* |
||||
* @param value value from 0 to 255 |
||||
* @return value IEC BYTE data type |
||||
* |
||||
*/ |
||||
public static function iecBYTE($value) { |
||||
return chr($value & 0xFF); |
||||
} |
||||
|
||||
/** |
||||
* iecINT |
||||
* |
||||
* Converts a value to IEC-1131 INT data type |
||||
* |
||||
* @param value value to be converted |
||||
* @return value IEC-1131 INT data type |
||||
* |
||||
*/ |
||||
public static function iecINT($value) { |
||||
return self::iecBYTE(($value >> 8) & 0x00FF) . |
||||
self::iecBYTE(($value & 0x00FF)); |
||||
} |
||||
|
||||
/** |
||||
* iecDINT |
||||
* |
||||
* Converts a value to IEC-1131 DINT data type |
||||
* |
||||
* @param value value to be converted |
||||
* @param value endianness defines endian codding (little endian == 0, big endian == 1) |
||||
* @return value IEC-1131 INT data type |
||||
* |
||||
*/ |
||||
public static function iecDINT($value, $endianness = 0) { |
||||
// result with right endianness |
||||
return self::endianness($value, $endianness); |
||||
} |
||||
|
||||
/** |
||||
* iecREAL |
||||
* |
||||
* Converts a value to IEC-1131 REAL data type. The function uses function @use float2iecReal. |
||||
* |
||||
* @param value value to be converted |
||||
* @param value endianness defines endian codding (little endian == 0, big endian == 1) |
||||
* @return value IEC-1131 REAL data type |
||||
*/ |
||||
public static function iecREAL($value, $endianness = 0) { |
||||
// iecREAL representation |
||||
$real = self::float2iecReal($value); |
||||
// result with right endianness |
||||
return self::endianness($real, $endianness); |
||||
} |
||||
|
||||
/** |
||||
* float2iecReal |
||||
* |
||||
* This function converts float value to IEC-1131 REAL single precision form. |
||||
* |
||||
* For more see [{@link http://en.wikipedia.org/wiki/Single_precision Single precision on Wiki}] or |
||||
* [{@link http://de.php.net/manual/en/function.base-convert.php PHP base_convert function commentary}, Todd Stokes @ Georgia Tech 21-Nov-2007] or |
||||
* [{@link http://www.php.net/manual/en/function.pack.php PHP pack/unpack functionality}] |
||||
* |
||||
* @param float value to be converted |
||||
* @return value IEC REAL data type |
||||
*/ |
||||
private static function float2iecReal($value) { |
||||
// get float binary string |
||||
$float = pack("f", $value); |
||||
// set 32-bit unsigned integer of the float |
||||
$w = unpack("L", $float); |
||||
return $w[1]; |
||||
} |
||||
|
||||
/** |
||||
* endianness |
||||
* |
||||
* Make endianess as required. |
||||
* For more see http://en.wikipedia.org/wiki/Endianness |
||||
* |
||||
* @param int $value |
||||
* @param bool $endianness |
||||
* @return int |
||||
*/ |
||||
private static function endianness($value, $endianness = 0) { |
||||
if ($endianness == 0) |
||||
return |
||||
self::iecBYTE(($value >> 8) & 0x000000FF) . |
||||
self::iecBYTE(($value & 0x000000FF)) . |
||||
self::iecBYTE(($value >> 24) & 0x000000FF) . |
||||
self::iecBYTE(($value >> 16) & 0x000000FF); |
||||
else |
||||
return |
||||
self::iecBYTE(($value >> 24) & 0x000000FF) . |
||||
self::iecBYTE(($value >> 16) & 0x000000FF) . |
||||
self::iecBYTE(($value >> 8) & 0x000000FF) . |
||||
self::iecBYTE(($value & 0x000000FF)); |
||||
} |
||||
|
||||
} |
||||
|
||||
<?php |
||||
|
||||
namespace PHPModbus; |
||||
|
||||
/** |
||||
* Phpmodbus Copyright (c) 2004, 2013 Jan Krakora |
||||
* |
||||
* This source file is subject to the "PhpModbus license" that is bundled |
||||
* with this package in the file license.txt. |
||||
* |
||||
* @author Jan Krakora |
||||
* @copyright Copyright (c) 2004, 2013 Jan Krakora |
||||
* @license PhpModbus license |
||||
* @category Phpmodbus |
||||
* @package Phpmodbus |
||||
* @version $id$ |
||||
*/ |
||||
|
||||
/** |
||||
* IecType |
||||
* |
||||
* The class includes set of IEC-1131 data type functions that converts a PHP |
||||
* data types to a IEC data type. |
||||
* |
||||
* @author Jan Krakora |
||||
* @copyright Copyright (c) 2004, 2010 Jan Krakora |
||||
* @package Phpmodbus |
||||
*/ |
||||
class IecType { |
||||
|
||||
/** |
||||
* iecBYTE |
||||
* |
||||
* Converts a value to IEC-1131 BYTE data type |
||||
* |
||||
* @param value value from 0 to 255 |
||||
* @return value IEC BYTE data type |
||||
* |
||||
*/ |
||||
public static function iecBYTE($value) { |
||||
return chr($value & 0xFF); |
||||
} |
||||
|
||||
/** |
||||
* iecINT |
||||
* |
||||
* Converts a value to IEC-1131 INT data type |
||||
* |
||||
* @param value value to be converted |
||||
* @return value IEC-1131 INT data type |
||||
* |
||||
*/ |
||||
public static function iecINT($value) { |
||||
return self::iecBYTE(($value >> 8) & 0x00FF) . |
||||
self::iecBYTE(($value & 0x00FF)); |
||||
} |
||||
|
||||
/** |
||||
* iecDINT |
||||
* |
||||
* Converts a value to IEC-1131 DINT data type |
||||
* |
||||
* @param value value to be converted |
||||
* @param value endianness defines endian codding (little endian == 0, big endian == 1) |
||||
* @return value IEC-1131 INT data type |
||||
* |
||||
*/ |
||||
public static function iecDINT($value, $endianness = 0) { |
||||
// result with right endianness |
||||
return self::endianness($value, $endianness); |
||||
} |
||||
|
||||
/** |
||||
* iecREAL |
||||
* |
||||
* Converts a value to IEC-1131 REAL data type. The function uses function @use float2iecReal. |
||||
* |
||||
* @param value value to be converted |
||||
* @param value endianness defines endian codding (little endian == 0, big endian == 1) |
||||
* @return value IEC-1131 REAL data type |
||||
*/ |
||||
public static function iecREAL($value, $endianness = 0) { |
||||
// iecREAL representation |
||||
$real = self::float2iecReal($value); |
||||
// result with right endianness |
||||
return self::endianness($real, $endianness); |
||||
} |
||||
|
||||
/** |
||||
* float2iecReal |
||||
* |
||||
* This function converts float value to IEC-1131 REAL single precision form. |
||||
* |
||||
* For more see [{@link http://en.wikipedia.org/wiki/Single_precision Single precision on Wiki}] or |
||||
* [{@link http://de.php.net/manual/en/function.base-convert.php PHP base_convert function commentary}, Todd Stokes @ Georgia Tech 21-Nov-2007] or |
||||
* [{@link http://www.php.net/manual/en/function.pack.php PHP pack/unpack functionality}] |
||||
* |
||||
* @param float value to be converted |
||||
* @return value IEC REAL data type |
||||
*/ |
||||
private static function float2iecReal($value) { |
||||
// get float binary string |
||||
$float = pack("f", $value); |
||||
// set 32-bit unsigned integer of the float |
||||
$w = unpack("L", $float); |
||||
return $w[1]; |
||||
} |
||||
|
||||
/** |
||||
* endianness |
||||
* |
||||
* Make endianess as required. |
||||
* For more see http://en.wikipedia.org/wiki/Endianness |
||||
* |
||||
* @param int $value |
||||
* @param bool $endianness |
||||
* @return int |
||||
*/ |
||||
private static function endianness($value, $endianness = 0) { |
||||
if ($endianness == 0) |
||||
return |
||||
self::iecBYTE(($value >> 8) & 0x000000FF) . |
||||
self::iecBYTE(($value & 0x000000FF)) . |
||||
self::iecBYTE(($value >> 24) & 0x000000FF) . |
||||
self::iecBYTE(($value >> 16) & 0x000000FF); |
||||
else |
||||
return |
||||
self::iecBYTE(($value >> 24) & 0x000000FF) . |
||||
self::iecBYTE(($value >> 16) & 0x000000FF) . |
||||
self::iecBYTE(($value >> 8) & 0x000000FF) . |
||||
self::iecBYTE(($value & 0x000000FF)); |
||||
} |
||||
|
||||
} |
||||
|
||||
?> |
@ -1,49 +1,50 @@ |
||||
<?php |
||||
/** |
||||
* Phpmodbus Copyright (c) 2004, 2012 Jan Krakora |
||||
* |
||||
* This source file is subject to the "PhpModbus license" that is bundled |
||||
* with this package in the file license.txt. |
||||
* |
||||
* |
||||
* @copyright Copyright (c) 2004, 2012 Jan Krakora |
||||
* @license PhpModbus license |
||||
* @category Phpmodbus |
||||
* @tutorial Phpmodbus.pkg |
||||
* @package Phpmodbus |
||||
* @version $id$ |
||||
* |
||||
*/ |
||||
|
||||
require_once dirname(__FILE__) . '/ModbusMaster.php'; |
||||
|
||||
/** |
||||
* ModbusMasterTcp |
||||
* |
||||
* This class deals with the MODBUS master using TCP. Extends ModbusMaster class. |
||||
* |
||||
* Implemented MODBUS functions: |
||||
* - FC 1: read coils |
||||
* - FC 3: read multiple registers |
||||
* - FC 15: write multiple coils |
||||
* - FC 16: write multiple registers |
||||
* - FC 23: read write registers |
||||
* |
||||
* @author Jan Krakora |
||||
* @copyright Copyright (c) 2004, 2012 Jan Krakora |
||||
* @package Phpmodbus |
||||
* |
||||
*/ |
||||
class ModbusMasterTcp extends ModbusMaster { |
||||
/** |
||||
* ModbusMasterTcp |
||||
* |
||||
* This is the constructor that defines {@link $host} IP address of the object. |
||||
* |
||||
* @param String $host An IP address of a Modbus TCP device. E.g. "192.168.1.1". |
||||
*/ |
||||
function ModbusMasterTcp($host){ |
||||
$this->host = $host; |
||||
$this->socket_protocol = "TCP"; |
||||
} |
||||
} |
||||
<?php |
||||
|
||||
namespace PHPModbus; |
||||
|
||||
/** |
||||
* Phpmodbus Copyright (c) 2004, 2012 Jan Krakora |
||||
* |
||||
* This source file is subject to the "PhpModbus license" that is bundled |
||||
* with this package in the file license.txt. |
||||
* |
||||
* |
||||
* @copyright Copyright (c) 2004, 2012 Jan Krakora |
||||
* @license PhpModbus license |
||||
* @category Phpmodbus |
||||
* @tutorial Phpmodbus.pkg |
||||
* @package Phpmodbus |
||||
* @version $id$ |
||||
* |
||||
*/ |
||||
|
||||
/** |
||||
* ModbusMasterTcp |
||||
* |
||||
* This class deals with the MODBUS master using TCP. Extends ModbusMaster class. |
||||
* |
||||
* Implemented MODBUS functions: |
||||
* - FC 1: read coils |
||||
* - FC 3: read multiple registers |
||||
* - FC 15: write multiple coils |
||||
* - FC 16: write multiple registers |
||||
* - FC 23: read write registers |
||||
* |
||||
* @author Jan Krakora |
||||
* @copyright Copyright (c) 2004, 2012 Jan Krakora |
||||
* @package Phpmodbus |
||||
* |
||||
*/ |
||||
class ModbusMasterTcp extends ModbusMaster { |
||||
/** |
||||
* ModbusMasterTcp |
||||
* |
||||
* This is the constructor that defines {@link $host} IP address of the object. |
||||
* |
||||
* @param String $host An IP address of a Modbus TCP device. E.g. "192.168.1.1". |
||||
*/ |
||||
function ModbusMasterTcp($host){ |
||||
$this->host = $host; |
||||
$this->socket_protocol = "TCP"; |
||||
} |
||||
} |
@ -1,50 +1,51 @@ |
||||
<?php |
||||
/** |
||||
* Phpmodbus Copyright (c) 2004, 2012 Jan Krakora |
||||
* |
||||
* This source file is subject to the "PhpModbus license" that is bundled |
||||
* with this package in the file license.txt. |
||||
* |
||||
* |
||||
* @copyright Copyright (c) 2004, 2012 Jan Krakora |
||||
* @license PhpModbus license |
||||
* @category Phpmodbus |
||||
* @tutorial Phpmodbus.pkg |
||||
* @package Phpmodbus |
||||
* @version $id$ |
||||
* |
||||
*/ |
||||
|
||||
require_once dirname(__FILE__) . '/ModbusMaster.php'; |
||||
|
||||
/** |
||||
* ModbusMasterUdp |
||||
* |
||||
* This class deals with the MODBUS master using UDP stack. |
||||
* |
||||
* Implemented MODBUS master functions: |
||||
* - FC 1: read coils |
||||
* - FC 3: read multiple registers |
||||
* - FC 15: write multiple coils |
||||
* - FC 16: write multiple registers |
||||
* - FC 23: read write registers |
||||
* |
||||
* @author Jan Krakora |
||||
* @copyright Copyright (c) 2004, 2012 Jan Krakora |
||||
* @package Phpmodbus |
||||
* |
||||
*/ |
||||
class ModbusMasterUdp extends ModbusMaster { |
||||
|
||||
/** |
||||
* ModbusMasterUdp |
||||
* |
||||
* This is the constructor that defines {@link $host} IP address of the object. |
||||
* |
||||
* @param String $host An IP address of a Modbus UDP device. E.g. "192.168.1.1". |
||||
*/ |
||||
function ModbusMasterUdp($host){ |
||||
$this->host = $host; |
||||
$this->socket_protocol = "UDP"; |
||||
} |
||||
} |
||||
<?php |
||||
|
||||
namespace PHPModbus; |
||||
|
||||
/** |
||||
* Phpmodbus Copyright (c) 2004, 2012 Jan Krakora |
||||
* |
||||
* This source file is subject to the "PhpModbus license" that is bundled |
||||
* with this package in the file license.txt. |
||||
* |
||||
* |
||||
* @copyright Copyright (c) 2004, 2012 Jan Krakora |
||||
* @license PhpModbus license |
||||
* @category Phpmodbus |
||||
* @tutorial Phpmodbus.pkg |
||||
* @package Phpmodbus |
||||
* @version $id$ |
||||
* |
||||
*/ |
||||
|
||||
/** |
||||
* ModbusMasterUdp |
||||
* |
||||
* This class deals with the MODBUS master using UDP stack. |
||||
* |
||||
* Implemented MODBUS master functions: |
||||
* - FC 1: read coils |
||||
* - FC 3: read multiple registers |
||||
* - FC 15: write multiple coils |
||||
* - FC 16: write multiple registers |
||||
* - FC 23: read write registers |
||||
* |
||||
* @author Jan Krakora |
||||
* @copyright Copyright (c) 2004, 2012 Jan Krakora |
||||
* @package Phpmodbus |
||||
* |
||||
*/ |
||||
class ModbusMasterUdp extends ModbusMaster { |
||||
|
||||
/** |
||||
* ModbusMasterUdp |
||||
* |
||||
* This is the constructor that defines {@link $host} IP address of the object. |
||||
* |
||||
* @param String $host An IP address of a Modbus UDP device. E.g. "192.168.1.1". |
||||
*/ |
||||
function ModbusMasterUdp($host){ |
||||
$this->host = $host; |
||||
$this->socket_protocol = "UDP"; |
||||
} |
||||
} |
@ -1,249 +1,252 @@ |
||||
<?php |
||||
/** |
||||
* Phpmodbus Copyright (c) 2004, 2012 Jan Krakora |
||||
* |
||||
* This source file is subject to the "PhpModbus license" that is bundled |
||||
* with this package in the file license.txt. |
||||
* |
||||
* @author Jan Krakora |
||||
* @copyright Copyright (c) 2004, 2012 Jan Krakora |
||||
* @license PhpModbus license |
||||
* @category Phpmodbus |
||||
* @package Phpmodbus |
||||
* @version $id$ |
||||
* |
||||
*/ |
||||
|
||||
/** |
||||
* PhpType |
||||
* |
||||
* The class includes set of methods that convert the received Modbus data |
||||
* (array of bytes) to the PHP data type, i.e. signed int, unsigned int and float. |
||||
* |
||||
* @author Jan Krakora |
||||
* @copyright Copyright (c) 2004, 2012 Jan Krakora |
||||
* @package Phpmodbus |
||||
* |
||||
*/ |
||||
class PhpType { |
||||
|
||||
/** |
||||
* bytes2float |
||||
* |
||||
* The function converts array of 4 bytes to float. The return value |
||||
* depends on order of the input bytes (endianning). |
||||
* |
||||
* @param array $values |
||||
* @param bool $endianness |
||||
* @return float |
||||
*/ |
||||
public static function bytes2float($values, $endianness = 0) { |
||||
$data = array(); |
||||
$real = 0; |
||||
|
||||
// Set the array to correct form |
||||
$data = self::checkData($values); |
||||
// Combine bytes |
||||
$real = self::combineBytes($data, $endianness); |
||||
// Convert the real value to float |
||||
return (float) self::real2float($real); |
||||
} |
||||
|
||||
/** |
||||
* bytes2signedInt |
||||
* |
||||
* The function converts array of 2 or 4 bytes to signed integer. |
||||
* The return value depends on order of the input bytes (endianning). |
||||
* |
||||
* @param array $values |
||||
* @param bool $endianness |
||||
* @return int |
||||
*/ |
||||
public static function bytes2signedInt($values, $endianness = 0) { |
||||
$data = array(); |
||||
$int = 0; |
||||
// Set the array to correct form |
||||
$data = self::checkData($values); |
||||
// Combine bytes |
||||
$int = self::combineBytes($data, $endianness); |
||||
// In the case of signed 2 byte value convert it to 4 byte one |
||||
if ((count($values) == 2) && ((0x8000 & $int) > 0)) { |
||||
$int = 0xFFFF8000 | $int; |
||||
} |
||||
// Convert the value |
||||
return (int) self::dword2signedInt($int); |
||||
} |
||||
|
||||
/** |
||||
* bytes2unsignedInt |
||||
* |
||||
* The function converts array of 2 or 4 bytes to unsigned integer. |
||||
* The return value depends on order of the input bytes (endianning). |
||||
* |
||||
* @param array $values |
||||
* @param bool $endianness |
||||
* @return int|float |
||||
*/ |
||||
public static function bytes2unsignedInt($values, $endianness = 0) { |
||||
$data = array(); |
||||
$int = 0; |
||||
// Set the array to correct form |
||||
$data = self::checkData($values); |
||||
// Combine bytes |
||||
$int = self::combineBytes($data, $endianness); |
||||
// Convert the value |
||||
return self::dword2unsignedInt($int); |
||||
} |
||||
|
||||
/** |
||||
* bytes2string |
||||
* |
||||
* The function converts an values array to the string. The function detects |
||||
* the end of the string by 0x00 character as defined by string standards. |
||||
* |
||||
* @param array $values |
||||
* @param bool $endianness |
||||
* @return string |
||||
*/ |
||||
public static function bytes2string($values, $endianness = 0) { |
||||
// Prepare string variable |
||||
$str = ""; |
||||
// Parse the received data word array |
||||
for($i=0;$i<count($values);$i+=2) { |
||||
if ($endianness) { |
||||
if($values[$i] != 0) |
||||
$str .= chr($values[$i]); |
||||
else |
||||
break; |
||||
if($values[$i+1] != 0) |
||||
$str .= chr($values[$i+1]); |
||||
else |
||||
break; |
||||
} |
||||
else { |
||||
if($values[$i+1] != 0) |
||||
$str .= chr($values[$i+1]); |
||||
else |
||||
break; |
||||
if($values[$i] != 0) |
||||
$str .= chr($values[$i]); |
||||
else |
||||
break; |
||||
} |
||||
} |
||||
// return string |
||||
return $str; |
||||
} |
||||
|
||||
/** |
||||
* real2float |
||||
* |
||||
* This function converts a value in IEC-1131 REAL single precision form to float. |
||||
* |
||||
* For more see [{@link http://en.wikipedia.org/wiki/Single_precision Single precision on Wiki}] or |
||||
* [{@link http://de.php.net/manual/en/function.base-convert.php PHP base_convert function commentary}, Todd Stokes @ Georgia Tech 21-Nov-2007] or |
||||
* [{@link http://www.php.net/manual/en/function.pack.php PHP pack/unpack functionality}] |
||||
* |
||||
* @param value value in IEC REAL data type to be converted |
||||
* @return float float value |
||||
*/ |
||||
private static function real2float($value) { |
||||
// get unsigned long |
||||
$ulong = pack("L", $value); |
||||
// set float |
||||
$float = unpack("f", $ulong); |
||||
|
||||
return $float[1]; |
||||
} |
||||
|
||||
/** |
||||
* dword2signedInt |
||||
* |
||||
* Switch double word to signed integer |
||||
* |
||||
* @param int $value |
||||
* @return int |
||||
*/ |
||||
private static function dword2signedInt($value) { |
||||
if ((0x80000000 & $value) != 0) { |
||||
return -(0x7FFFFFFF & ~$value)-1; |
||||
} else { |
||||
return (0x7FFFFFFF & $value); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* dword2signedInt |
||||
* |
||||
* Switch double word to unsigned integer |
||||
* |
||||
* @param int $value |
||||
* @return int|float |
||||
*/ |
||||
private static function dword2unsignedInt($value) { |
||||
if ((0x80000000 & $value) != 0) { |
||||
return ((float) (0x7FFFFFFF & $value)) + 2147483648; |
||||
} else { |
||||
return (int) (0x7FFFFFFF & $value); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* checkData |
||||
* |
||||
* Check if the data variable is array, and check if the values are numeric |
||||
* |
||||
* @param int $data |
||||
* @return int |
||||
*/ |
||||
private static function checkData($data) { |
||||
// Check the data |
||||
if (!is_array($data) || |
||||
count($data)<2 || |
||||
count($data)>4 || |
||||
count($data)==3) { |
||||
throw new Exception('The input data should be an array of 2 or 4 bytes.'); |
||||
} |
||||
// Fill the rest of array by zeroes |
||||
if (count($data) == 2) { |
||||
$data[2] = 0; |
||||
$data[3] = 0; |
||||
} |
||||
// Check the values to be number |
||||
if (!is_numeric($data[0]) || |
||||
!is_numeric($data[1]) || |
||||
!is_numeric($data[2]) || |
||||
!is_numeric($data[3])) { |
||||
throw new Exception('Data are not numeric or the array keys are not indexed by 0,1,2 and 3'); |
||||
} |
||||
|
||||
return $data; |
||||
} |
||||
|
||||
/** |
||||
* combineBytes |
||||
* |
||||
* Combine bytes together |
||||
* |
||||
* @param int $data |
||||
* @param bool $endianness |
||||
* @return int |
||||
*/ |
||||
private static function combineBytes($data, $endianness) { |
||||
$value = 0; |
||||
// Combine bytes |
||||
if ($endianness == 0) |
||||
$value = (($data[3] & 0xFF)<<16) | |
||||
(($data[2] & 0xFF)<<24) | |
||||
(($data[1] & 0xFF)) | |
||||
(($data[0] & 0xFF)<<8); |
||||
else |
||||
$value = (($data[3] & 0xFF)<<24) | |
||||
(($data[2] & 0xFF)<<16) | |
||||
(($data[1] & 0xFF)<<8) | |
||||
(($data[0] & 0xFF)); |
||||
|
||||
return $value; |
||||
} |
||||
} |
||||
<?php |
||||
|
||||
namespace PHPModbus; |
||||
|
||||
/** |
||||
* Phpmodbus Copyright (c) 2004, 2012 Jan Krakora |
||||
* |
||||
* This source file is subject to the "PhpModbus license" that is bundled |
||||
* with this package in the file license.txt. |
||||
* |
||||
* @author Jan Krakora |
||||
* @copyright Copyright (c) 2004, 2012 Jan Krakora |
||||
* @license PhpModbus license |
||||
* @category Phpmodbus |
||||
* @package Phpmodbus |
||||
* @version $id$ |
||||
* |
||||
*/ |
||||
|
||||
/** |
||||
* PhpType |
||||
* |
||||
* The class includes set of methods that convert the received Modbus data |
||||
* (array of bytes) to the PHP data type, i.e. signed int, unsigned int and float. |
||||
* |
||||
* @author Jan Krakora |
||||
* @copyright Copyright (c) 2004, 2012 Jan Krakora |
||||
* @package Phpmodbus |
||||
* |
||||
*/ |
||||
class PhpType { |
||||
|
||||
/** |
||||
* bytes2float |
||||
* |
||||
* The function converts array of 4 bytes to float. The return value |
||||
* depends on order of the input bytes (endianning). |
||||
* |
||||
* @param array $values |
||||
* @param bool $endianness |
||||
* @return float |
||||
*/ |
||||
public static function bytes2float($values, $endianness = 0) { |
||||
$data = array(); |
||||
$real = 0; |
||||
|
||||
// Set the array to correct form |
||||
$data = self::checkData($values); |
||||
// Combine bytes |
||||
$real = self::combineBytes($data, $endianness); |
||||
// Convert the real value to float |
||||
return (float) self::real2float($real); |
||||
} |
||||
|
||||
/** |
||||
* bytes2signedInt |
||||
* |
||||
* The function converts array of 2 or 4 bytes to signed integer. |
||||
* The return value depends on order of the input bytes (endianning). |
||||
* |
||||
* @param array $values |
||||
* @param bool $endianness |
||||
* @return int |
||||
*/ |
||||
public static function bytes2signedInt($values, $endianness = 0) { |
||||
$data = array(); |
||||
$int = 0; |
||||
// Set the array to correct form |
||||
$data = self::checkData($values); |
||||
// Combine bytes |
||||
$int = self::combineBytes($data, $endianness); |
||||
// In the case of signed 2 byte value convert it to 4 byte one |
||||
if ((count($values) == 2) && ((0x8000 & $int) > 0)) { |
||||
$int = 0xFFFF8000 | $int; |
||||
} |
||||
// Convert the value |
||||
return (int) self::dword2signedInt($int); |
||||
} |
||||
|
||||
/** |
||||
* bytes2unsignedInt |
||||
* |
||||
* The function converts array of 2 or 4 bytes to unsigned integer. |
||||
* The return value depends on order of the input bytes (endianning). |
||||
* |
||||
* @param array $values |
||||
* @param bool $endianness |
||||
* @return int|float |
||||
*/ |
||||
public static function bytes2unsignedInt($values, $endianness = 0) { |
||||
$data = array(); |
||||
$int = 0; |
||||
// Set the array to correct form |
||||
$data = self::checkData($values); |
||||
// Combine bytes |
||||
$int = self::combineBytes($data, $endianness); |
||||
// Convert the value |
||||
return self::dword2unsignedInt($int); |
||||
} |
||||
|
||||
/** |
||||
* bytes2string |
||||
* |
||||
* The function converts an values array to the string. The function detects |
||||
* the end of the string by 0x00 character as defined by string standards. |
||||
* |
||||
* @param array $values |
||||
* @param bool $endianness |
||||
* @return string |
||||
*/ |
||||
public static function bytes2string($values, $endianness = 0) { |
||||
// Prepare string variable |
||||
$str = ""; |
||||
// Parse the received data word array |
||||
for($i=0;$i<count($values);$i+=2) { |
||||
if ($endianness) { |
||||
if($values[$i] != 0) |
||||
$str .= chr($values[$i]); |
||||
else |
||||
break; |
||||
if($values[$i+1] != 0) |
||||
$str .= chr($values[$i+1]); |
||||
else |
||||
break; |
||||
} |
||||
else { |
||||
if($values[$i+1] != 0) |
||||
$str .= chr($values[$i+1]); |
||||
else |
||||
break; |
||||
if($values[$i] != 0) |
||||
$str .= chr($values[$i]); |
||||
else |
||||
break; |
||||
} |
||||
} |
||||
// return string |
||||
return $str; |
||||
} |
||||
|
||||
/** |
||||
* real2float |
||||
* |
||||
* This function converts a value in IEC-1131 REAL single precision form to float. |
||||
* |
||||
* For more see [{@link http://en.wikipedia.org/wiki/Single_precision Single precision on Wiki}] or |
||||
* [{@link http://de.php.net/manual/en/function.base-convert.php PHP base_convert function commentary}, Todd Stokes @ Georgia Tech 21-Nov-2007] or |
||||
* [{@link http://www.php.net/manual/en/function.pack.php PHP pack/unpack functionality}] |
||||
* |
||||
* @param value value in IEC REAL data type to be converted |
||||
* @return float float value |
||||
*/ |
||||
private static function real2float($value) { |
||||
// get unsigned long |
||||
$ulong = pack("L", $value); |
||||
// set float |
||||
$float = unpack("f", $ulong); |
||||
|
||||
return $float[1]; |
||||
} |
||||
|
||||
/** |
||||
* dword2signedInt |
||||
* |
||||
* Switch double word to signed integer |
||||
* |
||||
* @param int $value |
||||
* @return int |
||||
*/ |
||||
private static function dword2signedInt($value) { |
||||
if ((0x80000000 & $value) != 0) { |
||||
return -(0x7FFFFFFF & ~$value)-1; |
||||
} else { |
||||
return (0x7FFFFFFF & $value); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* dword2signedInt |
||||
* |
||||
* Switch double word to unsigned integer |
||||
* |
||||
* @param int $value |
||||
* @return int|float |
||||
*/ |
||||
private static function dword2unsignedInt($value) { |
||||
if ((0x80000000 & $value) != 0) { |
||||
return ((float) (0x7FFFFFFF & $value)) + 2147483648; |
||||
} else { |
||||
return (int) (0x7FFFFFFF & $value); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* checkData |
||||
* |
||||
* Check if the data variable is array, and check if the values are numeric |
||||
* |
||||
* @param int $data |
||||
* @return int |
||||
*/ |
||||
private static function checkData($data) { |
||||
// Check the data |
||||
if (!is_array($data) || |
||||
count($data)<2 || |
||||
count($data)>4 || |
||||
count($data)==3) { |
||||
throw new Exception('The input data should be an array of 2 or 4 bytes.'); |
||||
} |
||||
// Fill the rest of array by zeroes |
||||
if (count($data) == 2) { |
||||
$data[2] = 0; |
||||
$data[3] = 0; |
||||
} |
||||
// Check the values to be number |
||||
if (!is_numeric($data[0]) || |
||||
!is_numeric($data[1]) || |
||||
!is_numeric($data[2]) || |
||||
!is_numeric($data[3])) { |
||||
throw new Exception('Data are not numeric or the array keys are not indexed by 0,1,2 and 3'); |
||||
} |
||||
|
||||
return $data; |
||||
} |
||||
|
||||
/** |
||||
* combineBytes |
||||
* |
||||
* Combine bytes together |
||||
* |
||||
* @param int $data |
||||
* @param bool $endianness |
||||
* @return int |
||||
*/ |
||||
private static function combineBytes($data, $endianness) { |
||||
$value = 0; |
||||
// Combine bytes |
||||
if ($endianness == 0) |
||||
$value = (($data[3] & 0xFF)<<16) | |
||||
(($data[2] & 0xFF)<<24) | |
||||
(($data[1] & 0xFF)) | |
||||
(($data[0] & 0xFF)<<8); |
||||
else |
||||
$value = (($data[3] & 0xFF)<<24) | |
||||
(($data[2] & 0xFF)<<16) | |
||||
(($data[1] & 0xFF)<<8) | |
||||
(($data[0] & 0xFF)); |
||||
|
||||
return $value; |
||||
} |
||||
} |
||||
?> |
@ -0,0 +1,3 @@ |
||||
Probably broken and dubious. |
||||
|
||||
Left from the original repo. |
@ -1,210 +0,0 @@ |
||||
<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 4: read multiple input registers</para></listitem> |
||||
<listitem><para>FC 5: write single coil</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_fc4}"> |
||||
<title>FC4 - read multiple input registers </title> |
||||
<para> |
||||
FC4 functionality example |
||||
</para> |
||||
<para> |
||||
{@example example_fc4.php} |
||||
</para> |
||||
</refsect2> |
||||
<refsect2 id="{@id example_fc5}"> |
||||
<title>FC5 - write single coil</title> |
||||
<para> |
||||
FC5 functionality example |
||||
</para> |
||||
<para> |
||||
{@example example_fc5.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> |
Before Width: | Height: | Size: 1.2 KiB |
Loading…
Reference in new issue