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

Работа с числами с плавающей точкой на контроллере XINJE

PLC, прочие контроллеры, промышленные компьютеры, операторские панели

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

Ответить

Автор темы
Zykko
здесь недавно
здесь недавно
Сообщения: 2
Зарегистрирован: 30 май 2024, 21:02
Имя: Ян__

Работа с числами с плавающей точкой на контроллере XINJE

Сообщение Zykko »

Всем привет. Возникла такая проблемка при программировании контроллера фирмы XINJE в среде программирования XDPPRO версии 3.5.3. Может кто сталкивался с инструкциями emul, emov и т.д. Суть в том что невозможно записать при K какое либо дробное значение, пример "К0.1" сразу обрезает дробную часть и по итогу остаётся "K,". Хотя в мануале есть пример где 'EMUL K0.1 K3.14 D6", а у меня обрезав дробную часть остается только 'EMUL K, K3 D6' в следствии чего вылетает ошибка.... При этом в версии 3.7.14 такой проблемы нет.
Аватара пользователя

keysansa
эксперт
эксперт
Сообщения: 2469
Зарегистрирован: 20 дек 2018, 04:45
Имя: Сергей
Страна: РБ/РФ
город/регион: РФ Сергиев Посад
Благодарил (а): 2119 раз
Поблагодарили: 207 раз

Работа с числами с плавающей точкой на контроллере XINJE

Сообщение keysansa »

Я в контроллерах предпочитаю вообще не работать с числами с плавающей точкой. Я просто выбираю более мелкие единицы измерения (например, вместо работы с дробными килограммами - работаю с целыми граммами)
В трансформаторной будке живет трансформаторная собака (с) Прозрачный гонщик.

cond33
здесь недавно
здесь недавно
Сообщения: 19
Зарегистрирован: 25 мар 2022, 10:32
Имя: Жуков Данил
Страна: РФ
Поблагодарили: 12 раз

Re: Работа с числами с плавающей точкой на контроллере XINJE

Сообщение cond33 »

А почему последнюю версию (3.7.17c) XDPpro не можете использовать?
Аватара пользователя

Valerich
эксперт
эксперт
Сообщения: 1030
Зарегистрирован: 27 июн 2013, 12:20
Имя: Валерич
Страна: СССР
Благодарил (а): 44 раза
Поблагодарили: 106 раз

Работа с числами с плавающей точкой на контроллере XINJE

Сообщение Valerich »

Не знаю как у XINJE, у Митсубиси и Дельты буквой К обозначаются целые числа и для умножения целых и с плавой точкой применяются разные команды.
Аватара пользователя

Jackson
администратор
администратор
Сообщения: 18748
Зарегистрирован: 17 июн 2008, 16:01
Имя: Евгений свет Брониславович
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 973 раза
Поблагодарили: 1852 раза

Работа с числами с плавающей точкой на контроллере XINJE

Сообщение Jackson »

Внимательнее с типами данными. Дробные значения - это float, 32 бита, а целочисленное значение - это integer, 16 бит, или double (32 бита). Когда Вы в переменную одного типа пишете значение переменной другого типа, то происходит т.н. неявное преобразование типов, то есть тип значения преобразуется к нужному (к типу той переменной, в которую пишете), но как - а как решит компилятор. Как сможет так и преобразует.

Чтобы значения преобразовывались так как Вам надо, а не как получится, надо использовать явное преобразование типов: вручную написать или возможно в Вашем ПЛК есть готовые функции преобразования.

Но очевидно же, что значение типа float Вы никак не сможете записать в переменную integer, как минимум не потеряв дробную часть.

Как выше писали, лучше вообще поменьше работать с float, но если уж припёрло, то следите за типами данных.
Я стараюсь не работать с float. Вместо этого я масштабирую значения так, чтобы все они были integer. Вот с ними и работаю.
По вопросам работы Форума можно обратиться по этим контактам.

Автор темы
Zykko
здесь недавно
здесь недавно
Сообщения: 2
Зарегистрирован: 30 май 2024, 21:02
Имя: Ян__

Работа с числами с плавающей точкой на контроллере XINJE

Сообщение Zykko »

cond33 писал(а): 31 май 2024, 13:51 А почему последнюю версию (3.7.17c) XDPpro не можете использовать?
Последнюю версию использовать не могу т.к проект, который нужно править уже написан в версии 3.5.3. Через более старшую версию его редактировать и загружать нельзя.

Отправлено спустя 6 минут 46 секунд:
Jackson писал(а): 31 май 2024, 15:12 Внимательнее с типами данными. Дробные значения - это float, 32 бита, а целочисленное значение - это integer, 16 бит, или double (32 бита). Когда Вы в переменную одного типа пишете значение переменной другого типа, то происходит т.н. неявное преобразование типов, то есть тип значения преобразуется к нужному (к типу той переменной, в которую пишете), но как - а как решит компилятор. Как сможет так и преобразует.

