Vai al contenuto

Nuovo blocco funzione per richiesta pagina da Web server

Home Forum Programmazione IEC 61131 (LogicLab) Nuovo blocco funzione per richiesta pagina da Web server

Stai visualizzando 14 post - dal 1 a 14 (di 14 totali)
  • Autore
    Post
  • #35732
    Sergio Bertana
    Amministratore del forum

    Nell’ottica di poter accedere a servizi Web nel cloud è necessario poter collegare i sistemi SlimLine e NetlogIII ad un Web server tramite il protocollo standard HTTP. Abbiamo realizzato un FB che permette di connettersi ad un server via HTTP e richiedere pagine con passaggio parametri in GET.

    Il FB HTTPGetPage gets a web page (Estratto manuale), permette di definire la pagina da richiedere ed i parametri da inserire in GET alla richiesta. Il server riceve la richiesta elabora i parametri passati e ritorna la pagina risultato che è memorizzata nel buffer indicato al FB.

    Siccome come noto la versione attuale del sistema operativo dei prodotti non permette di aprire sockets in modalità Client, si è ovviato al problema utilizzando un convertitore Ethernet/Seriale, nell’esempio utilizziamo l’ATC-3000. La scelta è caduta su questo prodotto perchè permette di definire il sistema host a cui connettersi con il suo DNS, permettendo così di connettersi a servers web raggiungibili anche attraverso IP dinamici (Utilizzando il DynDNS).

    #38727
    Sergio Bertana
    Amministratore del forum

    Per testare il FB ho postato su un account gratuito presso Altervista uno script PHP Example.php che esegue la divisione tra due valori, è possibile richiamare lo script da un programma SlimLine passando i due valori e ricevendo nella pagina ritornata il risultato. Ecco il sorgente dello script.

    echo “The result is: “.$_REQUEST[“Dividend”]/$_REQUEST[“Divisor”];

    Il programma di esempio (Stampa), su di un sistema SlimLine, esegue la richiesta della pagina ogni 5 secondi passando i valori di Dividend e Divisor e ricevendo il risultato. Come si vede dallo screenshot passando i valori allo script viene eseguito il calcolo e ritornato il risultato. In HTTPStatus è ritornata l’intestazione inviata dal server, nel caso di errori sarà presente il codice di errore. Da debug è possibile variare i valori e verificare il risultato di ritorno (Download programma).

    #38734
    Luciano
    Partecipante

    Vediamo se ho capito: per poter far sì che uno SlimLine diventi client HTTP c’è bisogno della vostra nuova FB e di un ATC-3000, è giusto ?

    A questo punto SlimLine è un client per cui non ha più bisogno di essere raggiunto attraverso un IP pubblico che per esperienza è uno dei grossi e ricorrenti problemi delle connessioni. Questa FB può essere caricata anche su una MPS046A100 ?

    #38735
    Sergio Bertana
    Amministratore del forum

    Si è proprio così, abbiamo realizzato questa FB per potersi connettere a server HTTP in attesa di implementare la modalità Client nel sistema operativo (E’ un lavoro attualmente in progress). Nel frattempo è possibile come escamotage utilizzare un qualsiasi convertitore Ethernet-Seriale per operare la connessione Client con il server.

    Nell’esempio la scelta è caduta sull’ATC-3000 perchè supporta il DNS e quindi è possibile definire l’indirizzo del server con il nome anzichè con l’IP. Questo permette di connettersi anche a server che sono pubblicati su IP dinamici.

    L’FB utilizza uno stream di I/O, nella fattispecie uno stream seriale, quindi è compatibile anche con le versioni MPS046A*00 dello SlimLine.

    #38821
    Lucio
    Partecipante

    Ho fatto diverse prove con l’FB, dopo un po di tempo che gira (qualche minuto) con LogicLab connesso va in errore; scompaiono tutti  i valori dalla finestra di Watch e sono costretto a sconnettere e riavviare l’applicazione. Lo fa sia con il vostro esempio su Altervista che con un altra pagina di prova che ho creato. Sapete aiutarmi ?

    #38823
    Sergio Bertana
    Amministratore del forum

    Hai in per caso nella finestra di watch l’istanza del FB HTTPGetPage ? Oppure qualche tua variabile stringa o array molto lunga ? Questo perchè quando le variabili in watch diventano molto lunghe LogicLab le tronca.

    Infatti quando trascini nella finestra di watch una stringa od un array compare un avvertimento che ti chiede se vuoi mettere tutta la variabile o solo una posizione della stessa (Esempio un locazione dell’array). Eventualmente puoi chiamare in azienda e vediamo di vedere il problema con una sessione di supporto tecnico On-Line.

    #38846
    Lucio
    Partecipante

    In effetti avevo l’FB in watch; ho provato a togliere tutto dalle watch ma comunque va in errore. Provando a togliere pezzi di codice il probrema si presenta proprio quando attivo GetPage.Get:=TRUE;

    #38847
    Sergio Bertana
    Amministratore del forum

    Se la pagina richiesta è più grande della dimensione del buffer di pagina PBuffer si incorre in un bug del FB, ho provveduto a correggere l’errore. Ecco la libreria con la versione corretta del FB (Download HTTPGetPage.pll).

    Ho provveduto successivamente anche a correggere il programma del post precedente che ora utilizza questa versione del FB.

    #38853
    Lucio
    Partecipante

    Grazie per il supporto, credo dipenda dalla connessione l’ADSL ogni tanto è lenta ma ho notato che prima dell’errore dalla watch vedo comparire su HTTPStatus la stringa …DOCTYPE html PUBLIC… invece del solito HTTP 1.1 200 OK.

    Può essere la dimensione di questra stringa a causare il blocco ?

    #38854
    Sergio Bertana
    Amministratore del forum

    Sembra che la pagina che hai richiesto non sia esistente sul sito ed allora ti viene ritornata una pagina di errore che probabilmente è molto più lunga della dimensione dei buffers da te stabiliti. Ho corretto il FB, ora vengono ignorati i caratteri che eccedono la dimensione del buffer stabilito. Prova ad eseguire il download della libreria, il link del post precedente ora punta la nuova versione.

    #38855
    Lucio
    Partecipante

    Perfetto, grazie dell’ottimo lavoro, ora non va piu in errore. Se può servire la situazione è la seguente:

    L’errore non è dovuto al fatto che la pagina non esiste (anche perchè ogni tanto la legge altre volte va in errore) ma probabilmente il server ci mette troppo tempo (per colpa della connessione o del server). Ora non si plocca più l’esecuzione del programma ma quando accade l’errore di comunicazione oltre alla stringa su HTTPStatus del post precedente mi compare sulla stringa nel PBuffer in lettura del tipo:

    h1 { font-size: 24px; color: #555; margin: 0 0 10px 0;…

    #38856
    Sergio Bertana
    Amministratore del forum

    Si è proprio un problema legato all’errore da parte del server sul riconoscimento dell’indirizzo della pagina. Il Web server quando viene richiesta una pagina che non esiste risponde con una pagina che può essere anche graficamente ricercata (Ecco lo screenshot di quello che ritorna Altervista). Come vedi nel corpo della pagina vi è la definizione degli stili css che è quello che trovi tu nel tuo PBuffer.

    Lo strano è capire come mai a volte non viene capito correttamente dal server web l’indirizzo della pagina richiesta. Purtroppo oggi non avendo la gestione del client TCP nello SlimLine LogicLab (Stiamo lavorando per gestirlo), dobbiamo affidarci ad un convertitore esterno. Stò utilizzando per test da diversi giorni il blocco funzione di richiesta pagina su SlimLine CODESYS (Che ha la gestione del client) è non ho problemi (Topic).

    #38858
    Lucio
    Partecipante

    Buongiorno, posso usare la stessa FB piu volte per richiamare pagine diverse nello stesso programma ?
    Ho testato ma mi risponde solo la prima.

    #38859
    Sergio Bertana
    Amministratore del forum

    Certo che sì, naturalmente devi disabilitare il comando Get e poi dopo avere cambiato l’indirizzo di pagina riabilitarlo. Ma più che le parole possono gli esempi ecco la stampa del programma che chiede due diverse pagine (Download programma).

    Naturalmente a differenza del FB eseguito su CODESYS (Topic) che grazie al client TCP permette di definire anche server web diversi, qui essendo la connessione client gestita dal’ATC-3000 potrai richiedere pagine diverse ma dallo stesso server.

    Ho colto l’occasione per correggere l’esempio di richiesta di una sola pagina citato nel post precedente utilizzando l’ultima versione del FB.

Stai visualizzando 14 post - dal 1 a 14 (di 14 totali)
  • Devi essere connesso per rispondere a questo topic.