TIA Ganze Datenbausteine CPU-übergreifend Projektieren

Mcmastur

Level-1
Beiträge
7
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,


erstmal zusammenfassend stehe ich vor dem Problem, dass ich ganz gerne einen ganzen Datenbaustein von einer CPU auf eine andere projektieren bzw. verschicken möchte. Hierbei meine ich nicht Einzelaufrufe einzelner Variablen innerhalb eines DB's, sondern es soll ein identisches DB, mit allen beinhaltenden Variablen auf einer anderen CPU dauerhaft projektiert werden oder zyklisch oder mit einem bestimmten eingangssignal einmalig geschrieben werden.


Zur genaueren Erklärung:

Im Rahmen einer Bachelorarbeit an der Hochschule muss ich ein bestehendes modulares Produktionssystem von Siemens Step7 in TIA-Portal übertragen. Nach anfänglichen Schwierigkeiten durch veraltete Hardware etc. habe ich mittlerweile das komplette Projekt in TIA-Portal migrieren können. Jetzt geht es an die Optimierung.

Die Anlage besteht aus 4x CPU 315F-2 DP/PN, jeweiligen Baugruppen und einen Leitrechner. die Kommunikation der CPU's ist über ein Master/Slave geregelt, wobei die erste Station der Master ist, und die anderen drei die Slaves. Eine Ethernetverbindung besteht noch zwischen allen Baugruppen und dem Leitrechner

In der Dritten Station gibt es einen Rundschalttisch mit 5 Positionen und je nach Werkstückeigenschaften der auf der jeweiligen Postition befindlichen Werkstüvke wird ein bestimmter Bearbeitungsschritt durchgeführt oder nicht. Die Informationen werden allerdings in der zweiten Station geprüft.

In der Aktuellen Version ist die Kommunikation wie folgt umgesetzt. Die Informationen werden in der zweiten Station in zwei Schritten erfasst. Zuerst die Farbe/Material und im Anschluss die Höhe des Bauteils. Diese Informationen werden jeweils in das selbe Wort codiert wobei die letzten beiden BITS für die Farbe stehen und die vorletzten beiden Bits für die Höhe stehen. Dieses Wort wird nun an den Master geschickt und an die erste Position eines Arrays geschrieben. Wenn der Rundschalttisch sich dreht wird dann der Inhalt des Arrays jeweils um eine Position verschoben. Somit beschreibt jede der 5 Positionen des Arrays direkt eine Position des Rundschalttischs. Wenn also der Tisch sich dreht und das Werkstück von Position 1 zu 2 transportiert wird werden auch die Daten der ersten Position des Arrays an Position 2 des Arrays geschrieben. Die Werte werden dann direkt im Master ausgewertet und es werden wiederum die Information ob an einer Position ein Bearbeitungsschritt durchgeführt wird oder nicht als Bool an den Slave geschickt.



Wahrscheinlich ist es schwer mit der Beschreibung die Funktionsweise nachzuvollziehen, aber das ist auch das Problem, ich möchte diese Schritte vereinfachen und ganz gerne die Codierung in ein Wort und der Anschließenden Rotation der Array-Positionen weglassen und dafür nicht nur jeweils ein einzelnes Wort vom Slave zum Master schicken sondern einen ganzen Datenbaustein, um die jeweiligen Werkstückeigenschaften uncodiert verschicken zu können.



Gibt es so eine Möglichkeit?

Danke schonmal fürs bis hierhin lesen

LG

Mcmastur
 
..., ich möchte diese Schritte vereinfachen und ganz gerne die Codierung in ein Wort und der Anschließenden Rotation der Array-Positionen weglassen und dafür nicht nur jeweils ein einzelnes Wort vom Slave zum Master schicken sondern einen ganzen Datenbaustein, um die jeweiligen Werkstückeigenschaften uncodiert verschicken zu können.
Die "Rotation wegzulassen" ist einfach: Die Plätze auf dem Tisch durchnumerieren und die PlatzNr ist und bleibt dann identisch mit dem entsprechenden Index des Array. Wenn dann ein bestimmter Platz auf dem Tisch gemeint ist, braucht zur Identifizierung nur der Index übertragen zu werden. Die Rotiererei der Daten im DB ist nicht nötig und muss auch nicht in mehreren Kopien desselben pausenlos aktualisiert werden. Sofern sich jeweils nur die Daten für einen Platz auf dem Tisch ändern, beschränkt sich die Übertragung auf das eine ArrayElement (vermutlich ein Struct) und den Index.
Ob mit oder ohne Codierung, das dürfte ein anderes Thema sein. Vermutlich geht es darum, die verschiedenen Daten, die einem Platz auf dem Tisch bzw. einem ArrayElement zugeordnet sind, vor der Übertragung zu "packen" und nach der Übertragung zu "entpacken"? Gibt es denn hiebfeste Argumente für oder gegen die Codierung? Als FingerÜbung gedacht? Oder als Anreiz, um Protest auszulösen?

