假设我有以下结构,其中填充了有关轴的信息:
TYPE AxisInfo :
STRUCT
AxisStatus : ARRAY [0..3] OF BYTE;
DriveStatis : ARRAY [0..3] OF BYTE;
FeedRate : ARRAY [0..3] OF BYTE;
Inputs : BYTE;
Outputs : BYTE;
Extra : BYTE;
CurPosW: UDINT;
CurPosX: UDINT;
CurPosY: UDINT;
CurPosZ: UDINT;
CurVelX: UDINT;
CurVelY: UDINT;
CurVelZ: UDINT;
ComPos : UDINT;
SetVel : UDINT;
DacVel : UDINT;
WinchErrPos : UDINT;
XYZErrPos : UDINT;
EnFaults : UDINT;
ActFaults : UDINT;
BpFaults : UDINT;
BpTimeLeft : UDINT;
该结构总共包含82 个字节。我将始终运行8个这样的结构(因为我有 8 个轴)。这相当于656 个字节加上所有结构。
现在,我有一个名为 Buffer 的变量:
Buffer: ARRAY [0..1023] OF BYTE;
我希望能够按顺序用 8 个结构中的每一个填充这个缓冲区。例如:
Buffer[0] := AxisStatus[0]; //this is for the 1st axis
Buffer[1] := AxisStatus[1]; //this is for the 1st axis
….
Buffer[78] := BpTimeLeft; //this is for the 1st axis
…
Buffer[648] := BpFaults;
Buffer[652] := BpTimeLeft; //this is for the 8th axis
有没有办法在 PLC 上的 ST 中迭代结构的成员,然后将这些成员放入缓冲区并确保它们位于正确的位置?你知道有什么技巧可以做到这一点吗?
我问这个是因为我可以通过以下方法做到这一点,
For axisIndex:=1 to 8 DO
Buffer[0] := AxisStatus[0];
Buffer[1] := AxisStatus[1];
…
Buffer[78] := BpTimeLeft; this is for the 1st axis
END_FOR
但是我必须输入需要为其分配缓冲区的每一行,然后在我用第一个轴填充缓冲区后必须做一些技巧以避免它覆盖前 82 个字节。如果我将来更改结构的成员,必须有某种方法可以自动执行它。?