Utilizzo TAGs nella pagine HTM dinamiche
Home › Forum › Controllori SlimLine e Netsyst (LogicLab) › Utilizzo TAGs nella pagine HTM dinamiche
- Questo topic ha 16 risposte, 3 partecipanti ed è stato aggiornato l'ultima volta 2 anni, 12 mesi fa da
AndreaT..
-
AutorePost
-
Dicembre 30, 2020 alle 9:08 am #58650
Rubox
PartecipanteHo 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]–>”}
Dicembre 30, 2020 alle 10:36 am #58655Sergio Bertana
Amministratore del forumNon 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: <input name="STRING 100 15" type="text" size="10" maxlength="16" value="<!--['%s', STRING, 100]-->"></br> Valore: <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.
Dicembre 30, 2020 alle 11:07 am #58656Rubox
PartecipanteAvevo 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?
Dicembre 30, 2020 alle 11:12 am #58658Sergio Bertana
Amministratore del forumHai 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.
Dicembre 30, 2020 alle 2:18 pm #58659Rubox
PartecipantePer 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?
Dicembre 30, 2020 alle 2:22 pm #58663Sergio Bertana
Amministratore del forumLa 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.
Dicembre 30, 2020 alle 4:50 pm #58670Rubox
PartecipanteHo 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?
Dicembre 30, 2020 alle 5:05 pm #58673Sergio Bertana
Amministratore del forumPer 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]-->
Gennaio 11, 2021 alle 11:02 am #58682Rubox
PartecipanteHo 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.
Gennaio 11, 2021 alle 11:03 am #58714Sergio Bertana
Amministratore del forumNel 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à.
Gennaio 30, 2021 alle 6:35 pm #58910Rubox
PartecipanteSono 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?
Gennaio 30, 2021 alle 6:39 pm #58921Sergio Bertana
Amministratore del forumBuona 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.
Febbraio 1, 2021 alle 9:33 am #58922Rubox
PartecipanteGrazie 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.
Febbraio 1, 2021 alle 9:42 am #58924Sergio Bertana
Amministratore del forumCon 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.
Febbraio 2, 2021 alle 7:56 am #58926Rubox
PartecipanteMi riavventuro nell’aggiornamento del FW.
Solo una precisazione: io che ho ancora il FW C330 per XTarget12 devo scaricare il pacchetto PCK050A000, corretto? -
AutorePost
- Devi essere connesso per rispondere a questo topic.