Programmierhilfe für CoDeSys

Pubi

Level-1
Beiträge
12
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

kann mir einer vielleicht ein Denkanstoß geben, ich bin langsam am verzweifeln :confused:

Ich möchte in CFC folgendes programmieren:

Es soll eine Funktion sein, der ich zwei Werte übergebe und die als ausgangs wert Bool hat und ein Stromstoßrelais antreiben soll.

Die Funktion für den Stromstoßrelais habe ich schon von der Wago Gebäude Allgemein Bibliothek. Jetzt fehlt nur noch das Drumherum.

Zu der Funktion:
Eingangswert 1: Bool (1: Einschalten, 0: Ausschalten)
Eingangswert 2: Bool (Status eines Relais, 1:Relais aktiviert, 0:Relais deaktiviert)

Ich möcht jetzt den Wert 1 mit TRUE übergeben und dabei muss geprüft werden, ob Wert 2 TRUE ist, wenn das der Fall ist, soll nichts passieren. Wenn aber Wert 1 = TRUE und Wert 2 = FALSE ist, soll ein Einschaltsignal an die Komponente Stromstoß gegeben werden. Beim Einschaltsignal wird der Wert 2 automatisch auf TRUE gesetzt. Wird jetzt das Relais über einen anderen Weg ( direkt über ein Input-Signal) auf FALSE gesetzt, ändert sich der Wert 2 (Status des Relais) und da immer noch Wert 1 TRUE ist und Wert 2 FALSE ist, wird ein ungewolltes Einschalten des Relais ausgelöst.....ich hoffe jemand hat mich verstanden :confused:

Würde mich über jede Idee freuen.

Grüße
Pubi
 
Ersteres würde mit einem &-Glied mit negiertem 2. Eingang funktionieren

Wird jetzt das Relais über einen anderen Weg ( direkt über ein Input-Signal) auf FALSE gesetzt, ändert sich der Wert 2 (Status des Relais)
Warum gibt es diese 2te Ansteuerungsmöglichkeit bzw. warum verhinderst Du einen parallelen Zugriff nicht?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich geb's gleich zu, ich habe nur die 1. Hälfte verstanden.

Meinst Du so eine Funktion wie im Anhang?

Ansonsten denke ich die bessere Lösung wäre, du postest deine Aufgabenstellung und was du bisher hast. Dann kann dir sicher eher geholfen werden.
 

Anhänge

  • Pubi1.JPG
    Pubi1.JPG
    23,3 KB · Aufrufe: 112
Hallo und danke schon mal für die Antworten,

ich glaube, ich muss etwas ausholen und das komplette Vorhaben besser zu verstehen.

Es geht um einen Lichtschalter, der soll folgende Funktionen haben:

1 x Klick Licht einschalten
5 sec. Klick eine andere Funktion starten (irgend eine)

Das habe ich bereits, den Plan habe ich unten angefügt.

Die zweite Möglichkeit das Licht einzuschalten soll über ISP sein.
Da ich über ISP nur auf die MerkerVariablen zugreifen kann (lesen/schreiben) habe ich eine GlobaleVariable erstellt
(IPS_Licht AT %MX0.0 :BOOL:= TRUE; )

Das Einschalten des Lichts erfolgt über ein Stromstoßrelais (2 fach Schließer). Der erste Schließer soll die Lampe mit Strom versorgen, der Zweite soll ein Feedback an Wago liefern, ob Licht an oder aus ist.

- Beim Neustart der Anlage, soll es überprüft werden, welchen Default Wert die Lampe hat (ISP_Licht = TRUE) dann soll eine Überprüfung stattfinden, ob das Licht an oder aus ist und dann soll der Default Wert gesetzt werden. (Beim Neustart der Anlage, soll das Licht an gehen)

- Beim Einschalten über Lichtschalter, soll der Wert der ISP_Licht Variablen den tatsächlichen Status des Lichts gesetzt werden. (Wird die Lampe angemacht, soll ISP_Licht = TRUE gesetzt werden und anders rum)

- Beim Einschalten über die ISP_Licht Variable z.B. von False auf True, soll der Wert der Variablen mit dem Feedback Status des Relais übereinstimmen.

Warum das Ganze:
Also wenn ich im Zimmer bin, sehe ich, dass das Licht angegangen ist, bzw. drücke noch mal auf den Lichtschalter. Bei der Fernsteuerung möchte ich sichergehen, dass das Licht an ist (bzw. das im Relais die Kontakte geschlossen sind)


Hoffe Ihr könnt mit dem Taxt was anfangen ;)


Grüße
Pubi
 

Anhänge

  • versuch1.png
    versuch1.png
    102,1 KB · Aufrufe: 89
Geht's noch komplizierter oder rechnest Du mit ständigen Steuerungsausfällen? Abgesehen davon: hast Du zu viel Geld?

Stromstoßschalter in der Steuerung und simple Relais am Ausgang(1 Wechslerkontakt). Die Steuerung weiß was der Ausgang gerade macht, also brauchst Du keinen Eingang extra. Für "Notbeleuchtung" kann auch eine Lampe mal an den Öffner des Relais verdrahtet werden statt an den Schließer (der Ausgang wird dann in der Software invertiert), dann leuchtet sie im Zweifelsfall bei Steuerungsausfall (z.B. Flurlampe).
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@Oberchefe bin für jede Gegenvorschläge auch offen, der Grundgedanke war bei mir, ich möchte keine StandBy Verluste haben (keine 10 Relais die "an" sind) deswegen Stromstoßschalter.

Die Steuerung weiß was der Ausgang gerade macht, also brauchst Du keinen Eingang extra.
Wie meinst Du das, dass man sich den Eingang sparen kann? Ich muss doch der Anlage mitteilen welche Position das Stromstoßrelais hat, oder :confused:
 
