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.
		
		
		
		
		
			
		
			
				
					
					
						
							65 lines
						
					
					
						
							1.8 KiB
						
					
					
				
			
		
		
	
	
							65 lines
						
					
					
						
							1.8 KiB
						
					
					
				| <?php
 | |
| require __DIR__ . '/../vendor/autoload.php';
 | |
| 
 | |
| use PHPModbus\ModbusMaster;
 | |
| use PHPModbus\PhpType;
 | |
| 
 | |
| $ip = filter_var($_GET['ip'], FILTER_VALIDATE_IP) ? $_GET['ip'] : '192.192.15.51';
 | |
| $unitId = ((int)$_GET['unitid']) ?: 0;
 | |
| $reference = ((int)$_GET['reference']) ?: 12288;
 | |
| $quantity = ((int)$_GET['quantity']) ?: 10;
 | |
| 
 | |
| $modbus = new ModbusMaster($ip, 'UDP');
 | |
| 
 | |
| try {
 | |
|     // FC 3
 | |
|     // read 10 words (20 bytes) from device ID=0, address=12288
 | |
|     $recData = $modbus->readMultipleRegisters($unitId, $reference, $quantity);
 | |
| } catch (Exception $e) {
 | |
|     // Print error information if any
 | |
|     echo $modbus;
 | |
|     echo $e;
 | |
|     exit;
 | |
| }
 | |
| 
 | |
| // Received data
 | |
| echo "<h1>Received Data</h1>\n";
 | |
| print_r($recData);
 | |
| 
 | |
| // Conversion
 | |
| echo "<h2>32 bits types</h2>\n";
 | |
| // Chunk the data array to set of 4 bytes
 | |
| $values = array_chunk($recData, 4);
 | |
| 
 | |
| // Get float from REAL interpretation
 | |
| echo "<h3>REAL to Float</h3>\n";
 | |
| foreach ($values as $bytes)
 | |
|     echo PhpType::bytes2float($bytes) . "</br>";
 | |
| 
 | |
| // Get integer from DINT interpretation
 | |
| echo "<h3>DINT to integer </h3>\n";
 | |
| foreach ($values as $bytes)
 | |
|     echo PhpType::bytes2signedInt($bytes) . "</br>";
 | |
| 
 | |
| // Get integer of float from DINT interpretation
 | |
| echo "<h3>DWORD to integer (or float) </h3>\n";
 | |
| foreach ($values as $bytes)
 | |
|     echo PhpType::bytes2unsignedInt($bytes) . "</br>";
 | |
| 
 | |
| echo "<h2>16 bit types</h2>\n";
 | |
| // Chunk the data array to set of 4 bytes
 | |
| $values = array_chunk($recData, 2);
 | |
| 
 | |
| // Get signed integer from INT interpretation
 | |
| echo "<h3>INT to integer </h3>\n";
 | |
| foreach ($values as $bytes)
 | |
|     echo PhpType::bytes2signedInt($bytes) . "</br>";
 | |
| 
 | |
| // Get unsigned integer from WORD interpretation
 | |
| echo "<h3>WORD to integer </h3>\n";
 | |
| foreach ($values as $bytes)
 | |
|     echo PhpType::bytes2unsignedInt($bytes) . "</br>";
 | |
| 
 | |
| // Get string from STRING interpretation
 | |
| echo "<h3>STRING to string </h3>\n";
 | |
| echo PhpType::bytes2string($recData) . "</br>";
 | |
| 
 |