PDA

Просмотр полной версии : подскажите по работе с массивами



alexval2006
09.03.2010, 23:42
Подскажите по работе с массивами что то я не могу разобраться
VAR_GLOBAL CONSTANT
MAX_BYTON:WORD:=5; (*объявляю константу размера массива*)
END_VAR
VAR_GLOBAL
BYTON:ARRAY [ 1..MAX_BYTON ] OF FB_BYTON; (*имя массива BYTON и он связан с функциональным блоком FB_BYTON*)
END_VAR
----------------------------------------------------
вроде так я понял поправите если неправ
PROGRAM PLC_PRG
VAR
i:WORD; (*объявляем числовую переменную*)
END_VAR
-------------------------------------------------
FOR i := 1 TO MAX_BYTON DO (*опрашиваем кнопки в цикле на предмет их нажатия и сохраняем результаты в нашем массиве и пиреходим FB_BYTON на действие Check это при условии если я правильно понимаю это*)
BYTON[ i ].Check;
END_FOR
-----------------------------------------------------
FUNCTION_BLOCK FB_BYTON
VAR_INPUT
Open:BOOL; (*Состояние кнопок нажата или нет*)
END_VAR
VAR
Num_BYTON:WORD; (*Номер нажатой кнопки*)
END_VAR
-------------------------------------------------------
;
--------------------------------
Check
------
IF Open THEN (*если кнопка нажата в визуализации на кнопки прописана такая вот переменная .Byton[1].Open*)
(*а вот тут мне надо узнать номер нажатой кнопки и записать его в числовую переменную Num_BYTON и как это сделать я что то не пойму помогите пожалуйста*)
END_IF

Gosha
11.03.2010, 08:56
Мало что понятно.
Что есть на входе? Переменные состояния концевых выключателей типа bool?
Или word переменная с установленными битами?

На выходе тоже должен быть массив переменных типа bool? Или массив номеров нажатых кнопок?
Я бы сначала предложил изложить постановку задачи: что по сути есть на входе и что должно быть на выходе.



VAR_GLOBAL
........................
button_state:ARRAY [ 1..MAX_BUTTON] of bool;
END_VAR

FOR i := 1 TO MAX_BYTON DO
button_state[i]:= FALSE;
button[ i ](Open:= check[i], button_state[i]);
END_FOR

alexval2006
11.03.2010, 11:25
На входе состояние кнопок bool на выходе нужны номер нажатой кнопке в переменую типа word

Gosha
11.03.2010, 12:17
Т.е. на выходе мы имеем массив номеров нажатых кнопок?



FOR i := 1 TO MAX_BYTON DO
button_num[i]:= 0;
END_FOR
j:=0;
FOR i := 1 TO MAX_BYTON DO
if button_state = TRUE then
button_num[j] := i;
j:= j + 1;
end_if
END_FOR

alexval2006
11.03.2010, 15:36
да, дома гляну ваш вариант кода сейчас нету под рукой компа