Страница 9 из 9 ПерваяПервая ... 789
Показано с 81 по 83 из 83

Тема: Подсветка переменных записываемых в конце цикла

  1. #81
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    2,251

    По умолчанию

    Вроде понял, что Вы хотите
    Не совсем
    В смысле всегда использовать один макрос DINT(INT32)_TO_FLOAT.
    Не только. Особенность целочисленных вычислений - абсолютная точность.
    В целых никогда не будет x = (x + y) если y <> 0

    Если надо преобразовать INT(INT16),
    int16 может только извне прилететь. А внутренним вычислениям все равно.

    чаще всё-таки INT(INT16) встречается, а DINT(INT32) намного реже.
    Да? А что тогда здесь udint а не uint? Нету противоречий?
    В 16-ти битах было тесно даже 50лет назад. А необходимость 64-х битов даже сейчас - экзотика.

    чем ваше промежуточное преобразование в DINT(INT32).
    Оно есть только в 1 случае - если извне пришло int16. И оно 1 раз. Далее нет никакой необходимости выбирать между 16 и 32 и думать - влезут ли промежуточные вычисления в 16 бит. А к моменту когда вычисления не влезают в 32 бита, float уже давно положил на точность.

    Вам надо всё равно знать, что это INT(INT16),
    И Вам все равно надо это знать. Давайте не будем общую (мою и Вашу) часть проблем называть моей проблемой?

    И, мне кажется в FBD проще значение INT(INT16) сразу преобразовать во FLOAT,
    Вам кажется. Любое целое во флоат везде одинаково просто. Касаемо ST - я приводил выше эти 5 строк.

    Если Вы говорите в ST это проще, поверю Вам на слово(я в ST не шарю), но это получается частный случай, не более!
    Я понимаю что ссылки по Вашим ссылкам доходят до "времен Очакова и покоренья Крыма" (практически буквально) - но ST какой никакой уже есть. Что касается частных случаев, то всё на ФБД и т.п графическом является частным случаем текстовых языков а не наоборот.
    Последний раз редактировалось Валенок; 31.03.2024 в 12:10.

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

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Не совсем

    Не только. Особенность целочисленных вычислений - абсолютная точность.
    В целых никогда не будет x = (x + y) если y <> 0


    int16 может только извне прилететь. А внутренним вычислениям все равно.


    Да? А что тогда здесь udint а не uint? Нету противоречий?
    В 16-ти битах было тесно даже 50лет назад. А необходимость 64-х битов даже сейчас - экзотика.


    Оно есть только в 1 случае - если извне пришло int16. И оно 1 раз. Далее нет никакой необходимости выбирать между 16 и 32 и думать - влезут ли промежуточные вычисления в 16 бит. А к моменту когда вычисления не влезают в 32 бита, float уже давно положил на точность.


    И Вам все равно надо это знать. Давайте не будем общую (мою и Вашу) часть проблем называть моей проблемой?


    Вам кажется. Любое целое во флоат везде одинаково просто. Касаемо ST - я приводил выше эти 5 строк.


    Я понимаю что ссылки по Вашим ссылкам доходят до "времен Очакова и покоренья Крыма" (практически буквально) - но ST какой никакой уже есть. Что касается частных случаев, то всё на ФБД и т.п графическом является частным случаем текстовых языков а не наоборот.
    Так не надо так глубоко копать, так не мудрено дойти и до царя Гороха!
    Короче, вот добавил в макрос преобразование INT в DINT и обратно и вход выбора типа данных, диапазона INT/DINT.
    Если на входе выбрали INT, то на дополнительном выходе(что я добавил) преобразуется в DINT и обратно, если на входе выбрать DINT, то на выходе преобразуется в INT, если диапазон не превышать! Надеюсь, понятно объяснил?

    INT_TO_FLOAT_11.PNG

    INT_TO_FLOAT_5.owle
    Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
    справиться с проблемами, либо это не твои проблемы.

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

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    В обратно особой надобности нету.


    .. то при любых* вычислениях с int32, младшее слово всегда содержит int16 (а биты 16..31 (int32-ого) всегда повторяют 15-й)
    *Даже если какие-то промежуточные выходили за рамки int16 (но были в рамках int32)

    a : int16 = 1000;
    b : int16 = -1000
    c : int16 = 10000

    x := (a * b) / c
    //(1000 * -1000) / 10000 = -100 (int16)

    В рамках int16
    1000 * -1000 => -16960
    -16960 / 10000 => -1

    В рамках int32
    1000 * -1000 => -1000000
    -1000000 / 10000 => -100 (FFFFFF9C) int32 => (FF9C) int16 => -100
    На форуме много раз говорили, что математические действия с переполнением будут верными, рискнул так сделать, тогда функция упростится, станет одной для разных действий, короче, вроде правильно считает(сильно не проверял), заодно и "причесал":

    INT-DECOD_1.png

    INT-DECOD_2.png

    INT-DECOD_1.owle
    Последний раз редактировалось Сергей0308; 01.04.2024 в 21:01.
    Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
    справиться с проблемами, либо это не твои проблемы.

Страница 9 из 9 ПерваяПервая ... 789

Похожие темы

  1. ПР200 подсветка дисплея
    от Dimzon в разделе Разработки
    Ответов: 4
    Последнее сообщение: 03.04.2021, 17:54
  2. Сбой записываемых параметров
    от Bariy в разделе Программируемые реле
    Ответов: 11
    Последнее сообщение: 12.02.2020, 00:16
  3. ПР200 подсветка экрана.
    от mandrew в разделе Среда программирования OWEN Logic
    Ответов: 7
    Последнее сообщение: 23.05.2019, 16:14
  4. Ответов: 14
    Последнее сообщение: 18.11.2017, 14:53
  5. подсветка ПЛК63
    от Egor в разделе ПЛК63/73
    Ответов: 7
    Последнее сообщение: 24.02.2011, 13:54

Ваши права

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