Blind_Scene u. Blind_Night Problem

Begonnen von DeejayT, 20. Februar 2010, 11:22:35

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 1 Gast betrachten dieses Thema.

DeejayT

Hi,

setze den Blind_Scene u. Blind_Night Baustein in Kombination mit den anderen Blind Bausteinen ein. Die Funktionieren soweit super, allerdings habe ich jedesmal ein Problem wenn ich das Programm komplett neu in die Steuerung schreiben muß (z.b. bei Taskänderungen), kein Onlinechange!

- Der Blind_Night Baustein vergisst dann immer die Werte vom last_day und last_night. Da steht dann immer was mit 1970! Dann funzt der Baustein die ersten Male nicht. Ist ja auch logisch, da wir ja nicht 1970 haben  ;) !

- Der Blind_Scene vergisst auch komplett seine Scene die man vorher mühsam zusammengestellt hat. Das ist echt ärgerlich und ich habe keine Lust jedesmal die Scenen neu zusammenzustellen.

Ich bin sicherlich nicht der einzigste der das Problem hat, wie kann man das lösen?

DeejayT

Weiß hier keine einen Rat? Kann doch nicht sein das ich der einzige bin der das Problem hat  ???

miha

Hallo,

kann es sein daß du deine relevanten Variablen in den Retain Bereich legen must?
Am besten "VAR RETAIN PERSISTENT" verwenden - zum Verhalten siehe hierzu auch die Online Hilfe

hugo

du kannst auch den baustein selbst als var retain deklarieren dann behält er seine daten auch bei stromausfall
mit persisitent auch bei programm update

DeejayT

Danke für eure Antworten, ich habe sie jetzt als Retain Persistent" deklariert. Hoffe das die Werte jetzt gespeiert bleiben.

Macht weiter so  8)

vicky

Hallo hugo,
aber doch nicht, wenn ich das Programm neu einspiele, oder etwa doch?
(z.B. bei Beckhoff CX1010?)
oder hast du das etwa hinbekommen, wenn ja wie denn?

gruss

hugo

ja retain bedeutet schutz bei stromausfall und persistent bei programmupdate

allerdings nur wenn du nicht die deklaration der entsprechenden bausteine änderst oder alles übersetzen machst.

vicky

Also bei mir ist es öfter der Fall, dass das Programm komplett übersetzt werden muss.
Sei es, um eine neue Karte zu integrieren, oder eine neue OSCAT-Version einzupflegen.

D-Platoon

So, ich geb jetzt einfach auch hier kurz meinen Senf dazu:

Hatte auch selbiges Problem, zumindest das mit dem Blind_Night. Habe es folgendermaßen gelöst:

Habe bei den Variablen (also direkt in der Lib, so können sie von der SPS-überschrieben werden) direkt Werte dahinter gesetzt, so dass es beim ersten Mal funktionieren muss und am Tag drauf, sind sie dann von der SPS-überschrieben.
Das sah dann so aus:
VAR
night : BOOL;
day : BOOL;
last_night : DATE := D#2010-01-01;
last_day : DATE := D#2010-01-01;
END_VAR

DeejayT

Ich muß das hier noch mal hoch holen.
Vor ein paar Tagen hat sich mein Wagoprogramm verabschiedet, so dass ich das Programm komplett neu aufspielen mußte.

Beide Probleme bestehen noch, wobei das Problem mit dem Blind_Night nicht so kritisch ist. Muß man halt ein-zwei Tage warten, dann läuft es wieder.
Allerdings habe ich mit Blind_Scene ein größeres Problem, die Scenen neu einzustellen, dauert echt lange. Wie kriegen wir das Problem vom Tisch, das ist echt nervig!

Omalik

#10
Hallo

Ich hatte das gleiche Problem:
Habe den Baustein wie Folgt angepasst (Fett markiert). Die Initialverte werden bei ersten Zyklus der SPS in den Speicher kopiert. Somit können alle Storen mit Initialwerten geladen werden und keine Probleme mit Kopieren neustarten oder Programmänderungen.



Gruss



FUNCTION_BLOCK FB_BLIND_SCENE_Omalik
VAR_INPUT

   UP, DN : BOOL;
   S_IN : BYTE;
   PI, AI : BYTE;
   ENABLE : BOOL;
   SWRITE : BOOL;
   SCENE : BYTE;
   ini_EN: : ARRAY[0..15] OF BYTE;
        ini_PI : ARRAY[0..15] OF BYTE;
   ini_AI : ARRAY[0..15] OF BYTE;

END_VAR
VAR_OUTPUT
   QU, QD : BOOL;
   STATUS : BYTE;
   PO, AO : BYTE;
END_VAR
VAR RETAIN
   sx : ARRAY[0..15,0..2] OF BYTE;
END_VAR
VAR_TEMP
   x : BYTE;
   schleife:BYTE;
END_VAR


(* delete all bits except the lower 4 of scene *)
x := scene AND 16#0F;

IF enable AND sx[x,0] <> 0 AND UP AND DN THEN
   po := sx[x,0];
   ao := sx[x,1];
   status := 160 + x;  (* Status number is 160 to 175 for the 16 scenes *)
   QU := TRUE;
   QD := TRUE;
ELSE
   QU := UP;
   QD := DN;
   status := S_IN;
   po := pi;
   ao := ai;
END_IF;

(* write scene if necessary *)
IF swrite THEN
   status := 176;      (* write scene *)
   sx[x,0] := pi;
   sx[x,1] := ai;
   IF enable THEN sx[x,2] := 1; ELSE sx[x,2] := 0; END_IF; (* if sx[x,2] = 0 the scene is disabled *)
END_IF;

(* Inizialisieren *)
IF NOT  erster_zyklus THEN               (*Sollen die Ini Werte geladen werden? *)
   FOR schleife := 0 TO 15 DO
                sx[schleife,0] := ini_EN[schleife];         (* Ini Werte laden *)
      sx[schleife,1] := ini_PI[schleife];         (* Ini Werte laden *)
      sx[schleife,2] := ini_AI[schleife];
   END_FOR

END_IF;