Daten rangieren S7 1500

SPS-freak1

Level-2
Beiträge
396
Reaktionspunkte
54
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten abend,

Wir sind gerade dabei die ersten Neuanlagen mit 1500er Steuerungen zu projektieren. Nun wollen wir natürlich in diesem Zuge auch unser Programm etwas auf die neuen Möglichkeiten hin zu optimieren. Allerdings sind wir jetzt bei einem Punkt angekommen, das sind wir mit unserem Latein am Ende und wissen nicht so recht, wie man das am Komfortabelsten handhabt. Und zwar geht es um das Rangieren von Ein-/Ausgängen von Feldbuskomponenten. Also zum Beispiel Movimot oder Scanneranbindungen. Bisher hatten wir einen FC der mit der PEW Adresse aufgerufen wurde und der die Daten dann in einen DB abgelegt hat, der als Block DB übergeben wurde. Intern hatten wir dann ganz Quick and Dirty mit AUF DB direkt dir zugehörigen Bits aus dem PEW oder andersrum beschrieben. Nun ist das ja aber bei der S7 1500 ja nicht mehr so einfach, wenn man mit optimierten DBs arbeiten will. Wie macht ihr das denn? Vorgabe sollte sein, dass jedes Signal beschriftet werden kann, was einen Datentyp wieder ausschließt. Allerdings würde ich aber auch ungern die Signale von außen dann per Hand anhängen, was ja wieder mit Schreibarbeit verbunden ist. Ich hoffe ich versteht mein Problem und ihr könnt mir da ein zwei hilfreiche Tips geben.

Vielen Dank.
 
Eine Möglichkeit wäre eine Struktur als InOut zu verwenden. Dann können im Baustein auch die Variablennamen verwendet werden. Mit der 1500er lassen sich auch benutzerdefinierte Datentypen auf Peripherie Ebene realisieren. Was es da für Regeln gibt weiß ich nicht, da ich eine solche Steuerung noch nicht verwendet habe.
Bei Verwendung von einzelnen Bits in Worten kann der sogenannte symbolische Slice zugriff verwendet werden, z.B. Bit 0 einer Word-Variablen.
Code:
Word_Variable.%X0
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich lege für IN und OUT eines Profinetteilnehmers je einen Datentyp an. Dieser Datentyp bildet am Besten genau die Struktur der Daten des Teilnehmers ab, welche man in der Schnittstellenbeschreibung des jeweiligen Herstellers findet. Man kann das bis ins Bit hinunter aufschlüsseln. Dann Füge ich diesen Datentyp in die PLC-Variablentabelle ein und schreibe die E/A-Adresse, welche im Gerätemanager vergeben wurde an diesen Typ. Die Information im Gerätemanager (Länge der Daten) muß natürlich mit den erstellten Datentyp übereinstimmen.
Wenn ich dann einen Basustein erstelle, lege ich die IN- und OUT- des Gerätes als IN und OUT an den Baustein. Dazu muß ich im Bazsteinkopf die erstellten Datentypen verwenden.
Nun kann ich im Bazstein mit den einzelnen Variablen, die im Datentyp angelegt wurden ganz komfortabel und übersichtlich arbeiten.
bei mehreren Geräten z.Bsp. Scannern habe ichin der Variablentabelle ja mehrere Variablen des Datentyps angelegt, diese kommen an den Baustein

.Schnappschuss (2016-06-21 11.26.12).jpgSchnappschuss (2016-06-21 11.28.06).jpgSchnappschuss (2016-06-21 11.30.26).jpg

In obigem Beispiel ist der Datentyp "Scanner_IN" nicht bis ins Bit aufgeschlüsselt, dann kann man auch per Slice-Befehl auf die einzelenen Bits zugreifen. Das geht bei kleineren Sachen gut, wenn mehr zu Programmieren ist, ist ein komplettes Aufschlüsseln später übersichtlicher. Aufpassen muß man bei Wortgrenzen. Nicht alle Gerätehersteller machen das richtig (Kann auch sein, dass Siemens das in TIA nicht korrekt umgesetzt hat). So muß ich bei einem Scanner auf ein AW2003 (ungerade) zugreifen, um EIN wird zu erhalten, weil dort nach einem Byte anschließend gleich ein Word definiert wurde. TIA kann das so nicht, nach dem Byte fügt TIA ein Füllbyte ein (unsichtbar) und macht für das Word bei 2004 weiter. Hier hat man u.U. ein Problem, wenn man später in der Struktur nicht den richtigen Wert erhält und muß Hand anlagen. Ist mit aber erst einmal bei einem Scanner passiert.
 
