Applicazione:
Registrare dati seriali nella banca dati SQLite
L’esempio presentato qui illustra le seguenti funzioni della pure.box 2:
- Esecuzione di uno script PHP alla ricezione dati su una porta TCP
- Lettura dei dati ricevuti via input standard
- Memorizzazione delle informazioni lette nella banca dati SQLite interna alla box
Problema
Un’azienda ha diverse rampe di carico, sulle quali vengono caricati pacchetti per la consegna su camion. Prima che vengano caricati i singoli pacchetti, un dipendente munito di scanner manuale deve leggere i codici a barre dei pacchetti. I codici letti devono in seguito essere memorizzati in una banca dati con marcatempo in un punto centrale.
Lo scanner manuale impiegato dispone di un’interfaccia RS232 e viene collegata a un COM-Server W&T. Alla lettura di un codice a barre questo viene inoltrato attraverso il COM-server via rete alla pure.box 2 che legge i dati ricevuti e li memorizza internamente in una banca dati SQLite. La banca dati può infine essere letta da altri programmi con la classica sintassi SQL.
Il file PHP necessario per effettuare questo esempio save_data.php può essere scaricato qui. Inoltre nell’archivio trovate il file show_data.php che apre la banca dati, la legge e la visualizza in modo tabellare al richiamo nel browser.
Configurazione del Com-Server
Affinché il COM-server impiegato sia in grado di inoltrare i dati letti dallo scanner manuale attraverso la rete alla pure.box, sono necessarie le seguenti operazioni di configurazione:
- la configurazione seriale (velocità baud, procedura di handshake, parità ecc.) deve essere impostata sullo scanner manuale nel setup del COM-server.
- Il COM-Server deve essere spostato nel modo TCP-Client che consente l’inoltro di dati ricevuti in modo seriale ad un indirizzo IP e a un numero di porta prestabilito (qui: porta 8000) della pure.box.
Configurazione della pure.box 2
Salvare il file save_data.php per FTP o via condivisione SMB nella cartella programs sulla pure.box 2, il file show_data.php nella cartella websites. Infine sono necessarie le seguenti operazioni di configurazione:
-
Richiamate la homepage della pure.box 2 inserendo l’indirizzo IP nella riga dell’indirizzo del vostro browser.
-
Scegliere Login nel menu ad albero ed effettuare il login attraverso la finestra di dialogo richiamata con la vostra password.
-
Navigare sulla pagina Home >> Configurazione >> Propri file. Cliccare nella panoramica file sulla cartella programs. Il file save_data.php viene visualizzato.
-
Un click sull’icona Modificare le proprietà del file (a sinistra vicino save_data.php) apre la finestra di dialogo Modifica.
-
Attivare l’opzione Comandato da evento. Scegliere TCP e posizionare la porta su 8000. Eseguire le modifiche con Salva... Fatto!
Se adesso vengono inviati dati dallo scanner manuale attraverso il COM-server alla porta TCP 8000 della pure.box 2, viene richiamato lo script save_data.php. I dati ricevuti vengono letti dallo script, ampliati con un marcatempo e memorizzati in una banca dati SQLite sulla pure.box. In generale occorre fare attenzione che l’esecuzione dell’interprete PHP venga terminata automaticamente dopo due minuti. L’azione programmata deve essere pertanto portata a termine in meno tempo.
Il testo sorgente
Nella prima riga viene aperto l’input standard per la lettura di dati.
$in = fopen(’php://stdin’, ’r’);
In un ciclo vengono letti a caratteri i dati in arrivo e vengono accluse le variabili della stringa $input. Il ciclo viene abbandonato, quando viene riconosciuta un’interruzione di linea (Line Feed, tabella ASCII: 10).
$input = ’’;
do
{
$input .= fread($in, 1);
}
while(substr($input, -1, 1) != chr(10));
Infine l’input standard viene chiuso.
fclose($in);
Per poter memorizzare nella banca dati i dati letti, si deve innanzitutto creare un oggetto di banca dati per l’accesso scritto, qui: $db. Se la banca dati non esiste ancora, p. es. al primo richiamo dello script, viene creata la tabella necessaria received con le due colonne, time per il marcatempo e data per i dati ricevuti.
$db = new PDO(’sqlite:../data.sqlite’);
$db -> exec(’CREATE TABLE IF NOT EXISTS received (time INTEGER, data TEXT)’);
Utilizzando un comando SQL-INSERT, nella tabella received viene inserita una nuova voce. Nella colonna time viene scritta l’ora attuale in formato UTC, data contiene il testo ricevuto. Infine la banca dati viene chiusa.
$db -> exec(’INSERT INTO received (time, data) VALUES (’ . time() . ’, "’ . $input . ’")’);
$db = null;
Lo script PHP viene così completamente terminato e viene abbandonato. Alla nuova ricezione di dati viene riavviato e si svolge come descritto sopra.
Se avete in precedenza copiato il file show_data.php nella sottocartella websites potete richiamarlo nel vostro browser mediante il seguente URL.
http://<IP-Adresse>/websites/show_data.php
I dati ricevuti fino a questo momento vengono letti dalla pagina della banca dati e visualizzati in forma tabellare.
In conclusione
Semplici applicazioni del server possono essere attuate con la pure.box 2 solo se si conosce il PHP. La funzionalità del server è già parte integrante della box. Occorre solo programmare l’azione da eseguire alla ricezione di dati.