IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AJAX Discussion :

Interface Web d'échange entre un automate et un robot AIV


Sujet :

AJAX

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable Projets
    Inscrit en
    Avril 2020
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Responsable Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2020
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Interface Web d'échange entre un automate et un robot AIV
    Bonjour à tous,

    Je travaille actuellement sur élaboration d'une interface entre un automate programmable SCHNEIDER ELECTRIC (M251) et un robot mobile (MIR500).

    Le robot peut uniquement recevoir ses missions sous forme de requêtes HTTP.
    Quand à lui, notre automate n'est pas en capacité d'envoyer ses requêtes. Il est pas contre capable, via une passerelle, d'interagir avec une base de données MySQL.

    Le fournisseur de mon robot m'a fournit le code source d'une page web réalisant l'envoi de ses requêtes. J'ai donc pris la décision de mettre un PC entre l'automate et le robot afin de faire la passerelle.
    Ainsi, l'automate enverra ses missions à la base SQL, que je renverrai via une page web au robot.

    J'ai donc adapté le code de la page que mon fournisseur m'a donné afin de la rendre "automatique".

    Je l'actualise toute les secondes et je consulte ma base de données MySQL afin de voir si il y a une mission à transmettre au robot.
    Si il y a, je la traite et l'envoi au robot.

    Seulement j'ai un soucis, je ne suis pas le créateur de la partie "requête http", je n'arrive donc pas a retrouver mes petits la dedans.
    Je souhaiterai récupérer le code http résultant de la requête (200, 404, etc...) sur ma page index afin de le mettre dans ma base de données et avoir un suivi du bon envoi de la requête.

    Voici ma page index (qui s'actualise en continu) :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    <meta http-equiv="Refresh" content="1"> <!-- Actualisation automatique de la page toute les secondes-->
     
    <!---------------------------------------------------------------------------------->
    <!-------------------------------------Code PHP------------------------------------->
    <!---------------------------------------------------------------------------------->
     
    <?php
        $etat_co_bdd = 1; // Initialisation de la variable d'état de connexion à la BDD
        $fp = @fsockopen("192.168.0.101", 80, $errno, $errstr, 1); // Ping sur l'adresse IP du MiRFleet
     
        try
          {
            $bdd = new PDO('mysql:host=localhost;dbname=com_api_mirfleet_schneider;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); // Connexion à la BDD
          }
          catch (Exception $e) // En cas de connexion non-valide
          {
            $etat_co_bdd = 0; // Mise à 0 de la variable $etat_co_bdd
          }
     
          $sql = $bdd->query('UPDATE connections_status SET state="1" WHERE connection="connection_api_script"'); // Mise à 1 du bit de vie script
     
        if ($etat_co_bdd == 1) 
        {
          $etatSQL = 'OK'; // Affichage de l'etat OK de la connexion avec la BDD
          $sql = $bdd->query('UPDATE connections_status SET state="1" WHERE connection="connection_script_sql"'); // Mise à 1 du bit de vie SQL
          ?>
          <style type="text/css">
              #p_etat_sql
              {
                color: green; /* Mettre en vert l'indication de l'etat de la connexion avec la BDD */
              }
          </style>
          <?php
        } 
        elseif ($etat_co_bdd == 0) 
        {
          $etatSQL = 'KO'; // Affichage de l'etat KO de la connexion avec la BDD
          ?>
          <style type="text/css">
              #p_etat_sql
              {
                color: red; /* Mettre en vert l'indication de l'etat de la connexion avec la BDD */
              }
          </style>
          <?php
        }
     
        if ($fp) 
        {
            $etatIpFleet = 'OK'; // Affichage de l'etat OK de la connexion avec le MiRFleet
            $sql = $bdd->query('UPDATE connections_status SET state="1" WHERE connection="connection_script_fleet"'); // Mise à 1 du bit de vie MiRFleet
            ?>
        	<style type="text/css">
                    #p_etat_fleet
                    {
                    color: green; /* Mettre en vert l'indication de l'etat de la connexion avec le MiRFleet */
                    }
            </style>
        	<?php
        } 
        else 
        {
            $etatIpFleet = 'KO'; // Affichage de l'etat OK de la connexion avec le MiRFleet
          $sql = $bdd->query('UPDATE connections_status SET state="0" WHERE connection="connection_script_fleet"'); // Mise à 0 du bit de vie MiRFleet
            ?>
        	<style type="text/css">
                    #p_etat_fleet
                    {
                    color: red; /* Mettre en vert l'indication de l'etat de la connexion avec le MiRFleet */
                    }
            </style>
          <?php
        }
     
        if ($fp && $etat_co_bdd == 1) 
        { // Si le ping est ok
            $sql_id = 0;
            $reponse = $bdd->query('SELECT id, mission_id FROM missions_to_send LIMIT 0, 1'); // Selection de la première ligne dans la BDD
            $donnees = $reponse->fetch();
     
            if (is_array($donnees)) 
          { // Si données est bien un array
                    $sql_id = $donnees['id']; // Stockage de l'ID de la ligne de la BDD dans la variable $sql_id
                    $requete_mission_id = $donnees['mission_id']; // Stockage de la mission_id de la BDD dans la variable $requete_mission_id
            }
     
            $reponse->closeCursor(); // Arrêt du fetch
     
            if (isset($requete_mission_id))
          {
                    $req = $bdd->prepare('INSERT INTO return_missions_sent (mission_id) VALUES(?)'); // Consolidation de l'envoi de la requete dans la table return_mission_sent
                    $req->execute(array($requete_mission_id));
          }
     
            $reponse = $bdd->query("DELETE FROM missions_to_send WHERE id= '$sql_id'"); // Supprimer la ligne envoyée en requête HTTP
     
        }
    ?>
     
    <!---------------------------------------------------------------------------------->
    <!---------------------------------Code HTML / JS----------------------------------->
    <!---------------------------------------------------------------------------------->
     
    <!DOCTYPE html>
    <html>
      <head>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
        <title>GTSF Web API</title>
      </head>
     
      <header>
      	<center><img src="images/banniere_haute.png" class="banniere_haute" alt="Image bannière haute"></center>
      	<br><br><br>
      </header>
     
      <body>
     
        <h1>PASSERELLE API REST : <br><br>Automate -> Base SQL -> MiR Fleet</h1><br><br><br>
        <h2>Ici est assuré l'envoi des missions entre l'automate et le MiR Fleet. <br><br>Ne pas fermer cette page !</h2><br><br><br>
        <p id="p_etat_sql">Etat liaison avec base de données SQL : <?php echo $etatSQL; ?></p>
        <p id="p_etat_fleet">Etat liaison avec MiRFleet : <?php echo $etatIpFleet; ?></p>
     
        <script> 
     
        var mission_id_for_send = "<?php echo("$requete_mission_id") ?>";
     
        RestFunction2();
     
            function RestFunction2() {
                    
                    var xhttp = new XMLHttpRequest();
                    xhttp.withCredentials = true;
                    var urlrobot = "BackendHandle2.php"     
                                    
                    xhttp.open("POST", urlrobot);
                    xhttp.setRequestHeader("content-Type", "application/json");
                    xhttp.send(JSON.stringify({
                    "mission_id": mission_id_for_send
                    }));
            }
     
            </script>
     
      </body>
     
      <footer>
    		<center><img src="images/banniere_basse.png" class="banniere_basse" alt="Image bannière basse"></center>
    	</footer>
     
    </html>
     
    <!---------------------------------------------------------------------------------->
    <!-------------------------------------Code CSS------------------------------------->
    <!---------------------------------------------------------------------------------->
     
    <style type="text/css">
      html 
      {
        background-color: #d9d9d9;
        background-attachment: fixed;
        background-size: 105% auto;
      }
     
      body 
      {
        width: 900px;
        border: 2px solid black;
        margin: auto;
        background-color: white;
        color: #357AB7;
        font-style: normal;
        font-variant: normal;
        font-weight: normal;
        font-size: 16px;
        line-height: 1.5em;
        font-family: Calibri;
        text-align: center;
      }
     
      h1
      {
        width: 80%;
        margin: 2% auto;
        text-align: center;
      }
     
      h2
      {
        text-align: center;
        color: red;
        text-decoration: underline;
        font-size: 1.3em;
      }
    </style>


    et ma page établissant la requête :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    <?php
     
    // Make sure that it is a POST request.
    if(strcasecmp($_SERVER['REQUEST_METHOD'], 'POST') != 0){
        throw new Exception('Request method must be POST!');
    }
     
    // Make sure that the content type of the POST request has been set to application/json
    $contentType = isset($_SERVER["CONTENT_TYPE"]) ? trim($_SERVER["CONTENT_TYPE"]) : '';
    if(strcasecmp($contentType, 'application/json') != 0){
        throw new Exception('Content type must be: application/json');
    }
     
    // Receive the RAW post data.
    $content = trim(file_get_contents("php://input"));
     
    // Attempt to decode the incoming RAW post data from JSON.
    $decoded = json_decode($content, true);
     
    // If json_decode failed, the JSON is invalid.
    if(!is_array($decoded)){
        throw new Exception('Received content contained invalid JSON!');
    }
     
    unset($headers);
    $headers[] = "Accept-Language: en_US";
    $headers[] = "Authorization: Basic YWRtaW46OGM2OTc2ZTViNTQxMDQxNWJkZTkwOGJkNGRlZTE1ZGZiMTY3YTljODczZmM0YmI4YTgxZjZmMmFiNDQ4YTkxOA==";
    $headers[] = "Content-Type: application/json";
     
    $ch = curl_init("192.168.0.101/api/v2.0.0/mission_scheduler");
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
    curl_setopt($ch,CURLOPT_VERBOSE,false);
    curl_setopt($ch,CURLOPT_CUSTOMREQUEST,"POST");
    curl_setopt($ch,CURLOPT_HEADER,true);
    curl_setopt($ch,CURLOPT_POSTFIELDS,json_encode($decoded));
    curl_setopt($ch,CURLOPT_IPRESOLVE,CURL_IPRESOLVE_V4);
    curl_setopt($ch,CURLOPT_TIMEOUT,1);
    curl_setopt($ch,CURLOPT_HTTPHEADER,$headers);
    $response = curl_exec($ch);
    curl_close($ch);
     
    echo "<pre>";
    print_r($response);
    echo "</pre>\n";
     
    ?>

    J'ai également ajouté les codes sources en PJ.

    Comment puis-je récupérer ce résultat de requête afin de le mettre dans ma base de données...

    Je tiens à préciser que je ne suis pas développeur web, je suis responsable projet dans une entreprise qui installe des solutions logistiques type convoyeurs. Je me suis lancé dans cette aventure par ambition. Je n'ai pas de réelle formation en dev, c'est ma curiosité qui m'a poussé la dedans.
    J'ai suivi des cours PHP, HTML, CSS, MySQL.
    J'ai également essayé de suivre les cours JS mais j'ai beaucoup de mal avec ce langage. Je bloque rapidement.

    Je vous remercie d'avance de votre aide
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. La communication entre openerp et une interface web via xml-rpc
    Par kaoutar_kawtar dans le forum Odoo (ex-OpenERP)
    Réponses: 2
    Dernier message: 28/04/2014, 11h57
  2. [Outils]Interface WEB pour la gestion de projet ?
    Par elitost dans le forum Outils
    Réponses: 8
    Dernier message: 04/03/2005, 13h46
  3. Enterprise Manager 10g (interface web)
    Par navypas dans le forum Oracle
    Réponses: 8
    Dernier message: 23/11/2004, 14h07
  4. Cherche RAD pour la réalisation d'interfaces Web/swing
    Par RocketArena dans le forum EDI et Outils pour Java
    Réponses: 2
    Dernier message: 14/09/2004, 13h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo