Fragen zu AWL-Programm

Andi2

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

durch Zufall bin ich auf dieses Forum gestoßen, und muß vorneweg gleich mal sagen: Hut ab, schön das es sowas gibt!:s18:

Da ich mich schon seit geraumer Zeit beruflich mit SPS´en verschiedener Hersteller beschäftige, tauchen natürlich auch immer mal wieder Fragen auf, von denen ich hoffe, diese hier beantwortet zu bekommen (...aber ich bin zuversichtlich...).

Da bei meinem Brötchengeber zwischenzeitlich fast alle alten Steuerung auf die Simatic S7 umgebaut worden sind, besuche ich derzeit in unregelmäßigen Abständen Schulungen in München, und versuche natürlich auch, das erlernte Wissen sofort in die Tat umzusetzen.
Dabei haben sich schon (momentan!) zwei Fragen aufgeworfen, die ich hier mal loswerden will.

Frage 1:
Bei einer unserer Umfangreichen Steuerungen habe ich im OB1 eine Programmierung entdeckt, aus der ich nicht schlau werde. Diese lautet:

Netzwerküberschrift "Eins- und Nullmerker"
U M 0.0
R M 0.0
(Kommentar dazu "Logisch 0")
UN M 0.1
S M 0.1
(Kommentar dazu "Logisch 1")

Wozu dieser Programmteil? Beide Merker werden im Programm recht häufig abgefragt.

Zweite Frage:
Wenn ich einen FB programmiere, werden die statischen Lokaldaten in einen Instanz-Datenbaustein geschrieben, den ich nach der Erstellung des FB erstelle, und dem FB zuweise.
Wenn ich jetzt aber ein vorhandenes Programm habe, bei dem ein FB mit statischen Lokaldaten vorhanden ist, wie finde ich den dazu gehörigen DB heraus, ohne alle programmierten DB´s einzeln aufrufen zu müssen?

Danke schon mal für´s antworten,
der Andi
 
Hier werden 2 Merker gebildet die immer entweder logisch 1 (M0.1) bzw. logisch 0 (M0.0) sind.
Die kannst du immer dann einsetzen, wenn du z.B. testweise was deaktivieren oder etwas überbrücken willst.
Siehe die Signale als Konstanten. Einmal die Konstante TRUE und einmal FALSE
 
Zuviel Werbung?
-> Hier kostenlos registrieren
zum zweiten Teil. Der DB steht meist direkt beim Aufruf dabei.
Also
Code:
*
CALL FB1, DB1
dann gehört der DB1 beim FB1.
Ausnahmen sind Multiinstanzen.
Wenn du in einem Multiinstanz-FB (z.B. FB3) einen FB (z.B. FB10) als Multiinstanz aufrufst, dann findest du die Daten vom FB10 im DB vom FB3.
 
Wozu dieser Programmteil? Beide Merker werden im Programm recht häufig abgefragt.

Der eine Merker ist immer FALSE, der andere immer TRUE.
Es gibt verschiedene Möglichkeiten, solche Merker zu programmieren, dies ist eine davon. Die Merker kann man verwenden um beispielsweise Programmteile abzuschalten ohne den Code löschen zu müssen (einfach "U M0.0" einfügen) oder auch um Parameter an FBs oder FCs mit Dauer-1 oder -0 zu versorgen.

Wenn ich jetzt aber ein vorhandenes Programm habe, bei dem ein FB mit statischen Lokaldaten vorhanden ist, wie finde ich den dazu gehörigen DB heraus, ohne alle programmierten DB´s einzeln aufrufen zu müssen?

Am FB-Aufruf.
Der FB Aufruf sieht (normalerweise) so aus:

Bsp:

CALL FB 10, DB13
...
...

In diesem Beispiel würdest Du den FB10 mit dem DB13 als Instanzdatenbaustein aufrufen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Schnell!!

Hallo,

vielen Dank für die schnellen Antworten. Die Sache mit den Merkern ist mir jetzt klar, allerdings ist es komisch, daß diese beiden Merker im ganz normalen Programmablauf zum Einsatz kommen, und anscheinden nicht nur für den Testbetrieb.:confused:
Bei den erwähnten FB´s handelt es sich tatsächlich um Multiinstanzen (...hatte ich leider noch nicht bei meiner Weiterbildung...), und ich werde mal nachsehen, ob ich wirklich so leicht wie beschrieben den zum FB gehörigen DB finde.
Wenn ich mehr weiß, poste ich selbstverständlich wieder hier.

Grüßle,
der Andi
 
Hallo zusammen,

durch Zufall bin ich auf dieses Forum gestoßen, und muß vorneweg gleich mal sagen: Hut ab, schön das es sowas gibt!:s18:

Da ich mich schon seit geraumer Zeit beruflich mit SPS´en verschiedener Hersteller beschäftige, tauchen natürlich auch immer mal wieder Fragen auf, von denen ich hoffe, diese hier beantwortet zu bekommen (...aber ich bin zuversichtlich...).

Da bei meinem Brötchengeber zwischenzeitlich fast alle alten Steuerung auf die Simatic S7 umgebaut worden sind, besuche ich derzeit in unregelmäßigen Abständen Schulungen in München, und versuche natürlich auch, das erlernte Wissen sofort in die Tat umzusetzen.
Dabei haben sich schon (momentan!) zwei Fragen aufgeworfen, die ich hier mal loswerden will.

Frage 1:
Bei einer unserer Umfangreichen Steuerungen habe ich im OB1 eine Programmierung entdeckt, aus der ich nicht schlau werde. Diese lautet:

Netzwerküberschrift "Eins- und Nullmerker"
U M 0.0
R M 0.0
(Kommentar dazu "Logisch 0")
UN M 0.1
S M 0.1
(Kommentar dazu "Logisch 1")

Wozu dieser Programmteil? Beide Merker werden im Programm recht häufig abgefragt.

Zweite Frage:
Wenn ich einen FB programmiere, werden die statischen Lokaldaten in einen Instanz-Datenbaustein geschrieben, den ich nach der Erstellung des FB erstelle, und dem FB zuweise.
Wenn ich jetzt aber ein vorhandenes Programm habe, bei dem ein FB mit statischen Lokaldaten vorhanden ist, wie finde ich den dazu gehörigen DB heraus, ohne alle programmierten DB´s einzeln aufrufen zu müssen?

Danke schon mal für´s antworten,
der Andi

Zu M0.0 und M0.1 schließe ich mich marlob an. Man spricht auch von Systemmerker (taucht bei der neuen S7-1200 auf). Man findet am Ende von OB1 auch oft
UN M0.2
S M0.2
als Merker das der erste SPS-Zyklus durchlaufen ist.

Zu deiner zweiten Frage: Einen zugehörigen Instanz-DB kannst du durch Durchsicht in der Symboltablle finden. Aber nicht alle DBs sind Instanz-DBs und nicht alle FB's haben eine eigene Instanz (sondern sind Multiinstanzen)
Am einfachsten hangelst du dich vom OB1 aus durchs Programm.

MfG
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

vielen Dank für die schnellen Antworten. Die Sache mit den Merkern ist mir jetzt klar, allerdings ist es komisch, daß diese beiden Merker im ganz normalen Programmablauf zum Einsatz kommen, und anscheinden nicht nur für den Testbetrieb.:confused:
...
Das mit dem Testbetrieb war ja nur ein Beispiel. Manchmal braucht man auch mal eine logische 1 bzw. 0 im normalen Programmablauf.
 
Hallo,

vielen Dank für die schnellen Antworten. Die Sache mit den Merkern ist mir jetzt klar, allerdings ist es komisch, daß diese beiden Merker im ganz normalen Programmablauf zum Einsatz kommen, und anscheinden nicht nur für den Testbetrieb.:confused:

man kann auch konstanten für den normalen betrieb gebrauchen.
erfahrene programmierer haben deshalb meist zwei true und zwei false flags.
einmal für systemfunktionalitäten und zum anderen für inbetriebnahmezwecke ... letztere sollten nach erfolgreicher inbetriebnahme vollständig aus dem programm verschwunden sein...

aber das thema gabs dann auch schon öfter ...
 
Schon wieder!

Hallo zusammen,

die Frage mit dem FB und DB habe ich vorhin vielleicht nicht besonders glücklich formuliert, deshalb hier der zweite Versuch:

Ich rufe in meinem Simatic Manager das Fenster auf, das mir die Bausteine des Programms zeigt (also alle Bausteine, OB´s, FC´s, FB´s, etc.). Naiv wie ich bin dachte ich, ich mache einfach auf den entsprechenden FB einen rechten Mausklick, und in einem Auswahlfenster kann ich mir den zum FB gehörigen DB suchen, doch das geht natürlich nicht!

Ich möchte also über irgendeine einfache Funktion genau diese Information beziehen können, nur ich weiß nicht wie. Wenn also jemand eine Idee hat, bitte hier posten.

Mercy,
Andi
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Andi,

Bei einer unserer Umfangreichen Steuerungen habe ich im OB1 eine Programmierung entdeckt, aus der ich nicht schlau werde. Diese lautet:

Netzwerküberschrift "Eins- und Nullmerker"
U M 0.0
R M 0.0
(Kommentar dazu "Logisch 0")
UN M 0.1
S M 0.1
(Kommentar dazu "Logisch 1")

Wozu dieser Programmteil? Beide Merker werden im Programm recht häufig abgefragt.

diese Art der Programmierung stammt noch aus S5-Zeiten, wo es die Befehle
SET und CLR noch nicht gab.

Grüße
Gebs
 
Ich möchte also über irgendeine einfache Funktion genau diese Information beziehen können, nur ich weiß nicht wie. Wenn also jemand eine Idee hat, bitte hier posten.

Wenn die DBs einen symbolischen Namen haben, dann kannst Du das in der Symbolliste sehr einfach sehen: Der entsprechende DB hat dann als Datentyp "FB xx" wobei xx für die Nummer des FB steht, zu dem der Datenbaustein als Instanzdatenbaustein gehört.
 
