Как записать в двумерный массив в структурированном тексте? - PullRequest
0 голосов
/ 28 июня 2018

В принципе, у меня есть эта проблема, как в C, описанная здесь для структурированного текста.

Так что в C я могу сделать это, чтобы скопировать вектор c в строки матрицы a:

int a[100][100];
int c[10][10];

int i;
for(i = 0; i<10; i++)
{
    memcpy(&a[i], &c[i], sizeof(c[0]));
}

Как это сделать в структурированном тексте? Мой аналогичный подход пока не работает. (Ошибка компилятора: меньше индексов для поля a).

VAR 
      a: ARRAY[0..99,0..99] OF REAL; (*2D array*)
      c : ARRAY[0..99] OF REAL; (*1D array*)
END_VAR

FOR i:=0 TO 99 DO
      memcpy(ADR(a[i]), ADR(c[i]), SIZEOF(c[0]));
END_FOR

Ответы [ 2 ]

0 голосов
/ 12 июля 2018

Если я правильно понимаю, вы хотели бы скопировать 1-мерный массив (1x99 = 99 элементов) в 99-мерный массив (99x99 = 9801 элементов). Вы можете скопировать первый массив (1 измерение) в первый ряд o столбца (или vicerversa), второй во второй ... и т. Д.

Если это ваш porpouse, вы можете попробовать этот код:

VAR

    i: INT; //auxiliar
    j: INT; //auxiliar

    origin : ARRAY[0..9] OF REAL;       //origin data
    destiny: ARRAY[0..9,0..9] OF REAL;  //destiny

END_VAR

FOR i := 0 TO 9 DO

    FOR j := 0 TO 9 DO

        //Copy the origin array to the first column, second, etc of destiny array
        destiny[i,j] := origin[i];

    END_FOR;    

END_FOR;

Я проверил его на своем компьютере (используя CodeSys), и он работает, но я не знаю, ищите ли вы это ...

0 голосов
/ 29 июня 2018

Вы пытаетесь скопировать c в?

Для массива вам нужны оба индекса, например:

тетср (АДР (а [я, 0]) .....

Пожалуйста, проверьте. Я верю, что это то, что я помню, но не моим компьютером.

...