Версия для печати

Совет: SCL S7, обработка входных/выходных параметров в цикле

Дата: 2015-01-17

Добавлено: komatic

Тема: SCL




scl



Иногда встречается необходимость работать с функциями, в которых много однотипных входных/выходных параметров.
Данный материал показывает возможность обращаться к этим параметрам через вычисляемую переменную (индекс).






scl

Возьмем тестовую функцию, в которой имеются 11 дискретных входов/выходов.



Проблема заключается в том, что использовать оператор AT можно только в пределах адресуемой переменной.




scl

Введем переменную in_00_b
представляющюю массив из одного bool элемента.






scl

Пример работы с параметрами.



Полный код:



FUNCTION_BLOCK FB1
 
VAR_INPUT
  in_00 : BOOL ;
  in_00_b AT in_00 : ARRAY[0..0] OF BOOL;   
  in_01 : BOOL ;   
  in_02 : BOOL ;   
  in_03 : BOOL ;   
  in_04 : BOOL ;   
  in_05 : BOOL ;   
  in_06 : BOOL ;   
  in_07 : BOOL ;   
  in_08 : BOOL ;   
  in_09 : BOOL ;   
  in_10 : BOOL ;   
END_VAR
 
VAR_OUTPUT
  out_00 : BOOL
  out_00_b AT out_00 : ARRAY[0..0] OF BOOL;   
  out_01 : BOOL ;   
  out_02 : BOOL ;   
  out_03 : BOOL ;   
  out_04 : BOOL ;   
  out_05 : BOOL ;   
  out_06 : BOOL ;   
  out_07 : BOOL ;   
  out_08 : BOOL ;   
  out_09 : BOOL ;   
  out_10 : BOOL ;   
END_VAR
 
VAR_TEMP
  i : INT
END_VAR
 
    FOR i:=0 TO 10 BY 1 DO
       
        out_00_b[i]:=in_00_b[i];  
            
    END_FOR;
 
END_FUNCTION_BLOCK
 
 
 





Замечания:



Данный способ работает только с функциональными блоками FB.
Обрабатывать можно параметры любых типов - INT, REAL, DWORD и т.д.
Даже с установленной опцией Monitor array limits в компиляторе, компиляция проходит без проблем при любых значениях лимитов цикла, поэтому надо быть осторожным при использовании, чтобы не выйти за границы.







Просмотров: 3698

Комментарии к материалу

Добавлен: VO    Дата: 2015-01-17

мдя, вот это номер. впрочем, ничего удивительного.

Добавлен: OldBell    Дата: 2018-09-07

есть ли возможность в цикле к переменным slice access так же обращаться. TIA 1500, все неоптимизированое.

Добавлен: OldBell    Дата: 2018-09-07

>out_00_b[i]:=in_00_b[i];
как в цикле включить по очереди все выхода

Добавить комментарий

Ваше имя:

Текст комментария (4000 max):

Введите сумму с картинки: