Problem bei Variablen als remanent

Helumt

Level-1
Beiträge
13
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
erst mal zu mir.
Ich habe das Schreiben von Programmen nicht gelernt. Habe mir das Wissen selber beigebracht und viel gelesen. Würde mich auch eher als Bausteinschubser bezeichnen.
So weit funktioniert auch alles so, wie ich mir das vorstelle.

Ich habe eine kleine Steuerung für mein Whirlpool mit einer Phoenix ILC 150 ETH neu erstellt, nach dem die originale Stuerung nicht mehr funktionierte.
So weit so gut...alles funktioniert bis auf, das ich keine Variablen als remanent verarbeiten kann. Ich habe in den Bausteinen z.B. Zähler Verbrauch Chlor den Haken bei RETAIN gesetzt. In der Variablenliste lokale Variablen ist auch der Haken remanent gesetzt.
Schalte ich die Steuerung ab,( Hauptschalter aus ) so sind nach dem wieder Einschalten alle Zählwerte weg bzw. auf null gesetzt.

Könnte mir da jemand behilflich sein?

Besten Dank

Helmut Umter
 
Zuletzt bearbeitet:
Ich kenne mich jetzt nicht so mit den Steuerungen von Phönix aus und sie basieren ja auch nicht auf Codesys, aber vielleicht hilft Dir das Folgende ja weiter.
Bei Beckhoff ist das so, dass die Steuerung eine sogenannte 1-Sekunden USV enthalten muss und ein entsprechender FB zyklisch aufgerufen werden muss. Sobald die USV anspringt sorgt der FB dafür, dass die Daten gespeichert werden. Soweit die Phönix auch eine USV enthält schau doch mal in der Doku nach ob es da auch einen entsprechenden FB gibt. Ohne USV müssen bei Beckhoff die Retain-Daten über einen FB gespeichert werden, was bei Phönix eventuell auch sein kann.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Oliver

Danke für deine Antwort

Ich habe jetzt noch mal das Datenblatt der ILC durchgelesen. Dort steht über USV usw. nichts drin. Habe auch noch mal in PCWorx nachgelesen und habe daraus entnommen, das ich die Variablen nur als remant setzen soll. Aber vermutlich fehlt da ja noch etwas.
Wie gesgt, bin ich auch nicht so firm in der ganzen Materie, das ich dass alles sofort verstehen würde.

Gruß Helmut
 
Hallo

Kenn mich mit Phoenix auch nicht aus aber will trotzdem mal meinen Senf dazu geben ^^


Wird ein ein Startwert zugewiesen?
Dann kann es sein das der Wert bei einem Neustart der SPS die Variable neu initialisiert wird.


Gültigkeitsbereich der Variable Lokal?
Denke mal das bei Lokalvariablen, wie bei Anderen Herstellen, diese zu erst Beschrieben werden sollten bevor sie verwendet werden also besser auf Global setzen.
22-05-2018 15-39-27.jpg
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Oliver

Mehr steht dar leider nicht drin

Mit dem Schlüsselwort RETAIN werden remanente Variablen deklariert. Der Wert einer
remanenten Variablen bleibt auch dann erhalten, wenn die Steuerung abgeschaltet wird.
Für einen Warmstart wird der letzte Wert der Variablen verwendet.

Ich habe als PDF die " PC_WORX_Quickstart_DE.pdf"
 
Hallo,

kannst du unter PC WORX im Kontrolldialog einen Warmstart machen und die Werte bleiben erhalten? (Ein Warmstart ist wie Steuerung einschalten, nur dass die Spannung an bleibt) Wenn ja, dann ist die Batterie alle. Ein Kaltstart löscht alle remanenten Variablen.

SLe
 
@ Verithas
Ich habe lokale so wie globale Variablen. Startwerte werden nicht gesetzt. Es funktioniert weder bei den lokalen noch globalen Variablen.

@ SLe
Auch beim Warmstart werden alle Werte wieder auf 0 gesetzt. Batteriefehler kann ich wohl ausschließen da im Debugmodus keine Meldung steht.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

dann würde ich eine Variable anlegen, vom Typ INT oder WORD, diese als Remanent anklicken aber nicht im Programm verwenden. Dann diese mit einem Wert forcen und schauen, was beim Neustart mit dem Wert passiert. Damit kannst du ausschliessen, das dein Programm den Zählwert löscht.

SLe
 
Hallo SLe

so habe mal auf die Schnelle eine Bool to Word Variable angelegt und geforcet. Ergebnis bei Heißstart Wert =16#0001 ( also Wert behalten )
Warmstart= Wert 16#0000 ( also Wert wieder auf 0)
 
Zuletzt bearbeitet:
Hallo,
nein, nur eine Variable anlegen und dann setzen. Bei PC Worx kann man im Debugmodus dann eine Variable nicht Forcen sondern beschreiben. Damit gehst du sicher, dass dein Programm nichts löscht beim Neustart. Einfach eine globale Variable anlegen und remanent setzen.

SLe
 
Hallo SLe

Werde Morgen nochmal eine Var anlegen und ausprobieren. Wenn ich es nicht hinbekommen, den Fehler zu finden, komme ich sehr gerne auf Dein Angebot zurück.

vielen Dank Helmut
 
So hat mir keine Ruhe gelassen. Hab es nun so gemacht, wie du es vorgeschlagen hast.. Und siehe da..... Der Wert bleibt erhalten egal ob heiß oder warm. Bei kalt geht er natürlich verlohren.

Das war schon mal ein Ansatz, den ich morgen weiter verfolgen werde. Ich melde mich dann wieder.

Gruß Helmut
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Man kann doch FBs wie die Zähler CTU, CTD und CTUD nicht remanent setzen. Bisher helfe ich mir immer mit damit, die Zähler selbst zu programmieren, wie siehe Anhang. Dort ist dann CV remanent.
 

Anhänge

  • Unbenannt.PNG
    Unbenannt.PNG
    8,9 KB · Aufrufe: 10
Hallo Helumt

ich denke das Du einen Firmware Zähler FB nutz (Beispiel CTU) und die angeschlossenen Ausgangsvariable des Zählers als Remanent deklariert hast.
Nun ist es so, der Zähler wird bei einem Spannungsreset oder Warmstart neu initialisiert mit den Wert 0 , da die interne Variable nicht remanent ist und somit wird der Ausganswert auf 0 geschrieben. Deine angeschlossene Remanente Ausgangsvariable wird also mit 0 überschrieben. Man kann sich ganz einfach einen Zähler selber schreiben.
Beispiel eines Zählers in st . Die Variable cnt als Remanent deklarieren.

R_TRIG_1(CLK:=Zaehleingang);

if R_TRIG_1.Q then
cnt := cnt + 1 ;
end_if;
 
guten Morgen Mobi

Vielen Dank...... Dann macht das natürlich Sinn, wenn man Zähler nicht remanent setzen kann. Wie schon gesagt bin ich absoluter Laie.

Eine Frage hätte ich aber noch.. Ich habe CTU und CTD Zähler Wo schreibe ich denn den PV Vorgabwert hin, die ich benötige?

Wahrscheinlich werden noch mehr Fragen von mir kommen. Also habt bitte Nachsicht mit mir unwissendem.

Gruß Helmut
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, vielen Dank

Leider schaffe ich es nich diesen Baustein zu schreiben.
Den Baustein habe ich Zaehler_remanent genannt.

Ich habe einen eigenen neuen Funktionsbaustein in st angelegt.
Den Code habe ich dann kopiert und eingefügt.

Als Variable out habe ich den cnt genommen und als remanent deklariert.
Aber was bzw. wie wir der Var input denn geschrieben? Als R_TRIG_1 ?

bekomme dann immer Fehlermeldungen

Variable 'Zaehler_remanent:Zaehleingang' nicht gefunden!
Funktionsbaustein oder Struktur entsprechend 'R_TRIG_1.CLK:' nicht gefunden! (Wahrscheinlich mehr als 30 Zeichen verwendet)
Variable 'Zaehler_remanent:R_TRIG_1' nicht gefunden!
Funktionsbaustein oder Struktur entsprechend 'R_TRIG_1.Q:' nicht gefunden! (Wahrscheinlich mehr als 30 Zeichen verwendet)

sorry für die wahrscheinlich dummen Fragen. Eventuell kann man es mir als Laie noch ein bisschen näher erklären.
 
Zaehlung Wsser.JPG

Hier mal z.B. die Wasserzählung.

Der Vorgabewert ist für die Filterreinigung nach 1000l Wasserzufuhr.
 
So habe die Variablen nun so geschrieben.

cnt BOOl VAR_Output
Zaehleingang BOOL VAR_Input
R_TRIG_1 R-TRIG VAR

bekomme dann die Fehlermeldung
Die mit der Funktion 'ADD' verbundenen Datentypen sind nicht identisch!
bezogen auf
cnt := cnt + 1 ;

bin nun etwas verwirrt
 
Zurück
Oben