-> Hier kostenlos registrieren
Hallo,
ich Habe eine Funktion in die folgendermaßen aussieht.
Bei DCI_GetStringParam() wird nun eine ID als Input und die Var2 und Var3 als Output übergeben.
Ich zerlege nun den String und bekomme bei s_max 132 statt 16 raus und kann mir das nicht erklären. Habe auch schon als IN_Out deklariert, aber da kommt das selbe. Hat einer eine Idee woran das liegt das der max nicht richtig übergeben wird?
ich Habe eine Funktion in die folgendermaßen aussieht.
Bei DCI_GetStringParam() wird nun eine ID als Input und die Var2 und Var3 als Output übergeben.
Code:
FUNCTION Command:Void
VAR_TEMP
Var1 : DINT;
Var2 : STRING[16];
Var3 : STRING[16];
END_VAR
Var1 := DCI_GetDIntParam(101);
DCI_GetStringParam(id:=100,s:=Var2);
DCI_GetStringParam(id:=102,s:=Var3);
END_FUNCTION
Ich zerlege nun den String und bekomme bei s_max 132 statt 16 raus und kann mir das nicht erklären. Habe auch schon als IN_Out deklariert, aber da kommt das selbe. Hat einer eine Idee woran das liegt das der max nicht richtig übergeben wird?
Code:
FUNCTION DCI_GetStringParam: VOID
VAR_INPUT
id:DWord;
END_VAR
VAR_OUTPUT
s:STRING;
S_REF AT s: STRUCT
s_max:BYTE;
s_act:BYTE;
s_chars:ARRAY[1..254] OF BYTE;
END_STRUCT;
END_VAR
VAR_TEMP
size:INT;
max_size:INT;
pos:INT;
END_VAR
DCI_SeekByParamID(rid:=id,rtyp:=9);
max_size:=BYTE_TO_INT(S_REF.s_max);
size := DINT_TO_INT(DCP_ReadDInt());
IF size>max_size THEN
DCP_Seek(size);
S_REF.s_act:=0;
ELSE
FOR pos:=1 TO size DO
S_REF.s_chars[pos]:=DCP_ReadByte();
END_FOR;
S_REF.s_act:=INT_TO_BYTE(size);
END_IF;
END_FUNCTION