Step 7 Anfängerfrage: SFB52-Aufruf aus FB?

MarcusSPunkt

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

ich beschäftige mich gerade mit dem SFB52 "RDREC" (read record), um damit Diagnosemeldungen einer Baugruppe auszulesen. Da ich für die Baugruppe einen FB geschrieben habe, würde ich gerne von euch wissen, ob ich den SFB generell nur aus einem OB aufrufen darf ,–wegen der asynchronen arbeitsweise über mehrere Zyklen- oder ob ich den SFB auch aus meinem FB aufrufen darf.

In dem Dokument "Von PROFIBUS DP nachPROFINET IO" (https://support.automation.siemens....ib.csFetch&nodeid=19293371&forcedownload=true ) auf der Seite 96 (bzw. Seite 8-4) ist nur von Aufrufen aus OBs die Rede.

(Der FB wird in jedem Zyklus aufgerufen und ermöglicht somit eigentlich den gleichen Aufruf wie ein OB, oder sehe ich das falsch?)

Spricht irgendetwas dagegen? Oder wäre das einfach nur unschön?

Vielen Dank im Voraus!


PS: Ist mir gerade aufgefallen:
wahrscheinlich macht es keinen Sinn, weil der FB meiner Baugruppe mehrfach verwendet wird und somit vom Anwender immer wieder geöffnet werden müsste, um den Instanz-DB des SFB52 zu ändern, damit nicht alle auf den gleichen Instanz-DB zugreifen.
 
Zuletzt bearbeitet:
Hallo Markus,

Ich hab selbst kein Erfahrung mit SFB52.

Der Aufruf könnte eventuell in der OB 86 (RACK_FLT) erfolgen

Hast du eine Visualisierung dabei Wincc Flex ?

Mit Wincc hat man die Möglichkeit Systemfehler zu melden.
Im Hardware 1 klik auf der CPU
und dann unter extras Systemfehler melden.
Dan werden die die 80er OB generiert und benötige FB und DB und sogar ein Aufruf im OB1

DVH
 
Zuviel Werbung?
-> Hier kostenlos registrieren
hello marcus,

Grundsätzlich kannst du jeden SFB oder SFC auch aus einem FB oder FC aufrufen lassen, da diese im Normalfall sowieso aus dem OB1 aufgerufen werden.
Im Dokument war auch ein Beispiel mit dem OB82.

Diagnosefähige Signal- und Funktionsbaugruppen erkennen interne und externe Fehler underzeugen einen Diagnosealarm, auf den Sie mit Hilfe eines Alarm-OBs reagieren können.Über die OB-Nummer und die Startinformationen zum Fehlerereignis erhalten Sie bereitserste Aussagen zu Fehlerursache und Fehlerort.Detaillierte Informationen zum Fehlerereignis erhalten Sie dann mit dem SFB 54​
(Alarmzusatzinformation lesen) in diesem Fehler-OB.
--> Seite 101

OB's und FB's oder FC's sind nicht gleichgestellt. In den F-Bausteinen steht das Anwenderprogramm und wird mithilfe den OB's aufgerufen. OB's werden vom System aufgerufen - kein Einfluss vom Anwender.
Alle OB's haben verschiedene Prioritäten. OB1 hat die niedrigste Priorität und kann von allen anderen OB's unterbrochen werden, z.B. OB82 oder OB35

Es spricht also nichts gegen deine Idee.

grüße
marco
 
Hallo, danke für eure Antworten!

Hast du eine Visualisierung dabei Wincc Flex ?

Nein, ich nutze kein WinCC Flex!



Ich bin mir noch nicht sicher, ob es nicht einen schöneren Lösungsweg gibt. Wie oben in meinem Beitrag mit der fetten Schrift beschrieben, nutze ich meinen FB häufiger und möchte diesen in zukünftigen Projekten nicht immer öffnen und eine andere Instanz-DB-Nummer für den SFB52 festlegen. Dies wird aber notwendig sein, damit nicht alle auf einen FB zugreifen und mir bei mehreren Diagnosen die Informationen überschrieben werden. Fällt euch da was besseres ein?

Gruß,
Marcus
 
PS: Ist mir gerade aufgefallen:
wahrscheinlich macht es keinen Sinn, weil der FB meiner Baugruppe mehrfach verwendet wird und somit vom Anwender immer wieder geöffnet werden müsste, um den Instanz-DB des SFB52 zu ändern, damit nicht alle auf den gleichen Instanz-DB zugreifen.

deswegen Instanz-DB. Dieser wird bzw. sollte nur einmal verwendet. Der FB wird öfters aufgerufen, aber jedesmal mit einem anderen Instanz-DB wo die Daten abgespeichert werden.

Beispiel:
Code:
CALL FB30, DB30
           CALL FB30, DB31
           CALL FB30, DB50
           ....

Sorry, zu deiner Frage nochmal,

Es gibt die Möglichkeit deinen IDB für den SFB als lokale IN-Variable zu deklarieren
würde dann so aussehen

Code:
CALL SFB52, #SFB_IDB
....

#SFB_IDB ist deine IN-Variable, bei jeden aufruf deines FB kannst du jetzt einen IDB für deinen SFB verwenden
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
oder du deklarierst deinen sfb im Stat bereich des aufrufenden FBs. So wird die Instanz deines SFB Teil der Instanz deines aufrufenden FBs. Du musst dich also nur noch um den Instanzdb deines aufrufenden FBs kümmern.

Nennt sich Multiinstanz (ing).

Das hat den vorteil dass du für zusammengehörige Programmteile nur noch einen einzigen Instanzdb brauchst.

Ich hab darum in meinen Programmen meist nur noch ne Handvoll Instanzdbs die ich selbst beim aufruf angeben muss
z.B.
CALL "Regelung_EM_Räume" , "Instanz_EM"
CALL "Lüftung_EM" , "iDBLuftungEM"
CALL "Kälte" , "iDBKälte"
CALL "Lufterhitzer" , "iDBLufterhitzer"
CALL "Kommunikation" , "iDBKommunikation" // hier sind diverse SFBs ebenfalls reindeklariert
CALL "Pumpensumpf" , "iDBPumpensumpf" // FBs diverse Pumpen über Profibus, Ventile etc.



mfG René
 
Guten Morgen,

dazu hätte ich jetzt auch mal ne Frage,


Stat_1.PNG

ich habe jetzt den SFB in´s STAT eingefügt und habe im STAT aber noch ein Record mit einer Länge von 68 Byte.
Wie kann ich denn jetzt in AWL den RECORD vom x_RDREC mit dem Record "verheiraten", weil der RECORD ist ja ein IN_OUT.

Vielen Dank für eure Hilfe,

Jan-Frederik
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ich habe jetzt den SFB in´s STAT eingefügt und habe im STAT aber noch ein Record mit einer Länge von 68 Byte.
Wie kann ich denn jetzt in AWL den RECORD vom x_RDREC mit dem Record "verheiraten", weil der RECORD ist ja ein IN_OUT.

Indem du RECORD beim Call von X_RDREC an der Schnittstelle anlegst?
 
Zurück
Oben