Technikerschule
Nördlingen
Programmierung dynamischer Internetseiten
Startseite
Termine
Links
Einführung
Netzdiagnose
Webserver
HTML-Unterlagen
HTML-Praxis
Stylesheets
Javascript
WAMP-Installation
PHP-Lektionen
PHP-Übungen
Vorlagen
Kontakt

Zugriff über eine Socket-Verbindung

Bisher haben wir unsere Informationen im Netzwerk fast ausschließlich über einen Webserver bezogen. Wir haben eine Domain, einen Rechnernamen oder eine IP-Nummer aufgerufen und von der dort installierten Webserver-Software informationen bezogen. Es ist aber auch möglich über das Netzwerk Informationen von anderen Rechnern zu beziehen, ohne dass dort ein Apache-Webserver läuft.

Voraussetzung ist allerdings, dass es dort Programme gibt, die eine Kommunikation über Netzwerkprotokolle erlauben. Die Verbindung wird über eine Socketverbindung hergestellt. Das öffnen einer solchen Verbindung ist ähnlich dem Öffnen einer Datei:

Als Parameter werden übergen: IP-Nummer/Name des Zielrechners, der Port des angesprochenen Programms sowie optional ein Variablennamen für eine ggf zurückgegebene Feler-Nummer, den dazugehörigen Fehlertext sowie ein Timout in Sekunden, nach dem bei einem Fehlschlag das Script abgebrochen wird.

In unserem Beispiel wird eine Verbindung zum WEB I/O der Firma W&T (www.wut.de) hergestellt. Verwendet wird zunächst der Port 80, über den sich die jeweils 12 Eingabe- und Ausgabe-Kanäle ansprechen lassen. Wir verzichten zunächst auf ein Errorhandling.

Beispiel:

$fp=fsockopen("192.168.0.217",80);
if (!$fp) {
printf("Fehler beim Verbindungsaufbau!");
}

Vom Hersteller W&T sind Befehle definiert, wie die Kanäle anzusprechen/abzufragen sind. Die Auflistung aller Kommandostrings finden Sie im PDF zur Übung Ampelschaltung.

Im folgenden finden Sie einige Codebeispiele, wie die Kommandostrings über die Sockeverbindung an das Web I/0 übergeben werden.

// Output für Output0 auf ON setzen
             fputs($fp, "GET /outputaccess0?PW=&State=ON&");
             $data=fread($fp, 100);
             echo "Antwort Outputwert (Bit 0) gesetzt: ".$data."<br />";
// Status Output3 abfragen
               fputs($fp, "GET /output3?PW=&");
               $data=fread($fp, 100);
               echo "Wert Output (Bit 3): ".$data."<br />";
// Status Output alle Ports abfragen
               fputs($fp, "GET /output?PW=&");
               $data=fread($fp, 100);
               echo "Wert Output alle Ports: ".$data."<br />";
             
// Status Input2 abfragen
               fputs($fp, "GET /input2?PW=&");
               $data=fread($fp,100);
               echo "Wert Input einzeln (Bit 2): ".substr($data,7,3)."<br />";
// Status Input alle Ports
               fputs($fp, "GET /input?PW=&");
               $data=fread($fp,100);
               echo "Wert Input alle Ports: ".$data."<br />";
// Counter von Input0 abfragen
               fputs($fp, "GET /counter0?PW=&");
               $data=fread($fp,100);
               echo "Wert Counter (Bit 0): ".$data."<br />";
// Counter von Inpu0 auf 0 setzen
               fputs($fp, "GET /counterclear0?PW=&");
               $data=fread($fp,100);
               echo "Einen Counter (Bit 0) auf 0 gesetzt<br />";
             
// Alle Counter auf 0 setzen
               fputs($fp, "GET /counterclear?PW=&");
               $data=fread($fp,100);
               echo "Alle Counter auf 0 gesetzt<br />";
             
//Nicht vergessen, am Ende die Verbindung schließen !!!


fclose($fp);

Zugriff auf die serielle Schnittstelle des Web I/0
(COM-Server-Funktion)

Das Web I/0 stellt zusätzlich eine Serielle Schnittstelle zur Verfügung. Auf diese Weise ist es möglich über ein Netzwerk - zum Beispiel auch ein Funknetzwerk - serielle Geräte über das Netzwerk anzusprechen. Am Gerät selbst (Maschine/Meßgerät etc) muss also kein Rechner mehr installiert sein, sondern es reicht unser W6T Interface.

Die Verbindung erfolgt über den Port 8000, im Codebeispiel wird bei einer Fehlverbindung an der COM-Schnittstelle automatisch ein Reset ausgeführt um mehrminütige Timeouts zu verhindern.

$fp = @fsockopen( "192.168.0.217",8000, &$errno, &$errstr, 2 );
if (!$fp) {
   echo "Fehler-Nr: ".$errno."<br />";
   echo "Fehlertext: ".$errstr."<br />";
   $dummySocket = @fsockopen( "192.168.0.217", 9084 );
}
$ok=fputs($fp, "Hallo");
echo "Zahl der gesendeten Zeichen: ".$ok;
stream_set_timeout($fp, 10);

fclose($fp);
 

Zu beachten ist, dass die Com-Schnittstelle des COM-Servers und des Gerätes korrekt konfiguriert sind. Standardmäßig ist der Com-Server auf 9600/8/N/1/H eingestellt. Zu Testzwecken ist es ggf notwendig, das Hardware-Handshaking zu deaktivieren.

 

 

 
Zurück   Home   Nächste