Vererbung möglich bei vielen identischen DP-Slave??

GSOhm

Level-1
Beiträge
48
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo ihr Lieben,
ich bin der neue.
icon7.png
Und habe auch gleich eine Frage... ich erarbeite mir sämtliche Kenntnisse im Selbststudium also bitte nicht über meine "dummen" Fragen lachen, bin ein ziemliche Neuling.

Verwendete CPU: - CPU315-2DP
Verwendete SW: - Step7 V5.5 (bevorzugt AWL)

Ich habe vor einige Gasdurchflussregler (alle identische Bauart) über Profibus (DP-V0) mit der SPS zu verbinden. Gibt es bei Step 7 eine Möglichkeit der Vererbung wie bei C++? - d.h. muss ich sämtliche Abfragen für jeden Regler einzeln machen oder kann ich einen baustein schreiben und den dann nach und nach für jeden Regler aufrufen? Jeder Regler muss allerding seperat einstellbar sein.

Vielen lieben Dank im Vorraus
icon7.png


Liebe Grüße

GSOhm
 
Du kannst selbstverständlich einen FB (Funktionsbaustein) schreiben der alle Funktionalitäten des Gasdruchflussreglers beschreibt. Diesen kannst du dann auch sooft aufrufen wie es nötig ist.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ah ok,

wie lässt sich das denn im Programm realisieren?:confused: Es wurden allen Reglern in der Hardwarekonfig für Ihre einzelnen Ein und Ausgaben eine Adresse zu gewiesen - z.B. Steckplatz1 - DP-Kennung (67) - Bezeichnung (FlowRd) - E-Adresse (256..259). beim 2. Regler hat nun aber Steckplatz1 mit der gleichen Funktion die E-Adresse (268...271)

Wie würde man denn dann realisiern rufe FB auf für GasdurchflussreglerNr.1 oder GasdurchflussreglerNr.2? :confused::confused:

Danke im Vorraus

Liebe Grüße GSOhm
 
Du kannst einem FB IN- OUT- und INOUT-Parameter übergeben. Diese werden im FB (In Step 7 oben im Kopfteil des Bausteineditors, oberhalb des Codes) definiert. Außerdem kannst du STAT und TEMP-Var definieren, z.Bsp. für Zwischenergebnisse und Werte, die du über mehrere SPS-Zyklen benötigst. (Ich empfehle dir, erst einmal dafür nur die statischen Variablen zu nutzen). Im FB arbeitest du nur mit IN, OUT, INOUT und den statischen Variablen. Beim Aufruf des FB gibst du alle Variablen, die benötigt werden mit.
 
Hi,

das verstehe ich zwar noch nicht so ganz :confused: (bin ja auch noch blutiger Anfänger), versuche aber erstmal mein Glück vielleicht bekomme ich ja noch einen Geistesblitz, erstmal vielen Dank für die schnellen Antworten...
icon14.png
wenn ich nicht weiter kommen sollte hoffe ich das ich hier noch mal auf ein offenes Ohr stosse.

Liebe Grüße

GSOhm
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi nochmal,

muss noch mal eben bei etwas nachhaken wo ich echt total auf dem Schlauch steh, ist wahrscheinlich total simpel,
da ich sowas aber wie gesagt noch nie gemacht habe, komm ich nicht drauf...

Ich habe mir jetzt überlegt das ich einen FB nehme in dem ich nur nach und nach die Regler "aufliste (evt. mit irgenteiner ID)", von dort aus gehe ich mit jedem aufgelisteten Regler in einen zweiten FB (mit DB) in dem ich dann für jeden Regler den Datenaustausch mache... müsste doch passen oder??? -> die Frage wäre nur wie identifiziere ich die einzelnen Regler???

Kann auch sein das mein Gedankenschritt bis hierhin schon falsch ist..

Vielen Dank im Vorraus

Liebe Grüße

GSOhm
 
die regler haben doch immer fest definierte und abfolgende adressen im e/a-bereich.