Danke für die Antworten. Bei einem Scanner, wo der Eingang immer der gleiche ist, würde ich das auch so machen. Allerdings gibt es ja auch diverse Slaves bei denen der Eingang umbeschriftet werden muss. Zum Beispiel Cube 67 oder Wago Speedway oder wie sie alle heißen. Da habe ich auch quasi pro Modul immer die gleiche Struktur aber halt immer ein anderes Symbol bzw Kommentar dazu. Diesen Fall kann ich ja schlecht per Datentyp erschlagen. Da ich ja für jedes gleiche aber weitere Modul ja die Beschriftung im Datentyp ändern müsste und somit es ja für den Rangierbaustein auch wieder ein anderer ist. Dafür fällt mir leider überhaupt nichts sinnvolles ein.
 
Guten abend,

Danke für den Tipp. Mit der Struktur habe ich heute mal einen kleinen Test gemacht. Funktioniert. Aber haben uns jetzt drauf geeinigt, die Sensoren/Aktoren direkt per Variablentabelle zu definieren. Die Geschichte mit dem Struct wäre evtl was für Schrittketten. Um da den schritt beschriftet zu haben. Vielen dank für eure Hilfe
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich lege für IN und OUT eines Profinetteilnehmers je einen Datentyp an. Dieser Datentyp bildet am Besten genau die Struktur der Daten des Teilnehmers ab, welche man in der Schnittstellenbeschreibung des jeweiligen Herstellers findet. Man kann das bis ins Bit hinunter aufschlüsseln. Dann Füge ich diesen Datentyp in die PLC-Variablentabelle ein und schreibe die E/A-Adresse, welche im Gerätemanager vergeben wurde an diesen Typ. Die Information im Gerätemanager (Länge der Daten) muß natürlich mit den erstellten Datentyp übereinstimmen.
Wenn ich dann einen Basustein erstelle, lege ich die IN- und OUT- des Gerätes als IN und OUT an den Baustein. Dazu muß ich im Bazsteinkopf die erstellten Datentypen verwenden.
Nun kann ich im Bazstein mit den einzelnen Variablen, die im Datentyp angelegt wurden ganz komfortabel und übersichtlich arbeiten.
bei mehreren Geräten z.Bsp. Scannern habe ichin der Variablentabelle ja mehrere Variablen des Datentyps angelegt, diese kommen an den Baustein

.Anhang anzeigen 33171Anhang anzeigen 33172Anhang anzeigen 33173

In obigem Beispiel ist der Datentyp "Scanner_IN" nicht bis ins Bit aufgeschlüsselt, dann kann man auch per Slice-Befehl auf die einzelenen Bits zugreifen. Das geht bei kleineren Sachen gut, wenn mehr zu Programmieren ist, ist ein komplettes Aufschlüsseln später übersichtlicher. Aufpassen muß man bei Wortgrenzen. Nicht alle Gerätehersteller machen das richtig (Kann auch sein, dass Siemens das in TIA nicht korrekt umgesetzt hat). So muß ich bei einem Scanner auf ein AW2003 (ungerade) zugreifen, um EIN wird zu erhalten, weil dort nach einem Byte anschließend gleich ein Word definiert wurde. TIA kann das so nicht, nach dem Byte fügt TIA ein Füllbyte ein (unsichtbar) und macht für das Word bei 2004 weiter. Hier hat man u.U. ein Problem, wenn man später in der Struktur nicht den richtigen Wert erhält und muß Hand anlagen. Ist mit aber erst einmal bei einem Scanner passiert.
Hallo Ralle,
ich projektiere gerade eine Scanner Applikation und gehe auch so vor, dass ich den PN Eingangsbereich in eine Variablentabelle übertrage.
Nun wollte ich ein "Array of byte" in die VAR-Tabelle einfügen. Leider erlaubt mir TIA dies nicht und motzt bezüglich des Datentyps.

Ich sehe in Deinem Bild, dass es Dir scheinbar gelungen ist?

Mache ich hierbei ein Denkfehler?

Vielen Grüße
Eric
 

Anhänge

  • Array.JPG
    Array.JPG
    42,5 KB · Aufrufe: 30
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe leider noch ein Anschlussfrage.

Ich habe ein S7-300 Projekt migriert. Dort wurden die Scanner über PNIO_Send und PNIO_Receive angesteuert.
Ich habe nun den UDT (PLC_Datentyp) mit der Hersteller I/O Beschreibung in eine TIA-Variablentabelle übertragen und deklariert.
Alles soweit okay.