PS:
Oder geht es darum, die Daten im Array zu packen, um im Array einen benutzerdefinierten DatenTyp zu vermeiden?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Vermutlich geht es darum, die verschiedenen Daten, die einem Platz auf dem Tisch bzw. einem ArrayElement zugeordnet sind, vor der Übertragung zu "packen" und nach der Übertragung zu "entpacken"? Gibt es denn hiebfeste Argumente fürr oder gegen die Codierung? Als FingerÜbung gedacht? Oder als Anreiz, um Protest auszulösen?

PS:
Oder geht es darum, die Daten im Array zu packen, um im Array einen benutzerdefinierten DatenTyp zu vermeiden?

Danke schonmal für die Antwort, ja das rotieren wegzulassen wäre jetzt auch der Part um es formschöner zu machen, das hauptanliegen ist aber die Codierung wegzulassen.

Der Sinn hinter dem ganzen ist aus der Laboranlage, die Jahrelang außer Betrieb war, eine Anlage zu machen, die in Laboren im Bereich Maschinenbau und Verfahrenstechnik genutzt werden kann. Hierzu sollen allen einzelnen Funktionen in möglichst unabhängigen FB's und FC's realisiert werden. So dass die Professoren individuell nach Gruppengröße und Lust und Laune entscheiden können, welcher Schwerpunkt im Labor gesetzt wird und welcher Schwierigkeitsgrad gewählt wird. Je nachdem welche der Bausteine er zur Verfügung stellt können Schwerpunkte wie Steuerung der einzelnen Aktoren, Kommunikationsaufbau oder nur eine Automatiksteuerung mit Ablaufplan etc. zur Aufgabenstellung werden. Hierzu möchte ich die Bausteine so selbsterklärend wie möglich machen damit sie durch vorhandenes Wissen relativ intuitiv genutzt werden können. Jewiels eine lange Erklärung abzugeben was jeder Baustein macht hat meiner Meinung nach wenig Nährwert. Außerdem ist es schwierig die Werkstücke zu erweitern, es ist also ein größerer Aufwand neue Werkstücke mit anderern Eigenschaften dem Quellcode hinzuzufügen.

Der Plan ist also die Codierung wegzulassen und idealerweise einfach als Bool'sche Variablen in einem DB zu übertragen. Ist zumindest leichter nachzuvollziehen wenn einfach nur ein JA/NEIN am Ende rauskommt.

Also mal als ganz simples Beispiel soll es wie folgt ablaufen:
1. Materialdaten erfassen und in DB als Bool definiert in:
-Rot: JA/NEIN
-Schwarz: JA/NEIN
-Silber: JA/NEIN
-Ausschuss(alles andere): JA/NEIN
2. Höhe erfassen und in DB als Bool definiert in
-Höhe i.O: JA/NEIN
3. Komplettes DB im Master in ein identisches schreiben.

Die Weiterverarbeitung danach erstmal außen vorgelassen ist das mein primäres Ziel.
 
Zuletzt bearbeitet:
Der Plan ist also die Codierung wegzulassen und idealerweise einfach als Bool'sche Variablen in einem DB zu übertragen. Ist zumindest leichter nachzuvollziehen wenn einfach nur ein JA/NEIN am Ende rauskommt.
Codierung ist ein weiter Begriff und so ganz wirst Du Dich wohl nicht davon lösen können ...
Wenn Du z.B. eine INT-Variable für die Farbe nimmst und für schwarz den Wert 1, für rot den Wert 2, u.s.w. festlegst, ist das auch eine Codierung.
Du könntest auch einen String nehmen und die Farbe in "Klartext" (also z.B. das Wort "schwarz" oder "rot") reinschreiben - letztendlich auch eine Form der Codierung.
Oder ein DWORD nehmen und den RGB-Wert der Farbe eintragen.
Da ist so einiges denkbar und was für Deine jeweilige Anwendung sinnvoll wäre ... keine Ahnung.
Ob ein BOOL mit der Info "Höhe OK" ausreicht, oder ob es sinnvoll wäre, stattdessen oder zusätzlich die z.B. gemessene Höhe abzuspeichern ... keine Ahnung.
Lass Dich durch Deinen "AuftragGeber" inspirieren, frag ihm Löcher in den Bauch, welche Informationen er wofür benötigt bzw. in Zukunft zu benötigen glaubt.

Gruss, Heinileini
 
Zurück
Oben