Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 17

Thema: AWL: Dynamischer Aufruf von Funktionen (Funktionszeiger in AWL)

  1. #1
    Registriert seit
    18.09.2006
    Beiträge
    31
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Beitrag


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi!
    Gibt es in AWL eine Möglichkeit, Funktionen bzw. vll. auch Funktionsbausteine parametrisch aufzurufen, d.h. nicht durch die direkte Angabe des symbolischen Namens oder einer festen Bausteinnummer, sondern über eine irgendwo gespeicherte Nummer (oder Zeiger)?
    Ungefähr sowas:
    Code:
    CALL       FC    [#fcnr]
    
    bzw.
    
    CALL       #funktionszeiger
    Weil ich aus der C/C++-Welt komme kenne ich das ganze unter dem Namen Funktionszeiger. Nun macht man mit C und C++ aber leider Anwendungsprogrammierung was somit nicht allzuviel mit SPS-Programmierung zu tun hat. Dennoch habe ich für SCL schon gesehen, daß es möglich ist einem FC/FB Parameter vom Typ BLOCK_FC/BLOCK_FB mitzugeben, wobei ich annehme, daß man damit auch auf nix anderes hinaus will, als ich vorhabe.

    Mir ist schon klar, daß man das auch über unzählige Fallunterscheidungen lösen kann, nur geht es mir darum mein Programm kürzer und effizienter zu machen. Ziel ist es sowas ähnliches zu bauen wie eine Befehlsqueue, also ein veränderliches Array von Funktionsnummern bzw. Funktionszeigern, daß sequentiell durchgearbeitet wird.
    Mit Datenbausteinen gibt's ja auch was äquivalentes wie z.B.
    Code:
    AUF   DB   [LW 10]
    Vorab schonmal herzlichen Dank
    Gruß
    Thomas
    Zitieren Zitieren AWL: Dynamischer Aufruf von Funktionen (Funktionszeiger in AWL)  

  2. #2
    Registriert seit
    05.10.2005
    Beiträge
    2.373
    Danke
    321
    Erhielt 296 Danke für 266 Beiträge

    Standard

    Hallo,

    wie wäre es mit

    cc fb [mw10]

    oder

    uc fb [mw10]


    wobei vorher im MW10 die entsprechende Baustinnummer eingetragen wird

    Grüße Thomas

  3. #3
    Registriert seit
    30.08.2003
    Beiträge
    2.196
    Danke
    30
    Erhielt 258 Danke für 229 Beiträge

    Standard

    Hallo Thomas,

    alles schön und gut. Aber haste schon mal dran gedacht dass die Bausteinaufrufe dann in keiner Referenzliste mehr zu finden sind? Auch wenn x Aufrufe mehr Arbeit machen, übersichtlicher ist es allemal. Das Instandhaltungspersonal (wenn vorhanden) wirds dir danken. Was haste denn unterschiedliches anzuspringen?

    MfG
    André Räppel
    www.raeppel.de
    mit innovativen SPS-Tools schneller ans Ziel ....
    Zitieren Zitieren Aufrufe  

  4. #4
    Registriert seit
    05.10.2005
    Beiträge
    2.373
    Danke
    321
    Erhielt 296 Danke für 266 Beiträge

    Standard

    Hallo André,

    mir ist schon klar, das die Aufrufe nicht in der Ref. auftauchen.
    Ich gehöre aber auch zu dem erwähnten Instandhaltungspersonal (wenn vorhanden) und komme genauso zurecht wie mit Spagetticode wo ein Aufruf dem anderen folgt und bei bestimmten Bedingungen übersprungen wird.Wenn dann noch die Bausteinnummern pro entsprechendem Aufruf limitiert und vielleicht noch zu allem Überfluss dokumentiert sind, sollte es für niemanden Probleme geben.

    Grüße Thomas

  5. #5
    Registriert seit
    18.09.2006
    Beiträge
    31
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hi!

    Das ist exakt das, was ich gesucht hab!!!

    Danke Danke Danke Danke!!
    Hat mir sehr geholfen

    Mit freundlichem Gruß
    Thomas

  6. #6
    Registriert seit
    20.09.2006
    Beiträge
    12
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Idee

    Hallo André,

    der Einwand ist m.E. schon berechtigt.

    Ich habe mir bei inzidierter Adressierung oder
    anderen, nicht in der QVL auftauchenden Dingen
    (Statusmerker von Siemens-S5-Hantierungsbausteinen,
    die nur im DB1 als String auftauchen) angewöhnt,
    ein Dummy-Netzwerk mit Kommentaren in der Nähe der
    Sprungtabelle anzulegen, z.B.

    BEA // hier ist Schluss
    SPB FB 101 // ab hier nur für die QVL !
    SPB FB 102
    SPB FB 103
    SPB FB 104
    SPB FB 105

    @TOMI aus der WUNDER_baren C/C++ Welt:
    ... und vergiss nicht die Limitierung
    des Indexzeigers, das nimmt dir in der
    SPS nämlich kein Compiler oder Linker ab!

    Gruß U.
    (der mit dem großen Herz für die
    [oft gar nicht so armen]
    Instandhalter)
    Zitieren Zitieren Nur für sie ...  

  7. #7
    Registriert seit
    18.09.2006
    Beiträge
    31
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Cool

    Hi!
    Erstmal nochmal ganz herzlichen Dank für die Hinweise, hat mir sehr geholfen!

    Jetzt hab ich aber nochmal eine Frage, die, wie ich glaube, nicht so wirklich oft gefragt wird - wär auch nicht so schlimm, wenn da keiner eine Antwort drauf parat hätte:
    Step7 kann's teilweise auch - Funktionen und Funktionsbausteine im Run-Zustand in die CPU zu übertragen. (Ich denke da an meine 313C, da wars sogar möglich, den OB1 im Laufenden Betrieb abzuändern)

    Kennt jemand den Mechanismus, mit dem die S7 dazu gebracht wird, einen FC oder FB anzulegen und könnte man sowas auch Anwenderprogrammäßig verwenden? Vielleicht kennt ja hier jemand das Prinzip vom "dynamic loading" aus der Anwendungsprogrammierung, wo man Programmbibliotheken dynamisch an sein Programm anbinden kann (dlopen, dlsym...).
    Der Vorteil und Nutzen bei so einer Geschichte läge dann darin, daß man dem Nutzer z.B. einer Fertigungsstraße, die öfters mal umgerüstet werden muß (Möbelteile, Fenster und Türen bzw. Verpackungen für saisonabhängige Lebensmittel...), die Möglichkeit gäbe, eine bestimmte Funktionalität gegen eine Andere auszutauschen, ohne ihm gleich ein PG dort lassen zu müssen. (Für alle die's kennen, man hätte dann sowas wie eine CORBA-Architektur, wo man dann die einzelnen Module nach Bedarf "reinsteckt")

    Jaja, ich weiß schon was man sich da denkt, und wahrscheinlich geht's auch garnicht anders, als: "Leg doch alle FC's und FB's, die du jemals brauchst in der CPU ab und..."

    Gruß
    Thomas

  8. #8
    Registriert seit
    27.10.2005
    Ort
    Schwäbisch Gmünd
    Beiträge
    5.224
    Danke
    630
    Erhielt 955 Danke für 769 Beiträge

    Standard

    Ist im Prinzip mit geringem Aufwand machbar. Voraussetzung: Alle ausgetauschten FBs/FCs habe die gleiche Schnittstelle (sonst ist die SPS beleidigt) und jeweils die gleiche Bausteinnummer (sonst müsste der Aufruf nachgepflegt werden). Und die verschiedenen Varianten sind in verschiedenen Projekten bzw. Programmen abgelegt (ein Baustein ist im Programm eindeutig).
    Mit ACCON-S7-Backup/Restore http://www.deltalogic.de/software/s7...kuprestore.htm kann nun per Kommandozeile die gewünschte Variante in die SPS übertragen werden. Sinnvollerweise ist dazu die SPS vorher in Stop zu bringen (wenn es sich um mehr als einen Baustein handelt), damit die Bausteinkonsistenz gewahrt bleibt.
    Rainer Hönle
    DELTA LOGIC GmbH

    Ein Computer kann das menschliche Gehirn nicht ersetzen. Engstirnigkeit kann unmöglich simuliert werden. (Gerd W. Heyse)

  9. #9
    Registriert seit
    20.11.2004
    Ort
    Linz, OÖ
    Beiträge
    1.365
    Danke
    96
    Erhielt 177 Danke für 133 Beiträge

    Standard

    Zitat Zitat von thomass5 Beitrag anzeigen
    wie wäre es mit

    cc fb [mw10]

    oder

    uc fb [mw10]

    wobei vorher im MW10 die entsprechende Baustinnummer eingetragen wird
    Hmm, treiben wir das Speil jetzt noch weiter...............

    Wie funktioniert das ganze, wenn ich einen FC mit Parametern indiziert aufrufen möchte, also z.B.

    call fc [mw10]
    Parameter 1:= ....
    Parameter 2:= ....

    Nach sowas such ich nämlich schon seit 2 Jahren!

    mfg
    Maxl

  10. #10
    Registriert seit
    05.10.2005
    Beiträge
    2.373
    Danke
    321
    Erhielt 296 Danke für 266 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Maxl

    definier doch einfach z.B. ab Mw200 10Worte als schmiermerkerbereich, welche du vor dem Aufruf mit den entsprechenden Parametern versorgst und aus welchen du nach Beendigung des Bausteins die Rückgabewerte entsprechend entsorgst(Anzahl de Worte nach bedarf auch anders).Oder habe ich dich falsch verstanden, mit dem was du meintest?

    Thomas

Ähnliche Themen

  1. Funktionen in Funktionen aufrufen
    Von Baldaro im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 21.06.2009, 16:17
  2. Aufruf der Funktionen in OB1
    Von blume_mercan im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 16.01.2008, 18:59
  3. dynamischer db aufruf
    Von misconduct im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 24.11.2007, 22:42
  4. Dynamischer Pointer???
    Von klauserl im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 12.11.2006, 20:28
  5. dynamischer Global DB Step7 - S7-300 CPU 315 -2DP
    Von Anonymous im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 31.10.2005, 10:47

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •