Показано с 1 по 8 из 8

Тема: массив

  1. #1

    По умолчанию массив

    Доброго времени суток!

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

  2. #2

    По умолчанию

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

  3. #3

    По умолчанию

    о_0 по-моему в codesys вообще нет такой функции "memset"

  4. #4

    По умолчанию

    есть соответствующая библиотека.

  5. #5

    По умолчанию

    а я сам писал.. почти первое, что сделал, когда сел за 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:23.

  6. #6

    По умолчанию

    Цитата Сообщение от freak Посмотреть сообщение
    step[1..120]:=54(0),1,65(0);
    это запись кода инициализации, а для исполняемого кода другие правила, там это не проходит.

  7. #7

    По умолчанию

    Библиотека SysLibMem.Lib
    Есть на диске с ПЛК и на сайте:
    Библиотеки CodeSys

    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

  8. #8

    По умолчанию

    Извините за возможные глупые вопросы, просто никогда не работал с массивами. Необходимо задать 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 отрывок, но там так скудно сказано и наверняка упущены важные замечания.

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •