Ho un pc che devo connettere ad un dispositivo che delle funzioni integrate (permette l'apertura/chiusura di relè e lettura di 8 ingressi optoisolati).
La connessione avviene tramite TCP/IP ad un indirizzo IP configurato sul dispositivo.
I comandi da inviare per settare e recuperare i dati sono in formato ASCII.
Ho testato il dispositivo tramite un software .exe su Windows per verificare che funzioni correttamente.
Ora devo collegare il pc tramite PHP a tale dispositivo (il pc funge da master ed invia le richieste e attende una risposta dal dispostivo-slave). Ho già fatto diverse prove e non sono riuscito nell'intento anche perchè ho dei dubbi in merito:
1) quale tecnica si usa in questo caso? fsockopen? socket_create? o altro?
2) che differenza c'è tra usare fsockopen e socket_create?
2) sono riuscito ad aprire il socket ma qualsiasi comando io dia il dispositivo non risponde ai comandi (dovrebbe almeno restituire un errore in caso di comando errato) eppure il socket sembra aperto correttamente
3) da manuale c'è scritto che vanno inviati dei dati in formato ASCII al dispositivo (SOH STX ecc.)
Ecco un po' di codice fin qui usato:
Codice PHP:
// Variabili
$host = "10.1.105.220";
$port = 3000;
$timeout = 30;
// Apre il socket di comunicazione
$socket = fsockopen($host, $port, $errnum, $errstr, $timeout);
stream_set_blocking($socket,0);
stream_set_timeout($socket, 10, 100);
// Connessione non riuscita
if (!is_resource($socket)) {
echo "ERRORE: $errstr ($errno)
\n";
}
// Connessione riuscita
else {
$string = '\x01\x30\x30\x02\x53\x38\x30\x30\x30\x32\x32\x03\x5b\x0d';
// Richiesta
fputs($socket, $string);
// Risposta
for($x=0; $x<10; $x++) {
//$result .= fread($socket, 255);
$result = fgets($socket, 255);
echo "
$x - RISPOSTA: $result";
echo "$x - ".var_dump($result).'
';
}
// Chiude il socket
fclose($socket);
}
Qualsiasi suggerimento su come si fanno questi tipi di collegamento ben venga.
grazie
ciao