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

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

Thema: Variablenkonflikt im TwinCat PLC ?!

  1. #1
    Registriert seit
    06.11.2011
    Beiträge
    17
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Zusammen,

    Ich habe mir ein kleines SPS Prokjekt gebastelt und beim Test des Programms treten Fehler auf, die ich mir nicht erklären kann. Vielleicht kann jemand von euch auf die Schnelle herrausfinden wo das Problem liegt..meine Vermutung ist, das die Variablen sich gegenseitig irgendwo blockieren...

    Zur Funktion: Das Programm hat zwei Modi (Modus1 und Modus Zwei) in der jeweils die Ausgänge (verknüpft mit den globalen Variablen) eingestellt werden sollen. Zudem können in beiden Modi's die Funktion Automatik oder Manuell ausgewählt werden. Im Automatikmodus wir sowohl in Mod1 wie auch im Mod zwei ein Impuls erzeugt, der dann den Ausgang schaltet..nach einer gewissen Zeit erfolgt dann der zweite Ausgang usw. Dies funktioniert auch so, wie ich mir das vorstelle!
    Das gleiche passiert im Modus2, nur das dort durch betätigen der Button_Manuell die Kanäle einzeln geschaltet werden können.

    Mein Problem: Beim Start des Programms sollte das Programm im Modus1 starten (alle Kanäle MÜSSEN TRUE sein. sind sie aber nicht) Im manuell betrieb dann, werden beim betätigen der Manuell_Buttons die Kanäle nicht geschalten obwohl der Impuls kommt. Automatikmodus läuft einwandfrei.

    Mein Programmierstil ist nicht der beste, es geht bestimmt anders besser, aber es funktioniert eigentlich. Ich hoffe das mir da jemand weiterhelfen kann. Das Programm befindet sich im Anhang. Wenn was zu der Funktion nicht klar ist, einfach kurz posten. Danke
    Angehängte Dateien Angehängte Dateien
    Zitieren Zitieren Variablenkonflikt im TwinCat PLC ?!  

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

    Standard

    Unbenannt.JPG
    Du hast den Fehler schon selbet gefunden. Du schreibst mehrfach auf die gleichen Variablen, diese haben dann den Wert des letzten Bausteins. Du kannst auf dem Bild die Zutände der Bausteinausgänge ansehen.

  3. #3
    Hans_der_Kann`s ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    06.11.2011
    Beiträge
    17
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Es ist zum verzweifeln...ich hab jetzt alle meine Variablen in den FBs umbenannt...aber es geht immer noch nicht. Die Speicherwirkung der Variablen kann ich doch mit meiner IF..ELSE Bedingung umgehen...sie sollten also wieder zurückfallen wenn die Bedingung nicht erfüllt ist. Also alle Standardmäßig TRUE. Ich komm einfach nicht dahinter. Vielleicht kann mir jemand von euch einen Lösungsansatz geben. Oder muss ich es wohlmöglich programmiertechnisch komplett anders lösen?

  4. #4
    Registriert seit
    25.11.2010
    Ort
    OWL
    Beiträge
    752
    Danke
    27
    Erhielt 165 Danke für 143 Beiträge

    Standard

    Du schreibst nach jedem Bausteinaufruf die Outputs des FB's auf die globalen HW-Ausgänge. Der letzte Aufruf im MAIN ist der von LED_TEST_AUTO_MOD1, die HW-Ausgänge erhalten also immer die Werte der OUTPUT-Variablen dieses FB's. In diesem FB steht
    Code:
    IF( PlatGrundpos AND Button_Automatik  AND NOT Button_Mod2)
    
    THEN
    .....
    END_IF;
    Wenn die Bedingung nicht erfüllt ist, bleiben die OUTPUT-Variablen des FB's unverändert auf dem Wert FALSE, mit dem sie beim Programmstart automatisch initialisiert werden.
    Du darfst die OUTPUT-Variablen der FB's im MAIN nicht 1:1 auf die HW-Ausgänge schreiben, sondern nur unter der im jeweiligen FB formulierten Bedingung.

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

    Standard

    In TwinCAT kannst du das Programm in Einzelschritten abarbeiten lassen. Mach das mal, und schau genau hin, was mit deinen globalen Variablen passiert!

    Hier der entsprechende Artikel aus dem InfoSys:
    http://infosys.beckhoff.com/index.ph...01.htm&id=8015
    Zitieren Zitieren Einzelschritte anzeigen  

  6. Folgender Benutzer sagt Danke zu gloeru für den nützlichen Beitrag:

    StructuredTrash (26.11.2011)

  7. #6
    Registriert seit
    25.11.2010
    Ort
    OWL
    Beiträge
    752
    Danke
    27
    Erhielt 165 Danke für 143 Beiträge

    Standard

    @gloeru
    Gute Idee, um die Problematik zu verdeutlichen.

  8. #7
    Hans_der_Kann`s ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    06.11.2011
    Beiträge
    17
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    zufriedenstellenden Ergebnis gekommen.
    @StructuredTrash
    Du schreibst nach jedem Bausteinaufruf die Outputs des FB's auf die globalen HW-Ausgänge. Der letzte Aufruf im MAIN ist der von LED_TEST_AUTO_MOD1, die HW-Ausgänge erhalten also immer die Werte der OUTPUT-Variablen dieses FB's.
    Jepp, das hab ich dann gemerkt wo ich einfach mal die Ini der FBs im Main vertauscht habe..plötzlich gingen die AUTO_TESTs nicht mehr.
    Du darfst die OUTPUT-Variablen der FB's im MAIN nicht 1:1 auf die HW-Ausgänge schreiben, sondern nur unter der im jeweiligen FB formulierten Bedingung.
    Habe das jetzt so geändert das die globalen Variablen im FB gesetzt werden..funktioniert soweit..und ist jetzt auch übersichtlicher, und ich muss die Variablen nicht ins Main verknüpfen

    Trotz der hilfreichen Beschreibung bin ich noch nicht auf den Trichter gekommen wie ich mein Prog umschreiben muss. Was mir noch nicht ganz einleuchtet ist die Abarbeitung des Progs. wie geht das genau vonstatten?
    Hab auch schon versucht mit Hilfe einer SWITCH..CASE die FBs nach und nach abarbeiten zu lassen...das geht teilweise..krieg aber Probleme mit meinen IF..ELSE Bedingungen.
    Mir Hilft jetzt wahrscheinlich nur noch ein Codebeispiel in dem ich seh wo mein Fehler liegt und wie mans umändern kann.
    @gloeru
    Danke für den Tipp...aber bist du dir sicher das der Link stimmt? Bringt mich hier auf
    Control unit cycle time (TNcyc)

  9. #8
    Hans_der_Kann`s ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    06.11.2011
    Beiträge
    17
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Oh...da hats mir ein paar Zeilen abgeschnitten...
    Bin leider zu keinem zufiedenstellenden Ergebnis gekommen...

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

    Standard

    Ups, der Link ist natürleich falsch, hier der Richtige: http://infosys.beckhoff.com/index.ph...g.htm&id=13307

    Du hast die Abarbeitung des Programms noch nicht begriffen!
    Grundsätzlich wird im MAIN von oben nach unten alles abgearbeitet und erst ganz am Schluss die Signale auf die Hardware gelegt. Zuerst werden noch die Eingänge eingelesen. Während der Abarbeitung werden KEINE Ausgänge gesetzt.

    Du schreibst jetzt mit dem 1. FB auf deine globale Variable (z.B: TRUE)
    Danach schreibt der 2. Baustein ein FALSE auf genau die gleiche Variable.
    etc FB3, FB 4...
    Der letzte FB schriebt ein TRUE => Der Hardware-Ausgang wird TRUE.

    Weiter spielt es keine Rolle was du im Baustein machst, der Wert des Baustein-Ausgangs ist in der Variabeldeklaration definiert. Also jeder aufgerufene Baustein gibt entweder False oder True zurück, egal was du innerhalb des Bausteins machst!

  11. #10
    Registriert seit
    25.11.2010
    Ort
    OWL
    Beiträge
    752
    Danke
    27
    Erhielt 165 Danke für 143 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Hans_der_Kann`s Beitrag anzeigen
    Trotz der hilfreichen Beschreibung bin ich noch nicht auf den Trichter gekommen wie ich mein Prog umschreiben muss. Was mir noch nicht ganz einleuchtet ist die Abarbeitung des Progs. wie geht das genau vonstatten?
    Hab auch schon versucht mit Hilfe einer SWITCH..CASE die FBs nach und nach abarbeiten zu lassen...das geht teilweise..krieg aber Probleme mit meinen IF..ELSE Bedingungen.
    Mir Hilft jetzt wahrscheinlich nur noch ein Codebeispiel in dem ich seh wo mein Fehler liegt und wie mans umändern kann.
    Als Du das Programm geschrieben hast, bist Du offenbar von falschen Vorstellungen bezüglich der Abarbeitung ausgegangen. Da stellt sich die Frage, ob es überhaupt noch zu retten ist. Ein Versuch könnte etwa so aussehen:
    Code:
    IF Button_Start OR (* hier wohl noch weitere Bedingungen wie Start der SPS, Moduswechsel *)
    THEN
       MODUS(...);
    ELSE
       IF Button_Mod2
       THEN
          IF Button_Automatik
          THEN
             LED_TEST_AUTO_MOD2(...);
          ELSE
             LED_TEST_MANUELL_MOD2(...);
          END_IF;
       ELSE
          IF Button_Automatik
          THEN
             LED_TEST_AUTOMATIK_MOD1(...);
          ELSE
             LED_TEST_MANUELL_MOD1(...);
          END_IF;
       END_IF;
    END_IF;
    Problematisch bleiben dabei allerdings die ELSE-Zweige in den LED_TEST_AUTO-FB's, in denen die Hilfsvariablen dieser FB's zurückgesetzt werden. Das musst Du irgendwie anders lösen, z. B. durch einen Init-Schritt in der Ablaufkette. Ausserdem können auch die bedingten Aufrufe der TP-Bausteine zum Stolperstein werden. Die solltest Du besser im MAIN zyklisch aufrufen und ihre Ausgänge als INPUT-Variablen an die FB's übergeben.

Ähnliche Themen

  1. TwinCAT stürzt ab sobald TwinCAT System gestartet wird
    Von HK09 im Forum CODESYS und IEC61131
    Antworten: 2
    Letzter Beitrag: 23.09.2010, 10:02
  2. C++ TwinCat PLC
    Von hellrazz im Forum HMI
    Antworten: 2
    Letzter Beitrag: 03.05.2010, 11:18
  3. TwinCat
    Von herbert1 im Forum CODESYS und IEC61131
    Antworten: 3
    Letzter Beitrag: 10.03.2010, 14:46
  4. Antworten: 4
    Letzter Beitrag: 03.11.2009, 14:05
  5. Twincat ads
    Von Simo im Forum CODESYS und IEC61131
    Antworten: 6
    Letzter Beitrag: 23.03.2009, 17:49

Lesezeichen

Berechtigungen

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