Errore esecuzione programma client REST
Home › Forum › Discussioni su problematiche generali › Errore esecuzione programma client REST
- Questo topic ha 3 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 4 anni, 3 mesi fa da
Sergio Bertana.
-
AutorePost
-
Dicembre 22, 2020 alle 5:47 pm #58582
Alessandro Campodonico
PartecipanteOggi ho riscontrato un warning (tramite Toolly) che pare si verifichi ogni qual volta il sistema invia dei dati al server REST, il codice è il seguente:
User program error:10056101
Sul manuale ho trovato questa descrizione:
1005610(0~1) Errore parametri in ingresso (Comando In).
Questo è il mio programma
IF (SysFirstLoop) THEN REST.SpyOn:=TRUE; //Spy On // FIFO saved on RAM memory. REST.FIFOFile:=ADR(RESTVars.FIFO); //FIFO on file REST.FIFOFilename:=NULL; //Path and name of FIFO file REST.FIFOSize:=4096; //FIFO file size REST.FIFOIDx:=NULL; //FIFO indexes // REST server address. REST.HostAddress:=ADR('sanitrade-dev.progestnow.com'); //Host address server REST REST.HostName:=REST.HostAddress; //Host name server REST REST.Page:=ADR('app_dev.php/personalizzati/sanitrade/slimrest'); //REST server script REST.HostPort:=80; //REST server port REST.HTTPClient:=ADR(HTTP); //HTTP Client REST.HBitTime:=60; //Heartbeat time (S) REST.BLength:=512; //REST Request/Answer buffers length END_IF; // ------------------------------------------------------------------------- // REST CLIENT MANAGEMENT // ------------------------------------------------------------------------- // Here the REST client is managed, it's always enabled. REST(Enable:=TRUE); //REST client management IF (REST.Fault) THEN LError:=SysGetLastError(TRUE); END_IF; // [End of file]
Come posso risolvere.
Dicembre 22, 2020 alle 5:54 pm #58586Sergio Bertana
Amministratore del forumIl programma è molto simile a quello riportato nel manuale sul FB RESTClient, ma l’errore che tu riporti riguarda i parametri del FB FIFOFile sulla esecuzione del comando In. Cioè quando sono inseriti nel registro FIFO i dati da inviare al server REST, dovresti avere nel programma qualcosa del tipo:
i:=Sysmemset(ADR(RESTRequest), 0, SIZEOF(RESTRequest)); //REST request JEncode(Object:=ADR(RESTRequest), OSize:=SIZEOF(RESTRequest), Name:=ADR('Dividend'), VType:=REAL_TYPE, VAddress:=ADR(RESTData[0]), Count:=1); JEncode(Object:=ADR(RESTRequest), OSize:=SIZEOF(RESTRequest), Name:=ADR('Divisor'), VType:=REAL_TYPE, VAddress:=ADR(RESTData[1]), Count:=1); RESTVars.FIFO(In:=TRUE, Dp:=ADR(RESTRequest), Dls:=LEN(RESTRequest)); //Write record on FIFO
Ed è proprio nella riga dove esegui il comando di inserimento dei dati nel FIFO che hai qualche errore nella definizione dei dati.
Dicembre 23, 2020 alle 10:09 am #58590Alessandro Campodonico
PartecipanteGrazie della risposta, incollo anche la parte di codice dove inserisco i dati nel registro FIFO.
// ------------------------------------------------------------------------- // TEMPORIZZAZIONE INVIO // ------------------------------------------------------------------------- // Eseguo invio di 38 valori ogni ora. IF ((SysDateTime-DateTime) < 3600) THEN CaseNr:=0; RETURN; END_IF; // Temporizzo invio tra i valori (Invio ogni 1/2 secondo). IF ((SysGetSysTime(TRUE)-TimeBf) < 500000) THEN RETURN; END_IF; TimeBf:=SysGetSysTime(TRUE); //Time buffer (uS) // ------------------------------------------------------------------------- // INVIO DATI // ------------------------------------------------------------------------- // Gestione case programma. i:=Sysmemset(ADR(RESTVars.Request), 0, SIZEOF(RESTVars.Request)); //REST request CASE (CaseNr) OF 0: RESTVars.JEncode(Object:=ADR(RESTVars.Request), OSize:=SIZEOF(RESTVars.Request), Name:=ADR('Nr Partenze Pompa 1'), VType:=WORD_TYPE, VAddress:=ADR(IMPULSI_POMPA_1_HMI), Count:=1); 1: RESTVars.JEncode(Object:=ADR(RESTVars.Request), OSize:=SIZEOF(RESTVars.Request), Name:=ADR('Nr Partenze Pompa 2'), VType:=WORD_TYPE, VAddress:=ADR(IMPULSI_POMPA_2_HMI), Count:=1); 2: ... 3: ... Continuo con l'invio dei vari dati (Ci sono 38 invvi totali) 37: ... ELSE DateTime:=SysDateTime; //Date/Time Epoch END_CASE; // ------------------------------------------------------------------------- // INVIO REST // ------------------------------------------------------------------------- CaseNr:=CaseNr+1; //Case programma RESTVars.FIFO(In:=TRUE, Dp:=ADR(RESTVars.Request), Dls:=LEN(RESTVars.Request)); //Write record on FIFO // [End of file]
Dicembre 23, 2020 alle 10:12 am #58593Sergio Bertana
Amministratore del forumCredo che il problema possa essere nella gestione ELSE del CASE dove tu arrivi dopo avere inviato l’ultimo dato. In quel caso non carichi nulla nella variabile RESTVars.Request, e quindi LEN(RESTVars.Request) torna 0. Proverei a modificarlo così:
ELSE DateTime:=SysDateTime; //Date/Time Epoch RETURN; END_CASE;
-
AutorePost
- Devi essere connesso per rispondere a questo topic.