MC_DARKSTONE
Level-1
- Beiträge
- 25
- Reaktionspunkte
- 1
-> Hier kostenlos registrieren
Hi,
ich bräuchte etwas hilfe mit dem verschieben von einem String in ein DB.
Ein FC bekommt als Input ein String und dieser soll dann in ein DB ab pos X gespeichert werden.
Ich könnte es mit einer Schleife und dem FC26 "Middle part of a STRING" machen
Kennt einer eine bessere Variante z.B. via BLKMOVE...
Zudem wollte ich die Länge das Strings erfahren mit "FC21" Length of a STRING.
aber ich kann für S:= nicht die Input Variable angeben, Fehlermeldung "Parameterübergabe nicht Korrekt"
Es funktioniert nur wenn ich "Befehl" einem TempString übergebe, warum?
Versuch mit BLKMOVE erzeugt den Fehler "Ungültiger oder fehlender Funktionstyp"
egal ob TempString oder Befehl eingesetzt wird
Danke
Gruß
Erick
ich bräuchte etwas hilfe mit dem verschieben von einem String in ein DB.
Ein FC bekommt als Input ein String und dieser soll dann in ein DB ab pos X gespeichert werden.
Ich könnte es mit einer Schleife und dem FC26 "Middle part of a STRING" machen
Code:
%DB30.DBB[Zeiger]:=CHAR_TO_BYTE(STRING_TO_CHAR(MID(in:= Befehl, l:=1, P:=I)))
I:=I+1
Zeiger:=Zeiger +1
Kennt einer eine bessere Variante z.B. via BLKMOVE...
Zudem wollte ich die Länge das Strings erfahren mit "FC21" Length of a STRING.
aber ich kann für S:= nicht die Input Variable angeben, Fehlermeldung "Parameterübergabe nicht Korrekt"
Es funktioniert nur wenn ich "Befehl" einem TempString übergebe, warum?
Code:
FUNCTION FC3: VOID
TITLE = 'SCL_BLOCK'
VAR_INPUT
Befehl: STRING[20];
END_VAR
VAR
MERKER : BOOL;
I : INT;
MERKER_FOR : BOOL;
Anzahl:INT;
TempString:STRING[20];
Zeiger:INT;
END_VAR
BEGIN
Zeiger:=50;
TempString:=Befehl;
Anzahl := LEN(S :=TempString (*IN: STRING*) ); // Geht
Anzahl := LEN(S :=Befehl (*IN: STRING*) ); // Geht nicht
REPEAT
%DB30.DBB[Zeiger]:=CHAR_TO_BYTE(STRING_TO_CHAR(MID(in:=TempString, l:=1, P:=I))); // Geht
%DB30.DBB[Zeiger]:=CHAR_TO_BYTE(STRING_TO_CHAR(MID(in:=Befehl, l:=1, P:=I))); // Geht nicht
I:= I+1;
Zeiger:=Zeiger+1;
UNTIL I = Anzahl -1
END_REPEAT;
.....
Versuch mit BLKMOVE erzeugt den Fehler "Ungültiger oder fehlender Funktionstyp"
egal ob TempString oder Befehl eingesetzt wird
Code:
FUNCTION FC204: VOID
VAR_INPUT
Befehl: STRING[20];
END_VAR
VAR_TEMP
TempString:STRING[20];
Struct_pointer: STRUCT
ANY_ID:BYTE; // S7 Pointer =10h
SOURCE_DATATYPE:BYTE; // Datentyp des Byte=2 Word=4
SOURCE_LENGHT:WORD;
SOURCE_DBNUMMER:WORD;
SOURCE_BYTE_POINTER:BYTE; // Speicherbereich 84=DB
SOURCE_BYTE7: BYTE; // Bit 0,1,2 Byteadresse (letzte stellen der 16Bit 0=15, 1=14, 2=13)
SOURCE_BYTE8: BYTE; // Bit 0-7 Byteadresse (Bit 7=12...0=6)
SOURCE_BYTE9: BYTE; //Bit 7-3 ByteAdresse Bit 2-0 Bitadresse)
(* BSP für DB2.DBX5.4 5= 101 / 4= 100
SourceByte7 = 0, SourceByte8 = 0, SourceByte9 = b#0010 1100 *)
END_STRUCT;
pANY_SOURCE AT Struct_pointer: ANY;
END_VAR
BEGIN
//------------------------------------------------
// AnyPointer Erstellen P#DB250.DBX23.0 WORD 20
//------------------------------------------------
Struct_pointer.ANY_ID:= 16#10;
Struct_pointer.SOURCE_DATATYPE:= 16#4; // DATENTYPE FESTELGEN WORD
Struct_pointer.SOURCE_LENGHT := 16#14;
Struct_pointer.SOURCE_DBNUMMER := 16#FA;
Struct_pointer.SOURCE_BYTE_POINTER:= 16#84;
Struct_pointer.SOURCE_BYTE7:= 2#0;
Struct_pointer.SOURCE_BYTE8:= 2#0;
Struct_pointer.SOURCE_BYTE9:= 2#10111000;
BLKMOV(SRCBLK := TempString // IN: ANY
,DSTBLK := pANY_SOURCE // OUT: ANY
); // INT
....
Gruß
Erick
Zuletzt bearbeitet: