diff --git a/Phpmodbus/ModbusMaster.php b/Phpmodbus/ModbusMaster.php index a03229f..3d52268 100644 --- a/Phpmodbus/ModbusMaster.php +++ b/Phpmodbus/ModbusMaster.php @@ -48,7 +48,12 @@ class ModbusMaster { public $client_port = "502"; public $status; public $timeout_sec = 5; // Timeout 5 sec - public $endianness = 0; // Endianness codding (little endian == 0, big endian == 1) + public $endianness = 0; + /* 1: low byte first, low word first (little endian) + * 2: low byte first, high word first + * 3: high byte first, low word first (default, backward compatibility also 0) + * 4: high byte first, high word first (big endian) + */ public $socket_protocol = "UDP"; // Socket protocol (TCP, UDP) /** diff --git a/Phpmodbus/PhpType.php b/Phpmodbus/PhpType.php index 5552e61..a46d055 100644 --- a/Phpmodbus/PhpType.php +++ b/Phpmodbus/PhpType.php @@ -229,21 +229,36 @@ private static function checkData($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; - } + private static function combineBytes($data, $endianness) { + $value = 0; + // Combine bytes + switch($endianness) { + case 1: + $value = (($data[3] & 0xFF)<<24) | + (($data[2] & 0xFF)<<16) | + (($data[1] & 0xFF)<<8) | + (($data[0] & 0xFF)); + break; + case 2: + $value = (($data[1] & 0xFF)<<24) | + (($data[0] & 0xFF)<<16) | + (($data[3] & 0xFF)<<8) | + (($data[2] & 0xFF)); + break; + case 4: + $value = (($data[0] & 0xFF)<<24) | + (($data[1] & 0xFF)<<16) | + (($data[2] & 0xFF)<<8) | + (($data[3] & 0xFF)); + break; + default: + $value = (($data[2] & 0xFF)<<24) | + (($data[3] & 0xFF)<<16) | + (($data[0] & 0xFF)<<8) | + (($data[1] & 0xFF)); + break; + } + return $value; + } } ?> \ No newline at end of file