String-Bearbeitung

Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo


FUNCTION "DB ->DB übertragen" : INT
TITLE = Daten kopieren mit dem "variablen ANY-Zeiger"
//Der Baustein kopiert einen Datenbereich von einem Datenbaustein in
//einen anderen.
//Der Datenbereich kann man auf zwei Arten übertragen:
//1 -> eine bestimmte Bytes-Menge
//2 -> eine bestimmte Wort-Menge
//
//Bespiel 01 (Bytes)
//------------------
//Quelle_DB :101 <-- aus dem DB 101
//Das_erste_Byte :10 <-- ab Byte 10
//Anzahl_Bytes :8 <-- 8 Bytes übertragen (d.h. 10...17)
//Das_erste_DW :0 <-- in dem Fall irrelevant
//Das_letzte_DW :0 <-- in dem Fall irrelevant
//Bytes_uebertragen :1 <-- der FC soll Bytes-Menge übertragen
//Wort_uebertragen :0 <-- keine Wörter
//Ziel_DB :102 <-- Daten sollen in DB 102 transferiert werden
//Zielanfang :20 <-- und zwar ab Byte 20
//RAT_VAl :LW 0 <-- falsche Parametrierung
//
//Bespiel 02 (Wort)
//------------------
//Quelle_DB :101 <-- aus dem DB 101
//Das_erste_Byte :0 <-- in dem Fall irrelevant
//Anzahl_Bytes :0 <-- in dem Fall irrelevant
//Das_erste_DW :2 <-- Das erste DW = DW 02
//Das_letzte_DW :8 <-- Das letzte DW = DW 08 (d.h. 2,4,6 und 8)
//Bytes_uebertragen :0 <-- keine Bytes
//Wort_uebertragen :1 <-- der FC soll Wort-Menge übertragen
//Ziel_DB :102 <-- Daten sollen in DB 102 transferiert werden
//Zielanfang :20 <-- und zwar ab Wort 20
//RAT_VAl :LW 0 <-- falsche Parametrierung
//
//Berbeitung:
//Taddy
AUTHOR : Taddy
VERSION : 1.0

VAR_INPUT
Quelle_DB : INT ; //Quelle Datenbaustein
Das_erste_Byte : INT ; //Das erste Byte
Anzahl_Bytes : INT ; //Anzahl der Bytes
Das_erste_DW : INT ; //Das erste DW, das übertragen soll
Das_letzte_DW : INT ; //Das letzte DW, das übertragen soll
Bytes_uebertragen : BOOL ; //Byte übertragen ?
Wort_uebertragen : BOOL ; //Wort übertragen ?
Ziel_DB : INT ; //Ziel Datenbaustein
Zielanfang : INT ; //Ziel Anfangsadresse
END_VAR
VAR_TEMP
QANY : ANY ; //ANY-Zeiger Quelle
ZANY : ANY ; //ANY-Zeiger Ziel
END_VAR
BEGIN
NETWORK
TITLE =
// Zusammenstellung des Quellzeigers
//;
L W#16#1002; //Typ BYTE
T LW 0;
//;
//; Byte ?
//;
L #Anzahl_Bytes; //Anzahl Bytes
U #Bytes_uebertragen;
SPB M011;
//;
//; Wort ?
//;
L #Das_letzte_DW; //Anzahl Bytes
L #Das_erste_DW;
-I ;
L 2;
+I ;
M011: T LW 2;
//;
L #Quelle_DB; //Quell-DB
T LW 4;
//;
//; Byte ?
//;
L #Das_erste_Byte;
U #Bytes_uebertragen;
SPB M012;
//;
//; Wort ?
//;
L #Das_erste_DW; //Anfang der Quelle
M012: SLD 3;
OD DW#16#84000000;
T LD 6;
//;
NETWORK
TITLE =
// Zusammenstellung des Zielzeigers
//;
L W#16#1002; //Typ BYTE
T LW 10;
//;
//; Byte ?
//;
L #Anzahl_Bytes; //Anzahl Bytes
U #Bytes_uebertragen;
SPB M021;
//;
//; Wort ?
//;
L #Das_letzte_DW; //Anzahl Bytes
L #Das_erste_DW;
-I ;
L 2;
+I ;
M021: T LW 12;
//;
L #Ziel_DB; //Ziel-DB
T LW 14;
//;
L #Zielanfang; //Anfang der Ziels
SLD 3;
OD DW#16#84000000;
T LD 16;
//;
NETWORK
TITLE =
// Datenbereich kopieren
//;
CALL "SFC 20" (
SRCBLK := #QANY,
RET_VAL := #RET_VAL,
DSTBLK := #ZANY);
//;
NETWORK
TITLE =
//Ende

END_FUNCTION
 
@taddy
der code von anna ist in ordnung und müsste eigentlich ohne fehler funktionieren.

@anna
werden die daten eigentlich trotz des fehlers der sfc20 kopiert?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, Volker!!!!
Ja ... ich habe es hingekriegt...
Diese Datenübertragung mit Any-Pointer_Bildung habe ich in einer aderen Funktion, die mehrmals aufgerufen wird, realisiert.....

Jetzt läuft es fehlerfrei.

Sie haben mir sehr geholfen...
Vielen Dank!!!!!
 
@ Anna

Hab aus neugierde den ganzen Threat gelesen. Sehr interessant, da ich neulich auch son Any Problem an nem SFC hatte.
Könnte es sein das in deinem AWL in der Zeile
L P##Any_Quelle <---hier
L ***
T LW[AR1,P#0.0]
gar nicht das AR1 beschieben wird?

Ich denke
-->LAR1 P##ANY_Quelle
würde vielleicht gehen?
Du kannst bei dir auch sehen, das sich im Status im AR1 nichts ändert.
Weiss natürlich auch nicht wo die Any_Quelle im Lokal oder sonstwas Bereich liegt.
 
Hallo
Bildschirm kopieren -> in Quelle kopieren -> übersetzen -> als FC benutzen. Ich nutze den FC seit Jahren. Man kann mehrere Tausendbyte von A nach B kopieren.
 
Zurück
Oben