Problem mit zu großem Programmcode! Hilfe bei Vereinfachung gesucht!

KingHelmer

Level-1
Beiträge
1.076
Reaktionspunkte
139
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi Leute,

ich hatte nun schon länger geschaut, wie ich den folgenden Programmcode verkleinern/vereinfachen kann.

Es geht hier um eine DALI-Lichtsteuerung, bei welcher ich mit Szenentastern 1-16 die Scenen 1-16 aufrufe (negative Flanke) und bei Tastendruck über 10s den aktuellen Lichtwert der Leuchten als neue Szene speichere.

Nun ist das ja ziemlich genau 16 mal der gleiche sch****. Nur die Nummern und Taster verändern sich eben.
Vieleicht fällt jemandem etwas ein, wie ich diesen Code vereinfachen kann.

Code:
(*Saving the Actual Dimm Values as a Scene after pressing the button for 10s*)

Instanz1_F_TRIG(CLK:= xSceneButton1 OR xSceneMerker1,);
Instanz1_FbDALI_RecallScene(
    bAddress:= 255,
    xGroup:= FALSE,
    bSceneNo:= 1,
    xSceneButton:= Instanz1_F_TRIG.Q,
    bFadeTime:= ,
    bModule_750_641:= 1,
    bFeedback=> );