Kannst Du nicht einfach eine zusätzliche ISP-Variable spendieren?
Also 1x ISP_Taste und 1x ISP_LichtStatus.
 
Ich muss doch der Anlage mitteilen welche Position das Stromstoßrelais hat,

Wenn es ein Stromstoßrelais in der Software ist nicht, sprich der Taster geht auf einen Eingang und das Programm wechselt bei jedem Drücken den Status des Ausgangs. Der Stromverbrauch der Relais sollte im Vergleich zum Stromverbrauch der Lampen vernachlässigbar sein. Schon eher Sparen sollte man beispielsweise bei der Ansteuerung der Stellventile für die Heizung. Die haben nämlich einen kleinen Heizwiderstand drin der ein Bimetall zum Bewegen bringt(auch wenn so mancher Heizungsbauer die als Motoren bezeichnet). Bei optimal eingestellter Vorlauftemperatur und hydraulischem Abgleich sind die Ventile die meiste Zeit offen. Da lohnt es sich darüber nachzudenken, welche in Ausführung "NO" statt "NC" zu verwenden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich kann auch mit zwei Var. arbeiten
- ISP_Taste
- ISP_LichtStatus == (Feedback status des Relais)

aber ich habe trotzdem noch das Problem mit dem Einschalten (Wert von ISP_Taste ändern) ... oder stehen ich jetzt auf der Leitung ??? und hab was nicht verstanden?
 
Ich finde den Lösungsansatz unsinnig - warum einen Stromstoßschalter programmieren, um ein Stromstoßrelais anzusteuern?

Im "realen" Leben würde man dein Anliegen, sofern es gar nicht anders geht, eher so lösen:


  • Taster steuert Stromstoßschalter direkt
  • Taster wird wegen Zusatzfunktion noch auf die SPS verschalten (und nur für die Zusatzfunktion abgefragt)
  • die Relaisansteuerung wird ausschließlich für das Fernwirken erstellt
  • der Relaiszustand wird abgefragt, um eine Rückmeldung für den Fernzugriff zu übermitteln
  • das Fernwirken selbst wird über einen simplen Impuls ausgeführt
Die Konstellation SPS+Stromstoßschalter hat sich aber im echten Betrieb als nicht besonders zuverlässig erwiesen - deshalb mein Rat: normales Relais ansteuern oder gleich zu

750-523
1-Kanal Relaisausgangsklemme AC 230 V, 16 A
potentialfrei; 1 Schließer; bistabil; Hand-Bedienung

greifen ;)
 
Hallo Leute,

bin mittlerweile ein Stück meinem Ziel näher gekommen, aber folgendes Problem habe ich immer noch.

Es geht eigentlich um das Grundverständnis. Habe bis jetzt mit Delphi programmiert und vom Programablauf war es sehr übersichtlich.

Der Compiler lief von oben nach unten in einem Prozess ab, aber bei der SPS Programmierung z.B. Sprache: SP, kommt es mir so vor, als ob der Funktionsblock ständig ablaufen würde. Vielleicht könnte mir da jemand einen kleinen Einblick geben bzw. Link zu nachlesen.

Mein Problem ist:

Im Funktionsblock (SP) wird die Variable
Klick_Lang für ca. 2sec. TRUE, dann wieder FALSE und die Variable Kueche_Stand_By = 0.

Code:
(* Klick Lang *)
IF (Klick_Lang = TRUE) THEN
    IF (Kueche_Stand_By = 0) THEN
        Kueche_Stand_By:= 1; (* Ausschalten *)
    ELSIF (Kueche_Stand_By = 1) THEN
        Kueche_Stand_By:= 2; (* Einschalten *)
    END_IF
END_IF

Eigentlich würde ich wollen, das Kueche_Stand_By = 1 ist und beim nächsten mal, wenn Klick_Lang = TRUE ist dann auf Kueche_Stand_By = 2 springt. Aber der Werts springt sofort auf 2.

Vielleicht jemand eine Idee?

Viele Grüße aus der Hauptstadt!
pubi
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
(* Klick Lang *)
IF (Klick_Lang = TRUE) THEN
    IF (Kueche_Stand_By = 0) THEN
        Kueche_Stand_By:= 1; (* Ausschalten *)
    [COLOR=Red]ELSIF (Kueche_Stand_By = 1)[/COLOR] THEN
        Kueche_Stand_By:= 2; (* Einschalten *)
    END_IF
END_IF
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn der Ausgangswert der Var. 0 ist und die Abfrage 1 x durchläuft, dann ist das Ergebnis 1, beim zweiten durchlauft steigt der Wert auf 2, das ist mir schon klar. Ich wollte dass die IF-Abfrage nur ein Mal ausgeführt wird, aber das ist dann ohne einer Hilfsvariablen nicht möglich. Hab zum testen ein Couter eingebaut und musste feststellen, dass der Compiler in ca. 1,5 sec. 20x in die IF-Abfrage gesprungen ist.
 
Wie kann man einen falsch editieren Text wieder rausbekommen?
 
Zuletzt bearbeitet:
ich auche einen "Stromstoßschalter mit einem Sprung", er sollte vollständig in FUP sein
Gräbst Du jetzt alle alten Threads aus, wo das Wort "Stromstoßschalter" drin vorkommt? ;)
In dem anderen Thread brauchst Du doch nur die Beiträge #10 + #17 zusammenfügen bzw. da hast Du doch in #19 und #27 schon selber eine Lösung gepostet. Was für eine Lösung suchst Du jetzt hier?

Harald
 
Zurück
Oben