TIA Profinet Daten auslesen und schreiben TiA V17

Nilem1209

Level-2
Beiträge
22
Reaktionspunkte
0
Hallo zusammen,

ich bin frisch aus dem Studium und sehr neu in der SPS Programmierung und möchte folgendes lernen:

ich habe an eine S7-1200 einen Roboter und mehrere Maschinen angebunden.
Die SPS ist hierbei PN Controller und die anderen sind Devices.
Angenommen ich habe alle Teilnehmer erfolgreich über Ihre gsdml in mein Netzwerk eingebunden, Adressbereiche definiert etc..
Plan ist es nun, zyklisch alle E/As der PN- Teilnehmer auszulesen bzw. zu beschreiben. Hierzu würde ich gerne alle Eingänge in jeweils einen globalen DB schreiben, entsprechend auswerten und Ausgänge raus geben.

Also bspw.: Roboter PN Ausgänge -> SPS PN Eingänge -> globale DB (z.B. DB_Roboter_PN) -> Auswertung -> SPS PN Ausgänge -> Roboter Eingänge

Das eben für alle Teilnehmer.

Gibt es hierfür fertige FBs ? Generell Tipps & Anregungen von eurer Seite aus für Lösungsansätze?

Vielen lieben Dank im Voraus und LG
 
Hallo,
wenn du deine PN Teilnehmer mit GDSML eingebunden hast und die Adressbereiche definierst hast, sind die doch schon in deinem Ein/Ausgangsbereich (PAE / PAA). Du kannst dann die Eingänge direkt abfragen (Bit- wortweise, was du brauchst), und die Ausgänge ansteuern.

evtl. die Adressbereiche etwas aufteilen, z.B.:
ab EB0/ AB0 direkte EA von CPU bzw. EA-Karten
ab EB100/ AB100 PN Teilnehmer 1
ab EB200/ AB200 PN Teilnehmer 2 .....
 
Hallo,
wenn du deine PN Teilnehmer mit GDSML eingebunden hast und die Adressbereiche definierst hast, sind die doch schon in deinem Ein/Ausgangsbereich (PAE / PAA). Du kannst dann die Eingänge direkt abfragen (Bit- wortweise, was du brauchst), und die Ausgänge ansteuern.

evtl. die Adressbereiche etwas aufteilen, z.B.:
ab EB0/ AB0 direkte EA von CPU bzw. EA-Karten
ab EB100/ AB100 PN Teilnehmer 1
ab EB200/ AB200 PN Teilnehmer 2 .....
achsoo, gut zu wissen, also kann ich im grunde die E/As dann in meiner Variablentabelle deklarieren? Hab ich das richtig verstanden?
 
Du kannst auch die Daten Blockweise einlesen und schreiben. Schau dir dazu mal die Bausteine GET_IO und SET_IO. Dort kannst du entsprechend Blockweise die Daten abfragen. Das macht es mMn übersichtlicher. Nur bei ET-Stationen würde ich direkt auf die E/A-Adressen zugreifen.
 
Du kannst auch die Daten Blockweise einlesen und schreiben. Schau dir dazu mal die Bausteine GET_IO und SET_IO. Dort kannst du entsprechend Blockweise die Daten abfragen. Das macht es mMn übersichtlicher. Nur bei ET-Stationen würde ich direkt auf die E/A-Adressen zugreifen.
danke für die info. Wo finde ich die Bausteine?
 
achsoo, gut zu wissen, also kann ich im grunde die E/As dann in meiner Variablentabelle deklarieren? Hab ich das richtig verstanden?
Das sieht in der Hardware dann z.B. so aus.
1700578902305.png
Das ist ein 8745 Massflow-Controller von Bürkert als PN-Device.
& in der Variablentabelle lege ich für z.B. den Actual Flow dann einfach eine entsprechende Variable an.
1700579183404.png
Die Datenformate der Variablen & Aufbau der Daten findest du gewöhnlich im Handbuch des Devices.
Bei Robis (z.B. Epson RC+) bekommst du manchmal auch einfach einen Haufen Bytes die ausgetauscht werden & du musst dir auf beiden Seiten selbst zusammenstellen welche Daten wo liegen sollen.

Der ganze Spaß funktioniert auch mit UDTs.
Ich könnte beispielsweise einen UDT in dem Aufbau meiner Eingangsdaten erstellen, diesen auf E5.0 legen & den kompletten Eingangsblock mit einer Variable verarbeiten & z.B. einem Baustein übergeben.

Ggf. musst du, je nach Menge der Daten, schauen ob du noch im Prozessabbild bleibst.
Ich meine die 1200er hat nur 1024 byte Prozessabbild (hab aber schon ewig nichtmehr mit denen gearbeitet).
Wenn du höhere Adressen deklarierst, wird Peripherieadressierung für dich ein Thema.

