Usare PHP nell’automazione, teoria e applicazioni

Chi ha programmato siti internet dinamici non puo non essersi imbattuto nel principale linguaggio di scripting utilizzato a questo scopo. Stiamo parlando del PHP. La principale caratteristica di questo linguaggio che prende spunto dallo stile C e da quello di Perl, e che nativamente e pensato per l'integrazione all'interno di script html. Php e il linguaggio piu utilizzato sulla rete nel caso in cui ci si imbatta in siti dinamici.

Chi ha programmato siti internet dinamici non può non essersi imbattuto nel principale linguaggio di scripting utilizzato a questo scopo. Stiamo parlando del PHP.

La principale caratteristica di questo linguaggio che prende spunto dallo stile C e da quello di Perl, è che nativamente è pensato per l’integrazione all’interno di script html.

Php è il linguaggio più utilizzato sulla rete nel caso in cui ci si imbatta in siti dinamici. Gli esempi di applicazioni web basate su questo scripting language, sono numerosissime, tanto per citarne una possiamo nominare MediaWiki, il motore che anima la famosissima enciclopedia Wikipedia.

Potremmo continuare la lunga lista di possibili esempi nominando Facebook e altri importanti network che vivono grazie a centinaia di migliaia di righe di codice scritte in questo linguaggio che contiene nel suo cuore oltre 3000 funzioni di alto e basso livello.

Questo articolo è offerto da HostingSolutions.it

HostingSolutions.it è leader nel mercato italiano dei servizi hosting, con un listino completo di soluzioni di hosting condiviso, registrazione domini, posta elettronica certificata, server virtuali e dedicati. HostingSolutions.it opera da 10 anni nel settore con data center proprietario. 

PHP e la riga di comando

PHP e la riga di comando

Tecnicamente, php si integra con Apache e opera in una fase precedente rispetto a quella in cui apache fornisce il documento html fruibile ai navigatori tramite browser. In pratica, nel momento in cui un utente richiede ad apache un contenuto relativo ad un file con estensione .php, il linguaggio in oggetto si occupa dell’interpretazione del codice scritto e della compilazione di un documento compatibile con gli standard html.

Facciamo un semplice esempio per comprendere questa importante premessa.

<?php

$nome=”vittorio”;

if ($autorized) echo “<h1>benvenuto $nome</h1>”;

else echo “<h2>Mi dispiace $nome, non sei autorizzato all'accesso</h2>”;

?>

Lo stralcio di codice appena inserito indica che nel caso in cui la variabile booleana denominata $autorized sia vera, apache deve inviare all’utente una pagina html che contenga il codice:

<h1>benvenuto Vittorio</h1>

altrimenti, nel caso in cui la suddetta variabile sia falsa, apache deve inviare un documento che contenga il codice html:

<h2>Mi dispiace Vittorio, non sei autorizzato all’accesso</h2>

Dall’esempio precedente dovrebbe essere abbastanza chiaro che il linguaggio php nasce per creare pagine internet che vengano create sul momento e poi inviate da apache, in relazione ad algoritmi programmati ad hoc per fornire determinati servizi dinamici.

Man mano che nel tempo, le versioni php si sono succedute, è stata introdotta un’ulteriore essenziale caratteristica, pensata per risolvere il problema degli algoritmi chron o anche chiamati “a cadenza temporale” e cioè, l’esecuzione degli script da riga di comando.

Gli script chron sono script che hanno l’esigenza di essere eseguiti in un determinato momento temporale specifico e che quindi non possono essere gestiti al momento generico di una richiesta effettuata da un utente. Se ad esempio vogliamo che a mezzanotte esatta del sabato venga eseguita una particolare operazione appare chiaro che non si possa fare affidamento su un accesso di un utente generico. Chi ci garantirà infatti che per quell’ora precisa qualcuno si connetterà al nostro server? L’unica evenienza è che a connetterci siamo noi stessi tramite magari un’operazione automatica effettuata da un’altra macchina, dislocata ad esempio presso il nostro ufficio.

Come dicevamo poco fa, con le ultime versioni di php si è ovviato a questi problemi con l’introduzione della possibilità di lanciare script php direttamente dalla linea di comando.

In ambiente Windows ad esempio, esiste un interprete php fatto a tale scopo e gratuitamente installato nel pacchetto Apache – php, che ci permette di lanciare uno script utilizzando il comando generico riportato di seguito:

[diskdrive]:[ApacheRoot]phpphp.exe script.php

In questi casi, ovviamente, lanciando lo script php tramite shell, i comandi html non produrranno effetti grafici, ma verranno stampati a video come normale testo.

