Im Datenbaustein Bereiche um kopieren - schmitz- · PDF fileIm Datenbaustein Bereiche um...
Transcript of Im Datenbaustein Bereiche um kopieren - schmitz- · PDF fileIm Datenbaustein Bereiche um...
Im Datenbaustein Bereiche um kopieren
Die Aufgabe besteht darin, das wir in einem Datenbaustein, hier im Beispiel DB1,Datenfelder[1] bis Datenfelder [10] anlegten. Die jeweiligen Datenfelder[] beinhalteten10 Bytes (10 mal 8 Bits) oder auch 5 Worte. Nun sollte in Abhängigkeit von Parameter, genannt Quelle, die Daten in den Zielbereichum kopiert werden. Wir wollen zum Beispiel 10 Bytes von Datenfeld[5] in dasDatenfeld[1] umladen oder um kopieren. KlassischeAnwendung Rezeptur.
Das Umladen wird impulsgesteuert einmaligvollzogen.Beginn:Ich legte zuerst eine UDT 1, einen sogenanntenanwenderdefinierten Datentyp an. Dann erzeugte icheinen Datenbaustein DB1 in Verbindung mit dem UDT 1. Im DB legt ich einen ARRAY[0..10] mitBezug zum UDT 1 an. Dann programmierte ich eineFunktion FC1. Dort programmierte ich einigeHilfsfunktionen, wie z.B. Daten in Datenbaustein mitWerte füllen usw.Jetzt stellt sich die Frage, wie mache ich nun diesesUmladen? Es gibt einige Lösungen, hier in meinemBeispiel habe ich 5 verschiedene Lösungsvorschlägeintegriert.1. die S7-Code Variante, mittels Schleife2. die SCL-Code Variante, Hochsprache3. die IBLKMOV Variante, TI-S7 Converting Blocks4. die SFC20 Variante, Systemfunktionen, fest5. SFC20 Variante, variabel
Es gibt noch weitere Möglichkeiten wie z.B. mittels S7-Programm und Sprungfunktonen.Doch hier sind nur die oben beschrieben Variante beschrieben.
Um mit dem Programmcode zu arbeiten bzw. zu verstehen, sind einige Kenntnisse zurArchitektur der CPU und den Registern notwendig. Deshalb habe ich kurz einige Informationen zusammen getragen. Um derQuellenamnestie vorzubeugen, nenne ich die Quellen, worauf ich zurück gegriffenhaben:
• SIMATIC S7 Upgrade S5-S7, Trainis-Center, 1999
• Automatisierung mit STEP 7 in AWL, Hans Berger, 1998
• Automatisieren mit STEP 7 in AWL und SCL, Hans Berger, 2008
• Einführung in der STEP 7 – Programmierung, Teil 1 -3, SPS-Magazin 99
• seit 1987 Programmiererfahrung in der Industrie
• SIMATIC Manager Version 5.4 SP2, Onlinehilfe
• Simulator als Bestandteil des S7 Software
http://Schmitz-Blanke.de/ D:\Eigene_Dateien\001_Dokumente\001_Word_OpenOffice\Adressierung_S7_2009.odt
Datenfeld[1]10 Byte
Datenfeld[5]10 Byte
Datenfeld[10]10 Byte
DBB 0
DBB 9
DBB 40
DBB 49
DBB 90
DBB 99
DB 1 .
Adressierung in der Steuerung S7 ( Siematic )
In den S7 CPUs der Serie 300er und 400er, sowie die Software – CPU RTX sind dieRegister gleich aufgebaut.
Aufbau, Architektur der Adressregister, Akkumulatoren, DB, und DI-Register
http://Schmitz-Blanke.de/ D:\Eigene_Dateien\001_Dokumente\001_Word_OpenOffice\Adressierung_S7_2009.odt
P#20.0
U E [AR1, P#3.1]
AR1
U E 23.1
+P # 3.1
P#M20.0
L B [AR1, P#4.0]
AR1
L MB 24
+P # 4.0
Bereichszeiger
x = Bitadresse; y = Byteadresse; z = Bereich Der z-Bereich ist wie folgt festgelegt: siehe Bild Akkumulator
0 0 0 P = Peripherie
0 0 1 E = Eingänge
0 1 0 A = Ausgänge
0 1 1 M = Merker
1 0 0 DBX = Globaldaten
1 0 1 DIX = Instanzdaten
1 1 0 L = temporäre Daten
1 1 1 Temporäre Daten
Hier einige Beispiele zu der indirekten Adressierung
speicherindirekte Adressierung mit BereichszeigerL P#10.0 // Zeiger in den Akku 1 ladenT MD20 // ins Merkerdoppelwort rettenL MW[MD20] // digital adressieren. . . . . // weitere S7-CodeU M[MD20] // binär adressieren
speicherindirekte Adressierung mit NummerL 145 // Zeiger in den Akku 1 ladenT MW20 // ins Merkerwort rettenAUF DB[MW20] // Global-DB aufmachen. . . . . // weitere S7-CodeSE T[MW20] // Zeit starten (T 145)
registerindirekte bereichsinterne Adressierung LAR1 P#20.0 // Zeiger in das Adressrigister 1 laden. . . . . // L MW[AR1,P#4.1] // digital adressieren. . . . . // weitere S7-CodeU E[AR1,P#3.1] // binär adressieren
registerindirekte bereichsübergreifende Adressierung LAR1 P#M20.0 // Zeiger in das Adressrigister 1 laden. . . . . // L B[AR1,P#4.0] // digital adressieren. . . . . // weitere S7-CodeS A[AR1,P#8.7] // binär adressieren
http://Schmitz-Blanke.de/ D:\Eigene_Dateien\001_Dokumente\001_Word_OpenOffice\Adressierung_S7_2009.odt
P#10.0
U M [MD20] MD20
U M 10.0
145
AUF DB [MW20] MW20
AUF DB 145
Pointer oder DB-Zeiger
Ein Pointer oder DB-Zeiger kann wie folgt nur als Parameter-Eingang an einem FC oderFB übergeben werden, er sieht wie folgt aus:
z.B. P#DB2.DBX0.0 Er ist 48 Bit bzw. 6 Byte groß.
Dieser Pointer kann nicht in den Akku und auch nicht in die Adressregister direktgeladen werden. Er kann jedoch z.B in einem DB (6 Byte) erzeugt und manipuliertwerden. Hier der Aufbau des DB-Zeiger
u = Datenbausteinnummer, 215 entspricht 32768, (abhängig von CPU);x = Bitadresse, 23 entspricht 8, adressierbar von 0 bis 7;y = Byteadresse, 215 entspricht 32768, (abhängig von CPU);z = Bereich, 23 Bitmuster und Bedeutung siehe unten;
0 0 0 P = Peripherie
0 0 1 E = Eingänge
0 1 0 A = Ausgänge
0 1 1 M = Merker
1 0 0 DBX = Globaldaten
1 0 1 DIX = Instanzdaten
1 1 0 L = temporäre Daten
1 1 1 Temporäre Daten
DB-Zeiger, andere Darstellung mit Beispiel
Byte Bedeutung z.B. DB2.wort Beispiel, Wert
n Datenbaustein- D B 2. D B B 0 00
n +1 nummer D B 2. D B B 1 01
n + 2 Operandenbereich D B 2. D B B 2 B#10000100
n + 3 Byte-Adresse D B 2. D B B 3 00
n + 4 Byte-Adresse D B 2. D B B 4 00
n + 5 Byte.Bit-Adresse D B 2. D B B 5 B#01010000
Im DB2.DBX0.0 (6Byte) ist der Pointer P#DB1.DBX10.0 adressiert.DB2.[DBB0][DBB1][DBB2][DBB3][DBB4][DBB5] immer rechtsbündig.
http://Schmitz-Blanke.de/ D:\Eigene_Dateien\001_Dokumente\001_Word_OpenOffice\Adressierung_S7_2009.odt
Ber
eich
szei
ger
y y y y y x x xy y y y y y y y0 0 0 0 0 y y y1 0 0 0 0 z z zu u u u u u u uu u u u u u u u
DB-Zeiger (immer rechtsbündig)Byte n Byte n+1 Byte n+2 Byte n+3 Byte n+4 Byte n+5
z.B. DB2.DBB0 --- DBB5
Programm
Der SIMATIC Manager mit den Datenbausteine, UDTs, FCs usw.
Der DB1 mit dem ARRAY[0..10]
OB1, Hauptprogramm
Als Schmankerl, habe ich ab Netzwerk 13, eine komfortable Adressierung mittels SFC20BLKMOV und variabler Adressierung mit ANY_Zeiger und Lokalvariable programmiert.
FC1, Programm
http://Schmitz-Blanke.de/ D:\Eigene_Dateien\001_Dokumente\001_Word_OpenOffice\Adressierung_S7_2009.odt
SIMATIC S7_Adressierung\SIM ATIC 10.12.2009 21:59:35 300-Station\CPU312C(1)\...\FC 1 - <offline>
Sylvio Blanke Seite 1 von 9
FC1 - <offline>"Block_laden" Test FC zur Datenübertragung Beis piel , von Sylvio Blanke Dez. 2009Name: Familie:Autor: Version: 0.1
Bausteinversion: 2Zeitstempel Code:
Interface:10.12.2009 21:59:2808.12.2009 23:12:29
Längen (Baustein / Code / Daten): 00944 00800 00034
Name Datentyp Adresse Kommentar
IN 0.0
OUT 0.0
IN_OUT 0.0
TEMP 0.0
ANY_Zeiger Any 0.0 Lokalvariable Any-Zeiger 10 By te lang
SCHM Word 10.0 Schmierwort
RETURN 0.0
RET_VAL 12.0
Baustein: FC1 Test FC zur Datenübertragung mittels verschiedenen Verfahren
Dieser Baustein besteht aus: +--------------------+ ! Impulserzeugung ! +---------!----------+ ! +----Impuls ----+ Ja Nein ! ! +----------------+ ! ! Daten erzeugen ! ! +-------!--------+ ! ! ! +----->!<-------+ _____ ab hier werten die Beispiele für die Daten übertragung Umladung hintereinader, berarbeitet (gleiches Muste r) ! ! +--------------------+ ! Impulserzeugung ! +---------!----------+ ! +----Impuls------+ Ja Nein ! ! +----------------+ ! ! Daten umladen ! ! +-------!--------+ ! ! ! !<---------------* 1 Bausteinende
SIMATIC S7_Adressierung\SIM ATIC 10.12.2009 21:59:35 300-Station\CPU312C(1)\...\FC 1 - <offline>
Sylvio Blanke Seite 2 von 9
Netzwerk: 1 Dient der Impulserzeugung, in DB1 Daten füllen
ImpulserzeugenMB 1 ist ein Zeit bzw. Taktgeber, in der CPU als Ta ktmerker fest eingestellt MB1 = 0 0 0 0 0 0 0 0 ! +---> 2 Hz _ _ +-----------> 0,5 Hz _! !_! !_ . . . M2.1 wird nur ein Zyklus (CPU-Takt) _/\__/\__ . . .
=P
&M1.4M1.4
Blinktakt0,125 Hz
"M 1.4"
M10.0M10.0Daten im
DB1 füllen"M 10.0"
M2.0M2.0Flankenmer
ker 1"M 2.0"
M2.1M2.1Impuls 1"M 2.1"
SymbolinformationM1.4 M 1.4 Blinktakt 0,125 HzM10.0 M 10.0 Daten im DB1 füllenM2.0 M 2.0 Flankenmerker 1M2.1 M 2.1 Impuls 1
Netzwerk: 2
UN "M 2.1" // Impuls M2.1 -- Impuls 1 SPB Ende // wenn keiner dan Ende
// Ab hier füllen wir den DB1 mit daten// Erster Datensatz
AUF "Probe DB" // Db aufschlagen, oder besse r DB-Rigister adressieren
DB1 -- Probe Datenbaustein
L DBW 10 // jetzt können wir vereinfache n, kürzer als L DB1.DBW10 L 1 // Konstante laden +I // addieren T DBW 10 // und zurückschreiben
L DBW 12 // Variable 1 laden + B#16#1 // Konstante 1 und addieren T DBW 12 // Wert wieder zurück schreiben SLW 1 //SChiebe den Akku 1 nach links (*2) T DBW 14 SLW 1 T DBW 16 SLW 1 T DBW 18
// Zweiter Datensatz
L DBW 10 L 2 *I T DBW 20 + B#16#1 T DBW 22 + B#16#1 T DBW 24 + B#16#1 T DBW 26 + B#16#1 T DBW 28
// dritter Datensatz
L DBW 10 L 3 *I T DBW 30 + B#16#1 T DBW 32 + B#16#1 T DBW 34 + B#16#1 T DBW 36 + B#16#1 T DBW 38
SIMATIC S7_Adressierung\SIM ATIC 10.12.2009 21:59:35 300-Station\CPU312C(1)\...\FC 1 - <offline>
Sylvio Blanke Seite 3 von 9
// vierter Datensatz
L DBW 10 L 4 *I T DBW 40 + B#16#1 T DBW 42 + B#16#1 T DBW 44 + B#16#1 T DBW 46 + B#16#1 T DBW 48
// fünfter Datensatz
L DBW 10 L 5 *I T DBW 50 + B#16#1 T DBW 52 + B#16#1 T DBW 54 + B#16#1 T DBW 56 + B#16#1 T DBW 58
Ende: NOP 0
Netzwerk: 3 Dient der Impulserzeugung, zur Pro be nur einmal ausführen
Impuls für daten umladen, nur einmal wenn M10.1 ges etzt, mittels S7 Programmcode
=
P
M2.2M2.2Flankenmer
ker 2"M 2.2"
M10.1M10.1Datenübertragung S7
- Code"M 10.1"
M2.3M2.3Impuls 2"M 2.3"
SymbolinformationM2.2 M 2.2 Flankenmerker 2M10.1 M 10.1 Datenübertragung S7 - CodeM2.3 M 2.3 Impuls 2
Netzwerk: 4 Datenübertragung mittels S7 Code u nd Schleifenprogrammierung
Die Beschreibung gilt für den ersten Durchlauf (zum Verständnis) Über den Aufbau und die Architektur der Adressierun g habe ich ein Pamphlet (Erklärung) erstellt. Dezember 2009 / SBL
UN "M 2.3" // Impulsauswertung, nur einmal umladen M2.3 -- Impuls 2 SPB WeiA
// Vorbereitung Datenumladen
AUF "Probe DB" // [DB-Register] der Vorstän digkeit Quell_DB aufmachen
DB1 -- Probe Datenbaustein
AUF DI 1 // [DI-Register] Ziel_Db Aufmac hen (geht nicht symbolisch)
// Verwendung der Adressregister LAR1 P#DBX 10.0 // Adressregister 1 mit Quell e laden LAR2 P#DIX 0.0 // Adressregister 2 mit Ziel l aden
L 5 // SchleifenzählerSchl: T "MW 100" // Hilfsregister Schleifenzähle r Wert ret
tenMW100 -- Schleifenzähler für die Datenübertragung S7- Code
L W [AR1,P#0.0] // Lade erster Wert Daten- Quelle (AR1=DBX10.0+P#0.0 ....) T W [AR2,P#0.0] // Lade erster Wert Daten- Ziel (AR2=DBX0.0+P#0.0 ....) +AR1 P#2.0 // Adiere zum AR1=DBX10.0 + P#2.0 wird AR1=DBX12.0 ....) +AR2 P#2.0 // Adiere zum AR2=DBX0.0 + P#2.0 w ird AR2=DBX2.0 ....) L "MW 100" // Schleifenzähler wieder in Ak ku 1 lade
nMW100 -- Schleifenzähler für die Datenübertragung S7- Code
LOOP Schl // LOOP subtrahiert im Akku 1 = 5 - 1 Akku 1 = 4 dann Springen > 0...)
SIMATIC S7_Adressierung\SIM ATIC 10.12.2009 21:59:35 300-Station\CPU312C(1)\...\FC 1 - <offline>
Sylvio Blanke Seite 4 von 9
WeiA: NOP 0
Netzwerk: 5 Dient der Impulserzeugung, zur Pro be nur einmal ausführen
Datenübertragung mittels erstelltem FC100 mit der S truktursprache SCL
=
P
M2.4M2.4Flankenmer
ker 3"M 2.4"
M10.2M10.2Datenübert
ragungmit FC100
"M 10.2"
M2.5M2.5Impuls 3"M 2.5"
SymbolinformationM2.4 M 2.4 Flankenmerker 3M10.2 M 10.2 Datenübertragung mit FC100M2.5 M 2.5 Impuls 3
Netzwerk: 6 Datenübertragung mittels FC100 / S Cl Code
FC100 / Datenübertragung BLOCK_FC, in diesem Beispi el werden Datenbereiche im DB1 umkopiert oder besser übertragen EN = bei 1, einmal ausführenQuelle = aus dem Datenbaustein 1, Datensatz (10 Bytes) hier Datensatz[3]Ziel = in den Datenbaustein 1, in den Datensat z (10 Bytes) hier Datensatz[2]
FC100
M2.5M2.5Impuls 3
"M 2.5" EN
3 Quelle
2 Ziel ENO
SymbolinformationM2.5 M 2.5 Impuls 3
Netzwerk: 7 Dient der Impulserzeugung, zur Pro be nur einmal ausführen
Datenübertragen mittels FC81 siehe folgende
=
P
M2.6M2.6Flankenmer
ker 4"M 2.6"
M10.3M10.3Datenübert
ragungmit FC81
"M 10.3"
M2.7M2.7Impuls 4"M 2.7"
SymbolinformationM2.6 M 2.6 Flankenmerker 4M10.3 M 10.3 Datenübertragung mit FC81M2.7 M 2.7 Impuls 4
Netzwerk: 8
DB-Zeiger es gilt: DB-Zeiger [Byte n][Byte n+1][Byte n+2][Byte n+3][B yte n+4][Byte n+5] DB2. [ DBB 0][ DBB 1 ][ DBB 2 ][ DBB 3 ][ DBB 4 ][ DBB 5 ] Die Betrachtung ist immer rechtsorientiert. Byte n = Datenbausteinnummer (High-Byte) Byte n+1 = Datenbausteinnummer (Low-Byte ) Byte n+2 = Bereichszeiger (Byte n Operandenbere ich B#2#10000zzz ) Byte n+3 = Bereichszeiger (Byte n+1 Operandenbere ich B#2#00000yyy ) Byte n+4 = Bereichszeiger (Byte n+2 Operandenbere ich B#2#yyyyyyyy )
SIMATIC S7_Adressierung\SIM ATIC 10.12.2009 21:59:35 300-Station\CPU312C(1)\...\FC 1 - <offline>
Sylvio Blanke Seite 5 von 9
Byte n+5 = Bereichszeiger (Byte n+3 Operandenbere ich B#2#yyyyyxxx ) Bedeutung zzz 000 = Peripherie P 001 = Eingänge E 010 = Ausgänge A 011 = Merker M 100 = Globaldaten DBX 101 = Instanzdaten DIX 110 = tempräre Lokaldaten L 111 = temporäre Lokaldaten vorgän gerbaustein V yyy Byte-Adresse 0 bis 32768 xxx Bit-Adresse 0 bis 7 Diese allgemeine Beschreibung gilt für Quell und Zi elparameter ! Dezember 2009 / SBL
UN "M 2.7" M2.7 -- Impuls 4 SPB Nie1// Vorbelegung des Quell-Zeigers Pointer, es soll d er Quell-Zeiger P#DB1.DBX10.0 adressiert werden
AUF "Lokal-DB" // DB2 Zeiger oder Pointer DB aufschlagen DB2 -- Pointer zum Umlad en L 2#0 // Konstante 0 T DBB 0 // Byte n
L 2#1 // Datebbausteinnummer 1 T DBB 1 // Byte n+1
L 2#10000100 // Globaldaten DBX T DBB 2 // Byte n+2
L 2#0 // Byte-Adresse 00000yyy T DBB 3 // Byte n+3
L 2#0 // Byte-Adresse yyyyyyyy T DBB 4 // Byte n+4
L 2#1010000 // Byte-Adresse 10. Bit-Adress e 0 yyyyyxxx T DBB 5 // Byte n+5
// Länge der übertragenen Daten, am FC81 E-Typ habe ich o4=Word eingestellt, deshalb die 5, fünf Worte
L 5 // 5 Worte übertragen T DBW 6 // das Längewort belegen
// Vorbelegung des Ziel-Zeigers Pointer, es soll de r Ziel-Zeiger P#DB1.DBX0.0 adressiert werden
L 2#0 // Konstante 0 T DBB 8 // Byte n
L 2#1 // Datebbausteinnummer 1 T DBB 9 // Byte n+1
L 2#10000100 // Globaldaten DBX T DBB 10 // Byte n+2
L 2#0 // Byte-Adresse 00000yyy T DBB 11 // Byte n+3
L 2#0 // Byte-Adresse yyyyyyyy T DBB 12 // Byte n+4
L 2#0 // Byte-Adresse 10. Bit-Adresse 0 y yyyyxxx T DBB 13 // Byte n+5
Nie1: NOP 0 // Soweit die Vorbelegung.. komplizier t, nein, hierzu meine Beschreibung Adressierung lesen
Netzwerk: 9 Datebworte umladen mit der FC81 Fu nktion
Parameter von FC81 (dieser Baustein findet man wenn man die Übersicht einschaltet, unter Bibliotheken/Standrad Libory/TI- S7Converting Blocks ParameterDeklarationDatentypSpeicherbereichBeschrei bungEN EingangBOOLE, A, M, D, LDer Signalzustand " 1" am Fre igabeeingang akt iviert die Box.ENO AusgangBOOLE, A, M, D, LDer Freigabeausgan g hat den Sig nalzustand "1", wenn die Fun ktion fehlerfrei ausgeführt wir d.S_DATA Eingang *PointerE, A, M, DZeigt auf ein en Pointer, der die Anf angsadresse der Quelle ang ibt.LENGTH Eingang *PointerE, A, M, DZeigt auf die Länge des
SIMATIC S7_Adressierung\SIM ATIC 10.12.2009 21:59:35 300-Station\CPU312C(1)\...\FC 1 - <offline>
Sylvio Blanke Seite 6 von 9
Dat enbereichs, der übertragen wer den soll.D_DATA Eingang *PointerE, A, M, DZeigt auf ein en Pointer, der die Anf angsadresse des Ziels angibt.E_TYPE EingangBYTEE, A, M, D, LGibt den Datent yp an. Folgende Wer te sin d für E_TYPE gültig: B#1 6#02 = BYTE B#1 6#04 = WORD B#1 6#05 = INT B#1 6#06 = DWORD B#1 6#07 = DINT B#1 6#08 = REAL
"IBLKMOV"
FC81FC81Indirect Block Move
M2.7M2.7Impuls 4
"M 2.7" EN
P#DB2.DBX0P#DB2.DBX0.0.0
DB-Zeiger6 Byte /
Quelle"Lokal-
DB".Quelle_
Zeiger S_DATA
DB2.DBW6DB2.DBW6Länge der
Uebertragung
"Lokal-DB".Laenge LEN
P#DB2.DBX8P#DB2.DBX8.0.0
DB-Zeiger6 Byte /
Ziel"Lokal-
DB".Ziel_
Zeiger D_DATA
B#16#4 E_TYPE ENO
SymbolinformationFC81 IBLKMOV Indirect Block MoveM2.7 M 2.7 Impuls 4P#DB2.DBX0.0 "Lokal-DB".Quelle_Zeiger DB-Zeiger 6 Byt e / QuelleDB2.DBW6 "Lokal-DB".Laenge Länge der UebertragungP#DB2.DBX8.0 "Lokal-DB".Ziel_Zeiger DB-Zeiger 6 Byte / Ziel
Netzwerk: 10 Dient der Impulserzeugung, zur Pro be nur einmal ausführen
Datenübertragen mittels SFB20 BLKMOV
=
P
M3.0M3.0Flankenmer
ker 5"M 3.0"
M10.4M10.4Datenübert
ragungSFC20
BLOKMOV,feste
Adressierung
"M 10.4"
M3.1M3.1Impuls 5"M 3.1"
SymbolinformationM3.0 M 3.0 Flankenmerker 5M10.4 M 10.4 Datenübertragung SFC20 BLOKMOV, feste Ad ressierungM3.1 M 3.1 Impuls 5
SIMATIC S7_Adressierung\SIM ATIC 10.12.2009 21:59:35 300-Station\CPU312C(1)\...\FC 1 - <offline>
Sylvio Blanke Seite 7 von 9
Netzwerk: 11 Datenübertragung mit SFC20
Die Quellen und Zielangabe am SFC20 werden als ANY- Zeiger Format erwartet.Pointer mit Angabe der Länge hier P#DB1.DBX20.0 Byt e 10 Quellpointer P#DB1.DBX0.0 Byte 10 Zielpointer Hier fest eingestellt Datensatz[2] nach Datensatz[0 ] umladen
"BLKMOV"
SFC20SFC20Copy Variables
M3.1M3.1Impuls 5
"M 3.1" EN
P#DB1.DBX2P#DB1.DBX20.00.0
vorläufigePlatzhalt
ervariable"Probe
DB".DB_VAR[2] SRCBLK
RET_VAL
MW4MW4Schmiermer
kerwortoder auchDatengrab
"MW 4"
DSTBLK
P#DB1.DBX0P#DB1.DBX0.0.0
vorläufigePlatzhalt
ervariable"Probe DB".DB_VAR[0]
ENO
SymbolinformationSFC20 BLKMOV Copy VariablesM3.1 M 3.1 Impuls 5P#DB1.DBX20.0 "Probe DB".DB_VAR[2] vorläufige Platzha ltervariableMW4 MW 4 Schmiermerkerwort oder auch DatengrabP#DB1.DBX0.0 "Probe DB".DB_VAR[0] vorläufige Platzhal tervariable
Netzwerk: 12
// ############# Ein Beispiel wie man mittel ANY_Ze iger die Bereiche ########### // ############# adressieren kann ###########////
Netzwerk: 13 Dient der Impulserzeugung, zur Pro be nur einmal ausführen
Datenübertragen mittels SFB20 BLKMOV
=
P
M3.2M3.2Flankenmer
ker 6"M 3.2"
M10.5M10.5Datenübert
ragungSFC20,BLKMOV
mitvariabler
Adressierung
"M 10.5"
M3.3M3.3Impuls 6"M 3.3"
SymbolinformationM3.2 M 3.2 Flankenmerker 6M10.5 M 10.5 Datenübertragung SFC20, BLKMOV mit varia bler AdressierungM3.3 M 3.3 Impuls 6
Netzwerk: 14 Arbeien mit einem ANY_Zeiger
Der ANY_Zeiger ist 10 Byte lang und sihe wie folgt aus:
SIMATIC S7_Adressierung\SIM ATIC 10.12.2009 21:59:35 300-Station\CPU312C(1)\...\FC 1 - <offline>
Sylvio Blanke Seite 8 von 9
zB. P#DB1.DBX30.0 10 Byte, im temporären Bereich d es FC1 wurde ein ANY_Zeiger definiert. Die temporär en Variablen kann man mit LBx, LWx, LDx anspreche n. ANY-Zeiger für Datenbausteine z.Beispiel P# DB1.DBX30.0 10 Byte 16# in HEX 2# dual LB0 Byte n fest 16#10 16#10 LB1 Byte n+1 Type 16#02 (Byte) LB2 Byte n+2 Anzahl (highbyte) 16#00 LB3 Byte n+3 Anzahl (lowbyte) 16#0A 10 Byte LB4 Byte n+4 DB-NR (highbyte) 16#00 LB5 Byte n+5 DB-NR (lowbyte) 16#01 DB1 LB6 Byte n+6 Bereichszeiger 16#84 DBX LB7 Byte n+7 " 16#00 LB8 Byte n+8 " 16#00 LB9 Byte n+9 " 2#11110000 30.0 im untenstehenden Beispiel arbeiten wir mit LW also Lokalwort. Dezember 2009 / SBL S452
UN "M 3.3" // Impuls auswerten M3.3 -- Impuls 6 SPB www// der ANY-Zeiger wird nun mit Daten belegt
LAR1 P##ANY_Zeiger // Adressregister mit Anfa ngsadresse der temp.Variable laden Hier L0.0 L W#16#1002 // Type Byte T LW [AR1,P#0.0] // in BYte n und n+1 lade n L 10 // Anzahl der Bytes T LW [AR1,P#2.0] // in Byte n+2 und n+3 la den L 1 // DB-Nr T LW [AR1,P#4.0] // in BYte n+4 und n+5 L W#16#8400 // Operandenbereich hier DBX T LW [AR1,P#6.0] // in Byte n+6 und n+7
// wir laden hier eine Konstant zB 30 als Byteanfan gsadresse, hier kann man über MWxx xbeliebige// Werte laden. Die Byteadresse muss dreimal nach l inks geschoben werden, weil die unteren// drei Bits die Bitadresse beinhalten als 0 bis 7. Wir wollen 30.0 adressieren.
L 30 // Quellenanfang (Zeiger) wir woolen aus DB1.DBX30.0 anfangen SLW 3 // dreimal nach links (im Akku 1) T LW [AR1,P#8.0] // in Byte n+8 und n+9
// Der ANY_Zeiger sollte jetzt komplett vorbelegt s ein, war doch einfach oder ?
www: NOP 0 // Sprungmarke mit Nulloperation, ist halt so !
Netzwerk: 15 Datenübertragung mit SFC20
Die Quellen und Zielangabe am SFC20 werden als ANY- Zeiger Format erwartet.Pointer mit Angabe der Länge hier P#DB1.DBX30.0 Byt e 10 Quellpointer P#DB1.DBX0.0 Byte 10 Zielpointer Hier fest eingestellt Datensatz[2] nach Datensatz[0 ] umladen
"BLKMOV"
SFC20SFC20Copy Variables
M3.3M3.3Impuls 6
"M 3.3" EN
#ANY_Zeiger SRCBLK
RET_VAL
MW4MW4Schmiermer
kerwortoder auchDatengrab
"MW 4"
DSTBLK
P#DB1.DBX0P#DB1.DBX0.0.0
vorläufigePlatzhalt
ervariable"Probe DB".DB_VAR[0]
ENO
SymbolinformationSFC20 BLKMOV Copy VariablesM3.3 M 3.3 Impuls 6MW4 MW 4 Schmiermerkerwort oder auch Datengrab
SIMATIC S7_Adressierung\SIM ATIC 10.12.2009 21:59:35 300-Station\CPU312C(1)\...\FC 1 - <offline>
Sylvio Blanke Seite 9 von 9
P#DB1.DBX0.0 "Probe DB".DB_VAR[0] vorläufige Platzhal tervariable
Netzwerk: 16 Baustein Ende, immer mit BE abschl iessen
Sauberer Programmierstill !
BE
SIMATIC S7_Adressierung\ 10.12.2009 03:31:52 SIMATIC 300-Station\CPU312C(1)\ ...\SCL-Umladen
Seite 2 von 2
2 FUNCTION FC100 : VOID34 TITLE = 'SCL Datenuebertragung'5 //6 // DB1.DBX[x] umladen ...7 //8 VERSION : '1.0'9 AUTHOR : SBL
10 NAME : SCLUB1112 // Bausteinparameter13 VAR_INPUT14 // Eingangsparameter15 Quelle : INT ;16 Ziel : INT ;17 18 END_VAR1920 VAR_TEMP21 // temporäre Variablen22 IQuelle : INT ;23 IZiel: INT ;24 Schl: INT ;25 A : INT ;26 B : INT ;27 28 END_VAR29 BEGIN30 // Anweisungsteil31 A := 1;32 B := 1;33 IF (Quelle < 1) OR (Quelle > 5) THEN 34 // Anweisungsteil_IF35 A := 0;36 END_IF;37 IF (Ziel < 1) OR (Quelle > 5) THEN 38 // Anweisungsteil_IF39 B := 0;40 END_IF;4142 IQuelle := (Quelle - 1) * 10 * A;43 IZiel := (Ziel - 1) * 10 * B;4445 FOR Schl := 0 TO 8 BY 2 DO46 // Anweisungsteil47 DB1 . DBW[IZiel + Schl] := DB1 . DBW[IQuelle + Schl];48 END_FOR;49 50 END_FUNCTION51
2 FUNCTION FC100 : VOID34 TITLE = 'SCL Datenuebertragung'5 //6 // DB1.DBX[x] umladen ...7 //8 VERSION : '1.0'9 AUTHOR : SBL
10 NAME : SCLUB1112 // Bausteinparameter13 VAR_INPUT14 // Eingangsparameter15 Quelle : INT ;16 Ziel : INT ;17 18 END_VAR1920 VAR_TEMP21 // temporäre Variablen22 IQuelle : INT ;23 IZiel: INT ;24 Schl: INT ;25 A : INT ;26 B : INT ;27 28 END_VAR29 BEGIN30 // Anweisungsteil31 A := 1;32 B := 1;33 IF (Quelle < 1) OR (Quelle > 5) THEN 34 // Anweisungsteil_IF35 A := 0;36 END_IF;37 IF (Ziel < 1) OR (Quelle > 5) THEN 38 // Anweisungsteil_IF39 B := 0;40 END_IF;4142 IQuelle := (Quelle - 1) * 10 * A;43 IZiel := (Ziel - 1) * 10 * B;4445 FOR Schl := 0 TO 8 BY 2 DO46 // Anweisungsteil47 DB1 . DBW[IZiel + Schl] := DB1 . DBW[IQuelle + Schl];48 END_FOR;49 50 END_FUNCTION51
SIMATIC S7_Adressierung\SIMATIC 10.12.2009 22:02:15 300-Station\CPU312C(1)\...\DB1 - <offline>
Seite 1 von 1
DB1 - <offline> - Datensicht"Probe DB" Probe DatenbausteinGlobaler Datenbaustein DB 1Name: Familie:Autor: Version: 0.1
Bausteinversion: 2Zeitstempel Code:
Interface:10.12.2009 01:04:3908.12.2009 23:11:26
Längen (Baustein / Code / Daten): 00224 00110 00000
Baustein: DB1 Probe Datenbaustein
Adresse Name Typ Anfangswert Aktualwert Kommentar0.0 DB_VAR[0].Nr WORD W#16#0 W#16#02.0 DB_VAR[0].Variable_1 INT 0 04.0 DB_VAR[0].Variable_2 INT 1 16.0 DB_VAR[0].Variable_3 INT 2 28.0 DB_VAR[0].Variable_4 INT 3 310.0 DB_VAR[1].Nr WORD W#16#0 W#16#012.0 DB_VAR[1].Variable_1 INT 0 014.0 DB_VAR[1].Variable_2 INT 1 116.0 DB_VAR[1].Variable_3 INT 2 218.0 DB_VAR[1].Variable_4 INT 3 320.0 DB_VAR[2].Nr WORD W#16#0 W#16#022.0 DB_VAR[2].Variable_1 INT 0 024.0 DB_VAR[2].Variable_2 INT 1 126.0 DB_VAR[2].Variable_3 INT 2 228.0 DB_VAR[2].Variable_4 INT 3 330.0 DB_VAR[3].Nr WORD W#16#0 W#16#032.0 DB_VAR[3].Variable_1 INT 0 034.0 DB_VAR[3].Variable_2 INT 1 136.0 DB_VAR[3].Variable_3 INT 2 238.0 DB_VAR[3].Variable_4 INT 3 340.0 DB_VAR[4].Nr WORD W#16#0 W#16#042.0 DB_VAR[4].Variable_1 INT 0 044.0 DB_VAR[4].Variable_2 INT 1 146.0 DB_VAR[4].Variable_3 INT 2 248.0 DB_VAR[4].Variable_4 INT 3 350.0 DB_VAR[5].Nr WORD W#16#0 W#16#052.0 DB_VAR[5].Variable_1 INT 0 054.0 DB_VAR[5].Variable_2 INT 1 156.0 DB_VAR[5].Variable_3 INT 2 258.0 DB_VAR[5].Variable_4 INT 3 360.0 DB_VAR[6].Nr WORD W#16#0 W#16#062.0 DB_VAR[6].Variable_1 INT 0 064.0 DB_VAR[6].Variable_2 INT 1 166.0 DB_VAR[6].Variable_3 INT 2 268.0 DB_VAR[6].Variable_4 INT 3 370.0 DB_VAR[7].Nr WORD W#16#0 W#16#072.0 DB_VAR[7].Variable_1 INT 0 074.0 DB_VAR[7].Variable_2 INT 1 176.0 DB_VAR[7].Variable_3 INT 2 278.0 DB_VAR[7].Variable_4 INT 3 380.0 DB_VAR[8].Nr WORD W#16#0 W#16#082.0 DB_VAR[8].Variable_1 INT 0 084.0 DB_VAR[8].Variable_2 INT 1 186.0 DB_VAR[8].Variable_3 INT 2 288.0 DB_VAR[8].Variable_4 INT 3 390.0 DB_VAR[9].Nr WORD W#16#0 W#16#092.0 DB_VAR[9].Variable_1 INT 0 094.0 DB_VAR[9].Variable_2 INT 1 196.0 DB_VAR[9].Variable_3 INT 2 298.0 DB_VAR[9].Variable_4 INT 3 3100.0 DB_VAR[10].Nr WORD W#16#0 W#16#0102.0 DB_VAR[10].Variable_1 INT 0 0104.0 DB_VAR[10].Variable_2 INT 1 1106.0 DB_VAR[10].Variable_3 INT 2 2108.0 DB_VAR[10].Variable_4 INT 3 3
SIMATIC S7_Adressierung\ 10.12.2009 22:01:09 SIMATIC 300-Station\CPU312C(1)\...\DB2
Seite 1 von 1
DB2 - <offline> Datensicht"Lokal-DB" Pointer zum Umladen
Typ des Datenbausteins: Datenbaustein von UDT2
Name: Familie:
Autor: Version: 0.1
Bausteinversion: 2
Längen (Baustein / Daten ): 00122 / 00014
Zeitstempel
Code: 10.12.2009 01:05:01
Schnittstelle: 09.12.2009 23:26:22
Kommentar: Pointer zum Umladen
Adresse Name Typ Anfangswert Aktualwert Kommentar
0.0 Quelle_Zeiger[1] BYTE B#16#0 B#16#0 DB-Zeiger 6 Byte / Quelle
1.0 Quelle_Zeiger[2] BYTE B#16#0 B#16#0
2.0 Quelle_Zeiger[3] BYTE B#16#0 B#16#0
3.0 Quelle_Zeiger[4] BYTE B#16#0 B#16#0
4.0 Quelle_Zeiger[5] BYTE B#16#0 B#16#0
5.0 Quelle_Zeiger[6] BYTE B#16#0 B#16#0
6.0 Laenge INT 0 0 Länge der Uebertragung
8.0 Ziel_Zeiger[1] BYTE B#16#0 B#16#0 DB-Zeiger 6 Byte / Ziel
9.0 Ziel_Zeiger[2] BYTE B#16#0 B#16#0
10.0 Ziel_Zeiger[3] BYTE B#16#0 B#16#0
11.0 Ziel_Zeiger[4] BYTE B#16#0 B#16#0
12.0 Ziel_Zeiger[5] BYTE B#16#0 B#16#0
13.0 Ziel_Zeiger[6] BYTE B#16#0 B#16#0
SIMATIC S7_Adressierung\SIMATIC 10.12.2009 22:03:16 300-Station\CPU312C(1)\S7-Programm(1)\Symbole
Seite 1 von 1
Symboltabellen-Eigenschaften
Name: Symbole
Autor:
Kommentar:
Erstellt am: 08.12.2009 22:51:44
Zuletzt geändert am: 10.12.2009 21:56:25
Letztes Filterkriterium: Alle Symbole
Anzahl der Symbole: 37/37
Letzte Sortierung: Symbol aufsteigend
Status Symbol Adresse Datentyp Kommentar
Aachen UDT 1 UDT 1 Probe UDT
BLKMOV SFC 20 SFC 20 Copy Variables
Block_laden FC 1 FC 1 Test FC zur Datenübertragung Beispiel , von Sylvio Blanke Dez. 2009
Cycle Execution OB 1 OB 1 Zyklus
IBLKMOV FC 81 FC 81 Indirect Block Move
Lokal-DB DB 2 UDT 2 Pointer zum Umladen
M 0.0 M 0.0 BOOL Konstante Null
M 1.0 M 1.0 BOOL Blinktakt 2 Hz
M 1.1 M 1.1 BOOL Blinktakt 1 Hz
M 1.2 M 1.2 BOOL Blinktakt 0,5 Hz
M 1.3 M 1.3 BOOL Blinktakt 0,25 Hz
M 1.4 M 1.4 BOOL Blinktakt 0,125 Hz
M 1.5 M 1.5 BOOL Blinktakt 0,0625 Hz
M 1.6 M 1.6 BOOL Blinktakt
M 1.7 M 1.7 BOOL Blinktakt
M 10.0 M 10.0 BOOL Daten im DB1 füllen
M 10.1 M 10.1 BOOL Datenübertragung S7 - Code
M 10.2 M 10.2 BOOL Datenübertragung mit FC100
M 10.3 M 10.3 BOOL Datenübertragung mit FC81
M 10.4 M 10.4 BOOL Datenübertragung SFC20 BLOKMOV, feste Adressierung
M 10.5 M 10.5 BOOL Datenübertragung SFC20, BLKMOV mit variabler Adressierung
M 2.0 M 2.0 BOOL Flankenmerker 1
M 2.1 M 2.1 BOOL Impuls 1
M 2.2 M 2.2 BOOL Flankenmerker 2
M 2.3 M 2.3 BOOL Impuls 2
M 2.4 M 2.4 BOOL Flankenmerker 3
M 2.5 M 2.5 BOOL Impuls 3
M 2.6 M 2.6 BOOL Flankenmerker 4
M 2.7 M 2.7 BOOL Impuls 4
M 3.0 M 3.0 BOOL Flankenmerker 5
M 3.1 M 3.1 BOOL Impuls 5
M 3.2 M 3.2 BOOL Flankenmerker 6
M 3.3 M 3.3 BOOL Impuls 6
MW 100 MW 100 WORD Schleifenzähler für die Datenübertragung S7- Code
MW 4 MW 4 INT Schmiermerkerwort oder auch Datengrab
Pointer UDT 2 UDT 2 DB-Zeiger und oder Pointer
Probe DB DB 1 DB 1 Probe Datenbaustein