Wenn ich jetzt aber ein vorhandenes Programm habe, bei dem ein FB mit statischen Lokaldaten vorhanden ist, wie finde ich den dazu gehörigen DB heraus, ohne alle programmierten DB´s einzeln aufrufen zu müssen?
Naiv wie ich bin dachte ich, ich mache einfach auf den entsprechenden FB einen rechten Mausklick, und in einem Auswahlfenster kann ich mir den zum FB gehörigen DB suchen, doch das geht natürlich nicht!

Ich möchte also über irgendeine einfache Funktion genau diese Information beziehen können
Im Bausteine-Ordner gibt es eine Spalte "Typ", da steht bei jedem DB, ob er ein normaler Global-Datenbaustein ist oder ein "Instanzdatenbaustein zu FB xx". Hier kann man sehr schnell alle Instanz-DB zu einem FB finden.

Und schau Dir mal Extras > Referenzdaten > Programmstruktur und Bausteine-Ordner > Rechts-Mausklick > Bausteinkonsistenz prüfen ... an.

Harald
 
Im Bausteine-Ordner gibt es eine Spalte "Typ", da steht bei jedem DB, ob er ein normaler Global-Datenbaustein ist oder ein "Instanzdatenbaustein zu FB xx". Hier kann man sehr schnell alle Instanz-DB zu einem FB finden.

:confused:
Peinlich das zugeben zu müssen, aber so breit habe ich die Spalte noch nie gemacht, dass ich das gesehen jemals gesehen hätte. Wieder was gelernt. :ROFLMAO:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Naiv wie ich bin dachte ich, ich mache einfach auf den entsprechenden FB einen rechten Mausklick, und in einem Auswahlfenster kann ich mir den zum FB gehörigen DB suchen, doch das geht natürlich nicht!
Der Wunsch, den zum FB gehörenden Instanz-DB zu finden, deutet darauf hin, dass Du das Prinzip der Instanz noch nicht verstanden hast, Sorry.
Es ist ja gerade das besondere an einen FB, dass er statische Variable hat, das bedeutet aber natürlich auch, dass es bei mehrmaligem Aufruf des gleichen FB mehrere Sätze dieser statischen Vaiablen gibt, eben die Instanzen.
Es kann also auch mal viele Instanzen eines FB geben, das können jeweils einzelne DBs sein oder auch Bereiche einer Multiinstanz.

Wozu willst Du eigentlich wissen, wo die Instanzen Deiner Bausteine sind?
Es ist vielleicht mal interessant, einen Instanz-DB auzusehen, aber eigentlich sollte es beim Programmieren nicht erforderlich sein, zu wissen wo die Instanz ist, außer beim Aufruf selbst natürlich, aber da siehst Du es ja direkt.

Gruß
Erich
 
Die Erklärung

Hallo Erich,

Der Wunsch, den zum FB gehörenden Instanz-DB zu finden, deutet darauf hin, dass Du das Prinzip der Instanz noch nicht verstanden hast, Sorry.
Wie bereits oben erwähnt bin ich erst dabei, mir über Schulungen Wissen über die Simatic S7 anzueignen, und wie Du bestimmt auch gelesen hast, war das Thema Mulitinstanzen eben bei meiner ersten Schulung noch nicht dabei. Du brauchst Dich deshalb auch nicht entschuldigen, denn Du hast recht: Das Prizip habe ich noch nicht verinnerlicht, aber ich denke, ich bin auf einem guten Weg!;)
Es ist ja gerade das besondere an einen FB, dass er statische Variable hat, das bedeutet aber natürlich auch, dass es bei mehrmaligem Aufruf des gleichen FB mehrere Sätze dieser statischen Vaiablen gibt, eben die Instanzen.
Es kann also auch mal viele Instanzen eines FB geben, das können jeweils einzelne DBs sein oder auch Bereiche einer Multiinstanz.

Wozu willst Du eigentlich wissen, wo die Instanzen Deiner Bausteine sind?
Es ist vielleicht mal interessant, einen Instanz-DB auzusehen, aber eigentlich sollte es beim Programmieren nicht erforderlich sein, zu wissen wo die Instanz ist, außer beim Aufruf selbst natürlich, aber da siehst Du es ja direkt.

Gruß
Erich
Momentan bin ich gerade dabei, einen Programmfehler zu suchen. Um diesen zu finden muß ich erst mal das Programm vestehen, daß der Anlagenprogrammieren geschrieben hat. Um dieses tun zu können muß ich im "Fehlerfall" die Zustände verschiedener Lokaldaten wissen, um zu sehen, warum dieser Fehler auftritt. Um diese Daten abrufen zu können, muß ich Einblick in den dem FB zugehörigen Daten im DB haben.

...und @ Harald: Danke für Deine konstruktiven Tips!:s1: Wenn ich morgen wieder in der Arbeit bin, werde ich gleich mal nachsehen, ob ich Deine Anleitungen in die Tat umsetzen kann.

Grüßle,
Andi
 
Zuletzt bearbeitet:
In der Symboltabelle steht in der Spalte neben der DB-Nummer entweder der eigene DB, dann ist es ein Global-DB oder der FB, zu welchem der Instanz-DB gehört.
 
Zurück
Oben