Conversione da decimale ad ascii
Home › Forum › Terminali operatore (Weintek) › Conversione da decimale ad ascii
-
AutorePost
-
Aprile 22, 2024 alle 8:05 am #76917
fbossio
PartecipanteSu 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
Aprile 23, 2024 alle 4:49 pm #76926fbossio
PartecipanteModificando 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
Aprile 23, 2024 alle 5:29 pm #76928fbossio
PartecipanteProblema 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_commandAprile 24, 2024 alle 9:26 am #76936Sergio Bertana
Amministratore del forumNon 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_commandAprile 24, 2024 alle 7:37 pm #76954fbossio
PartecipanteSi è 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.
-
AutorePost
- Devi essere connesso per rispondere a questo topic.