Wiesemann & Theis GmbH

Netzwerk-, Sensor- & Schnittstellentechnik für Industrie, Office & IT

Applikation:

Serielle Daten in SQLite-Datenbank protokollieren


motherbox php data request

Das hier vorgestellte Beispiel beleuchtet folgende Funktionsmerkmale der pure.box 2:

  • Ausführung eines PHP-Skriptes bei Datenempfang an einem TCP-Port
  • Einlesen der empfangenen Daten über den Standard-Input
  • Speicherung der eingelesenen Informationen in boxinterner SQLite-Datenbank

Aufgabenstellung

Ein Unternehmen hat mehrere Verladerampen, an denen Pakete für die Auslieferung auf LWKs geladen werden. Bevor die einzelnen Pakete aufgeladen werden, sollen deren Barcodes von einem Mitarbeiter mit einem Handscanner erfasst werden. Die gescannten Codes sollen anschließend mit Zeitstempel an zentraler Stelle in einer Datenbank gespeichert werden.

Der eingesetzte Handscanner verfügt über eine RS232-Schnittstelle und wird damit an einen W&T COM-Server angeschlossen. Bei der Erfassung eines Barcodes wird dieser über den COM-Server via Netzwerk an die pure.box 2 weitergeleitet, welche die empfangenen Daten einliest und intern in einer SQLite-Datenbank speichert. Die Datenbank kann anschließend mit der klassischen SQL-Syntax von anderen Programmen aus ausgelesen werden.

Die für die Umsetzung dieses Beispiels benötigte PHP-Datei save_data.php kann hier heruntergeladen werden. Zusätzlich finden Sie in dem Archiv die Datei show_data.php, welche beim Aufruf im Browser die Datenbank öffnet, ausliest und tabellarisch darstellt.

Konfiguration des COM-Servers

Damit der eingesetzte COM-Server in der Lage ist die vom Handscanner eingelesenen Daten via Netzwerk an die pure.box weiterzureichen, sind folgende Konfigurationsschritte erforderlich:

  • Die serielle Konfiguration (Baudrate, Handshakeverfahren, Parität etc.) muss im Setup des COM-Servers auf den Handscanner abgestimmt werden.
  • COM-Server muss in den TCP-Client-Modus versetzt werden, der die Weiterleitung von seriell empfangenen Daten an eine vorgegebene IP- Adresse und Portnummer (hier: Port 8000) der pure.box ermöglicht.

Konfiguration der pure.box 2

Speichern Sie die Datei save_data.php per FTP oder über die SMB-Freigabe im Ordner programs auf der pure.box 2 ab, die Datei show_data.php im Ordner websites. Anschließend sind folgende Konfigurationsschritte notwendig:

  • Rufen Sie die Startseite der pure.box 2 durch Eingabe der IP-Adresse in der Adresszeile Ihres Browsers auf.
    Homepage Motherbox
  • Wählen Sie Anmelden im Menübaum und loggen Sie sich über den aufgerufenen Dialog mit Ihrem Passwort.
    Logindialog Motherbox
  • Navigieren Sie auf die Seite Home >> Konfiguration >> Eigene Dateien. Klicken Sie in der Dateiübersicht auf den Ordner programs. Die Datei save_data.php wird sichtbar.
    Dateibrowser Motherbox
  • Ein Klick auf das Icon Dateieigenschaften bearbeiten (links neben save_data.php) öffnet den Bearbeiten-Dialog.
    Dateieigenschaften bearbeiten
  • Aktivieren Sie die Option Ereignisgesteuert. Wählen Sie TCP und setzen Sie Port auf 8000. Übernehmen Sie die Änderungen mit Speichern... Fertig!
    Ereignissteuerung

Werden jetzt Daten vom Handscanner über den COM-Server an den TCP-Port 8000 der pure.box 2 gesendet, wird das Skript save_data.php aufgerufen. Die empfangenen Daten werden vom Skript eingelesen, um einen Zeitstempel erweitert und in einer SQLite-Datenbank auf der pure.box gespeichert. Allgemein muss beachtet werden, dass die Ausführung des PHP-Interpreters nach zwei Minuten automatisch beendet wird. Die programmierte Aktion sollte daher in kürzerer Zeit abarbeitbar sein.

Der Quelltext

In der ersten Zeile wird der Standard-Input zum Lesen von Daten geöffnet.

$in = fopen('php://stdin', 'r');

In einer Schleife werden die ankommenden Daten zeichenweise eingelesen und der String-Variablen $input angehängt. Die Schleife wird verlassen, wenn ein Zeilenumbruch (Line Feed, ASCII-Tabelle: 10) erkannt wird.


						$input = '';
						do
						{
						$input .= fread($in, 1);
						}
						while(substr($input, -1, 1) != chr(10));
				

Anschließend wird der Standard-Input wieder geschlossen.

fclose($in);

Um die eingelesenen Daten in der Datenbank speichern zu können, muss zunächst ein Datenbankobjekt für den Schreibzugriff erstellt werden, hier: $db. Sollte die Datenbank noch nicht existieren, z.B. beim ersten Aufruf des Skriptes, wird die benötigte Tabelle received mit den beiden Spalten, time für den Zeitstempel und data für die empfangenen Daten, erstellt.


						$db = new PDO('sqlite:../data.sqlite');
						$db -> exec('CREATE TABLE IF NOT EXISTS received (time INTEGER, data TEXT)');

Durch Anwendung eines SQL-INSERT-Kommandos wird in der Tabelle received ein neuer Eintrag ergänzt. In die Spalte time wird die aktuelle Zeit im UTC-Format geschrieben, data enthält den empfangenen Text. Abschließend wird die Datenbank wieder geschlossen.


						$db -> exec('INSERT INTO received (time, data) VALUES (' . time() . ', "' . $input . '")');
						$db = null;

Das PHP-Skript ist hiermit vollständig abgearbeitet und wird verlassen. Bei erneutem Empfang von Daten wird es neu gestartet und läuft wieder wie oben beschrieben ab.

Haben Sie zuvor die Datei show_data.php in den Unterordner websites kopiert, können Sie diese über folgende URL in Ihrem Browser aufrufen.

http://<IP-Adresse>/websites/show_data.php

Die bisher empfangenen Daten werden von der Seite aus der Datenbank ausgelesen und tabellarisch dargestellt.

Datenbank auslesen

Fazit

Einfache Serveranwendungen können mit der pure.box 2 lediglich mit der Kenntniss von PHP umgesetzt werden. Die Serverfunktionalität ist dabei bereits Bestandteil der Box. Es muss nur noch die beim Empfang von Daten auszuführende Aktion programmiert werden.

^