Instanz1_TON(IN:= xSceneButton1 OR xSceneMerker1, PT:= T#10s, ET=> );
Instanz1_FbDALI_ConfigScene(
    bAddress:= 255,
    xGroup:= FALSE,
    bSceneNo:= 1,
    bDimmValue:= ,
    xSet:= ,
    xActualValueAsScene:= Instanz1_TON.Q,
    bModule_750_641:= 1,
    bFeedback=> );




Instanz2_F_TRIG(CLK:= xSceneButton2 OR xSceneMerker2,);
Instanz2_FbDALI_RecallScene(
    bAddress:= 255,
    xGroup:= FALSE,
    bSceneNo:= 2,
    xSceneButton:= Instanz2_F_TRIG.Q,
    bFadeTime:= ,
    bModule_750_641:= 1,
    bFeedback=> );
Instanz2_TON(IN:= xSceneButton2 OR xSceneMerker2, PT:= T#10s, ET=> );
Instanz2_FbDALI_ConfigScene(
    bAddress:= 255,
    xGroup:= FALSE,
    bSceneNo:= 2,
    bDimmValue:= ,
    xSet:= ,
    xActualValueAsScene:= Instanz2_TON.Q,
    bModule_750_641:= 1,
    bFeedback=> );


Instanz3_F_TRIG(CLK:= xSceneButton3 OR xSceneMerker3,);
Instanz3_FbDALI_RecallScene(
    bAddress:= 255,
    xGroup:= FALSE,
    bSceneNo:= 3,
    xSceneButton:= Instanz3_F_TRIG.Q,
    bFadeTime:= ,
    bModule_750_641:= 1,
    bFeedback=> );
Instanz3_TON(IN:= xSceneButton3 OR xSceneMerker3, PT:= T#10s, ET=> );
Instanz3_FbDALI_ConfigScene(
    bAddress:= 255,
    xGroup:= FALSE,
    bSceneNo:= 3,
    bDimmValue:= ,
    xSet:= ,
    xActualValueAsScene:= Instanz3_TON.Q,
    bModule_750_641:= 1,
    bFeedback=> );



Instanz4_F_TRIG(CLK:= xSceneButton4 OR xSceneMerker4,);
Instanz4_FbDALI_RecallScene(
    bAddress:= 255,
    xGroup:= FALSE,
    bSceneNo:= 4,
    xSceneButton:= Instanz4_F_TRIG.Q,
    bFadeTime:= ,
    bModule_750_641:= 1,
    bFeedback=> );
Instanz4_TON(IN:= xSceneButton4 OR xSceneMerker4, PT:= T#10s, ET=> );
Instanz4_FbDALI_ConfigScene(
    bAddress:= 255,
    xGroup:= FALSE,
    bSceneNo:= 4,
    bDimmValue:= ,
    xSet:= ,
    xActualValueAsScene:= Instanz4_TON.Q,
    bModule_750_641:= 1,
    bFeedback=> );



Instanz5_F_TRIG(CLK:= xSceneButton5 OR xSceneMerker5,);
Instanz5_FbDALI_RecallScene(
    bAddress:= 255,
    xGroup:= FALSE,
    bSceneNo:= 5,
    xSceneButton:= Instanz5_F_TRIG.Q,
    bFadeTime:= ,
    bModule_750_641:= 1,
    bFeedback=> );
Instanz5_TON(IN:= xSceneButton5 OR xSceneMerker5, PT:= T#10s, ET=> );
Instanz5_FbDALI_ConfigScene(
    bAddress:= 255,
    xGroup:= FALSE,
    bSceneNo:= 5,
    bDimmValue:= ,
    xSet:= ,
    xActualValueAsScene:= Instanz5_TON.Q,
    bModule_750_641:= 1,
    bFeedback=> );

Instanz6_F_TRIG(CLK:= xSceneButton6 OR xSceneMerker6,);
Instanz6_FbDALI_RecallScene(
    bAddress:= 255,
    xGroup:= FALSE,
    bSceneNo:= 6,
    xSceneButton:= Instanz6_F_TRIG.Q,
    bFadeTime:= ,
    bModule_750_641:= 1,
    bFeedback=> );
Instanz6_TON(IN:= xSceneButton6 OR xSceneMerker6, PT:= T#10s, ET=> );
Instanz6_FbDALI_ConfigScene(
    bAddress:= 255,
    xGroup:= FALSE,
    bSceneNo:= 6,
    bDimmValue:= ,
    xSet:= ,
    xActualValueAsScene:= Instanz6_TON.Q,
    bModule_750_641:= 1,
    bFeedback=> );

Instanz7_F_TRIG(CLK:= xSceneButton7 OR xSceneMerker7,);
Instanz7_FbDALI_RecallScene(
    bAddress:= 255,
    xGroup:= FALSE,
    bSceneNo:= 7,
    xSceneButton:= Instanz7_F_TRIG.Q,
    bFadeTime:= ,
    bModule_750_641:= 1,
    bFeedback=> );
Instanz7_TON(IN:= xSceneButton7 OR xSceneMerker7, PT:= T#10s, ET=> );
Instanz7_FbDALI_ConfigScene(
    bAddress:= 255,
    xGroup:= FALSE,
    bSceneNo:= 7,
    bDimmValue:= ,
    xSet:= ,
    xActualValueAsScene:= Instanz7_TON.Q,
    bModule_750_641:= 1,
    bFeedback=> );

Instanz8_F_TRIG(CLK:= xSceneButton8 OR xSceneMerker8,);
Instanz8_FbDALI_RecallScene(
    bAddress:= 255,
    xGroup:= FALSE,
    bSceneNo:= 8,
    xSceneButton:= Instanz8_F_TRIG.Q,
    bFadeTime:= ,
    bModule_750_641:= 1,
    bFeedback=> );
Instanz8_TON(IN:= xSceneButton8 OR xSceneMerker8, PT:= T#10s, ET=> );
Instanz8_FbDALI_ConfigScene(
    bAddress:= 255,
    xGroup:= FALSE,
    bSceneNo:= 8,
    bDimmValue:= ,
    xSet:= ,
    xActualValueAsScene:= Instanz8_TON.Q,
    bModule_750_641:= 1,
    bFeedback=> );

Instanz9_F_TRIG(CLK:= xSceneButton9 OR xSceneMerker9,);
Instanz9_FbDALI_RecallScene(
    bAddress:= 255,
    xGroup:= FALSE,
    bSceneNo:= 9,
    xSceneButton:= Instanz9_F_TRIG.Q,
    bFadeTime:= ,
    bModule_750_641:= 1,
    bFeedback=> );
Instanz9_TON(IN:= xSceneButton9 OR xSceneMerker9, PT:= T#10s, ET=> );
Instanz9_FbDALI_ConfigScene(
    bAddress:= 255,
    xGroup:= FALSE,
    bSceneNo:= 9,
    bDimmValue:= ,
    xSet:= ,
    xActualValueAsScene:= Instanz9_TON.Q,
    bModule_750_641:= 1,
    bFeedback=> );

Instanz10_F_TRIG(CLK:= xSceneButton10 OR xSceneMerker10,);
Instanz10_FbDALI_RecallScene(
    bAddress:= 255,
    xGroup:= FALSE,
    bSceneNo:= 10,
    xSceneButton:= Instanz10_F_TRIG.Q,
    bFadeTime:= ,
    bModule_750_641:= 1,
    bFeedback=> );
Instanz10_TON(IN:= xSceneButton10 OR xSceneMerker10, PT:= T#10s, ET=> );
Instanz10_FbDALI_ConfigScene(
    bAddress:= 255,
    xGroup:= FALSE,
    bSceneNo:= 10,
    bDimmValue:= ,
    xSet:= ,
    xActualValueAsScene:= Instanz10_TON.Q,
    bModule_750_641:= 1,
    bFeedback=> );

Instanz11_F_TRIG(CLK:= xSceneButton11 OR xSceneMerker11,);
Instanz11_FbDALI_RecallScene(
    bAddress:= 255,
    xGroup:= FALSE,
    bSceneNo:= 11,
    xSceneButton:= Instanz11_F_TRIG.Q,
    bFadeTime:= ,
    bModule_750_641:= 1,
    bFeedback=> );
Instanz11_TON(IN:= xSceneButton11 OR xSceneMerker11, PT:= T#10s, ET=> );
Instanz11_FbDALI_ConfigScene(
    bAddress:= 255,
    xGroup:= FALSE,
    bSceneNo:= 11,
    bDimmValue:= ,
    xSet:= ,
    xActualValueAsScene:= Instanz11_TON.Q,
    bModule_750_641:= 1,
    bFeedback=> );

Instanz12_F_TRIG(CLK:= xSceneButton12 OR xSceneMerker12,);
Instanz12_FbDALI_RecallScene(
    bAddress:= 255,
    xGroup:= FALSE,
    bSceneNo:= 12,
    xSceneButton:= Instanz12_F_TRIG.Q,
    bFadeTime:= ,
    bModule_750_641:= 1,
    bFeedback=> );
Instanz12_TON(IN:= xSceneButton12 OR xSceneMerker12, PT:= T#10s, ET=> );
Instanz12_FbDALI_ConfigScene(
    bAddress:= 255,
    xGroup:= FALSE,
    bSceneNo:= 12,
    bDimmValue:= ,
    xSet:= ,
    xActualValueAsScene:= Instanz12_TON.Q,
    bModule_750_641:= 1,
    bFeedback=> );

Instanz13_F_TRIG(CLK:= xSceneButton13 OR xSceneMerker13,);
Instanz13_FbDALI_RecallScene(
    bAddress:= 255,
    xGroup:= FALSE,
    bSceneNo:= 13,
    xSceneButton:= Instanz13_F_TRIG.Q,
    bFadeTime:= ,
    bModule_750_641:= 1,
    bFeedback=> );
Instanz13_TON(IN:= xSceneButton13 OR xSceneMerker13, PT:= T#10s, ET=> );
Instanz13_FbDALI_ConfigScene(
    bAddress:= 255,
    xGroup:= FALSE,
    bSceneNo:= 13,
    bDimmValue:= ,
    xSet:= ,
    xActualValueAsScene:= Instanz13_TON.Q,
    bModule_750_641:= 1,
    bFeedback=> );

Instanz14_F_TRIG(CLK:= xSceneButton14 OR xSceneMerker14,);
Instanz14_FbDALI_RecallScene(
    bAddress:= 255,
    xGroup:= FALSE,
    bSceneNo:= 14,
    xSceneButton:= Instanz14_F_TRIG.Q,
    bFadeTime:= ,
    bModule_750_641:= 1,
    bFeedback=> );
Instanz14_TON(IN:= xSceneButton14 OR xSceneMerker14, PT:= T#10s, ET=> );
Instanz14_FbDALI_ConfigScene(
    bAddress:= 255,
    xGroup:= FALSE,
    bSceneNo:= 14,
    bDimmValue:= ,
    xSet:= ,
    xActualValueAsScene:= Instanz14_TON.Q,
    bModule_750_641:= 1,
    bFeedback=> );

Instanz15_F_TRIG(CLK:= xSceneButton15 OR xSceneMerker15,);
Instanz15_FbDALI_RecallScene(
    bAddress:= 255,
    xGroup:= FALSE,
    bSceneNo:= 15,
    xSceneButton:= Instanz15_F_TRIG.Q,
    bFadeTime:= ,
    bModule_750_641:= 1,
    bFeedback=> );
Instanz15_TON(IN:= xSceneButton15 OR xSceneMerker15, PT:= T#10s, ET=> );
Instanz15_FbDALI_ConfigScene(
    bAddress:= 255,
    xGroup:= FALSE,
    bSceneNo:= 15,
    bDimmValue:= ,
    xSet:= ,
    xActualValueAsScene:= Instanz15_TON.Q,
    bModule_750_641:= 1,
    bFeedback=> );

Instanz16_F_TRIG(CLK:= xSceneButton16 OR xSceneMerker16,);
Instanz16_FbDALI_RecallScene(
    bAddress:= 255,
    xGroup:= FALSE,
    bSceneNo:= 16,
    xSceneButton:= Instanz16_F_TRIG.Q,
    bFadeTime:= ,
    bModule_750_641:= 1,
    bFeedback=> );
Instanz16_TON(IN:= xSceneButton16 OR xSceneMerker16, PT:= T#10s, ET=> );
Instanz16_FbDALI_ConfigScene(
    bAddress:= 255,
    xGroup:= FALSE,
    bSceneNo:= 16,
    bDimmValue:= ,
    xSet:= ,
    xActualValueAsScene:= Instanz16_TON.Q,
    bModule_750_641:= 1,
    bFeedback=> );

Meine Lösungsansatz war:

- Ein Array für die Scenennummer anlegen.
Problem: Die Buttons für die Szenen werden getastet und je nach länge des Tastendruck werden die aktuellen Werte als Szenen gespeichert.

Es wäre nicht allzuschlimm, wenn ich es so lassen müsste, funktionieren tuts ja einwandfrei. Nur hat der Baustein über 250 Zeilen.

Unübersichtlich ohne Ende...

Grüße,

Flo
 
Du hast mehrere Dinge 16 mal:
SceneButton
SceneMerker
F_TRIG
FB_DALI_RecallScene
TON
FB_DALI_ConfigScene
Du könntest diese Dinge in einem Struct oder einem eigenen FB zusammenfassen und dann ein Array[1..16] davon deklarieren.
 
Zurück
Oben