Просмотр полной версии : Реинициализация массива
Доброй ночи!
Уточните, пожалуйста по следующей ситуации:
Имеется массив, инициализация (присваивание значений) проводится при объявлении.:
PRG_STEP : ARRAY[0..9] OF ARRAY[1..100] OF ARRAY[1..5] OF REAL:=
[
[
[1,1700,0,0,1], [2,1300,0,0,2], [1,1700,0,0,1], [2,1300,0,0,2], [1,1700,0,0,1], и т.д
],[
[1,1700,0,0,1,0], [2,1300,0,0,1,0], [1,1700,0,0,1,0], [2,1300,0,0,1,0], и т.д
],[
и т.д.
Возможно реинициализировать его из кода программы, т.е. присвоить новые значения комплексно, т.е. также, как и при объявлении?
Спасибо,
МихаилГл
28.11.2023, 06:41
В коде присвоить массиву массив с константами
Не обязательно.
Можно и по отдельности каждому элементу новое значение присвоить и не обязательно это в константы впихивать.
Например: первоначальная инициализация это параметры по умолчанию при запуске (ip параметры сети, например), которые вы можете потом поменять при помощи кода в программе. Вот тут кстати можно использовать массив объявленный в константах, который для возврата к параметрам по умолчанию можно использовать. Но инициализированный массив тогда надо в ретейн вставлять, чтоб при запуске ПЛК переменные не затерлись.
Спасибо,
По отдельности менять не очень хочется, т.к. условно, 100 блоков по 5 разных значений по одному прописывать некомфортно.
К примеру первому элементу массива
PRG_STEP[0]
Нужно изменить 50 блоков подмассива с еще одним подмассивом. Т.е. нужно заменить
PRG_STEP[0] [1-50][1-5]
Данные подмассивов известны и могут быть изначально записаны в отдельный массив.
Как текущему многоуровнему массиву [0]присвоить сразу весь массив из 2х подмассивов
PRG_STEP[0]:=[ [1,2,3,4,5], [1,2,3,4,5], и т.д
Вышеописанный вариант не работает) а хотелось бы нечто подобное, если возможно
capzap,
Можете на моем примере (PRG_STEP[0]:=[ [1,2,3,4,5], [1,2,3,4,5] ) написать, как правильно сделать, т.к. у меня пишет - неверная инициализация массива
Спасибо,
50capzap,
Спасибо)
Пошел более простым путем)
ПЫСЫ: 50capzap пропал(
... неверная инициализация массива...
без скобок (во всяком случае в КДС2)
++ ли КДС3 - х.з. А в КДС2:
..
Как текущему многоуровнему массиву [0]присвоить сразу весь массив из 2х подмассивов
PRG_STEP[0]:=[ [1,2,3,4,5], [1,2,3,4,5], и т.д
Т.к. типы внизу - разные
...т.к. условно, 100 блоков по 5 разных значений ...
Нужно изменить 50 блоков подмассива с еще одним подмассивом.
.. то только SysLibMem (ниже) или циклы (их сами)
VAR CONSTANT
C : ARRAY[1..50,1..5] OF REAL := ....
END_VAR
VAR
X : ARRAY[0..9] OF ARRAY[1..100,1..5] OF REAL;
END_VAR
Нужно изменить (только?) 50 блоков подмассива с еще одним подмассивом ?
SysMemCpy(ADR(X[0]), (*<=*) ADR(C), SIZEOF(C));
(КДС3 сейчас нет, но т. к. capzap говорил про указатели, думаю он предложил аналогичное)
А коли бы не просрали тип
VAR CONSTANT
C : ARRAY[1..50,1..5] OF REAL := ....
END_VAR
VAR
X : ARRAY[0..9] OF ARRAY[1..50,1..5] OF REAL;
END_VAR
то просто:
X[0] := C;
Потаму как это тоже самое что:
TYPE TShikuS :
ARRAY[1..50,1..5] OF REAL;
END_TYPE
VAR CONSTANT
C : TShikuS := ....
END_VAR
VAR
X : ARRAY[0..9] OF TShikuS;
END_VAR
да и яснее же ?
Валенок,
Спасибо, все подробно расписали)
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot