Vai al contenuto

Bug della funzione ‘module’ in linguaggio ST

Home Forum Programmazione IEC 61131 (LogicLab) Bug della funzione ‘module’ in linguaggio ST

Stai visualizzando 2 post - dal 1 a 2 (di 2 totali)
  • Autore
    Post
  • #79452
    mauro.bottizzo
    Partecipante

    Mi sono ritrovato a dover mettere mano ad un Vostro MPS053 Xtarget 12.0, (1.10.3 mi sembra), laddove per latitanza del precedente progettista e programmatore ho dovuto rifarne il programma.

    Mi sono imbattuto in un bug sulla funzione ‘module’ in quanto ha un comportamento strano con tag di interi segnati:

    diValue01 : DINT;
    diValue02 : DINT;
    diRes : DINT;
    ...
    diValue01 := 300;
    diValue02 := 400;
    diRes := (diValue01 - diValue02) MOD 350;

    Il risultato in ‘diRes’ invece di comprendersi tra 0 e 349, diventa negativo!!

    Ho dovuto introdurre un casting e togliere il segno prima di fare il modulo, così:
    diRes := TO_UDINT(diValue01 – diValue02) MOD 350;

    Non è normale, in Tia Portal e CoDeSys non ho mai dovuto fare caso al segno. Il modulo è appunto il resto, non deve diventare negativo, ovvero positivo in modulo 2.

    #79496
    Sergio Bertana
    Amministratore del forum

    In effetti l’operatore MOD ha un BUG ho avvisato Axel (Lo sviluppatore di LogicLab) in merito al problema attendo una sua soluzione in una prossima versione di LogicLab.

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