Показано с 1 по 10 из 835

Тема: Макросы в онлайн базе OWEN Logic

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Пользователь Аватар для Сергей0308
    Регистрация
    25.06.2011
    Адрес
    Галактика Андромеды (M31)
    Сообщений
    8,373

    По умолчанию

    Цитата Сообщение от petera Посмотреть сообщение
    А в чем проблема?
    Если результат арифметической операции в ПР получается отрицательным, то он будет представлен в ПР в дополнительном коде безо всяких макросов.

    И если послать из ПР это результат по сети, то получатель увидит это число как отрицательное.

    Захват-1.png

    Захват-2.png

    4294967295 = FFF FFF (Hex)
    После "обрезания" в 16 битовой сетевой переменной РЕЗУЛЬТАТ останется FFFF(65535), это -1 в дополнительном коде для int16
    Обрезание до 16 бит в сетевой переменной, не превращает DINT в INT, знак минус находится в 31 и 15 битах, соответственно, если считать с "0" и он обрежется!
    Кроме того в ПР200 бывает это выводят на экран, да и в симуляторе проверять - мозги забивать лабудой, на мой взгляд, лучше флоат в инт преобразовать, что я и сделал несколько лет назад!
    http://www.owen.ru/forum/showthread.php?t=13106&page=3
    Конечно Ваше право убеждать мозг, что это не "4 миллиарда", а "минус"!
    Последний раз редактировалось Сергей0308; 02.02.2018 в 22:29.
    Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
    справиться с проблемами, либо это не твои проблемы.

  2. #2
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,867

    По умолчанию

    Цитата Сообщение от Сергей0308 Посмотреть сообщение
    Обрезание до 16 бит в сетевой переменной, не превращает DINT в INT, знак минус находится в 31 и 15 битах, соответственно, если считать с "0" и он обрежется!
    Для 32 битных отрицательных чисел в дополнительном коде от -32768 до -1 ВСЕ биты от 31 до 15 всегда в "1".

    Значит, если значения DINT находятся в области допустимых чисел для INT16 ( от -32768 до 32767), то "обрезание" всегда будет корректным. Включая и 0 естественно.


    "-32768" в ОЛ это 4294934528 == FFFF 8000 (знак минус в 31 бите), после обрезания в INT16 будет 8000 (знак минус в 15 бите)
    0 == 0
    32767 == 0000 7FFF, после обрезания таким и останется 7FFF
    Последний раз редактировалось petera; 02.02.2018 в 15:59.

Похожие темы

  1. Универсальные макросы для OWEN Logic
    от rovki в разделе Среда программирования OWEN Logic
    Ответов: 827
    Последнее сообщение: 22.12.2023, 13:20
  2. OWEN Logic v1.7
    от Евгений Сергеевич в разделе Среда программирования OWEN Logic
    Ответов: 404
    Последнее сообщение: 25.08.2020, 15:17
  3. OWEN Logic v1.7
    от Евгений Сергеевич в разделе Программируемые реле
    Ответов: 401
    Последнее сообщение: 28.07.2016, 19:46
  4. ПО OWEN Logic !!!
    от Ельцов Андрей в разделе Программируемые реле
    Ответов: 3
    Последнее сообщение: 11.10.2011, 16:33
  5. OWEN Logic 1.2.0.14b
    от Ельцов Андрей в разделе Программируемые реле
    Ответов: 40
    Последнее сообщение: 21.02.2011, 14:16

Ваши права

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