SPS AWL Tutorial
SPS AWL Tutorial
SPS AWL Tutorial
Darber hinaus erhalten die Teilnehmer Informationen ber den Aufbau und die Funktion einer SPS. Sie lernen die Programmierung anhand von kleinen bungsaufgaben, die mit dem Programmiergert (PC - Step 7) erstellt und mit der SPS getestet werden.
Die theoretischen Kenntnisse zum Aufbau, zur Programmierung und zur Handhabung der eingesetzten Programmentwicklungsumgebung sind aus den Handbchern und der angegebenen Literatur zu erarbeiten. Mit diesem Skript wird den Teilnehmern nun auch die Mglichkeit gegeben, sich auf die relativ kurze Laboreinheit vorzubereiten. Darber hinaus dient es hoffentlich auch als Nachschlagewerk (Quick Reference) fr sptere SPS-Projekte.
September 2005
Inhaltsverzeichnis
1. Grundlagen der SPS-Technik
1.1 1.2 1.3 1.4 Was ist eine speicherprogrammierbare Steuerung? Grundstzlicher Aufbau einer SPS Wie wird eine SPS programmiert? Beispiel einer Industrieanlage mit SPS-Steuerung 7 7 8 9 10 13 13 15 17 19 19 19 20 21 24 25 28 28 35 37 37 38 38 39 39 40
7. Operanden in STEP7
7.1 7.2 7.3 7.4 7.5 7.6 7.7 Eingangs- und Ausgangsoperanden Merkeroperanden Lokaloperanden Daten und Datenbausteine Timer Zhler Peripherieeingnge /-ausgnge
42 42 42 42 43 43 43 43 44 44 44 45 45 45 46 48 48 48 49 49 50 50 51 52 53 54 56 57 58 58 59 59 60
5. Strukturierte Programmierung
5.1 5.2 5.3 5.4 5.5 Der Organisationsbaustein (OB) Die Funktion (FC) Der Funktionsbaustein (FB) Der Datenbaustein (DB) Die Systembausteine (SFC, SFB, SDB)
6. Darstellungsarten
6.1 Anweisungsliste (AWL) 6.2 Funktionsplan (FUP) 6.3 Kontaktplan (KOP)
13. Funktionen
13.1 13.2 13.3 13.4 Aufruf einer Funktion Deklaration der Variablen Formalparameter Beispiel zum Aufruf einer Funktion
62 62 62 63 63 65 65 65 66 67 69 69 70 70 70 72 72 72 73 74 75 76 77 78 79 79 79 80 80 81 81 81
19. Anhang
19.1 STEP 7 Befehlsbersicht
83 83
14. Funktionsbausteine
14.1 14.2 14.3 14.4 Aufruf eines Funktionsbausteins Deklaration der Variablen Anlegen eines Instanz-Datenbausteins Beispiel zum Aufruf eines Funktionsbausteins
15. Zhler
15.1 15.2 15.3 15.4 Zhler setzen und rcksetzen Zhler abfragen Zhlwert laden Vorwrtszhler, Rckwrtszhler
16. Zeiten
16.1 16.2 16.3 16.4 16.5 16.6 16.7 16.8 Zeitfunktion mit Zeitwert laden Starten und Rcksetzen einer Zeit Abfragen einer Zeit Die Zeitart SI (Impuls) Die Zeitart SV (verlngerter Impuls) Die Zeitart SE (Einschaltverzgerung) Die Zeitart SS (Speichernde Einschaltverzgerung) Die Zeitart SA (Ausschaltverzgerung)
SIEMENS
DC24V
I 0
SIMATIC S7-300
MPI
RS485
Eine SPS bentigt Eingangsbaugruppen, mit denen Prozesssignale erfasst werden knnen. Baugruppen fr digitale und analoge Signale werden eingesetzt. Ausgangsbaugruppen sind erforderlich um Gerte schalten bzw. steuern zu knnen. Auch hier gibt es konfektionierte digitale und analoge Baugruppen. Darber hinaus stehen noch eine Vielzahl von Sonderbaugruppen fr ganz spezielle Anwendungsflle zur Verfgung. Dies sind z.B. Zhlerbaugruppen Positionierbaugruppen Reglerbaugruppen Kommunikationsbaugruppen
die Verbindung zwischen PC und AG mit einem MPI-Adapter hergestellt. Dieser Adapter besitzt einen RS232 und einen MPI Anschluss. Fr diese Busankopplung sind auch PC-Karten erhltlich.
1
PS 307 2A
SF DC24V DC5V FRCE RUN STOP
2
CPU 314C-2 PtP
3
DI8xDC24 AI5/A02x12Bit
SIEMENS
VOLTAGE SELECTOR
PUSH
I 0
SIMATIC S7-300
MPI
RS485
MPI
Die Punkte 1 bis 3 sind je nach SPS-Typ unterschiedlich und mssen im jeweiligen Gertehandbuch nachgelesen werden. Die Punkte 4 und 5 hingegen sind weitestgehend gleich. Um ein Programm zu erstellen bzw. in eine SPS zu bertragen bentigt man ein Programmiergert. Dies kann ein speziell dafr vorgesehenes Programmiergert (PG) oder aber ein handelsblicher PC sein. Ein vom SPS-Hersteller angebotenes PG enthlt bereits alle erforderlichen Komponenten zur: Erstellung des Programms (Editor, Compiler,) MPI-Interface zur bertragung des Programms auf die CPU Steuerung der SPS (z.B. Start/Stop-Funktion) Ausdruck des Programms Fehlerdiagnose Inbetriebnahme
Steht kein PG zur Verfgung, dann muss auf einem PC die jeweilige Programmiersoftware installiert werden. Die bertragung des Programmcodes erfolgt dann in der Regel ber die Serielle Schnittstelle. Bei der SIMATIC S7 wird 9
In der dritten Spalte wird die SPS-Belegung (Adresse) aufgefhrt. Ein E reprsentiert den Eingang, ein A entsprechend den Ausgang der SPS. Soll ein einzelnes Bit einer Adresse angesprochen werden, so muss dies durch die Angabe der Byte-Adresse sowie des zugehrigen Bits erfolgen. Die Angabe E 0.1 kennzeichnet somit das Bit 1 des Eingangsbytes 0. Tabelle 1: Aktor / Sensor Schieber (klein Schieber (mittel) Schieber (gro) Lichtschranke (klein) Lichtschranke (mittel) Lichtschranke (gro)
Damit die SPS richtig auf die Signale der Sensoren reagieren kann, muss man wissen, wann die Sensoren welche Signale liefern. Unsere Lichtschranke liefert z.B. einen Low-Pegel (0Volt) bei Unterbrechung des Lichtstrahls. Anderenfalls betrgt das Signal 24Volt. Die Schieber werden dagegen bettigt (ausgefahren), wenn der SPS-Ausgang einen High-Pegel (24Volt) liefert. Da die verwendeten Aktoren und Sensoren nur zwei Schaltzustnde kennen, werden auch nur digitale Ausgabe- bzw. Eingabebaugruppen bentigt. Das SPS-Programm fragt nun kontinuierlich die Signale der drei Lichtschranken ab und entscheidet daraus, welcher Schieber wann bettigt wird. Die folgende Tabelle zeigt die mglichen Zustnde. Lichtschranke L (klein) L (mittel) L (gro) L (klein) L (mittel) L (gro) L (klein) L (mittel) L (gro) Zustand 1 0 0 1 1 0 1 1 1 Schieber S (klein) S (mittel) S (gro) Zustand 1 nach ca. 3s 1 nach ca. 5s 1 nach ca. 7s
PS 307 2A
SIEMENS
DI8xDC24 AI5/A02x12Bit
DO16xDC24
DC24V
VOLTAGE SELECTOR
I 0
SIMATIC S7-300
Programm
MPI
RS485
A1.0 A 1.1 E 0.2 Lichtschranke (klein) Lichtschranke (gro) E 0.0 zum Hochregal A 1.2
Da bei einem groen Behlter wegen der Anordnung alle drei Lichtschranken unterbrochen sind, muss das Programm stets alle drei Signale auswerten. Die Schieber sind in definiertem Abstand zum Sensor angebracht und mssen daher mit einer, von der Transportgeschwindigkeit abhngigen, Verzgerung eingeschaltet werden.
Schieber (klein)
Schieber (mittel)
Schieber (gro)
11
12
Einige Daten der S7-314c PtP auf einen Blick: Integrierter Arbeitsspeicher Ladespeicher Bearbeitungszeiten Anzahl S7-Zhler S7-Zeiten Merker Datenbausteine Funktionsbausteine Funktionen Adressbereich gesamt Digitale Kanle Analoge Kanle Baugruppentrger Digitale Eingnge Digitale Ausgnge Analoge Eingnge Analoge Ausgnge Technologiefunktionen 48 Kbyte steckbar (MMC) > 64 Kbyte Bit-/Wortoperation 0.1 / 0.2 s. Festpunkt-/Gleitpunktarithmetik 2 / 20 s 256, Bereich 0..999 256, 10ms..9990s 256 Byte max. 127, Gre max. 16 KByte max. 128, Gre max. 16 KByte max. 128, Gre max. 16 KByte max. 1024 Byte (frei adressierbar) max. 1016 max. 253 max. 4 24 16 4 + 1 (12Bit) 2 (12Bit) 4 Zhler 1 Positionieren
SIEMENS
SIMATIC S7-300
MPI
RS485
Die digitalen Eingnge der Schulungsgerte sind zu Testzwecken mit Schaltern/Tastern verbunden. Die Ausgnge sind auf Steckbuchsen herausgefhrt. Das folgende Bild zeigt ein AG (Automatisierungsgert) des Laboraufbaus.
CPU S7-314C-2 PtP Zur Aufnahme und Speicherung des Programms besitzt die obige CPU eine so genannte Micro-Memory-Card. Diese Karte muss im Betrieb der CPU gesteckt sein. Alle CPUs besitzen eine MPI-Schnittstelle (MPI := Multi Point Interface) zum Anschluss an ein Programmiergert oder zur Vernetzung mit einer zweiten SPS. Das Krzel PtP (Point to Point) weist auf eine weitere Schnittstelle (RS485) zum Anschluss von Ausgabegerten (Plotter). Beim Krzel DP ist eine ProfibusSchnittstelle vorhanden. Neben der CPU befinden sich hinter je einer Klappe die Anschlussklemmen der Einund Ausgnge. Zur Verbindung mit den Sensoren bzw. Aktoren ist je ein 40 pol. Adapter mit Schraubklemmen erforderlich. 13 14
Positionieraufgaben Regelungen
Kommunikationsprozessor-Baugruppe (CP 34x) Diese Baugruppen entlasten die CPU von Kommunikationsaufgaben und sind mit unterschiedlichen Schnittstellen ausgestattet: Profibus DP RS232/485 Point to Point Ethernet
Anschaltungsbaugruppen (IM 36x) Diese Baugruppen dienen zur Verbindung mehrerer Baugruppentrger und liefern die Versorgungsspannung fr weitere Signalbaugruppen. RS-485 Repeater Ein RS 485-Repeater verstrkt Datensignale auf Busleitungen und koppelt Bussegmente.
16
6. 7. 8. 9.
Welche Sonderfunktionen werden bentigt (Regler, Zhler, usw.)? - Jede Sonderfunktion entlastet die CPU Sind neben der Steuerung Kommunikationsaufgaben zu erledigen? - z.B. Monitoring, Netzwerkbetrieb (Profibus, Ethernet) Welche Stromversorgung ist erforderlich? Soll die SPS in einem Netzwerk betrieben werden? - welche Schnittstellen sind erforderlich? - gibt es groe Leitungslngen zu berbrcken
10. Ist ein mehrzeiliger Aufbau erforderlich? - wie viele Anschaltungsbaugruppen werden bentigt? - Wird der Einsatz mehrerer CPUs erforderlich? 11. Wie umfangreich ist die Steuerungsaufgabe (Speichergre)? - Der RAM-Speicher einer CPU ist in der Regel nicht erweiterbar 12. Wie Zeitkritisch ist die Steuerung (Zykluszeit)? 13. Welche Umweltbedingungen gelten fr den Betrieb der SPS? - Einsatz spezieller Outdoor-Baugruppen
Im Kapitel 2.1 wurde bereits ein kleiner Auszug der technischen Daten unserer CPU S7-314 angegeben. Fr eine ausfhrlichere Beschreibung der CPU-Daten verweise ich auf das jeweilige Handbuch in unserem Labor oder online im Internet. Um dennoch einen Eindruck ber die Leistungsfhigkeit unterschiedlicher CPUs zu verschaffen habe ich die wichtigsten Daten von zwei weiteren S7-CPUs in der folgenden Tabelle gegenbergestellt.
19
20
Eigenschaften Integrierter Arbeitsspeicher Ladespeicher Bearbeitungszeiten - Bitoperation - Gleitpunktarithmetik S7-Zhler S7-Zeiten Digitale Kanle Analoge Kanle
CPU-318-2 256 KByte 64 KByte bis 2 MB erweiterbar 0,1 s 0,6 s 512 512 65536 4096
Bei der Anordnung der Baugruppen auf einem Baugruppentrger gelten folgende Regeln: Maximal 8 Baugruppen (SM, FM, CP) drfen rechts neben der CPU stecken. Die Anzahl steckbarer Baugruppen (SM, FM, CP) ist begrenzt durch deren Stromaufnahme aus dem Rckwandbus.
PS 307 2A CPU 314C-2 PtP
SF DC24V DC5V FRCE RUN VOLTAGE SELECTOR STOP PUSH DI8xDC24 AI5/A02x12Bit DI8xDC24 AI5/A02x12Bit DI8xDC24 AI5/A02x12Bit DI8xDC24 AI5/A02x12Bit DI8xDC24 AI5/A02x12Bit DI8xDC24 AI5/A02x12Bit DI8xDC24 AI5/A02x12Bit DI8xDC24 AI5/A02x12Bit
SIEMENS
Darber hinaus bietet das Produktspektrum der Firma SIEMENS natrlich weitere CPUs sowohl unterhalb (S7-2xx), als auch oberhalb (S7-4xx) der im Beispiel aufgefhrten Gerte. Die richtige CPU sollte in jedem Fall dem aufgestellten Anforderungsprofil gengen. Weiterhin sollte bei der Projektierung eine Ausbaureserve vorgesehen werden, d.h. der Auslastungsgrad der CPU sollte zwischen 60 und 80% liegen. So schafft man sich einen kleinen Spielraum fr sptere Erweiterungen des Systems.
I 0
SIMATIC S7-300
MPI
RS485
PS
CPU
SM/FM/CP
Fr die Anordnung der Baugruppen auf mehreren Baugruppentrgern bentigt man so genannte Anschaltungsbaugruppen. Es gelten folgende Regeln: die Anschaltungsbaugruppe belegt immer den Steckplatz 3 und befindet sich immer links neben der ersten Signalbaugruppe. Es drfen je Baugruppentrger maximal 8 Baugruppen (SM, FM, CP) gesteckt werden. Die Anzahl der gesteckten Baugruppen (SM, FM, CP) ist begrenzt durch die zulssige Stromentnahme. Der Abstand zwischen zwei Anschaltungsbaugruppen darf maximal 10m betragen. Die maximale Anzahl an Baugruppentrgern ist von der verwendeten CPU abhngig.
Das folgende Bild zeigt als Beispiel den Maximalausbau fr die im Labor verwendete SPS. Der Baugruppentrger besteht aus einer speziellen Profilschiene, auf die alle S7-300 Komponenten aufgesteckt und arretiert werden. Die Stromversorgung erfolgt fr alle Baugruppen rechts der CPU ber ein Busmodul an der Rckwand. Bei den Baugruppentrgern 1 bis 3 enthlt die Anschaltungsbaugruppe (IM) eine eigene Stromversorgung.
Die Mindestabstandsmae fr Baugruppentrger mssen den Angaben des Herstellers entsprechen. Zulssige Erwrmung der Baugruppen Platz zum Ein- und Ausbau der Baugruppen 22
21
DI8xDC24 AI5/A02x12Bit
DI8xDC24 AI5/A02x12Bit
DI8xDC24 AI5/A02x12Bit
DI8xDC24 AI5/A02x12Bit
DI8xDC24 AI5/A02x12Bit
DI8xDC24 AI5/A02x12Bit
DI8xDC24 AI5/A02x12Bit
DI8xDC24 AI5/A02x12Bit
3 IM Steckplatznummer 3 4
DI8xDC24 AI5/A02x12Bit
5
DI8xDC24 AI5/A02x12Bit
6
DI8xDC24 AI5/A02x12Bit
7
DI8xDC24 AI5/A02x12Bit
8
DI8xDC24 AI5/A02x12Bit
9
DI8xDC24 AI5/A02x12Bit
10
DI8xDC24 AI5/A02x12Bit
11
DI8xDC24 AI5/A02x12Bit
2 Baugruppentrger
Die steckplatzorientierte Adressvergabe entspricht der Defaultadressierung, d.h. STEP7 ordnet jeder Steckplatznummer eine festgelegte BaugruppenAnfangsadresse zu. Als Beispiel sei hier der im obigen Bild dargestellte Maximalausbau einer S7-300 angefhrt. Der Steckplatz 0 des ersten Baugruppentrgers ist immer fr ein Programmiergert reserviert und taucht daher in der Zeichnung nicht auf. Daneben erhlt die Stromversorgung die Nummer 1, die CPU die Nummer 2 und die Anschaltungsbaugruppe immer die Steckplatznummer 3. Die brigen Baugruppen stecken wie angegeben auf den Pltzen 4 bis 11. Die den Steckpltzen zugeordneten Anfangsadressen knnen der folgenden Tabelle entnommen werden.
Trger 0 1 2 3 Baugruppe digital analog digital analog digital analog digital analog 1 PS 2 CPU 3 IM IM IM IM 4 0 256 32 384 64 512 96 640 Steckplatznummer 5 6 7 4 8 12 272 288 304 36 40 44 400 416 432 68 72 76 528 544 560 100 104 108 656 672 688 8 16 320 48 448 80 576 112 704 9 20 336 52 464 84 592 116 720 10 24 352 56 480 88 608 120 736 11 28 368 60 496 92 624 124 752
IM Steckplatznummer 3 4
DI8xDC24 AI5/A02x12Bit
5
DI8xDC24 AI5/A02x12Bit
6
DI8xDC24 AI5/A02x12Bit
7
DI8xDC24 AI5/A02x12Bit
8
DI8xDC24 AI5/A02x12Bit
9
DI8xDC24 AI5/A02x12Bit
10
DI8xDC24 AI5/A02x12Bit
11
DI8xDC24 AI5/A02x12Bit
1 IM Steckplatznummer
PS 307 2A CPU 314C-2 PtP
SF DC5V FRCE RUN VOLTAGE SELECTOR STOP PUSH
3
SIEMENS
4
DI8xDC24 AI5/A02x12Bit
5
DI8xDC24 AI5/A02x12Bit
6
DI8xDC24 AI5/A02x12Bit
7
DI8xDC24 AI5/A02x12Bit
8
DI8xDC24 AI5/A02x12Bit
9
DI8xDC24 AI5/A02x12Bit
10
DI8xDC24 AI5/A02x12Bit
11
DI8xDC24 AI5/A02x12Bit
Beispiel zur Adressierung: Der Steckplatz Nr. 4 des Baugruppentrgers 0 enthlt eine digitale Eingabebaugruppe der Lnge 2 Byte. Die einzelnen Bits der Baugruppe sind somit durch die Operanden
DC24V
I 0
SIMATIC S7-300
MPI
RS485
IM 3 4 5 6
SM/FM
E 0.0 - E 0.7
7 8 9 10 11
oder
E 1.0 - E 1.7
Steckplatz- 1 nummer PS
2
CPU
adressierbar. Da der nchste Steckplatz mit der Adresse 4 beginnt, sind in diesem Beispiel zwei Byte nicht adressierbar. Dies liegt daran, dass der max. Ausbau pro Steckplatz 4 Byte betrgt. Dieses Problem lst sich jedoch durch die freie Adressvergabe umgehen. Die analogen Baugruppen belegen pro Steckplatz max. 16 Byte, z.B. 8 Kanle mit 12 Bit Auflsung (8 x 2Byte)
23
24
Freie Adressvergabe Freie Adressvergabe heit, Sie knnen jeder Baugruppe (SM, FM, CP) eine Adresse Ihrer Wahl zuordnen. Diese Zuordnung nehmen Sie in STEP7 vor. Sie legen dabei die Baugruppenanfangsadresse fest, auf der dann alle weiteren Adressen der Baugruppe basieren. Man kann so die verfgbaren Adressrume optimal nutzen. Auerdem kann man bei der Erstellung von Standardsoftware Adressen angeben, die unabhngig von der jeweiligen Konfiguration der S7-300 sind.
Vor der Vergabe von MPI- oder PROFIBUS-Adressen sind folgende Regeln zu beachten: Alle MPI-/PROFIBUS-Adressen in einem Subnetz mssen unterschiedlich sein Die hchste MPI-/PROFIBUS-Adresse muss der grten tatschlichen Adresse sein und bei allen Teilnehmern gleich eingestellt sein.
Ein Subnetz kann aus mehreren Einheiten, so genannten Segmenten bestehen. Ein Segment: Ist eine Busleitung zwischen zwei Abschlusswiderstnden Kann bis zu 32 Teilnehmer enthalten (CPU-Typ) Wird begrenzt durch die zulssige Leitungslnge in Abhngigkeit von der Baudrate.
Wenn Sie mehr als 32 Teilnehmer in einem Subnetz betreiben, dann mssen Sie die Bussegmente ber RS 485-Repeater koppeln. In einem PROFIBUS-Subnetz mssen alle Bussegmente zusammen mindesten einen DP-Master und einen DP-Slave haben. Erdgebundene und Erdfreie Bussegmente mssen ber einen RS 485-Repeater gekoppelt werden. Der erste und letzte Teilnehmer eines Segmentes muss einen Abschlusswiderstand (Leitungs-Wellenwiderstand) besitzen. Dieser befindet sich im BusAnschlussstecker. Zur Verbindung der Teilnehmer wird ein Bus-Anschlussstecker sowie ein Profibuskabel bentigt. Die folgenden Bilder zeigen den Aufbau eines MPI-Subnetzes und die Verbindung eines MPI- und PROFIBUS-Subnetzes. Die mit einer 1 versehenen Kreissymbole kennzeichnen die Aktivierung der Abschlusswiderstnde.
Die Teilnehmer eines Netzes erhalten die Adressen durch das Programmiergert. Die folgende Tabelle zeigt zulssige MPI- und PROFIBUS-Adressen. MPI-Adressen 0 bis 126 davon reserviert: 0 fr PG (Programmiergert) 1 fr OP (Bediengert) 2 fr CPU PROFIBUS-Adressen 0 bis 125 davon reserviert: 0 fr PG
25
26
Unter dem Projektnamen Manfred wurde vom Assistenten ein Ordner SIMATICStation 300(1) eingerichtet. Hinter dem Eintrag MPI(1) verbirgt sich des Tool NetPro. Dieses Programm ermglicht die Konfiguration eines MPI-Subnetzes.
Der Ordner SIMATIC 300(1) enthlt einen weiteren Ordner mit dem Namen der gewhlten CPU. In diesem Fall handelt es sich um unsere Labor-CPU. Der Eintrag Hardware weist auf ein weiteres Tool HW Konfig. Dies ist ein sehr hilfreiches und notwendiges Konfigurationstool um die Hardware (Baugruppen der SPS) und deren Adressierung festzulegen. Eine im Programm verwendete Eingabeadresse wird vom Compiler erst dann akzeptiert, wenn die zugehrige Baugruppe im Hardwarekonfigurator eingebunden wurde.
Der Ordner CPU 314-2 PtP enthlt mindestens einen Ordner fr die eigentlichen Programmdaten S7-Programm(1). Der Ordner Bausteine enthlt alle programmierten S7-Bausteine (OBs, Fcs, FBs, DBs). Die Symboldatei enthlt Daten zur Beschreibung der verwendeten Operanden. Aus den obigen Fenstern heraus kann jede, zur Bearbeitung des Projektes erforderliche Funktion aufgerufen werden. Zum Beispiel 29 das Einfgen neuer Bausteine das Anlegen einer Symboldatei der Aufruf des STEP 7-Editors das bertragen der Bausteine ins AG der Aufruf des SPS-Simulators 30
angezeigt. Ist das Programm fertig, so kann man es direkt ins Zielsystem bertragen.
Nach dem Aufruf erscheint der Editor wie folgt in einem eigenen Fenster.
In dem obigen Beispiel wurde dem Ausgangsbit 0 der Byteadresse 1 das Symbol Motor zugeordnet. Darber hinaus wird der Datentyp und optional ein Kommentar angegeben. Die Symboldatei wird in der Regel zu Beginn des Projektes aufgestellt, kann aber jederzeit gendert oder erweitert werden. Im oberen Teil des Fensters werden die Variablen des Bausteins definiert. Darunter beginnt der Eingabebereich fr den Programmcode. Neben den Dokumentationsmglichkeiten wie Titel und Kommentare folgt fr jedes definierte Netzwerk (kleinster Programmteil eines Bausteins) der Programmcode (AWL, FUP, KOP). Fehler bei der Programmerstellung werden unmittelbar nach der Eingabe 31 Whrend des Programmierens lsst sich die Symbolliste durch Anklicken der rechten Maustaste aufrufen und das richtige Symbol kann eingefgt werden. Ein uerst hilfreiches, bersichtliches Instrument.
32
2.
Wurden (wie unter 1.) bereits Stationen konfiguriert, so knnen diese unmittelbar ins Arbeitsfeld eingefgt und verbunden werden. Das Einfgen einer leeren Station, fhrt Sie automatisch in den Hardwarekonfigurator. Erst nach der Konfiguration ist eine Verbindung mglich. nderungen der Netzwerkkonfiguration werden in beiden Programmen angezeigt. Werden viele Stationen miteinander vernetzt, so ist die Arbeit mit NetPro wegen der grafischen Darstellung aller Gerte bersichtlicher (siehe Bild). Die Bedienung von NetPro ist sehr einfach und soll hier nicht weiter beschrieben werden. 33
Der Simulator S7-PLCSIM erscheint danach in einem eigenen Fenster. Die bereits vorhandene CPU kann nun um die gewnschten Ein-/Ausgabe-Baugruppen, Zhler und Zeitgeber erweitert werden. 34
Zur Simulation solcher Prozessmodelle verwenden wir seit dem WS 2004 das LabVIEW- Programm ProMod der Firma Deltalogic. Es enthlt viele interessante Prozessmodelle aus unterschiedlichen Bereichen der Industrie. Das Programm kommuniziert ber einen Treiber (AG-LINK, Fa. Deltalogic) via RS232 mit unseren AGs. Darber hinaus ist eine Steuerung von ProMod auch mit dem SIEMENS SPS-Simulator PLCSim mglich.
Der Simulator kann auf diese Weise an die Bedrfnisse des Programms angepasst werden. Zusammenfassend sind die folgenden Arbeitsschritte zu tun, damit ein Programm im Simulator getestet werden kann: 1. 2. 3. 4. 5. 6. SIMATIC-Manager starten und Projekt definieren. Bausteine definieren und mit dem Editor programmieren. Organisationsbaustein OB1 mit Programmeinsprung anlegen. Simulator starten und konfigurieren Bausteine aus dem Manager ins Zielsystem bertragen. Simulator starten (CPU auf RUN setzen)
5. Strukturierte Programmierung
Eine Grundregel fr jeden Programmierer ist die Strukturierte Programmierung. Sie sorgt dafr, dass ein Programm jederzeit bersichtlich und auch fr Dritte berschaubar und nachvollziehbar ist. Auf hchster Ebene bietet STEP 7 zur Strukturierung des Programms Bausteine an. Ein Baustein kann man sich als eine Ansammlung von Befehlen vorstellen, welche ein bestimmtes Teilproblem lsen. Jeder Baustein ist damit im Prinzip ein Unterprogramm.
Baustein OB1 OB10-OB17 OB20-OB23 OB30-OB38 OB40-OB47 OB50-OB51 OB60 OB80-OB87 OB100-OB101 OB121-OB122
Prioritt
Ereignis
1 zyklische Programmbearbeitung 2 Uhrzeitalarm 36 Verzgerungsalarm 7 15 Weckalarm, Zyklustrigger 16 23 Prozessalarm 24 Kommunikationsalarm 25 Mehrprozessoralarm 26 Asynchrone Fehler 27 Anlauf Gleiche Prioritt Synchronfehler wie aufrufender Fehler S7-Organisationsbausteine mit Voreingestellter Prioritt
Neben dem OB1 gibt es weitere OBs. Jeder dieser Bausteine ist einer Priorittsklasse zugeordnet, von denen es 28 gibt. Durch die Priorittsklasse wird die Reihenfolge der vom Betriebssystem aufgerufenen OBs festgelegt. Die Priorittsklassen knnen mit Ausnahme der OB1, 121 und 122 vom Anwender vorgegeben werden. Die nachfolgende Tabelle enthlt die S7-OBs und deren Default-Prioritten. 37
38
6. Darstellungsarten
STEP 7 stellt drei unterschiedliche Darstellungsarten fr den Programmcode zur Verfgung. Die Darstellungsarten (AWL, FUP, KOP) knnen im Editor whrend der Programmentwicklung beliebig umgeschaltet werden.
Operand
HiByte LoByte
0.0
Bit-Adresse Byte-Adresse Operandentyp Operation
Beim Zugriff auf ein Datenwort befindet sich das HiByte auf der niederwertigen Byte-Adresse.
Zum Verstndnis kann man sich folgenden Sachverhalt merken: Die Operation gibt an, was getan werden soll Der Operand gibt an, worauf die Operation angewendet wird
Eine Ausnahme hinsichtlich der angegebenen Bit-Adresse bilden die Zhler und Zeiten. Dort werden keine Bit-Adressen angegeben. Auerdem gibt es Befehle, bei denen kein Operand anzugeben ist, z.B. die arithmetischen Funktionen (>=I, +I, usw.).
Operanden. Der Funktionsplan hnelt der bekannten Darstellung von logischen Gattern und ist wegen seiner graphischen Komponente ausgesprochen bersichtlich. Zur Programmierung in FUP-Darstellung steht eine umfangreiche Funktionsblockbibliothek zur Verfgung. Das folgende Bild zeigt einen Ausschnitt aus dem Programmeditor in FUP-Darstellung. Das Ausgangsbit A3.0 ist dann auf Hi-Pegel, wenn entweder die Eingnge E0.0 und E0.1 oder der Ausgang A1.0 einen Hi-Pegel liefern.
7. Operanden in STEP 7
In jedem SPS-Programm wird mit Operanden gearbeitet. Will man beispielsweise den Status eines Tasters, welcher an einer Eingangsbaugruppe der SPS angeschlossen ist, im SPS-Programm abfragen, so verwendet man einen Operanden des Typs E (Eingnge).
Nicht alle STEP7-Funktionen knnen in der Darstellung FUP eingefgt werden. Ausnahmen sind z.B. die Lade und Transferbefehle. Auch die indizierte Programmierung ist nur in der Darstellung AWL mglich.
7.2 Merkeroperanden
Die Operanden des Typs M (Merker) dienen zum Verarbeiten und merken interner Zwischenergebnisse. Merkzustnde werden in einem bestimmten Speicherbereich der CPU abgelegt. Merker sind im Gegensatz zu Ein- oder Ausgngen nur interne Zustnde. M 12.1 MB 2 MW 5 MD 7 Bit des Merkerbyte 12 Byte des Merker 2 Merkerwort 5 (2Byte) Merkerdoppelwort (4Byte)
7.3 Lokaloperanden
Lokaloperanden sind im Prinzip temporre Variablen. Zur Laufzeit des Programms wird jedem Baustein ein bestimmter Speicherbereich zugewiesen, in dem die temporren Variablen ablegt werden. Diese Variablen sind nach dem Verlassen des Bausteins nicht mehr gltig. Sie dienen lediglich als Zwischenspeicher. L 10.2 LB 1 LW 2 LD 3 Bit 2 des Lokaldatenbyte 10 Lokaldatenbyte 1 Lokaldatenwort 2 (2Byte) Lokaldatendoppelwort (4Byte)
41
42
7.5 Timer
Operanden vom Typ T ermglichen es, Zeitverhalten innerhalb eines SPSProgramms zu realisieren. Dazu stehen verschiedene Zeittypen zur Verfgung. Nheres ber Zeiten in einem spteren Kapitel. T1 Zeitgeberbaustein 1
8.1 Bitoperanden
Bei Bit-Operanden muss immer die Byte- und Bitadresse angegeben werden. Byteund Bitadresse werden immer durch einen Punkt getrennt:
7.6 Zhler
Operanden des Typs Z bieten eine Zhlfunktion. Es kann dabei ein Vorwrts- und Rckwrtszhler realisiert werden. Auch fr die Zhler gibt es ein eigenes Kapitel. Z1 Zhlerbaustein 1
E 8.5
Bit-Adresse Byte-Adresse
8.2 Byteoperanden
Bei Byteoperanden fehlt die Angabe der Bits. Der Operand sieht wie folgt aus:
EB 8
Byte-Adresse
43
44
8.3 Wortoperanden
Mit Wortoperanden, wie EW 8, kann ein Eingangswort ab der Byteadresse 8 in den AKKU (Akkumulator) geladen werden.
9. Symbolische Programmierung
Bisher haben wir gelernt, dass Operanden in einem SPS-Programm Eingnge, Ausgnge, Merker usw. beschreiben. In der Regel verbirgt sich jedoch hinter jedem Eingang ein Signalgeber und hinter jedem Ausgang ein Signalempfnger. Werden in einem Programm viele Ein-/Ausgnge benutzt, so wird es fr den Programmierer zunehmend schwieriger, die Zuordnung vorzunehmen. Aus diesem Grund kann man jedem Operanden ein Symbol (kurzer Text, z.B. Motor, Lampe) zuordnen. Dieser Text wird dann an Stelle des Operanden im Quelltext angegeben. In Kapitel 4.1.4 wurde bereits auf den STEP 7-Symboleditor eingegangen. Jeder Symboleintrag in der Symboldatei besteht demnach insgesamt aus 4 Informationen: 1. 2. 3. 4. Das Symbol (maximal 24 Zeichen) Absolutoperand (E, A, M usw.) Der Datentyp (BOOL, usw.) Ein Kommentar (maximal 80 Zeichen)
EW 8
Byte-Adresse
Dabei liest die CPU EB 8 (Hi-Byte des Wortes) und EB 9 (Lo-Byte des Wortes).
8.4 Doppelwortoperanden
Mit Doppelwortoperanden knnen hnlich wie unter 8.3 insgesamt 4 Byte gelesen, ausgegeben oder gespeichert werden.
ED 8
Byte-Adresse
Damit der Programmeditor die symbolische Anzeige und Eingabe untersttzt, muss diese Eigenschaft unter Ansicht - Anzeige mit symbolische Darstellung eingeschaltet werden. Symbole knnen entweder direkt oder ber eine angezeigte Liste eingetragen werden. Bei der direkten Eingabe wird der Operand (das Symbol) wie unten dargestellt in Hochkommata eingegeben. Klickt man an Stelle des Operanden auf die rechte Maustaste, whlt Symbol einfgen, dann ffnet sich ein Pull-Down-Men mit allen definierten Symbolen. Der Eintrag erfolgt durch Anklicken, ganz ohne Schreibarbeit.
Es drfen keine Symbole mehrfach verwendet werden. Ist dies dennoch der Fall, wird die Datei vom Editor nicht abgespeichert (Fehlermeldung).
45
46
Anmerkung: Datenwrter knnen nicht durch ein Symbol ersetzt werden. Um ein Datenwort eindeutig bestimmen zu knnen, ist die Angabe des Datenbausteins notwendig. Die kombinierte Angabe DBW100.DBW10 ist im Symboleditor nicht vorgesehen. Dies hat folgenden Grund: Wenn in S7 ein Datenbaustein erstellt wird, sind Variablen im Kopf des Datenbausteins zu deklarieren. Diese Variablen knnen einen beliebigen Namen haben. Datenwrter knnen ber diese Variablen angesprochen werden. Beispiel: Die Variable DB100.Betriebsstunden reprsentiert je nach Datentyp (BYTE, WORD, ) einen bestimmten Datenbereich im Datenbaustein. Datenbausteine knnen demnach auch ohne Zuordnungsliste symbolisch programmiert werden. Folgende Operanden knnen durch ein Symbol ersetzt werden: Operand E EB EW ED A AB AW AD M MB MW MD PEB PEW PED PAB PAW PAD T Z FB FC OB DB SFB SFC 47 Beschreibung Eingang Eingangsbyte Eingangswort Eingangsdoppelwort Ausgang Ausgangsbyte Ausgangswort Ausgangsdoppelwort Merker Merkerbyte Merkerwort Merkerdoppelwort Periferie-Eingangs-Byte Periferie-Eingangs-Wort Periferie-Eingangs-Doppelwort Periferie-Ausgangs-Byte Periferie-Ausgangs-Wort Periferie-Ausgangs-Doppelwort Timer Zhler Funktionsbaustein Funktion Organisationsbaustein Datenbaustein System-Funktionsbaustein System-Funktion Beispiel E30.2 EB 2 EW 10 ED 20 A 10.1 AB 2 AW 6 AD 8 M 2.1 MB 3 MW 10 MD 18 PEB 20 PEW 40 PED 26 PAB 20 PAW 40 PAD 26 T1 Z2 FB 3 FC 5 OB 10 BD 1 SFB 10 SFC 20
10. Verknpfungsoperationen
Verknpfungsoperationen dienen dazu, bestimmte wenndann-Befehle zu definieren.
10.1 UND-Verknpfung
Die UND-Verknpfung zwischen zwei Eingngen ergibt als Ergebnis 1, wenn alle Eingnge den Signalzustand 1 haben. AWL-Beispiel: U U = FUP-Beispiel: E 0.0 E 0.1 A 0.0 Wenn E0.0 und E0.1 1 ist, dann Ausgang A0.0 auf 1 schalten
10.2 ODER-Verknpfung
Die ODER-Verknpfung zwischen zwei Eingngen ergibt als Ergebnis 1, wenn mindestens 1 Eingang den Signalzustand 1 hat. AWL-Beispiel: O O = FUP-Beispiel: E 0.0 E 0.1 A 0.0 Wenn E0.0 oder E0.1 1 ist, dann Ausgang A0.0 auf 1 schalten
48
10.3 EXKLUSIV-ODER-Verknpfung
Die EXKLUSIV-ODER-Verknpfung zwischen zwei Eingngen ergibt als Ergebnis 1, wenn nur einer der beiden Eingang den Signalzustand 1 hat. AWL-Beispiel: X X = FUP-Beispiel: E 0.0 E 0.1 A 0.0 Wenn nur der Eingang E0.0 oder nur der Eingang E0.1 1 ist, dann Ausgang A0.0 auf 1 schalten
10.5 UND-NICHT-Verknpfung
Die UND-NICHT-Verknpfung negiert das Ergebnis der UND-Verknpfung. AWL-Beispiel: U U NOT = FUP-Beispiel: E 0.0 E 0.1 A 0.0 Wenn der Eingang E0.0 = 1 ist und der Eingang E0.1 = 1 ist, dann ist das Verknpfungsergebnis (VKE) = 1 negiert das VKE Ausgang A0.0 = 0 schalten
10.4 NICHT-Verknpfung
Die NICHT-Verknpfung gibt es in STEP 7 nur in Verbindung mit einer UND/ODERVerknpfung. Bei der NICHT-Verknpfung wird immer der invertierte Zustand des Operanden betrachtet. Daraus ergibt sich, dass die NICHT-Verknpfung den Signalzustand 0 abfragt. AWL-Beispiel: UN UN = FUP-Beispiel: E 0.0 E 0.1 A 0.0 Wenn der Eingang E0.0 = 0 ist und der Eingang E0.1 = 0 ist, dann Ausgang A0.0 auf 1 schalten
10.6 ODER-NICHT-Verknpfung
Die ODER-NICHT-Verknpfung negiert das Ergebnis der ODER-Verknpfung. AWL-Beispiel: U( O O ) NOT = FUP-Beispiel: E 0.0 E 0.1 A 0.0 Klammerregeln, siehe Kap. 10.1) Wenn der Eingang E0.0 = 1 ist oder der Eingang E0.1 = 1 ist, dann ist das Verknpfungsergebnis (VKE) = 1 negiert das VKE Ausgang A0.0 = 0 schalten
49
50
10.8 Klammerbefehle
Mit Klammerbefehlen kann man die gewnschte Reihenfolge von Verknpfungen festlegen. Fr die Anwendung von Klammern gelten die folgenden Regeln: Es mssen genauso viele Klammern geschlossen werden, wie geffnet wurden. Eine Verknpfung mit Klammern darf nicht ber Netzwerkgrenzen hinausgehen. Innerhalb einer Klammer sollte man keine Sprungmarken platzieren, da sonst das Ergebnis nicht nachvollziehbar ist. Klammern drfen auch verschachtelt sein. Die maximale Klammerverschachtelung muss im Gertehandbuch des jeweiligen AGs nachgelesen werden. Ein Klammer-Auf-Befehl ist immer VKE-begrenzend, d.h. es fngt eine neue Verknpfung an. Ein Klammer-Zu-Befehl ist nicht VKE-begenzend, da die Klammer-ZuOperation als Zwischenspeicher verwendet wird.
Das VKE ist demnach ein Zwischenspeicher, der entweder 1 oder 0 ist. Wird eine Verknpfung neu begonnen (Zeile 1), wird das VKE auf den Wert des Operanden (0 oder 1) gesetzt. Bei den nachfolgenden Verknpfungen (Zeile 2 und Zeile 3) wird der Operand mit dem VKE verknpft. Dies wird so lange durchgefhrt, bis das VKE einem Operanden zugewiesen wird (Zeile 4) oder exakter ausgedrckt, bis ein VKE-begrenzender Befehl bearbeitet wird. VKE-Begrenzung Nachdem das VKE zugewiesen worden ist, wird das VKE begrenzt und es kann eine neue Verknpfung begonnen werden. VKE begrenzende Operationen VKE- begrenzende Operation Zuweisung Klammerauf-Befehle Setz- und Rcksetzbefehle Zeitoperationen Zhloperationen Sprungbefehle Rcksprungbefehle Beispiel = M0.0, = A2.1 U(, O(, S M0.0, S A2.0 SE T1, SA T10, ZV Z1, ZR Z1, SPA M001, SPN M002, BE, BEB, BEA
Folgende Befehle stehen fr die Klammersetzung zur Verfgung: Operation U( O( X( UN( ON( XN( ) Erklrung UND-Klammer aufmachen ODER-Klammer aufmachen EXCLUSIV-ODER-Klammer aufmachen UND-NICHT-Klammer aufmachen ODER-NICHT-Klammer aufmachen EXCLUSIV-ODER-NICHT-Klammer aufmachen Klammer schlieen
51
52
Lsung: U( O E 0.0 O E 0.1 ) U E 0.3 U( O E 0.4 O E 0.5 ) = A 0.0 | |--- Block 1 | ---- Block 2 A0.0 = Block 1 UND Block 2 UND Block 3 | |--- Block 3 |
Lsung: Variante 1 U U O U U = E 0.1 E 0.2 E 0.3 E 0.4 A 0.0 Variante 2 O( U E 0.1 U E 0.2 ) O( U E 0.3 U E 0.4 ) = A 0.0
Die Klammerung der ODER-Verknpfung bewirkt, dass die ODER-Verknpfung vor der UND-Verknpfung bearbeitet wird. Innerhalb der Klammer fngt eine neue Verknpfung an, da der Klammer-AufBefehl VKE-begrenzend ist. Der Klammer-Zu-Befehl ist nicht VKE-begrenzend. Deshalb kann nach einem Klammer-Zu-Befehl das Ergebnis der Klammer weiter verknpft werden.
Beide Varianten werden von STEP 7 akzeptiert. Der Oder-Befehl ist ein separater STEP 7-Befehl. Er wird wie ein ODER-KlammerAuf-Befehl gesehen. Durch den begrenzenden Befehl = A0.0 wird die gedachte Klammer wieder geschlossen.
Setz- und Rcksetzdominanz In obigem Beispiel ist es denkbar, dass beide Eingnge den Wert 1 haben. Dann wird der Ausgang zunchst gesetzt und kurz danach wieder rckgesetzt. Man spricht in diesem Fall von Rcksetzdominanz.
53
54
Wird der Rcksetz-Befehl vor dem Setz-Befehl programmiert, dann spricht man von Setzdominanz.
11. Datentypen
Datentypen kennzeichnen in STEP 7 den Aufbau und die Lnge von Variablen und Operanden. Der Eingang E 5.0 bezeichnet ein einzelnes Bit des Eingangsbytes 5. Dieses Bit kann zwei Zustnde (1 oder 0) annehmen. Sein Datentyp ist daher der Typ BOOL. Zum Verstndnis der unterschiedlichen Datentypen sind nachfolgend noch einmal die unterschiedlichen Datenlngen in STEP 7 angegeben. Bit: Ein Bit ist die kleinste darstellbare Informationseinheit. Byte:
Bei einem setzdominanten Speicher steht der Setzeingang unterhalb des Rcksetzeinganges (obere Darstellung FUP). Wort: Bei einem rcksetzdominanten Speicher steht der Rcksetzeingang unterhalb des Setzeinganges (untere Darstellung FUP). 7 6
Eingangsbyte EB 1.x 5 4 3 2
Doppelwort: Eingangsbyte 0.x 7 0 Eingangsdoppelwort ED0 Eingangsbyte 1.x Eingangsbyte 2.x 7 0 7 0 Eingangsbyte 3.x 7 0
Die Programmiersprache STEP 7 kennt drei Arten von Datentypen. Dies sind: Elementare Datentypen Zusammengesetzte Datentypen Parametertypen
55
56
16 16 16 32
11.3 Parametertypen
Parametertypen sind nur in Verbindung mit Bausteinparametern verwendbar, d.h. Operanden dieses Typs knnen als Aktualparameter verwendet werden. In der folgenden Tabelle werden diese benannt. Parametertyp BLOCK_FC BLOCK_FB BLOCK_DB BLOCK_SDB TIMER COUNTER POINTER ANY Beschreibung Funktion Funktionsbaustein Datenbaustein Systemdatenbaustein Zeitfunktion Zhlfunktion DB-Zeiger ANY-Zeiger Beispiel FC20 FB 3 DB10 SDB104 T12 Z3 P#E12.3 P#M10.0 BYTE 10
32 32 32 32
57
58
Byte L T B#16#AA MB 12
// Laden einer Byte-Konstante // Transferieren nach MB12
Es wird eine Hex-Zahl AA geladen und in das Merkerbyte MB12 bertragen. Die Angabe B#16 kennzeichnet eine Hex-Zahl mit 2 Stellen.
EB
CHAR L T A AB 0
// Laden eines einzelnen Zeichens // Transfer in ein Ausgangsbyte
CPUs der S7-Reihe besitzen insgesamt 2 AKKUs. Jeder AKKU hat eine Lnge von 4-Byte, also einem Doppelwort. AKKU 1 High-Wort High-Byte Low-Byte High-Byte Low-Wort Low-Byte
Es wird der ASCII-Code fr das Zeichen A ins Ausgangsbyte bertragen. Maximal 4 Zeichen knnen mit einem Befehl geladen und transferiert werden.
INT L T 2230 MW 10
// Laden der Zahl 2230 // Transferieren nach MW10
Der obige Lade-Befehl schiebt den Inhalt von EB1 ins Low-Byte des Low-Wort von AKKU 1. Der vorherige Inhalt von AKKU 1 wird automatisch in den AKKU 2 bertragen. Der vorherige Inhalt aus AKKU 2 geht dabei verloren. Mit dem Transferbefehl wird im zweiten Schritt der Inhalt von AKKU 1 (Low-Byte) ins Merker-Byte bertragen.
MB 1
Die nachstehende Tabelle zeigt die Operanden, die in Verbindung mit dem Ladeund Transferbefehl verwendet werden. Die Tabelle gilt gleichermaen fr Bytes (B), Wrter (W) und auch Doppelwrter (D).
Es wird eine 16-Bit breite Hex-Zahl ins Ausgangswort 18 bertragen. Die Angabe W#16 kennzeichnet eine Hex-Zahl mit 4 Stellen.
DINT L T L#3453600 MD 10
// Laden einer DINT-Konstanten // Transferieren nach MD10
Operand E A M D PE
Beschreibung Laden eines Eingangsbytes Laden eines Ausgangsbytes Laden eines Merkerbytes Laden eines Bytes aus einem DB Laden eines Bytes direkt aus der Peripherie
bertragen einer 32-Bit breiten Integerkonstanten ins Merker-Doppelwort 10. Der Zahlenbereich betrgt -2147483648 bis 2147483647.
DWORD L T
DW#16#AAAABBBB AD 10
59
Es wird eine 32-Bit breite Hex-Zahl ins Ausgangsdoppelwort 10 bertragen. Die Angabe DW#16 kennzeichnet eine Hex-Zahl mit 8 Stellen.
13. Funktionen
In Kapitel 5.2 wurde die Funktion bereits kurz angesprochen. Dieses Kapitel zeigt anhand von Beispielprogrammen den Aufbau, den Aufruf und die Parameterbergabe von Funktionen.
REAL L T 1.245600e+01 MD 20
// Laden einer Zahl 12.456 // Transferieren nach MD 20
Es handelt sich beim Datentyp REAL um eine Gleitpunktzahl, die 32-Bit breit ist. Eine Konstante dieses Typs kann als eine Dezimalzahl mit Kommastelle oder in exponentieller Darstellung eingegeben werden. Die Eingabe wird aber immer in die exponentielle Darstellung gewandelt.
S5TIME L T
UC FCn:
Der Datentyp S5TIME definiert einen Zeitwert im S5-Format. Der Datentyp ist 16-Bit breit und besteht aus der Kennung S5T# oder S5TIME#. Eine Eingabe kann mit der Angabe von Stunden (H), Minuten (M), Sekunden (S) oder Millisekunden (MS) erfolgen. Die maximale Zeitangabe betrgt 2 Stunden 46 Minuten und 30 Sekunden.
Der Datentyp TIME stellt einen Zeitwert im IEC-Format dar. Der Datentyp ist 32-Bit breit. Die Eingabe erfolgt durch Angabe von Tagen (T), Stunden (S), Minuten (M), Sekunden (S) und Millisekunden (MS). Dabei mssen nicht alle Angaben erfolgen, es ist beispielsweise mglich, nur die Tage und Minuten anzugeben.
// Laden einer Tageszeit // Transferieren nach AD 20 Eine Funktion kann Eingangs- (in), Ausgangs- (out), Ein- und Ausgangs- (in_out) und temporre (temp) Variablen deklarieren. Die Deklaration kennzeichnet die Datenflussrichtung. Temporre Variablen sind nur innerhalb der Funktion gltig. Die Adressierung der Variablen wird automatisch vorgenommen.
Der Datentyp TIME OF DAY ist die Angabe der Tageszeit. Der Datentyp ist 32-Bit breit. Die Eingabe erfolgt durch eine Uhrzeitangabe, wobei die Stunden, Minuten, Sekunden jeweils durch das Zeichen : getrennt sind. Die Angabe der Millisekunden erfolgt hinter der Sekundenangabe, getrennt durch einen Punkt. Diese Angabe ist nicht zwingend. Intern enthlt das Doppelwort die Anzahl der Millisekunden seit dem Zeitpunkt 0:00 Uhr. 61
62
13.3 Formalparameter
Alle Variablen, die Daten in die Funktion hinein oder herausgeben, nennt man Formalparameter. Im obigen Beispiel sind das die ersten drei Variablen. Werden Formalparameter deklariert, dann muss die Funktion mittels eines CALL-Befehls aufgerufen werden.
Die Funktion enthlt im Kopf die Deklaration der Formalparameter und der temporren Variablen. Die Kommentarzeilen im Netzwerk 1 erklren den Befehlsablauf. Im unteren Teil der AWL wird der Inhalt von AKKU1 und AKKU2 addiert und das Ergebnis nach FPInOut transferiert. Im Kopf des OB1 wurde eine neue temporre Variable FC_ZURUECK deklariert. Diese Variable wird im Netzwerk 1 zunchst auf 0 gesetzt. Dem Aufruf CALL FC1 folgen drei Formalparameter. Diese mssen zuvor in der FC1 deklariert worden sein. Die Zahl 500 (FPIn) wird an die Funktion bergeben. Der Rckgabewert (FPOut) wird hier dem Merkerbyte 0 zugewiesen. Mit FPInOut wird die Variable FC_Zurueck an die Funktion bergeben. Eine Variable wird durch das #-Zeichen angezeigt. Die Funktion kann FPInOut ndern und zurckliefern. Letztlich wird FC_Zurueck noch nach MW 10 transferiert. 63 64 Hat eine Funktion keine Formalparameter, dann sieht der Aufruf in OB1 wie folgt aus: UC FC 1 //sofortiger Sprung nach FC1 oder U E 0.0 //wenn E 0.0 = 1, dann CC FC 1 //springe nach FC1 (bedingter Sprung)
14. Funktionsbausteine
In Kapitel 5.3 wurde der Funktionsbaustein bereits kurz angesprochen. In Bezug auf den Aufruf, die Variablendeklaration und die Formalparameter gilt fr den Funktionsbaustein das gleiche wie fr die oben angesprochene Funktion. Das Beispiel aus Kap. 13 ist genauso mit einem Funktionsbaustein realisierbar. Dieses Kapitel zeigt daher im Wesentlichen nur die Ergnzungen zur Funktion.
Im Gegensatz zur Funktion kann ein Funktionsbaustein Daten speichern. Hierfr stehen so genannte Statische Variablen zur Verfgung. Neu ist auch, dass bis auf die temporren Variablen alle brigen mit einem Anfangswert versehen werden. Dies ist nur mglich, weil der FB seine Daten in einem so genannten InstanzDatenbaustein DB1 (siehe Bild) ablegt.
CC FBn:
Wie man sieht, ist die Struktur des DB1 (Bild unten) bis auf die temporren Variablen gleich der Variablendeklaration im FB1. Im DB1 knnen die Variablen auerdem mit einem Anfangswert versehen werden.
65
66
Der zugehrige Aufruf des Funktionsbausteins erfolgt in unserem Beispiel wieder aus dem OB1. Das folgende Bild zeigt die AWL des OB1.
Die schon im letzen Beispiel deklarierte Variable FBInOut wird mit dem Wert A0 (Dez 160) vorbesetzt. Dann erfolgt der Aufruf des FB1 mit dem zugehrigen Instanz-DB1. Es ist zu beachten, dass der FB1 und der DB1 vor dem Aufruf erstellt werden mssen. An den FB1 werden das Eingangswort EW0 und die Variable FBInOut bergeben. Der Rckgabewert FPOut wird im Merkerwort 0 abgelegt. Der Zugriff auf einen Instanz-DB1 ist auch auerhalb des FB1 mglich. Hierzu muss dieser zunchst mit dem Befehl AUF DI aufgeschlagen werden. Dann kann das Instanz-Datenbyte (DIB) 6 gelesen werden. Dieses Byte enthlt die statische Variable Statisch.
67
68
15. Zhler
Zum Beispiel drfen die Besucher einer Veranstaltung das Gebude aus Sicherheitsgrnden erst dann betreten, wenn die maximale Anzahl von Besuchern nicht berschritten wurde. Diese Aufgabe ist eine klassische Zhlaufgabe, fr die in STEP 7 fertige Zhlfunktionen vorhanden sind. Es ist bei dieser Funktion zu beachten, dass nur die ansteigende Flanke eines Impulses gezhlt wird, also nur der Signalwechsel von 0 nach 1.
Bei einer binren Abfrage liefert das Ergebnis einer UND-Verknpfung den Wert 1, solange der Zhlerstand grer NULL ist. AWL-Beispiel: U = Z1 M 0.0 // wenn Zhlerstand von Z 1 ungleich 0, dann //Merkerbit 0.0 = 1
Ein Zhler wird rckgesetzt, wenn das VKE am Rcksetzeingang des Zhlers den Zustand 1 hat. Zum Rcksetzen ist kein Flankenwechsel am Rcksetzeingang notwendig. AWL-Beispiel: U R E 0.1 Z1 // wenn E 0.1 = 1, dann //Rcksetzen Zhler 1
L L L L L
69
70
AWL-Beispiel: U ZV U ZR U S U R L T LC T U = FUP-Beispiel: E 0.0 Z1 E 0.1 Z1 E 0.2 Z1 E 0.3 Z1 Z1 MW 0 Z1 MW 2 Z1 M 10.0 // wechselt E 0.0 von 0 auf 1, dann // Zhlerstand + 1 // wechselt E 0.1 von 0 auf 1, dann // Zhlerstand 1 // wenn E 0.2 = 1, dann // Zhler mit Zhlwert 25 vorbesetzen // wenn E 0.3 = 1, dann // Zhler rcksetzen // Zhlerstand laden // Transfer nach MW 0 // Zhlerstand laden (BCD-codiert) // Transfer nach MW 2 // binre Abfrage Zhler 1 // M 10.0 = 1 wenn Z1 != 0
16. Zeiten
Bei vielen Steuerungsaufgaben mssen zeitgesteuerte Vorgnge irgendwelcher Art eingebaut werden. Die Programmiersprache STEP 7 stellt fnf verschiedene Zeittypen zur Verfgung: 1. 2. 3. 4. 5. Der Impuls SI Der verlngerte Impuls SV Die Einschaltverzgerung SE Die speichernde Verzgerung SS Die Ausschaltverzgerung SA
Das obige Beispiel zeigt noch einmal alle Funktionen, die in Verbindung mit einem Zhler mglich sind. In der Darstellung FUP sind auch Teilfunktionen (wie in Kap.15.1) mglich.
SI
1 0 1 0 Ausgang Starteingang
T
AWL-Beispiel: U L SI U = FUP-Beispiel: E 0.0 S5T#5S T1 T1 A 0.0 // Starteingang // Zeitwert T = 5s // SI-Zeit starten //Ausgang
Im Folgenden werden nun die unterschiedlichen Zeitarten vorgestellt und anhand von Beispielen erlutert.
73
74
SV
SE
1
1
0 1 Starteingang
0 1
0 Ausgang t T
// Starteingang // Zeitwert T = 5s // SV-Zeit starten //Ausgang
Starteingang
Ausgang
T
AWL-Beispiel: U L SV U = FUP-Beispiel: E 0.0 S5T#5S T1 T1 A 0.0
t T Aus dem Zeitdiagramm ist zu ersehen, dass der Ausgang nicht auf 1 geht, wenn der Starteingang vorzeitig auf 0 gesetzt wird.
AWL-Beispiel: U L SE U = FUP-Beispiel: E 0.0 S5T#5S T1 T1 A 0.0 // Starteingang // Zeitwert T = 5s // SE-Zeit starten //Ausgang
75
76
SS
1 Starteingang 0 1 Rcksetzeingang 0 1 Ausgang 0
SA
1 0 1 0 Ausgang t Starteingang
T
AWL-Beispiel: U L SS U R U = FUP-Beispiel: E 0.0 S5T#5S T1 E 0.1 T1 T1 A 0.0 // Starteingang // Zeitwert T = 5s // SS-Zeit starten // Zeit rcksetzen //Ausgang
t
AWL-Beispiel: U L SA U = FUP-Beispiel: E 0.0 S5T#5S T1 T1 A 0.0 // Starteingang // Zeitwert T = 5s // SA-Zeit starten //Ausgang
77
78
17.3 DB-Register
In den DB-Registern wird der geffnete Global-Datenbaustein (z.B. DB1) bzw. der geffnete Instanzdatenbaustein (z.B. DB2) gespeichert werden (es knnen max. 2 Datenbausteine geffnet sein).
Akkumulatoren 0 31 AKKU 1 AKKU 2 AKKU 3 AKKU 4 DB-Register DB1 (DB) DB2 (DI)
Klammerstack OR OR OR . . . BIE OR VKE FK* VKE FK* VKE FK* VKE FK*
KLSP
Klammerstackpointer
Statuswort (16Bit) Bit 0 bis 8 werden verwendet 8 BIE 7 A1 6 A0 5 OV 4 OS 3 OR 2 1 0 Bit-Nummer STA VKE /ER
OS
17.1 Akkumulatoren
Die Akkumulatoren werden von nahezu allen Befehlen des Programms verwendet. Lade-, Transfer-, Vergleichs- und Rechenoperationen nutzen alle diese Register. Unsere S7-300 besitzt 2 Akkumulatoren.
5 6 7
OV A0 A1
17.2 Adressregister
Die Adressregister werden bei der indirekten Adressierung (Pointer) verwendet. 8 BIE
79
80
STOP
Anforderung eines Kaltstartes Anwenderdaten
Lschen PAE/PAA, remanente und nichtremanente Merker, Zeiten, und Zhler Initialisieren mit Ladewerten aller DBs
ANLAUF
Kaltstart OB102
RUN
Peripheriedaten
Lschen PAE/PAA, nichtremanente Merker, Zeiten, und Zhler Erhalten bleiben remanente Merker, Zeiten, Zhler, und DBs.
Anwenderdaten
Neustart OB100
PAA an Peripheriebaugruppen bertragen Peripherieausgnge auerhalb des Prozeabbildes Freigabe der Ausgnge
Peripheriedaten
Erhalten bleiben PAE/PAA, remanente und nichtremanente Merker, Zeiten, Zhler und DBs
Anwenderdaten
Anwenderprogramm bearbeiten
Peripheriedaten
Unterbrechungszeit berschritten?
81
82
Setze adressiertes Bit auf 0 Zuweisen des VKE VKE-Operation Setze VKE auf 0 Setze VKE auf 1 Negiere das VKE Zeitoperationen Starte Timer als Impuls bei Flankenwechsel von 0 nach 1 Starte Timer als verlngerten Impuls bei Flankenwechsel von 0 nach 1 Starte Timer als Einschaltverzgerung bei Flankenwechsel von 0 nach 1 Starte Timer als speichernde Einschaltverzgerung bei Flankenwechsel von 0 nach 1 Starte Timer als Ausschaltverzgerung bei Flankenwechsel von 0 nach 1 Freigabe eines Timers fr das erneute Starten bei Flankenwechsel von 0 nach 1 Rcksetzen einer Zeit Zhleroperationen Vorbelegen eines Zhlers bei Flankenwechsel von 0 nach 1 Rcksetzen des Zhlers auf 0 bei VKE=1 Zhle um 1 vorwrts bei Flankenwechsel von 0 nach 1 Zhle um 1 rckwrts bei Flankenwechsel von 0 nach 1 Freigabe eines Zhlers bei Flankenwechsel von 0 nach 1 Ladeoperationen Lade (Konstante, Byte, Wort, Doppelwort, ) dualcodiert Lade (Konstante, Byte, Wort, Doppelwort, ) BCDcodiert Transferoperationen Transferiere Inhalt von AKKU 1
SS SA FR R S
U / UN O / ON X / XN UW OW XOW UD OD XOD FP / FN
R ZV ZR FR
L LC
S 83
LAR1 LAR2 TAR1 TAR2 TAR L STW T STW L DBNO L DINO L DBLG L DILG TDB +I -I *I /I
Lade Inhalt aus AKKU1 in AR1 Lade Inhalt aus AKKU1 in AR2 Transferiere Inhalt aus AR1 in AKKU1, Transferiere Inhalt aus AR2 in AKKU2, Tausche den Inhalt von AR1 und AR2 Zugriffsoperation auf das Statuswort Lade Statuswort in AKKU 1 Transferiere AKKU1 (Bits 0-8) ins Statuswort Datenbausteinoperationen Lade Nummer des Datenbausteins Lade Nummer des Instanz-Datenbausteins Lade Lnge des Datenbausteins in Byte Lade Lnge des Instanz-Datenbausteins in Byte Tausche Datenbausteine Mathematische Operationen Addiere zwei Integerzahlen (16Bit) AKKU1-L = AKKU1-L + AKKU2-L Subtrahiere zwei Integerzahlen (16Bit) AKKU1-L = AKKU2-L - AKKU1-L Multipliziere zwei Integerzahlen (16Bit) AKKU1 = AKKU2-L * AKKU1-L Dividiere zwei Integerzahlen (16Bit) AKKU1-L = AKKU2-L / AKKU1-L In AKKU1-H steht der Rest der Division Addiere zwei Integerzahlen (32Bit) AKKU1 = AKKU1 + AKKU2 Subtrahiere zwei Integerzahlen (32Bit) AKKU1 = AKKU2 - AKKU1 Multipliziere zwei Integerzahlen (32Bit) AKKU1 = AKKU2 * AKKU1 Dividiere zwei Integerzahlen (32Bit) AKKU1 = AKKU2 / AKKU1 Dividiere zwei Integerzahlen (32Bit) und lade den Rest der Division in AKKU1 Addiere zwei Realzahlen (32Bit) AKKU1 = AKKU1 + AKKU2 Subtrahiere zwei Realzahlen (32Bit) AKKU1 = AKKU2 - AKKU1 Multipliziere zwei Realzahlen (32Bit) AKKU1 = AKKU2 * AKKU1
/D NEGR ABS SQRT SQR LN EXP SIN ASIN COS ACOS TAN ATAN + i16 + i32 ==I <>I <I <=I >I >=I ==D <>D <D <=D >D >=D ==R <>R <R <=R >R >=R
Dividiere zwei Realzahlen (32Bit) AKKU1 = AKKU2 / AKKU1 Negiere Realzahl in AKKU1 Bilde Betrag der Realzahl in AKKU1 Berechne die Quadratwurzel einer Realzahl in AKKU1 Quadriere die Realzahl in AKKU1 Bilde den natrlichen Logarithmus einer Realzahl in AKKU1 Berechne den Exponentialwert einer Realzahl in AKKU1 zur Basis e Berechne den Sinus einer Realzahl Berechne den Arcussinus einer Realzahl Berechne den Cosinus einer Realzahl Berechne den Arcuscosinus einer Realzahl Berechne den Tangens einer Realzahl Berechne den Arcustangens einer Realzahl Addiere eine 16Bit Integer-Konstante Addiere eine 32Bit Integer-Konstante Vergleichsoperationen mit INT, DINT, REAL AKKU2-L = AKKU1-L AKKU2-L != AKKU1-L AKKU2-L < AKKU1-L AKKU2-L <= AKKU1-L AKKU2-L > AKKU1-L AKKU2-L >= AKKU1-L AKKU2 = AKKU1 AKKU2 != AKKU1 AKKU2 < AKKU1 AKKU2 <= AKKU1 AKKU2 > AKKU1 AKKU2 >= AKKU1 AKKU2 = AKKU1 AKKU2 != AKKU1 AKKU2 < AKKU1 AKKU2 <= AKKU1 AKKU2 > AKKU1 AKKU2 >= AKKU1 Schiebebefehle 86
+D -D *D /D MOD +R -R *D 85
Schiebe Inhalt von AKKU1-L nach links Schiebe Inhalt von AKKU1 nach links Schiebe Inhalt von AKKU1-L nach rechts Schiebe Inhalt von AKKU1 nach rechts Schiebe Inhalt von AKKU1-L mit Vorzeichen nach rechts, Freiwerdende Stellen werden mit dem Vorzeichen (Bit15) aufgefllt. Schiebe Inhalt von AKKU1 mit Vorzeichen nach rechts, Freiwerdende Stellen werden mit dem Vorzeichen (Bit31) aufgefllt. Rotierbefehle Rotiere Inhalt von AKKU1 nach links Rotiere Inhalt von AKKU1 nach rechts Rotiere Inhalt von AKKU1 um eine Bitposition nach links ber Anzeigenbit A1 Rotiere Inhalt von AKKU1 um eine Bitposition nach rechts ber Anzeigenbit A1 Akku-Befehle Umkehr der Reihenfolge der Bytes im AKKU1-L Umkehr der Reihenfolge der Bytes im AKKU1 Tausche Inhalt von AKKU1 und AKKU2 Inhalt von AKKU2 und 3 wird nach AKKU3 und 4 bertragen Inhalt von AKKU3 und 4 wird nach AKKU2 und 3 bertragen Inhalt von AKKU1, 2 und 3 wird nach AKKU2, 3 und 4 bertragen Inhalt von AKKU2, 3 und 4 wird nach AKKU1, 2 und 3 bertragen Inkrementiere AKKU1-LL Dekrementiere AKKU1-LL Bild- und Null-Befehle Bildaufbauoperation; wird von der CPU wie eine Nulloperation behandelt Nulloperation Typenkonvertierungen Konvertiere AKKU1-L von BCD (0 bis +/-999) in Integerzahl (16Bit) BCD-to-Int Konvertiere AKKU1 von BCD (0 bis +/-9 999 999) in Double-Integerzahl (32Bit) BCD-to-DoubleInt Konvertiere AKKU1 von DoubleInt (32Bit) nach
TRUNC
Real Konvertiere AKKU1 von Integer (16Bit) in DoubleInt (32Bit) Konvertiere AKKU1-L von Integer (16Bit) nach BCD Konvertiere AKKU1 von Double-Integer (32Bit) nach BCD (0 bis +/- 9 999 999) Wandle Realzahl in 32Bit-Integerzahl um Wandle Realzahl in 32Bit-Integerzahl um. Es wird abgerundet zur nchsten ganzen Zahl. Wandle Realzahl in 32Bit-Integerzahl um. Es wird aufgerundet zur nchsten ganzen Zahl. Wandle Realzahl in 32Bit-Integerzahl um. Es werden die Nachkommastellen abgeschnitten. Komplementoperationen Bilde 1er-Komplement von AKKU1-L Bilde 1er-Komplement von AKKU1 Bilde 2er-Komplement von AKKU1-(Int)) Bilde 2er-Komplement von AKKU1 (DoubleInt) Bausteinaufrufe FC, FB, DB Unbedingter Aufruf eines (FB, SFB, FC, SFC) mit Parameterbergabe Unbedingter Aufruf eines (FB, SFB, FC, SFC) ohne Parameterbergabe Bedingter Aufruf eines (FB, SFB, FC, SFC) mit Parameterbergabe Aufschlagen eines DB, DI Baustein-Endeoperationen Beenden Baustein Beenden Baustein absolut Beenden Baustein bedingt, wenn VKE=1 Sprungbefehle Springe unbedingt Springe bedingt, bei VKE=1 Springe bedingt, bei VKE=0 Springe bei VKE=1, VKE in das BIE-Bit retten Springe bei VKE=0, VKE in das BIE-Bit retten Springe bei BIE-Bit=1 Springe bei BIE-Bit=0 Springe bei berlauf speichernd (OV=1) 88
INVI INVD NEGI NEGD CALL UC CC AUF BE BEA BEB SPA SPB SPBN SPBB SPBNB SPBI SPBIN SPO
TAW TAD TAK ENT LEAVE PUSH POP INC k8 DEC k8 BLD NOP BTI BTD DTR 87 k8 0/1
LOOP
Springe bei berlauf speichernd (OS=1) Springe bei unzulssiger Arithmetikoperation (A1=1 und A0=1) Springe bei Ergebnis = 0 (A1=0 und A0=0) Springe bei Ergebnis > 0 (A1=1 und A0=0) Springe bei Ergebnis < 0 (A1=0 und A0=1) Springe bei Ergebnis != 0 (A1=1 und A0=0) oder (A1=0 und A0=1) Springe bei Ergebnis <= 0 (A1=1 und A0=1) oder (A1=0 und A0=0) Springe bei Ergebnis >= 0 (A1=1 und A0=1) oder (A1=0 und A0=0) Sprungverteiler Der Operation folgt eine Liste von Sprungoperationen. Der Operand ist eine Sprungmarke auf die der Liste folgenden Operation. Dekrementiere AKK1-L und springe bei AKKU1-L !=0 (Schleifenprogrammierung)
89