Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?

Официальный форум Simple-Scada.

Автор Тема: Ошибка 64 битной переменной  (Прочитано 4837 раз)

B.B

  • Новичок
  • *
  • Сообщений: 19
    • Просмотр профиля
Ошибка 64 битной переменной
« : 01 Ноября 2021, 15:14:44 »
При работе с 64 битной переменной некорректно устанавливаются биты (не устанавливается значение младшего байта).
Проверялось на 2.5.11 и 2.5.12

Например,

Код: (delphi)
Out1.Value:=0;
Out1.Value:=SetBit(Out1.Value,60,True);
Out1.Value:=SetBit(Out1.Value,57,True);
Out1.Value:=SetBit(Out1.Value,53,True);
Out1.Value:=SetBit(Out1.Value,52,True);
Out1.Value:=SetBit(Out1.Value,50,True);
Out1.Value:=SetBit(Out1.Value,46,True);
Out1.Value:=SetBit(Out1.Value,44,True);
Out1.Value:=SetBit(Out1.Value,42,True);
Out1.Value:=SetBit(Out1.Value,41,True);
Out1.Value:=SetBit(Out1.Value,38,True);
Out1.Value:=SetBit(Out1.Value,37,True);
Out1.Value:=SetBit(Out1.Value,36,True);
Out1.Value:=SetBit(Out1.Value,35,True);
Out1.Value:=SetBit(Out1.Value,31,True);
Out1.Value:=SetBit(Out1.Value,28,True);
Out1.Value:=SetBit(Out1.Value,27,True);
Out1.Value:=SetBit(Out1.Value,25,True);
Out1.Value:=SetBit(Out1.Value,23,True);
Out1.Value:=SetBit(Out1.Value,21,True);
Out1.Value:=SetBit(Out1.Value,20,True);
Out1.Value:=SetBit(Out1.Value,19,True);
Out1.Value:=SetBit(Out1.Value,18,True);
Out1.Value:=SetBit(Out1.Value,15,True);
Out1.Value:=SetBit(Out1.Value,14,True);
Out1.Value:=SetBit(Out1.Value,12,True);
Out1.Value:=SetBit(Out1.Value,11,True);
Out1.Value:=SetBit(Out1.Value,10,True);
Out1.Value:=SetBit(Out1.Value,9,True);
Out1.Value:=SetBit(Out1.Value,7,True);
Out1.Value:=SetBit(Out1.Value,6,True);
Out1.Value:=SetBit(Out1.Value,5,True);
Out1.Value:=SetBit(Out1.Value,4,True);
Out1.Value:=SetBit(Out1.Value,0,True);

Должно быть  $123456789FDCDEF1, реально $123456789FDCDE

Если добавить вывод сообщения, то видно, что число, действительно 1311768467463790080 вместо 1311768467463790321.

При записи в переменную целого числа вместо установки битов ситуация не меняется. Младший байт "съеден".

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2997
    • Просмотр профиля
    • Simple-Scada
Re: Ошибка 64 битной переменной
« Ответ #1 : 01 Ноября 2021, 17:31:01 »
Здравствуйте.

Спасибо за информацию об ошибке. Обнаружили лишнее приведение к Double перед записью значений в TM_Variable.Value.
Исправление включено в обновление 2.5.13.0.
« Изменён: 25 Ноября 2021, 15:05:28 от Simple-Scada »