Просмотр полной версии : Переменная REAL ведет себя как Int при вычислениях
Здравствуйте, пожалуйста, помогите, не могу разобраться.
В программе на ПЛК-100 есть переменная REAL (energy), в цикле к ней добавляется 0.001, действие типа energy:=energy+0.001 при замыкании входа 0-1 (счетчик импульсов электроэнергии)
Так вот, действие выполняется до значения переменной energy равной 32767.999, далее значение переменной останавливается на 32768 и не меняется. Но 32768 это же верхний предел переменной типа Int. В чем может быть дело. :(
вот, пожалуйста
вычисления переменных происходят в момент замыкания входов 0-1, 0-2 или 0-3
пробовал и на живом ПЛК-100 и в режиме эмуляции - все одно и тоже. Может дело в какой-нибудь лицензии. Очень жду ответа. Спасибо.
ну как, никто не проверил?
А чё будет если к большому числу в формате REAL прибавить очень маленькое число в формате REAL?
Зачем проверять код, если вы на грабли студента наступили?:)
lara197a
29.12.2012, 17:34
Суммируйте импульсы до 1000 в одном счетчике и прибавляйте импульс к другому.
В одном счетчике у Вас будут "до запятой", в другом "после". "После" можете вообще назначить DWORD.
А так-то все правильно, он и не будет у Вас считать больше. Плавающая запятая, не повод для записи большего числа, чем позволяет размер переменной.
lara197a, благодарю за идею,
и прошу отнестись снисходительно, все мы когда-то учились, ну виноват.
размер REAL позволяет записать в него число намного больше, просто кол-во знаков для мантисы ограничено. Если при сложении у вас получается мантиса длиннее чем это возможно, лишние знаки теряются.
REAL нужно использовать только там где это действительно необходимо, действия с этими числами кушают больше времени, и возможны некоторые неприятности, о которых нужно знать.
http://ru.wikipedia.org/wiki/IEEE_754
Равенство будет верным на Овеновском ПЛК?
VAR
aa: REAL:= 0.1;
bb: REAL;
cc: BOOL;
END_VAR
bb := 1.1-1;
cc:= aa=bb;
Суммируйте импульсы до 1000 в одном счетчике и прибавляйте импульс к другому.
В одном счетчике у Вас будут "до запятой", в другом "после".
подскажите, пожалуйста, как склеить потом полученные числа - целое и число после запятой.
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot