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

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

Thema: Lokale Variablen werden nicht Beachtet/erkannt

  1. #1
    Registriert seit
    24.05.2011
    Beiträge
    8
    Danke
    5
    Erhielt 0 Danke für 0 Beiträge

    Frage


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo

    Ich bin neu Einsteiger bei Twincat und habe da ein Problem
    Und zwar schreibe ich ein Programm für eine Sortieranlage
    den Ablauf zu programmieren war kein problem
    Ich habe im Strukturiertem text programmiert und für verschiedene abläufe (verwahren der einzelnen Kolben) jeweils einzelne funktionen erstellt
    so nun wollte ich in jeder funktion mit lokalen Variablen(die einzigen lokalen im ganzen prg) und einem lokalen timer (welcher auch nicht erkannt wird) eine zeitabfrage erstellen
    zeitabfrage= "kolben start" dann soll ein timer starten der nach 3 sekunden eine fehler meldung raus gibt wenn der zum kolben gehörige sensor nicht schaltet
    und wenn ich jetzt das programm starte und im PLC control mir die timer anschaue stehen da nur ???? (die timer/variablen haben eine lokale zuordnung bekommen) und da ich im netz und in fachbüchern keine lösung gefunden habe stehen nun in meinem gesicht nur noch ?
    Ich hoffe ihr könnt mir dabei helfen
    MfG Markus
    Zitieren Zitieren Lokale Variablen werden nicht Beachtet/erkannt  

  2. #2
    Registriert seit
    25.11.2010
    Ort
    OWL
    Beiträge
    749
    Danke
    27
    Erhielt 164 Danke für 142 Beiträge

    Standard

    Funktionen können in CoDeSys/TwinCat nur temporäre Variablen haben, die bei jedem Aufruf neu angelegt und initialisiert werden. Wenn Du Variablen brauchst, die ihre Werte bis zum folgenden Aufruf behalten, musst Du Funktionsbausteine nehmen.

  3. Folgender Benutzer sagt Danke zu StructuredTrash für den nützlichen Beitrag:

    Kira77 (25.05.2011)

  4. #3
    Registriert seit
    15.02.2011
    Ort
    Stromness, Scotland, UK
    Beiträge
    339
    Danke
    25
    Erhielt 34 Danke für 33 Beiträge

    Standard

    • Läuft das Programm?
    • Wenn du in einem FB drin bist, musst du diese Fenster schliessen und erneut eine INstanz zu öffnen

    Wenn nichts hilft, mach doch mal einen PrintScreen, dann können wir besser helfen!

  5. #4
    Registriert seit
    17.03.2011
    Ort
    im Wald
    Beiträge
    284
    Danke
    11
    Erhielt 36 Danke für 35 Beiträge

    Standard

    Hallo,

    du hast zwar schon den Ablauf in ST programmiert.

    Aber das hört sich ja nach einer Ablaufsteuerung an, also warum nicht die Möglichkeit der Programmierung in SFC also Ablaufsprache. Ich habe damit sehr gute Erfahrungen gemacht. Die lokalen Variablen ergeben sich von selbst und Störabfragen sind recht einfach zu realisieren.

    Gruß

  6. #5
    Kira77 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    24.05.2011
    Beiträge
    8
    Danke
    5
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hey
    Ja das programm an sich läuft (der ablauf) nur die zeitüberwachung überhaupt nicht

    So sieht meine funktion aus

    b_g_HozZuWt :=TRUE;
    b_g_HozZuGrst :=FALSE;
    b_g_ZwpAusfahren :=TRUE;
    b_g_ZwpEinfahren :=FALSE;
    IF (b_g_HozZuWt AND NOT b_g_HozBeiWt1) THEN;
    b_l_Zeitkontrolle:=TRUE;
    END_IF
    IF (b_g_HozZuWt AND b_g_HozBeiWt1 OR b_g_Resetet) THEN;
    b_l_Zeitkontrolle:=FALSE;
    END_IF
    Timer;
    Timer.IN:=b_l_Zeitkontrolle;
    Timer.PT:=t#3s;
    b_g_Nothalt := Timer.Q;

    b_g_= b=BOOL g=Global
    b_l_= b=BOOL l=Lokal
    wenn ich mein programm starte kommt auch KEINE fehlermeldung

    und beim einlogen steht halter hinter
    b_g_ZwpAusfahren entweder true oder false jenachdem am welchem pkt des prg ich gerade bin
    und bei
    b_l_Zeitkontrolle stehen nur ????
    und ich weiß nicht warum

    Und an Voxe das ganze prg muss im st geschrieben seien das ist Vorlage aber danke für den tipp

  7. #6
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Ich kann nur ein paar Tips geben, ich bin mehr in der Siemens-Welt zu Hause.
    Prinzipiell setzt du "b_l_Zeitkontrolle" falsch ein. Wie schon oben geschrieben (#2), ist eine lokale Variable bei jedem Aufruf erst einmal undefiniert. Jeder Aufruf bedeutet, immer, wenn das Programm den Baustein ausführt, bei einem normalen Bausteinaufruf also jeden Zyklus. Nun stehen beide Zuweisungen für "b_l_Zeitkontrolle" in IF-Anweisungen, also gibt es unbestimmte Zustände, das darf nicht sein. Entweder, du machst das so, das immer wenn die erste IF-Anweisung nicht zutrifft, "b_l_Zeitkontrolle" False zugewiesen wird oder zu nimmst eine globale Variable, die du ja als INOUT übergeben kannst oder, wie schon vorgeschlagen, du nutzt einen Funktionsbaustein, der dann die lokalen Daten immer im "Gedächtnis" behält. Zum ersten Test, für nur einen Aufruf deiner Funktion würde ich "b_l_Zeitkontrolle" mal zu einer globalen Variablen machen und wenn dann die Funktion da ist, dann o.g. Vorschlägen umsetzen.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  8. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    Kira77 (25.05.2011)

  9. #7
    Kira77 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    24.05.2011
    Beiträge
    8
    Danke
    5
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke für die Hinweise
    Ich habe jetzt meine funktion in ein Funktionsblock übertragen
    nun wollte ich den funktionsblock so wie zuvor die Funktion einfügen
    Code:
    IF (b_g_VtkOben) THEN;
    HozEhWt1();
    END_IF
    so dann mein funktionsbaustein
    Code:
    b_g_HozZuWt :=TRUE;
    b_g_HozZuGrst :=FALSE;
    b_g_ZwpAusfahren :=TRUE;
    b_g_ZwpEinfahren :=FALSE;
    IF (b_g_HozZuWt AND NOT b_g_HozBeiWt1) THEN;
    b_l_Zeitkontrolle:=TRUE;
    END_IF
    IF (b_g_HozZuWt AND b_g_HozBeiWt1 OR b_g_Resetet) THEN;
    b_l_Zeitkontrolle:=FALSE;
    END_IF
    Timer;
    Timer.IN:=b_l_Zeitkontrolle;
    Timer.PT:=t#3s;
    b_g_Nothalt := Timer.Q;
    Nun sagt mir Twincat PLC control das dort ein fehler vorliegt und HozEhWt1 keine funktion ist
    Habe einige bücher durch geblättert und finde nicht den passenden hinweis wie man korrekt den Funktionsblock mit einbaut
    Geändert von Kira77 (25.05.2011 um 10:15 Uhr)

  10. #8
    Registriert seit
    25.11.2010
    Ort
    OWL
    Beiträge
    749
    Danke
    27
    Erhielt 164 Danke für 142 Beiträge

    Standard

    Zitat Zitat von Kira77 Beitrag anzeigen
    Ich bin neu Einsteiger bei Twincat und habe da ein Problem
    Zitat Zitat von Kira77 Beitrag anzeigen
    Nun sagt mir der simatic manager das dort ein fehler vorliegt und HozEhWt1 keine funktion ist
    Ja, was denn nun? TwinCat oder S7?

    Für den ersten Fall: Du musst in dem Programm, das den FB aufrufen soll, eine Instanz des FB's als Variable deklarieren, z. B. so:
    Code:
    (* Deklaration *)
    VAR
       MyHozEhWt1:HozEhWt1;
    END_VAR
     
    (* und der Aufruf im Programm *) 
    MyHozEhWt1();

  11. Folgender Benutzer sagt Danke zu StructuredTrash für den nützlichen Beitrag:

    Kira77 (25.05.2011)

  12. #9
    Kira77 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    24.05.2011
    Beiträge
    8
    Danke
    5
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von StructuredTrash Beitrag anzeigen
    Ja, was denn nun? TwinCat oder S7?
    Habe leider die begriffe etwas durcheinander geschmissen befinde mich nach wie vor bei twincat

    das mit dem fb einfügen hat jetzt auch super geklappt nur zeigt er immer noch nur ????

    und der einzige grund warum ich nicht hin gehe undGlobale abfrage ist ja der das ich mehrere abfragen in meinem program habe und somit ja sehr viele verschiedene Globale timer bräuchte und ich wollte halt gerne das jede funkion/funktionsbaustein sein eigenen timer intern(lokal) bekommt und frage mich langsam ob das so wie ich es mir vorstelle überhaupt umsetzbar ist

  13. #10
    Registriert seit
    15.02.2011
    Ort
    Stromness, Scotland, UK
    Beiträge
    339
    Danke
    25
    Erhielt 34 Danke für 33 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Im Anhang findest du ein kleines Programm, welches 3 Funktionsblöcke aufruft, in welchem ein Timer (TON) ist...

    Es war mal für eine kleine Einführungsschulung gedacht, vielleicht hilft es dir auch!
    Angehängte Dateien Angehängte Dateien

Ähnliche Themen

  1. S7 MPI LAN Master werden nicht erkannt
    Von mariob im Forum Feldbusse
    Antworten: 0
    Letzter Beitrag: 24.05.2009, 13:54
  2. lokale Variablen auf Client
    Von derwestermann im Forum HMI
    Antworten: 0
    Letzter Beitrag: 06.03.2009, 13:47
  3. Lokale Variablen
    Von Mujo im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 23.08.2007, 18:53
  4. Warum muss der lokale Port angegeben werden?
    Von schatte im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 22.05.2007, 13:00
  5. Lokale Variablen in SCL
    Von Climber im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 05.02.2007, 11:57

Lesezeichen

Berechtigungen

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