Step 7 SCL / CFC - Zugriff auf CFC-Bausteinparameter

hub

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

in SFC greife ich auf Parameter eines Bausteines ja folgendermaßen zu:
Planname\Bausteinname.Anschluss .....
z.B.:
CFC01\MonAnL01\PV_AH_Lim > 90.0

Kann ich in einem selbst erstellten Baustein (AWL, SCL) auf die gleiche Art zugreifen?

Gruß hub.
 
Über den Namen nicht, nein.
Wozu willst du das denn benutzen? Der Vorteil, oder das Konzept von CFC ist doch gerade, dass man anhand der Linien alle Signalverschaltungen nachvollziehen kann.

Bei SFC funktioniert das auch nur wenn du einen SFC-Plan verwendest. Bei SFC-Typen muss man auch über die Schnittstelle gehen, und diese dann in Standard-CFC-Manier verschalten.
 
Ich bin kein großer Fan von CFC.
Prinzipiell finde ich CFC ja nicht schlecht, wenn da nicht immer die Siemens-Eigenheiten wären.
z.B.
- zu wenig Platz auf der Seite
- viele Verbindungen, die nichts mit der Funktion zu tun haben (APL) beeinträchtigen die Übersichtlichkeit und erschweren das Verständnis der Schaltung
- Testfunktion, Rücklesen, usw.
- und natürlich mein Problem, dass CFC und SCL nicht miteinander können, bzw. dass die Instanz-DB’s keinen symbolischen Namen bekommen

Momentan ist der Baustein mit Schnittstelle und CFC-Verschaltungen aufgebaut.
Bei knapp 250 Ein-/Ausgängen leider auch nicht besonders übersichtlich, zeitintensiv und störanfällig.

Aber das eigentliche Problem dabei ist, dass bei jeder Schnittstellenänderung ein AS-Stop nötig ist.

Da der Baustein eine eigenständige, in sich geschlossene Funktion bildet, hätte ich ihn gerne ohne Schnittstelle und CFC-Verschaltungen aufgebaut.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
- zu wenig Platz auf der Seite
Neuer Teilplan, Plan-in-Plan, Logik in einen Bst bündeln ...
- viele Verbindungen, die nichts mit der Funktion zu tun haben (APL)
beeinträchtigen die Übersichtlichkeit und erschweren das Verständnis der Schaltung
Kann man drüber streiten
- Testfunktion, Rücklesen, usw.
Test ist bei komplexen Schaltungen übersichtlicher als in listenansicht. Auch für einzelschrittmodus kann man sich den online cfc daneben legen um einen Überblick über den Zustand zu behalten.
Rücklesen geht deutlich komfortabler als mit STEP 7 ohne CFC
- und natürlich mein Problem, dass CFC und SCL nicht miteinander können

Dafür gibt es andere Wege

Aber das eigentliche Problem dabei ist, dass bei jeder Schnittstellenänderung ein AS-Stop nötig ist.
Ja leider

Da der Baustein eine eigenständige, in sich geschlossene Funktion bildet, hätte ich ihn gerne ohne Schnittstelle und CFC-Verschaltungen aufgebaut.
Wie gesagt dafür gibt es andere Wege
 
Zuletzt bearbeitet:
Ich will hier nicht die Vor- und Nachteile von CFC ausdiskutieren,
sondern suche nach einer Lösung für mein Problem.

Wenn es dafür andere Wege gibt, könntest du mir auch einen kleinen Hinweis dazu geben?
 
Du könntest von außen die Daten in einen Global-DB kopieren, und dann in deinem Baustein nur mit diesen Daten arbeiten. Dann hast du zumindest das Problem beseitigt, bei einer Schnittstellenänderung die SPS in Stop setzen zu müssen.
Da die Daten allerdings per CFC-Plänen in den DB hinein- und wieder hinauskopiert werden müssen, wird das nicht gerade übersichtlich.
 
Du könntest von außen die Daten in einen Global-DB kopieren, und dann in deinem Baustein nur mit diesen Daten arbeiten. Dann hast du zumindest das Problem beseitigt, bei einer Schnittstellenänderung die SPS in Stop setzen zu müssen.
Da die Daten allerdings per CFC-Plänen in den DB hinein- und wieder hinauskopiert werden müssen, wird das nicht gerade übersichtlich.

Global-DB hört sich gut an.

Knackpunkt ist, wie du bereits schreibst, das Umkopieren der Daten auf CFC-Ebene.

Mein Gedanke:
Nachdem ein SFC meine Anforderung (Zugriff über Bausteinname) beherrscht, könnt ich das Umkopieren doch mit einem SFC durchführen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nö !!!! Das ist doch Müll !!!! Was genau willst du eigentlich ?? l
Danke, es geht also nicht nur mir so.
Mit all diesen Tricks entsteht ein Programm, bei dem während der Entwicklung auf Big$ geschimpft wird, das keiner versteht und wenn es dann Fehlfunktionen gibt, dann sind alle Schuld nur nicht der Programmierer.

Der TE sollte sich einmal über die Grundlagen von CFC auseinandersetzen und was dieses Werkzeug kann.
Dann wird relativ schnell klar, dass das System eine Lösung für nachzu alles gibt. Ich habe bisher noch keine Aufgabestellung gehabt, die ich, wenn notwendig, nicht lösen konnte.
Und wenn neben CFC noch PCS7 beteiligt ist, wird es nicht wirklich leichter.


bike
 
Warum der ganze Aufwand?
Hab ich teilweise schon geschrieben.

1.)
(Posting#5)
Der Baustein ist mit aktuell ca. 250 Ein-/Ausgängen nicht wirklich übersichtlich, sowie zeitintensiv und störanfällig bei der Verschaltung.
Die ganzen Ein- und Ausgänge am Baustein sind alle überflüssig, weil der Baustein nur eine einmal benötigte Funktion enthält.
Vergleichbar mit FBs.
Wird ein FB mehrfach benötigt, braucht er zwangsläufig eine Schnittstelle.
Wird ein FB nur einmal benötigt, kann er eine Schnittstelle besitzen, muss aber nicht unbedingt.
Im FB kann auch direkt (symbolisch) auf die E-/A-/M-/DB-Ebene zugegriffen werden.
Genau diese Möglichkeit fehlt mir bei CFC-Bausteinen.

2.)
(Posting#1)
Ich benötige z.B. die Info „PV_AH_Lim“ vom Baustein „MonAnL“.
Dann müsste ich beim „OpAnL“ die Anschlüsse „SP_HiLim/SP_LoLim“ in Abhängigkeit von „MonAnL/PV_AH_Lim“ unterschiedlich beschalten.
Beides geht in CFC nicht. Wohl aber in SFC.
SFC stellt mir zwei Programmierarten zur Verfügung:
- Transition: Bedingungen zum Weiterschalten
- Aktionen: Zuweisen (Kopieren) von festen und variablen Werten zu anderen Variablen
Die Aktionen stellen genau die Funktionalität dar, die ich benötige.

3.)
(Posting#5)
Das Hauptproblem mit AS-Stop bei Bausteinen mit Schnittstelle haben beide Vorredner übersehen, oder keine Lösung dafür.


Dass CFC bei bestimmten Anwendungen auch seine Vorteile hat, bestreite ich ja nicht.
Genauso wie SCL bei bestimmten Anwendungen die bessere Wahl ist.
Und dass es auch Programmierer gibt, die lieber die Hochsprache bevorzugen, ist halt mal so.
Selbst viele Siemens-Bausteine sind mit SCL erstellt (z.B. APL-Bausteine).

Wenn es zu meinem Problem Lösungen (auch auf CFC-Ebene) gibt, bin ich für jede Anregung dankbar.
 
Eine wirkliche Lösung für deine Probleme gibt es nicht. Man kann diese nur möglichst elegant umschiffen.

Schnittstellenänderung ohne Stop:
Wenn nach einer Schnittstellenänderung ein AS-Stop nicht möglich oder nur sehr aufwändig ist, habe ich es schon gemacht dass ich dem Baustein einen neuen Namen gegeben habe (z.B. mit Endung _v2 usw.). Dann den Aufruf der neuen Bausteinversion neben dem alten platziert, und die Verschaltung vom alten auf den neuen Baustein übernommen. Wenn die Bausteine viele Parameter haben ist das nicht nur aufwändig, sondern auch fehleranfällig (es lassen sich nicht alle Linien zum neuen "rüberziehen"). Ich habe ein Programm schon 3 Stunden so umprogrammiert nur um ein AS-Stop zu vermeiden.

Zugriff auf Parameter von APL-Bausteinen die nicht auf die Out-Schnittstelle gelegt wurden:
Vom Prinzip her ist das relativ einfach auch in SCL zu lösen. Du machst dir einen FC mit einem Eingangsparameter vom Typ Any, und mehreren Ausgangsparametern so wie du sie benötigst, z.B. PV_AH_Lim. Der Any-Parameter muss später im CFC-Plan mit irgendeinem Ausgangsparameter der MonAnL-Instanz von der du die Daten haben willst verschaltet werden (Prinzip wie bei den ExtVa1.. Parametern der anderen APL-Bausteinen). Im SCL-Baustein liest du dann die DB-Nummer aus dem Any-Pointer aus. Das ist dann der Instanz-DB des MonAnL-FB (Multiinstanzen gibt es in CFC glücklicherweise nicht).
Einfachste Variante wäre jetzt, per Absolutadressierung wie instanz_db.DD10 den Wert von PV_AH_Lim aus der Instanz auszulesen und auszugeben.

Das Problem dabei ist, dass dir das bei einer Aktualisierung der APL bei der sich womöglich Adressen verschoben haben um die Ohren fliegt, bzw. du alle diese Stellen anpassen musst. Vielleicht kann man sich da noch was symbolisches mit einem Dummy-Aufruf des MonAnL in einem SCL-FC überlegen, viel schöner wird das aber auch nicht.

Und es besteht die Möglichkeit dass dir dein Baustein jemand falsch verschaltet. Du könntest zumindest noch prüfen ob die Länge des Instanz-DBs den du aus dem Any-Parameter herausgefunden hast mit der der Soll-Version des MonAnL übereinstimmt. Wenn nicht, Abbruch mit Fehlermeldung oder Sonstiges.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich mache etwas anders.
Die Schnittstelle wird auf eine vorhersehbare Größe dimensioniert.
Also zunächst alle bekannten Möglichkeiten berücksichtigen.
Dann eine Funktion in SCL erstellen, die die Daten sammelt.
In dieser oder einer anderen Funktionen wird die Schnittstelle zum Beispiel aus einem DB versorgt.
Bei einer guten Planung geht das meist gut, zumindest bei uns.
Wenn sich die Verschaltung ändert, aber die Schnittstelle gleich bleibt....

Ist nicht schön, doch das bin ich ja auch nicht. ;)


