Téléchargé 7 fois
Vote des utilisateurs
1
0
Détails
Licence : Non renseignée
Mise en ligne le 29 avril 2021
Plate-forme :
Windows
Langue : Français
Référencé dans
Navigation
Ecrire et lire (sans blocage) sur un Port COM série RS232 en PHP sous console Windows.
Ecrire et lire (sans blocage) sur un Port COM série RS232 en PHP sous console Windows.
En recherchant sur le net comment accéder à la liaison série en PHP, j'ai vu que pas mal de développeurs PHP avaient du mal, comme moi, à piloter un port COM série via PHP, surtout sous Windows.
Et donc moi même aussi, j'ai bien galéré pendant un long moment avant de trouver une solution acceptable !!
(notamment en me décidant finalement à lire les tutos sur les Extensions et les sources de la DIO).
Lire ceci pour commencer :
--> https://www.developpez.net/forums/d2107223/php/langage/recherche-documentation-concevoir-1-extension-php/
J'avais même été jusqu'à développer en C++ sous Qt (avec le composant, la classe "QSerialPort" ) une 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
appelé en PHP avec l'instruction suivante :
// émission + réception sur port Com
$result = shell_exec( "QtComSerieX.exe $comport $attente2 $envoi" ) ;
// $attente = délai d'attente (timeout) avant de sortir de l'exécutable.
...
Cela n'était que des solutions PHP intermédiaires mitigées avec un port COM qui est constamment permuté en ouvert puis fermé lorsque le script PHP est exécuté via un client navigateur web.
En fait, ce n'est pas l'extension Direct-IO (DIO) qui ne fonctionne pas bien, c'est juste la Ducobumentation technique "Officielle" qui n'est pas à jour ici :
--- https://www.php.net/manual/fr/book.dio.php
De mon côté maintenant, ça fonctionne en écriture et lecture sans blocage (no blocking), mais il ne faut pas utiliser les fonctions de base mentionnées dans cette doc incomplète :
(qui fonctionnent, mais pas comme on voudrait)
- pas de perte de données à la lecture! --> BIEN !!
Mon 1ier exemple donné ci-joint "Direct_IO_test_1.php" fonctionne en mode console "cmd.exe" (PHP CLI) sous Windows-10 x64 avec la dll DIO version 0.1.0
( http://pecl.php.net/package/dio --> Thread-safe pour Apache ) installée et le moteur PHP : PHP5630vc11x86 :
****** SVP voir le code source du script PHP "Direct_IO_test_1.php" ci-joint ******
Pour requéter DIO via un client navigateur web (type Firefox ), mais je n'ai pas encore testé :
- on bannira forcément les boucles ; on peut basiquement rafraîchir la page web .. mais veiller à ce que le script PHP en exécution se termine bien après avoir
refermer le port COM ouvert avant de quitter et de fermer le navigateur web !!! .... --> MOYEN BIEN !
Rappel : bien se remémorer que DIO (comme tout script PHP) fonctionne toujours côté serveur en PHP !
... ou + pro encore, utiliser DIO dans un serveur de websocket, écrit en PHP (fonctionnant en console "cmd.exe" côté serveur), requété, via 1 navigateur web,
par un client léger websocket écrit en html/javascript : mais dans ce cas, il faudra 1 port TCP en + pour le websocket ; --> BIEN !!
... mais là, y du taff !! ...
Bonne programmation Hardware PHP,
cordialement, A++ Did
PS :
- voir les outils logiciels associés ici :
https://php.developpez.com/telecharger/detail/id/7171/Outils-logiciels-sur-RS232-pour-creer-des-ports-serie-virtuels-sur-PC-portable-et-pour-y-envoyer-recevoir-des-donnees
- les caractères points-virgules apparaissant dans l'image de la console ci-dessous sont là uniquement pour prouver que la lecture n'est pas bloquante !
Et donc moi même aussi, j'ai bien galéré pendant un long moment avant de trouver une solution acceptable !!
(notamment en me décidant finalement à lire les tutos sur les Extensions et les sources de la DIO).
Lire ceci pour commencer :
--> https://www.developpez.net/forums/d2107223/php/langage/recherche-documentation-concevoir-1-extension-php/
J'avais même été jusqu'à développer en C++ sous Qt (avec le composant, la classe "QSerialPort" ) une 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
appelé en PHP avec l'instruction suivante :
// émission + réception sur port Com
$result = shell_exec( "QtComSerieX.exe $comport $attente2 $envoi" ) ;
// $attente = délai d'attente (timeout) avant de sortir de l'exécutable.
...
Cela n'était que des solutions PHP intermédiaires mitigées avec un port COM qui est constamment permuté en ouvert puis fermé lorsque le script PHP est exécuté via un client navigateur web.
En fait, ce n'est pas l'extension Direct-IO (DIO) qui ne fonctionne pas bien, c'est juste la Ducobumentation technique "Officielle" qui n'est pas à jour ici :
--- https://www.php.net/manual/fr/book.dio.php
De mon côté maintenant, ça fonctionne en écriture et lecture sans blocage (no blocking), mais il ne faut pas utiliser les fonctions de base mentionnées dans cette doc incomplète :
(qui fonctionnent, mais pas comme on voudrait)
- pas de perte de données à la lecture! --> BIEN !!
Mon 1ier exemple donné ci-joint "Direct_IO_test_1.php" fonctionne en mode console "cmd.exe" (PHP CLI) sous Windows-10 x64 avec la dll DIO version 0.1.0
( http://pecl.php.net/package/dio --> Thread-safe pour Apache ) installée et le moteur PHP : PHP5630vc11x86 :
****** SVP voir le code source du script PHP "Direct_IO_test_1.php" ci-joint ******
Pour requéter DIO via un client navigateur web (type Firefox ), mais je n'ai pas encore testé :
- on bannira forcément les boucles ; on peut basiquement rafraîchir la page web .. mais veiller à ce que le script PHP en exécution se termine bien après avoir
refermer le port COM ouvert avant de quitter et de fermer le navigateur web !!! .... --> MOYEN BIEN !
Rappel : bien se remémorer que DIO (comme tout script PHP) fonctionne toujours côté serveur en PHP !
... ou + pro encore, utiliser DIO dans un serveur de websocket, écrit en PHP (fonctionnant en console "cmd.exe" côté serveur), requété, via 1 navigateur web,
par un client léger websocket écrit en html/javascript : mais dans ce cas, il faudra 1 port TCP en + pour le websocket ; --> BIEN !!
... mais là, y du taff !! ...
Bonne programmation Hardware PHP,
cordialement, A++ Did
PS :
- voir les outils logiciels associés ici :
https://php.developpez.com/telecharger/detail/id/7171/Outils-logiciels-sur-RS232-pour-creer-des-ports-serie-virtuels-sur-PC-portable-et-pour-y-envoyer-recevoir-des-donnees
- les caractères points-virgules apparaissant dans l'image de la console ci-dessous sont là uniquement pour prouver que la lecture n'est pas bloquante !
Developpez.com décline toute responsabilité quant à l'utilisation des différents éléments téléchargés.