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

  1. #1
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    août 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2011
    Messages : 14
    Points : 15
    Points
    15
    Par défaut recherche documentation pour concevoir 1 Extension PHP
    bonjour à tous,

    Sous Windows-10, je cherche à développer une Extension PHP permettant de
    communiquer efficacement avec un périphérique matériel (une liaison série COM
    RS232 ) côté serveur web.
    Elle sera destinée au final à fonctionner dans une application console
    et/ou web (script) en PHP sous EasyPHP_Devserver-17 et autres.

    Je sais qu'il faut passer par une programmation intermédiaire bas niveau
    (.dll) en C/C++ (je programme également en Objet C++ avec le RAD C++Builder et Qt).

    Mais voilà, problème , j'ai beaucoup de difficultés à trouver de la
    documentation technique abordable et fournie sur ce délicat sujet des
    Extensions PHP. C'est le parcours du combattant !!

    Si vous possédez des documents, ou connaissez des liens sur la toile Internet
    que je n'arrive pas à trouver, je suis preneur,

    cordialement, svp, merci.

  2. #2
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    août 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2011
    Messages : 14
    Points : 15
    Points
    15
    Par défaut
    bonjour à tous,

    bon je cherche toujours et pour info j'ai trouvé cà : http://php-qt.org/

    PHP-Qt :
    c'est une Extension PHP qui permet d'appeler des applications Qt (C++ Objet)
    dans un script PHP.
    Je sais que, Sous Qt, on peut très facilement accéder aux ports COM de la
    liaison série (côté serveur web) en C++ Objet via la console.

    Mais ça sent le périmé car ici c'est en Qt version 4 et Qt a passé la version 5
    et viens d'arriver en version 6 !
    ... et puis ce site n'a pas l'air maintenu ni mis à jour !!
    A++ Did

  3. #3
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    juin 2003
    Messages
    8 094
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2003
    Messages : 8 094
    Points : 12 595
    Points
    12 595
    Par défaut
    regardez peut-être ce site qui liste des extensions php :
    https://pecl.php.net/package/ssh2
    pour chaque extension, il y a son code source donc ça pourra peut-être vous aider à comprendre comme cela fonctionne.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    août 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2011
    Messages : 14
    Points : 15
    Points
    15
    Par défaut mes recherches se sont orientées vers l' Extension existante : Direct IO
    bonjour mathieu,

    Oui merci pour le soutien, j'avais déjà commencé à lire les tutos et les aides
    trouvés sur les liens web listés ci-dessous , puis finir pas télécharger les sources
    de l'Extension existante Direct IO (DIO).
    ...

    Sinon le blème c'était que les recherches sur le thème "Extension PHP" m'orientaient
    vers des sites comportant des sujets sur les extensions de fichiers ...

    Alors j'ai ciblé mes recherches vers des sites anglo(Saxon)phones avec le tag suivant du genre :
    "extend php with c c++ windows" ou mieux "developing PHP extensions in C C++ under windows"

    ... ... après faut tout traduire dans la langue de Molière ...

    Les résultats en format PDF : (tutos)


    Quelques résultats en liens web :



    J'ai téléchargé puis commencé à consulter, parcourir les sources du package DIO :
    • dio.c
    • dio_common.c
    • dio_posix.c
    • dio_stream_wrappers.c
    • dio_win32.c
    • php_dio.h
    • php_dio_common.h
    • php_dio_common_data.h
    • php_dio_posix.h
    • php_dio_stream_wrappers.h
    • php_dio_win32.h
    • + 1 répertoire de scripts PHP test



    dans le premier fichier dio.c , on mentionne une zone de fonctions dépréciées
    concernant les fonctions classiques de base répertoriées dans l'aide :
    Code : 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
    /*
       +----------------------------------------------------------------------+
       |                       DEPRECATED FUNCTIONALITY                       |
       +----------------------------------------------------------------------+
       | The functions below are from the earlier DIO versions.  They will    |
       | continue to be maintained but not extended.  It is thoroughly        |
       | recommended that you should use either the stream wrappers or the    |
       | DIO classes in new code. - Melanie                                   |
       +----------------------------------------------------------------------+
    */
        dio_close() 
        dio_fcntl() 
        dio_open() 
        dio_read()   // <--- lecture toujours bloquante (j'avais testé depuis ma 1ière utilisation de DIO !!)
        dio_seek() 
        dio_stat()
        dio_tcsetattr()
        dio_truncate()
        dio_write()
    /*
       +----------------------------------------------------------------------+
       |                   END OF DEPRECATED FUNCTIONALITY                    |
       +----------------------------------------------------------------------+
     */
    dans le fichier dio_stream_wappers.c , on mensionne 2 fonctions PHP pour ouvrir des flux :

    • dio_raw() <--- pour ouvrir un flux d'E/S direct bas niveau (sans bufférisation)
    • dio_serial() <--- pour ouvrir un flux d'E/S direct bufférisé (avec tampon mémoire : buffer)


    Cette Extension DIO est toujours maintenue (04/2020), mais il semblerait donc que
    l'aide sur l'Extension Direct IO ne soit pas du tout à jour ici : https://www.php.net/manual/fr/book.dio.php

    Je vais fouiller encore et tester en script PHP pour voir ...

    Cordialement, merci

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    mai 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2006
    Messages : 80
    Points : 113
    Points
    113
    Par défaut
    Bonjour, j'ai eu un besoin similaire il y a quelques années, j'avais utilisé phpcpp pour compiler mon extention : https://www.phpcpp.com/
    Cela dit, pour du port com, j'utiliserais plutôt python, qui pourra fonctionner en cgi si l'interface web est nécessaire ...

  6. #6
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    août 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2011
    Messages : 14
    Points : 15
    Points
    15
    Par défaut
    bonjour zozizozu,

    merci pour la réponse, oui, j'avais vu dans 1 premier temps PHP-CPP pour l'extension PHP mais ici :
    --> https://www.phpcpp.com/documentation/install

    Luckily, for most of us (those who use Linux or Apple environments), this will be a piece of cake.
    If you're on a different platform however, you are left on your own, because we
    (as in me, the PHP-CPP developer), only uses Linux systems. There is however no reason why this library
    should not also work on other platforms, because it only uses straight forward C++ code. Thus,
    if you are on a different platform and have managed to compile the library on it, please give us feedback
    so that we can update these installation instructions and include other platforms as well.

    ça fonctionne sous Linux mais pas encore certifié opérationnel sous Windows : oui ça serait bien de prendre le temps d'y passer du temps...

    Concernant python pour accéder au port com série, j'avais vu ça aussi (toujours sous Linux) :
    --> http://www.doctormonk.com/2012/04/ra...d-arduino.html
    --> https://www.elektormagazine.fr/artic...-php-ou-python
    --> https://openclassrooms.com/forum/suj...-utilisateur-1

    Comme PHP et ses Extensions, Python utilise aussi au final des <library> écrites en C/C++ ,
    et j'avais aussi déjà accédé au port série en CGI via un exécutable en console, écrit en C++ sous C++ Builder6 mais c'est 1 solution intermédiaire mitigée :
    on ne scrute pas le port COM série en permanence mais par petites périodes ; le port est constamment commuté périodiquement entre ouvert et fermé ...

    J'ai aussi récemment développé en C++ sous Qt (avec le composant, la classe "QSerialPort" ) une autre solution intermédiaire mitigée ,
    aboutissant à 1 exécutable perso opérationnel nommé "QtComSerieX.exe" proche de celui "comxs.exe" présent en fin de page web
    ici sur le lien suivant :
    --> https://radiovibrations.com/techblog.php?i=10
    à partir de ça : (lecture asynchrone seule ici ; j'avais complété pour l'écriture synchrone ...)
    --> https://code.qt.io/cgit/qt/qtserialp...erasync?h=5.14

    appelé en PHP avec l'instruction suivante :
    // émission + réception sur port Com
    $result = shell_exec( "QtComSerieX.exe $comport $attente $envoi" ) ;
    // $attente : délai d'attente (timeout pour la lecture du port COM) avant de sortir de l'exécutable.
    // $envoi : les éventuels octets codés hexa à envoyer sur le port COM ouvert.
    // $result : donnée lue (durant la période $attente) sur le port COM ouvert.
    // ...

    ... Ça fonctionne + ou - bien, mais ça reste quand même toujours 1 solution mitigée ... le port est encore en permanence commuté périodiquement entre ouvert et fermé ...

    Pou l'instant, je suis encore dans la lecture et la compréhension des sources de l'Extension PHP Direct IO.
    Cordialement, A++ Did

  7. #7
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Architecte Web / Android
    Inscrit en
    août 2003
    Messages
    6 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Architecte Web / Android
    Secteur : Industrie

    Informations forums :
    Inscription : août 2003
    Messages : 6 262
    Points : 17 989
    Points
    17 989
    Par défaut
    Il faudrait nous détailler un peu ce que tu as besoin de faire : Quelle information tu lis et pourquoi devrait elle être lu avec PHP ?

    PHP est ,selon moi, fait pour exécuter un script rapidement et mourir dès que possible et pas rester en vie en permanence pour scruter une liaison série (par exemple).
    N'aurait tu pas plutôt intérêt à faire le boulot avec C++ et transmettr eles infos nécessaire à PHP par un biais adapté à tes besoins ?
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    août 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2011
    Messages : 14
    Points : 15
    Points
    15
    Par défaut
    Hello,

    Je vise ici l'application console (cmd.exe) : touche Ctr-C ou fermer la console pour arrêter le script (sans oublier auparavant de fermer le port com ouvert).
    affirmatif , on peut aussi faire tout cela en C++ ou java ...

    Pour faire court, tout ce qui sort d'un port série RS232 du serveur (données utiles) doit arriver en "instantané" dans 1 navigateur web client et
    inversement tout ce qui envoyé par 1 navigateur web client au serveur doit être redirigé vers le port série du serveur (commandes).
    En gros, une application client/serveur websocket implémentée en script PHP pour le serveur websocket et en html/javascript pour le client websocket
    (possible aussi en TCP-socket).

    version console qui va tourner en boucle côté serveur web en gérant :
    1°) la connexion des clients websocket distants, avec réception des données et envoi de commandes sur les websockets ,
    2°) la lecture et écriture sur le port Com RS232 du serveur

    MAIS le PHP n'étant pas multitâche, donc si la lecture sur le port est BLOQUANTE pendant un moment, pendant ce temps là,
    impossible de gérer simultanément la connexion et les requêtes websocket des navigateurs clients (donc là, point final, c'est mort !!!) !
    Et aussi, durant le temps de gestion d'un client websocket, il faut que les données arrivant sur le port série soient bufférisées pour pouvoir être lues un chouilla + tard...

    Le champ des applications possibles est large :

    -simple lecture de trame NMEA sur une carte ou module GPS avec connecteur série, avant de les décoder pour retourner
    les données utiles, via web socket, vers le navigateur client distant pour affichage (communication unidirectionnelle)

    -une carte d'acquisition E/S ANALOG et DIGITAL locale , reliée, via module sans fil xBee au connecteur série du serveur,
    va faire l'acquisition périodique de mesures de t°, d'humidité, ... ; données utiles qui seront traitée avant d'être
    retourner, via web socket, vers le navigateur du client distant pour affichage.
    En retour, le client sur son navigateur web peut alors décider, à distance, d'envoyer, via websocket, des commandes pour
    piloter une une ventilation, une clim ou un chauffage par l'intermédiaire de la carte d'acquisition locale (communication duplex).

    ... etc. ...

    L'avantage d'utiliser le navigateur client (websocket), c'est que ça peut fonctionner également à distance sur un mobile
    Android sans installer d'applications supplémentaire.

    Cordialement, A++ Did

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    mai 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2006
    Messages : 80
    Points : 113
    Points
    113
    Par défaut
    Je suis assez d'accord avec grunk, en c, python, n'importe quoi, mais je ferais une app console de type serveur, qui lance un thread pour gérer le port com.
    Ainsi, ton php ( ou autre °) appelle ton serveur, non bloquant, qui se chargera de récupérer ou d'envoyer tes infos au/vers le port com.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    août 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2011
    Messages : 14
    Points : 15
    Points
    15
    Par défaut
    bonjour,

    Merci pour vos réponses et vos suggestions : je suis toujours dans la réflexion ... entre 2 cafés ...

    Bonne nouvelle !! (Good news) : pour moi, plus besoin de recréer une nouvelle Extension PHP pour gérer un port COM série RS232 !!
    --> Elle existe déjà et l'existante c'est Direct-IO (DIO) et au final elle fonctionne !
    ... et c'est plié sans rien compiler ...

    C'est seulement la documentation officielle qui n'est pas à jour ici :
    --- https://www.php.net/manual/fr/book.dio.php <----- PAS BIEN !!


    Au niveau des sources de l'Extension PHP, c'est du langage C mais pas que ; ça
    comprend :
    - des structures de données bien particulières et spécifiques,
    - des instructions qui concernent le C "pure" et d'autres en rapport avec le moteur PHP interne (écrit en C) et d'autre encore en rapport avec le matériel, les systèmes d'exploitation utilisables ...
    Enfin tout ça pour dire que ça en fait un langage (indigeste, bien spécifique) de + à apprivoiser avec du <time> à passer dessus.


    voir le code source PHP (uploadé à l'instant) à télécharger dans le post nommé :
    --> "Ecrire et lire (sans blocage) sur un Port COM série RS232 en PHP sous console Windows."

    et les outils logiciels de mise au point sur la communication via liaison série RS232 dans le post nommé :
    --> "Outils logiciels sur RS232 pour créer des ports série virtuels sur PC portable et pour y envoyer/recevoir des données"

    bonne lecture , A++ Did Actic

  11. #11
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Architecte Web / Android
    Inscrit en
    août 2003
    Messages
    6 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Architecte Web / Android
    Secteur : Industrie

    Informations forums :
    Inscription : août 2003
    Messages : 6 262
    Points : 17 989
    Points
    17 989
    Par défaut
    Si en plus tu as de la websocket là dedans je mettrais PHP de coté pour cette tache en tout cas.
    Un candidat parfaitement adapté pourrait être nodejs.

    Il gère parfaitement les websocket (avec ws ou socket.io par exemple) et il existe pas mal de librairie pour se faciliter la vie sur les ports séries (ex : https://www.npmjs.com/package/serialport).
    Basiquement ca reviendrait dans le callback de réception du port série à envoyer un message sur la ou les websockets.
    C'est en tout cas la solution que je choisirais si j'avais à faire ce genre de chose.

    En second choix j'irais surement vers un petit service C++ qui à un thread de lecture du port serie et un petit serveur TCP ou UDP pour que PHP puisse venir lire/envoyer les infos au besoin voir directement une websocket pour ne même plus passer par PHP pour la récupération des données.

    C'est d'autant plus vrai si de multiple utilisateurs peuvent être amené à consulter ce port série. Il faudra nécessairement une entité connecté en permanence qui est capable de redistribuer l'info à X client.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. localiser la recherche juste pour les page sous php
    Par fleurrouge dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 30/12/2015, 00h48
  2. [PHP 5.4] La documentation pour la certification en PHP
    Par unix27 dans le forum Langage
    Réponses: 2
    Dernier message: 21/03/2011, 15h39
  3. configurer IIS pour executer des extensions php
    Par cendrine15 dans le forum IIS
    Réponses: 2
    Dernier message: 06/12/2010, 16h12
  4. recherche documentations pour appli type designer visio (drag and drop)
    Par ZashOne dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 16/04/2010, 01h49
  5. Recherche documentation pour automates
    Par Babezien dans le forum Automation
    Réponses: 3
    Dernier message: 25/11/2007, 05h16

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