Ankündigung

Einklappen
Keine Ankündigung bisher.

[gelöst] LBS mit Exec - Variablen gehen verloren

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [gelöst] LBS mit Exec - Variablen gehen verloren

    Ich versuche mich an einem LBS mit Exec und brauche Eure Hilfe!



    Den Baustein triggere ich in 2 Stufen.
    Der Baustein soll nur alle x Minuten laufen wird getriggert über E1

    Wenn der LBS über E1 getriggert wird, sollen im Execteil nur die Eingänge ausgewertet werden, welche zuvor refreshed wurden.

    Ich speichere die Refresh mit logic_setVar in Variablen

    Vor dem Aufruf des Execteils sind die Variablen sauber gesetzt.

    Wenn ich diese aber im Execteil abfrage sind diese 0

    WAS MACHE ICH FALSCH??

    Hier ein Auszug

    PHP-Code:
    function LB_LBSID($id) {

        if ($E=logic_getInputs($id)) {

            logic_setVar($id,106,$E[20]['value']);      //loglevel
            $version = getLogicElementVar($id, 100);
               $lbsNo = getLogicElementVar($id, 101);
               $logName = getLogicElementVar($id, 102) . "-LBS$lbsNo";
               $logName = preg_replace('/ /', '_', $logName);
               logic_setVar($id,107,$logName);        // V#107 mit Logname belegen
            $logLevelNames = array('none','Info','Info ausf.','Debug' );
            logic_setVar($id,108,$logLevelNames);


            //refreshes merken bis zum Eintreffen des Verarbeitungstrigger
            if ($E[10]['refresh']==1){logic_setVar($id,10,1);}
            if ($E[11]['refresh']==1){logic_setVar($id,11,1);}
            if ($E[14]['refresh']==1){logic_setVar($id,14,1);}
            if ($E[16]['refresh']==1){logic_setVar($id,16,1);}
            if ($E[17]['refresh']==1){logic_setVar($id,17,1);}

            if (logic_getVar($id,1)==0 && ($E[1]['refresh'] ))  {


                   if (logic_getVar($id, 106) >= 1){
                    writeToCustomLog($logName,$logLevelNames[logic_getVar($id, 106)],  " [v$version]:\t================ LBS gestartet LBS-Instanz ($id) ===============");
                    $refr_V16=logic_getVar($id,16);
                    $refr_V17=logic_getVar($id,17);
                    writeToCustomLog($logName,$logLevelNames[logic_getVar($id, 106)],  " V16:$refr_V16   V17:$refr_V17 ");  //hier ist V16 und V17 noch 1

                 }
                logic_setVar($id,1,1);                    //setzt V1=1, um einen mehrfachen Start des EXEC-Scripts zu verhindern

                logic_callExec(LBSID,$id);                //EXEC-Script starten

                //Merker zurücksetzen
                logic_setVar($id,10,0);
                logic_setVar($id,11,0);
                logic_setVar($id,14,0);
                logic_setVar($id,16,0);
                logic_setVar($id,17,0);
            }

        }

    }
    ?>
    ###[/LBS]###


    ###[EXEC]###
    <?
    require(dirname(__FILE__)."/../../../../main/include/php/incl_lbsexec.php");
    require(dirname(__FILE__). "/../../../../main/include/php/ModbusMaster.php");
    require(dirname(__FILE__). "/../../../../main/include/php/ModbusRegisterBlock.php");
    set_time_limit(29); //Script darf nicht endlos laufen

    sql_connect();


        $E=logic_getInputs($id);
        $V=logic_getVars($id);
        $read_counter=0;
        $read_aussentemperatur=999;

        $ip=$E[2]['value'];

        $modbus = new ModbusMaster($ip, "TCP");
        writeToCustomLog($V[107],$V[108][$V[106]],  "EXEC-Part: V16:$V[16]   V17:$V[17] ");
        $refr_V16=logic_getVar($id,16);
        $refr_V17=logic_getVar($id,17);
        writeToCustomLog($V[107],$V[108][$V[106]],  "EXEC-Part: V16:$refr_V16   V17:$refr_V17 ");
        //hier ist V16 V17 jeweils 0
    try {
    Zuletzt geändert von hartwigm; 14.01.2018, 17:02.
    Gruß Hartwig

    #2
    Der Rücksetzvorgang im normalen LBS wird auch ausgeführt, während Du das Exec Script aufrufst.

    Kommentar


      #3
      hi Micha,

      da hätte ich draufkommen können, vielen Dank!
      Gruß Hartwig

      Kommentar

      Lädt...
      X