hier kannst du also diesen umstand nutzen und durch angabe der start-adresse des e/a-bereichs (e und a können auch die selben adressen haben) via pointer indirekt auf die ios- zugreifen, dafür benötigt dein fb einfach ein IN (Typ WORD) für den pointer
 
Ok,

Vielen Dank für den Denkanstoss :grin: werde nun mit diesen Informationen erstmal etwas tüfteln...

Liebe Grüße

GSOhm
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo GSOhm,

am einfachsten geht es (gerade für Anfänger) , wenn du einen UDT mit den Schnittstellendaten deiner identischen Slaves anlegst. Diesen UDT verwendest du nun für jeden Teilnehmer in einem DB. Dort hinein schreibst du die DP-Eingänge und liest die DP-Ausgänge. In deiner FC oder in deinem FB legst du (z.Bsp.) einen IN_OUT-Parameter vom Typ des UDT an. Jetzt kannst du innerhalb deines Bausteins symbolisch auf die Daten des jeweiligen Slaves zugreifen.

Poste mal die HW-Konfig eines deiner Slaves und die Schnittstellenbeschreibung (Datenpunkte), vielleicht kann man dann mal konkret ein Beispiel liefern. Am besten hängst du dein Projekt in archivierter Form an. Das eigentliche Programm kannst du vorher entfernen. Wichtig ist eigentlich erst einmal nur ein Projekt mit der HW-Konfig.


Gruß, Onkel
 
Ich hab mal auf die schnelle ein Beispielprojekt gemacht.

Die Reglerbausteine werden als Multiinstanz aufgerufen.

Ist halt mal so ein Lösungsvorschlag. Darf auch gern von den "Profis" kritisch beäugt und ggf. korrigiert werden :)
 

Anhänge

  • S7_pro1.zip
    209,2 KB · Aufrufe: 11
Ich habe vor einige Gasdurchflussregler (alle identische Bauart) über Profibus (DP-V0) mit der SPS zu verbinden. Gibt es bei Step 7 eine Möglichkeit der Vererbung wie bei C++? - d.h. muss ich sämtliche Abfragen für jeden Regler einzeln machen oder kann ich einen baustein schreiben und den dann nach und nach für jeden Regler aufrufen? Jeder Regler muss allerding seperat einstellbar sein.

Vielen lieben Dank im Vorraus
icon7.png


Liebe Grüße

GSOhm

Vererbung wei bei C++ gibts es so direkt nicht.
Du kannst aber wie schon oben beschrieben einen FB erstellen, ist quasi ne Function wie aus C.
Da kannst dann alle nötigen Parameter übergeben und jeden Regler einzeln versorgen / einstellen.

Das Prinzip der Vererbung geht also quasi durch die Hintertüre!
Du machst halt immer einen neuen z.B. FB und rufst darin halt einen anderen auf welcher dir eine gewünschte Funktion macht ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

also ich hab jetzt dank eurer Hilfe einen riesigen Haufen an Infos, werde diese jetzt erstmal sortieren und versuchen selber etwas weiter zu kommen.
Vielen lieben Dank für all die guten Ratschläge!!!

:ROFLMAO:ROFLMAO:ROFLMAO::ROFLMAO:

Liebe Grüße

GSOhm
 
@ Tigerente: hi, ich versteh schonmal grob den Aufbau deines Beispielprogramms, jedoch ist mir nicht ganz klar was dann in FB 100 gemacht wird??
legst du da stat's an mit dem Namen Regler_1, Regler_2, mit dem Datentyp Regler??

Habe auf jeden Fall schon mal einen großen Erkenntnisgewinn, in Hinsicht auf die Kommunikation zum Regler, nur wie ich nun die Daten in meinem Programm weiterverwenden kann ist mir unklar... wie gesagt ich bin ein absoluter Neuling in S7... Ich hoffe meine Fragen sind nicht zu banal...

Vielen lieben Dank nochmal

Liebe Grüße

GSOhm
 
Das ist der Aufrufbaustein für die Multi-Instanz.

Du benötigst ja einen Programmbaustein mit dem gleichen Ablauf mehrfach. In dem Beispiel der FB1, den Du noch mit Code füllen musst.

Der FB1 wird dann im STAT-Bereich des FB100 mehrfach deklariert. So erhältst Du einen Multi-Instanz-Aufruf des Bausteins FB1.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
achso und noch eine Frage:

Ich habe 24 Regler und habe die Vorgabe das die Gesamteinstellung (Einstellung aller Regler im Ganzen) speicherbar und wieder aufrufbar sein soll, gibt es also eine Möglichkeit meine Daten als gesamt Paket zu speichern und aufzurufen???

Auch hierfür schon einmal ein herzliches Danke im Vorraus

Liebe Grüße

GSOhm
 
puh,

Das ist der Aufrufbaustein für die Multi-Instanz.

Du benötigst ja einen Programmbaustein mit dem gleichen Ablauf mehrfach. In dem Beispiel der FB1, den Du noch mit Code füllen musst.

Der FB1 wird dann im STAT-Bereich des FB100 mehrfach deklariert. So erhältst Du einen Multi-Instanz-Aufruf des Bausteins FB1.


Da versteh ich jetzt gar nichts mehr von... :confused::confused: ...muss erstmal den Kopf in die Bücher stecken und versuchen die Begriffe aus deinem Beitrag zu verstehen...
 
puh,




Da versteh ich jetzt gar nichts mehr von... :confused::confused: ...muss erstmal den Kopf in die Bücher stecken und versuchen die Begriffe aus deinem Beitrag zu verstehen...

Ist im Prinz so, als wenn Du in ein C++ Funktion den weiteren Speichr für andere dort aufgerufenen Klassen lokal alokierst.

Also bei Step 7 sind die DB im Prinzip Globale Variablen welche man definiert.
Der Instanz-DB ist im Prinzip der Speicher des FB's (sprich seine definition usw.)
Damit man nun sich DB's spart (aber nicht den Speicher) wird nun einfach im Prinzip im Speicher des FB die Strukturen für die Regler-Funktionen angelegt und jeweils beim Aufruf der Funktion mit übergeben.
Somit wird im Prinzip im Instanz DB der Speicher des FB's selbst sowie der Speicher der Aufgrufenen Regler-Funktionen gespeichert.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
puh,




Da versteh ich jetzt gar nichts mehr von... :confused::confused: ...muss erstmal den Kopf in die Bücher stecken und versuchen die Begriffe aus deinem Beitrag zu verstehen...

Stell einfach konkrete Fragen. Als "Gerüst" sollte das Programm schon ganz gut helfen, um Multi-Instanzen zu verstehen.

Grundsätzliche Kenntnisse im Umngang mit Step7 sollten natürlich vorhanden sein, bzw. erarbeitet werden.
Z.B.: Wann nimmt man einen FC, wann einen FB. Was ist ein Global-DB und was ein Instanz-DB.
 
@ Boxy: danke, super das du versuchst das ganze etwas mit c++ zu erklären das ist für mich sehr hilfreich!!!


@Tigerente: warum steht im DB100 bei Adresse 0.0 und 6.0 ?? - Entweder ich steh immer noch mega auf dem Schlauch oder da müsste 0.0 und 16.0 stehn oder??

Vielen lieben dank für die super Unterstützung

Liebe Grüße

GSOhm
 
Die Adressen beziehen sich auf die Bausteinlänge des FB1 und nicht wie Du wahrscheinlich vermutest auf die Länge des übergebenen IO-Parameters.
Wenn der FB1 entsprechend größer wird, verschieben sich auch die Adressen entsprechend. Darum musst Du Dich aber nicht kümmern. Der IDB wird immer neu generiert, wenn Du Änderungen gemacht hast und an die Aufrufstelle gehst.
Am besten stellst Du den Zugriff auf symbolisch und machst nach Änderungen eine Konsistenzprüfung. Findest Du beides, wenn Du links im Projektordner einen Rechtsklick auf Bausteine machst.
Und IMMER daran denken den Instanz-DB nach Änderungen zu übertragen.
 
Zurück
Oben