PLC, HMI, SCADA, INVERTERS, TUTORIALS, INDUSTRIAL AUTOMATION

16:40
SIEMENS STEP7 SCL пример 2 Генерация случайных чисел (a and b)

//- DB1 контейнер случайных значений a и b -------------------------------------

DATA_BLOCK DB1

  STRUCT

    buffer_a : ARRAY[1..10] OF INT := 10(0);       // несортированное значение a

    buffer_b : ARRAY[1..10] OF INT := 10(0);       // несортированное значение b

  END_STRUCT

BEGIN

END_DATA_BLOCK

//- FB2 сохранение значений в буфере(DB1 ) -------------------------------------

FUNCTION_BLOCK FB2                // Случ. значение a помещается в DB1.buffer_a 

                                  // Случ. значение a помещается в DB1.buffer_b

CONST

    BUFLENGTH  := 10;             // Длина буфера

END_CONST

VAR_INPUT

    NewValue  : INT;              // случайное число

END_VAR

VAR_IN_OUT

    BUF_DB    : ANY;              // номер DB и область для значений

END_VAR

VAR

    index  : INT := 1;            // счетчик № сохраненных значений

    field  : ARRAY[1..10] OF INT;

    ret    : INT;                 //  RET_VAL для SFC20

END_VAR

BEGIN

    IF index > BUFLENGTH THEN        // очистка буфера на старте

        index := 1;

    END_IF;

    field[index]:= NewValue;         // новое значение

    IF index = BUFLENGTH THEN        // буфер полон

        ret   := SFC20(SRCBLK:=field,DSTBLK:=BUF_DB);//сохранение значений в  DB

    END_IF;

    index := index +1;

 END_FUNCTION_BLOCK

//- FC60 генератор случайных чисел ---------------------------------------------

FUNCTION FC60 : INT;

CONST

    m:=101;                  // случ. число от 0 до 100

END_CONST

VAR_INPUT

    RAND:INT;                // инициализация

END_VAR

BEGIN                        // вычисление случ. числа

    FC60 := (ABS(RAND*DINT_TO_INT(TIME_TO_DINT(SFC64())))) MOD m;

END_FUNCTION

//- OB 35 ---------------------------------------------------------------------ORGANIZATION_BLOCK OB35                               

VAR_TEMP

    info  : ARRAY[0..19] OF BYTE;

    random: INT;

END_VAR

BEGIN

    random := FC60(RAND:=711);                        //создание случ. числа a

    FB2.DB11(NewValue:=random,BUF_DB:=DB1.buffer_a);  //сохранение случ. числа

    random := FC60(RAND:=13);                         // создание случ. числа b

    FB2.DB12(NewValue:=random,BUF_DB:=DB1.buffer_b);  // сохранение случ. числа

END_ORGANIZATION_BLOCK

SCL_Loe2.doc

Категория: SIEMENS | Просмотров: 46 | Добавил: gt7600 | Теги: siemens, SCL | Рейтинг: 0.0/0
Всего комментариев: 0
avatar