Доброго времени суток. Столкнулся с проблемой при работе с энкодером, а точнее с сигналом что с него приходит. Энкодер передает значения, которые сохраняются в DWord, всё работает, всё хорошо. НО дальше требуется выполнять математические операции с этим значением. С переводе с двойного слова энкодер выдает...ну пусть будет 24249497. И вот теперь начинаются проблемы, потому как непонятно как добавлять или вычитать число из этого значения. При переводе в Real он выдает слишком длинное число и модуль Add с ним работать не хочет.
Кто подскажет как правильно работать с DWord получит огромный плюсик к карме :)
- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
Не могу калькулировать значения в DWord
Модератор: Глоб.модераторы
-
- здесь недавно
- Сообщения: 6
- Зарегистрирован: 06 июн 2017, 07:01
- Имя: Владислав
- Страна: Россия
- город/регион: Пермь
- Благодарил (а): 2 раза
Не могу калькулировать значения в DWord
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- частый гость
- Сообщения: 462
- Зарегистрирован: 31 июл 2010, 09:12
- Имя: Павел
- Страна: РФ
- Благодарил (а): 10 раз
- Поблагодарили: 17 раз
Не могу калькулировать значения в DWord
Сначала разделите DWord с энкодера на какой-нибудь коэффициент и затем вычисляйте дальше. Например, энкодер определяет линейное положение какого-нибудь механизма, и перемещение на 0.01 мм дает 100500 импульсов. Делим число с энкодера на L#100500 и работаем дальше с сотыми долями миллиметра.
К слову, не стоит стремиться переводить число в real раньше времени. В 32-битном float количество значащих цифр приблизительно 7. Легко можно потерять точность и/или нарваться на погрешность при вычислениях. Лучше всего постоянно работать с целыми. Определитесь, какой точности целого вам достаточно (одна сотая миллиметра, одна десятая градуса - по обстоятельствам) и работайте во всех вычислениях с такой единицей. Если нужно вывести число оператору, можно сделать нужное преобразование до "нормальных" единиц прямо в скаде. Например, считаем в сотых долях миллиметра, а в скаде берем целое с контроллера и делим его на 100.
К слову, не стоит стремиться переводить число в real раньше времени. В 32-битном float количество значащих цифр приблизительно 7. Легко можно потерять точность и/или нарваться на погрешность при вычислениях. Лучше всего постоянно работать с целыми. Определитесь, какой точности целого вам достаточно (одна сотая миллиметра, одна десятая градуса - по обстоятельствам) и работайте во всех вычислениях с такой единицей. Если нужно вывести число оператору, можно сделать нужное преобразование до "нормальных" единиц прямо в скаде. Например, считаем в сотых долях миллиметра, а в скаде берем целое с контроллера и делим его на 100.
-
- эксперт
- Сообщения: 3643
- Зарегистрирован: 10 ноя 2009, 04:58
- Имя: Толмачев Михаил Алексеевич
- город/регион: г. Чехов, МО
- Благодарил (а): 8 раз
- Поблагодарили: 286 раз
Не могу калькулировать значения в DWord
DWord не предназначен для работы с данными как с числами, этот тип данных - 32 отдельных статусных бита в одном флаконе. Как их можно перемножать, делить?..
Замените на DInt - вот это уже целочисленный тип, для которого определены соответствующие операции.
Замените на DInt - вот это уже целочисленный тип, для которого определены соответствующие операции.
-
- здесь недавно
- Сообщения: 14
- Зарегистрирован: 13 мар 2017, 08:23
- Имя: Сергей
Не могу калькулировать значения в DWord
Используйте функции Motion Control, и тогда не придётся забивать голову такими мелочами :)