Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 24

Тема: Какой синтаксис инициализации массива структур

  1. #1
    Пользователь Аватар для mikola_wow
    Регистрация
    08.04.2009
    Адрес
    Украина
    Сообщений
    46

    По умолчанию Какой синтаксис инициализации массива структур

    ДОБРЫЙ ДЕНЬ.
    Нужна помощь в синтаксисе Кодесиса 3.5
    Есть структура

    TYPE Recept_STRUCT :
    STRUCT
    name:STRING (50);
    ves_shebnja:REAL;
    ves_peska:REAL;
    ves_cementa:REAL;
    ves_voda:REAL;
    ves_ximdob:REAL;
    time_zames:INT;

    END_STRUCT
    END_TYPE

    Необходимо сделать инициализацию массива стрктур в Retain области.

    Инициализация по типу:
    arr_recept: ARRAY [0..10] OF Recept_STRUCT :=
    (name:='B100' , ves_shebnja:=100, ves_peska:=200, ves_cementa:=300, ves_voda:=400, ves_ximdob:=500, time_zames:=600) ,
    (name:='B100' , ves_shebnja:=100, ves_peska:=200, ves_cementa:=300, ves_voda:=400, ves_ximdob:=500, time_zames:=600) ,
    (name:='B100' , ves_shebnja:=100, ves_peska:=200, ves_cementa:=300, ves_voda:=400, ves_ximdob:=500, time_zames:=600) ,
    (name:='B100' , ves_shebnja:=100, ves_peska:=200, ves_cementa:=300, ves_voda:=400, ves_ximdob:=500, time_zames:=600) ,
    (name:='B100' , ves_shebnja:=100, ves_peska:=200, ves_cementa:=300, ves_voda:=400, ves_ximdob:=500, time_zames:=600) ,
    (name:='B100' , ves_shebnja:=100, ves_peska:=200, ves_cementa:=300, ves_voda:=400, ves_ximdob:=500, time_zames:=600) ,
    (name:='B100' , ves_shebnja:=100, ves_peska:=200, ves_cementa:=300, ves_voda:=400, ves_ximdob:=500, time_zames:=600) ,
    (name:='B100' , ves_shebnja:=100, ves_peska:=200, ves_cementa:=300, ves_voda:=400, ves_ximdob:=500, time_zames:=600) ,
    (name:='B100' , ves_shebnja:=100, ves_peska:=200, ves_cementa:=300, ves_voda:=400, ves_ximdob:=500, time_zames:=600) ,
    (name:='B100' , ves_shebnja:=100, ves_peska:=200, ves_cementa:=300, ves_voda:=400, ves_ximdob:=500, time_zames:=600) ;

    ВЫДАЕТ ОШИБКУ компиляции!
    Как это сделать ?
    Заранеее спасибо.

  2. #2
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,064

    По умолчанию

    Все содержимое надо поместить в квадратные скобки.
    [ (инициализация элементов структуры 1), (инициализация элементов структуры 2), ... ];

  3. #3

    По умолчанию

    Доброй ночи! На второй день знакомства с CoDeSys 3.5 не нашёл ответа на вопрос
    из той же оперы после применения квадратных вот только здесь обнаруженных скобок -

    PROGRAM PLC_PRG
    VAR
    wtpr1: INT := 65;
    wtpr2: INT := 78;
    wtpr3: INT := 25;
    wtpr4: INT := 59;
    wt1:INT;
    wt2:INT;
    wt3:INT;
    wt4:INT;
    wt: ARRAY [1..4] OF INT:= [wt1,wt2,wt3,wt4];//[wt1:=120,wt2:=56,wt3:=84,wt4:=33]
    check:INT;

    END_VAR

    Компилятор ругается на попытку обратиться к элементу через точку - wt.wt1:=wtpr1;
    считает, что wt вообще не структурированная штука. Никаких вариантов синтаксиса
    нигде не обнаружил. Может, я слепой - подскажите, чего не хватает, чтобы записывать
    значения в массив.

    C0018: 'wt.wr1:=wtpr1' is no valid assignment target
    C0062: 'wt' не является структурированной переменной

    Добавлю после экспериментов. Компилятор не бракует такой вариант
    wt[wt4]:=wt4:=wtpr4;
    check:=wt[wt4];
    и в эмуляторе действительно все четыре значения дружно изменяются, вот только в таблице
    эмулятора значения массива wt[n] по нулям. В "Ассистенте ввода" wt[wt4] нет конечно, то есть
    это действительно обращение, а не переменная.
    И как эти нули понимать?..
    Последний раз редактировалось Jobin; 24.12.2019 в 02:48.

  4. #4

    По умолчанию

    Joblin, сложно понять что Вы делаете и зачем так.

    Ну объявили переменные. Хорошо, но весь этот замут с инициализацией так делать бы и не стал.
    Сделал бы так (пример одной ячейки)
    IF NOT INIT THEN
    wt[1]:=120;
    и.т.д
    INIT:=TRUE;
    END_IF;
    +79104444236
    С уважением,
    Лапшин Вячеслав

  5. #5

    По умолчанию

    Цитата Сообщение от krollcbas Посмотреть сообщение
    Joblin, сложно понять что Вы делаете и зачем так.

    ))) Так это... разбираюсь с CoDeSys'ом... третий день пошёл.
    Выяснял, как ведёт себя массив с переменными. Например, хочу таким образом наработку
    нескольких агрегатов контролировать, сохранять и использовать для ротации.
    Сама по себе инициализация не нужна в такой задаче.

    Ну объявили переменные. Хорошо, но весь этот замут с инициализацией так делать бы и не стал.
    Сделал бы так (пример одной ячейки)
    Спасибо, этим и продолжу.

    Но теперь вопрос именно в том, чему верить - нулям в табличке массива в эмуляторе,
    или контрольным переменным, которые вроде честно читают из массива значения -
    косяк эмулятора или мой.
    Поэтому неуютно )))

    Позже:
    Вопрос про нули, похоже, снят. В элементы массива эмулятор пишет значения при сбросе.
    Второй сброс обнуляет и массив.
    Последний раз редактировалось Jobin; 24.12.2019 в 08:18.

  6. #6

    По умолчанию

    )))

    Спасибо! Но пока не укладывается в голове, как в разделе констант
    объявить наработку насосов.

    Компиляция вроде решена. Доки вроде читал. Вопрос реально
    теперь в том - кто неадекватен - я или эмулятор.
    Все среды разработки с косяками. Точно знаю.
    И я с косяками. Поэтому вопрос - чей косяк -
    актуален.

    Спасибо. Точку на квадратные скобки
    вчера заменил. Работает. Но вопросов меньше не стало.

  7. #7

    По умолчанию

    Судя по тому, что сброс как раз и записывает в массив последние значения -
    это подразумевает - эмулятор именно на запись в retain намекает.
    Вообще вопрос был о дыре в доках по синтаксису 3.5.
    И ребусах с эмулятором.

    И уж извините - но если чтение всей недодокументации решает
    все вопросы - зачем тогда форумы?

    По моему - чтобы восполнять пробелы в доках
    и обходить косяки оболочек.

  8. #8

    По умолчанию

    Доки перелопатил прежде чем задать вопрос.
    Ткните носом в ответ в доках пенсионера автоматизации -
    скажу спасибо!

    Перманентное жлобство производителей по части инфы бесит -
    типа хочешь купить колбасу - купи весы для каждого сорта этой дряни.
    Причём весы именно конкретного производителя.
    Вот и весь МЭК.
    Последний раз редактировалось Jobin; 24.12.2019 в 16:56.

  9. #9

    По умолчанию

    "не чего на зеркало пенять если рожа крива" (орфография автора - capzap)

    )))

    Спасибо всем ответившим!
    Вся возня с записью наработки произвольного числа агрегатов,
    сортировкой зафиксированных значений этого массива и нумерацией
    агрегатов для последующей ротации по наработке и резервированием
    по авариям в результате заняла около сорока строчек вместе с комментариями
    и имитацией переменных. И новогоднюю неделю знакомства с нюансами ST на CoDeSys'е...
    Последний раз редактировалось Jobin; 03.01.2020 в 14:59.

  10. #10
    Пользователь Аватар для Serhioromano
    Регистрация
    15.09.2015
    Адрес
    Бишкек
    Сообщений
    265

    По умолчанию

    Для бушующих поколений. Если при инициализации вы инициируете один и те же значения то можно их инициировать при объявлении самой структуры.

    Код:
    TYPE Recept_STRUCT :
        STRUCT
        name:STRING (50) :='B100';
        ves_shebnja:REAL :=100;
        ves_peska:REAL :=200;
        ves_cementa:REAL :=300;
        ves_voda:REAL :=400;
        ves_ximdob:REAL :=500;
        time_zames:INT :=600;
    END_STRUCT
    END_TYPE
    Или же если при инициализации массива можно сиользовать групповое назначение.

    Код:
    arr_recept: ARRAY [0..10] OF Recept_STRUCT := [
        11(
            (name:='B100' , ves_shebnja:=100, ves_peska:=200, ves_cementa:=300, ves_voda:=400, ves_ximdob:=500, time_zames:=600)
        )
    ];
    Все подобные тонкости описаны в моей книге по ST

Страница 1 из 3 123 ПоследняяПоследняя

Похожие темы

  1. ПЛК 110, модбас и массивы структур.
    от lttn в разделе ПЛК (среда MasterSCADA 4D)
    Ответов: 7
    Последнее сообщение: 17.10.2019, 22:01
  2. Синтаксис Если()
    от Nikel097 в разделе Master SCADA 3
    Ответов: 2
    Последнее сообщение: 21.11.2017, 19:43
  3. Ответов: 4
    Последнее сообщение: 05.09.2012, 07:17
  4. инициализация массива структур
    от drvlas в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 16.12.2010, 18:31
  5. Ответов: 6
    Последнее сообщение: 05.04.2010, 09:06

Ваши права

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