Главная   Downloads   Разное  
FAQ     Поиск   Регистрация   Вход 
Текущее время: Пт мар 29, 2024 08:56

Часовой пояс: UTC + 3 часа (Russia: MSK)




Начать новую тему Ответить на тему  [ 14 сообщений ] 
Автор Сообщение
 Заголовок сообщения: Умножение шестнадцатеричного чила
СообщениеДобавлено: Ср янв 27, 2010 21:04 
Не в сети

Регистрация: Вт апр 07, 2009 17:28
Сообщения: 19
Здравствуйте. Подскажите пожалуйста как в CJ1M умножить шестнадцатеричное число на дробное десятичное число без знака?? К примеру 6СС ( это 1740 в десятичной) умножить на 1,149.


В начало
 Профиль  
 
 Заголовок сообщения: Re: Умножение шестнадцатеричного чила
СообщениеДобавлено: Ср янв 27, 2010 22:25 
Не в сети

Регистрация: Вт фев 12, 2008 11:30
Сообщения: 324
Откуда: Cherepovets
например, вот так:
LD P_On
*F(456) #6CC &1149 D1
/F(457) D1 &1000 D1

результат записывается в двойное слово D1, (D2) в формате REAL

для преобразования формата переменных из шестнадцатиричного (десятичного) в формат "с плавающей запятой" есть инструкция - FLT(452)
Обратное преобразование - FIX(450)


В начало
 Профиль  
 
 Заголовок сообщения: Re: Умножение шестнадцатеричного чила
СообщениеДобавлено: Чт янв 28, 2010 18:02 
Не в сети

Регистрация: Вт апр 07, 2009 17:28
Сообщения: 19
Спасибо за ответ. Всё получилось. Но если 1740 умножить на 1,149 результат будет число 1999,26. Можно ли как-то его округлить в большую сторону до 2000, чтобы потом перевести в шестнадцатеричную и получить 7D0???Есть ли функция округления числа с плаваяющей запятой в большую или в меньшую сторону???


В начало
 Профиль  
 
 Заголовок сообщения: Re: Умножение шестнадцатеричного чила
СообщениеДобавлено: Чт фев 11, 2010 15:45 
Не в сети

Регистрация: Ср май 27, 2009 21:17
Сообщения: 22
Откуда: Краснодар
У меня не получается в симуляторе этот пример, а если вместо /F(457) - выполняется, подскажите что не так?
Вложение:
float.jpg

И ещё вопрос: в каких случаях надо использовать числа с плавающей запятой FLOAT. а в каких расчёты делать в hex к примеру деление чисел командой /(430)


У вас нет необходимых прав для просмотра вложений в этом сообщении.


В начало
 Профиль  
 
 Заголовок сообщения: Re: Умножение шестнадцатеричного чила
СообщениеДобавлено: Чт фев 11, 2010 20:35 
Не в сети

Регистрация: Вт фев 12, 2008 11:30
Сообщения: 324
Откуда: Cherepovets
Действительно, симулятор не может обработать разные типы данных в функции
*F(456) #6CC &1149 D1
Для правильной работы симулятора необходимо чтобы все данные были в формате REAL
В реальном контроллере все будет работать правильно.

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


В начало
 Профиль  
 
 Заголовок сообщения: Re: Умножение шестнадцатеричного чила
СообщениеДобавлено: Пт фев 12, 2010 10:24 
Не в сети
Site Admin
Аватара пользователя

Регистрация: Вт сен 19, 2006 21:13
Сообщения: 3510
Откуда: Москва
Нужно указать вместо &1149 >> +1149 тогда проблем не будет.

т.е. если нужна шестнадцатеричная константа, пишем её в десятичном виде &1149 или указываем явно, #47D, т.е. это одно и то-же число.

если нужна константа с плавающей, тогда +1149 или -1149, или +11,49 если запятую нужно поставить. Можно записать и в таком виде +1,149E+03 для константы с плавающей запятой. В любом случае кол-во значащих цифр, кроме нолей справа, не должно превышать семь, а вот склько можно нолей не помню.

ну ещё раз, &1149, #1149, +1149 для контроллера это абсолютно разные числа.


В начало
 Профиль  
 
 Заголовок сообщения: Re: Умножение шестнадцатеричного чила
СообщениеДобавлено: Ср окт 26, 2022 07:47 
Не в сети

Регистрация: Ср мар 18, 2015 08:31
Сообщения: 16
Не могу понять почему не делится число в команде 430. т.е я пытаюсь 32800/18 а мне пишет 63718. Хотя должно быть 1822. Тут что то с форматом данных ? хотч сама программа пишет что число может быть до 65535.


У вас нет необходимых прав для просмотра вложений в этом сообщении.


В начало
 Профиль  
 
 Заголовок сообщения: Re: Умножение шестнадцатеричного чила
СообщениеДобавлено: Ср окт 26, 2022 08:08 
Не в сети

Регистрация: Пт май 04, 2007 08:42
Сообщения: 255
32800 превышает формат слова так как 15 разряд отводится под знак. Следовательно ПЛК воспринимает ваше число отрицательным. Поэтому и получаете ваш результат, тоже кстати отрицательный.
Для чисел больших 32767 используйте инструкции для двойных слов /L


В начало
 Профиль  
 
 Заголовок сообщения: Re: Умножение шестнадцатеричного чила
СообщениеДобавлено: Ср окт 26, 2022 09:11 
Не в сети

Регистрация: Ср мар 18, 2015 08:31
Сообщения: 16
Спасибо. Но я не много не до конца что ли понимаю почему положить(записать) в адрес D100 можно 32800 и он там отображается. А работать с ним нельзя ... поделить не дает... Причем значение в адресе лежит именно такое какое отображается потому что через другую команду деление двоичных слов все правильно делится ?


У вас нет необходимых прав для просмотра вложений в этом сообщении.


В начало
 Профиль  
 
 Заголовок сообщения: Re: Умножение шестнадцатеричного чила
СообщениеДобавлено: Ср окт 26, 2022 16:07 
Не в сети
Site Admin
Аватара пользователя

Регистрация: Вт сен 19, 2006 21:13
Сообщения: 3510
Откуда: Москва
Вложение:
1.PNG

Смените тип отображения.


У вас нет необходимых прав для просмотра вложений в этом сообщении.


В начало
 Профиль  
 
 Заголовок сообщения: Re: Умножение шестнадцатеричного чила
СообщениеДобавлено: Ср окт 26, 2022 16:45 
Не в сети

Регистрация: Пт май 04, 2007 08:42
Сообщения: 255
Во первых команда деления 430 работает с числами со знаком. то есть в 15 разряде будет знак. 15 разрядов с 0 по 14 это 32767 и знак в 15 разряде. у ваших 32800 в 15 разряде будет 1 это знак отрицательного числа и число это не -32800 !!! . Проверьте в калькуляторе Виндовс.


В начало
 Профиль  
 
 Заголовок сообщения: Re: Умножение шестнадцатеричного чила
СообщениеДобавлено: Ср окт 26, 2022 16:50 
Не в сети

Регистрация: Вт май 27, 2008 11:41
Сообщения: 559
В программере для любой из "еденичных" команд в операндах можно задать максимальное возможное число dec=65535 или hex= FFFF в "двойных" естественно больше,т.к конкретный операнд может быть использован множество раз в программе в разных командах в нем отображается мах доступное значение для области памяти указанное выше. Для сдвоенных соответственно N+1 старшее-младшее значения данных операнда.
В мануалах все это описано подробно как для диапазона чисел, типа данных и т.п , так и задание разных систем счисления &d , #h , модификаторов команд @ , ! , % и много еще чего нужного и интересного.


У вас нет необходимых прав для просмотра вложений в этом сообщении.


В начало
 Профиль  
 
 Заголовок сообщения: Re: Умножение шестнадцатеричного чила
СообщениеДобавлено: Чт окт 27, 2022 05:34 
Не в сети

Регистрация: Ср мар 18, 2015 08:31
Сообщения: 16
Спасибо всем... что то стало доходить, но еще чувствую пробелов много в голове. Еще тип данных BCD меня все время путает). Я так понимаю команда сама определяет в каком типе данных ей принимать и выдавать результат, а я выбираю в каком формате данных смотреть полученный результат, нажатием на десятичный, десятичный со знаком, шестна-ный и если не чего не нажимать это BIN формат.


У вас нет необходимых прав для просмотра вложений в этом сообщении.


В начало
 Профиль  
 
 Заголовок сообщения: Re: Умножение шестнадцатеричного чила
СообщениеДобавлено: Чт окт 27, 2022 08:05 
Не в сети

Регистрация: Пт май 04, 2007 08:42
Сообщения: 255
Для BCD и BIN используются разные команды. Их не нужно путать.


В начало
 Профиль  
 
Показать сообщения за:  Сортировка  
Начать новую тему Ответить на тему  [ 14 сообщений ] 

Часовой пояс: UTC + 3 часа (Russia: MSK)


Кто сейчас на конференции

Сейчас этот форум просматривают: в настоящее время на конференции нет зарегистрированных пользователей и гости: 12


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Переход:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская документация по phpBB 3