PDA

Просмотр полной версии : массив



freak
28.04.2010, 09:31
Доброго времени суток!

Помогите решить маленький вопрос.
Есть массив:
Var
step: ARRAY [1..120] OF BOOL;
end_var
в теле программы мне надо одному элементу присвоить 1, например
step[55]:=1, а остальные обнулить. Для краткой записи я пытаюсь это сделать следующей строкой:
step[1..120]:=54(0),1,65(0);
компилятор выдает ошибку 4024.
Подскажите, как выполнить это действие правильно и кратко.

Филоненко Владислав
28.04.2010, 13:14
memset (adr(step),16#00,sizeof(step));
step[55]:=1;
по синтаксису memset не уверен, нет сейчас CoDeSys под рукой

freak
29.04.2010, 10:25
о_0 по-моему в codesys вообще нет такой функции "memset"

Филоненко Владислав
29.04.2010, 11:21
есть соответствующая библиотека.

Radix
01.06.2010, 17:19
а я сам писал.. почти первое, что сделал, когда сел за CodeSys

FUNCTION memset : BOOL (* заполнение произвольного массива памяти заданным значением *)
VAR_INPUT
data : POINTER TO BYTE;
value : BYTE;
length : INT;
END_VAR
VAR
i: INT;
END_VAR

FOR i:=1 TO length DO
data^ := value;
data := data + DWORD#1;
END_FOR

Владислав, а что за библиотека содержит memset? Сдается мне что все-таки она самодельная.

Radix
01.06.2010, 17:21
step[1..120]:=54(0),1,65(0);
это запись кода инициализации, а для исполняемого кода другие правила, там это не проходит.

Александр Приходько
01.06.2010, 20:40
Библиотека SysLibMem.Lib
Есть на диске с ПЛК и на сайте:
Библиотеки CodeSys (http://kipshop.ru/CoDeSys/bibl/Bibl_CoDeSys.zip)

FUNCTION SysMemSet : DWORD
(* Sets buffers to a specified character. *)
(* returns the value of dwDest. *)
VAR_INPUT
dwDest: DWORD; (* Pointer to destination *)
bCharacter: BYTE; (* Character to set *)
dwCount: DWORD; (* Number of characters *)
END_VAR

Руслан2
01.07.2010, 03:14
Извините за возможные глупые вопросы, просто никогда не работал с массивами. Необходимо задать 2 массива (от 1 до 5 оба) и писать различные условия, к примеру:
signal: ARRAY [1..5] OF INT;
rabota: ARRAY [1..5] OF INT;
IF signal[1]=1 AND rabota[1]=1 THEN DO ....
Можно ли задать вместо каждого signala (от 1 до 5) скажем какую-то переменную i, которой мы присваиваем от 1 до 5, и потом писать не каждое условие для 5-ти signal, а одно для всех?
И если подскажете материал, как работать в CoDeSys с массивами, буду признателен. Я нашел в документации по CoDeSys отрывок, но там так скудно сказано и наверняка упущены важные замечания.