Чтобы значения преобразовывались так как Вам надо, а не как получится, надо использовать явное преобразование типов: вручную написать или возможно в Вашем ПЛК есть готовые функции преобразования.

Но очевидно же, что значение типа float Вы никак не сможете записать в переменную integer, как минимум не потеряв дробную часть.

Как выше писали, лучше вообще поменьше работать с float, но если уж припёрло, то следите за типами данных.
Я стараюсь не работать с float. Вместо этого я масштабирую значения так, чтобы все они были integer. Вот с ними и работаю.
Это понятно, но суть в том что К - это константа значение которой может быть как integer так и float. Вся суть в том что в мануале значение при K может быть дробным https://ibb.co/zRvsRHW. И в более старшей версии всё работает отлично, а вот в версии 3.5.х дробная часть обрезается. Просто проект, который выгружается из контроллера был написан в версии 3.5.3( со слов поставщика), но при выгрузке и открытии его через данную версию дробная часть обрезается, а если открывать через версию повыше то все окей, но тогда через версию выше его невозможно загрузить обратно в контроллер т.к версия проекта и версия среды разработки различны... вот такой парадокс

Отправлено спустя 5 минут 2 секунды:
Единственный вариант, который я вижу это в инструкциях, где используются дробные числа написанные через константы использовать регистры, которые сохраняют свои значения после снятия питания. Благо есть второй такой же контроллер в ЗиП и можно экспериментировать. Просто не хотелось через костыли это всё писать, ведь как-то исходный проект они загрузили... Может кто работал с данной средой разработки )

Отправлено спустя 1 минуту 34 секунды:
keysansa писал(а): 31 май 2024, 13:21 Я в контроллерах предпочитаю вообще не работать с числами с плавающей точкой. Я просто выбираю более мелкие единицы измерения (например, вместо работы с дробными килограммами - работаю с целыми граммами)
ну у меня там скорость машины выводится) в об/м. мне обороты в миллиметр не очень интересны )

cond33
здесь недавно
здесь недавно
Сообщения: 19
Зарегистрирован: 25 мар 2022, 10:32
Имя: Жуков Данил
Страна: РФ
Поблагодарили: 12 раз

Работа с числами с плавающей точкой на контроллере XINJE

Сообщение cond33 »

Я в версии 3.7.14 тоже не смог указать константу вида К3.1415. В XDPpro ее можно было написать в инструкции, ошибок не было, но на ПЛК она обрезалась до целого числа. Использовал загрузку константы в два этапа:

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

EMOV K31415 D0
EDIV D0 K10000 D0

AlexandrGr
не первый раз у нас
не первый раз у нас
Сообщения: 305
Зарегистрирован: 26 май 2022, 12:10
Имя: Александр
Страна: Россия
город/регион: lipetsk
Благодарил (а): 5 раз
Поблагодарили: 28 раз

Работа с числами с плавающей точкой на контроллере XINJE

Сообщение AlexandrGr »

И запятая вместо точки не помогает?
Аватара пользователя

Jackson
администратор
администратор
Сообщения: 18748
Зарегистрирован: 17 июн 2008, 16:01
Имя: Евгений свет Брониславович
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 973 раза
Поблагодарили: 1852 раза

Работа с числами с плавающей точкой на контроллере XINJE

Сообщение Jackson »

Zykko писал(а): 01 июн 2024, 12:35 Единственный вариант, который я вижу это в инструкциях, где используются дробные числа написанные через константы использовать регистры, которые сохраняют свои значения после снятия питания.
Это не единственный вариант. Второй вариант здесь озвучили несколько раз: масштабируйте Все значения в проекте.
По вопросам работы Форума можно обратиться по этим контактам.
Аватара пользователя

keysansa
эксперт
эксперт
Сообщения: 2469
Зарегистрирован: 20 дек 2018, 04:45
Имя: Сергей
Страна: РБ/РФ
город/регион: РФ Сергиев Посад
Благодарил (а): 2119 раз
Поблагодарили: 207 раз

Работа с числами с плавающей точкой на контроллере XINJE

Сообщение keysansa »

Zykko писал(а): 01 июн 2024, 12:35 Единственный вариант, который я вижу это в инструкциях, где используются дробные числа написанные через константы использовать регистры, которые сохраняют свои значения после снятия питания. Благо есть второй такой же контроллер в ЗиП и можно экспериментировать. Просто не хотелось через костыли это всё писать, ведь как-то исходный проект они загрузили... Может кто работал с данной средой разработки )
Не единственный. Можно указать К31415, а в программе поделить ее на K10000.
В трансформаторной будке живет трансформаторная собака (с) Прозрачный гонщик.
Ответить

Вернуться в «Средний уровень автоматизации (управляющий)»