danke für die info. Wo finde ich die Bausteine?
In den Anweisungen rechts, sobald du einen Baustein aufmachst.
1700579818368.png
Das kannst du nutzen wenn du dir die Daten nicht über das Prozessabbild, sondern direkt über die Hardware-ID vom Gerät holen willst.
Für alles weitere ist F1 dein Freund ;)
Die Variablen dazu findest du in der Hardwareconfig
1700580389107.png
 

Anhänge

  • 1700580326669.png
    1700580326669.png
    147,7 KB · Aufrufe: 7
ich habe mir das programmbeispiel für den getio angeguckt.
Dort steht ich soll für alle Bits verschaltungen anlegen, sprich einmal Set einmal Reset.
Mein Robi und die SPS tauschen 128 Byte Eingänge und 128 Byte Ausgänge aus, wären da 2048 Verschaltungen nicht etwas aufwendig?
Klingt für mich nach ziemlich viel, ist das normal, oder habe ich da etwas falsch verstanden?

Danke und LG
 
ich habe mir das programmbeispiel für den getio angeguckt.
Dort steht ich soll für alle Bits verschaltungen anlegen, sprich einmal Set einmal Reset.
Mein Robi und die SPS tauschen 128 Byte Eingänge und 128 Byte Ausgänge aus, wären da 2048 Verschaltungen nicht etwas aufwendig?
Klingt für mich nach ziemlich viel, ist das normal, oder habe ich da etwas falsch verstanden?

Danke und LG
Du brauchst eigentlich je device nur einmal getio und setio für lesen und schreiben.
Also zwei Befehle je device.

Getio/setio macht aber effektiv nur Sinn wenn du die devices nur gelegentlich benötigst bzw. Daten austauschen willst & die Prozessdaten deshalb nicht Teil des zyklischen Datenaustausches sind.
Wenn du nicht extrem mit deinen Resourcen sparen musst, kannst du dir Gedanken über die beiden Befehle sparen.

Einfach die Hardware & Variablen normal anlegen, wenn du paranoid bis noch kurz kontrollieren ob die Adressen im Prozessabbild liegen (siehe Datenblatt der SPS).
Wenn deine Kommunikation am Ende nicht funktioniert kannst du immer noch ein Fass aufmachen.
 
Hallo Nilem1209,

ich würde mir an deiner Stelle für jedes PN Gerät (außer reine ET Ein-/Ausgänge) 2 UDT's schreiben (je 1 für E, und 1 für A). Diese trägts du dann in deiner PLC-Variablentabelle ein. Das hat auch den Vorteil, wenn du mehrere gleiche PN Geräte hast, schreibst die die Texte nur einmal.
Hier mal ein Beispiel mit einem FU (Frequenzumrichter):
Gerätekonfiguration:
1700633653451.png

PLC-Datentypen: (E als Ausschnitt)
1700633787855.png
1700633839376.png

Diese Datentypen trägst du in deiner PLC-Variablentabelle ein: (nur das 1. Bit angeben), die Bereiche kannst du aufklappent:
1700634024430.png

Falls due irgendwelche Berechnungen in einem FB für das PN Geräte machen möchtest / benötigts, kannst du die Bereiche auch komplett an den FB übergeben. Vorteil. bei mehren gleichen Geräten brauchst du den FB nur 1* schreiben.
1700634398175.png
1700634481918.png
1700634497281.png
 

Anhänge

  • 1700633918435.png
    1700633918435.png
    12,4 KB · Aufrufe: 5
Hallo Nilem1209,

ich würde mir an deiner Stelle für jedes PN Gerät (außer reine ET Ein-/Ausgänge) 2 UDT's schreiben (je 1 für E, und 1 für A). Diese trägts du dann in deiner PLC-Variablentabelle ein. Das hat auch den Vorteil, wenn du mehrere gleiche PN Geräte hast, schreibst die die Texte nur einmal.
Hier mal ein Beispiel mit einem FU (Frequenzumrichter):
Gerätekonfiguration:
Anhang anzeigen 73155

PLC-Datentypen: (E als Ausschnitt)
Anhang anzeigen 73157
Anhang anzeigen 73158

Diese Datentypen trägst du in deiner PLC-Variablentabelle ein: (nur das 1. Bit angeben), die Bereiche kannst du aufklappent:
Anhang anzeigen 73160

Falls due irgendwelche Berechnungen in einem FB für das PN Geräte machen möchtest / benötigts, kannst du die Bereiche auch komplett an den FB übergeben. Vorteil. bei mehren gleichen Geräten brauchst du den FB nur 1* schreiben.
Anhang anzeigen 73161
Anhang anzeigen 73162
Anhang anzeigen 73163
das klingt nach genau der Lösung, die ich gesucht habe. Vielen Dank!!
 
Zurück
Oben