Zwar rennen die Pointer durch den String / Array aber der String füllt sich nicht mit dem Inhalt vom Array.
Was mach ich falsch?
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Anonymous
-
2009-01-08
Originally created by: Michael_W
Bei w www.oscat.de w gibts freundlicherweise eine sehr große Funktionsbibliothek. Darin ist die gesuchte Funktion enthalten. Ich habe die Plain-Text-Version geladen und das Wichtigste der Funktion unten eingefügt. Hoffe, es hilft.
(*
version 1.3 12. jun. 2008
programmer hugo
tested by oscat
this function will retrieve a string from an array of byte starting at position start and stop at position stop.
the function needs to be called: buffer_TO_String(adr("array"),sizeof("array"), start, stop);
because this function works with pointers its very time efficient and it needs no extra memory.
Hallo.
Ich versuche gerade aus einem Array of Byte einen String zu bilden.
var
Array: ARRAY [0..max_Arraylaenge] OF BYTE;
s_String: String(80);
p_Temp_1: POINTER TO BYTE;
p_Temp_2: POINTER TO BYTE;
b_dummy: BYTE;
end_var
(*Programmausschnitt***)
p_Temp_1:=ADR(s_Sting);
p_Temp_2:=ADR(Array[9]);
FOR i_Zaehler:= 1 TO 6 DO
END_FOR
(*Programmausschnitt Ende***)
Zwar rennen die Pointer durch den String / Array aber der String füllt sich nicht mit dem Inhalt vom Array.
Was mach ich falsch?
Originally created by: Michael_W
Bei w www.oscat.de w gibts freundlicherweise eine sehr große Funktionsbibliothek. Darin ist die gesuchte Funktion enthalten. Ich habe die Plain-Text-Version geladen und das Wichtigste der Funktion unten eingefügt. Hoffe, es hilft.
(*
version 1.3 12. jun. 2008
programmer hugo
tested by oscat
this function will retrieve a string from an array of byte starting at position start and stop at position stop.
the function needs to be called: buffer_TO_String(adr("array"),sizeof("array"), start, stop);
because this function works with pointers its very time efficient and it needs no extra memory.
*)
FUNCTION BUFFER_TO_STRING : STRING(STRING_LENGTH)
VAR_INPUT
END_VAR
VAR
END_VAR
( @END_DECLARATION := '0' )
ps := ADR(BUFFER_TO_STRING);
start :=MIN(start, size);
stop := MIN(stop, size);
( check for maximum string_length )
IF UINT_TO_INT(stop - start + 1) >= STRING_LENGTH THEN
END_IF;
FOR i := UINT_TO_INT(start) TO UINT_TO_INT(stop) DO
END_FOR;
( terminate the string )
ps^ := 0;
END_FUNCTION
Vielen Dank Michael_W
Ich habe die Funktion auf meine Bedürfnisse reduziert.
FUNCTION bArray_to_String : STRING(20)
VAR_INPUT
END_VAR
VAR
END_VAR
(Adresszuweisung)
ps := ADR(bArray_to_String);
(Schreibe in den String)
FOR i := BYTE_TO_INT(b_Start) TO (b_Laenge + b_Start) DO
ps^ := p_Ab^[i];
ps := ps + 1;
END_FOR;
(Pointer auf "NULL" setzen )
ps^ := 0;
rennt sehr gut
(Die Funktion wertet den "typRING_BUFFER" eines "SERIAL_INTERFACE" von Wago aus)
Besten Dank.