Simple-Scada forum

Simple-Scada 2 => Ошибки => Тема начата: B.B от 01 Ноября 2021, 15:14:44

Название: Ошибка 64 битной переменной
Отправлено: B.B от 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.

При записи в переменную целого числа вместо установки битов ситуация не меняется. Младший байт "съеден".
Название: Re: Ошибка 64 битной переменной
Отправлено: Simple-Scada от 01 Ноября 2021, 17:31:01
Здравствуйте.

Спасибо за информацию об ошибке. Обнаружили лишнее приведение к Double перед записью значений в TM_Variable.Value.
Исправление включено в обновление 2.5.13.0.