Vai al contenuto

Errore esecuzione programma client REST

Home Forum Discussioni su problematiche generali Errore esecuzione programma client REST

Stai visualizzando 4 post - dal 1 a 4 (di 4 totali)
  • Autore
    Post
  • #58582

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

    #58586
    Sergio Bertana
    Amministratore del forum

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

    #58590

    Grazie 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]
    #58593
    Sergio Bertana
    Amministratore del forum

    Credo 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;
Stai visualizzando 4 post - dal 1 a 4 (di 4 totali)
  • Devi essere connesso per rispondere a questo topic.