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

Ergebnis 1 bis 10 von 10

Thema: Var_out eines FCs-Was zum schmunzeln- oder doch zu doof?

  1. #1
    Registriert seit
    28.06.2010
    Beiträge
    7
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Moin,

    ich habe ja nun in den letzten 15 Jahren schon allerlei Unglaubliches erlebt mit verschiedensten Automatisierungskomponenten,
    aber das ist schon ein besonderes Schmankerl, finde ich:

    Im aufgerufenen FC steht als erstes BEA, um diese Fehlerquelle auszuschließen.

    Code:
          CALL  "Sollpos_Zufuehr"
           i_berechne             :=#t_Pos_berechnen
           i_ist_Pos_Inkr         :="DB_Zufuehrband".PE.Ist_Position
           i_Taschen_pro_U_Zufuehr:="DB_Einstellungen".Zufuehrband.Taschen_pro_Umdrehung
           i_Fenstergroesse       :=#t_Fenster
           o_Sollpos              :="DB_Zufuehrband".PA.Soll_Position (Dint)
    Wenn ich das so schreibe, durchläuft "DB_Zufuehrband".PA.Soll_Position den gesamten Wertebereich, sobald ein weiterer Antrieb läuft,
    von dem der Start dieses Antriebs ("Zufuehrband") abhängt.

    "DB_Zufuehrband".PA.Soll_Position wird am Ende jeden Zykluses (wie sagt man das?)mit SFC 15 an den Umrichter übertragen.
    Ansonsten keine Verwendungsstellen im Programm, die irgendeine Rolle spielen könnte, was hier aber auch egal ist, wie sich gleich zeigen wird:

    Also schreibe ich wohl irgendwo die Istposition des anderen Antriebs nach "DB_Zufuehrband".PA.Soll_Position, sollte man denken, ist aber nicht so:
    wenn ich jetzt nämlich an den FC irgendein MD hänge und darunter L "DB_Zufuehrband".PA.Soll_Position schreibe, bleibt der Wert von
    "DB_Zufuehrband".PA.Soll_Position konstant!

    Code:
    CALL  "Sollpos_Zufuehr"
           i_berechne             :=#t_Pos_berechnen
           i_ist_Pos_Inkr         :="DB_Zufuehrband".PE.Ist_Position
           i_Taschen_pro_U_Zufuehr:="DB_Einstellungen".Zufuehrband.Taschen_pro_Umdrehung
           i_Fenstergroesse       :=#t_Fenster
           o_Sollpos              :=MD110 //jetzt verändert sich der Wert nicht mehr
    
    L    "DB_Zufuehrband".PA.Soll_Position //..und dieser auch nicht mehr ;-)
    .. auch wenn der andere Antrieb läuft.

    Inswischen schon urgelöscht, Speicherkarte und CPU getauscht, gespeichert mit Reorganisation- mir fällt nix mehr ein-

    Euch?
    Geändert von mausi17 (28.10.2013 um 17:53 Uhr)
    Zitieren Zitieren Var_out eines FCs-Was zum schmunzeln- oder doch zu doof?  

  2. #2
    mausi17 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    28.06.2010
    Beiträge
    7
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Doppelpost, ich weiß nicht wie man das löscht
    Geändert von mausi17 (28.10.2013 um 17:26 Uhr)
    Zitieren Zitieren Doppelpost  

  3. #3
    Registriert seit
    15.01.2005
    Ort
    In der Mitte zwischen Bayreuth/Weiden
    Beiträge
    6.725
    Danke
    314
    Erhielt 1.519 Danke für 1.282 Beiträge

    Standard

    Scheinbar hast du nach 15 Jahren immer noch nicht das Speicherprinzip von TEMP-Variablen bzw. FCs verstanden, sonst wärst du auch nicht so überrascht.
    Der Wert einer unbeschriebenen OUT-Variable, wenn Sie mit einem Vollqualifizierten DB Zugriff versorg ist, ist reiner Zufall.

    Hier ein wenig Lesestoff:
    http://support.automation.siemens.com/WW/view/de/189227

    Insofern ist das weder verblüffend noch überraschend, noch ein Fehler von Siemens.

    Mfg
    Manuel
    Warum denn einfach, wenn man auch Siemens einsetzen kann!

    Wer die grundlegenden Freiheiten aufgibt, um vorübergehend ein wenig Sicherheit zu bekommen, verdient weder Freiheit noch Sicherheit (B. Franklin).

  4. #4
    mausi17 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    28.06.2010
    Beiträge
    7
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Naja, das sehe ich doch anders,
    oder wie erklärst Du Dir oder mir, dass das Phänomen nicht mit dem MD auftritt?

    Außerdem ist eine out-variable keine temp-variable

  5. #5
    mausi17 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    28.06.2010
    Beiträge
    7
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    OK Du hast Recht, so steht das da-

    seltsam, dass mir das vorher noch nie untergekommen ist

    naja, dann Danke !

  6. #6
    Registriert seit
    24.05.2006
    Beiträge
    234
    Danke
    14
    Erhielt 77 Danke für 57 Beiträge

    Standard

    Da brechen wir das Ganze doch mal auf ein einfacheres Projekt und schon sieht man wunderbar, dass da eben doch Lokalvariablen im Einsatz sind:
    OB1:
    Code:
          L     2
          T     "Daten".Hinein_FC1
    
          L     5
          T     "Daten".Hinein_FC2
    
          CALL  "EinFC"
           Hinein:="Daten".Hinein_FC1
           Hinaus:="Daten".Hinaus_FC1
    
          CALL  "NochnFC"
           Hinein:="Daten".Hinein_FC2
           Hinaus:="Daten".Hinaus_FC2
    
          CALL  "NochnFC"
           Hinein:="Daten".Hinein_FC2
           Hinaus:=MD0
    FC1:
    Code:
          L     #Hinein
          +     L#1
          T     #Hinaus
          BEA
    (mit Hinein und Hinaus als DINTs)

    FC2:
    Code:
          BEA
    (mit Hinein und Hinaus als DINTs)

    Soweit der Code, den dir der Simatic Manager anzeigt. Schauen wir uns aber mal die Befehle an, die die CPU zur Ausführung erhält:
    OB1:
    Code:
          L     2
          T     DB1.DBD    0
          L     5
          T     DB1.DBD    8
          Call
          BLD   1
          =     L     20.0
          AUF   DB     1
          L     DBD    0      <--- Dies ist der IN Parameter
          T     LD    21      <--- Übergabe via Lokaldaten (also Temp)
          UC    FC     1     <--- Aufruf FC1 mit den IN und OUT Parameter über die folgenden Pointer
                P#L 21.0
                P#L 25.0
          L     LD    25      <--- Und hier kommt das Ergebnis raus (Lokaldaten!)
          AUF   DB     1
          T     DBD    4     <--- und wird ins DBD geschrieben
          BLD   2
          End Call
          Call
          BLD   1
          =     L     20.0
          AUF   DB     1
          L     DBD    8
          T     LD    21
          UC    FC     2     <--- Aufruf FC2 mit den IN und OUT Parameter über die folgenden Pointer
                P#L 21.0
                P#L 25.0
          L     LD    25      <--- Und hier kommt das Ergebnis raus (Lokaldaten!)
          AUF   DB     1
          T     DBD   12     <--- und wird ins DBD geschrieben
          BLD   2
          End Call
          Call
          BLD   1
          =     L     20.0
          AUF   DB     1
          L     DBD    8
          T     LD    21
          UC    FC     2     <--- Aufruf FC2 mit den IN und OUT Parameter über die folgenden Pointer
                P#L 21.0
                P#M 0.0     <--- aber Merker werden direkt übergeben, nicht via Temp!
          BLD   2
          End Call
    Da in FC2 keine Zuweisung erfolgt, bleibt LD25 so stehen, wie es durch FC1 gesetzt wurde. Da aber in FC2 nichts passiert bleibt MD0 so wie es war.

    Ist doch alles ganz logisch, oder?

    Grüße, hovonlo

  7. Folgender Benutzer sagt Danke zu hovonlo für den nützlichen Beitrag:

    mausi17 (28.10.2013)

  8. #7
    mausi17 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    28.06.2010
    Beiträge
    7
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Jo, wenn man's so sieht,
    bzw. sich die Mühe macht, das so sehen zu können

    Wie machst Du das? Ich hab mir jetzt erst 'ne SCL Quelle gemalt, in die CPU/Simu übertragen und dann das ganze online
    mit 'nem Projekt, dem die Quelle/der FC nicht bekannt war geöffnet- ganz schön umständlich- geht das einfacher?

    Naja, so oft braucht man das ja nicht- ich bin immer noch am grübeln, warum mir das noch nie passiert ist-
    wahrscheinlich, weil meistens brav immer alles zuweise, ohne bedingte Funktionsabbrüche-keine Ahnung..

    Ist wie's ist, allerbesten Dank auf jeden Fall

    MfG

    mausi17

  9. #8
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.163
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Das "seltsame" Verhalten der FC-OUT ist auch in der Step7-Hilfe zu AWL dokumentiert.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  10. #9
    Registriert seit
    24.05.2006
    Beiträge
    234
    Danke
    14
    Erhielt 77 Danke für 57 Beiträge

    Standard

    Man kann auch die Ansicht im Simtaic Manager umschalten, ich habe aber vergessen wie das geht.
    Ich erzeuge einfach ein WLD-File und kopiere dann den aufrufenden Baustein (also nicht die FCs!) in das WLD. Öffnet man dann den aufrufenden Baustein aus dem WLD heraus, so gibt's die obige Ansicht. Sobald aber die aufgerufenen Bausteine mit im WLD sind, kennt der Simatic Manager die Schnittstelle dieser Bausteine und stellt wieder das übliche Call-Makro dar.

  11. #10
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.745
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich weis nicht wie das Umschalten der Ansicht im Simatic Manager funktionieren soll? Ich kenns nur wenn man die Bausteine aus dem Projekt löscht, auch alle die per Call aufgerufen werden, und dann nur den einen von der SPS lädt, dann sieht mans so.

    Du kannst aber auch meine Toolbox verwenden: S7ProjectToolbox da kannst du die Calls betrachten wie Sie wirklich aussehen!
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

Ähnliche Themen

  1. Antworten: 10
    Letzter Beitrag: 19.01.2011, 17:08
  2. Tricky oder zu doof
    Von paulo78 im Forum Programmierstrategien
    Antworten: 16
    Letzter Beitrag: 01.03.2010, 16:31
  3. Antworten: 13
    Letzter Beitrag: 24.10.2008, 08:41
  4. Fehler durch S7 oder bin ich wieder zu doof?
    Von Tigerkroete im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 17.08.2006, 16:21
  5. Hart is doch 'n Begriff , oder?
    Von Anonymous im Forum Feldbusse
    Antworten: 4
    Letzter Beitrag: 02.05.2004, 14:55

Lesezeichen

Berechtigungen

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