Установить, но не сбросить катушки Modbus с помощью ajax - PullRequest
1 голос
/ 28 мая 2020

Я использую ajax для создания соединения Modbus и катушек записи. Моя проблема в том, что я могу установить катушки как истинные, но не ложные.

Сторона для вызова из браузера:

    <!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>Startseite</title>
    <link rel="stylesheet" href="./style.css">
    <script src="jquery-latest.js" type="text/javascript"></script>
    <script type="text/javascript">
        // Beispiel ähnlich https://www.lima-city.de/thread/jquery-alle-x-sekunden-div-neu-laden-load

        var datei2load1 = "raum_1_content.php";  // --- zu ladende PHP Datei
        var sek2load = 0.5;              // --- alle x Sekunden!

        $(document).ready(function() {
            $.ajaxSetup ({
                cache: false
            });

            $("#refresh1").load(datei2load1);
            setInterval(function() {
                $('#refresh1').load(datei2load1);
            }, (sek2load * 1000));
        });

        function swichting(regitser, value) { // Beispiel ähnlich: https://stackoverflow.com/questions/39110915/use-ajax-to-run-php-script-with-button-click
            $.ajax({
                type: 'POST',
                url: 'example_fc16_send.php',
                data: "register=" + register + "&value=" + value
            });

        }

        function writecoil(coil, value) { // Beispiel ähnlich: https://stackoverflow.com/questions/39110915/use-ajax-to-run-php-script-with-button-click
            $.ajax({
                type: 'POST',
                url: 'example_fc15_send.php',
                data: "coil=" + coil + "&value=" + value
            });

        }

    </script>

</head>
<body >
<?php
    echo "<div id='refresh1'></div>";
?>

PHP функция записи

<?php

$register = $_POST[coil];
$value = $_POST[value];


//$value = (isset($_POST[value]);

echo "Coil: " + $coil + "; ";
echo "Value" + $value + ";";
require_once dirname(__FILE__) . '/phpmodbus/ModbusMaster.php';

// Create Modbus object
$modbus = new ModbusMaster("192.168.188.33", "TCP");

// Data to be writen
$data = array($value);
$dataTypes = array("BOOL");

try {
    // FC15
    $modbus->writeMultipleCoils(1, $register, $data);
}
catch (Exception $e) {
    // Print error information if any
    echo $modbus;
    echo $e;
    exit;
}

// Print status information
//echo $modbus;


?>

Сторона для отображения с событием onclick (запись «true» работает ... «false» не работает)

<?php
    require_once dirname(__FILE__) . '/phpmodbus/ModbusMaster.php';

    // Create Modbus object
    $modbus = new ModbusMaster("192.168.188.33", "TCP");

    try {
        // FC 3
        $recDataCmd = $modbus->readMultipleRegisters(1, 12288, 16); // Command Array lesen
        $recDataState = $modbus->readMultipleRegisters(1, 12288, 16); // Status Array lesen
    }
    catch (Exception $e) {
        // Print error information if any
        echo $modbus;
        echo $e;
        exit;
    }

    echo '
    <main>
    <div id="txt_seitentitel2"><font size = "+3" color="white" face="Arial">STARTSEITE</font></div>
     <div id="backgroundstartseite"></div>  
    <a href="./Beleuchtung.html"><div id="but_bel_beleuchtung"></div></a>
    <a href="./Beschattung.html"><div id="but_bel_beschattung"></div></a>   
    <a href="./Klima.html"><div id="but_bel_klima"></div></a>




        <!-- Beleuchtung Szenenauswahl -->
    <div id="but_bel_raum_ein" onclick="writecoil(Coil = 3, Value = true)"></div>
    <div id="txt_raum_ein"><font size = "+2" color="white" face="Arial">RAUM EIN</p></font></div>

    <div id="but_bel_raum_aus" onclick="writecoil(Coil = 3, Value = false)"></div>
    <div id="txt_raum_aus"><font size = "+2" color="white" face="Arial">RAUM AUS</p></font></div>

    <div id="but_bel_szene_1"></div>
    <div id="txt_szene_1"><font size = "+2" color="white" face="Arial">SZENE 1</p></font></div>

    <div id="but_bel_szene_2"></div>
    <div id="txt_szene_2"><font size = "+2" color="white" face="Arial">SZENE 2</p></font></div>

    <div id="fld_status_bel"></div>

    <div id="fld_status_szene_1" ></div>

    <div id="fld_status_szene_2"></div>

    </main>
    ';
?>

Я проверяю соединение с помощью Modbus Poll .. Я могу установить для каждой катушки значение true, но не к ложному. Если я верну им значение false в опросе Modbus, я могу снова установить их значение true со своей страницы html.

1 Ответ

0 голосов
/ 28 мая 2020

Вероятно, вам нужно преобразовать строковое значение в логическое.

$data = array(boolval($value));

https://www.php.net/manual/en/function.boolval.php

Значения в ваших данных сообщения будут строками, которые без явно анализируя их, будет оцениваться как истина.

https://www.php.net/manual/en/types.comparisons.php

...