Step 7 SCL-Code Oscalt LIb

silverfreaky

Level-2
Beiträge
548
Reaktionspunkte
50
Zuviel Werbung?
-> 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!
 
In SCL ist das manchmal etwas anders.
Die von dir genannten Bausteine kannst Du ja mal von Hand in dein Projekt ziehen, und gucken ob er sie dann frisst.

Grüße

Marcel
 
Zurück
Oben