Problem: Externer Zugriff auf IDB's

Approx

Level-1
Beiträge
1.180
Reaktionspunkte
427
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo.
Ich bin gerade dabei, ein echtes Katastrophen-Step7 Programm (Fremdfirma, nicht mehr greifbar) neu aufzusetzen und zu optimieren. D.h. Leichen entfernen, Symbolik durchkämmen usw.
Habe hier mehrere Sinamics-FB's auf deren jeweilige Instanz-DB's extern in anderen FC's zugegriffen und zugewiesen wird. Sowas finde ich immer heikel und werde es bereinigen. Der Sinamics-FB regelt im Prinzip nur die Kommunikation mit dem FU über SFC14/15, bastelt das Telegramm an den FU zusammen und fieselt die Daten vom FU auseinander.
Als Anhang habe ich mal den Aufruf des Sinamics-FB, dessen zugehörigen IDB und den externen Zugriff auf den IDB am Beispiel des Sollwertes beigefügt.
Mir stellen sich folgende Fragen:
Was passiert eigentlich mit unbeschalteten FB-Eingangsparametern?
Ist es egal, ob man vor oder nach dem FB-Aufruf auf die Instanzdaten schreibend zugreift? Musste der Programmierer dieser Grotten-Software Regeln bei der Reihenfolge beachten?

Bin gespannt auf eure Antworten!
Gruß Approx
 

Anhänge

  • FB75.JPG
    FB75.JPG
    38,6 KB · Aufrufe: 95
  • DB280.JPG
    DB280.JPG
    167,7 KB · Aufrufe: 93
  • FC245.JPG
    FC245.JPG
    53,1 KB · Aufrufe: 90
Mir stellen sich folgende Fragen:
Was passiert eigentlich mit unbeschalteten FB-Eingangsparametern?
Ist es egal, ob man vor oder nach dem FB-Aufruf auf die Instanzdaten schreibend zugreift? Musste der Programmierer dieser Grotten-Software Regeln bei der Reihenfolge beachten?

Solche Dinge findest du in Zusammenhang mit Siemens-Antriebstechnik öfters.
Aber um deine Fragen zu beantworten:
Unbeschaltete Parameter bei einem FB "gibt" es eigentlich gar nicht. Soll heissen: Jedem Parameter ist ein entsprechender Bereich im Instanz-DB zugeordnet. IN-Parameter bleiben auf ihrem Anfangswert, OUT- oder INOUT-Parameter haben den Wert, der ihnen im FB zugewiesen wird.

Der Zeitpunkt des Zugriffs (vor oder nach dem FB-Aufruf) ist natürlich wichtig.

Gruß
Dieter
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Dieter,
habe nun zumindest die Eingangsparameter des FB (falls ausserhalb dem IDB zugewiesen) ordentlich an dem FB angetragen. Ist ein bisschen fieselei, aber macht es für die Instandhalter nachvollziehbarer. Zumal es sich um 8 Antriebe handelt.
Der Zeitpunkt des Zugriffs (vor oder nach dem FB-Aufruf) ist natürlich wichtig.
Habe noch anzumerken, daß die Sollwertbildung (FC245, Rampe) im OB35 alle 100ms zugewiesen wird. Hab ich eben auch erst gesehen. Da das zyklische Programm interruptmäßig unterbrochen wird, dürfte es ja nicht wichtig sein, ob nun vor oder nach dem FB-Aufruf auf den IDB geschrieben wird. ?!?
Da habe ich mir gleich das beste Beispiel ausgesucht, hihi.
Ich muss aber auch eingestehen, daß die Anlage seit einem Umbau problematisch ist. Derjenige, der das verbrochen hat, ist endlich vom (Stahlwerks-)Hof gejagt und ich versuche nu alles gerade zu biegen...;)

Jedenfalls vielen Dank.
 
IN-Parameter bleiben auf ihrem Anfangswert, OUT- oder INOUT-Parameter haben den Wert, der ihnen im FB zugewiesen wird.
Nochwas: Eigentlich wird im FB gar nicht viel gemacht. Teilweise werden die Sendedaten an den FU nur extern des FB's verhackstückt. Sieht mir ganz so aus, als hätte da jemand einen Siemens-Vorlage-FB genommen und das Know how für die Steuerworte usw. aussen drumherumgebastelt...

Approx
 
Hallo Approx,
das FB Eingänge nicht belegt sind muss nicht weiter schlimm, auch wenn
diese dann von andere stelle beschrieben werden, funktioniert das.
Wichtig ist eigentlich was der Baustein intern damit macht, wird z.b. ein
Wert erwartet und der ist dann nicht beschaltet, kann es dazu führen
das der Gewünschten verknüpfungen oder Berechnungen, nicht das
Gewünschte Ergebnis liefern.

Wenn ich ehrlich sein soll mach ich das hin und wieder auch, z.b. für einen
Sollwert den führe ich auf die Schnittstelle, beschreibe den aber dann von
der HMI. So habe ich dann die möglichkeit ihn von der HMI oder vom Programm
aus zu beschalten, aber niemals beides.

Keine Angst ich werde euren Hof nicht betreten, von Stahl habe ich keine Ahnung.

guten Rutsch
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn ich ehrlich sein soll mach ich das hin und wieder auch, z.b. für einen
Sollwert den führe ich auf die Schnittstelle, beschreibe den aber dann von
der HMI. So habe ich dann die möglichkeit ihn von der HMI oder vom Programm
aus zu beschalten, aber niemals beides.

Keine Angst ich werde euren Hof nicht betreten, von Stahl habe ich keine Ahnung.

guten Rutsch

Wenn etwas an den FB angetragen ist, dann ist ja gut. Ob nun von Step7 oder von HMI etwas vorgegeben wird, ist ja egal. Mir ging es ja nur darum, das fast nix am FB angetragen war. Alles in diversen Programmteilen über den IDB. Und beim Sollwert war es ja noch einfach! ;-) Der viele Kleinkram mit Quittierungen, Freigabe-bits usw. mach viel Arbeit, weil oft verwendet.

Gruß
P.S.: Wünsche auch schönen Rutsch! Wer glaubt, im Stahlwerk is warm - der irrt! :ROFLMAO:
 
Also ich finde da ist nichts daran auszusetzen wenn man einen Eingangsoperanden eines FB "extern" beschreibt.

zB der Sollwert in diesem Beispiel...
alternativ muss man ein MW (oder einen anderen DBx.DBWy) verwenden, das auch nicht mehr Klarheit im Programm verschafft.

Wenn man die Symbolik einschaltet heisst die Variable auch gleich sinnvoll.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Zitat: Sowas finde ich immer heikel und werde es bereinigen.
Was ist denn die Alternative? statt dem IDB-Bit einen Merker nehmen und den dann an den FB "klemmen"?

Zitat: Ist es egal, ob man vor oder nach dem FB-Aufruf auf die Instanzdaten schreibend zugreift? Musste der Programmierer dieser Grotten-Software Regeln bei der Reihenfolge beachten?

Da ist dasselbe zu beachten wie wenn Du das- so wie Du es ja vermutlich ändern möchtest- einen Merker, Merkerwort verwendest.
Der IDB ist nichts böses..... und hat keine besonderen oder fiese Eigenschaften.

;-)
 
Wenn man die Symbolik einschaltet heisst die Variable auch gleich sinnvoll.
Ironie on/
Echt? Wie geht das? :confused:
/Ironie off
Leute, hängt euch nicht an meinem "Sollwert"-Beispiel auf. Ich finde das externe Beschreiben von IDB's kacke! Dann soll man sich lieber die Mühe machen, und dem FB etwas Logik verpassen, anstelle im ganzen Programm verteilt hier und da mal nen IDB-Bit zu beschreiben! Ist ja furchtbar sowas.
Ich möchte als Insti den FB-Aufruf im Onlinestatus ansehen, und sofort bescheid wissen!
Approx
 
Ich denke ihr kennt meine Meinung, wenn irgendwie möglich sollte man in keine Weise auf einen IDB zugreifen, das sind interne Daten des FB. Und ja borremeus, dann nimm einen Zwischenmerker in Form einer Temp- oder noch besser einer Globaldatenbausteinvariable. Du hast Recht, im oben gezeigten Fall ist das noch ganz klar und ersichtlich, aber als nächstes wird dann indirekt ein ganzer Bereich umkopiert oder eine Struct, dann findet man das nicht mehr. Alles andere geht natürlich, ist aber extrem unsauber und buggy. Ausnahmen bestätigen die Regel, klar, manchmal hat man Druck oder keine Zeit oder oder oder.

PS: Nicht zu vergessen --> Änderungen am FB führen zu Verschiebungen im IDW, was böse enden kann, wenn mann von "Außen" Zugriffe auf diesen IDB hat.

