Comment Lire le Port Série RS232 en PHP comme ce Programme QBasic
J'essaie de port suivant la petite QBASIC programme (qui fonctionne à 100%) de PHP:
OPEN "com1:2400,n,8,1,DS," FOR RANDOM AS #3
OPEN "data.dat" FOR OUTPUT AS #2
REM read 17 chars from the port
scale$ = INPUT$(17, #3)
PRINT scale$
WRITE #2, scale$
CLOSE #2
CLOSE #3
SYSTEM
Actuellement, je suis en l'appelant dans son compilé (exe) forme à partir de PHP (sur WAMP5) mais j'aimerais me débarrasser de la QBASIC et de l'appeler directement à partir de PHP.
J'ai écrit cette fonction PHP mais il se bloque à la fgets ():
function read_port($port='COM1:', $length=17, $setmode=TRUE, $simulate='') {
if ($simulate){
$buffer = '"'.strval(rand(1000, 2000));
return $buffer;
}
if ($setmode){
shell_exec('mode com1: baud=2400 parity=n data=8 stop=1 to=on xon=off odsr=on octs=on dtr=on rts=on idsr=on');
}
$fp = fopen($port, "rb+");
if (!$fp) {
file_put_contents('debug1.log','COM1: could not open'."\n",FILE_APPEND);
} else {
$buffer = fgets($fp, $length); //<-- IT JUST HANGS HERE DOING NOTHING !
fclose ($fp);
}
return $buffer;
}
Je suis en utilisant cette ligne PHP pour appeler la fonction ci-dessus:
$res = read_port('COM1:', 17, TRUE, SIMULATE_SCALE);
Toute aide sera creatly apprécié! J'ai fait renoncé. Si QBASIC pouvez le faire correctement, alors nous devons être capables de faire ce travail avec PHP!
Une solution à ce problème?
OriginalL'auteur CJ_ | 2010-07-12
Vous devez vous connecter pour publier un commentaire.
Vous voudrez peut-être regarder dans PHP Série par Rémy Sanchez. Il y a un article à ce sujet ici:
Contrôler le Port Série avec PHP
Également jeter un oeil à cet exemple fourni par jared à dctkc dot com sur le PHP du site:
http://php.net/manual/en/function.fopen.php#20935
Il y a cette remarque sur le PHP de Série de la page: "Si vous êtes un utilisateur de windows, essayez d'accéder au port série via le réseau avec serproxy au lieu de". serproxy est utilisé dans l'exemple donné sur le PHP du site. L'exemple montre l'écriture, mais Rémy Sanchez commentaire suggère qu'il peut être utilisé pour la lecture de trop. Si non, vous pouvez essayer danp de la suggestion à l'aide de Google Translate.
Merci encore Mike
OriginalL'auteur Mike
Assez sûr que PHP n'a pas accès à de l'équipement des ports par défaut. Il a accès à des ressources réseau, le fichier de ressources, mais sans certains sorte de transport entre le matériel et ce que vous essayez de lire, ne peut pas voir ce travail.
Il peut cependant être une plate-forme spécifique de l'extension que vous pouvez charger ce qui permettra à cette - juste de faire une enquête.
e: Oui, il y a - vérifier cette extension, peut-être ce que vous êtes après. Sans quelque chose comme cela, c'est tout simplement pas aller travailler.
À partir d'un très rapide aperçu, l'extension proposée par danp a l'air simple à utiliser. Voici un Google Translate lien.
et les autres: Juste pour vous laisser savoir que je n'ai pas trouvé de solution viable, mais ont été en utilisant Google Translate depuis; très pratique. Mon problème, effectivement obtenu de pire en pire. Je suis passé à Wampserver 2.1 et mon application ne fonctionne que pour quelques heures et puis bloque le système. Même re-démarrage ne permet pas de résoudre la situation, et mon client a le passage à "pont-bascule annuler".
OriginalL'auteur dmp
Si vous êtes sous Linux ou autres de l'ONUX comme système (par exemple, Mac OS X), essayez de
fopen('/dev/ttyS0')
- ONUX, tout est fichier, même les ports série. Voir ce pour quelques conseils pour trouver le port de cartes à dont "fichier".Merci, mais mon client est sous Windows XP
OriginalL'auteur Piskvor