silverfreaky
Level-2
- Beiträge
- 548
- Reaktionspunkte
- 50
-> Hier kostenlos registrieren
FUNCTION_BLOCK BUFFER_TO_STRING
TITLE = 'BUFFER_TO_STRING'
//
//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.
//
VERSION : '1.5'
AUTHOR : hugo
NAME : BBSTR
FAMILY : BUFFER
VAR_INPUT
PT : POINTER;
_pt AT pt: STRUCT
DBNr: WORD;
Adr: DWORD;
END_STRUCT;
SIZE : INT;
START : INT;
STOP : INT;
END_VAR
VAR_OUTPUT
_STRING : STRING;
_str AT _STRING : STRUCT
length: BYTE;
act_length: BYTE;
str: ARRAY [1..254] OF BYTE;
END_STRUCT;
END_VAR
VAR_TEMP
ps : INT; //POINTER TO BYTE;
i : INT;
tPT : INT;
stp: INT;
sta: INT;
END_VAR
BEGIN
tPT := DWORD_TO_INT(SHR(IN:=SHL(IN:=_pt.Adr,N:=8),N:=11));
ps := 1; //ADR(BUFFER_TO_STRING);
IF size = 0 THEN RETURN; END_IF;
sta := MIN(IN1:=start, IN2:=size-1);
stp := MIN(IN1:=stop, IN2:=size-1);
(* check for maximum string_length *)
IF (stp - sta + 1) >= BYTE_TO_INT(_str.act_length) THEN
stp := sta + BYTE_TO_INT(_str.act_length) - 1;
END_IF;
FOR i := sta TO stp DO
_str.str[ps] := WORD_TO_BLOCK_DB(_pt.DBNr).DB[tpt+i];
ps := ps + 1;
END_FOR;
(
*)
END_FUNCTION_BLOCK
Habe den Quellcode von der Oscat Lib genommen und kriege die Konvertierungen nicht rein.Die werden normal blau wenn der die Funktion
kennt.
Ich habe die Funktionen im FUP nachgebildet.Einfach mit Move das Datenformat verschoben bei "DWORD_TO_INT" und "Byte_to_int".Aber auch meine eigenen Funktionen nimmt er nicht.
Woran kann das liegen?Kraatz!
TITLE = 'BUFFER_TO_STRING'
//
//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.
//
VERSION : '1.5'
AUTHOR : hugo
NAME : BBSTR
FAMILY : BUFFER
VAR_INPUT
PT : POINTER;
_pt AT pt: STRUCT
DBNr: WORD;
Adr: DWORD;
END_STRUCT;
SIZE : INT;
START : INT;
STOP : INT;
END_VAR
VAR_OUTPUT
_STRING : STRING;
_str AT _STRING : STRUCT
length: BYTE;
act_length: BYTE;
str: ARRAY [1..254] OF BYTE;
END_STRUCT;
END_VAR
VAR_TEMP
ps : INT; //POINTER TO BYTE;
i : INT;
tPT : INT;
stp: INT;
sta: INT;
END_VAR
BEGIN
tPT := DWORD_TO_INT(SHR(IN:=SHL(IN:=_pt.Adr,N:=8),N:=11));
ps := 1; //ADR(BUFFER_TO_STRING);
IF size = 0 THEN RETURN; END_IF;
sta := MIN(IN1:=start, IN2:=size-1);
stp := MIN(IN1:=stop, IN2:=size-1);
(* check for maximum string_length *)
IF (stp - sta + 1) >= BYTE_TO_INT(_str.act_length) THEN
stp := sta + BYTE_TO_INT(_str.act_length) - 1;
END_IF;
FOR i := sta TO stp DO
_str.str[ps] := WORD_TO_BLOCK_DB(_pt.DBNr).DB[tpt+i];
ps := ps + 1;
END_FOR;
(
*)
END_FUNCTION_BLOCK
Habe den Quellcode von der Oscat Lib genommen und kriege die Konvertierungen nicht rein.Die werden normal blau wenn der die Funktion
kennt.
Ich habe die Funktionen im FUP nachgebildet.Einfach mit Move das Datenformat verschoben bei "DWORD_TO_INT" und "Byte_to_int".Aber auch meine eigenen Funktionen nimmt er nicht.
Woran kann das liegen?Kraatz!