Страница 528 из 1043 ПерваяПервая ... 284284785185265275285295305385786281028 ... ПоследняяПоследняя
Показано с 5,271 по 5,280 из 10426

Тема: ВОПРОС-ОТВЕТ (отвечаем на простые вопросы от новичков)

  1. #5271
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,243

    По умолчанию

    Цитата Сообщение от Grampus Посмотреть сообщение
    Все разобрался, просто тип TPinst устанавливается не как обычная переменная, а с библиотеки.
    вот это в руководстве не написано!
    а это тогда что
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  2. #5272

    По умолчанию

    Не могу понять, что происходит с расчётами. Прикладываю скрин эмуляции, где разные значения обратных вычислений.
    Вложение 26233

  3. #5273

    По умолчанию

    Не понимаю, то лыжи не едут, то ли я идиот. Перепробовал уже кучу вариантов, с переприсвоениями промежуточными и т.п. в итоге результат неправильный. Вплоть до формулы c:=a-b, где a и b REAL переменные. В режиме эмуляции присваиваю им соответственно 90916050086-90916000000, получаю с=50112 вместо 50086. Это как так может быть?

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

    По умолчанию

    Цитата Сообщение от energvk Посмотреть сообщение
    Не понимаю, то лыжи не едут, то ли я идиот. Перепробовал уже кучу вариантов, с переприсвоениями промежуточными и т.п. в итоге результат неправильный. Вплоть до формулы c:=a-b, где a и b REAL переменные. В режиме эмуляции присваиваю им соответственно 90916050086-90916000000, получаю с=50112 вместо 50086. Это как так может быть?
    Ну Вы даете!
    Если диапазон представления чисел для REAL от -3.4028E+38 до 3.4028E+38, то это вовсе не означает, что можно одиннадцати разрядные числа использовать!
    Ведь для мантиссы отводится всего 23 бита из 32. В стандарте IEEE 754 несколько значений данного типа зарезервировано для обеспечения возможности представления специальных значений. К ним относятся значения NaN (Not a Number, «не число») и +/-INF (Infinity, бесконечность), получающихся в результате операций деления на ноль или при превышении числового диапазона. Также сюда попадают денормализованные числа, у которых мантисса меньше единицы.

    В любом случае числа REAL то приблизительные и точность ограничена разрядной сеткой процессора.
    Для обычного REAL число десятичных знаков д.б. не более семи, а Вы пытаетесь скормить кодесису одиннадцать. Не знаю, как компилятор округляет, например, 90916050086 может так 9.0916052992E10?
    https://ru.wikipedia.org/wiki/%D0%A7...82%D0%BE%D0%B9

    Вложение 26236
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  5. #5275

    По умолчанию

    Цитата Сообщение от petera Посмотреть сообщение
    Например так
    Вложение 26185
    Здесь вызов процессов зациклен, т.е. после выполнения Процесс 3 через 10 секунд цепочка процессов будет повторятся
    Или так
    Вложение 26186
    Здесь процессы будут выполнены по очереди один раз и в дальнейшем не выполняются. Для повторного выполнения цепочки нужно принудительно задать state:=0 в любом месте программы.

    Здравствуйте! объясните пожалуйста строчку 1: state := BOOL_TO_INT((TIME()-old>=T#10s)+1
    что как работает!?

  6. #5276
    Пользователь
    Регистрация
    19.11.2011
    Адрес
    г. Белгород
    Сообщений
    357

    По умолчанию

    TIME()-old>=T#10s - условие: если прошло не меньше 10 секунд, то выражение будет TRUE иначе будет FALSE.
    BOOL_TO_INT преобразует тип BOOL в тип INT. То есть если значение выло true, то в результате будет 1, а если false, то будет 0.

    Аналогично можно было записать так:
    ...
    1: IF TIME()-old>=T#10s THEN
    state:=2;
    END_IF
    ...

  7. #5277

    По умолчанию

    Petera, спасибо за ликбез. В общем суть понял. Что осталось непонятным, это то,что на скриншоте вычисления с 1 по 9-ю строку и с 12 по 14-ю выполняются правильно. Вообще, я пытался обработать ваше гениальное решение по преобразованию времени в одну переменную для ПР200. И если значение даты удалось обработать, то на времени получается то что на скрине ((

  8. #5278
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,243

    По умолчанию

    Цитата Сообщение от energvk Посмотреть сообщение
    Petera, спасибо за ликбез. В общем суть понял. Что осталось непонятным, это то,что на скриншоте вычисления с 1 по 9-ю строку и с 12 по 14-ю выполняются правильно. Вообще, я пытался обработать ваше гениальное решение по преобразованию времени в одну переменную для ПР200. И если значение даты удалось обработать, то на времени получается то что на скрине ((
    непонятно зачем только Вы в реал всё переводите, DWORD в плк как раз и будет соответствовать без знаковому целому в ПР
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  9. #5279

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    непонятно зачем только Вы в реал всё переводите, DWORD в плк как раз и будет соответствовать без знаковому целому в ПР
    Так не умещается в dword это число

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

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    непонятно зачем только Вы в реал всё переводите, DWORD в плк как раз и будет соответствовать без знаковому целому в ПР
    +100500%
    Не надо заниматься ерундой, в кодесис переменные DATA_AND_TIME или DT уже упакованы в 32-х битную величину, которая не что иное как время UNIX или другое название - POSIX. Это число секунд с 0 часов 1 января 1970г. Дискретность в 1 секунду считается достаточной для большинства практических задач.
    Осталось только передать в ПР значение DWORD в двух соседних регистрах и "склеит" их в ПР в одну переменную.
    Для извлечения отдельных значений года, дня, месяца и т.д. нужно будет делать макросы. Вроде я где-то показывал, как в кодесисе их извлекать.
    Для расширения кругозора почитайте статью И.Петрова Программируем временные сложности
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

Страница 528 из 1043 ПерваяПервая ... 284284785185265275285295305385786281028 ... ПоследняяПоследняя

Метки этой темы

Ваши права

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