Datenbaustein Werte kopieren

doretan

Level-1
Beiträge
37
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
hallo zusammen,


möchte werte aus einen datenbaustein kopieren und in einen anderen rein kopieren.

der db1 enthält 3 zeilen
4 byte real 1.000e+4
4 byte real 2.000e+4
4 byte real 3.000e+4


ich möchte diese werte jetzt in den db2 kopieren

hätte mir dafür die sfc20 funktion gedacht
klappt aber nicht ganz.

CALL "BLKMOV"
SRCBLK :=DB1.DBD0
RET_VAL:=MW1000
DSTBLK :=DB2.DBD0

klappt aber nicht so ganz, jemand ne ideee
 
Probier es doch mal mit einem ANY-Pointer:

Code:
CALL SFC 20
SRCBLK := P#DB1.DBX0.0 REAL 3
RET_VAL := MW1000
DSTBLK := P#DB2.DBX0.0 REAL 3
 
hallo zusammen,


möchte werte aus einen datenbaustein kopieren und in einen anderen rein kopieren.

der db1 enthält 3 zeilen
4 byte real 1.000e+4
4 byte real 2.000e+4
4 byte real 3.000e+4


ich möchte diese werte jetzt in den db2 kopieren

hätte mir dafür die sfc20 funktion gedacht
klappt aber nicht ganz.

CALL "BLKMOV"
SRCBLK :=DB1.DBD0
RET_VAL:=MW1000
DSTBLK :=DB2.DBD0

klappt aber nicht so ganz, jemand ne ideee

Wo steht die zu übertragende Länge? So werden es wahrscheinlich 4 Bytes sein.
 
Hallo,

CALL "BLKMOV"
SRCBLK :=DB1.DBX0.0 byte 12
RET_VAL:=MW1000
DSTBLK :=DB2.DBX0.0 byte 12

so sollte es funktionieren
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

CALL "BLKMOV"
SRCBLK :=DB1.DBX0.0 byte 12
RET_VAL:=MW1000
DSTBLK :=DB2.DBX0.0 byte 12

so sollte es funktionieren

Desweiteren sind möglich:

Code:
CALL SFC 20
SRCBLK := P#DB1.DBX0.0 BOOL 96
RET_VAL := MW1000
DSTBLK := P#DB2.DBX0.0 BOOL 96

Code:
CALL SFC 20
SRCBLK := P#DB1.DBX0.0 CHAR 12
RET_VAL := MW1000
DSTBLK := P#DB2.DBX0.0 CHAR 12

Code:
CALL SFC 20
SRCBLK := P#DB1.DBX0.0 DATE 6
RET_VAL := MW1000
DSTBLK := P#DB2.DBX0.0 DATE 6

Code:
CALL SFC 20
SRCBLK := P#DB1.DBX0.0 WORD 6
RET_VAL := MW1000
DSTBLK := P#DB2.DBX0.0 WORD 6

Code:
CALL SFC 20
SRCBLK := P#DB1.DBX0.0 INT 6
RET_VAL := MW1000
DSTBLK := P#DB2.DBX0.0 INT 6

Code:
CALL SFC 20
SRCBLK := P#DB1.DBX0.0 S5TIME 6
RET_VAL := MW1000
DSTBLK := P#DB2.DBX0.0 S5TIME 6

Code:
CALL SFC 20
SRCBLK := P#DB1.DBX0.0 DINT 3
RET_VAL := MW1000
DSTBLK := P#DB2.DBX0.0 DINT 3

Code:
CALL SFC 20
SRCBLK := P#DB1.DBX0.0 DWORD 3
RET_VAL := MW1000
DSTBLK := P#DB2.DBX0.0 DWORD 3

Code:
CALL SFC 20
SRCBLK := P#DB1.DBX0.0 TIME 3
RET_VAL := MW1000
DSTBLK := P#DB2.DBX0.0 TIME 3

Code:
CALL SFC 20
SRCBLK := P#DB1.DBX0.0 TIME_OF_DAY 3
RET_VAL := MW1000
DSTBLK := P#DB2.DBX0.0 TIME_OF_DAY 3

Code:
CALL SFC 20
SRCBLK := P#DB1.DBX0.0 REAL 3
RET_VAL := MW1000
DSTBLK := P#DB2.DBX0.0 REAL 3
 
Bei String wäre noch zu beachten dass das Format byte angewählt werden muss und die Anzahl der byte "Zeichensumme +2" ist.

RET_Val gibt eine Fehlernummer aus wenn der Bloc Falsch belegt ist.
Wenn alles ok ist, so ist der Wert 0.

Um Flexibel mit dem SFC addressierne zu können empfihlt sich diesen mit anypointern zu arbeiten.
 
hallo

vielen dank für eure antworten

funktioniert noch nicht so ganz.

bekomme bei ret_val den fehler: -31965 = 7CDD
kann diesen fehler leider nicht zuordnen.

im DB2 werden auch keine werte sichtbar!!!
 
bekomme bei ret_val den fehler: -31965 = 7CDD
Meiner Meinung nach ist -31965(dez)=8323(Hex) und damit wärs ein Bereichslängenfehler beim Schreiben, also scheint etwas mit deinem DB2 nicht zu stimmen oder gibt´s bei deiner CPU kein MW1000 ?

Ist jetzt zwar nicht besonders hip, geht aber auch:
Code:
L DB1.DBD0
T DB2.DBD0
L DB1.DBD4
T DB2.DBD4
L DB1.DBD8
T DB2.DBD8
Grüße von HaDi
 
Der Zielbereich (DB2) sollte (vor dem kopieren) mindestens gleich groß sein wie der Quellbereich (DB1).

Als meinen eigenen Standart nehme ich immer den Typ "byte xx". Wobei für xx die Anzahl der zu kopierenden Bytes sind.

Gruß, Michl
 
Zurück
Oben