Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 29

Тема: Генерация случайного числа

  1. #1

    Post Генерация случайного числа

    Подсакажите как правильно генерить случайное число в ПЛК1хх?

  2. #2

    По умолчанию

    Вот основа алгоритма:
    uint NextUInt()
    {
    uint t= (x^(x<<11));
    x=y;
    y=z;
    z=w;
    return (w= (w^(w>>19))^(t^(t>>8)));
    }

    перед использованием необходимо инициализировать переменные t,x,y,z,w. Это можно сделать по часам, анализируя данные в файлах - к примеру Log.txt и debug.txt или просто храня посл. значения в retain.

    Алгоритм считается достаточно хорошим с периодом повторяемости 2^50 и высокой скоростью.

  3. #3

    Post Очень оригинально :-)

    uint NextUInt()
    {
    uint t= (x^(x<<11));
    x=y;
    y=z;
    z=w;
    return (w= (w^(w>>19))^(t^(t>>8)));
    } - это на сях? а можно в следующие разы листинк из кодесиса как бы раздел форума носит название "Среда программирования CoDeSys" (хотя меня лично устроит и на паскале :-)

    ^ - это пoбитoвoе исключеннoе OR?
    << - это пoбитoвый сдвиг влевo?
    >> - это пoбитoвый сдвиг вправo?

    И какие типы переменных t, w, x, y?
    P. S. а так хотелось что нибудь по проще :-( но влюбом случае разберёмся :-)

  4. #4

    По умолчанию

    На С.
    ^ - это пoбитoвoе исключеннoе OR?
    << - это пoбитoвый сдвиг влевo?
    >> - это пoбитoвый сдвиг вправo?
    Именно так. Число после побитового сдвига - на сколько бит.

    Тип всех переменных - DWORD.
    Проще - сразу падает качество генерируемых случ. чисел

    Забыл сказать - реализуйте не виде функции, а в виде функционального блока, чтобы значения переменных t,x,y,z,w сохранялись!

  5. #5

    По умолчанию

    Большое спасибо за помощь. Пошёл сдвигать биты :-) и тд. и тп.

  6. #6
    Пользователь
    Регистрация
    05.05.2007
    Адрес
    Барнаул->Москва
    Сообщений
    139

    По умолчанию

    если у кого-то возникли проблемы - держите.

    Значения инициализируются из внутренних часов => работать будет только в ПЛК и с подключенной syslibtime
    Вложения Вложения
    Последний раз редактировалось Василий Куц; 01.11.2007 в 08:04.

  7. #7

    По умолчанию

    Еще один простенький генератор случайных чисел в CoDeSys.
    Вложения Вложения
    • Тип файла: zip random.zip (4.1 Кб, Просмотров: 382)

  8. #8

    По умолчанию

    Цитата Сообщение от Игорь Петров Посмотреть сообщение
    Еще один простенький генератор случайных чисел в CoDeSys.
    Чегой-то не работает.
    Может смысл его работы подскажете?
    Там единственная строка ответственная за генерацию
    Код:
    (*собст-но генератор*)
    x :=  x*170 - 251 *(x * 170/251);
    Чисто математически при любом х ответ 0

    ______
    Хм. Сорри. Работает. (Сначала неправильно скопировал)
    Особенности целочисленного округления чтоль...
    Последний раз редактировалось Crazy; 21.04.2008 в 13:00.

  9. #9

    По умолчанию

    Игорь, спасибо большое. очень помогло.

  10. #10

    По умолчанию

    Игорь , ваш генератор работает прикольно , но каждые секунд 20 повторение идет - хорошо видно если передавать выход в панель и строить график ....
    Последний раз редактировалось вут; 14.07.2016 в 17:56.
    С уважением , Денис Кучеренко .
    Знание некоторых принципов - легко заменяет не знание некоторых фактов ...

Страница 1 из 3 123 ПоследняяПоследняя

Ваши права

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