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

Ergebnis 1 bis 8 von 8

Thema: Anfänger: aufruf von mehreren Bausteinen führt zur FehlfunktionHabs aller

  1. #1
    Registriert seit
    10.08.2012
    Beiträge
    6
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Abend,

    ich bin zwar schon länger angemeldet, hab bisher allerdings noch nicht viel mit Step7/TIA machen können. Doch in zukunft brauch ich das öfter mal auf Arbeit und dachte mir, so als Training könnte ich ich doch mal was Programmieren. Und damit diese Zeit vielleicht nicht einfach nur Übung ist sonder auch gleich was Sinnvolles bei raus kommt hab ich ich an die Erstellung von zwei Bausteinen gemacht:

    Betriebsstundenzähler mit zwei einstellbaren Servicemeldungen
    Störmelder mit zwei Delay-Zeiten (Start/Betrieb)

    Jeder Baustein für sich alleine im OB1 mit UC aufgerufen funktioniert im PLCSIM Tadellos. Aufruf klappt, Ausgaben klappen, alles gut *Freu-wie-a-schnitzel*

    Jetzt sollen die natürlich nicht alleine vor sich her dümpeln, die müssen ja irgendwann mal zusammen in einem großen Programm laufen und für meinetwegen >3 Antriebe die Stunden zählen und Störmeldungen abfragen.

    Also beide zusammen ins Projekt und beide im OB1 Aufgerufen. Doch Halt! Was ist nun Los?!

    Plötzlich spinnen beide total rum. Die internen Zähler und deren Ausgaben nehmen utopische Zahlen an und das gesamte Verhalten des Bausteins ist total bekloppt...

    Nur warum? Was mache ich Falsch??

    Habs mal angehangen.

    Wäre für jeden Tipp dankbar!

    Gruß
    Angehängte Dateien Angehängte Dateien
    Zitieren Zitieren Anfänger: aufruf von mehreren Bausteinen führt zur FehlfunktionHabs aller  

  2. #2
    Registriert seit
    12.12.2013
    Ort
    Kaiserslautern
    Beiträge
    1.358
    Danke
    393
    Erhielt 221 Danke für 175 Beiträge

    Standard

    Hallo,

    der uc ist ein unbedingte Aufruf. Er ruft den fc ohne Parameter auf.

    versuche es doch mal mit call fc.

    hast du eventuell doppelte Verwendungen von timer.?

    hab jetz kein tia griffbereit.

    bram
    Wenn es nicht auf STRAVA ist, ist es nicht passiert !!

  3. #3
    Registriert seit
    12.12.2013
    Ort
    Kaiserslautern
    Beiträge
    1.358
    Danke
    393
    Erhielt 221 Danke für 175 Beiträge

    Standard

    Ich sehe das du den FC3 Störmelder in ein FB aufgerufen hast mit UC , aber kein Instanzdatenbausteinaufruf dazu gemacht hast.
    Mach doch mal den Aufruf in OB1 mit CALL "Störmelder".

    Bram
    Wenn es nicht auf STRAVA ist, ist es nicht passiert !!

  4. #4
    Fr33man ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    10.08.2012
    Beiträge
    6
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hi,

    Programmieren an sich ist mir nicht Fremd, jedoch habe ich bisher noch nie so tiefgreifend mit Step7/TIA gearbeitet um diese grundlegenden Dinge mit zu bekommen die man für die Erstellung eines kompletten Programms braucht.
    Deshalb glaube ich, dass ich mir erst ein mal ein paar Sachen erklären lassen muss um meinen Wissensstand auf die Probe zu stellen.


    Meine Annahmen: (Bitte richtigstellen falls falsch)
    FC - Funktion - Ein Stück Software, vorwiegend bestehend aus:

    -von "außen" zu füllenden Variablen deren interner Merker nur lokal gelesen oder beschrieben werden kann,
    -nach "außen" führenden Variablen deren interer Merker nur lokal gelesen oder beschrieben werden kann,
    -interne, temporäre Variablen, die nach jedem Aufruf ihren Wert verlieren,
    -in dem auch mit globalen Merkern gearbeitet werden kann, jedoch - um universell zu bleiben - nicht sollte.
    -viele viele male im gesamten Programm aufgerufen werden kann da jeder Aufruf mit individuellen Daten geschieht.

    Dessen Variablen werden über dessen Menü "Bausteinschnittstelle" symbolisch benannt, klassifiziert(Bool, real, int,..) und kategorisiert (const, temp, in, out,..)
    Ein DB ist für einen FC nicht notwendig, da seine Daten ausschließlich über seine Schnittstellen laufen, die wiederum mit Merkern Verknüpft sind, die entweder dem Aufrufenden FB und dessen DB zugehören oder ein globaler Merker genutzt wird.


    Fragen zum FC:

    1. Kann man eine Schnittstellen-Variable erstellen, die nicht zwangsweise von außen verknüpft werden muss?
    • Bsp. Betriebsstundenzähler: Es könnten mehrere Serviceintervalle eingestellt werden, nach deren Ablauf ein FC-Ausgang gesetzt wird. Benötigt jetzt von den Vorhandenen zb. 3 Servicetimern nur einer. Kann man nicht einfach die anderen zwei nicht benötigten weg lassen? Sonst müsste man ja immer einen Merker erstellen und im FB der FC zuweisen, der dann sowieso ins nichts führt. (NULL-Merker für solche zwecke?!)


    2. Sollte man für Zählervariablen (zb. var := var +1; ) keine OUT- oder TMP- Variablen nehmen?

    • Mir kams so vor, als wenn das zu Problemen führt, wenn man eine Zählervariable als OUT festlegt




    FB - Funktionsbaustein:

    - besitzt einen eigenen Datenbaustein, in dem er seine gewonnen Werte speichern, "veröffentlichen", wieder lesen kann
    - ruft u.U. mehrere FC´s auf, füllte diese mit Daten, ließt daraus die Ergebnisse, speichert sie, usw.

    Fragen zum FB:
    1. Warum braucht man überhaupt einen DB? Er kann seine Werte doch auch in globalen Merkern schreiben. Ist ein DB auch nach einem STOP noch mit den alten Daten gefüllt ein Merker nicht?
    2. Wenn ein DB wichtig ist, warum kann man einen FB auch ohne aufrufen?




    Allgemein:
    So wie ich bisher mitbekommen habe, erfordert ein FB bei dem Aufruf mit CALL im OB1 einen zugehörigen DB. Ein FC, über CALL im OB1 aufgerufen hingegen listet mir automatisch unter diesem Aufruf eine Tabelle mit den programmierten Ein-/Ausgängen auf.
    Ich nehme an, dass letztes dem Aufruf des FC´s über einen FB gleich kommt. In FUP muss da ja dann auch jeder Programmierte Ein-/Ausgang des FC´s mit einem Merker zb. Beschaltet werden. In AWL sieht das dann halt entsprechend so aus.


    Gibt es bei der Erstellung solcher FB´s und FC´s irgendwelche Regelungen?
    Z.B: Steht FB33 immer für einen bestimmten Baustein? (vergleichbar mit: OB30 - 38 = Weckalarme)




    So, mehr fällt mir auf die schnell dazu nicht ein.
    Ich weiß; sind bestimmt einige Anfängerfragen dabei. Aber ihr/du musst sie ja nur mit "Ja, richtig" beantworten, wenns stimmt und sooo viel ist da jetzt hoffentlich nicht falsch

    Danke jedenfalls jetzt schon für deinen Einsatz


    Ich sehe das du den FC3 Störmelder in ein FB aufgerufen hast mit UC , aber kein Instanzdatenbausteinaufruf dazu gemacht hast.
    Mach doch mal den Aufruf in OB1 mit CALL "Störmelder".
    Um damit eine Erstellung eines DB´s zu bezwecken?
    Wenn ich
    Code:
    Call "Störmelder"
    in OB1 schreibe, dann erstellt er mir keinen DB sonder zeigt mir nur eine Tabelle an.



    btw. Hab gerade das Hilfesystem entdeckt. Da steht so einiges ja viel genauer beschrieben, als wie ich es von anderen Programmen gewohnt bin
    Muss ich wohl doch mal durchlesen.

    Aber für heute mach ich Schluss.. In Russland is schon spät

    Gn8

  5. #5
    Registriert seit
    11.03.2011
    Beiträge
    384
    Danke
    32
    Erhielt 80 Danke für 69 Beiträge

    Standard

    FC:
    Nein, alle Ein- , Aus- und Ein/Ausgänge (IN, OUT, INOUT) müssen verschaltet werden.
    Und die Ein-/Ausgänge sind nicht mit Merkern verbunden sondern liegen in einem internen Speicher (Stack).

    FB:
    1.
    Ja kann man, aber wenn Du einen FB 2x verwendest, dann greifst Du zweimal auf den gleichen Merker zu.
    Ein DB behält seinen Inhalt, solange Du die MMC nicht entfernst oder überschreibst.
    2.
    Kann man, sollte man nicht. Der Aufruf UC ist für Anwender nicht sinnvoll, ich kenne den nur als AWL Umsetzung von FUP oder KOP (und die packen auch vorher die Instanzen in die Adressregister)

  6. #6
    Fr33man ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    10.08.2012
    Beiträge
    6
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Moin,

    Mit Hilfe eurer Tipps hab ichs soweit am laufen.

    Jetzt gleich die nächste Frage:

    Ich hab einen OUT- .. heißt das Formalparameter? als Bool. Dort kann ich jetzt einen Merker setzen, der mir auch ordentlich beschrieben wird. Doch wie stelle ich es an, wenn ich nach diesem Ausgang noch eine Bitverknüpfung setzen will? (ein UND zb.) geht das gar nicht?

    Hab gedacht, vielleicht braucht man für sowas einen anderen Datentyp als Ausgang und bin auf den merkwürdigen Typ "AT" gestoßen. Was soll der? Wenn ich den setze, dann wirds wieder Bool, nur mit dem unterschied, das der Ausgang an sich in der FUP-Ansicht verschwindet und in der Bausteinschnittstelle hinter meiner Symbolik der Name der Symbolik in der liste davor mit "AT" angezeigt wird.

    Gruß

  7. #7
    Registriert seit
    11.03.2011
    Beiträge
    384
    Danke
    32
    Erhielt 80 Danke für 69 Beiträge

    Standard

    Zitat Zitat von Fr33man Beitrag anzeigen
    Hab gedacht, vielleicht braucht man für sowas einen anderen Datentyp als Ausgang und bin auf den merkwürdigen Typ "AT" gestoßen. Was soll der? Wenn ich den setze, dann wirds wieder Bool, nur mit dem unterschied, das der Ausgang an sich in der FUP-Ansicht verschwindet und in der Bausteinschnittstelle hinter meiner Symbolik der Name der Symbolik in der liste davor mit "AT" angezeigt wird.
    Mit AT kann man in SCL eine Zweitdefinition einer Variablen erstellen. Z.B. kannst Du ein Word definieren und mit AT zusätzlich als Array of Bool [1..16]
    So kannst Du auf sowohl auf das Wort als auch auf die einzelnen Bits zugreifen.

  8. #8
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.338
    Danke
    932
    Erhielt 3.333 Danke für 2.691 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Fr33man Beitrag anzeigen
    Ich hab einen OUT- .. heißt das Formalparameter? als Bool. Dort kann ich jetzt einen Merker setzen, der mir auch ordentlich beschrieben wird. Doch wie stelle ich es an, wenn ich nach diesem Ausgang noch eine Bitverknüpfung setzen will? (ein UND zb.) geht das gar nicht?
    Direkt am Baustein-Ausgang geht das nicht. Man muß mit der am BOOL-Ausgang angeschlossenen Variable eine separate Verknüpfung machen. (Für die Zwischenvariable kann man TEMP-Variablen nehmen.)

    Bei FB kann man das Zuweisen des Ausgangs auf eine Zwischenvariable weglassen (also Ausgang nicht beschalten) und bei der Verknüpfung direkt den FB-Instanz-Ausgang angeben: U "FB_Instanz_1".Outparameter, U #Timer_1.Q, ...

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

Ähnliche Themen

  1. Antworten: 18
    Letzter Beitrag: 07.12.2016, 09:11
  2. TIA Mehrfach Aufruf von Bausteinen (FB)
    Von pfeiffersepp im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 22.05.2014, 08:08
  3. AUFRUF !! Tausch aller 6ES7 151-1AA03/1AB02-0AB0
    Von josefheigl im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 13.11.2009, 15:38
  4. Aufruf von mehreren Instanzen eines FB's für SMS-Versand
    Von dietere im Forum Programmierstrategien
    Antworten: 2
    Letzter Beitrag: 13.11.2007, 23:11
  5. Anfänger braucht hilfe zur simulation
    Von MacDeath im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 13.03.2007, 14:27

Lesezeichen

Berechtigungen

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