Hi!
Trotz langer Suche komm ich einfach nicht auf den grünen Zweig, ich hoffe ihr könnt mir etwas auf die Sprünge helfen. Mein Problem ist folgendes.
Ich habe ein Makro das mir anhand der Laufzeit die Position einer Jalousie berechnet. Ich übergebe dem Makro also einen Wert zwischen 0-100 und dieser wird dann mit der Fahrzeit für 1Prozent verrechnet und somit die Jalousie verfahren. Das ganze sieht so aus:
Ich rufe dann in einem weiteren Makro, welches als Automatik für das Zimmer dient, das obere auf. Da ich je nach Situation verschiedene Werte benötige (z.B. hell, dunkel, Präsentation)
möchte ich natürlich das je nachdem andere Werte übergeben werden.
Deswegen habe ich ja auch den Namen vor jeder Variable da ich dachte das dann eindeutig auf diese zugegriffen werden kann, außerdem brauche ich ja auch immer den alten Prozentwert der Jalousie für die Berechnung der neuen Fahrzeit. Dann kommt allerdings dieser Fehler:
"Deklaration der Variable muss eindeutig sein in >Besprechung_Laufzeitkorrektur=5000u64< in >Mak:jalousiesetzen==>" (usw für alle anderen Variablen)
Ich greife also nicht auf die alte Instanz zu sondern, wie die Meldung schon sagt, die alte Variable wird neu definiert. Wie kann ich den nun mit dem selben Makro immer weiterarbeiten ?
Hier kurz der Code des zweiten Makros:
Und dann noch etwas anderes. Es sollte doch eigentlich möglich sein (steht ja auch im Handbuch) das man Variablen Gruppenadressen zuweist. Wenn ich allerdings meinem Makro statt der Gruppenadresse die Variable übergebe.
steht nacher beim Makro statt der Adresse GAJalousie und der Debugger springt logischerweise an...
Ich hoffe das war jetzt nicht zu chaotisch erklärt, wenn doch dann einfach nochmal nachfragen
Schonmal vielen Dank und beste Grüße
Robert
Trotz langer Suche komm ich einfach nicht auf den grünen Zweig, ich hoffe ihr könnt mir etwas auf die Sprünge helfen. Mein Problem ist folgendes.
Ich habe ein Makro das mir anhand der Laufzeit die Position einer Jalousie berechnet. Ich übergebe dem Makro also einen Wert zwischen 0-100 und dieser wird dann mit der Fahrzeit für 1Prozent verrechnet und somit die Jalousie verfahren. Das ganze sieht so aus:
Code:
:begin JalousieSetzen(Name,GAJalousie,GALamellen,ProzentSoll,Start,Reset) :info $Jalousien Steuerung für die Standartgröße. Berechnet den Jalousienstand anhand der Fahrzeiten$\\ $Name der Jalousie zwecks Eindeutigkeit$\\ $GA der Jalousie$\\ $GA der Lamellen$\\ $gewünschter Jalousienstand (ohne "%")$ :shortinfo $Jalousien Steuerung für DotNetFabrik(Standart)$ //------------------------------ // Fahrzeiten in Millisekunden //------------------------------ //FahrzeitTotal=34000ms //FahrzeitMax=FahrzeitTotal+Laufzeitkorrektur Name_Laufzeitkorrektur=5000u64 Name_FahrzeitEinProzent=340u64 //------------------------------ // Prozentberechnung //------------------------------ Name_AlterProzentWert=0u64 Name_NeuerProzentWert=0u64 Name_Fahrtrichtung=AUS // Wenn der Neue Wert größer als der Alte Wert ist nach unten fahren, andernfalls nach oben // Berechnet die Differenz zwischen neuem SOLL und altem IST //if Reset==EIN then Name_AlterProzentWert=0u64;Name_NeuerProzentWert=0u64 endif if change(ProzentSoll)then{ if ProzentSoll> Name_AlterProzentWert then{ Name_Fahrtrichtung=EIN; Name_NeuerProzentWert=(ProzentSoll - Name_AlterProzentWert) }else{ Name_Fahrtrichtung=AUS; Name_NeuerProzentWert=(Name_AlterProzentWert - ProzentSoll) }endif }endif if change(Name_NeuerProzentWert) then Name_AlterProzentWert=Name_NeuerProzentWert endif //------------------------------ // Fahrzeitberechnung //------------------------------ Name_FahrzeitSoll=Name_FahrzeitEinProzent*Name_NeuerProzentWert if (ProzentSoll==100u64 or ProzentSoll==0u64) then (Name_FahrzeitSoll+Name_Laufzeitkorrektur) endif //------------------------------ // Fahren & Debug Ausgabe //------------------------------ Name_a=convert(convert(Name_AlterProzentWert,0u08),$$) Name_b=convert(convert(Name_NeuerProzentWert,0u08),$$) Name_c=convert(convert(ProzentSoll,0u08),$$) Name_d=convert(convert(Name_FahrzeitSoll,0u08),$$) :return if (Start==EIN) then write(GAJalousie,Name_Fahrtrichtung) endif if delay(Start==EIN,Name_FahrzeitSoll) then write(GALamellen,EIN) endif JoinStatus(IPad,s700,Name_a) JoinStatus(IPad,s701,Name_b) JoinStatus(IPad,s702,Name_c) JoinStatus(IPad,s703,Name_d) :end
möchte ich natürlich das je nachdem andere Werte übergeben werden.
Deswegen habe ich ja auch den Namen vor jeder Variable da ich dachte das dann eindeutig auf diese zugegriffen werden kann, außerdem brauche ich ja auch immer den alten Prozentwert der Jalousie für die Berechnung der neuen Fahrzeit. Dann kommt allerdings dieser Fehler:
"Deklaration der Variable muss eindeutig sein in >Besprechung_Laufzeitkorrektur=5000u64< in >Mak:jalousiesetzen==>" (usw für alle anderen Variablen)
Ich greife also nicht auf die alte Instanz zu sondern, wie die Meldung schon sagt, die alte Variable wird neu definiert. Wie kann ich den nun mit dem selben Makro immer weiterarbeiten ?
Hier kurz der Code des zweiten Makros:
Code:
//------------------------------ // Jalousien Automatik //------------------------------ :begin JalousienAutomatikBesprechung(Sperre,Praesentation,Beschattung) :info $Jalousienautomatik für Besprechungszimmer$\\ $Verriegelung der Automatik$\\ $Befehl für den Präsentationsmodus$\\ $Befehl für Beschattunsmodus$\\ :shortinfo $Automatik Jalousie Besprechungszimmer$ // Praesenz="Präsenz - BEG/Besprechung-5/3/21" GAJalousie="BEG/Großraum - West 2: auf/ab-2/3/50" GALamellen="BEG/Großraum - West 2: Lamellen-2/3/51" if Sperre==AUS then{ if Praesenz or !Praesenz and sun() then{ JalousieSetzen(Besprechung,"BEG/Großraum - West 2: auf/ab-2/3/50", "BEG/Großraum - West 2: Lamellen-2/3/51",0u64,EIN,AUS)} endif; if Praesenz or !Praesenz and sun() then{ JalousieSetzen(Besprechung,"BEG/Großraum - West 2: auf/ab-2/3/50", "BEG/Großraum - West 2: Lamellen-2/3/51",100u64,EIN,AUS)} endif }endif :end
Code:
GAJalousie="BEG/Großraum - West 2: auf/ab-2/3/50"
Ich hoffe das war jetzt nicht zu chaotisch erklärt, wenn doch dann einfach nochmal nachfragen

Schonmal vielen Dank und beste Grüße
Robert
Kommentar