Nuovo blocco funzione per richiesta pagina da Web server
Home › Forum › Programmazione IEC 61131 (LogicLab) › Nuovo blocco funzione per richiesta pagina da Web server
- Questo topic ha 13 risposte, 3 partecipanti ed è stato aggiornato l'ultima volta 10 anni fa da
Sergio Bertana.
-
AutorePost
-
Febbraio 13, 2015 alle 4:25 pm #35732
Sergio Bertana
Amministratore del forumNell’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).
Febbraio 13, 2015 alle 4:45 pm #38727Sergio Bertana
Amministratore del forumPer 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).
Febbraio 15, 2015 alle 10:06 am #38734Luciano
PartecipanteVediamo 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 ?
Febbraio 16, 2015 alle 7:15 am #38735Sergio Bertana
Amministratore del forumSi è 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.
Marzo 17, 2015 alle 7:49 pm #38821Lucio
PartecipanteHo 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 ?
Marzo 18, 2015 alle 9:37 am #38823Sergio Bertana
Amministratore del forumHai 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.
Marzo 21, 2015 alle 9:24 am #38846Lucio
PartecipanteIn 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;
Marzo 23, 2015 alle 1:33 pm #38847Sergio Bertana
Amministratore del forumSe 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.
Marzo 24, 2015 alle 4:57 pm #38853Lucio
PartecipanteGrazie 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 ?
Marzo 25, 2015 alle 7:42 am #38854Sergio Bertana
Amministratore del forumSembra 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.
Marzo 25, 2015 alle 11:36 am #38855Lucio
PartecipantePerfetto, 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;…
Marzo 25, 2015 alle 2:21 pm #38856Sergio Bertana
Amministratore del forumSi è 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).
Marzo 27, 2015 alle 2:49 pm #38858Lucio
PartecipanteBuongiorno, posso usare la stessa FB piu volte per richiamare pagine diverse nello stesso programma ?
Ho testato ma mi risponde solo la prima.Marzo 27, 2015 alle 4:55 pm #38859Sergio Bertana
Amministratore del forumCerto 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.
-
AutorePost
- Devi essere connesso per rispondere a questo topic.