Страница 3 из 3 ПерваяПервая 123
Показано с 21 по 26 из 26

Тема: функция ABS. что не так я делаю??

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

    По умолчанию

    Цитата Сообщение от IVM Посмотреть сообщение
    А как из под функции ABS может вылезти отрицательное число ?
    Почему отрицательное?
    ABS(65526) = 65526
    Нет здесь отрицательного числа
    А теперь приведите это число к формату переменной INT
    Test:= WORD_TO_INT(65526);
    Что получите?
    Правильно -10

    ЗЫ.
    Учитывайте разрядную сетку и диапазон представления чисел в ЭВМ.

    Это из серии
    56000(WORD) + 30000(WORD) = 29464(WORD)
    караул! почему 29464? Ведь должно быть 86000 !
    Последний раз редактировалось petera; 05.12.2018 в 12:27.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  2. #22

    По умолчанию

    Значит WORD в общем случае не может быть параметром функции ABS. Таблица не верна.
    Изображения Изображения

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

    По умолчанию

    Цитата Сообщение от IVM Посмотреть сообщение
    Значит WORD в общем случае не может быть параметром функции ABS. Таблица не верна.
    Почему не может?
    ABS(65526) = 65526 - что здесь не так? Аргумент функции ABS() не обязательно должен быть отрицательным.
    Просто WORD не может быть отрицательным.

    Если уж так хочется использовать в выражениях переменные различных форматов, то в кодесис есть операторы преобразования типов.
    ABS(WORD_TO_INT(65536)) = ABS(-10) = 10.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  4. #24

    По умолчанию

    Цитата Сообщение от petera Посмотреть сообщение
    Почему не может?
    ABS(65526) = 65526 - что здесь не так? Аргумент функции ABS() не обязательно должен быть отрицательным.
    Просто WORD не может быть отрицательным.

    Если уж так хочется использовать в выражениях переменные различных форматов, то в кодесис есть операторы преобразования типов.
    ABS(WORD_TO_INT(65536)) = ABS(-10) = 10.
    Без костылей (WORD_TO_INT) использование в выражениях переменных различных форматов может дать неверный результат.
    Последний раз редактировалось IVM; 05.12.2018 в 13:18.

  5. #25

    По умолчанию

    Цитата Сообщение от petera Посмотреть сообщение
    Почему не может?
    ABS(65526) = 65526 - что здесь не так? Аргумент функции ABS() не обязательно должен быть отрицательным.
    Просто WORD не может быть отрицательным.

    Если уж так хочется использовать в выражениях переменные различных форматов, то в кодесис есть операторы преобразования типов.
    ABS(WORD_TO_INT(65536)) = ABS(-10) = 10.
    По хорошему разработчики прошивки ПЛК160 перед компиляцией исходного текста программы должны были сделать преобразование ABS(A-B) в ABS(WORD_TO_INT(A-B)). В эмуляторе это преобразование сделано поэтому результат там получается правильный при любом раскладе.
    Последний раз редактировалось IVM; 05.12.2018 в 13:30.

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

    По умолчанию

    Проблема всего лишь в исходном коде программы, а именно в разделе объявления переменных
    Захват-1.png

    Достаточно было СРАЗУ объявить T_v и T_z как INT, тем более,что в программе предполагалось вычитать одно из другого, из чего следует, что будут использоваться целые положительные, отрицательные и ноль, а не обезличенный WORD, который даже числом и не считается вовсе.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

Страница 3 из 3 ПерваяПервая 123

Похожие темы

  1. Посоветуйте, бывалые. Делаю на CFC
    от Dimooon в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 19.04.2018, 05:20
  2. Что-то делаю не так
    от masterkey в разделе СПК1хх
    Ответов: 8
    Последнее сообщение: 28.09.2016, 10:20
  3. Ответов: 5
    Последнее сообщение: 19.09.2014, 10:10
  4. СИ-30. что я делаю не так
    от podoly в разделе Эксплуатация
    Ответов: 5
    Последнее сообщение: 06.12.2013, 20:13
  5. ТРМ 151-04 - прибор неисправный или чтото не так делаю ?
    от незарегистрированный в разделе Эксплуатация
    Ответов: 5
    Последнее сообщение: 22.04.2008, 23:06

Ваши права

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