DB's kopieren?

Andere onderwerpen dan hierboven vermeld.

Moderator: GJ_

Plaats reactie
Nassie
Berichten: 3
Lid geworden op: 13-11-2006 15:18:42
Locatie: Diepenbeek

DB's kopieren?

Bericht door Nassie » 13-11-2006 15:28:39

Ik ben een stagiar automatisering en het volgende is me niet zo duidelijk:

Er is een DB aangemaakt en na elk proces moeten de ingelezen gegevens van het proces in de DB geplaatst worden. Als deze gegevens nog niet zijn opgehaald van uit een server dan moeten deze gegevens gekopieerd worden naar een andere DB , is er geen netwerk aanwezig meot dit ook gebeuren tot h et netwerk trg opkomt, ... enzoverder ...

Nu was mijn vraag hoe kan ik dit het beste aanpakken ?


Dank u

Steve

Nassie
Berichten: 3
Lid geworden op: 13-11-2006 15:18:42
Locatie: Diepenbeek

Bericht door Nassie » 16-11-2006 15:31:51

Niemand die me kan helpen om een Db te kopieren ?

Ik weet dat ik de blockmove nodig heb maar ik moet een tellertje maken en deze DB 11 keer wegschrijven , bij 11 VERSCHILLENDE cyclussen ...
Dus bij 1ste keer naar DB101 2de keer bij 102 enzo
als de teller een waarde heeft van 11 moet deze opnieuw gereset worden...

Wie kan me helpen :o :?: :?: :?: :?:

JvdM
Berichten: 81
Lid geworden op: 21-12-2005 16:22:22
Locatie: Rijen
Contacteer:

Bericht door JvdM » 17-11-2006 11:12:10

Een heel eenvoudige methode is dit:

Kopieer de DB's met de SFC20 functie
Vul bij SRCBLK de DB in die je wil kopieeren, bv P#DB1.DBX0.0 INT 50 (dit is dan DB1.DBW0 t/m 100)
Vul bij DSTBLK de DB waar het naar toe moet bv P#DB101DBX0.0 INT 50
Vul bij RET_VAL een adres in waar het resultaat van de bewerking (evt foutmeldingen ) naar toe kan bv DB99.DBW0
En vul dan bij EN de voorwaarde in waneer er gekopieerd moet worden, bv als de teller op 1 staat wordt DB1 gekopieerd naar DB101

Succes :wink:
Automatisering = industrieële Choreografie

Nassie
Berichten: 3
Lid geworden op: 13-11-2006 15:18:42
Locatie: Diepenbeek

Bericht door Nassie » 17-11-2006 17:02:18

Ik heb eerst een speciale FC aangemaakt

dit is em :

