Просмотр полной версии : массив
Доброго времени суток!
Помогите решить маленький вопрос.
Есть массив:
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 под рукой
о_0 по-моему в codesys вообще нет такой функции "memset"
Филоненко Владислав
29.04.2010, 11:21
есть соответствующая библиотека.
а я сам писал.. почти первое, что сделал, когда сел за 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? Сдается мне что все-таки она самодельная.
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 массива (от 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 отрывок, но там так скудно сказано и наверняка упущены важные замечания.
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot