# Programmierhilfe für CoDeSys



## Pubi (25 Februar 2010)

Hallo,

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

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 

Würde mich über jede Idee freuen.

Grüße
Pubi


----------



## GLT (25 Februar 2010)

Ersteres würde mit einem &-Glied mit negiertem 2. Eingang funktionieren



Pubi schrieb:


> 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?


----------



## ybbs (25 Februar 2010)

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.


----------



## Pubi (25 Februar 2010)

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


----------



## Oberchefe (25 Februar 2010)

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).


----------



## Pubi (25 Februar 2010)

@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


----------



## ybbs (25 Februar 2010)

Kannst Du nicht einfach eine zusätzliche ISP-Variable spendieren?
Also 1x ISP_Taste und 1x ISP_LichtStatus.


----------



## Oberchefe (25 Februar 2010)

> 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.


----------



## Pubi (25 Februar 2010)

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?


----------



## GLT (25 Februar 2010)

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


----------



## Pubi (28 Februar 2010)

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.


```
(* 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


----------



## GLT (28 Februar 2010)

```
(* 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
```


----------



## Pubi (1 März 2010)

@GLT bitte etwas mehr Infos, stimmt was mit der "rot" markierten Zeile nicht?


----------



## GLT (1 März 2010)

Die rot markierte Zeile gibt dir an, WARUM dein Ergebnis erfolgt


----------



## Pubi (1 März 2010)

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.


----------



## GLT (1 März 2010)

Wie kann man einen falsch editieren Text wieder rausbekommen?


----------



## Pubi (1 März 2010)

eigentlich mit dem Button rechts unten "Ändern"...hätte ich jetzt gesagt...


----------



## Lotharius (30 April 2019)

Hallo Leute,

ich auche einen "Stromstoßschalter mit einem Sprung", er sollte vollständig in FUP sein

Sanke


----------



## PN/DP (30 April 2019)

Lotharius schrieb:


> 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


----------



## DeltaMikeAir (30 April 2019)

> ich auche einen "Stromstoßschalter mit einem Sprung", er sollte vollständig in FUP sein



https://www.sps-forum.de/elektronik...usrelais-mit-dimmerfunktion-3.html#post722812


?????????? Alzheimer  ??????????


----------



## Lotharius (30 April 2019)

alles stüre Michel hier?


----------



## DeltaMikeAir (30 April 2019)

Lotharius schrieb:


> alles stüre Michel hier?



??????????


----------



## Lotharius (30 April 2019)

Hallo, DeltaMikeAir!

Betroffene Hunde bellen, wenn man Sie anspricht! Bist wohl doch eine Stürmichel!

Lotharius


----------



## wollvieh (30 April 2019)

Wie wäre es mit einem R_TRIG und einem nachgeschalteten RS Flipflop und etwas nachdenken? ;-)


----------



## Faceman (30 April 2019)

wollvieh schrieb:


> und etwas nachdenken? ;-)



Vor allem dieses


----------



## DeltaMikeAir (30 April 2019)

Lotharius schrieb:


> Betroffene Hunde bellen, wenn man Sie anspricht!



Kann ich nicht beurteilen, ich spreche keine Hunde an.

Alles Gute und viel Erfolg weiterhin


----------



## Heinileini (1 Mai 2019)

Lotharius schrieb:


> Betroffene Hunde bellen, wenn man Sie anspricht!


Ich weiss nicht, ob es ein Trost für Dich ist: Hunde, die bellen, beissen nicht!
Jedenfalls nicht gleichzeitig. Denn sie wissen, mit vollem Munde spricht man nicht.
Oder in hundinesisch übersetzt: wenn man die Schnauze voll hat, bellt man nicht . . . sondern . . .


----------

