-> Hier kostenlos registrieren
Noch mal Hallo an alle! (( =
Habe hier vor ein paar Tagen einen Thread gesehen in dem es drum ging einen DB automatisch zufüllen, finde diesen leider nicht mehr... =//
Ich habe vor einen DB (DB11) bei Anlauf der SPS (Neustart / Warmstart,...) Automatisch über einen FC(FC41) füllen zulassen.
Habe schon was zusammengeschrieben, finde nach 2-4 Stunde finde ich habe ich wieder mal keinen Ansatz woran es liegen könnte!?
Daher wäre es nett, wenn Jemand noch mal drüber schaut! (( =
Und weiterhin vorab, ja habe es evtl. mit den Kommentaren übertrieben! ((; Und nicht jeder Kommentar trifft noch zu!
[FONT="]Soweit erst mal danke an Alle! [ =
PS:
Wie kann man einen OB/FB/FC in Step7 So "heraus kopieren"?
Mache das z.Z. über WIN-SPS... =//
[/FONT]
Habe hier vor ein paar Tagen einen Thread gesehen in dem es drum ging einen DB automatisch zufüllen, finde diesen leider nicht mehr... =//
Ich habe vor einen DB (DB11) bei Anlauf der SPS (Neustart / Warmstart,...) Automatisch über einen FC(FC41) füllen zulassen.
Habe schon was zusammengeschrieben, finde nach 2-4 Stunde finde ich habe ich wieder mal keinen Ansatz woran es liegen könnte!?
Daher wäre es nett, wenn Jemand noch mal drüber schaut! (( =
Und weiterhin vorab, ja habe es evtl. mit den Kommentaren übertrieben! ((; Und nicht jeder Kommentar trifft noch zu!
[FONT="]Soweit erst mal danke an Alle! [ =
PS:
Wie kann man einen OB/FB/FC in Step7 So "heraus kopieren"?
Mache das z.Z. über WIN-SPS... =//
[/FONT]
Code:
FUNCTION FC41:VOID
TITLE=
AUTHOR:nb
FAMILY:nb
NAME:nb
VERSION:00.01
VAR_TEMP
tSensor:UDT11;
tZielDBXANYP:ANY;
tSensorANYP:ANY;
tSchrittWW:WORD;
tStartAdrZielDbW:WORD;
tStopBgKAdrINT:INT;
tAnzLOOPsW:WORD;
tRetValSFC20INT:INT;
tBgKAdrINT:INT;
tStartBgKAdrINT:INT;
tSensorNrINT:INT;
tSchrittWBgKAdrINT:INT;
tZielDBNrW:WORD;
END_VAR
BEGIN
NETWORK
TITLE=
//*****************************************************************************************//
//*****************************************************************************************//
// Tämporäre Globale Deklation
//*****************************************************************************************//
L W#16#000B; // Lade die Nummer des Ziel DBs
T #tZielDBNrW;
L W#16#0006;
T #tSchrittWW;
L W#16#0000;
T #tStartAdrZielDbW;
L 320;
T #tStartBgKAdrINT;
L 366;
T #tStopBgKAdrINT;
L 2;
T #tSchrittWBgKAdrINT;
// Berechne LOOPs
L #tStopBgKAdrINT;
L #tStartBgKAdrINT;
-I;
T #tAnzLOOPsW;
//*****************************************************************************************//
//*****************************************************************************************//
// ZEIGER FÜR KOPIERN AUS / IN DEN DATENBAUSTEIN BAUEN
//*****************************************************************************************//
//*****************************************************************************************//
// Baue Zeiger für tZielDBXANYP
//*****************************************************************************************//
LAR1 P##tZielDBXANYP; // Lade Adresse des zielANYPDbx
L B#16#10; // Lade Wert für einen Bereichsübergeifender Zeiger
T LB [AR1,P#0.0]; // Speicher "B#16#10" an die Stelle des zielANYPDbx mit dem "offset" P#0.0
L B#16#02; // Lade Typ: Byte
T LB [AR1,P#1.0]; // Speicher Typ Byte an die Stelle des zielANYPDbx mit dem "offset" P#1.0
L #tSchrittWW; // Lade schrittweite / Bytes die geschrieben werden sollen.
T LW [AR1,P#2.0]; // ... mit dem offset P#2.0
L #tZielDBNrW; // Lade die Nummer des Ziel DBs
// L DINO // Lade die FB DBnr
T LW [AR1,P#4.0]; // ... mit dem offset P#4.0
// Bereichszeiger zusammenstellen
L #tStartAdrZielDbW; // Lade Start Adresse innerhalb des Ziel DBs
SLD 3; // Um 3 bit links schieben
T LD [AR1,P#6.0]; // ... mit dem offset P#6.0
L B#16#87; // Lade 84h (Bereichsübergreifend, Globaldaten) // DB11 ist Global
T LB [AR1,P#6.0]; // Überschreibe Byte 1 des Bereichszeigers
//****************************************************************************//
// Baue Zeiger für tSensorANYP
// !!!ACHTUNG!!! -->> dIGNOR!!!
// Im Speicher MUSS tBgKAdrINT vor tSensorNrINT stehen und beides NACH ein-
// ander, da die zwei Variabeln an die Start Adresse von tBgKAdrINT
// gekoppelt sind!!!
//****************************************************************************//
LAR1 P##tSensorANYP;
L B#16#10;
T LB [AR1,P#0.0]; // Speicher "B#16#10" an die Stelle des zielANYPDbx mit dem "offset" P#0.0
L B#16#02; // Lade Typ: Byte
T LB [AR1,P#1.0]; // Speicher Typ Byte an die Stelle des zielANYPDbx mit dem "offset" P#1.0
L #tStartAdrZielDbW; // Lade schrittweite / Bytes die geschrieben werden sollen.
T LW [AR1,P#2.0]; // ... mit dem offset P#2.0
L 0; // Lade die Nummer des Ziel DBs, da kein DB-Any Pointer ist steht hier eine
// L DINO // Lade die FB DBnr
T LW [AR1,P#4.0]; // ... mit dem offset P#4.0
// Bereichszeiger zusammenstellen
// L P##tSensor // Lade Adresse des "tSensor"
L P##tStartBgKAdrINT; // Siehe !!! ACHTUNG !!!
T LD [AR1,P#6.0]; // .. mit dem offset P#6.0
L B#16#87; // Lade 87h (Bereichsübergreifend, temporäre Lokaledaten des Vorgängerbausteins)
T LB [AR1,P#6.0]; // Überschreibe Byte 1 des Bereichszeigers
//****************************************************************************//
//****************************************************************************//
// Beginn der Schleife
//****************************************************************************//
L #tAnzLOOPsW;
L001 :T #tAnzLOOPsW;
L 0;
NOP 0;
L 1;
L 0;
//****************************************************************************//
// Aktueller Werte in DB11 Kopieren,
// über die AnyZeiger tSensorANYP und tZielDBXANYP
//****************************************************************************//
CALL SFC 20(
SRCBLK:=#tSensorANYP,
RET_VAL:=#tRetValSFC20INT,
DSTBLK:=#tZielDBXANYP);
//****************************************************************************//
// Baugruppenadresse + Kanallnummer Aktualisieren
//****************************************************************************//
L #tSchrittWBgKAdrINT;
L #tStartBgKAdrINT;
+I;
T #tStartBgKAdrINT;
L #tStartAdrZielDbW;
//****************************************************************************//
// Neuer Bereichszeiger für tStartAdrZielDbW zusammenstellen
//****************************************************************************//
// Einen Schritt weiter gehen im DB11
L #tStartAdrZielDbW;
L #tSchrittWW;
+I;
T #tStartAdrZielDbW;
// Neuer Bereichszeiger für für tStartAdrZielDbW
LAR1 P##tZielDBXANYP; //Lade Adresse des tZielDBXANYP
L #tStartAdrZielDbW; // Lade die NEUE Start Adresse innerhalb des Ziel DBs
SLD 3; // um 3 bit links schieben
T LD [AR1,P#6.0]; // ... mit dem offset P#6.0
L B#16#87; // Lade 87h (Bereichsübergreifend, temporäre Lokaledaten des Vorgängerbausteins)
T LB [AR1,P#6.0]; // Überschreibe Byte 1 des Bereichszeigers
//****************************************************************************//
// schreifen ende
//****************************************************************************//
L #tAnzLOOPsW;
// L 1
// -I
// T #tAnzLOOPsW
LOOP L001;
//****************************************************************************//
//****************************************************************************//
END_FUNCTION
Anhänge
Zuletzt bearbeitet: