La lecture et l'écriture à/à partir de série de l'appareil via le port USB sur Linux avec perl ou PHP

Je vais avoir un problème de lecture à partir d'un périphérique série sur Linux. Le problème est assez bizarre, et je n'étais pas en mesure de préciser les causes.

Je suis de l'ouverture de la /dev/ttyUSB0 file avec PHP et de commencer à communiquer avec le dispositif selon l'appareil du protocole. Combien de fois j'ai rencontré une situation où le script PHP attend pour le périphérique de répondre. Quand j'ai couru un script Perl en parallèle, qui devait faire de même, il a envoyé une demande pour le même appareil, et de quitter soi-disant sans obtenir de réponse. Puis j'ai vu que le script PHP obtenu la réponse (après le script Perl a envoyé une demande).

J'ai rencontré une question analogue lorsque vous essayez de lire un Arduino avec PHP. Le PHP n'a obtenu aucune réponse de la part du port, mais Arduino IDE de Série du Moniteur imprimer.

Je pense que je vais manquer une chose essentielle à propos de Linux, les fichiers et les ports USB ici. Quel pourrait être le problème? Comment puis-je savoir quels programmes utilisent le port/fichier?

    $usb = 'ttyUSB0';        
    `stty -F /dev/$usb 9600`;
    `stty -F /dev/$usb -parity`;
    `stty -F /dev/$usb cs8`;
    `stty -F /dev/$usb -cstopb`;
    $f = fopen("/dev/$usb", "r+");
    if(!$f) {
        echo "error opening file\n";
        exit;
    }

    statusRequest($f);
    sleep(1);
    $c = readPort($f);
    echo "$c\n";

function statusRequest($port) {
    $data = "request";
    fwrite($port, $data);
    fflush($port);
}

function readPort($port) {
    $read = 1;
    $c = '';
    while($read > 0) {
        $bytesr = unpack("h*", fread($port, 1));
        $c .= $bytesr[1];
        //echo $bytesr[1];
        if($bytesr[1] == 'ff') {
            $read = 0;
        }
    }    
    return $c;
}

OriginalL'auteur MeLight | 2011-02-16