は、i軸についての情報で満たされている、以下の構造を有していると言う:反復処理(構造化テキスト)
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
をバッファにメンバーを配置し、それらが適切な場所になっていることを確認することその後、構造体のメンバーを反復処理とする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バイトを上書きするのを避けるために、バッファを最初の軸で塗りつぶした後。の構造体のメンバを変更する場合には、何らかの方法でを自動的に作成する必要があります。
ヒント:ポインタ、サイズ&Memcpy –