Automatisierungstechnik 2013/14 Einführung : Entwicklung der industriellen Automatisierung Struktur industrieller Anlagen modulare Systeme Verfügbarkeit vertikale Vernetzung Prozessebene Kommunikationssysteme Feldbus : Profibus DP Ethernet : TCP/IP und Profinet MES-Ebene Struktur MES Verkettung von Fertigungsmodulen, Handshakeprinzip Beschreibung nebenläufiger Systeme : Petrinetz Programmierung an der SPS-Schnittstelle Programmierung von MES-Kernfunktionen IT-Ebene (ERP) Struktur ERP redundanzfreie Datenhaltung (SQL) Kommunikation in der ERP-Ebene : Webservices, Middleware Zulieferer (supply chain) Dipl.-Ing. Reiner Doll, Technikerschule München ([email protected]) Entwicklung der industriellen Automatisierung Struktur industrieller Anlagen - zentrale Prozessleittechnik (1970) : Leitwarte mit Prozessrechner ( Echtzeit-BS, Infokompression [rot/grün], Führungsroutinen [Notaus]) Schnittstellentopologie : 4…20mA, NAMUR, NPN/PNP HMI mit Einzelanzeigen, Einzelbedienelementen Beispiele : Flugzeug, Kraftwerk -> Nächster Schritt : Modularisierung der Anlage - modulares, proprietäres Prozessleitsystem (1980) : Einführung des µP Bedienwarte , HMI als Grafik Zellen mit Zellenrechner (später PLC / SPS) Modularität : Komplexitätsreduzierung, Testbarkeit, Flexibilität Kommunikationsbedarf entsteht : proprietärer Systembus Beispiele : Teleperm M, Contronic Teleperm (Siemens) : CS 275 (redundant) AS (SPS) AS (SPS) HMI -> Nächster Schritt : open systems („Multivendor“) - modulares Mulitvendor-Leitsystem (1985..90) : Systembus als open system, offenes Kommunikationsprotokoll, Kommunikationsdienste Beispiel : MAP (manufactoring automation protocol : GM 1984, ISO/OSI, Token Bus) Struktur : Bus – Kommunikationsprozessor (L7-Dienste !!) - Endgerät MAP : MAP-Bus (open system) CP : MMS MMS !! Endgerät Hersteller A CP Endgerät Hersteller B CP Endgerät Hersteller C (wichtige Begriffe : Modularität, Protokoll, Dienst (Service-> Server), MMS ) -> Zukunft : Vereinheitlichung der Bussysteme (Ethernet ?) Modulare Systeme : - unabhängig funktionsfähig - unabhängig testbar (ggf. Testumgebung) - unabhängig entwickelbar - Schnittstellendefinition wichtig (optimal : Standardprotokoll) - Funktionsdefinition und Testverfahren sind zu dokumentieren - Modulsteuerstrategie muß entwickelt werden („Verkettung“) Bei modularen Systemen sinkt die Komplexität der Funktion je Modul, dafür steigt der Kommunikationsdedarf. Durch geeignete Anordnung (z.b. parallel) kann das Ausfallverhalten beeinflußt werden. Verfügbarkeit und Sicherheit MTBF p= _____________________ (statistisch ermittelte Werte) MTBF + MTTR q (Unverfügbarkeit) = 1 - p Phase 1 : Frühausfälle meist Produktionsfehler (Lötstellen, Steckkontakte) Abhilfe : Burn-In (Zykeln mit Streßbedingung) Beispiel : Drucksensor p=10bar , 1000 Druckschläge 12 bar, 48 h zykeln 0…70°C Phase 2 : Zufallsausfälle kein Verschleiß, aber zufällige Defekte mit etwa konstanter Unverfügbarkeit vorbeugende Wartung verlängert Phase 2 Beispiel : Verfallsdatum auf Servernetzteil, Ölwechsel Phase 3 : Verschleißausfälle Lebensdauer von Komponenten (typisch z.b. Kugellager) erreicht Fehlertoleranter Aufbau modularer Systeme : Klassisches Beispiel : Diodenquartett Ausfall von einer (ggf. mehreren) Diode(n) wird verkraftet : System ist nach außen immer noch eine Diode ! 3-fach redundanter Modulaufbau : TMR-Betrieb : „demokratische“ Entscheidung wenn eine Komponente ausfällt (typische Anwendung : Leitrechner in Flugzeug) Zuverlässigkeitsbetrieb : Betrieb solange noch funktionsfähige Komponenten vorhanden (typisch : Mehrstrahl-Jet) Sicherheitsbetrieb : Bei Ausfall einer Komponente werden Restkomponenten nur zum kontrollierten Runterfahren der Anlage benutzt Betriebsarten redundanter Systeme : dynamische Redundanz : Ersatzkomponente wird erst im Fehlerfall betrieben (cold standby, z.b. Notdiesel in Krankenhaus) statische Redundanz : Ersatzkomponente läuft immer mit (hot standby, z.b. 4-Stahl Jet) Gesamtverfügbarkeit modularer Systeme : Serienschaltung : Parallelschaltung : p(gesamt) = Produkt aller p(einzel) q(gesamt) = Produkt aller q(einzel) IM ÜBUNGSTEIL : Übung : Verfügbarkeitsberechnungen vertikale Vernetzung modularer Systeme Strukturierung in sich überlagernde Rechenebenen (SPS, Industrie-PC, Server) Verteilung der Funktionen (Modularisierung) Kopplung mit der Büro-IT (Gateways) CIM : Rechnergestützte Automatisierung („menschenleere Fabrik“) 1980 ..85 Strukturierung : was wird wo gerechnet ? altes Strukturmodell (1990) : - Prozessleitebene : große Datenmengen, schnelle Bussysteme, keine Echtzeit : Leitrechner, Datenbank - Zellebene : Prozessführung, Datenerfassung, Notbedienebene, Alarmbehandlung - Feldebene : Feldgeräte (SPS), busfähige Aktoren / Sensoren, Echtzeit, geringe Datenmenge Aktuelles Strukturmodell (2005) : Integration der Bürodatenverarbeitung (=Kopplung an Ethernet) Kommunikation mit Zulieferbetrieben (Supply chain) Durchgängige Vernetzung ohne Gateways von IT-Ebene bis SPS - ERP-Ebene : strategische Unternehmensebene, Betriebswirtschaft. SCM - MES-Ebene : Prozessführung, Datenerfassung, Verkettung der Fertigungsmodule - Prozessebene : Feldgeräte (SPS), busfähige Aktoren / Sensoren, Echtzeit, geringe Datenmenge Hier gebräuchliche Kommunikationssysteme : Beispiel : digitale Fabrik der tsm (alter Stand 2009 mit Profibus DP) : ERP nimmt Kundenaufträge entgegen und bearbeitet diese nach betriebswirtschaftlichen Gesichtspunkten. MES holt Aufträge aus ERP, bearbeitet diese nach technischen Gesichtspunkten (z.b. optimale Reihenfolge), und schickt Fertigungsbefehle an die Prozessebene. Der SPS-Master bedient die Module mit den von MES eintreffenden Aufträgen. Prozessebene Kommunikationssysteme Entwicklung (s.o.) : modulare Anlagenstruktur vertikale Vernetzung aller Ebenen Folgerung : Notwendigkeit geeigneter Kommunikationssysteme theoretische Basis : ISO/OSI-Modell (1984, MAP) Was ist ein Netz / Bus / Schnittstelle (Verfügbarkeit !) ? ISO/OSI-Modell : Application layer Anwendung (Programm) Presentation layer Codierung, Verschlüselung Session layer „Isar 12 bitte melden“ Transport layer Files - Pakete Network layer routing MAC layer (link layer) Physical layer Buszugriff, Busadresse Hardware Kommunikationskatalog für Simatic-SPS (na ja..) : Ethernet-IP-UDP Ethernet-IP-TCP Ethernet-IP-TCP-ISO Ethernet-IP-TCP-ISO-S7protokoll Ethernet- ISO-S7protokoll MPI-FDL- S7protokoll Profibus-FDL-FMS Profibus-FDL-DP IEC1185-FDL-PA (Profinet fehlt !) Profibus DP Layer 1 : - Toplogie (Grundlagen : Linie, Stern, Ring) Linientopologie, Segmentlänge 1200m, max. 3 Repeater max. 32 Teilnehmer, Stichleitungen max. 0,3m - Hardware, Datenformat (entspricht RS485) shielded twisted pair (130…150 Ohm) Sub-D 9-polig symetrisch +/- 5V, 390-150-390 Ohm am Komperator bis 12 Mbit/sec. 11 Bit seriell asynchron pro Byte Startbit low, Stopbit high, Parity, LSB first Layer 2 : - MAC-Verfahren Grundlagen : stochastische Verfahren – CSMA/CD deterministische Verfahren – Token passing Begriffe : aggregierte Bandbreite, Determinismus ….) Token bus, Gap update (Lücken möglich), Freitoken nach TRT Framelänge max. 255 Byte (246 Byte Data) : Startbyte Destinationadress Sourceadress Frame Control (Frage /Antwort ) Nutzdaten (Information) Hybridnetz : unterlagerter Master/Slave Slave : kein Token Master : in DP nur 1 echter Master ! (=Bussystem) Layer 3-7 : leer !! (alle Layer nur bei MAP) Layer 7 bei FMS vorhanden Bedeutung des Layer 7 in Feldbussystemen ! CRC Endbyte Profibus DP und Simatic S7 - Ursprüngliches Konzept : “dezentrale Peripherie” Bei räumlich ausgedehnten Anlagen ist die Verkabelung aller Peripherieelemente zu einer zentralen SPS aufwändig. Deshalb : Einsatz von DP-Slaves als dezentrale „Klemmenkonzentratoren“ . Diese werden an Orten mit vielen Peripherieelementen angebaut, und dort mit der Peripherie mit geringem Kabelaufwand verdrahtet. Der DP-Slave (keine SPS !) kommuniziert dann die Informationen seiner gesamten Peripherieverdrahtung über die 2Draht Busleitung zum DP-Master, also der SPS. SPS (Master) DPSlave Eingänge und Ausgänge DPSlave Beispiel für DP-Slave : ET-200 Serie von Siemens Eingänge und Ausgänge Profibus DP für modulare Anlagen : i-Slaves Ziel : Einsatz von Profibus DP in dezentraler Leittechnik (Module mit eigener SPS) Problem : In Profibus DP nur 1 Master möglich (bei dezentraler Peripherie auch sinnvoll..) Die Master-SPS betreibt am Profibus DP wie bei dezentraler Peripherie einige Slaves. Dies Speicher in den Slaves sieht der Master wie gehabt als Ein-Ausgänge : Sie gehören logisch zum Adresssystem der Master-CPU ! Statt einer Klemmenverdrahtung ist die Hardware am Slave aber nun als Speicher (im Kommunikationsprozessor) aufgebaut, der über einen zweiten Zugang von der i-Slave SPS aus zugegriffen werden kann. Dieser Speicher kann vom Slave nicht direkt adressiert werden, das Betriebssystem der i-Slave-SPS kommuniziert die Daten im Hintergrund mit dem im i-Slave konfigurierten Speicher : DP-Master Wird im Slave konfiguriert i-Slave DP-Slave E A A E Wird im Master konfiguriert Wird vom BS ausgeführt konfiguriert In der Praxis : Profibus DP mit 2 Simatic S7-SPS 1. Hardwarekonfiguration : Laden des fertig konfigurierten Projekts „Muster1“ , Speichern unter einem individuellen Namen (hier : DP_Doll) : Konfigurieren der DP-Vernetzung : In der Hardwarekonfiguration der Slave-Station wird die MPI/DP-Schnittstelle auf den Profibusbetrieb konfiguriert und an das Netz angekoppelt .. ..und in den Eigenschaften als DP-Slave konfiguriert. Dann folgt die Konfiguration der Datenschnittstelle im Slave : Hier als Beispiel ein Slave-Eingang mit der Länge Wort (Adresse EW0), es folgt noch ein Ausgangswort, dann wird gespeichert : Im Menü der Hardwarekonfiguration Station speichern und übersetzen wählen. Nun die Hardwarekonfiguration der Master-Station öffnen, Und die MPI/DP-Schnittstelle auf DP schalten, am Profibus anschließen und in der Betriebsart auf DP-Master parametrieren. Speichern, dann muß die DP-Leitung sichtbar werden : Aus dem rechten Hardwarekatalog wird nun die bereits projektierte Station gewählt, das ist hier unser DP-Slave, eine 314-CPU : Draufklicken, Maus gedrückt halten und die Station nach links ans DP-Kabel anschließen : Mit Drücken auf Koppeln wird die Station angeschlossen, dann wird vor dem Speichern die Konfiguration aufgerufen und die im Slave sichtbaren Datenbereiche werden doppelgeklickt: Hier ist rechts der vorher im Slave konfigurierte Eingang zu sehen, dieser wird nun im Master als Ausgang konfiguriert, wichtig ist daß die beiden Längen übereinstimmen (hier : Wort) Fertig -> Station speichern und übersetzen Programme : Im Master soll ein Schalter gelesen werden, der Wert wird an den Slave übertragen und an ein Ventil ausgegeben. Die Peripherieverdrahtung finden sie (eigentlich) in http://portal.ts-muenchen.de : ..wobei der Master hier aber leider fehlt (er wird bei neueren Projekten nicht mehr benutzt). Die Schalter am Master liegen auf EB124, wir verwenden E 124.0 Das Programm im Master ist schnell geschrieben, wir mißachten hier allerdings die Vorschriften zur Programmstrukturierung in FB’s, die in der Dokumentation angegeben sind : Ähnlich die Programmierung des Slaves, hier können wir aus den Ventilen am Band auswählen : Der Aufruf, der im OB1 schon enthalten ist, kümmert sich um den schnellen Zähler, der später gebraucht wird, hat hier aber keine Funktion. Nun noch beide Stationen auf die SPS laden, testen ! IM ÜBUNGSTEIL : Praktikum Kommunikation mit Profibus DP Ethernet : Grundlagen Layer 1 : Toplogie : Stern, Mittelpunkt als Switch oder Hub Hardware : 4 x twisted pair (shield, screen) RJ 45 “Western” : Spielzeugstecker 100baseT : 100 Mbit/sec Layer 2 : MAC-Adresse 6 Byte CSV, hardwareabhängig Framelänge ca. 1.5 kByte (Type = SAP) CSMA/CD -> switched Ethernet stochastisch : aggregierte Bandbreite, Plug+Play Layer 3 : Routing, heute immer IP Layer 4 : TCP , UDP , RFC1006 : ISO on TCP Layer 5,6,7 : Dienste des Kommunikationsprotokolls ( z.b. S7-Protokoll) Parameter der Ethernet TCP/IP-Verbindung Heute geschieht die Prozessanbindung meist über TCP/IP auf Ethernet 100baseT. Hierbei ist es wichtig, die Adressdaten der Kommunikation zu verstehen. Insbesondere die Service-Access-Points (Ports) sind auch wichtig : Windows-Rechner Layer 7 Programm nächster LSAP (Port) Layer 4 CP erster LSAP (Port) Layer 3 IP: Layer 2 MAC: 00:a0:ab:ef:1a:12 SPS_1 Layer 2 MAC: 00:ac:ff:2f:10:13 Layer 3 IP: 107.12.14.12 CP 107.12.14.11 SPS_2 MAC: 00:ba:f0:d2:12:14 IP: 107.12.14.13 Layer 4 LSAP (Port) 2000 LSAP (Port) 2000 Für die Verbindung PC -> SPS_2 gelten also folgende Kommunikationsparameter : LSAP oder SSAP (Local/Source Service Access Point) : RSAP oder DSAP (Remote/Destination Service Access Point) : SIP (Source IP-Adress) : DIP (Destination IP-Adress) : SMAC (Source MAC-Adress) : DMAC (Destination MAC-Adress) : 2001 2000 107.12.14.11 107.12.14.13 00:a0:ab:ef:1a:12 00:ba:f0:d2:12:14 Der erste SAP (Default-SAP) für S7 Verbindungen ist immer 2000, bei weiteren Verbindungen zählt das System den SAP hoch : 2001, 2002 … Der Sinn einer Layer 3 – Verbindung : IP-Routing Netze : IP-Adressen werden im QDN-Format (quad dotted notation) angegeben : Beispiel : 62.245.200.166 Das erste Byte besagt in der Orginalversion des Protokolls, ob es sich bei der Adresse um eine Class A, Class B oder Class C – Adresse handelt. Dies gibt an, welcher Teil der Adresse die Netzadresse („Vorwahl“), und welcher Teil die Rechneradresse in diesem Netz ist. Class A (erstes Byte zwischen 1 und 127) : Class B (erstes Byte zwischen 128 und 191) : Class C (erstes Byte zwischen 192 und 223) : erstes Byte ist Netzadresse die ersten beiden Byte sind Netzadresse die ersten drei Byte sind Netzadresse Netmask : Diese Aussage kann auch durch die netmask angegeben werden, die beiden den Stellen der Netzadresse (netbit) 1, bei denen der Rechneradresse (hostbit) 0 ist : netmask Class A : 255.0.0.0 netmask Class B : 255.255.0.0 netmask Class C : 255.255.255.0 Die netmask wird auch kürzer geschrieben, indem man einfach die Anzahl der 1-en in der netmask neben der IP-Adresse hinter einem Schrägstrich angibt : 204.66.23.2 / 24 ist z.b. eine Adresse in einem Class-C Netz Broadcast : In einem Netz können für bestimmte Funktionen alle Rechner zugleich angesprochen werden, man nennt dies einen Broadcast. Die Broadcastadresse in einem Netz wird gebildet, indem man alle hostbit = 1 setzt. Netadress : Das Netz selbst (eigentlich das Kabel..) hat die Adresse, bei der nach der Netzadresse alle hostbit = 0 gesetzt werden. Hier sind nun zwei lokale Netze zu sehen, links das Biernetz, rechts das Weinnetz. Die Hosts im Biernetz haben die Adressen : Pils : Bock : Weizen : 182.166.17.4 / 16 182.166.18.5 / 16 182.166.18.6 / 16 Die Hosts im Weinnetz haben die Adressen : Barolo : Chianti : Brunello : 62.245.200.162 / 8 62.245.123.2 / 8 62.245.1.1 / 8 Der Router Monika zwischen den beiden lokalen Netzen hat links die Adresse 182.166.0.1 und rechts die Adresse 62.0.0.1 (jeweils die ersten IPs in den lokalen Netzen). Pils Bock Weizen Monika Barolo Chianti Brunello Jeder Rechner hat nun eine Tabelle konfiguriert, in der seine IP-Nachbarschaft angegeben ist. Diese Tabelle heißt routing-table. Routing-table von Pils : Net Netmask Gateway Interface 182.166.0.0 62.0.0.0 255.255.0.0 255.0.0.0 -182.166.0.1 eth0 eth0 erreichbare Netze deren Netmask der zuständige Router die Netzkarte Routing-table von Monika : Net Netmask 182.166.0.0 62.0.0.0 255.255.0.0 255.0.0.0 Gateway --- Interface eth0 eth1 Jetzt will Pils eine Nachricht an Weizen schicken : ping 182.166.18.6 routing-protokoll Das IP-Protokoll im Layer 3 von Pils prüft nun anhand der Routing-table, ob Weizen lokal erreichbar ist, oder ob ein Router beauftragt werden muß. Hierzu vergleicht er Zeile für Zeile, indem er die Zieladresse 182.166.18.6 mit der in der Zeile stehenden netmask bitweise parallel UND-verknüpft (ein 32-bit Prozessor kann das in einem einzigen Befehl), und das Ergebnis mit der in der ersten Spalte stehenden netadress vergleicht. Hier ist schon die erste Zeile erfolgreich. arp-protokoll Nun muß der Frame aber im Layer 2 als Zieldaresse die MAC von Weizen bekommen, und die ist momentan noch unbekannt. Layer 3 gibt die Ziel-IP 182.166.18.6 an das Arp-Protokoll. Das ARP-Protokoll schickt nun einen Layer 2 – Broadcast ins Netz mit dem Inhalt : Who has 182.166.18.6 ? Jeder Rechner vergleicht in Layer 3, Weizen sieht, daß er gemeint ist und ruft zurück : It’s me ! Damit hat er sich verraten, weil an dem Antwortframe seine MAC dransteht. Das ARPProtokoll trägt nun den Zusammenhang IP-MAC für Weizen in eine Cache-Tabelle ein (ARPCache), so daß beim nächsten Frame nicht wieder gefragt werden muß. Der Ethernetfame kann nun gebildet werden, der Ping geht an Weizen. Jetzt will Pils eine Nachricht an Brunello schicken : Ping 62.245.1.1 Der Ablauf ist der Gleiche wie vorher, nur erkennt Pils in seiner Routing-table, daß er Monika beauftragen muß. Er schickt (nach ARP auf Monikas IP) Monika den Frame. Monika prüft nun in ihrer Routing-table, wohin der Frame muß, und sieht in Zeile 2 das richtige Netz. Sie setzt auf Eth1 (ihre zweite Netzkarte) einen ARP-Request auf Brunello ab, und erhält seine MAC, dann schickt sie ihm das Paket von Pils. Subnetting : IP-Adressen wie oben beschrieben (Class A,B oder C) werden heute kaum noch benutzt. Man teilt diese Netze in kleinere Teilnetze auf, dieser Vorgang wird Subnetting genannt. Hierzu wird die netmask, also die Grenze zwischen Netzteil und Hostteil in der IP, nicht mehr an der Bytegrenze sondern beliebig innerhalb der QDN gezogen. Wenn man die IP nicht in Byteschreibweise, sondern binär angibt, ist das nichts besonderes : 62.245.200.163 / 29 ist kompliziert zu handhaben, im letzten Byte verläuft die Grenze. 11111000.11110101.11001000.10100 011 Netzadresse (dezimal 62.245.200.160) lautet diese IP binär Rechner Es ist auch leicht zu erkennen, wieviele Rechner dieses Subnet aufnehmen kann : Mit 3 Bit sind 8 Adressen möglich, eine davon ist die Netadress, eine der Broadcast, also sind noch 6 IP für Rechner frei. (Vermutlich wird aber noch eine davon für einen Router benötigt) kleine Übung : Teilen Sie das B-Netz 132.130.0.0 / 16 in 12 Subnetze, geben Sie für das letzte dieser 12 Netze die erste und letzte für Rechner nutzbare IP an ! (Lösung : erste IP = 132.130.176.1, letzte IP = 132.130.192.254) Wenn Sie mehr Übung brauchen, finden Sie theoretische Übungen und ein TCPIP- Praktikum auf einem lauffähigen IP-Netz mit Router unter http://onlinekurse.ts-muenchen.de Überblick : Ethernetkommunikation in der Prozessebene Im Folgenden wird eine Reihe von möglichen Realisierungen besprochen : Basiskommunikation : Hier kann mit S7-Geräten (proprietär) über verschiedene Layer4-Protokolle kommuniziert werden. TCP, UDP und ISO-on-TCP ist mit Standard-Ethernethardware möglich. Profibus DP- ähnliche Kommunikation : Profinet I/O löst mit ähnlicher Topologie (Investitionsschutz, sanfte Migration) DP ab. Deterministische Echtzeitkommunikation : Profinet IRT basiert auf (nicht billiger) Spezialhardware EtherCat arbeitet ähnlich, wegen dem Summenframeverfahren aber noch schneller Sercos als Bussystem vor allem für Antriebe hat ähnliche Eigenschaften “Objektorientierter“ Ansatz : Profinet CBA ist ein (zukunftsweisender ?) Ansatz zum Entwurf komplexer Systeme ISO-on-TCP Durch eine kleine Erweiterung in Layer 4 (TCP) wird das früher von Siemens (S5) häufig benutzte ISO-Protokoll in den modernen Kommunikationsrahmen eingebaut. Siemens nennt als größten Vorteil die Nachrichten-Orientierung dieser Protokollvariante. Das bedeutet grob, daß nicht „gesichtslose“ Frames übertragen werden, und der Empfänger sich aus diesem Wust dann (mithilfe des TCP-Protokolls) seine Info wieder zusammenbasteln muß. Es wird vom Sender mitgeteilt, wann eine Nachricht beginnt und wann sie zu Ende ist. (Eigentlich eine klassische Layer5-Funktion, wird aber nicht als solche bezeichnet…) Das Protokoll wurde 1987 als „Request for Comment“ veröffentlicht : RFC 1006 Layer 7 : Simatic S7 Layer 7 : Simatic S7 …. …. RFC 1006 RFC 1006 Layer 4 : TCP Layer 4 : TCP Layer 3 : IP Layer 3 : IP Layer 2 : MAC Layer 2 : MAC Layer 1 : 100baseT Layer 1 : 100baseT In der Praxis : ISO-on-TCP mit 2 Simatic S7-SPS Diese Kommunikation ist nicht so ganz einfach zu realisieren. Im Prinzip läuft es so ab : Man erzeugt mit Hilfe eines Tools von Siemens („Open Communication Wizard“) alle nötigen Kommunikationsparameter. Diese werden in den beteiligten Stationen in je einem DB gespeichert. Der Kommunikationskanal muß dann mit Hilfe eines FB geöffnet werden, weitere FB (Send und Receive) ermöglichen dann den Datenaustausch. Sie müssen das nicht selber hinkriegen, sollten aber die Struktur der Kommunikation verstanden haben. 1. Kommunikationsparameter und Bausteine einfügen : Laden Sie das fertig konfigurierte Projekt „Muster2011“ und speichern Sie es unter einem individuellen Namen (hier : TCP_Doll) lokal auf Laufwerk c: Nun rufen Sie den „OPEN COMMUNICATIN WIZARD“ auf (Programme/Siemens), den Sie, falls nicht installiert, auch hier finden können : //filer_labornetz/software/tcp_wizard.zip Geben Sie im Wizard zunächst Gerät A (hier die Bandstation) an, und den Ordner, in dem sich die Bausteine hier befinden : Alle weiteren Fenster durchklicken, bis zur Auswahl des Verbindungstyps. Hier wählen Sie ISO-on-TCP : Nun gleich beide Geräte parametrieren, hier Band und Vertikalarm : Dann die nötigen Parameter, wie z.b. IP-Adressen, angeben : Dann Service-Access-Points(hier Transport-SAP, TSAP genannt) am Besten als symbolischen Text eingeben, dann wird der Wert vom Wizard festgelegt : Nun müssen die Parameter in einem Datenbereich der SPS-en gespeichert werden. Das kann in ein einem DB geschehen, in den Siemens-Vorlagen wird aber stets ein UDT (user defined type) verwendet. Weil laut Pflichtenheft der digitalen Fabrik alle Kommunikationsadressen unter 100 liegen sollen, wird hier der UDT 50 benutzt : (http://portal.ts-muenchen.de/Dateien/digitaleFabrik_2010_11.pdf, Seite 20) Das war’s, mit einigen „weiter“ und „fertig stellen“ kann man den Wizard abschließen. Nun im Simatic Manager das Projekt öffen, die erste Station (Band) anwählen, und aus der Bibliothek Standard Library in Communication Blocks die drei Funktionen FB65 (Connect), FB63 (Send) und FB66 (Close) in denm Bausteinordner der SPS kopieren : Für die Nutzung der UDT50-Daten wird nun noch ein DB50 erzeugt . Neues Objekt einfügen -> Datenbaustein : Der UDT wird (nach Doppelklick auf den DB50) eingefügt : Das gleiche Spiel mit dem Kommunikationspartner (hier das Vertikalmodul), nur daß hier statt dem FB63 (Send) der FB64 (Receive) eingebunden wird : 2. SPS-Programme : Es soll ein Demo-Programm entstehen, das manuell durch Variablensteuerung bedient wird. Für die Steuersignale werden Merker ab 10 benutzt, die Signale aus den Bausteinen werden im gleichen Adressbereich wie die Bausteinnummern belegt (z.b. MB63 für FB63). Verbindungsaufbau in Modul A (Band) : M10.0 startet (manuell) den Verbindungsaufbau, wird bei erfolgter Verbindung (DONE, M65.0) wieder zurückgesetzt. M10.1 zeigt dann die stehende Verbindung an. Für den Verbindungsaufbau in Modul B (Vertikalmodul) wird der OB1 dort identisch programmiert. Testen : Alles in die Stationen laden, und die Bedienung durch „Variable beobachten und steuern“ vorbereiten. Dann zuerst beim passiven Teilnehmer (Vertikal) und dann beim aktiven Teilnehmer (Band) den Verbindungsaufbau durch M10.0 = 1 starten. -> Jetzt muß bei beiden Stationen der M10.0 wieder FALSE werden und M10.1 mit TRUE die stehende Verbindung anzeigen ! Weiter zur Datenübertragung : Im Band wird der Inhalt von MB20 nach Triggern mit M10.4 geschickt : Im Vertikalmodul wird der empfangene Datenwert in MB20 gespeichert : Testen : Wieder in der Variablenbedienung zunächst die Verbindung aufbauen : Dann am Empfänger den Eingang öffnen (Enable) M10.4=TRUE, am Sender einen Wert in den Datenspeicher MB20, und dann am Sender mit M10.4 den Sendevorgang triggern : Bei anderer Bedienung verhält sich das etwas komisch (man kann z.b. durch Spielen erreichen, daß Daten auch ohne Trigger M10.4 gesendet werden). Das kann aber nur bei manueller „Fehlbedienung“ passieren …. Jetzt kann man noch den Verbindungsabbau einprogrammieren, das geht aber auch zum testen einfach durch Neuladen der Stationen. Profibus DP -> Profinet Profibus DP wird auf Ethernet „abgebildet“. Projektierung und Struktur genau wie bei Profibus DP (nur 1 Master) : Profibus-Master -> Profinet-Controller Profibus-Slave -> Profinet-Device i-Slave -> i-Device Einheitliche Verkabelung, alles Ethernet (100baseT) Aber : sanfte Migration der Kommunikationsstruktur (Investitionsschutz) Profinet I/O : Umfasst die in den höheren Layern Profibus-kompatiblen Datentransport-Protokolle. Transportprotokolle je nach Datentyp : Zyklische Daten (Controller/Device, wie Profibus) : - Profinet RT („Real-Time“ ) : kein Layer 3 (oh !), nur MAC, etwa 10ms Zykluszeit, Standard-Ethernethardware Azyklische Daten (Konfigurationsparameter) : - UDP/IP, niedrige Priorität bei Switch, ca. 100 ms Zykluszeit Profinet IRT (Isochronous Real Time) : Layer 2 (MAC), Zykluszeit < 1ms, Jitter < 1µs Spezialhardware nötig für Netzstruktur (siehe unten) Profinet CBA (Component based automation) : Kommunikationssystem, das auf Windows-Betriebssystemfunktionen basiert. Objektorientierter Ansatz. Hat (bis auf den Namen) nichts mit Profinet zu tun … Realisierung von Profinet IRT : Die Kommunikation in IRT ist kein Standard-Ethernet Protokoll ! Es kann nur auf Spezial-Hardware ausgeführt werden, die eine Zeitsynchrone Datenübertragung zwischen den Stationen sicherstellt. Hierzu werden alle aktiven Geräte (Teilnehmer und Switches) mit einem hochgenauen Timing-Protokoll synchronisiert. PTP : precision time protocoll PTP kann als Software realisiert die Geräte bis auf einige Microsekunden, in Hardware ausgeführt (teuer !!) bis auf einige Nanosekunden genau synchronisieren. Die synchrone Zeitbasis erlaubt nun, den Sendezyklus auf der Ethernetleitung in einen starren Teittakt, mit eimem „isochronen“ (=zeitgleichen) Bereich am Anfang und einem darauf folgenden Standard-Ethernetbereich zu unterteilen. Im isochronen Bereich werden die Nachrichten von den Switches nach fest konfigurierten Schema übermittelt , ähnlich einem Zeitmulitplexverfahren. Kollisionen oder andere Störungen können nicht auftreten. Im Standardbereich können (wenn der Switch das unterstützt) die RT-Daten priorisiert werden. Damit wird die maximale Sendelatenzzeit berechenbar -> IRT ist deterministisch ! In der Praxis : Profinet I/O mit S7 und Wago-Peripherie Dearchivieren Sie wieder das Muster.zip – Projekt aus \\filer_labornetz\STT\Musterprojekte. Dann muß in einer beliebigen Station die Profinet-Device Komponente hinzugefügt werden. Weil im Simatic Manager die Wago-Komponenten nicht enthalten sind, werden sie als Geräte-Stamm-Datei (GSD) nachinstalliert : Sie können den Datensatz von www.wago.com holen, oder aus dem Labornetz laden : \\filer_labornetz\at\wago-gsd-dateien Und dann in der Hardwarekonfig unter Extras einbinden : Nun erklären Sie die gewählte Station zum I/O-Controller, indem Sie die CPU (Steckplatz 2, dort den zweiten Eintrag X2) rechtsklicken, und „Profinet I/O-System einfügen“ wählen. Es muß dann das Profinet-„Kabel“ sichtbar werden : Nun kann man das Profinet-Device (genau wie bei DP einen Slave) an den Controller anbinden. Hierzu wählen Sie aus dem Hardware-Menü rechts aus Profinet I/O den Menüpunkt „andere Feldgeräte“, und dort das richtige Wago I/O-Device. Anklicken, Maus gedrückt halten und Gerät nach links ans Profinetkabel ziehen : Dann wählen Sie die Objekteigenschaften an. Hier können Gerätenamen und IP-Adressen (Vorsicht : muß natürlich ins Subnet vom Controller passen !) vergeben werden. Als nächstes konfiguriert man die HW-Variante des Profinet-Device. Schauen Sie auf der Baugruppe nach, welcher Schnittstellenbaustein (digitaler Ausgang) angebaut ist, und konfigurieren Sie diesen unten im Fenster in den zweiten Steckplatz. Das in der Hardware gesteckte dritte Modul (Abschlußmodul) muß in der Konfguration nicht angegeben werden. Schließlich weisen Sie einen Gerätenamen zu. Dahinter steckt mehr : es wird hier das gewünschte Device ausgewählt, falls mehrere im Netz vorhanden sind, und die IP-Adresse wird diesem Device (zusammen mit dem Gerätenamen) zugewiesen. Hierzu wählen Sie im Hardware-Konfig den Menüpunkt Zielsystem (englisch PLC für programmable logic controller) und dort den Unterpunkt Ethernet. Nachdem alles erfolgreich gespeichert wurde, kann nun die Konfiguration auf die SPS geladen werden (siehe oben, azyklische UDP-Kommunikation) Mit Hilfe der Variablenbeobachtung können Sie ihr System nun testen … IM ÜBUNGSTEIL : Praktikum : Kommunikation mit Profinet I/O Realisierung von Profinet CBA : Wesentlicher Hintergrund : Die Realisierung von Anwendungen wird in zwei Tätigkeitsgfelder aufgeteilt : A) Der Entwickler einer Automatisierungskomponente entwirft eine „Klasse“, die den Anlagenentwicklern vor Ort zur Verfügung zur Verfügung gestellt wird. Die komplexen internen Abläufe der Komponente bleiben dem Anlagenentwickler verborgen B) Der Anlagenentwickler setzt die Komponente wie in der Objektorientierten Programmierung in seinen Projekt ein, und „verdrahtet“ nur noch die Kommunikation. Um die Technik hinter Profinet CBA verstehen zu können, ist ein kleiner Ausflug in die Betriebssystemtechnik nötig : In Windows 3.1 wurde von Microsoft ein Mechanismus implementiert, der objektorientierte Interaktion zwischen verschiedenen Programmen ermöglicht. (Das ist übrigens gar nicht so einfach wie es sich anhört : in einem Rechner mit nur einem Prozessor läuft zu einer Zeit natürlich nur ein Programm. Will das jetzt mit einem anderen kommunizieren, ist das Problem, daß der Partner ja gar nicht läuft. Die nötigen Mechanismen, damit das klappt, nennt man „Interprozesskommunikation“) Für den Anwender hat das den Vorteil, z.B. den Zugriff auf eine Datenbank in ein Textverarbeitungsprogramm einbauen zu können : Serienbriefe können so sehr einfach adressiert werden. Wird der Text ausgegeben, so ruft das Textprogramm automatisch die Datenbank auf und veranlasst sie, den nötigen Datensatz zu suchen und zu schicken. Microsoft hat das OLE genannt : Object Link Embedding. Die Schnittstellendefinition für die Kommunikation solcher Objekte wurde von Microsoft COM genannt : Component Object Model. Einer der beiden Prozesse (der Client : hier das Textprogramm ) fragt hier den anderen (den Server : hier die Datenbank) nach Leistungen (Services, meist Daten). Mit Windows NT wurde das Ganze dann so erweitert, daß über das Netz auch Services in anderen Rechnern genutzt werden können : DCOM (distributed COM). Ein Rechner kann in einem Anderen ein Programm dazu bringen, etwas zu tun und ihm dann z.b. Daten zu schicken. Dieser DCOM-Mechanismus wird nun in das Betriebssystem der beteiligten SPS eingebaut. Damit kommunizieren Geräte der Feldebene unter Profinet CBA mit Methoden aus der PCWelt (Windows). Das hat mit üblicher Feldkommunikation (Feldbus, z.b. Profibus DP oder Profinet I/O) bis auf den Namen nicht das geringste gemeinsam ! Nachteile sind die langsame Reaktion (großer Rechenaufwand in der SPS ) und die Probleme, die auftreten, wenn Microsoft DCOM irgendwann nicht mehr unterstützt. Ein Anlagenmodul (durch eine SPS dezentral gesteuert) wird als Komponente betrachtet. Ähnlich der objektorientierten Betrachtungsweise in modernen Programmiersprachen mit Daten (Eigenschaften -> properties) und Programmfunktionen (Methoden -> methods) eines Objekts besteht eine solche Komponente aus Daten, die an einer definierten Schnittstelle zugreifbar sind (das sind meist Handshake-Signale), und Funktionen, also Programmen, die mit diesen Daten arbeiten. Solche Komponenten werden mit Entwicklungswerkzeugen erzeugt, bei Siemens z.B. mit dem Simatic Manager. Man definiert Daten in der SPS als Datenbausteine (DB) und schreibt Programme als Funktionen (FC) oder Funktionsbausteine (FB). Daraus erzeugt der Simatic Manager eine Profinet-CBA – kompatible Komponente, die als XML-Datei gespeichert wird. Diese Komponenten beschreiben also ganz allgemein objektorientierte Funktionsmodule, die nicht auf eine spezielle SPS o.ä. zugeschnitten sind. Idealerweise sind diese Komponenten dann mehrfach nutzbar. Profinet-Komponente : FB DB DatenFB schnittstelle FB Die Komponenten (auch von verschiedenen Herstellern !) können in der Anlage nun beliebig verkettet werden. Dies geschieht übersichtlich in grafischer Darstellung mit einem Verschaltungseditor : Weiter werden die Komponenten, die in Profinet über TCP/IP kommunizieren, auch noch mit IP-Adressen versehen. Damit ist die Komponente dann auf ein spezielles Anlagenmodul (SPS) spezifiziert. Als Verschaltungseditor bietet z.B. Siemens das Tool Simatic IMAP an. In der Praxis : Profinet CBA mit Simatic-SPS 1. Komponenten erstellen ( Tätigkeit A : Komponentenentwickler ) Wir konfigurieren im Simatic Manager eine Anordnung mit 2 Modulen, den Prozessmaster und ein Fertigungsmodul. Nach Speichern der Hardwarekonfiguration wählen wir in der Projektansicht nach Klick der rechten Maustaste auf ein Modul den Menüpunkt : 1.1 Profinet Interface erstellen : Hier wird die beschriebene Datenschnittstelle der Komponente erzeugt : Nach Hinzufügen einer „Funktion“ und umbenennen auf einen aussagefähigen Namen wird darin ein „PN-Baustein“ erzeugt, der einen Datenbaustein in der SPS darstellt : Ein-Ausgänge werden mit dem richtigen Datenformat definiert. Wenn alle nötigen Daten definiert sind, kann das Interface (der DB..) gespeichert werden. 1.2 Funktion programmieren : Nun muß die Programmfunktion erzeugt werden, die mit den Daten des vorher definierten Interface arbeitet. Hier wird z.b. ein einfacher Handshake auf Masterseite im FB210 erzeugt : Wichtig : Alle Ein-und Ausgänge der Funktion müssen unbedingt als Variablen definiert werden, damit der Baustein bibliotheksfähig wird. Stellen sie bei „Extras“ die Parameter auf „minimal“, dann ist später die Zuweisung von Werten übersichtlicher. Hier definieren Sie die Datenschnittstelle mit Varaiblen Wenn das linke Fenster fehlt, hier klicken ! Extras : BausteineinstellungenFB-Parameterminimal Da hinein wird jetzt die gewünschte Funktion programmiert … 1.3 Komponente erzeugen : Nun muß das XML-File erzeugt werden, das die CBA-Komponente beschreibt. Mit rechtem Mausklick auf die Station klicken, den Menüpunkt „Komponente erzeugen“ wählen : Hier einen Speicherort wählen. Entweder ihr Homedirectory oder irgendeinen Pfad, der für sie individuell lautet … Die Warnung zu fehlerhafter Zyklusbelastung einfach wegklicken … … das Gleiche wird mit der zweiten Station ausgeführt : 2 Komponenten sind verfügbar ! 2. Komponenten verschalten (Tätigkeit B : Anwender): Nachdem mit dem Simatic Manager alle nötigen Komponenten erzeugt sind, kann ein Verschaltungseditor die Anlage konfigurieren. Wir verwenden hier IMAP von Siemens. Starten Sie IMAP, und klicken Sie mit der rechten Maus in die Projekt-Bibliothek. Nun importieren sie nacheinander die gewünschten Komponenten, indem Sie den richtigen Pfad eingeben und das XML-File anklicken : Nun klicken Sie nacheinander die Komponenten aus der Bibliothek, die sie vernetzten wollen, und ziehen die Symbole mit der Maus auf die Fläche „Anlagenplan“ : Ordnen Sie die Symbole in der Anlagensicht ein wenig, und klicken Sie mit der rechten Maus auf jedes Symbol, um seine IP-Adresse (und damit die Festlegung, welche konkrete Station nun diese Funktion ausführen soll…) zu konfigurieren : Durch Klicken auf die Anschlüsse der Komponenten können sie nun die Vernetzung graphisch erstellen : Nun können Sie den Verbindungseditor die nötigen Daten für das Projekt generieren lassen. Hier wird nun alles erzeugt, was nötig ist um die graphisch definierten Kommunikationsverbindungen der XML-Komponenten mittels DCOM auf den beteiligten SPS auszuführen : Projekt -> generieren -> Steurungsanteil -> Alles neu Wenn alles ohne Fehlermeldung läuft, können Sie das Projekt nun auf die Anlage laden : Online -> Download alle Instanzen -> Alles IM ÜBUNGSTEIL : Übung : Überblick zu den Kommunikationsvarianten Schnittstellen von Fertigungsmodulen -> Standardschnittstellen Nach der rein elektrotechnischen Betrachtung der Schnittstellenprotokolle wenden wir uns nun der Anwendung dieser zu. Wie, mit welchen Signalen, wird im Industrieumfeld in modularen Anlagen kommuniziert ? Auftrag : was, wieviel … Timing : jetzt ! Für die Informationsschnittstellen an Fertigungsmodulen sind firmeninterne Standardprotokolle gebräuchlich (Standard : gleiche Schnittstelle an allen Modulen !). Funktionsbeschreibung von Kommunikationsschnittstellen mit Petrinetzen „Ein Petri-Netz ist ein mathematisches Modell von nebenläufigen Systemen. Es ist eine formale Methode der Modellierung von Systemen bzw. Transformationsprozessen.“ (Quelle : Wikipedia, siehe auch Automatentheorie und Moore-Automaten) Es besteht aus Zuständen („state“, diese sind in der Hardware durch die Ausgänge speichernder Bauteile definert) und Zustandsübergängen („transition“). Eine Marke (Punkt) definiert, ob ein Zustand aktiv oder nicht aktiv ist. Funktionsregel : Wenn alle Zustände vor einer Transition akitv sind, schaltet diese. Die Marke wandert dann auf die nachfolgenden Zustände : Zeitpunkt 1 : Zeitpunkt 2 : Um Ein- und Ausgänge deutlicher unterscheiden zu können, werden die Eingänge ohne Kreise dargestellt und an die Transition seitlich angeschrieben : A=1 A=0 B=1 B=0 (Weitere einfache Beispiele : Mausfalle …) Darauf basierend wurden SPS-Programmiersprachen entwickelt, z.B. Graph7 und Higraph von Siemens. IM ÜBUNGSTEIL : Übung : Aufgaben zum Petrinetz IM ÜBUNGSTEIL : Übung : Aufgaben zum Petrinetz - 2 Man kann damit auch die Kopplung freilaufender Anlagenteile beschreiben (später „lose Kopplung“ gennant), das sogenannte Erzeuger-Verbraucher-Problem : Handshake – Kommunikation In Industrieanwendungen wird bei der Kommunikation zwischen Modulen meist vom Handshakeprinzip Gebrauch gemacht. Das bedeutet im Wesentlichen, daß alle Signale vom Kommunikationspartner quittiert werden („Polizeifunk“), und daß Signale immer abhängig vom Zustand des Partners erfolgen. Das minimalste Handshake-Protokol wäre ein quittiertes Start-Signal. Entwurf eines minimalen Handshakeprotokolls : 1. Welche Signale sind Eingänge und Ausgänge bei den beteiligten Geräten ? Start Modul A Modul B Acknowledge 2. Darstellung in Timing-Diagramm (I/O-Richtungs-Information geht verloren !) : Start Acknowl. 3. Realisierung des Protokolls mit Petrinetz für Gerät B : Ack = 0 Ack = 1 Start= 1 Start= 0 Beispiel : Handshakeprotokoll der digitalen Fabrik der tsm (Stand 2010): READY START AUFTR. x y ACK. BUSY (ERROR) IM ÜBUNGSTEIL : Praktikum : Handshake in der Prozessebene IM ÜBUNGSTEIL : Übung : Testfragen zur Handshakekommunikation MES-Ebene Das MES-System wandelt die Produktaufträge (Kunde oder Disposition) in auf der zur Verfügung stehenden, modularen Anlage (Prozessebene), ausführbare Fertigungsschritte um. Das MES-System reagiert im Idealfall online auf Ereignisse in der Prozessebene (Störungen aller Art) und kompensiert diese durch Änderung des Fertigungsablaufs. Das MES-System erfasst online Betriebsdaten während der Fertigung (Maschinenzeiten, Materialund Energieverbrauch usw.), fasst diese zu Betriebskenndaten KPI (key performance indicators) zusammen nd übermittelt diese an ERP zur Prozessoptimierung Das MES-System archiviert alle wichtigen Aktionen auf Prozessebene (Tag-logging), um den Prozessablauf lückenlos dokumentieren zu können Struktur eines MES-Sytems : Obwohl die in der Praxis vorkommenden MES-Syteme sehr uneinheitlich und stark dem jeweiligen Prozess angepasst sind, läßt sich doch meist eine innere Grundstruktur erkennen : ERP MES-System Manufactoring flow design Manufactoring flow planing Manufactoring flow execution Prozessebene Flow design : Abbildung der Produktion als Datenmodell : Was ist das Produkt ? Beschreibung durch Article Master Data (Stammdatensatz in ERP). Definiert wird das Produkt/Artikel (z.b. das Waschmaschinenmodell), nicht der eine Gegenstand (z.b. mit individueller Seriennummer) der vom Kunden XY bestellt wurde. Womit wird es hergestellt ? Datenmodell der Maschinen, Schnittstellen, Bedienpersonal usw. Wie wird es hergestellt ? Work plan, bill of process (Arbeitsvorschrift oder Prozessplan) Sequence numbers (Nummern der Arbeitsschritte) Was ist das Produkt ? Beispiel für eine Produktstammnummer : Womit wird es hergestellt ? Die Arbeitsprozesse (Fertigungsmodule) werden ebenfalls durch Nummern abgebildet. Hierbei können entweder Fertigungsvarianten oder andere Untergruppen gebildet werden. Wie wird es hergestellt ? Dann wird der Ablauf durch die Prozesse (Verkettung!) als Tabelle oder grafisch geplant : Work plan als Tabelle : Work Plan grafisch dargestellt : Die Festlegung der Funktionsreihenfolge innerhalb einer modularen Anlage wurde früher „Verkettung“ genannt. Dieser Begriff kommt aus dem Maschinenbau, weil ein wesentliches Teilproblem der Verkettung der Materialfluß darstellt, der mit verschiedensten Techniken realisiert wird. Verkettung nennt man dort die Verbindung der Module durch Materialtransporteinrichtungen. Für die Leittechnik bedeutet „Verkettung“ aber die Koordinierung der Modulaktionen in der Prozessebene : serielle Kopplung : Manufakturbetrieb, Herstellen von Einzelstücken parallele Kopplung : Serienbetrieb mit allen Modulen gleichzeitig, Chargenfertigung starre Kopplung : Im Parallelbetrieb werden die Module von einem gemeinsamen Anlagentakt gesteuert lose Kopplung : Die Module laufen frei ohne überlagerten Anlagentakt (Materialpuffer, Auswirkung auf Verfügbarkeit…) flexible Fertigung : Die Anlage kann ohne Umrüsten verschiedene Produkte herstellen (Variantenfertigung, angestrebt : Losgröße 1) Die Begriffe Charge und Los werden in der Literatur verschieden definiert. Im Weiteren gilt hier : Charge ist die Anzahl von Produkten, die in einem Serienlauf (Produktionsanlauf – Produktion – Produktionsauslauf) gefertigt werden Losgröße ist die Anzahl der Produkte (nacheinander innerhalb einer Charge), die identischen Aufbau haben. Moderne Anlagen sollen in loser Kopplung Losgröße 1 fahren können. Die Zuordnung der nötigen Auftragsinformation bei Losgröße 1 wird dann schwierig. -> Produktidentifikation (z.b. Barcode-Aufkleber, RFID …) oder parallele Virtualisierung. Flow planing : Die zu fertigenden Produkte werden in eine optimale Reihenfolge sequenziert. WICHTIG : Die Produktreihenfolge, nicht die der Modulaktionen (-> flow design)!! Hier sind verschiedenste Optimierungskriterien möglich : Kostenoptimierung Zeitoptimierung Ordnung nach Kundenpriorität Energieverbrauch … Der Flow plan kann sich auch dynamisch während der Laufzeit verändern, wenn z.b. Probleme in der Prozessebene auftreten (Maschinenausfall) oder durch Qualitätsmängel Nachfertigung von Produkten nötig wird. Hier ist üblicherweise ein manueller Eingriff an einer graphischen Darstellung an einem MESTerminal möglich, nötige manuelle Unterstützung zeugt aber oft von mangelhaften MESAlgorithmen. Beispiel für ein Sequenzierterminal : Flow execution : Hier werden die Vorgaben für den als flow plan geplanten Fertigungsablauf rechnergestützt umgesetzt. Programme führen die Abläufe aus und reagieren im Idealfall auf Ereignisse, die im Fertigungsablauf eintreten (Störungen). Der Ablauf der Fertigung wird auf einem MES-Terminal für den Anlagenfahrer graphisch dargestellt, und durch Rückmeldung von Anlagendaten (Betriebsdatenerfassung BDE) ständig überwacht und dokumentiert (Reports). Beispiel : Visualisierung eines Prozessablaufs : Einführung in Visual Basic : “VB classic“ VB classic ist eine Interpretersprache (Skipt-Sprache), das bedeutet, sie wird nicht übersetzt bevor man sie ausführen kann. Deshalb ist auch keine Deklaration von Variablen nötig. Der Interpreter ist Bestandteil aller Windows-Betriebssysteme. Ein VB-Skript wird einfach mit einem beliebigen Editor erstellt, name.vbs genannt (name beliebig) und durch anklicken ausgeführt. (Vorsicht beim Speichern : die meisten Editoren nennen das erstmal .txt !) Anweisung : a=b+1; a=b+c a=b–c a=b*c a=b/c Schleife : solange Bedingung gilt do while a < 0 ….. ….. loop Zählschleife : für i von 1 bis 100 for i=1 to 100 ….. ….. next Verzweigung : a>0? ja Vergleichsoperatoren : nein > < >= <= = <> if a > 0 then .…. ….. ….. else ….. ….. end if größer als kleiner als größer gleich kleiner gleich gleich ungleich Stringoperationen : Strings (und Variableninhalte) zusammenfügen : neu = “Hallo“ & name Stringanalyse : a = right (test,3) b = left (test,4) c = mid (test, 5, 3) 3 Zeichen von rechts aus test in a 4 Zeichen von links aus tes in b 3 Zeichen ab der 5-ten Stelle von test in c Ein-Ausgabe : a = InputBox(“Text zur Eingabe”) IM ÜBUNGSTEIL : Übung : Programmieren in VB classic (VB Skript) MsgBox(a) Ein Werkzeug zur komfortablen Programmierung objektorientierter Sprachen : Visual Studio Microsoft-Systeme haben in der modernen Industrietechnik eine dominierende Stellung eingenommen. Deshalb wird hier die von Microsoft stammende Entwicklungsumgebung „Visual Studio“ (in der kostenfreien Variante „Visual Basic Express 2010“) benutzt. In der Praxis : Microsoft Visual Studio 1. Visual Basic 2010 Express öffnen, Forms-Projekt anlegen : Forms-Anwendung wählen Einen Namen vergeben Einen Pfad angeben Wir benutzen einen Button und zwei Textbox-Elemente : Die Details der Elemente (z.b. Namen, angezeigte Texte und so) können sie in den Eigenschaften einstellen, die auch über das Ansicht-Menü anzeigbar sind. Jetzt wird’s ernst. Aufgabe : in Feld 1 wird eine Zahl reingeschrieben, die soll verdoppelt und an Feld 2 ausgegeben werden, wenn man den Button drückt. Das Programm dazu schreiben sie, indem sie es an das gewünschte WindowsBedienelemente anbinden. Dieses Element (unser Button) doppelklicken sie bitte : Programmkopf Wenn sie den drücken….. ..passiert, was sie hier reinschreiben Ich lese den Wert aus Textbox1 ein (siehe Eigenschaften !), verdopple und gebe an Textbox2 aus : Wenn ich hier was schreibe, das dem Editor schon bekannt ist (das werden später auch die Methoden und Eigenschaften sein !), dann schlägt er was vor…. ..das ich dann wählen kann ! ..und so entsteht meine Lösung : Die ich ausprobiere, indem ich den „Debug“ – Modus starte : Pfeil drücken ! (mit Rechteck wieder stoppen) .. sieht dann so aus : Das wär’s. Alles speichern, und wenn sie das Programm ohne die Entwicklungsumgebung benötigen, finden Sie im Projektordner unter \bin\debug das .exe file. IM ÜBUNGSTEIL : Praktikum : Einführung in Visual Studio Zur Variablendefinition in VB : In VB classic : - Variablen werden gar nicht definiert Das geht in Skriptsprachen wie VB classic. Die Variale wird vom Interpreter erst zur Laufzeit angelegt wenn sie zum ersten mal einen Wert bekommt. In Vb .net : - Variablen im Modul („public class“) definieren, so daß sie nur innerhalb des Moduls gelten : o Private x as Variablentyp - Variablen im Modul definieren, so daß sie auch außerhalb zugreifbar sind : o Public x as Variablentyp - Variablen innerhalb einer Subroutine (private sub ..), die außerhalb nicht gelten : o Dim x as Variablentyp Objektorientierte Programmierung von MES-Kernfunktionen Zum Begriff „Objektorientierung“ : Bei der Programmierung im Industrieumfeld wird heute praktisch ausschließlich von der Technik der Objektorientierung Gebrauch gemacht. Objektorientierung bedeutet hier im Wesentlichen, daß der Programmierer vorgefertigte Stukturen benutzt (die von Anderen programmiert wurden), und diese nur noch wie in einem Lego-Baukasten zusammensetzt. Diese „Strukturen“ bestehen aus Daten, die Eigenschaften beschreiben („Attribute“) und dazugehörigen Programmen, die mit diesen Daten arbeiten können („Methoden“). Eine solche Struktur wird „Objekt“ genannt. Die Programme (Methoden) sind nur zur Bedienung zugänglich, ihr Code bleibt nicht sichtbar und unveränderbar. Die benutzte Programmsprache und die in einer Firma meist vorhandenene eigene Bibliothek (z.b. Programmteile zur Steuerung von Robotern oder ähnliches) beinhalten nun eine Vielzahl solcher Objekte. Diese werden beim Aufruf (diesen Vorgang nennt man auch „Referenzieren“) quasi in das eigene Programm hineinkopiert. Die Kopiervorlagen für die Objekte werden „Klassen“ genannt, sie sind in einer „Klassenbibliothek“ gespeichert. Prinzipielle Vorgehensweise : - Nachschauen, welche Klasse die gewünschten Funktionen beinhaltet - Ein Objekt daraus benutzen ( „referenzieren“ oder „instanzieren“) - Die Methoden aufrufen, die Attribute benutzen Beispiel für objektorientiertes Programmieren in Visual Basic : In VB können eigene Klassen sehr einfach erzeugt werden. Damit soll hier prinzipiell gezeigt werden, wie eine objektorientierte Struktur aufgebaut ist : Erzeugen einer Klasse : class haus public name, strasse, zahl=0 sub rein() zahl=zahl+1 end sub end class HIER WIRD EINE KLASSE ERZEUGT DAS SIND ATTRIBUTE DAS IST EINE METHODE Benutzen der Klasse : set meins=new haus meins.name="daheim" meins.strasse="falter" meins.rein meins.rein MIT set …new WIRD EIN OBJEKT AUS DER KLASSE haus ERZEUGT (REFERENZIERT..) ATTRIBUTE WERDEN GESETZT METHODE rein WIRD AUFGERUFEN (Person geht rein) set deins=new haus deins.name="dort" deins.strasse="baum" usw.. msgbox meins.name msgbox meins.zahl EIN ATTRIBUT WIRD AUSGEGEBEN (Die Profis werden hier die Nase rümpfen, weil Attribute eigentlich nicht direkt zugegriffen werden sollten (private/public), sondern nur durch dafür vorgesehene Methoden. Kapselung heißt das, und es bewirkt, daß man mit den Attributen keinen Unsinn treiben kann ..) Dokumentation der Klassenbibliothek MES_2014_lib.dll : Die Funktionen sind nicht optimiert, sondern so weit wie möglich vereinfacht, um einen guten Überblick über die Grundfunktionen zu ermöglichen. Hierzu wird die Klassenbibliothek MES_2014_lib benutzt, die Objekte zur Bedienung der Peripherieschnittstellen beinhaltet. Die Klassen werden in folgender Form beschrieben : Name Name : sps_modul Attribute : ip (String) auftrag (Byte) status (String) error_type (string) Methoden : start_modul() lies_status() reset_error() Beschreibung der Attribute Beschreibung der Methoden Beispielprogramm ------------- Attribute Methoden SPS-Bedienung : Name : sps_modul Attribute : ip (String) auftrag (Byte) status (String) fehler (string) Methoden : start_modul() lies_status() ip auftrag status fehler start_modul() lies_status() IP-Adresse des Moduls (1.0.6.x) Fertigungsauftrag für Modul (Lagerwahl) Dezimalwert des Auftragbits : 1, 2, 4, usw. (jeweils nur ein Bit setzen !) Nach Initialisierung : - connected (nach Verbindungsaufbau) - not connected Nach start_modul() : - not ready (SPS läuft gar nicht) - running (Fertigungsschritt läuft) - ok (nach erfolgreichem Fertigungsschritt) - error (nach gescheitertem Fertigungsschritt) - Zulieferlager leer (Nur bei Linearmodul ! ) - Zulieferlager bestückt (Nur bei Linearmodul ! ) startet Modul mit einem Standardhandshake liest den aktuellen Betriebszustand aus dem Modul minimales Anwendungsbeispiel : Imports mes_2014_lib Public Class spstest Private vertikal As New sps_modul Private Sub Button1_Click() Handles Button1.Click vertikal.ip = "1.0.6.4" vertikal.auftrag = 2 vertikal.start_modul() Do vertikal.lies_status() Loop Until vertikal.status = "ok" End Sub End Class RFID-Bedienung : Name : rfid_controller Attribute : Busadress (Byte) Wert (Byte) status (string) Methoden : schreib_wert() lies_wert() busadress wert status Adresse des Controllers am RS485-Bus ,it den Werten 1 (linear), 2(vertikal), 3(horizontal) und 4(lager) gelesener oder zu schreibender Datenwert (ID als laufende Nummer) zeigt Verbindung (active, ok, no_tag) schreib_wert() lies_wert() schreibt Wert auf den Tag liest Wert vom Tag Anwendungsbeispiel : Imports mes_2014_lib Public Class rfidtest Private horizontall As New rfid_controller Private Sub Button1_Click() Handles Button1.Click busadress = „horizontal“ lies_wert() ‘hier muß der status ausgewertet werden ! End Sub End Class ERP-Bedienung : Name : erp_connect Attribute : id (String) teil (String) fehler(Byte) auftrag(Byte) Methoden : lies_teil() lies_fehler schreib_sc lies_sc id teil auftrag fehler sc Produkt-ID des Produkts (laufende Nummer als String) Auswahl der zu lesenden Info : unten, mitte, oben, lager Ausgabe der Variante für gewähltes Bauteil (1, 2, 3, beim lager auch 4) Ausgabe von lies_fehler : 0 –> alles ok, 1-> Auftrag nicht vorhanden Wert des Sequence-Call (1 : vorhanden, 0 : nicht vorhanden) lies_teil() liest aus ERP-Datenbank (Bestückungsliste) den Auftrag für Bauteil lies_fehler() liest aus ERP-Datenbank, ob ein Auftrag mit dieser id vorhanden (0 : kein Fehler, Teil ist in Datenbank. 1: Fehler, Teil nicht vorhanden) schreib_sc() schreibt Sequence-Call (=1) lies_sc () liest Sequence-Call entferne_sc() setzt den Sequence-Call zurück (=0) Anwendungsbeispiel : Imports mes_2014_lib Public Class erptest Private horauftrag As New erp_connect Private Sub Button1_Click() Handles Button1.Click horauftrag.id = 2 horauftrag.teil = „oben“ horauftrag.lies_teil() textbox1.text = horauftrag.auftrag End Sub End Class In der Praxis : MES-Funktion objektorientiert programmieren Wir öffnen ein neues Windows-Forms-Projekt in Visual Studio : Die oben angesprochene Klassenbibliothek MES_2014_lib binden wir ein, indem wir unter „my Projekt“ rechts im Projektmappen-Menü und Klick auf „Verweise“ im mittleren Bild den Punkt „Hinzufügen“ aktivieren : Nun muß angegeben werden, welche Bibliothek zugefügt werden soll. In unserem Fall ist der Pfad zur MES_2014_lib.dll anzugeben : Nun die Funktion des Windows-Forms : Wir wollen erreichen, daß die SPS bei Knopfdruck eine Aktion durchführt, als Auftrag geben wir einen Wert fest vor. Nach Aktion soll das Form warten, bis die SPS wieder auf „ok“ geht : Einbinden der Klassenbibliothek Imports mes_2014_lib Public Class spstest Objekt referenzieren Private vertikal As New sps_modul Private Sub Button1_Click() Handles Button1.Click vertikal.ip = "1.0.6.4" vertikal.auftrag = 2 vertikal.start_modul() Attribute setzen Do vertikal.lies_status() Methode aufrufen Loop Until vertikal.status = "ok" End Sub End Class Zum Testen muß natürlich in der Prozessebene die angesprochene SPS ein geeignetes Projekt tragen. Hierzu steht auf //r2d2/filer/stt/musterprojekte das archivierte Projekt : MES2014.zip bereit. Alle Fertigungsmodule sind hier mit einem minimalen, aber funktionsfähigen Programm und pflichtenheftkonformer Datenstruktur programmiert. Die Bedienung geht auch noch ein wenig eleganter. Eine Textbox wird in das Form eingefügt, um den Modulstatus „online“ anzuzeigen : Imports mes_2014_lib Public Class spstest Private vertikal As New sps_modul Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click vertikal.ip = "1.0.6.4" vertikal.auftrag = 2 vertikal.lies_status() TextBox1.Text = vertikal.status My.Application.DoEvents() If vertikal.status = "ok" Then vertikal.start_modul() vertikal.lies_status() TextBox1.Text = vertikal.status My.Application.DoEvents() Do vertikal.lies_status() TextBox1.Text = vertikal.status My.Application.DoEvents() Loop Until vertikal.status = "ok" End If End Sub End Class IM ÜBUNGSTEIL : Praktikum : SPS objektorientiert ansprechen Anzeigen des Modul-Status Bewirkt Anzeige bevor’s weitergeht Nur starten, wenn betriebsbereit Detail der SPS / Rechner - Schnittstelle : Eine wichtige Teilfunktion aus obigem Beispiel soll näher betrachtet werden : Leitrechner in Industrieanlagen kommunizieren wie die anderen Geräte auch immer mit Handshakeprotokollen. Zur Erinnerung : - Gerät A meldet START - Gerät B quittiert den Empfang von START mit QUITT Im Petrinetz : /Quitt Start Quitt Da die Arbeitsweise des Betriebssystems im Rechner anders als die in der SPS ist, kann ein Entwurfsverfahren wie das Petrinetz hier aber nicht sinnvoll benutzt werden. Ein PC kann das so nicht realisieren (Im Kern : es fehlt der OB-Ablaufzyklus !). Deshalb müssen wir die Funktion in einem zur Funktionsweise passenden Werkzeug beschreiben, optimal im Struktogramm. Der PC muß warten, bis das Signal des Kommunikationspartners eintrifft, indem er die Frage nach dem erwarteten Signal (hier START) immer wieder neu stellt : lies den Signalwert solange das Signal noch nicht eingetroffen ist Dieses Verfahren wird in der Informatik als „Polling“ (aktives Warten) bezeichnet. kleines Bilderrätsel zum Thema : …..was ist falsch ? IM ÜBUNGSTEIL : Übung : Kommunikation SPS <-> PC IM ÜBUNGSTEIL : Praktikum : Verkettung von Modulen der Prozessebene ERP-Ebene Ausgangsbasis für die Entstehung von ERP-Systemen (früher PPS, ProduktionsplanungsSystem oder ähnlich..) ist die Idee, alle Firmendaten in einer gemeinsamen Datenbank zu speichern. Dann werden auch Querverbindungen möglich, die vorher schwer zu realisieren waren. Beispiel : Wenn die Personaldaten und die Produktionsplanung gemeinsam zugänglich gespeichert sind, kann ohne großen Aufwand der Personaleinsatz für eine bestimmte Produktionsphase geplant werden. Die Software, die die gewünschten Aussagen aus dem Datenbestand generiert, ist meist in Module gegliedert. stark vereinfachte Übersicht : Kunden, Aufträge Finzanzen Personal SQL-Datenbank Produktion Lager, Maschinen, Gebäude Strukturbild von SAP : Entscheidend für die gute Funktionalität eines ERP-Systems ist die genaue Anpassung an die Bedürfnisse eines Betriebs, das sogenannte „Customizing“. Es werden die Module ausgewählt, die für die Geschäftsprozesse nötig sind, und diese dann an die lokalen Gegebenheiten angepasst. SAP war lange dafür berühmt, daß wichtige Funktionen sogar erst vor Ort beim Kunden programmiert worden sind. Kommunikation ERP-MES Die Schnittstelle zum ERP-System wird ausschließlich mit Rechnern realisiert. Die Kommunikationsbasis ist deshalb ein Rechnernetz, also meist Ethernet und TCP/IP. Darauf werden Middleware-Protokolle benutzt, wobei sich der moderne Standard Webservices gegen ältere Middleware wie z.b. CORBA durchgesetzt hat. In weniger technisch, eher betriebswirtschaftlich geprägten Umgebungen findet man auch EDI als Schnittstelle. Middleware-Kommunikation mit Webservices : „Ein Webservice ist ein Dienst, der über einen URL aufgerufen wird und XML-Daten liefert“ : ERP-System MES-System XMLDaten Webserver send receiv 123ad 11qwe …. Daten (z.b. SQL) receiv httpKanal RPC : remote procedure call send 123ad 11qwe Daten (z.b. CSV) Die Kommunikations – Endpunkte werden Stubs genannt. Sie sind beim Webserver meist in PHP programmiert, und werden vom Client aufgerufen : Remote procedure call (RPC). Die Stubs wandeln lokale Formate (z.b. CSV, character separated values) in das einheitliche Transportformat XML um. Dieser Vorgang wird Marshalling genannt, bzw. auf der Gegenseite Demarshalling. Als Kommunikationskanal wird HTTP benutzt, weil es weit verbreitet ist und wegen der Nutzung von Port 80 auch einfach von Firewalls zu handeln ist. HTTP : HTTP (Hypertext Transport Protocol) definiert vorrangig das Zusammenspiel von Webserver und Webbrowser im Internet. Es besteht im wesentlichen aus 4 Schritten : OPEN : der Client baut eine TCP-Verbindung zum Server auf. SEND : der Client schickt einen HTTP-Request an den Server, in dem normalerweise ein GET-Befehl beinhaltet ist, der den Server auffordert, ein Dokument zu schicken. RECEIVE : der Client empfängt den http-Response vom Server, der üblicherweise eine HTML-Seite zum Anzeigen enthält. Möglich sind hier auch Fehlermeldungen (z.b. Dokument nicht gefunden). CLOSE : der Server schließt die TCP-Session wieder Im industriellen Umfeld wird natürlich kein Browser benutzt, sondern ein Programm holt über http im Automationsablauf die Daten vom Server : B2B ( business-to-business) – Kommunikation. Größter Vorteil des http-Protokolls : Es ist ein weit verbreitetes Standardprotokoll (Web), und die Kommunikation läuft ohne Probleme auch über Firewalls, weil der Port 80 praktisch immer offen ist. Webservices ohne Browser : Da aus Programmen heraus ja nicht über einen Browser kommuniziert wird, muß ein Webservice natürlich auch direkt ansprechbar sein. Hier kann man z.b. einen Telnet-Client benutzen. In Win7 muß dieser erst aktiviert werden (Systemsteuerung / Programme und F. / Windows-Funktione aktivieren und deaktivieren). Dann gibt man die korrekte (!) URL einfach in der Kommandozeile ein. IM ÜBUNGSTEIL : Praktikum : Webservice mit telnet bedienen XML : XML (eXtensible Markup Language) wird wie alle Markup-Languages mittels Tags strukturiert. Die Tags geben quasi die Bedeutung der Inhalte vor. In XML können die Tags selber definiert werden : <Automarke> VW </Automarke> Regeln : Jedes Dokument besitzt genau ein Wurzelelement. Als Wurzelelement wird dabei das jeweils äußerste Element bezeichnet, z.B. <auftrag>. Alle Elemente mit Inhalt besitzen ein Beginn- und ein End-Tag (z. B. <eintrag>Eintrag 1</eintrag>). Als Dokumentkopf wird angegeben : <?xml version="1.0" encoding="UTF-8" ?> (Die Version 1.0 ist die aktuelle, UTF-8 ist der übliche Zeichensatz im Web) Beispiel : <?xml version="1.0" encoding="UTF-8" ?> <Chargenauftrag> <Turm1> <Teil1>1</Teil1> <Teil2>2</Teil2> </Turm1> </Chargenauftrag> IM ÜBUNGSTEIL : Ein XML-File schreiben IM ÜBUNGSTEIL : Praktikum : Aufruf eines Webservice mit Browser Ein MES-System für die digitale Fabrik der Technikerschule : ERP XML-Kommunikation objektorientiert tsMes TERMINAL Kernprogramm (Core) in VB.net ---------------------------------------------------- TCP/IP-Kommunikation objektorientiert PROZESS IM ÜBUNGSTEIL : Projekt : MES für die digitale Fabrik der tsm