Schleifen durchlauf - Denkfehler?

Michael68

Level-1
Beiträge
116
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo

hänge gerade fest und brauche hilfe.

Wenn der AKKU gefüllt ist sollen diese Werte in die Dali-Controller geschreiben werden und die Lampen entsprechen angesteuert werden.

(* Aufbau der ARRAY[0..2]: LampenAdresse, DimmWert, FadeTime *)
(* Schreibdurchlauf wenn AKKU[0] <> 0 *)

IF AKKU[0] <> 0 (* AKKU gefüllt dann schreiben *)
THEN
Button := FALSE; (* FbDALI Triggern LOW*)
Profil_BASIS(
bAddress:= AKKU[0],
xGroup:= FALSE,
bDimmLevel:= AKKU[1],
bFadeTime:= AKKU[2],
xButton:= Button,
bModule_750_641:= 1,
bFeedback=> );
Button := TRUE; (* FbDALI Triggern das die Werte in die Lampe geschrieben werden HIGH *)
END_IF;


(* AKKU wieder auf Null setzten *)

FOR Zaehler := 0 TO 2 DO
AKKU[Zaehler]:=0;
END_FOR;

(* Warten auf neue Werte im AKKU *)


Wo ist der Denkfehler?
Es tut nichts :(
 
Also wie ich dich verstanden habe muss xButton in deinem FB Profil_Basis auf True gesetzt werden damit die gesetzten Parameter auch an deine Lampen übertragen werden ?!?

In dem Code-Schnipsel den du gepostet hast passiert das nämlich nie.

Du setzt Button erst auf False, übergibst diesen Wert an xButton im Aufruf der Instanz und setzt dann Button auf True. Aber du übergibst diesen True dann nicht an xButton......

Braucht der FB eine Positive Flanke in xButton um die Werte an den Controller zu übertragen? Was genau "Tut sich nicht"? ......
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

Button := TRUE; kann ich auch an den Anfang setzten. Es tut trotzdem nichts. Die Lampe bleibt unbeeindruckt.
Frage ist doch ob ich es so in einer IF-THEN einbauen kann?

Aufgabe ist das ich eine hohe folge von Lampen ( 63 Stück) anstuern muss.
Diese können nicht in Gruppen zusammen gefasst werden.
Es kommt fast non Stop zu eine änderung der Helligkeit. Also möchste ich einen Block zum ansteuern benutzten und diesen immer weider mit neuen Daten versorgen. Wenn es zu einer RGB änderung kommt dann kann das 30 Lampen gleichzeitig betreffen.
Denke um eine zusätzliche RGB Version mit 3 Bausteinen nach ...
Also AKKU_RED ... AKKU_GREEN ... AKKU_BLUE, wo die Infos zusammen kommen und auch so geschrieben werden.
 
Button := TRUE; kann ich auch an den Anfang setzten. Es tut trotzdem nichts. Die Lampe bleibt unbeeindruckt.
Frage ist doch ob ich es so in einer IF-THEN einbauen kann?
Nein, siehe MasterOhh.

Vielleicht geht folgendes:
In erster Schleife (Akku gefüllt) > Button := True
In zweiter Schleife (Akku leeren) > Button := False
 
Wenn du sagst das diese Gruppiert werden, warum nutzt du dann nicht die Dali-Gruppen? Denn genau dafür sind die da!

Du gruppierst die Lampen, setzt den Eingang Group auf TRUE, und steuerst damit dann die ganze Gruppe an, ohne Schleife, ohne Heckmeck...

Grüße

Marcel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich kann keine Gruppen setzten da die Lampen zu Komplex angesteuert werden und ich mehr als 16 Gruppe hätte.
Aber auch wenn ich eine gruppe Bilde ist das Problem das gleiche ..
 
Was zum Henker tust du, wenn du bei 64 Lampen > 16 Gruppen bekommst?

Außerdem wurde schon erkannt, dass dein Ansatz mit dem Button nicht klappen kann.
Du solltest es anders machen:

Der Dali-baustein sollte dauerhaft, ohne If-Bedingung (nicht Schleife!) aufgerufen werden, denn er braucht mehrere Zyklen bis er mit dem Dali-Bus kommuniziert hat.
Wenn etwas im Akku ist, soll der xButton true werden, (er darf nicht anstehen bleiben, weil du dann anfängst zu dimmen, und nicht den Wert anzufahren, dafür braucht es nur einen kurzen Impuls)

Ich hoffe damit kommst du etwas weiter!

Grüße

Marcel
 
Aufgabe ist das ich eine hohe folge von Lampen ( 63 Stück) anstuern muss.
Es kommt fast non Stop zu eine änderung der Helligkeit. Also möchste ich einen Block zum ansteuern benutzten und diesen immer weider mit neuen Daten versorgen. Wenn es zu einer RGB änderung kommt dann kann das 30 Lampen gleichzeitig betreffen.

Du weisst aber schon, dass Dali verdammt langsam ist?
30 Lampen ohne Grupen gleichzeitig auf andere RGB-Werte zu setzen wird - meiner Meinung nach - kaum klappen.


Gruß
Dieter
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Frohe Ostern,

habe das schon unter CFC laufen und bisher kein Problem, bekomme alle DALI unter 2s Geregelt.
Da ich aber immer nur ein paar Controller in der hellingkeit nachstellen muss ist es Zeitlich kein Problem.


Aktueller Stand, ist zum Testen - Soll alle Lampen ausschalten bei DimmFactor := 0; und alle einschalten DimmFactor := 100;
Es wird ständig geschrieben auf den Bus geschrieben.

Adresse := Adresse + 1;

IF Adresse = 64
THEN Adresse := 1;
END_IF;

DimmFactor := 0;

Profil_BASIS(
bAddress:= Adresse,
xGroup:= FALSE,
bDimmLevel:= DimmFactor,
bFadeTime:= 1,
xButton:= FALSE,
bModule_750_641:= 1,
bFeedback=> );


Profil_BASIS(
bAddress:= Adresse,
xGroup:= FALSE,
bDimmLevel:= DimmFactor,
bFadeTime:= 1,
xButton:= TRUE,
bModule_750_641:= 1,
bFeedback=> );


Das führt sporadisch dazu das ich die Lampen AN oder AUS bekomme - aber das hat wenig System - bekomme es nicht reproduziert.
Schreibe ich zu schnell?
Habe auch schon ein TON eingebaut und gewartet, ändert aber nichts.

Warum mag mich Dali unter ST nicht? :=)

