0

基本上我有这个问题,就像在 C 中描述结构化文本一样。

所以在 CI 中可以这样做将向量 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
4

2 回答 2

0

您是否要尝试将 c 复制到 a 中?

对于 a 数组,您需要两个索引,如下所示:

memcpy(ADR(a[i,0]).....

请测试。我相信这就是我记得的方式,但不是我的电脑。

于 2018-06-29T19:48:55.620 回答
0

如果我理解得很好,您想将 1 维数组(1x99 = 99 个元素)复制到 99 维数组(99x99 = 9801 个元素)。您可以复制第一行 o 列中的第一个数组(一维)(反之亦然),第二个中的第二个......等等。

如果这是您的 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)并且它可以工作,但我不知道这是不是你正在寻找的......

于 2018-07-12T19:40:49.400 回答