Vai al contenuto

Conversione da decimale ad ascii

Home Forum Terminali operatore (Weintek) Conversione da decimale ad ascii

  • Questo topic ha 4 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 12 mesi fa da fbossio.
Stai visualizzando 5 post - dal 1 a 5 (di 5 totali)
  • Autore
    Post
  • #76917
    fbossio
    Partecipante

    Su di un pannello cMT3162x(V2) sto tentando di convertire due campi dati da decimale ad ascii per salvarli su database ma il secondo carattere non viene salvato sulla LW corrispondente come se nel primo venisse inserito dalla funzione DEC2ASCII il terminatore di stringa (tipico di C per intenderci) e quindi la seconda parte di stringa viene scartata.

    Allego il codice macro che sto utilizzando per la copia, anche gestendo i due valori come totalmente separati (quindi con due variabili di scrittura e due diverse StringSet) il risultato finale è lo stesso.

    macro_command main()
    int xp, yp
    char x[9] = ""
    
    GetDataEx(xp,"Local HMI",LW,1221,1)
    GetDataEx(yp,"Local HMI",LW,1224,1)
    DEC2ASCII(xp, x[0], 4)
    DEC2ASCII(yp, x[5], 4)
    StringSetEx(x[0],"Local HMI",LW,1021,9)
    end macro_command
    #76926
    fbossio
    Partecipante

    Modificando la macro ottengo un comportamento ancora più strano, il contenuto delle due celle di origine viene scritto sul campo di destinazione ma se carico il contenuto del campo di destinazione sul database tramite query MySQL solo il primo viene salvato, dalla diagnostica è possibile vedere il contenuto del campo LW-1021 uguale a “0000” mentre in visualizzazione è “0000 0000”. Si tratta di un errore del pannello?

    Questa la macro che utilizzo al momento:

    macro_command main()
    int xp, yp
    char x[4] = "", ext[9] = ""
    
    GetDataEx(xp,"Local HMI",LW,1221,1)
    GetDataEx(yp,"Local HMI",LW,1224,1)
    DEC2ASCII(xp, x[0], 4)
    StringCopy(x[0], ext[0])
    DEC2ASCII(yp, x[0], 4)
    StringCopy(x[0], ext[5])
    SetData(ext[0],"Local HMI",LW,1021,9)
    end macro_command
    #76928
    fbossio
    Partecipante

    Problema risolto, lascio la macro corretta qui per chiunque ne avesse bisogno, è stato necessario aggiungere uno StringCopy vuoto tra i due campi altrimenti il secondo campo viene scartato come descritto sopra.

    macro_command main()
    int xp, yp
    char x[5] = "", ext[11] = ""
    
    GetDataEx(xp,"Local HMI",LW,1221,1)
    GetDataEx(yp,"Local HMI",LW,1224,1)
    
    DEC2ASCII(xp, x[0], 5)
    StringCopy(x[0], ext[0])
    DEC2ASCII(yp, x[0], 5)
    StringCopy(" ", ext[5])
    StringCopy(x[0], ext[6])
    SetData(ext[0],"Local HMI",LW,1021,11)
    end macro_command
    #76936
    Sergio Bertana
    Amministratore del forum

    Non so se ho capito bene quello che volevi ottenere ecco lo screenshot di quello che ho fatto io con questa macro.

    macro_command main()
    short Value=0 //Value to convert
    char Result[8]={0} //Result string
    
    GetData(Value, "Local HMI", LW, 10, 1) //Get data from LW
    DEC2ASCII(Value, Result[0], 4) //Convert 4 digit to ascii
    
    GetData(Value, "Local HMI", LW, 12, 1) //Get data from LW
    DEC2ASCII(Value, Result[4], 4) //Convert 4 digit to ascii
    
    SetData(Result[0], "Local HMI", LW, 20, 8) //Copy the ascii result to 8 bytes (4 LW)
    end macro_command
    #76954
    fbossio
    Partecipante

    Si è esattamente la stessa cosa che volevo fare io, ma se si inserisce uno spazio vuoto tra i due valori viene salvato sulla LW solo il primo campo, se non si inserisce lo spazio in mezzo.

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