Vai al contenuto

Dubbi sulla funzione SwapData

Home Forum Programmazione IEC 61131 (LogicLab) Dubbi sulla funzione SwapData

Stai visualizzando 2 post - dal 1 a 2 (di 2 totali)
  • Autore
    Post
  • #70007
    Dax7
    Partecipante

    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?

    #70020
    Sergio Bertana
    Amministratore del forum

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