Nochmal: Unter CFC habe ich kein Problem mit den 63 DALI Controllern. Will es in ST umbauen da die Ansteuerung zu komplex geworden ist und ich mich in Bausteinen verliehre.

----- NACHTRAG -----

Habe noch weiter drauf rum gedacht. Haben ja noch ein FeedBack und siehe da:

IF Profil_BASIS.bFeedback = 16#00
THEN
Adresse := Adresse + 1;

also nur wenn "Kein Fehler" dnnn geht er zur nächsten Adresse. Es kommt nach >20 Adressen ein
"03 (Hex) Jobliste im Controller ist voll"
zurück.

Das bekomme ich erst mit einem Reset weider weck ... Mummmpf!

HILFE .... ;) DANKE
 
Zuletzt bearbeitet:
Habe gerade festgestellt das ich _27_ Adressen schreiben kann ohne das ich eine "03 (Hex) Jobliste im Controller ist voll" bekomme.
Bei 28 ist das so - wenn eine 03 zurück kommt, bekomme ich denn Dali Controller nicht mehr ohne einen Reset auszuführen zum laufen.

WARUM?


IF Profil_BASIS.bFeedback = 16#00
THEN

IF Adresse < 27 THEN
Adresse := Adresse + 1;

Profil_BASIS(
bAddress:= Adresse,
xGroup:= FALSE,
bDimmLevel:= DimmFactor,
bFadeTime:= 1,
xButton:= FALSE,
bModule_750_641:= 1,
bFeedback=> );

Profil_BASIS(
bAddress:= Adresse,
xGroup:= FALSE,
bDimmLevel:= DimmFactor,
bFadeTime:= 1,
xButton:= TRUE,
bModule_750_641:= 1,
bFeedback=> );

END_IF;
END_IF;
 
Die Fehlermeldung ist doch eindeutig.

Du gibst deinem Controller 27 Jobs. Diese arbeitet er ab (bis er die Rückmeldung von Teilnehmer bekommt das er ausgeführt wurde). So wie es aussieht kann die Dali-Klemme nur 27 Jobs auf einmal abarbeiten. Wie schon erwähnt: Dali ist nicht unendlich Leistungsfähig...

Grüße

Marcel

P.S: Was mir gerade auffällt... warum rufst du Profil_Basis zweimal auf in deiner Schleife? hat das einen Grund?
 
Zurück
Oben