Профиль должен быть заполнен на русском языке кириллицей. Заполнение профиля заведомо ложными или некорректными данными - причина возможного отказа в регистрации на форуме.

EasyBuilder 8000 - float

Модератор: специалисты по Weintek


Автор темы
Booker
здесь недавно
здесь недавно
Сообщения: 30
Зарегистрирован: 02 июл 2014, 14:49
Ф.И.О.: Надыров Булат Наилович
Забанен: Бессрочно

EasyBuilder 8000 - float

Сообщение Booker » 25 июл 2014, 08:56

Возникла проблема с выводом на экран чисел с точкой(на данный момент у меня в поле объекта отображаются одни нули)

часть макроса выглядит следующим образом:

float ttt
ttt = m/Stepen(23)
SetData(ttt, "Local HMI", LW, 200, 1)

где m-integer
функция Stepen(23) - возвращает 2 в 23 степени, что в конечном счете является тоже является integer,
но результат операции деления точно float

для отображения использую объект "числа", в котором указывают 32 bit float, справа и слева от точки ставлю максимальные значения равные 11.

Что я не учел? Где моя ошибка?

Аватара пользователя

MuadDib
не первый раз у нас
не первый раз у нас
Сообщения: 359
Зарегистрирован: 31 июл 2010, 08:12
Ф.И.О.: Журавлев Павел Евгеньевич
Поблагодарили: 1 раз

Re: EasyBuilder 8000 - float

Сообщение MuadDib » 25 июл 2014, 11:11

Booker писал(а):но результат операции деления точно float


Откуда такая информация? Вообще-то еще со времен Си результат операции деления целых чисел равен целой части частного. Судя по всему, это же справедливо и для макросов Weintek:

Код: Выделить всё

//example 1
float f

int m = 30
int n = 20

f = m / n  //f == 1.0


//example 2
float f

int m = 10
int n = 20

f = m / n      //f == 0.0


Если в вашем случае m всегда меньше чем 2 в 23-ей степени, то в LW200 всегда будет 0.0

Ваш код можно исправить примерно так:

Код: Выделить всё

float ttt
ttt = m
ttt = ttt/Stepen(23)
SetData(ttt, "Local HMI", LW, 200, 1)


Chenchukov
здесь недавно
здесь недавно
Сообщения: 87
Зарегистрирован: 19 май 2014, 07:48
Ф.И.О.: Егор Дмитриевич Ченчуков

Re: EasyBuilder 8000 - float

Сообщение Chenchukov » 25 июл 2014, 21:53

в макросах Weintek нет операторов преобразований типов данных, например
(float)
(integer)
(*float)
(*integer)

поэтому во избежание неоднозначностей я бы явно привел числитель и знаменатель (BUFFER) к float, а потом делил бы

Код: Выделить всё

float ttt
FLOAT BUFFER
ttt = m
BUFFER=Stepen(23)
ttt = ttt/BUFFER
SetData(ttt, "Local HMI", LW, 200, 1)
[/quote]


Вернуться в «Операторские панели»



Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [Bot] и 0 гостей