1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

EasyBuilder 8000 - float

Модераторы: Глоб.модераторы, специалисты по PLC

Ответить

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

EasyBuilder 8000 - float

Сообщение Booker »

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

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

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
частый гость
частый гость
Сообщения: 462
Зарегистрирован: 31 июл 2010, 09:12
Имя: Павел
Страна: РФ
Благодарил (а): 10 раз
Поблагодарили: 17 раз

Re: EasyBuilder 8000 - float

Сообщение MuadDib »

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, 08:48
Имя: Егор Дмитриевич Ченчуков
Страна: Россия

Re: EasyBuilder 8000 - float

Сообщение Chenchukov »

в макросах 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]
Ответить

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