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

Не могу калькулировать значения в DWord

Модератор: Глоб.модераторы

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

Автор темы
WhiteAsterion
здесь недавно
здесь недавно
Сообщения: 6
Зарегистрирован: 06 июн 2017, 07:01
Имя: Владислав
Страна: Россия
город/регион: Пермь
Благодарил (а): 2 раза

Не могу калькулировать значения в DWord

Сообщение WhiteAsterion »

Доброго времени суток. Столкнулся с проблемой при работе с энкодером, а точнее с сигналом что с него приходит. Энкодер передает значения, которые сохраняются в DWord, всё работает, всё хорошо. НО дальше требуется выполнять математические операции с этим значением. С переводе с двойного слова энкодер выдает...ну пусть будет 24249497. И вот теперь начинаются проблемы, потому как непонятно как добавлять или вычитать число из этого значения. При переводе в Real он выдает слишком длинное число и модуль Add с ним работать не хочет.
Кто подскажет как правильно работать с DWord получит огромный плюсик к карме :)
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя

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

Не могу калькулировать значения в DWord

Сообщение MuadDib »

Сначала разделите DWord с энкодера на какой-нибудь коэффициент и затем вычисляйте дальше. Например, энкодер определяет линейное положение какого-нибудь механизма, и перемещение на 0.01 мм дает 100500 импульсов. Делим число с энкодера на L#100500 и работаем дальше с сотыми долями миллиметра.

К слову, не стоит стремиться переводить число в real раньше времени. В 32-битном float количество значащих цифр приблизительно 7. Легко можно потерять точность и/или нарваться на погрешность при вычислениях. Лучше всего постоянно работать с целыми. Определитесь, какой точности целого вам достаточно (одна сотая миллиметра, одна десятая градуса - по обстоятельствам) и работайте во всех вычислениях с такой единицей. Если нужно вывести число оператору, можно сделать нужное преобразование до "нормальных" единиц прямо в скаде. Например, считаем в сотых долях миллиметра, а в скаде берем целое с контроллера и делим его на 100.

Михайло
эксперт
эксперт
Сообщения: 3643
Зарегистрирован: 10 ноя 2009, 04:58
Имя: Толмачев Михаил Алексеевич
город/регион: г. Чехов, МО
Благодарил (а): 8 раз
Поблагодарили: 286 раз

Не могу калькулировать значения в DWord

Сообщение Михайло »

DWord не предназначен для работы с данными как с числами, этот тип данных - 32 отдельных статусных бита в одном флаконе. Как их можно перемножать, делить?..
Замените на DInt - вот это уже целочисленный тип, для которого определены соответствующие операции.
Аватара пользователя

stapler77
здесь недавно
здесь недавно
Сообщения: 14
Зарегистрирован: 13 мар 2017, 08:23
Имя: Сергей

Не могу калькулировать значения в DWord

Сообщение stapler77 »

Используйте функции Motion Control, и тогда не придётся забивать голову такими мелочами :)
Ответить

Вернуться в «ПЛК SIMATIC (S7-200, S7-1200, S7-300, S7-400, S7-1500, ET200)»