Показано с 1 по 10 из 10

Тема: Переменная REAL ведет себя как Int при вычислениях

  1. #1
    Пользователь
    Регистрация
    25.11.2011
    Адрес
    Москва
    Сообщений
    135

    По умолчанию Переменная REAL ведет себя как Int при вычислениях

    Здравствуйте, пожалуйста, помогите, не могу разобраться.
    В программе на ПЛК-100 есть переменная REAL (energy), в цикле к ней добавляется 0.001, действие типа energy:=energy+0.001 при замыкании входа 0-1 (счетчик импульсов электроэнергии)
    Так вот, действие выполняется до значения переменной energy равной 32767.999, далее значение переменной останавливается на 32768 и не меняется. Но 32768 это же верхний предел переменной типа Int. В чем может быть дело.
    Последний раз редактировалось lomtik; 27.12.2012 в 23:09.

  2. #2
    Пользователь
    Регистрация
    05.11.2011
    Адрес
    Томск
    Сообщений
    192

    По умолчанию

    Код программы приведите.

  3. #3
    Пользователь
    Регистрация
    25.11.2011
    Адрес
    Москва
    Сообщений
    135

    По умолчанию

    вот, пожалуйста
    вычисления переменных происходят в момент замыкания входов 0-1, 0-2 или 0-3

    пробовал и на живом ПЛК-100 и в режиме эмуляции - все одно и тоже. Может дело в какой-нибудь лицензии. Очень жду ответа. Спасибо.
    Вложения Вложения
    Последний раз редактировалось lomtik; 27.12.2012 в 23:12.

  4. #4
    Пользователь
    Регистрация
    25.11.2011
    Адрес
    Москва
    Сообщений
    135

    По умолчанию

    ну как, никто не проверил?

  5. #5

    По умолчанию

    А чё будет если к большому числу в формате REAL прибавить очень маленькое число в формате REAL?
    Зачем проверять код, если вы на грабли студента наступили?

  6. #6
    Пользователь
    Регистрация
    11.01.2009
    Адрес
    Кострома
    Сообщений
    3,144

    По умолчанию

    Суммируйте импульсы до 1000 в одном счетчике и прибавляйте импульс к другому.
    В одном счетчике у Вас будут "до запятой", в другом "после". "После" можете вообще назначить DWORD.
    А так-то все правильно, он и не будет у Вас считать больше. Плавающая запятая, не повод для записи большего числа, чем позволяет размер переменной.

  7. #7
    Пользователь
    Регистрация
    25.11.2011
    Адрес
    Москва
    Сообщений
    135

    По умолчанию

    lara197a, благодарю за идею,
    и прошу отнестись снисходительно, все мы когда-то учились, ну виноват.

  8. #8

    По умолчанию

    размер REAL позволяет записать в него число намного больше, просто кол-во знаков для мантисы ограничено. Если при сложении у вас получается мантиса длиннее чем это возможно, лишние знаки теряются.
    REAL нужно использовать только там где это действительно необходимо, действия с этими числами кушают больше времени, и возможны некоторые неприятности, о которых нужно знать.
    http://ru.wikipedia.org/wiki/IEEE_754

  9. #9

    По умолчанию

    Равенство будет верным на Овеновском ПЛК?
    Код:
    VAR
    	aa: REAL:= 0.1;
    	bb: REAL;
    	cc: BOOL;
    END_VAR
    
    bb := 1.1-1;
    cc:= aa=bb;

  10. #10
    Пользователь
    Регистрация
    25.11.2011
    Адрес
    Москва
    Сообщений
    135

    По умолчанию

    Цитата Сообщение от lara197a Посмотреть сообщение
    Суммируйте импульсы до 1000 в одном счетчике и прибавляйте импульс к другому.
    В одном счетчике у Вас будут "до запятой", в другом "после".
    подскажите, пожалуйста, как склеить потом полученные числа - целое и число после запятой.
    Последний раз редактировалось lomtik; 17.01.2013 в 13:09.

Похожие темы

  1. как показал себя трм212 в работе
    от maxmore в разделе Эксплуатация
    Ответов: 6
    Последнее сообщение: 02.11.2015, 08:07
  2. REAL в СП270
    от xaccat в разделе Эксплуатация
    Ответов: 18
    Последнее сообщение: 17.01.2013, 11:49
  3. Ответов: 2
    Последнее сообщение: 30.05.2012, 13:24
  4. Локальный Var ведет себя как RETAIN
    от tyura в разделе ПЛК1хх
    Ответов: 10
    Последнее сообщение: 19.09.2011, 13:31

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •