【问题标题】:How to memcpy into a two dimensional array in Structured Text?如何在结构化文本中将 memcpy 转换为二维数组?
【发布时间】:2018-06-28 14:54:04
【问题描述】:

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

所以在 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

【问题讨论】:

  • 我有一个想法,但我担心问题不一样。看起来你试图以另一种方式解决任务。你能描述(编辑)你想要完成的事情吗?使用指针可能有一种完全不同的方法。
  • 我喜欢将相同大小的一维数组复制到一个二维数组中。我还考虑了一个结构。如果你知道如何迭代一个结构的成员,这对我来说也可以。上面这不是指针方法吗?
  • 什么是IDE?代码系统?指针不是 IEC61131-3 规范的一部分,因此每个人的实现方式都不同。我也无法理解你如何将一个 0-99 数组复制到 0-9801 数组,这是 0-99,0-99 的总元素

标签: structured-text


【解决方案1】:

你想把 c 复制到 a 中吗?

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

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

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

【讨论】:

    【解决方案2】:

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

    如果这是你的海豚,你可以试试这个代码:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-24
      • 1970-01-01
      • 1970-01-01
      • 2015-05-28
      • 2022-07-12
      • 2020-10-04
      相关资源
      最近更新 更多