Przepełnienie zmiennej

Pytania i odpowiedzi dotyczące sprzętu Unitronics

Moderatorzy: Marek Sikora, Mateusz Sikorski

Przepełnienie zmiennej

Postprzez 71tomek » Pn, 23 paź 2017, 08:10

V1040
W formule jak w zał.mnożę ML104 przez 10000 (ML18) i dzielę przez 10000 (pomińmy sens tej operacji). Przy wartości 214748 następuje przepełnienie zmiennej ML101 (przechodzi w minus). Czy jest to spowodowane tym, że jakaś zmienna pomocnicza formuły przepełnia się przy mnożeniu A*B i przekracza 2147483647?
Załączniki
obraz 2.jpg
(184.53 KiB) Pobrane 778 razy
71tomek
 
Posty: 116
Dołączył(a): Cz, 27 wrz 2012, 09:34

Re: Przepełnienie zmiennej

Postprzez Mateusz Sikorski » Pn, 23 paź 2017, 08:22

Witam,

dokładnie, tak. Przy mnożeniu wartości 214748 przez 10000 wychodzi wartość 21 474 800 000. Wartość ML przyjmuje wartości od −2 147 483 648 do 2 147 483 647. Widać gołym okiem, że wartości, którą Pan otrzymuje w bloku FORMULA wykracza poza zakres zmiennej. Po przekroczeniu zakresów wynik operacji jest nie do przewidzenia, dlatego pokazuje Panu taką wartość.
Mateusz Sikorski
Elmark Automatyka S.A.
Mateusz Sikorski
 
Posty: 565
Dołączył(a): Śr, 13 lip 2011, 08:08

Re: Przepełnienie zmiennej

Postprzez 71tomek » Pn, 23 paź 2017, 09:15

Wydaje mi się, że 214748 X 10 000 jest 2147480 000 i same zmienne w formule (ML104, ML101, ML18) nie przekraczają wartości 2147483648. Sądzę, że to bruździ (przepełnia się) jakaś zmienna pośrednia, w której sterownik zapisuje sobie pośredni wynik operacji mnożenia ML104 x ML18 (10000) przed podzieleniem przez 10000... Możliwe to?
71tomek
 
Posty: 116
Dołączył(a): Cz, 27 wrz 2012, 09:34

Re: Przepełnienie zmiennej

Postprzez Mateusz Sikorski » Pn, 23 paź 2017, 10:26

Witam,
faktycznie, dodałem o jedno 0 za dużo. Sprawdziłem Pański przykład na V1040 i u mnie formuła działa w prawidłowy sposób - nie powinno przepełniać rejestru (przeskakiwać na wartość ujemną) przed końcem zakresu. Proszę o informację, jakiej wersji VisiLogic Pan używa oraz jaka wersja OS jest wgrana do sterownika V1040.
Załączniki
Bez tytułu.jpg
formula
(108.78 KiB) Pobrane 793 razy
Mateusz Sikorski
Elmark Automatyka S.A.
Mateusz Sikorski
 
Posty: 565
Dołączył(a): Śr, 13 lip 2011, 08:08

Re: Przepełnienie zmiennej

Postprzez 71tomek » Pn, 23 paź 2017, 11:18

Proszę wrzucić jeszcze do ML0 214749 dla pewności. VL 9.8.31 a dane dotyczące OS podam jutro.
71tomek
 
Posty: 116
Dołączył(a): Cz, 27 wrz 2012, 09:34

Re: Przepełnienie zmiennej

Postprzez Mateusz Sikorski » Pn, 23 paź 2017, 11:34

Wtedy wartość wyjściowa wynosi -214747 i jest to zgodne z tym, co napisałem o zakresach. Proszę wgrać najnowsze oprogramowanie ze strony producenta i wgrać najnowszy OS, tak jak ja to zrobiłem na swoim sterowniku, który jak widać na obrazku w poprzedniej wiadomości przelicza wartości w poprawny sposób.
Mateusz Sikorski
Elmark Automatyka S.A.
Mateusz Sikorski
 
Posty: 565
Dołączył(a): Śr, 13 lip 2011, 08:08


Powrót do Unitronics



Kto przegląda forum

Użytkownicy przeglądający to forum: Google [Bot] i 1 gość

cron