說我有填充有信息繞軸線以下結構:迭代中的TwinCAT PLC(結構化文本)結構
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軸)的。這相當於656字節與所有結構相結合。
現在,我有一個叫緩衝區變量:
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
是否有ST PLC上的,這是一種迭代一個結構的成員,然後這些成員放入一個緩衝,並確保他們在正確的地方呢?你知道這樣做的任何技巧嗎?
我問這個,因爲我可以在下面的方法去做,
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個字節。如果我在將來更改結構體的成員,必須有一些方法來自動執行。
提示給你:指針,尺寸和Memcpy –