FB_MemBufferSplit
Dieser Funktionsbaustein teilt einen Speicherbereich (Datenpuffer) in mehrere kleinere Segmente von einer maximal gewünschten Länge auf. Der Funktionsbaustein liefert einen kleineres Teilsegment zurück, falls das letzte Segment eine kleinere Länge als die gewünschte besitzt.
VAR_INPUT
VAR_INPUT
eCmd : E_EnumCmdType := eEnumCmd_First;
pBuffer : DWORD;
cbBuffer : UDINT;
cbSize : UDINT;
END_VAR
eCmd: Steuerparameter für den Aufzählungsbaustein: eEnumCmd_First liefert das erste Segment, eEnumCmd_Next liefert das nächste Segment. Andere Parameter werden nicht benutzt.
pBuffer: Adresse (Pointer) des Datenpuffers, der geteilt werden soll. Die Adresse kann mit dem ADR-Operator ermittelt werden.
cbBuffer: Länge des Datenpuffers, der geteilt werden soll. Die Länge kann mit dem SIZEOF-Operator ermittelt werden.
cbSize: Maximale Segmentgröße, in die der Datenpuffer geteilt werden soll.
VAR_OUTPUT
VAR_OUTPUT
bOk : BOOL;
pSegment : DWORD;
cbSegment : UDINT;
bEOS : BOOL;
END_VAR
bOk: TRUE = Success, FALSE = Fehler, falscher Parameterwert oder kein weiteres Segment vorhanden.
pSegment: Adresse (Pointer) auf das nächste Datensegment.
cbSegment: Länge (Bytes) von dem nächsten Datensegment.
bEOS: End of segment. TRUE = Letztes Segment. FALSE = Weitere Segmente folgen.
Beispiel in ST:
Im folgenden Beispiel wird die buffer-Variable in 5-Byte-Segmente aufgeteilt. Zu Testzwecken werden die zurück gelieferten Segmente in einen Hexadezimalstring konvertiert.
PROGRAM MAIN
VAR
bSplit : BOOL := TRUE;
buffer : ARRAY[1..30] OF BYTE := 16#A,1,2,3,4,5,6,7,8,9,16#B,1,2,3,4,5,6,7,8,9,16#C,1,2,3,4,5,6,7,8,9;
fbSplit : FB_MemBufferSplit;
sHex : T_MaxString;
END_VAR
IF bSplit THEN
bSplit := FALSE;
fbSplit.eCmd := eEnumCmd_First;
REPEAT
fbSplit( pBuffer := ADR(buffer), cbBuffer := SIZEOF(buffer), cbSize := 5 );
IF fbSplit.bOk THEN
sHex := DATA_TO_HEXSTR( pData := fbSplit.pSegment, cbData := fbSplit.cbSegment, FALSE );
fbSplit.eCmd := eEnumCmd_Next;
END_IF
UNTIL NOT fbSplit.bOk
END_REPEAT
END_IF
Voraussetzungen
Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken |
---|---|---|
TwinCAT v2.10.0 Build >= 1331 | PC or CX (x86, ARM) | TcUtilities.Lib |