Vai al contenuto

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

Stai visualizzando 15 post - dal 1 a 15 (di 18 totali)
  • Autore
    Post
  • #53992
    giovgris
    Partecipante

    Sono 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

    #54003
    Sergio Bertana
    Amministratore del forum

    Per 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.

    #54024
    giovgris
    Partecipante

    Sto 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.

    #54027
    Sergio Bertana
    Amministratore del forum

    Hai importato nel progetto gli oggetti HTTPClient_v1 e JSONEncode_v1 dalla libreria eLLabHTTPLib ?

    La libreria si trova nella cartella di installazione di LogicLab.

    #54030
    giovgris
    Partecipante

    Non ho questa libreria nella cartella di installazione di LogicLab !!

    #54035
    Sergio Bertana
    Amministratore del forum

    Tutte 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.

     

    #54130
    giovgris
    Partecipante

    Con 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…

    #54204
    Sergio Bertana
    Amministratore del forum

    In 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.

    #54315
    giovgris
    Partecipante

    Nel 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.

    #54346
    Sergio Bertana
    Amministratore del forum

    Appurato 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.

    #54416
    giovgris
    Partecipante

    Ok per il BUG del Watch, ma il programma non funziona. I primi tentativi con la console di spionaggio sono andati male !!!

    #54419
    Sergio Bertana
    Amministratore del forum

    Non 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).

    #54466
    giovgris
    Partecipante

    La configurazione è corretta

    Il ping a 8.8.8.8 funziona

    Il ping a google.com restituisce “Wrong command parameters”

    #54472
    Sergio Bertana
    Amministratore del forum

    Strano che non funzioni il ping su DNS, mi puoi indicare la versione di firmware installata. La puoi vedere collegandoti in Telnet.

    #54476
    giovgris
    Partecipante

    Questa è la versione di FW – SFW184B080

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