bike
 
Die Schnittstelle wird auf eine vorhersehbare Größe dimensioniert.
Du hast also die Glaskugel 8)
Es sind leider die Dinge die nicht vorhersehbar sind, und irgendwann sind auch die Reserven aufgebraucht.
Wobei das mit den Reserve-Ein-/Ausgängen in CFC von der Optik her nicht so schlimm aussieht, weil man diese ja erstmal unsichtbar schalten kann.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Den Zugriff mittels Anypointer hatte ich schon getestet.
Nachteil war halt, dass man nicht symbolisch, sondern nur mit absoluten Adressen auf den Instanz-DB zugreifen kann.
Scheint aber momentan die beste Lösung zu sein.

-> Reserve-Anyparameter vorsehen
-> DB-Länge prüfen
passt

Den Dummy-Aufruf des MonAnL in SCL habe ich aber noch nicht verstanden.
 
Den Dummy-Aufruf des MonAnL in SCL habe ich aber noch nicht verstanden.
Vom Prinzip her habe ich mir so gedacht, einen festen Dummy-Instanz-DB des MonAnL anzulegen. Im Nummernbereich der einem für die eigene Verwendung zur Verfügung steht.
Dann per Blockmove über die Daten aus dem Any-Pointer den kompletten echten IDB auf den Dummy-IDB rüberkopieren. Dann kann auf den Dummy-IDB symbolisch zugegriffen werden. Müsste theoretisch komplett in SCL umsetzbar sein.
Mal angenommen es kommt von Siemens eine neue Version des MonAnL bei dem Adressen verschoben werden, müsste dieser SCL-Baustein nur neu übersetzt werden und es sollte wieder passen.
Was besseres fällt mir momentan nicht ein.
 
Wir nutzen Parameter bst als Quelle für z.b. pv_ah_lim. Eine verschaltung geht zum monanl, eine dorthin wo der wert noch gebraucht wird
 
Zurück
Oben