Serial comm avec PHP sur Windows
Je suis à la recherche d'un moyen de communication série RS232 port COM sur windows. J'ai trouvé 2 solutions sur le net, un qui n'est pas totalement libre (introduit délibérée des retards sur la fonction) et un autre avec une capacité limitée de sur Windows. Celui-ci ne peut écrire sur un port COM sur Windows, pas lu.
Je ne peux pas regarder le code de la première solution, car il est compilé dans un .dll (logique, sinon les gens peuvent simplement modifier le retard et de ne pas l'acheter...) et le second semble seulement à utiliser fopen() pour ouvrir le port et, plus tard, fwrite (), pour l'écriture, tout comme on le ferait à un ruisseau. Mais apparemment freading elle ne retourne rien.
Je sais que c'est possible que la première solution n'a, bien qu'il ne nécessite Apache pour utiliser php-cgi module au lieu de php5module.
Des idées?
OriginalL'auteur syaz | 2009-03-09
Vous devez vous connecter pour publier un commentaire.
Chaque solution ci-dessus est soit inefficace ou trop de travail.
Vous pouvez simplement utiliser le PHP-DIO bibliothèque (dio_fcntl, dio_open, dio_read, dio_write, dio_seek, ...). C'est aussi dans le manuel PHP entrée pour le DIO:
Ce PECL paquet n'est pas disponible par défaut. Pour l'obtenir pour Windows si vous avez de PHP 5.2.x plus grand que 5.2.6, vous pouvez le télécharger dans le cadre d'un ZIP:
Thread-safe (pour Apache)
Non thread-safe (IIS)
Ces deux liens ont été trouvés dans http://www.deveblog.com/index.php/download-pecl-extensions-for-windows/
Voici le construire à partir de Linux, juste l'obtenir et faire la commande phpize/configure/make/make install chose.
Je ne sais pas si elle doit être utilisée dans un Apache session, mais d'aller pour elle.
OriginalL'auteur Dustin Oprea
La meilleure façon de lutter contre ce serait d'écrire un programme dans un autre langage (C++), et puis l'exécuter à partir de votre script php avec
system()
. Faire Comm I/O en C++ est trivial.Cela suppose que vous avez les droits d'accès pour le serveur à configurer pour autoriser l'exécutable à exécuter par php, etc.
D'accord, mais pour moi qui ne tombe plus sous "la meilleure façon", et devient "la meilleure façon". 🙂
OriginalL'auteur SoapBox
Une autre manière possible serait d'utiliser l'API Win32 grâce à quelque chose comme
w32api_register_function()
ou ffi et ensuite utiliser communications série d'appels à le faire fonctionner sous Windows.OriginalL'auteur lpfavreau
J'ai eu le même problème et déjà envisagé d'écrire ma propre extension php quand je suis tombé sur cette solution qui est populaire avec Arduino développeurs - 'serproxy' (qui se trouve à différents endroits, c'est à dire. http://www.lspace.nildram.co.uk/freeware.html ) met en place une pile tcp/à partir de l'ports série et m'a permis d'utiliser le php socket fonctions de communiquer avec elle.
OriginalL'auteur Michael
Vous devez configurer le port com à l'aide d'un DOS-comme commande.
Par exemple, la ligne suivante exécute la commande par le biais de php:
Pour afficher les résultats, vous pouvez utiliser:
Créer l'id de la ressource:
Écrire de port:
Lire de port:
Peut-être quelqu'un peut m'aider avec le
fgets
problème. Il empile il y a exactement une minute siTO=on
, ou des piles n'y a jamais siTO=off
. Il semble être un "MODE COM
" option alors peut-être un DOS d'experts peut vous aider.Peut-être, au lieu de
fgets
, on devrait utiliserfgetc
, depuisfgets
capture grâce à lanewline
, tandis quefgetc
de capture d'un seul caractère. Si une nouvelle ligne n'est pas rencontré, il peut bloquer jusqu'à ce qu'il y a une ou jusqu'à ce que le tampon est vidé. Le délai d'une minute peut être windows rinçage son tampon sur un intervalle.OriginalL'auteur
Une autre option est d'utiliser un objet via ActiveX sous windows. Il en existe plusieurs, principalement commerciales série d'objets pour COM sur windows. Vous pouvez également exposer un .Net en fonction de l'objet et de l'inscrire pour COM. Bien sûr, cela ne présume que vous avez le contrôle sur le serveur pour enregistrer un COM de contrôle, que vous auriez besoin d'une interface série.
Un autre problème de conflit de ressources si c'est pour une utilisation via le Web. Si c'est pour une série de l'imprimante, par exemple, puis de l'impression d'un gestionnaire de file d'attente serait votre meilleure option de communication directe.
OriginalL'auteur Tracker1
Si vous voulez traiter avec les sms en utilisant le port com puis ici, c'est le plus célèbre php de communication série de la classe par Rémy Sanchez avec google exemple de code. Voici un thread qui comprend ce sujet.
Merci @kleopatra pour les conseils!
OriginalL'auteur adi