@ SPS-Programmierer ohne Furcht und Tadel
Pfui, direkt aus einer HMI auf einen IDB, das ist der Supergau, das findet niemand! :ROFLMAO:
 
Zuletzt bearbeitet:
Du kannst aber auch den IDB online anschauen, da weisst Du mehr, weil Du auch gleich die STAT variablen siehst und in verschiedenen Fällen siehst was das Teil gerade macht.
Vielleicht muss ich mal präzisieren, weil die Diskussion sonst zu nix führt:
Nicht ICH muss mit der Software klarkommen (ich kann mir da schon alleine helfen), sondern z.B. der 50-Jährige Schichtelektriker oder der gerade ausgelernte Jungarbeiter...
 
Leute, hängt euch nicht an meinem "Sollwert"-Beispiel auf. Ich finde das externe Beschreiben von IDB's kacke! Dann soll man sich lieber die Mühe machen, und dem FB etwas Logik verpassen, anstelle im ganzen Programm verteilt hier und da mal nen IDB-Bit zu beschreiben! Ist ja furchtbar sowas.
Ich möchte als Insti den FB-Aufruf im Onlinestatus ansehen, und sofort bescheid wissen!

Ich greife ab und zu auch mal auf die Instanzdaten zu, vor allem bei Reglerbausteinen. Wenn man Siemens-Bausteine aus dem Modular-PID-Control verwendet kommt man auch garnicht drumherum sowas zu machen.

Damit der FB dann aber nicht nackt ohne Beschaltung dasteht, kann man auch die Parameter mit dem eigenen Instanz-DB beschalten, also so:
Code:
CALL  "FB_TEST" , "IDB_TEST"
  IN1 :="IDB_TEST".IN1
  IN2 :="IDB_TEST".IN2
  OUT1:="IDB_TEST".OUT1
  OUT2:="IDB_TEST".OUT2

Dann klappts auch mit dem Online-Status, und man kann zusätzlich schnell zur Verwendungsstelle springen wenn man auf den Operanden klickt.
 
Ich glaube eine Diskussion über die Eingangsparameter wird wohl endlos.
Das es möglich ist ist wohl klar. Bei Multiinstanzen ist es ja im Grunde genommen auch nichts anderes. Bei einem Timer SFB4 kann ja auch irgendwo im Programm stehen "=xxx.IN"

Die Frage sollte lauten, wie kann man es besser machen und vor allem für Instandhalter transparent. Wenn der Eingangsparameter ohnehin extern geschrieben wird, dann wäre doch ideal statt des Eingangsparamter eine statische Variable anzulegen. Dann verwirrt zumindest der nicht belegte Eingang am Bausteinaufruf nicht.


Edit: oder noch besser Thomas v2.1 seine Variante
 
Zuletzt bearbeitet:
Ich denke ihr kennt meine Meinung, wenn irgendwie möglich sollte man in keine Weise auf einen IDB zugreifen, das sind interne Daten des FB. Und ja borremeus, dann nimm einen Zwischenmerker in Form einer Temp- oder noch besser einer Globaldatenbausteinvariable. Du hast Recht, im oben gezeigten Fall ist das noch ganz klar und ersichtlich, aber als nächstes wird dann indirekt ein ganzer Bereich umkopiert oder eine Struct, dann findet man das nicht mehr. Alles andere geht natürlich, ist aber extrem unsauber und buggy. Ausnahmen bestätigen die Regel, klar, manchmal hat man Druck oder keine Zeit oder oder oder.

@ SPS-Programmierer ohne Furcht und Tadel
Pfui, direkt aus einer HMI auf einen IDB, das ist der Supergau, das findet niemand! :ROFLMAO:

Kann das so nicht bestätigen, man kann eine Software immer schlecht und unübersichtlich programmieren, aber der qualifizierte Zugriff auf IDB Daten gehört m.E. nicht dazu. Alternativ werden nur Daten auf Globaldatenbausteine zwischenrangiert, was in dem konkreten Fall nichts, aber auch gar nichts bringt.
Wo ist denn bitteschon der Unterschied wenn das oben genannte Bit 20x irgendwo verwendet wird ob es in einem DB steht der am FB hängt, oder gleich das IDB-Bit ist.

Ob die Verwendung eines Bits (schreibender weise) 20x irgendwo im Programm gut ist steht auf einem anderen Papier- ob das bei dieser Software notwendig ist kann ich aber nicht beurteilen und daher auch nicht kommentieren.
 
Zurück
Oben