- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
Работа с числами с плавающей точкой на контроллере XINJE
Модераторы: Глоб.модераторы, специалисты по PLC
-
- здесь недавно
- Сообщения: 2
- Зарегистрирован: 30 май 2024, 21:02
- Имя: Ян__
Работа с числами с плавающей точкой на контроллере XINJE
Всем привет. Возникла такая проблемка при программировании контроллера фирмы XINJE в среде программирования XDPPRO версии 3.5.3. Может кто сталкивался с инструкциями emul, emov и т.д. Суть в том что невозможно записать при K какое либо дробное значение, пример "К0.1" сразу обрезает дробную часть и по итогу остаётся "K,". Хотя в мануале есть пример где 'EMUL K0.1 K3.14 D6", а у меня обрезав дробную часть остается только 'EMUL K, K3 D6' в следствии чего вылетает ошибка.... При этом в версии 3.7.14 такой проблемы нет.
-
- эксперт
- Сообщения: 2469
- Зарегистрирован: 20 дек 2018, 04:45
- Имя: Сергей
- Страна: РБ/РФ
- город/регион: РФ Сергиев Посад
- Благодарил (а): 2119 раз
- Поблагодарили: 207 раз
Работа с числами с плавающей точкой на контроллере XINJE
Я в контроллерах предпочитаю вообще не работать с числами с плавающей точкой. Я просто выбираю более мелкие единицы измерения (например, вместо работы с дробными килограммами - работаю с целыми граммами)
В трансформаторной будке живет трансформаторная собака (с) Прозрачный гонщик.
-
- здесь недавно
- Сообщения: 19
- Зарегистрирован: 25 мар 2022, 10:32
- Имя: Жуков Данил
- Страна: РФ
- Поблагодарили: 12 раз
Re: Работа с числами с плавающей точкой на контроллере XINJE
А почему последнюю версию (3.7.17c) XDPpro не можете использовать?
-
- эксперт
- Сообщения: 1030
- Зарегистрирован: 27 июн 2013, 12:20
- Имя: Валерич
- Страна: СССР
- Благодарил (а): 44 раза
- Поблагодарили: 106 раз
Работа с числами с плавающей точкой на контроллере XINJE
Не знаю как у XINJE, у Митсубиси и Дельты буквой К обозначаются целые числа и для умножения целых и с плавой точкой применяются разные команды.
-
- администратор
- Сообщения: 18748
- Зарегистрирован: 17 июн 2008, 16:01
- Имя: Евгений свет Брониславович
- Страна: Россия
- город/регион: Санкт-Петербург
- Благодарил (а): 973 раза
- Поблагодарили: 1852 раза
Работа с числами с плавающей точкой на контроллере XINJE
Внимательнее с типами данными. Дробные значения - это float, 32 бита, а целочисленное значение - это integer, 16 бит, или double (32 бита). Когда Вы в переменную одного типа пишете значение переменной другого типа, то происходит т.н. неявное преобразование типов, то есть тип значения преобразуется к нужному (к типу той переменной, в которую пишете), но как - а как решит компилятор. Как сможет так и преобразует.
Чтобы значения преобразовывались так как Вам надо, а не как получится, надо использовать явное преобразование типов: вручную написать или возможно в Вашем ПЛК есть готовые функции преобразования.
Но очевидно же, что значение типа float Вы никак не сможете записать в переменную integer, как минимум не потеряв дробную часть.
Как выше писали, лучше вообще поменьше работать с float, но если уж припёрло, то следите за типами данных.
Я стараюсь не работать с float. Вместо этого я масштабирую значения так, чтобы все они были integer. Вот с ними и работаю.
Чтобы значения преобразовывались так как Вам надо, а не как получится, надо использовать явное преобразование типов: вручную написать или возможно в Вашем ПЛК есть готовые функции преобразования.
Но очевидно же, что значение типа float Вы никак не сможете записать в переменную integer, как минимум не потеряв дробную часть.
Как выше писали, лучше вообще поменьше работать с float, но если уж припёрло, то следите за типами данных.
Я стараюсь не работать с float. Вместо этого я масштабирую значения так, чтобы все они были integer. Вот с ними и работаю.
По вопросам работы Форума можно обратиться по этим контактам.
-
- здесь недавно
- Сообщения: 2
- Зарегистрирован: 30 май 2024, 21:02
- Имя: Ян__
Работа с числами с плавающей точкой на контроллере XINJE
Последнюю версию использовать не могу т.к проект, который нужно править уже написан в версии 3.5.3. Через более старшую версию его редактировать и загружать нельзя.
Отправлено спустя 6 минут 46 секунд:
Это понятно, но суть в том что К - это константа значение которой может быть как integer так и float. Вся суть в том что в мануале значение при K может быть дробным https://ibb.co/zRvsRHW. И в более старшей версии всё работает отлично, а вот в версии 3.5.х дробная часть обрезается. Просто проект, который выгружается из контроллера был написан в версии 3.5.3( со слов поставщика), но при выгрузке и открытии его через данную версию дробная часть обрезается, а если открывать через версию повыше то все окей, но тогда через версию выше его невозможно загрузить обратно в контроллер т.к версия проекта и версия среды разработки различны... вот такой парадоксJackson писал(а): ↑31 май 2024, 15:12 Внимательнее с типами данными. Дробные значения - это float, 32 бита, а целочисленное значение - это integer, 16 бит, или double (32 бита). Когда Вы в переменную одного типа пишете значение переменной другого типа, то происходит т.н. неявное преобразование типов, то есть тип значения преобразуется к нужному (к типу той переменной, в которую пишете), но как - а как решит компилятор. Как сможет так и преобразует.
Чтобы значения преобразовывались так как Вам надо, а не как получится, надо использовать явное преобразование типов: вручную написать или возможно в Вашем ПЛК есть готовые функции преобразования.
Но очевидно же, что значение типа float Вы никак не сможете записать в переменную integer, как минимум не потеряв дробную часть.
Как выше писали, лучше вообще поменьше работать с float, но если уж припёрло, то следите за типами данных.
Я стараюсь не работать с float. Вместо этого я масштабирую значения так, чтобы все они были integer. Вот с ними и работаю.
Отправлено спустя 5 минут 2 секунды:
Единственный вариант, который я вижу это в инструкциях, где используются дробные числа написанные через константы использовать регистры, которые сохраняют свои значения после снятия питания. Благо есть второй такой же контроллер в ЗиП и можно экспериментировать. Просто не хотелось через костыли это всё писать, ведь как-то исходный проект они загрузили... Может кто работал с данной средой разработки )
Отправлено спустя 1 минуту 34 секунды:
ну у меня там скорость машины выводится) в об/м. мне обороты в миллиметр не очень интересны )
-
- здесь недавно
- Сообщения: 19
- Зарегистрирован: 25 мар 2022, 10:32
- Имя: Жуков Данил
- Страна: РФ
- Поблагодарили: 12 раз
Работа с числами с плавающей точкой на контроллере XINJE
Я в версии 3.7.14 тоже не смог указать константу вида К3.1415. В XDPpro ее можно было написать в инструкции, ошибок не было, но на ПЛК она обрезалась до целого числа. Использовал загрузку константы в два этапа:
Код: Выделить всё
EMOV K31415 D0
EDIV D0 K10000 D0
-
- не первый раз у нас
- Сообщения: 305
- Зарегистрирован: 26 май 2022, 12:10
- Имя: Александр
- Страна: Россия
- город/регион: lipetsk
- Благодарил (а): 5 раз
- Поблагодарили: 28 раз
-
- администратор
- Сообщения: 18748
- Зарегистрирован: 17 июн 2008, 16:01
- Имя: Евгений свет Брониславович
- Страна: Россия
- город/регион: Санкт-Петербург
- Благодарил (а): 973 раза
- Поблагодарили: 1852 раза
Работа с числами с плавающей точкой на контроллере XINJE
Это не единственный вариант. Второй вариант здесь озвучили несколько раз: масштабируйте Все значения в проекте.
По вопросам работы Форума можно обратиться по этим контактам.
-
- эксперт
- Сообщения: 2469
- Зарегистрирован: 20 дек 2018, 04:45
- Имя: Сергей
- Страна: РБ/РФ
- город/регион: РФ Сергиев Посад
- Благодарил (а): 2119 раз
- Поблагодарили: 207 раз
Работа с числами с плавающей точкой на контроллере XINJE
Не единственный. Можно указать К31415, а в программе поделить ее на K10000.Zykko писал(а): ↑01 июн 2024, 12:35 Единственный вариант, который я вижу это в инструкциях, где используются дробные числа написанные через константы использовать регистры, которые сохраняют свои значения после снятия питания. Благо есть второй такой же контроллер в ЗиП и можно экспериментировать. Просто не хотелось через костыли это всё писать, ведь как-то исходный проект они загрузили... Может кто работал с данной средой разработки )
В трансформаторной будке живет трансформаторная собака (с) Прозрачный гонщик.