Welcome to our new forum
All users of the legacy CODESYS Forums, please create a new account at account.codesys.com. But make sure to use the same E-Mail address as in the old Forum. Then your posts will be matched. Close

Lichtsteuerung über Merker und Taster

d.t.m
2010-02-25
2010-08-15
<< < 1 2 3 > >> (Page 2 of 3)
  • Speicherzelle - 2010-05-19

    d.t.m hat geschrieben:
    Hallo,
    ich habe folgendes Problem:
    Ich schalte Lichtquellen über Relais. Das An-/Ausschalten geschieht entweder per Taster oder über eine Automatisierungssoftware anhand von Merkern.
    Die Relaisspule benötigt eine konstante Spannungsversorgung - ist die Spannung weg, geht das Licht aus. Soweit klar.
    Schalte ich über einen Taster das Licht an ( -> ), brennt das Licht.
    Möchte ich das Licht über den Merker ausschalten geht das nicht, da am Tasterbaustein (welcher auch immer) ja immer noch die (steigende?) Flanke von anliegt.
    Ich habe über Toggle, Trigger, Fb_Stromstoss (und viele mehr) alles probiert, aber da ich keinen passenden Thread zu dem Thema finde scheint das Problem definitiv ein Verständnisproblem meinerseits zu sein.
    Kann mir bitte jemand erklären wie das funktioniert?
    Ich habe auch versucht auf den Ausgang des Funktionsblocks direkt einen Merker zu legen
    (also Lampe1 )
    und dem Merker den entsprechenden Ausgang (DO_1------%QX4.0) zugewiesen. Es klappt so nicht

    Hallo dtm,

    gebe Dir mal ein Proggi mit einer Funktion wo Du über einen Tastereingang den Ausgang ein.-bzw ausschalten kannst.

    Du hast zusätzlich die Möglichkeit den Aus Retain zu setzen.Desweitern

    gibt es ein Reseteingang wo Du im Bedarfsfall den Ausgang sofort zurücksetzen kannst.

    Schau es Dir mal an ob es für Dich intresannt ist.

    mfg

    speicherzelle

    demo_eintasterbetrieb.zip [510.04 KiB]

     
  • d.t.m - 2010-07-19

    Hallo Speicherzelle,

    vielen dank für deinen Beitrag - sorry, war sehr beschäftigt und überhaupt nicht an der SPS zugange und auch nicht im Forum bis heute. Ich lade mir dein Prog jetzt mal runter und teste mal.. melde mich!

    Grüße
    dtm

    edit: ich kann die Datei nicht mehr runterladen. Wärst Du so nett sie nochmal anzuhängen?

     
  • d.t.m - 2010-07-19

    @nym 3x1,5 an deiner Lösung wäre ich auch sehr interessiert..
    Grüße
    dtm

     
  • d.t.m - 2010-07-20

    Hallo Speicherzelle,

    vielen Dank Dir - habe es mal runtergeladen. Ich stehe auf dem Schlauch.

    - input_Button(...) ist klar. Hier wird der DI zugewiesen.
    Dann geht´s schon los...
    Kommt der Merker (m1), der bei TRUE den selben DO schaltet, ebenfalls an input_Button(...) - falls nein, wohin kommt er?
    - retain_or_no_retain
    der Sinn wird mir nicht ganz klar. Ich dachte Var Retain Persistant ist nur wichtig für den Fall, dass der Variablenwert nach Neustart der Steuerung erhalten bleibt.

    - reset: BOOL
    Soll wohl normalerweise den Ausgang auf 0 setzen.

    Habe ein paar Variationen durchprobiert, aber bisher habe ich es nicht geschafft, dass der (aktive) Merker bei setzen eines DI am selben Eingang auf FALSE zurückgesetzt wird.

    Entweder das ganze ist wirklich kompliziert und ich versuche etwas aussergewöhnliches zu erreichen - oder mir fehlt das Verständnis. Ich tippe auf letzteres - wo hakt´s?

    Danke für die Mühe!

    Grüße
    dtm

    IMG: Bild

     
  • Speicherzelle - 2010-07-21

    Hallo d.t.m

    habe die Lib noch erweitert.Es ist noch ein zusätzlicher Eingang dabei mit dem Du mit einem Merker(z.B. M1)
    den Ausgang deaktivieren kannst.
    Die Erklärung steht im Lib-Kommentar.
    Schaue es Dir an ob Du damit jetzt was anfangen kannst.

    MFG
    Speicherzelle

    demo_eintasterbetrieb.zip [611.63 KiB]

     
  • d.t.m - 2010-07-22

    Hallo Speicherzelle,

    erstmal vielen Dank für deine Antwort und deine Hilfe.

    Ich habe mir dein Beispielprojekt angesehen und entsprechend in meinem Projekt den Baustein integriert.

    Irgendwie macht es aber nicht das was es soll. Habe viel rumprobiert.

    Nochmal die Problemstellung:
    wird von einem DI getriggert und schaltet das Licht ein / aus.
    wird per Modbus von einem anderen Programm (IPS) getriggert, auch er soll das Licht ein / ausschalten. Für an / aus wird also nur 1 Merker verwendet. Der Merker dient auch als Statusanzeige des Schaltzustands. Schalte ich also mit dem Lichttaster das Licht an, soll die Merkervariable auch auf TRUE sein. Schalte ich mit dem Lichttaster das Licht aus, soll auch der Merker auf FALSE sein. Schalte ich das Licht über den Merker ein, muss es auch per Taster auszuschalten sein.

    Und das bekomme ich nicht hin. Wieviel Zeit ich mit dem Versuch zugetan habe - will gar nicht drüber nachdenken.

    Ist dein Baustein für genau diese Problemstellung geeignet? Wo stehe ich auf dem Schlauch?

    Danke nochmal.

    Grüße
    dtm

    IMG: Bild

     
  • Speicherzelle - 2010-07-22

    d.t.m hat geschrieben:
    Hallo Speicherzelle,
    erstmal vielen Dank für deine Antwort und deine Hilfe.
    Ich habe mir dein Beispielprojekt angesehen und entsprechend in meinem Projekt den Baustein integriert.

    Irgendwie macht es aber nicht das was es soll. Habe viel rumprobiert.
    wird von einem DI getriggert und schaltet das Licht ein / aus.
    wird per Modbus von einem anderen Programm (IPS) getriggert, auch er soll das Licht ein ausschalten. Für an / aus wird also nur 1 Merker verwendet. Der Merker dient auch als Statusanzeige des Schaltzustands. Schalte ich also mit dem Lichttaster das Licht an, soll die Merkervariable auch auf TRUE sein. Schalte ich mit dem Lichttaster das Licht aus, soll auch der Merker auf FALSE sein. Schalte ich das Licht über den Merker ein, muss es auch per Taster auszuschalten sein.
    Und das bekomme ich nicht hin. Wieviel Zeit ich mit dem Versuch zugetan habe - will gar nicht drüber nachdenken.
    Ist dein Baustein für genau diese Problemstellung geeignet? Wo stehe ich auf dem Schlauch?
    Danke nochmal.
    Grüße
    dtm

    Hallo mein Freund,

    wir werden das Kind schon schaukeln was.

    nachfolgend einige Erklärungen.

    1. alle Eingange zum aktivieren und deaktivieren werden in der Function in Taktimpulse umgewandelt
      damit werden aus statische Signale ein Impuls generiert.

    2. wenn Eingang 1 high wird so wird der Ausgang(wenn er low ist) eingeschaltet.

    3. wenn Eingang 1 von high auf low wechselt und wieder high wird dann wird der Ausgang(wenn er high ist) ausgeschaltet.
    4. wenn Eingang 2 high wird so wird der Ausgang(wenn er low ist) eingeschaltet.
    5. wenn Eingang 2 von high auf low wechselt und wieder high wird dann wird der Ausgang(wenn er high ist) ausgeschaltet.
    6. wenn der Eingang 1 high ist und der Ausgang(high ist) und der Eingang 2 high wird dann wird der Ausgang
      ausgeschaltet(low)
    7. wenn der Eingang 1 high ist und der Ausgang(low ist) und der Eingang 2 high wird dann wird der Ausgang
      eingeschaltet(high)
    8. wenn der Eingang 2 high ist und der Ausgang(high ist) und der Eingang 1 high wird dann wird der Ausgang
      ausgeschaltet(low)
    9. wenn der Eingang 2 high ist und der Ausgang(low ist) und der Eingang 1 high wird dann wird der Ausgang
      eingeschaltet(high)
    10. der Reseteingang high ist dann werden keine Aktionen von Eingan 1 oder 2 eingeleitet und der Ausgang
      bleibt low.

    So das sind einige Erklärungen damit Du ungefähr weißt was los ist.Solltes Du noch Fragen oder eine Erweiterung wünschen dann melde Dich einfach.

    Probiere das neue Demo_eintasbetrieb bitte aus.Und Versuche alle Möglichkeiten.

    Good Luck

    MFG
    Speicherzelle

    see you http://wagobuero,dyndns.org m

    IMG: Bild

    demo_eintasterbetrieb.zip [638.78 KiB]

     
  • Anonymous - 2010-07-22

    Originally created by: ebt'ler

    Hallo,

    müsste der Merker nicht als var_in_out delariert sein? Du kannst auch mal mein Programmentwurf testen.
    Das Licht (bzw. die Variable "out") wird durch den Taster an / aus geschalten (also bei jeder ansteigenden Flanke wechselt es den Zustand) oder es bekommt den den Wert vom Merker zugewiesen, wenn dieser auserhalb des FB verändert wird (Visu).

    So wie ich das verstanden habe ist das dein Ziel, wenn nicht kapier ich die Aufgabenstellung nicht.

     
  • Speicherzelle - 2010-07-22

    ebt'ler hat geschrieben:
    Hallo,
    müsste der Merker nicht als var_in_out delariert sein? Du kannst auch mal mein Programmentwurf testen.
    Das Licht (bzw. die Variable "out") wird durch den Taster an / aus geschalten (also bei jeder ansteigenden Flanke wechselt es den Zustand) oder es bekommt den den Wert vom Merker zugewiesen, wenn dieser auserhalb des FB verändert wird (Visu).
    So wie ich das verstanden habe ist das dein Ziel, wenn nicht kapier ich die Aufgabenstellung nicht.

    Hi

    es ist schwer seine Aufgabenstellung nachzuvollziehen.
    habe es mal auf diesen Weg versucht.
    im Prinzip very Simple oda

    MFG
    Speicherzelle

     
  • Anonymous - 2010-07-22

    Originally created by: ebt'ler

    Bei deinen Beispiel fehlt mir iwie ne Lib. oder sie is hier iwo in einen anderen Beitrag enthalten.
    Na egal.
    So wie ich das verstanden habe soll der Merker in der Visu als Statusanzeige dienen aber auch zum schalten verwendet werden.
    Bei dir fungiert er aber "nur" als Input.

    Wobei man bei meinen Bsp. dann auch in der Visu darauf achten muss den Merker nicht dauerhaft einen festen Wert zuzuweisen. Sonst funktioniert es nicht.

    EDIT: hab meine ZIP ja garnicht oben angehängt.
    Aber jetzt:
    EDIT_2: jetzt hab ich mal ne Visu zugefügt, wie ich mir die Funktion vorstelle:

    licht.zip [4.27 KiB]

     
  • d.t.m - 2010-07-22

    @ebt´ler

    Du hast mein Problem genau erfasst. In der Simulation klappt genau das, was ich nie hinbekommen habe.

    Habe es in mein Programm aufgenommen - hänge aber nun erstmal fest:

    Bekomme die Meldung:
    Fehler 4060: VAR_IN_OUT Parameter 'merker' von 'LICHT_FB' benötigt Variable mit Schreibzugriff als Eingabe.

    Eine Verständnisfrage:
    Den Licht_FB verwende ich als Baustein im PLC_PRG und muss bzw. sollte nichts daran ändern, wenn´s so funktionieren soll!

    Deklariert habe ich folgende Variablen in PLC_PRG:

    in_Esszi_re_oben_li AT %IX9.15 -> auf Eingang 'taster'
    out23 AT %QX3.7 -> 'out'
    Testmerker AT %MX41.0 -> auf Eingang 'merker'

    Dies führt zur besagten Fehlermeldung.
    Muss ich bestimmte Deklarationen aus Licht_FB in PLC_PROG übernehmen (var_in_out)?
    Ich scheine damit kurz vor dem Ziel zu stehen... das wäre klasse!
    edit: ich habe keine Taskkonfiguration - das hat aber mit der Fehlermeldung oben ja nichts zu tun..

    @Speicherzelle
    Vielen Dank für die Erklärung des Bausteins. Habe es versucht nachzuvollziehen und werde es nochmals anhand deiner Ausführungen verfolgen. Da raucht einem ja fast schon ein bisschen der Kopf wenn man sowas nicht alltäglich macht

    Euch beiden ganz herzlichen Dank für Eure Mühe!

    Grüße
    dtm

     
  • Anonymous - 2010-07-22

    Originally created by: ebt'ler

    An der deklaration in Licht_FB musst du nichts mehr ändern.
    Aber warum es jetzt keinen Merker als var_in_out akzeptiert weiß ich nicht. Normalerweise hat man auf Merker schreib und lesezugriff.
    Du könntest jetzt mal versuchten im Netzwerk zuvor einer Variablen den Merker zuzuweisen, an den FB die Variable verwenden und im Netzwerk danach den Merker dann die Variable zuweisen.
    Ob das funktioniert kann ich jetzt nicht genau sagen. Alternativ müsste ich mir mal was anderes überelgen.
    Wenn du die Bezeichnungen im PCL_PRG änderst wird mein Visu-Beispiel nicht mehr richtig funktionieren. Da es ja noch die alten Bezeichnungen verwendet. Nicht das du dich dann davon täuschen läst.

    Wenn es nicht funktioniert melde dich nochmal. Heute bin ich aber sicher nicht mehr online.

     
  • Anonymous - 2010-07-22

    Originally created by: ebt'ler

    Mich hat das Problem jetzt aus Eigeninteresse nicht in Ruhe gelassen. ^^
    Codesys kann offenbar aus den bitadressierten Merker keinen Pointer erzeugen, was aber erforderlich wäre um damit ein var_in_out zu belegen.
    Wenn man sonst Pointer in Verbindung mit Bitzugriffen einsetzt muss man auch einen Umweg (Bitoffset usw.) gehen.

    Somit müsste es dann aber funktionieren, wenn man wie im letzten Post beschrieben vorgeht.

     
  • d.t.m - 2010-07-22

    Vielen Dank dass du dir nochmal Gedanken gemacht hast.

    Ich habe eine Variable Testmerker_v erstellt, diese in Var_in_out als boolesche Variable deklariert und dieser Variablen den Merker (Testmerker) zugewiesen.

    Es kommt zu folgender Fehlermeldung:
    Fehler 3705: VAR_IN_OUT in Top-Level-Baustein nicht erlaubt, wenn keine Task-Konfiguration vorhanden ist.

    Bisher lief alles ohne Taskkonfig., und mit Tasks habe ich noch nie gearbeitet - habe keinen Plan davon und weiß auch nicht inwiefern sich das dann im Programmablauf (negativ?) bemerkbar macht...

    Ich probier noch ein bisschen rum - vielleicht hast du ja noch eine Idee!

    EDIT:
    Habe die Variable Testmerker_v nicht als Var_in_out deklariert sondern einfach als Bool in der Variablendeklaration in PLC_PRG.

    Es scheint so zu klappen!!! Ich habe es jetzt nur mit dem Forcen der Variablen versucht, das klappt! Ich teste mal ob´s auch über die Visu über Modbus klappt - dann ist es endlich geschafft!

    Schöne Grüße
    dtm

     
  • Anonymous - 2010-07-23

    Originally created by: ebt'ler

    Guten Morgen,

    Den Licht_FB brauchtest du nicht zu verändern. Und meine letzte Idee hab ich im Anhang nochmal als Bild hinzugefügt. Dann sollte es nichtmehr zu Missverständnissen kommen.
    Ich hoffe es funktioniert wie von dir beabsichtigt.

    IMG: Zwischenablage

     
  • d.t.m - 2010-07-23

    ES FUNKTIONIERT!!!!!

    Ich hätte nicht gedacht dass das tatsächlich mal klappen würde, nachdem ich so vieles ausprobiert habe!
    Der Ausgang lässt sich nun via Taster einschalten, via Merker ausschalten und vice versa.

    Ganz ganz herzlichen Dank dafür, freue mich riesig! Das hätte ich alleine vermutlich nie hinbekommen.

    Viele Grüße
    dtm

     
  • d.t.m - 2010-07-23

    Gibt es grundsätzlich die Möglichkeit, in den FB noch einen Reset-Eingang einzubauen?
    Kann ich Code aus fertigen FB in den Licht_FB einfügen, um zusätzliche Funktionalität wie z.B. max. Leuchtdauer (also autom. ausschalten nach 3 Std. z.B.) zu erhalten?

    Ich habe meine ganzen Schaltvorgänge bisher über den FB Switch_I (OSCAT) gemacht und möchte diese auf die Möglichkeit der Steuerung über Merker umstellen.

    Wenn ich mir z.B. den FB Switch_I aus der Oscat Bib in der Bibliotheksverwaltung ansehe, sehe ich nur die Variablendeklarationen, aber nicht den eigentlichen Code für die Funktionalität... wie kann ich darauf zugreifen?

    Grüße
    dtm

     
  • Speicherzelle - 2010-07-24

    Hallo meine Herren,

    schaut euch mal mein Demo an so werdet Ihr sehen das meine Lib auch funktioniert.
    Habe zur Veranschaulichung ein Visu beigepackt.
    Übrigens ist da auch ein Reset intregriert.

    Schaut es Euch an und sagt was dazu

    MFG
    Speicherzelle.

    PS. Übrigens ist in der Demo immer die Lib dabei gewesen

    guckst Du

    demo_eintasterbetrieb.zip [33.48 KiB]

     
  • d.t.m - 2010-07-24

    Hallo Speicherzelle,

    danke nochmal für deine Mühe. Also ich habe es getestet. Über die von dir erstellte Visu klappt es definitiv, wenn ich aber direkt im PLC_PRG 'input_Button(...)' auf TRUE setze und der Ausgang TRUE wird, kann ich über das Forcen von 'input_Merker(...)' den Ausgang nicht auf FALSE setzen. Komisch warum es in der Visu klappt, anders aber nicht... vielleicht mach ich was falsch...

    Schöne Grüße
    dtm

     
  • Speicherzelle - 2010-07-24

    d.t.m hat geschrieben:
    Hallo Speicherzelle,
    danke nochmal für deine Mühe. Also ich habe es getestet. Über die von dir erstellte Visu klappt es definitiv, wenn ich aber direkt im PLC_PRG 'input_Button(...)' auf TRUE setze und der Ausgang TRUE wird, kann ich über das Forcen von 'input_Merker(...)' den Ausgang nicht auf FALSE setzen. Komisch warum es in der Visu klappt, anders aber nicht... vielleicht mach ich was falsch...
    Schöne Grüße
    dtm

    nur mal so aus neugierde poste mal das programm von dir mit der lib von mir.
    da sage ich dir was du vielleicht falsch machst.

    den in meiner CPU (teste immer mit cpu) klappt das einwandfrei

    MFG
    Speicherzelle

     
  • Anonymous - 2010-07-25

    Originally created by: ebt'ler

    Hallo,

    ich habe meinen Lösungsvorschlag nochmal mit einen Reset-Eingang erweitert und eine Möglichkeit hinzugefügt nach einer bestimmten Einschlatzeit wieder automatisch auszuschlaten.
    Aber da Codesys als var_in_out keine Bitadressen akzeptier finde ich die Lösung nicht mehr so gut. Andernfals wäre es sicher recht übersichtlich, da man nur einen Baustein aufrufen muss. Mit der umständlichen Merkerverarbeitung ist der Vorteil aber schnell wieder weg.

    Normalerweise verzichte ich zwar auf oscat, aber da du sowieso eher auf "SWITCH_I" stehst habe ich dazu auch mal ein Beispiel im Anhang. Das gefällt dich sicher viel besser.
    Du musst aber noch die Schaltzeiten anpassen.

    licht_oscat.zip [42.96 KiB]

    licht.zip [4.53 KiB]

     
  • Anonymous - 2010-07-25

    Originally created by: ebt'ler

    @ Speicherzelle,

    d.t.m will den Status des Ausgangs auch am Merker ablesen können. Das ist dann sicher der Teil deines Programms welches ihn nicht gefällt / was bei ihn nicht funktioniert. Da du den Merker ja nicht noch den Wert von "licht_ein_aus" zuweist.
    EDIT (Ergänzung): Weiterhin möchte er nicht den Ausgang über die positive Flanke des Merkers toggeln, sondern den Zustand direkt weiter geben.

     
  • d.t.m - 2010-07-26

    Ja, genau so ist es. Vielen Dank für die Ergänzung, probiere ich gleich morgen früh aus!

    Grüße
    dtm

     
  • d.t.m - 2010-07-27

    @ebt'ler

    Habe das mal ausprobiert.
    Also deine Oscat Variante soll den 'Licht_FB' komplett ersetzen? Hilfsvariablen sind auch nicht mehr nötig?

    Habe unter obige Annahme schon einiges versucht, aber so klappt´s nicht bei mir. Dannst mir ja mal sagen ob ich das so richtig verstanden habe..

    Grüße
    dtm

     
<< < 1 2 3 > >> (Page 2 of 3)

Log in to post a comment.