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.