Lettura e scrittura su porta seriale

Lettura e scrittura su porta seriale

Il comando Fopen normalmente utilizzato per aprire files esterni tramite php, può essere utilizzato anche per reindirizzare l’input e l’output su porta seriale.

A tale scopo, vediamo l’esempio dello stralcio php che segue:

[...]

$fp = fopen (“\.COM1”, “w+”);

fwrite($fp, 'abcden');

$risposta= fread($fp, 4);

echo $risposta.”n”;

fclose($fp);

[…]

Nel dettaglio, il codice sopra riportato effettua le seguenti operazioni:

Viene creato un Handle che punta alla porta COM1; da notare la sintassi specifica che indica esplicitamente a PHP che non si tratta di un file, ma di una porta fisica. Questo dettaglio è importante qualora intendessimo comunicare con porte seriali superiori alla 10, sulle port di numero inferiore, infatti, il comando

$fp = fopen (“COM1”, “w+”);

funziona correttamente.

Il parametro w+ indica a php come si intenda aprire la porta. Nel nostro esempio w+ indica un’apertura in lettura e scrittura con posizionamento del puntatore ai dati, all’inizio degli stessi.

La riga successiva invece, scrive sull’hanlde $fp, la stringa “abcde” e simula la pressione del tasto invio con i caratteri “n” e cioè nel nostro caso, invia fisicamente il comando alla porta COM.

La terza riga si occupa di leggere dall’handle, e cioè dalla porta COM, nel nostro caso 4 bit di dati e di inserirli all’interno della variabile denominata $risposta.

Successivamente con il comando echo viene stampata a video la risposta letta dalla porta COM e nella riga successiva viene chiuso l’handle di connessione liberando la porta.

In pratica il breve esempio appena descritto non fa altro che inviare un comando alla porta seriale e successivamente leggere la risposta che ci aspettiamo sia composta da 4 caratteri, risposta che verrà stampata a video prima del termine dello script. 

Applicazioni

Applicazioni

Per gli esperti di elettronica, il gioco dovrebbe essere già ben chiaro.

Le possibilità però sono infinite anche per chi di elettronica sa ben poco o addirittura niente. Innanzitutto introduciamo un principio che potrebbe venirci molto utile in eventuali applicazioni che vorremo sviluppare: anche le periferiche USB possono essere simulate come porte COM Seriali, esattamente come se fossero reali porte RS-232.

Detto questo, passiamo ad un esempio semplicissimo che ci dà però delle possibilità incredibili.

Prendiamo per esempio, un prodotto facilmente reperibile sul mercato, e cioè, l’ SC-32 – Serial 32 Servo Controller. Questo gioiellino elettronico prodotto dall’americana Lynxmotion è una piccola scheda elettronica che permette di controllare in posizione fino a 32 servo motori del tipo di quelli utilizzati nel modellismo, tramite porta seriale.

A questo punto la fantasia è liberamente utilizzabile per creare le più complesse applicazioni di automazione.

Poniamo un esempio di codice perfettamente funzionante per capire meglio le potenzialità:

<?php

@$fp = fopen (“COM3”, “w+”);

if (!$fp)

  {

echo “impossibile aprire la porta di comunicazione seriale”;

return;

  }