FUNCTION FC200 : VOID
TITLE =transfer bytes between db's
//Transfer bytes of data between data blocks using SFC20
//
VAR_INPUT
dbSourceDB : BLOCK_DB ; //source data block
iSourceDBNumber : INT ; //source data block number (set to zero to use above)
iSourceByteOffset : INT ; //source data byte offset
dbDestinationDB : BLOCK_DB ; //destination data block
iDestinationDBNumber : INT ; //destination data block number (set to zero to use above)
iDestinationByteOffset : INT ; //destination data byte offset
iNumberOfBytes : INT ; //number of bytes to xfer
END_VAR
VAR_OUTPUT
iMoveResult : INT ; //result from block xfer SFC20
END_VAR
VAR_TEMP
pSourceDB : ANY ;
pDestDB : ANY ;
END_VAR
BEGIN
NETWORK
TITLE =any pointer for source
LAR1 P##pSourceDB;
L W#16#1002; //specify ANY pointer, type 02 = BYTE
T W [AR1,P#0.0];
L #iNumberOfBytes; //number of bytes to transfer
T W [AR1,P#2.0];
L 0;
L #iSourceDBNumber; //if iSourceDBNumber = 0 then
==I ; // opn db and use DBNO to find number
JC opnS; // else use iSourceDBNumber
JU trnS;
opnS: OPN #dbSourceDB;
L DBNO; //data block to use
trnS: T W [AR1,P#4.0];
L DW#16#84000000; //global data block for area pointer
L #iSourceByteOffset;
SLD 3;
+D ;
T D [AR1,P#6.0]; //start of data block
NETWORK
TITLE =any pointer for destination
LAR1 P##pDestDB;
L W#16#1002; //specify ANY pointer, type 02 = BYTE
T W [AR1,P#0.0];
L #iNumberOfBytes; //number of bytes to transfer
T W [AR1,P#2.0];
L 0;
L #iDestinationDBNumber; //if iDestinationDBNumber = 0 then
==I ; // opn db and use DBNO to find number
JC opnD; // else use iDestinationDBNumber
JU trnD;
opnD: OPN #dbDestinationDB;
L DBNO; //data block to use
trnD: T W [AR1,P#4.0];
L DW#16#84000000; //global data block for area pointer
L #iDestinationByteOffset;
SLD 3;
+D ;
T D [AR1,P#6.0]; //start of data block
NETWORK
TITLE =copy data
CALL "BLKMOV" (
SRCBLK := #pSourceDB,
RET_VAL := #iMoveResult,
DSTBLK := #pDestDB);
NOP 0;
NETWORK
TITLE =Make sure the ENO shows the BLKMOV result
A BR; // BR is 1 for no error
JC ok;
JU nok;
ok: SET ; // Make the ENO high
SAVE ;
JU end;
nok: CLR ; // Make the ENO low
SAVE ;
end: NOP 0;
END_FUNCTION

Daarna heb ik zelf een tellertje aangemaakt die statusbits gaat setten etc en dan deze db's gaat kopieren

A "Einde proces"
S "DB100".Statusbit


L 100 // Beginnende DB = DB100
T MW 148 // in MW 148 staat de DB waarde
A "DB100".Statusbit // een bitje om te weten als de DB100 geset is
JNB _089
L MW 148
L 1 // telt telkens 1 bij om naar de volgende DB weg te schrijven
+I
T MW 148
R "DB100".Statusbit
_089: NOP 0

Ukkelpuk
Berichten: 41
Lid geworden op: 09-12-2004 12:16:03
Locatie: Alken, Belgie

Bericht door Ukkelpuk » 17-11-2006 18:41:09

Hier nog een andere oplossing

Inporteren in scour file en compeleren


FUNCTION FC 110 : INT
TITLE =MoveData
AUTHOR : BangelsL
FAMILY : BLE
NAME : MOVE_DB
VERSION : 0.1


VAR_INPUT
BRON_DB : INT ;
BRON_ADRES : INT ;
DOEL_DB : INT ;
DOEL_ADRES : INT ;
AANTAL_BYTES : INT ;
END_VAR
VAR_TEMP
SRC_Any : ANY ;
DST_Any : ANY ;
END_VAR
BEGIN
NETWORK
TITLE =

LAR1 P##SRC_Any; // Quell Pointer zusammenbasteln
L B#16#10;
T LB [AR1,P#0.0]; // Syntax-ID in den Any-Pointer eintragen
L B#16#2;
T LB [AR1,P#1.0]; // Bereichstyp BYTE laden und im Any-Pointer ablegen
L #AANTAL_BYTES;
T LW [AR1,P#2.0]; // Anzahl der zu übertragenden Bytes eintragen
L #BRON_DB;
T LW [AR1,P#4.0]; // Quell-DB-Nummer eintragen
L P#DBX 0.0; // Bereichspointer...
L #BRON_ADRES; // Startadresse...
SLD 3; // in Pointerformat wandeln
+D ; // zum Bereichspointer addieren
T LD [AR1,P#6.0]; // Ergebnis in ANY-Ptr eintragen

LAR1 P##DST_Any; // Ziel Pointer zusammenbasteln
L B#16#10;
T LB [AR1,P#0.0]; // Syntax-ID in den Any-Pointer eintragen
L B#16#2;
T LB [AR1,P#1.0]; // Bereichstyp BYTE laden und im Any-Pointer ablegen
L #AANTAL_BYTES;
T LW [AR1,P#2.0]; // Anzahl der zu übertragenden Bytes eintragen
L #DOEL_DB;
T LW [AR1,P#4.0]; // Ziel-DB-Nummer eintragen
L P#DBX 0.0; // Bereichspointer...
L #DOEL_ADRES; // Startadresse...
SLD 3; // in Pointerformat wandeln
+D ; // zum Bereichspointer addieren
T LD [AR1,P#6.0]; // Ergebnis in DST-Ptr eintragen
NETWORK
TITLE =

CALL SFC 20 (
SRCBLK := #SRC_Any,
RET_VAL := #RET_VAL,
DSTBLK := #DST_Any);
NOP 0;
END_FUNCTION

Plaats reactie

Terug naar “Anders”