Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 20

Тема: Случайное число в Codesys

  1. #1

    По умолчанию Случайное число в Codesys

    Приветствую всех! Подскажите как получить случайное число в codesys 3.5.

  2. #2
    Пользователь
    Регистрация
    12.07.2007
    Адрес
    Воронеж
    Сообщений
    883

    По умолчанию

    Oscat
    rdm,rdm2

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

    По умолчанию

    Цитата Сообщение от radar Посмотреть сообщение
    Приветствую всех! Подскажите как получить случайное число в codesys 3.5.
    Код:
    FUNCTION_BLOCK rnd
    VAR_INPUT
    	initvalue: DWORD; (* Initialization value                  *)
    END_VAR
    VAR_OUTPUT
    	SRND: DWORD;      (* procedure works like rnd, but it is   *)
    END_VAR               (* improved [no util.lib, better input/  *)
    VAR                   (* output definition ...                 *)
    	a1: BOOL;
    	a2: BOOL;
    	a5: BOOL;
    	a18: BOOL;
    	a0: BOOL;
    	Q: DWORD;
    END_VAR
    IF Q=0 THEN
        IF initvalue<>0 THEN
          Q:=initvalue;
        ELSE
          Q:=123456;
        END_IF;
    END_IF;
    a1:=Q.2;
    a2:=Q.3;
    a5:=Q.6;
    a18:=Q.18;
    a0:=(((a1 XOR a2) XOR a5) XOR a18);
    Q:=2*Q;
    Q.0:=a0;
    SRND:=Q;
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  4. #4
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    10,646

    По умолчанию

    ИМХО, если получение случайного числа не связано с чтением текущего времени оно априори случайным не бывает.
    Компьютеры они такие...... такие предсказуемые

  5. #5

    По умолчанию

    вот алгоритм из книги Петрова:

    FUNCTION_BLOCK random(*.........случайное число 1..250..................*)
    VAR_INPUT
    en:BOOL; (*.........разрешение рандома...............*)
    in:USINT; (*.........начальное значение................*)
    END_VAR
    (*................................................ ..................*)
    VAR_OUTPUT
    out:USINT:=1;
    END_VAR
    (*................................................ ..................*)
    VAR
    rt:R_TRIG;
    END_VAR
    ================================================== ==================================
    rt(clk:=en); (*--------сам код------------------------*)
    IF rt.Q THEN out:=in; END_IF
    (*--------------------------------*)
    out:=out*170-251*(out*170/251);

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

    По умолчанию Случайное число в Codesys

    2 Levantine: вооот уже ближе..
    только теперь надо автоматически задавать не 0 а случайное число из рандома =
    хе, выбранное по тому же принципу =

  7. #7
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    не 0 а случайное число из рандома
    TIME() никто не отменял.

  8. #8
    Пользователь
    Регистрация
    10.11.2014
    Адрес
    Санкт-Петербург
    Сообщений
    980

    По умолчанию

    Немного подправил алгоритм Peterа.
    Теперь на выходе Out случайное число от 0 до 1.

    FUNCTION_BLOCK random
    (* В выходе Out генерируется случайное число от 0 до 1 *)

    VAR_INPUT
    InitValue : UDINT;
    END_VAR

    VAR_OUTPUT
    Out : REAL;
    END_VAR

    VAR CONSTANT
    MaxUDINT : UDINT := 16#FFFFFFFF;
    END_VAR

    VAR
    a1 : BOOL;
    a2 : BOOL;
    a5 : BOOL;
    a18 : BOOL;
    a0 : BOOL;
    Q : UDINT;
    END_VAR

    IF Q=0 THEN
    IF InitValue <> 0 THEN
    Q:=InitValue;
    ELSE
    Q:=123456;
    END_IF;
    END_IF;
    a1:=Q.2;
    a2:=Q.3;
    a5:=Q.6;
    a18:=Q.18;
    a0:=(((a1 XOR a2) XOR a5) XOR a18);
    Q:=2*Q;
    Q.0:=a0;
    Out:=UDINT_TO_REAL(Q)/UDINT_TO_REAL(MaxUDINT);

  9. #9
    Пользователь
    Регистрация
    24.07.2012
    Адрес
    Россия
    Сообщений
    1,492

    Question

    TIME() как писали выше и взять миллисекунды, т.к. цикл плк прыгает и зависит от загруженности, будет это число рандомным.
    Пример выше больше похож на шифрование.... Надо на вход подать число? Если я 2 раза подам одно и тоже число, будет результат одинаков?

  10. #10
    Пользователь
    Регистрация
    10.11.2014
    Адрес
    Санкт-Петербург
    Сообщений
    980

    По умолчанию

    Согласен с замечанием.

    Привожу код генерации случайного числа от 0 до 1 с использованием функции Time.

    FUNCTION random : REAL

    random := DWORD_TO_REAL(TIME_TO_DWORD( TIME()) MOD 1000)/1000;
    Последний раз редактировалось Спорягин Кирилл; 04.08.2015 в 18:15.

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

Похожие темы

  1. PLC63-Максимальное число POU
    от Smoll в разделе ПЛК63/73
    Ответов: 16
    Последнее сообщение: 15.04.2021, 14:08
  2. Максимальное число каналов ModbusSlave.
    от ZPavel в разделе СПК1хх
    Ответов: 1
    Последнее сообщение: 06.11.2014, 14:35
  3. перевод строки в число
    от Роланд в разделе Помощь Разработчикам
    Ответов: 4
    Последнее сообщение: 11.04.2013, 00:45
  4. Достигнуто максимальное число переменных
    от CEkip в разделе Программируемые реле
    Ответов: 23
    Последнее сообщение: 31.05.2011, 13:07
  5. отрицатальное число
    от Febricio в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 15.09.2010, 10:47

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

Ваши права

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