Vai al contenuto

Utilizzo TAGs nella pagine HTM dinamiche

Home Forum Controllori SlimLine e Netsyst (LogicLab) Utilizzo TAGs nella pagine HTM dinamiche

Stai visualizzando 15 post - dal 1 a 15 (di 17 totali)
  • Autore
    Post
  • #58650
    Rubox
    Partecipante

    Ho un dubbio sulle variabili STRING, e non son riuscito a trovare sulla documentazione la spiegazione. Nella pagina HTML una stringa allocata alla posizione 100.200 di lunghezza 16 si definisce come <!–[“%s”,STRING,200]–> per la visualizzazione, e si inserisce in un tag INPUT come name=”STRING 200 16″

    Volendo costruire io la stringa di aggiornamento da inviare in POST al PLC, tramite tecnica AJAX, è corretto formattarla nel seguente modo, supponendo la stringa di prima e un UINT alla posizione 40?

    var stringaPOST=”STRING 200=’valore stringa’&UINT 40=22″;

    e poi spedirla alla pagina dove sono definite che conterrà la seguente formattazione JSON?

    {“stringa”:”<!–[“%s”,STRING,200]–>”,”numero”:”<!–[“%d”,UINT,40]–>”}

    #58655
    Sergio Bertana
    Amministratore del forum

    Non ho capito bene quello che vuoi fare, l’argomento è un pò complicato vedo di spiegarlo magari inserendo più posts di risposta. Inizaimo con una gestione non in Ajax, quindi se vuoi un rinfresco della pagina la devi ricaricare dal browser. Ti riporto il listato di un programma che permette la visualizzazione e l’input da pagina web di variabili.

    VAR
        i : UDINT; (* Auxiliary variable *)
        IString AT %MX100.100 : STRING[ 15 ];  (* Stringa in input *)
        IVar AT %MX100.116 : UINT; (* Variabie in input *)
        OString AT %MX100.118 : STRING[ 31 ]; (* Stringa risultato *)
    END_VAR
    
    // -----------------------------------------------------------------------------
    // Di seguito il contenuto della pagina "Test.htm" da trasferire sullo SlimLine
    // nella directory "C:\Web".
    //
    // E' visualizzata in un campo input la stringa "ISting" allocata a DB100.100.
    // E' visualizzata in un campo input la variabile "IVar" allocata a DB100.116.
    // E' visualizzata in un campo <div> la stringa di concatenazione del risultato.
    // -----------------------------------------------------------------------------
    /*
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>SlimLine - Simple page</title>
    </head>
    <body">
    <div><!--['%s', STRING, 118]--></div>
    <form id="MyForm" name="MyForm" method="post" action="Test.htm">
    Stringa:&nbsp;<input name="STRING 100 15" type="text" size="10" maxlength="16" value="<!--['%s', STRING, 100]-->"></br>
    Valore:&nbsp;<input name="UINT 116" type="text" size="10" maxlength="10" value="<!--['%d', UINT, 116]-->"></br>
    <input type="submit" id="MyButton" value="Save"/>
    </form>
    </body>
    </html>
    */
    // -----------------------------------------------------------------------------
    
    i:=SysVsnprintf(ADR(OString), SIZEOF(OString), ADR('Result:%s'), STRING_TYPE, ADR(IString));
    i:=SysCVsnprintf(ADR(OString), SIZEOF(OString), ADR(' - %d'), UINT_TYPE, ADR(IVar));
    
    // [End of file]

    Metto in evidenza che il tipo file deve essere .htm, perchè solo nei files con questa estensione vengono sostituiti i TAGs.

    Le variabili stringa sono definite di lunghezza 15 e 31 perchè ricordo che al termine delle stringhe è automaticamente aggiunto il codice tappo 16#00 che allunga di 1 byte la lunghezza definita.

    Per impostare i parametri da pagina web utilizzo un form che invia i valori in POST, nelle variabili stringa nei campi di inputazione occorre definire la lunghezza masima questo per evitare di “sforare” la dimensione in memoria.

    #58656
    Rubox
    Partecipante

    Avevo dimenticato di inserire la lunghezza della stringa nella richiesta POST.

    Da JavaScript devo modificare la stringa riportata sopra in:

    var stringaPOST=”STRING 200 15=’valore stringa’&UINT 40=22″

    OT:come posso inserire nel forum blocchi di codice formattato come ha fatto Lei? quali tags utilizzare?

    #58658
    Sergio Bertana
    Amministratore del forum

    Hai già inserito correttamente i blocchi di codice formattato…

    Per farlo si edita il post in modalità testo e si include il blocco di codice nei TAGs “<pre>Testo da includere</pre>.

    Per quanto riguarda la gestione Ajax delle pagine nelle nuove pagine web abbiamo già introdotto una serie di funzioni richiamabili che alleggeriscono il lavoro. La tecnica che abbiamo utilizzato è di avere una pagina con estensione html che contiene la visualizzazione dei valori ed una pagina dello stesso nome con estensione htm che contiene i TAGs che saranno sostituiti dal server con i relativi valori. Se tu guardi le pagine web dello SlimLine troverai questa tecnica e nelle pagine htm troverai qualcosa tipo questo:

    {"OSID_TELNET_SVR_EN" : <!--[OSID_TELNET_SVR_EN]-->,
     "OSID_TELNET_SVR_PORT" : <!--[OSID_TELNET_SVR_PORT]-->,
     "OSID_WEB_SVR_EN" : <!--[OSID_WEB_SVR_EN]-->}

    Quelli che vedi sono TAGs che ritornano e permettono di impostare variabili di sistema qui trovi l’elenco.

    Ora siamo chiusi e non riesco a farti un esempio, al rientro preparerò un esempio esplicativo.

    #58659
    Rubox
    Partecipante

    Per la formattazione del codice ho sbirciato il sorgente della pagina e visto che il Suo codice era tra tag <pre>.

    Nel pomeriggio aggiorno il FW della CPU e poi ci “gioco”.

    Uso già i tag in un file valori.html per leggere le variabili da pagina HMTL e JS con richieste XMLHTTP alla pagina valori.htm (e funziona), e uso lo stesso file valori.htm per inviare i dati dalla pagina HTML prendendo spunto dall’esempio che a suo tempo c’era sul sito.

    Poiché sono “allergico” ai form del linguaggio HTML e preferisco costruirmi la stringa POST da solo, ma sbagliavo nel non definire la lunghezza della STRING ma solo tipo di dato e locazione di memoria. Ed il dubbio m’è venuto dalla Sua risposta.

    Ho modificato lo script JS e adesso non ho più quel warning, però voglio appunto aggiornare il FW e riprovare se tutto funziona correttamente. A tal proposito cambia qualcosa per la gestione delle pagine dinamiche HTML? I TAG di prima funzionano anche adesso, oppure è stata rivista la struttura?

    #58663
    Sergio Bertana
    Amministratore del forum

    La gestione delle TAGs utente (Quelle relative alle variabili allocate in DB100) per compatibilità con il passato è rimasta esattamente uguale alla precedente.

    Abbiamo modificato le TAGs di sistema che nelle vecchie versioni di firmware non erano documentate ed erano utilizzate esclusivamente nelle nostre pagine di sistema.

    Ora abbiamo aggiunto le definizioni dei SYS_ID che possono essere utilizzati sia nelle pagine web che da programma utente con la funzione SysOSIDValue.

    #58670
    Rubox
    Partecipante

    Ho aggiornato il FW della CPU all’ultima versione SFW198D030.

    IL PLC è ripartito ma sembra che i TAG delle pagine dinamiche non funzioni: il file formattato che funzionava con il FW precedente adesso non mi restituisce i valori delle variabili. Ho fatto un semplice programma che scrive alla variabile real DB100.0 un valore e un file htm come segue:

    <!--["%.3f",REAL,100]-->

    Però richiamando la pagina non mi visualizza il valore.

    Secondo problema: accedendo alle pagine di configurazione del PLC vedo le varie sezioni, ma non mi permette di modificare nessuna impostazione.

    Dove sbaglio?

    #58673
    Sergio Bertana
    Amministratore del forum

    Per quanto riguarda la visualizzazione della TAG dici che hai allocato una variabile REAL nella DB100.0 allora avresti dovuto mettere indirizzo variabile a 0 non 100. Il DB100 è di default devi solo indicare l’indirizzo. Prova a modificare il file htm così:

    <!--["%.3f",REAL,0]-->
    #58682
    Rubox
    Partecipante

    Ho fatto un programma base sul PLC e una pagina altrettanto base

    (* Variabili globali impostate sul PLC *)
    
    VAR_GLOBAL
    	valore AT %MD100.0 : REAL := 123.456;
    	i AT %MW100.10 : UINT := 521;
    END_VAR
    
    (* Pagina v2.htm inserita nella cartella C:\Web del PLC *)
    Intero: <!--["%d",UINT,10]-->

    Nel programma ho inserito un task di Boot che incrementa la variabile i di un’unità. Mi aspetterei di leggere “Intero: 522” quando dal browser richiamo la pagina, invece dopo la scritta “Intero:” non compare nulla.

    Son quasi sicuro di sbagliare qualcosa di semplice, ma non riesco a capire cosa.

    #58714
    Sergio Bertana
    Amministratore del forum

    Nel parsing dei TAGs è importante la posizione delle virgole e degli spazi, devi scrivere la TAG nel modo:

    Intero: <!--["%d", UINT, 10]-->

    Così vedrai che tutto ti funzionerà.

    #58910
    Rubox
    Partecipante

    Sono in fase di esperimenti e non ne vengo a capo. Un cliente preferisce gestire e vedere i dati dal PC invece che da pannello operatore, quindi gli preparo le pagine web dinamiche. Per il refresh in automatico dei dati ho sempre usato AJAX e XMLHttpRequest.

    Si lamenta che ogni tanto il sistema sembra avere ritardi di comunicazione, così ho modificato le pagine html per utilizzare l’API fetch. Funziona tutto fino a che le richieste sono di tipo GET, concatenando la funzione javascript con la sequenza delle promise intrinseche di fetch la pagina aggiorna i dati.

    Il problema sorge volendo utilizzare l’API fetch anche per le operazioni di POST: mentre con XMLHttpRequest riesco ad aggiornare correttamente i valori sul PLC, con l’API fetch ottengo sempre un errore di rete. E non riesco a capire da dove salti fuori, se dal webserver del PLC che non risponde “correttamente” o da cosa. Se utilizzo la stessa funzione javascript con l’API fetch per comunicare con un altro server non ho nessun tipo di errore e i dati vengono trasmessi.

    Qualcuno dei frequentatori del sito, oppure Lei, avete già usato l’API fetch in pagine javascript per trasferire dati al PLC tramite i TAGS?

    #58921
    Sergio Bertana
    Amministratore del forum

    Buona l’idea di abbandonare XMLHttpRequest e di utilizzare le più moderne API Fetch, ho quindi provveduto a modificare gli esempi riportati nella knowledge.

    Se scarichi l’esempio citato nell’articolo troverai una pagina gestita con l’API Fetch in cui si aggiornano in AJAX i valori con richieste in GET e si impostano valori in POST.

    #58922
    Rubox
    Partecipante

    Grazie per aver aggiornato gli esempi.

    Ho provato il suo esempio senza modificare nulla. Io uso la CPU MPS054A110 XTarget12, e mentre con le richieste GET sia in XHR che FETCH non ho problemi e vengono risolte tutte, le richieste POST vanno a buon fine con XHR.

    Le richieste POST tramite FETCH ottengono un generico errore di rete.

    Se eseguo richieste FETCH verso altri server invece sono risolte senza problemi, cosa che mi fa supporre che qualcosa nel firmware che uso non sia compatibile con tali API.

    #58924
    Sergio Bertana
    Amministratore del forum

    Con la versione XUnified abbiamo risolto anche alcuni BUGs presenti su XTarget_12, il primo riguarda la risposta alle richieste GET sulle pagine dinamiche (Pagine con estensione htm) nella versione XTarget_12 venivano ritornate le informazioni di Cache-Control.

    Cache-Control: max-age=300
    ETag: "1612163484:149"

    Questo forzava il caching della pagina da parte del browser e quindi non veniva più richiesta al server, per sopperire al problema nella richiesta get veniva aggiunto alla pagina un numero random per simulare richieste diverse.

    Per quanto riguarda le richieste POST, nell’XTarget_12 viene eseguito un controllo case sensitive sull’header e questo a volte genera problemi di decodifica. Nell’XUnified il controllo ora e case insensitive.

    Quindi per risolvere i tuoi problemi ti consiglio di eseguire l’upgrade del sistema a XUnified.

    #58926
    Rubox
    Partecipante

    Mi riavventuro nell’aggiornamento del FW.
    Solo una precisazione: io che ho ancora il FW C330 per XTarget12 devo scaricare il pacchetto PCK050A000, corretto?

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