Home › Forum › Programmazione IEC 61131 (LogicLab) › Dubbi sulla funzione SwapData
- Questo topic ha 1 risposta, 2 partecipanti ed è stato aggiornato l'ultima volta 1 anno, 2 mesi fa da Sergio Bertana.
-
AutorePost
-
Febbraio 8, 2023 alle 12:30 pm #70007Dax7Partecipante
Buongiorno, avrei un problema con l’utilizzo della funzione SwapData, per una variabile REAL.
La variabile che mi conferma lo swap è a uno, ma se metto la variabile che vorrei swappare nella finestra watch (in formato esadecimale), questa non è swappata.
Ho provato a utilizzare due variabili diverse tra destinazione e sorgente, ma in quel caso la variabile dell’ esecuzione dello swap rimane a 0.
Mi servirebbe eseguire lo swap per poter fornire questa variabile a un pannello HMI, sembra esserci un problema di swap, word/byte, o di endianess, perchè il valore che acquisisco è totalmente diverso, volevo fare qualche prova ma non sembra funzionare.
E’ possibile che stia sbagliando qualcosa?
Febbraio 9, 2023 alle 8:20 am #70020Sergio BertanaAmministratore del forumHo realizzato un semplice programma che testa lo swap su variabili REAL, naturalmente per vedere il risultato dello swap ho dovuto appoggiare i valori dopo lo swap su variabili DWORD perchè i numeri REAL non essendo più nel formato corretto non sono più visualizzabili. Ecco il risultato:
PROGRAM MyProgram VAR i : BOOL; (* Auxiliary variable *) DWData : ARRAY[0..3] OF DWORD; (* DWord data example *) RLData : ARRAY[0..3] OF REAL; (* Real data example *) END_VAR RLData[0]:=1234.567; DWData[0]:=eGetDWORD(ADR(RLData[0])); //16#449A5225 i:=SwapData(ADR(RLData[1]), ADR(RLData[0]), DWORD_TYPE, SWAP_HALF); DWData[1]:=eGetDWORD(ADR(RLData[1])); //16#5225449A i:=SwapData(ADR(RLData[2]), ADR(RLData[0]), DWORD_TYPE, SWAP_VARS); DWData[2]:=eGetDWORD(ADR(RLData[2])); //16#449A5225 i:=SwapData(ADR(RLData[3]), ADR(RLData[0]), DWORD_TYPE, SWAP_ENDIAN); DWData[3]:=eGetDWORD(ADR(RLData[3])); //16#25529A44 // [End of file]
-
AutorePost
- Devi essere connesso per rispondere a questo topic.