Passaggio dati in POST in formato JSON verso server HTTP
Home › Forum › Programmazione IEC 61131 (LogicLab) › Passaggio dati in POST in formato JSON verso server HTTP
- Questo topic ha 17 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 5 anni fa da
Sergio Bertana.
-
AutorePost
-
Marzo 16, 2020 alle 7:59 pm #53992
giovgris
PartecipanteSono abbastanza nuovo alla programmazione con LogicLab, devo passare una serie di dati ad un server già attivo, li devo passare utilizzando formato JSON inHTTP POST. Mi servire qualche dritta per iniziare.
Premetto: il PLC l’ho configurato e lo collego con LogicLab, faccio girare in locale il vostro esempio Ptp138a000
Marzo 16, 2020 alle 8:46 pm #54003Sergio Bertana
Amministratore del forumPer fare quello che ti serve abbiamo un paio di blocchi funzioni già pronti che ti semplificano tutto il lavoro.
Puoi utilizzare il FB HTTPClient per connetterti al server HTTP e passare in POST i parametri. Copiando l’esempio del manuale hai già praticamente il programma scritto. Dovrai solo impostare il parametro Method:=1 per passare i parametri in POST.
Per creare la stringa JSON da passare al server puoi utilizzare il FB JSONEncode.
Marzo 17, 2020 alle 7:49 am #54024giovgris
PartecipanteSto provando in prima battuta l’esempio inviato, ma ho sempre errore alla compilazione:
ST_TCPDEClient(63) – error S1305: HTTPRq ; Unknown function
Sicuramente qualche inesattezza mia.
Marzo 17, 2020 alle 7:54 am #54027Sergio Bertana
Amministratore del forumHai importato nel progetto gli oggetti HTTPClient_v1 e JSONEncode_v1 dalla libreria eLLabHTTPLib ?
La libreria si trova nella cartella di installazione di LogicLab.
Marzo 17, 2020 alle 8:49 am #54030giovgris
PartecipanteNon ho questa libreria nella cartella di installazione di LogicLab !!
Marzo 17, 2020 alle 8:57 am #54035Sergio Bertana
Amministratore del forumTutte le librerie sono comunque scaricabili dalla pagina di download del sito https://www.elsist.biz/lista-download/. Basta inserire nella casella di ricerca il nome o parte di esso della libreria cercata.
Nota: Alle librerie inizialmente veniva aggiunto il suffisso _A000 dove la lettera ed i numeri indicavano la versione. Con l’ultima versione di LogicLab il suffisso è sparito e la libreria riporta un numero di versione che è visualizzato e gestito da LogicLab.
Marzo 20, 2020 alle 6:32 pm #54130giovgris
PartecipanteCon i preziosi consigli sono riuscito a proseguire nel mio progetto, ma ora ho questo problema, come si vede dallo screenshot della finestra di Watch, pare che i caratteri si corrompano quando vengono passati alla rete.
Avete qualche consiglio…
Marzo 22, 2020 alle 11:13 am #54204Sergio Bertana
Amministratore del forumIn effetti nella visualizzazione di LogicLab i dati sembrano errati, devo sentire Axel al riguardo, non avevo mai notato questo semplicemente perchè come strumento diagnostico utilizzo la nostra console di spionaggio. E utilizzando proprio l’esempio citato nella HTTPClient ecco il risultato visto nella console di spionaggio.
[Admin]> SpyData Spy data active, type "Ctrl-C" to exit... 20:52:17( 288)|Tx|GET //Mdp095a000/Ptp119b000/Division.php? 20:52:17(.104)|Rq|Dividend=500&Divisor=10 20:52:17(.080)|Rx|[17] HTTP/1.1 200 OK..Date: 20:52:17(.001)|Rx|[37] Date: Sun, 22 Mar 2020 11:03:42 GMT..Conten 20:52:17(.001)|Rx|[40] Content-Type: text/html; charset=UTF-8..Transf 20:52:17(.001)|Rx|[28] Transfer-Encoding: chunked..Connec 20:52:17(.053)|Rx|[19] Connection: close..Set-Co 20:52:17(.054)|Rx|[168] Set-Cookie: __cfduid=d50c ***HttpOnly; SameSite=Lax.. 20:52:17(.055)|Rx|[23] Vary: Accept-Encoding..CF-Cac 20:52:17(.055)|Rx|[26] CF-Cache-Status: DYNAMIC..Server 20:52:17(.056)|Rx|[20] Server: cloudflare..CF-RAY 20:52:18(.053)|Rx|[30] CF-RAY: 577f6d79bfb3e8f7-MXP....11.. 20:52:18(.055)|Rx|[2] ..11..T 20:52:18(.055)|Lg|Start Rx page, chunked page 20:52:18(.053)|Lg|RxD Chars:28, ChunkLgt:17, TotLgt :0 20:52:18(.054)|Rx|[17] The result is: 500.... 20:52:18(.058)|Pi|Page length: 17 Page load time: 0.796 (S)
Le stringhe visualizzate in console sono troncate alla lunghezza di 80 caratteri ma permettono comunque di capire il funzionamento. Ecco la riga di richiesta inviata al server e la riga di risposta ricevuta dal server:
|Rq|Dividend=500&Divisor=10
|Rx|[17] The result is: 500….Nella risposta ricevuta dal server, il numero tra [] è la lunghezza della stringa ricevuta. Nota: dopo il numero 50 vi è il carattere 0 che fà sembrare la risposta 500 ma in realtà avendo ricevuto una risposta in chunked, lo 0 è la lunghezza dell’ultimo chunk ricevuto. Se metti in debug la variabile Page dove c’è il contenuto ricevuto vedrai che è corretto ed è lungo 17 caratteri.
Marzo 27, 2020 alle 10:53 am #54315giovgris
PartecipanteNel frattempo ho acquistato un nuovo Slim PLC, un MPS053B, per scongiurare che il difetto non fosse a causa di una qualche rottura di quello che stavo utilizzando. Purtroppo non è cambiato nulla, stesso difetto.
Marzo 27, 2020 alle 10:55 am #54346Sergio Bertana
Amministratore del forumAppurato che il difetto che lamenti è un BUG del watch di LogicLab, ho già avvisato la Axel che ha aperto un ticket al riguardo.
Ma non mi dici se hai eseguito il test utilizzando la console di spionaggio e cosa vedi dalla console, perchè a parte la visualizzazione errata in watch il programma deve funzionare.
Aprile 1, 2020 alle 8:04 am #54416giovgris
PartecipanteOk per il BUG del Watch, ma il programma non funziona. I primi tentativi con la console di spionaggio sono andati male !!!
Aprile 1, 2020 alle 8:14 am #54419Sergio Bertana
Amministratore del forumNon ti ho chiesto le cose essenziali:
Il programma che usi è esattamente un copia incolla dell’esempio…
Sullo SlimLine hai configurato correttamente il networking, hai impostato il gateway ed il server DNS…
Hai verificato che lo SlimLine possa andare correttamente in Internet… Per fare questo connettiti il Telnet ed esegui un comando di ping. Prima Ping 8.8.8.8 per verificare che il sistema possa accedere ad Internet e poi Ping google.com per verificare che sia raggiungibile il DNS server (Screenshot).
Aprile 2, 2020 alle 9:11 am #54466giovgris
PartecipanteLa configurazione è corretta
Il ping a 8.8.8.8 funziona
Il ping a google.com restituisce “Wrong command parameters”
Aprile 2, 2020 alle 9:12 am #54472Sergio Bertana
Amministratore del forumStrano che non funzioni il ping su DNS, mi puoi indicare la versione di firmware installata. La puoi vedere collegandoti in Telnet.
Aprile 2, 2020 alle 7:43 pm #54476giovgris
PartecipanteQuesta è la versione di FW – SFW184B080
-
AutorePost
- Devi essere connesso per rispondere a questo topic.