fwrite ($fp, “#0P1500n”);

usleep(5000);

fwrite ($fp, “#1P750#12P2250T4n”);

usleep(3000);

echo “movimento completaton”;

fclose($fp);

?>

Le poche righe di programma scritte sopra effettuano in sequenza le operazioni di seguito elencate:

  • si stabilisce una comunicazione con la porta COM3 che supponiamo sia quella che il sistema operativo ha associato alla periferica seriale SCC-32
  • se la connessione non va a buon fine si scrive a video il messaggio di errore “impossibile aprire la porta di comunicazione seriale” e il programma termina
  • se la comunicazione viene stabilita correttamente, si procede con le operazioni successive.
  • si attendono 5 secondi
  • i servomotori connessi rispettivamente sui canali 0 e 12 raggiungono le posizioni 750 e 2250 muovendosi con una velocità adeguata in modo che tali movimenti vengano effettuati in un tempo di 4 secondi
  • si attendono 3 secondi
  • si scrive a video la frase “movimento effettuato”
  • si chiude la comunicazione con la porta COM3
  • il programma termina

Cosa vuol dire tutto questo?

Banalmente, è evidente che, lanciando lo script appena descritto con il comando:

[diskdrive]:[apacheRoot]phpphp.exe pathnomescript.php

o, anche meglio, facendolo lanciare da un’interfaccia web anch’essa creata in php, muoveremo prima un motore posizionandolo in una specifica posizione, poi due motori contemporaneamente in un tempo stabilito prima che lo script termini.

Lanciarlo da un’applicazione sfruttando la possibilità descritta in precedenza dell’esecuzione degli script da shell e non direttamente dall’applicazione php che utilizziamo come interfaccia web, ci permette di ovviare all’attesa della pagina di risposta che arriverebbe solo quando il codice che contiene le operazioni sia terminato e quindi nel nostro caso, dopo 11 interminabili secondi.

Ovviamente i comandi utilizzati per comunicare con la periferica seriale sono proprietari della scheda che stiamo utilizzando e quindi occorre far riferimento alle istruzioni che ci verranno fornite al momento dell’acquisto della scheda che stiamo utilizzando.

Come dicevamo all’inizio di questo paragrafo, le possibili applicazioni sono veramente infinite e ci permettono di costruire veri e propri automatismi meccanici comandati tramite pc utilizzando il linguaggio di scripting php.

L’esempio che abbiamo riportato si riferisce ad una particolare scheda realizzata per il controllo di servomotori step, ma in commercio esistono numerose schede che compiono le più disparate operazioni, dal chiudere interruttori ad accendere led luminosi e ancora altro, ovviamente potremmo connettere più di una scheda e comandarle tutte con adeguati script in modo da realizzare operazioni ben più complesse di quella appena proposta.

 

Pro e Contro della soluzione di automazione in PHP

Pro e Contro della soluzione di automazione in PHP

Questo tipo di applicazioni generalmente, non vengono effettuate con questo tipo di linguaggio, ma bensì con linguaggi differenti come il C++ o altri, che hanno nel loro cuore specifici settori riservati alla comunicazione seriale e simile. Utilizzare php è sicuramente una scelta particolare che però ci permette di costruire in maniera veramente semplice, sistemi robotici che hanno caratteristiche interessanti.

Per la natura di questo linguaggio di scripting, infatti, è evidente che sia possibile sviluppare applicazioni che interagiscono in maniera precisa con siti web, database, e altre caratteristiche generalmente relegate al mondo del web. 

Trasformare, insomma, il nostro server in un sistema di controllo è alquanto allettante poiché ci permette per esempio di costruire in maniera molto semplice applicazioni accessibili da remoto tramite interfacce web, oppure di effettuare operazioni di automazione basandoci su dati rilevati dalla rete o direttamente dai dati derivanti dalla navigazione dei nostri utenti. A questo punto, gli smanettoni più esperti, penseranno già ad interfacce in flash, a grafiche accattivanti che comunichino con meccanismi avanzati e di precisione e che permettano accessi remoti e altamente automatizzabili, ma ci sono anche dei contro che non possiamo non trascurare.

Innanzitutto, coloro che non si sono mai avvicinati ad un linguaggio come php, occorrerà che si diano da fare per impararlo e nonostante questo possa non essere facile, c’è da considerare che al sito www.php.net è possibile trovare una precisa descrizione di tutti i comandi esistenti, corredata di esempi pratici e discussioni interessanti effettuate da programmatori esperti. C’è poi da considerare che php non è il massimo nella comunicazione con le porte seriali, il che ci imporrà di dover raggirare alcune problematiche relative ad esempio all‘inizializzazione delle porte seriale che php non riesce a risolvere in maniera ottimale, ma per questo ci viene in contro la rete che ci permette di scaricare montagne di software utile.

Altri problemi che potremo trovarci a dover affrontare sono quelli relativi alla gestione degli errori bloccanti per evitare che php rimanga in eterna attesa ad esempio di una risposta che non arriverà mai e ancora occorrerà operare in maniera adeguata in modo che i nostri prodotti risultino abbastanza robusti e sicuri da essere utilizzati con tranquillità.

Tutti problemi risolvibili e gestibili con un po’ di studio e tanta voglia di realizzare progetti che per i meno addetti ai lavori potrebbero risultare piuttosto estremi. Una cosa è certa, la diffusione di Internet e la crescita di linguaggi come php, rendono possibili applicazioni che fino a pochi anni fa sarebbero stati riservati solo alla fantascienza o a limitati gruppi di ricercatori.

Questo articolo è offerto da HostingSolutions.it

HostingSolutions.it è leader nel mercato italiano dei servizi hosting, con un listino completo di soluzioni di hosting condiviso, registrazione domini, posta elettronica certificata, server virtuali e dedicati. HostingSolutions.it opera da 10 anni nel settore con data center proprietario.