Da ich den Rest der ursprünglichen Programmstruktur erhalten möchte, wollte ich nun die Variablentabelle in einen Ziel DB übertragen welcher im Ursprungsprogramm schon vorhanden war. Somit wäre ich wieder auf Stand.

An diesem Punkt hänge ich jedoch. Gibt es einen einfachen weg die TIA-Variablentabelle in einen DB zu deklarieren. (Block Move?)

Danke vielmals für die Unterstützung!

Grüße
Eric
 
da du ja unterschiedliche adressierungen hast und nicht alles in einer udt, denke ich nicht. wäre alles in einer udt könntest du natürlich alles auf einmal umkopieren
 
.. Ich habe ein S7-300 Projekt migriert...
Migriert auf .. S7-1500?

... Gibt es einen einfachen weg die TIA-Variablentabelle in einen DB zu deklarieren. (Block Move?) ...
Die PN-Schnittstelle der Scanner hat sich nicht verändert. Demnach müsste der "Ziel-DB" prinzipiell die selben Daten in der selben Reihenfolge beinhalten, wie sie auch in deinem neuen UDT vorhanden sind. Vorher wurde an dieser Stelle noch nicht mit einem UDT gearbeitet? Wie sind die Daten in dem DB angelegt?

Das sauberste wäre, wenn du deinen neuen UDT auch in dem DB verwenden würdest. Dann ginge die Übertragung zwischen IO-Bereich und DB z.Bsp. durch eine einfache Zuweisung. Allerdings müssten dann aber wahrscheinlich alle Verwendungsstellen im Programm händisch angepasst werden. Wie und wie oft wird im Programm auf den DB zugegriffen?

Oder du lässt den DB wie er ist und überträgst aus dem IO-Bereich über einen Umweg mittels SERIALIZE / DESERIALIZE.

Der Code deines neuen UDTs und des alten DBs wäre hilfreich, falls du alleine nicht weiter kommst. Kannst du den posten?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo und danke für die Rückmeldung,

Die Migration fand von einer 300er S7 auf eine 1500er TIA Vers. 18 statt.
Ich habe die Scanner Anbindung in der Klassik Welt entwickelt und habe bis zuletzt auch fast ausschließlich mit S7 Klassik gearbeitet.
Daher bin ich, trotz diverser Schulungen im TIA Portal, noch relativ blauäugig. Ich hoffe es wird mir verziehen. ;-)

In der 300er gab es auch schon den UDT welcher die Ein und Ausgänge des Scanners beschreibt.
Diesen UDT habe ich auch migriert.
Der UDT wurde dann in 2 DBs gepackt, mit je 3 Scanner pro Anlage. Ein DB "Hardware Receive" und ein DB "Hardware Send", welcher über PN_SEND und PN_RECEIVE befeuert wurde.

Das Programm greift dann in der FC Funktion jeweils auf die beiden DBs zu.

Im Prinzip geht es wirklich nur darum diese DBs, anstatt der alten PN_send und PN_Receive, die PN Eingänge der 1500er zuzuweisen.

Ansonsten werde ich das Programm soweit anpassen und anstatt der DBs, direkt auf die E/As der Scanner zugreifen, ohne obige DBs.

Ich bin erst am Montag wieder am Projekt und kann dann bei Bedarf auch den UDT posten.

Viele Grüße
Eric
 
Ich habe mal die Bausteine angehängt.
Ich befürchte jedoch, meine Denkweise in der Klassik Struktur blockiert die TIA Entwicklung. ;-)

Ich konnte die UDT Struktur (PLC-Datentyp) durch die Übertragung in die Variablentabelle im DB 1:1 abbilden.
Für mein Verständnis wird im DB auf den Datentyp Operanten Namen geschaut und entsprechend im DB abgebildet.
Ich hoffe nicht auf einen Denkfehler.

1689596442717.png1689596574656.png
1689596631570.png
 
..Für mein Verständnis wird im DB auf den Datentyp Operanten Namen geschaut und entsprechend im DB abgebildet...
Für das Abbilden musst du schon selber sorgen. Im einfachsten Fall (SCL) tust du einfach per Zuweisung ":=" die ganze Struktur übertragen. Wenn es aber keinen besonderen Grund gibt, einen DB zu verwenden, dann kannst du allerdings auch direkt mit den IOs arbeiten. Das ist eigentlich das Innovative an dieser Stelle.
 
Zurück
Oben