<?php
require __DIR__ . '/../vendor/autoload.php';

use PHPModbus\ModbusMaster;
use PHPModbus\PhpType;

require_once __DIR__ . '/request_input_data.php'; // 'ip', 'unitid','reference','quantity' are read from $_GET

$modbus = new ModbusMaster($ip, 'UDP');

try {
    // FC 3
    $recData = $modbus->readMultipleRegisters($unitId, $reference, $quantity);
} catch (Exception $e) {
    echo $modbus;
    echo $e;
    exit;
}

?>
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=windows-1250">
    <meta name="generator" content="PSPad editor, www.pspad.com">
    <title>WAGO 750-841 M-memory dump</title>
</head>
<body>
<h1>Dump of M-memory from WAGO 750-84x series coupler.</h1>
<ul>
    <li>PLC: 750-84x series</li>
    <li>IP: <?php echo $ip ?></li>
    <li>Modbus module ID: <?php echo $unitId ?></li>
    <li>Modbus memory reference: <?php echo $reference ?></li>
    <li>Modbus memory quantity: <?php echo $quantity ?></li>
</ul>

<h2>M-memory dump</h2>

<table border="1px">
    <tr>
        <td>WORD address</td>
        <td>Int16</td>
        <td>UInt16</td>
        <td>high byte</td>
        <td>low byte</td>
        <td>high bits</td>
        <td>low bits</td>
    </tr>
    <?php
    for ($i = 0, $max = count($recData); $i < $max; $i += 2) {
        ?>
        <tr>
            <td><?php echo $reference + ($i / 2) ?></td>
            <td><?php echo PhpType::bytes2signedInt([$recData[$i], $recData[$i + 1]]) ?></td>
            <td><?php echo PhpType::bytes2unsignedInt([$recData[$i], $recData[$i + 1]]) ?></td>
            <td><?php echo $recData[$i] ?></td>
            <td><?php echo $recData[$i + 1] ?></td>
            <td><?php echo sprintf("%08d", decbin($recData[$i])) ?></td>
            <td><?php echo sprintf("%08d", decbin($recData[$i + 1])) ?></td>
        </tr>
        <?php
    }
    ?>
</table>

<h2>Modbus class status</h2>

<pre><?= $modbus ?></pre>
<h2>Data</h2>
<pre><?= print_r($recData); ?></pre>
</body>
</html>