Mein alter Rolladen-Aktor liefert Rückmeldungen zur Position auf den GA's LZ (hier wird nur RAUF und RUNTER gesendet) und Pos leider völlig unabhängig.
So kann bei diesen Anfragen
[highlight=epc]
read("UG Büro Tür LZ-0/0/14")
read("UG Büro Tür Pos-0/0/15")
[/highlight]
herauskommen, dass LZ==RUNTER ist, Pos==0% (also oben) ist, also völlig verschiedene Antworten. Um das eindeutig zu machen, möchte ich die GA_LZ nur noch per EibPC simulieren und physisch nur noch per Pos fahren. Dazu habe ich in der ETS das Lese- und das Schreibflag für "UG Büro Tür LZ-0/0/14" entfernt, programmiert und getestet. Der Aktor reagiert nicht mehr auf Fahrbefehle auf dieser GA und reagiert auch nicht mehr selbst auf Leseanfragen. Im EibPC habe ich folgende Zeilen geschrieben:
[highlight=epc]
// Wenn nach LZ ein RAUF geschrieben wird, fahre auf Position 0% (oben)
// Wenn nach LZ ein RUNTER geschrieben wird, fahre auf Position 100% (unten)
// Wenn LZ gelesen wird und Pos<100% ist (der Rolladen also nicht komplett unten ist), antworte mit RAUF
// Wenn LZ gelesen wird und Pos==100% ist, antworte mit RUNTER
if eventwrite("UG Büro Tür LZ-0/0/14") and "UG Büro Tür LZ-0/0/14"==RAUF then write ("UG Büro Tür Pos-0/0/15", 0%); endif
if eventwrite("UG Büro Tür LZ-0/0/14") and "UG Büro Tür LZ-0/0/14"==RUNTER then write ("UG Büro Tür Pos-0/0/15", 100%); endif
if eventread("UG Büro Tür LZ-0/0/14") and "UG Büro Tür Pos-0/0/15"< 100% then writeresponse ("UG Büro Tür LZ-0/0/14", RAUF); endif
if eventread("UG Büro Tür LZ-0/0/14") and "UG Büro Tür Pos-0/0/15"==100% then writeresponse ("UG Büro Tür LZ-0/0/14", RUNTER); endif
[/highlight]
Das Zusammenspiel funktioniert einwandfrei. Um das nun für alle Rolladen nutzen zu können, habe ich dieses Makro geschrieben:
[highlight=epc]
:begin Rolladen_AufAb_Simulation(GA_LZ, GA_LZ_RM, GA_Pos, GA_Pos_RM)
:info $Rolladen wird nicht mehr über GA_LZ gefahren, sondern einheitlich nur noch über GA_Pos$ \\
$GA_LZ liefert RAUF, solange GA_Pos<100%, solange Rolladen also nicht komplett unten ist$ \\
$In ETS dazu bei GA_LZ das Lese- und Schreibbit löschen$ \\
$GA_LZ - GA für das Langzeit-Fahren des Rolladen$ \\
$GA_LZ_RM - Rückmelde-GA für GA_LZ$ \\
$GA_Pos - GA für das Positionsfahren des Rolladen$ \\
$GA_Pos_RM - Rückmelde-GA für GA_Pos_RM$
:shortinfo $Rolladen ausschließlich über GA_Pos ansteuern. GA_LZ simulieren$
// Wenn auf GA_LZ ein RAUF geschrieben wird, dann schreibe auf GA_Pos den Wert 0%
// Wenn auf GA_LZ ein RUNTER geschrieben wird, dann schreibe auf GA_Pos den Wert 100%
// Wenn GA_LZ_RM gelesen wird und GA_Pos_RM < 100% ist, der Rolladen also nicht komplett unten ist, melde RAUF zurück
// Wenn GA_LZ_RM gelesen wird und GA_Pos_RM == 100% ist, der Rolladen also komplett unten ist, melde RUNTER zurück
if eventwrite(GA_LZ) and GA_LZ==RAUF then write(GA_Pos, 0%); endif
if eventwrite(GA_LZ) and GA_LZ==RUNTER then write(GA_Pos, 100%); endif
if eventread(GA_LZ_RM) and GA_Pos_RM< 100% then writeresponse(GA_LZ_RM, RAUF) ; endif
if eventread(GA_LZ_RM) and GA_Pos_RM==100% then writeresponse(GA_LZ_RM, RUNTER); endif
:end
[/highlight]
und im Hauptprogramm so aufgerufen:
[highlight=epc]
Rolladen_AufAb_Simulation("UG Büro Tür LZ-0/0/14","UG Büro Tür LZ-0/0/14","UG Büro Tür Pos-0/0/15","UG Büro Tür Pos-0/0/15")
[/highlight]
Der Compiler melded nun "Ungültiger Datentyp in >eventwrite(GA_LZ< in >and< in >if_then<
und verweist auf die Zeile 16 des Makros.
Die Adressen zeigt EibStudio wie folgt an:
0/0/14 "UG Büro Tür LZ" Typ=b Len=01
0/0/15 "UG Büro Tür Pos" Typ=u Len=08
Wo liegt hier der Fehler?
Gruß, Joachim
EibStudio 2.308, Firmware 2.304, Patches 2.304
So kann bei diesen Anfragen
[highlight=epc]
read("UG Büro Tür LZ-0/0/14")
read("UG Büro Tür Pos-0/0/15")
[/highlight]
herauskommen, dass LZ==RUNTER ist, Pos==0% (also oben) ist, also völlig verschiedene Antworten. Um das eindeutig zu machen, möchte ich die GA_LZ nur noch per EibPC simulieren und physisch nur noch per Pos fahren. Dazu habe ich in der ETS das Lese- und das Schreibflag für "UG Büro Tür LZ-0/0/14" entfernt, programmiert und getestet. Der Aktor reagiert nicht mehr auf Fahrbefehle auf dieser GA und reagiert auch nicht mehr selbst auf Leseanfragen. Im EibPC habe ich folgende Zeilen geschrieben:
[highlight=epc]
// Wenn nach LZ ein RAUF geschrieben wird, fahre auf Position 0% (oben)
// Wenn nach LZ ein RUNTER geschrieben wird, fahre auf Position 100% (unten)
// Wenn LZ gelesen wird und Pos<100% ist (der Rolladen also nicht komplett unten ist), antworte mit RAUF
// Wenn LZ gelesen wird und Pos==100% ist, antworte mit RUNTER
if eventwrite("UG Büro Tür LZ-0/0/14") and "UG Büro Tür LZ-0/0/14"==RAUF then write ("UG Büro Tür Pos-0/0/15", 0%); endif
if eventwrite("UG Büro Tür LZ-0/0/14") and "UG Büro Tür LZ-0/0/14"==RUNTER then write ("UG Büro Tür Pos-0/0/15", 100%); endif
if eventread("UG Büro Tür LZ-0/0/14") and "UG Büro Tür Pos-0/0/15"< 100% then writeresponse ("UG Büro Tür LZ-0/0/14", RAUF); endif
if eventread("UG Büro Tür LZ-0/0/14") and "UG Büro Tür Pos-0/0/15"==100% then writeresponse ("UG Büro Tür LZ-0/0/14", RUNTER); endif
[/highlight]
Das Zusammenspiel funktioniert einwandfrei. Um das nun für alle Rolladen nutzen zu können, habe ich dieses Makro geschrieben:
[highlight=epc]
:begin Rolladen_AufAb_Simulation(GA_LZ, GA_LZ_RM, GA_Pos, GA_Pos_RM)
:info $Rolladen wird nicht mehr über GA_LZ gefahren, sondern einheitlich nur noch über GA_Pos$ \\
$GA_LZ liefert RAUF, solange GA_Pos<100%, solange Rolladen also nicht komplett unten ist$ \\
$In ETS dazu bei GA_LZ das Lese- und Schreibbit löschen$ \\
$GA_LZ - GA für das Langzeit-Fahren des Rolladen$ \\
$GA_LZ_RM - Rückmelde-GA für GA_LZ$ \\
$GA_Pos - GA für das Positionsfahren des Rolladen$ \\
$GA_Pos_RM - Rückmelde-GA für GA_Pos_RM$
:shortinfo $Rolladen ausschließlich über GA_Pos ansteuern. GA_LZ simulieren$
// Wenn auf GA_LZ ein RAUF geschrieben wird, dann schreibe auf GA_Pos den Wert 0%
// Wenn auf GA_LZ ein RUNTER geschrieben wird, dann schreibe auf GA_Pos den Wert 100%
// Wenn GA_LZ_RM gelesen wird und GA_Pos_RM < 100% ist, der Rolladen also nicht komplett unten ist, melde RAUF zurück
// Wenn GA_LZ_RM gelesen wird und GA_Pos_RM == 100% ist, der Rolladen also komplett unten ist, melde RUNTER zurück
if eventwrite(GA_LZ) and GA_LZ==RAUF then write(GA_Pos, 0%); endif
if eventwrite(GA_LZ) and GA_LZ==RUNTER then write(GA_Pos, 100%); endif
if eventread(GA_LZ_RM) and GA_Pos_RM< 100% then writeresponse(GA_LZ_RM, RAUF) ; endif
if eventread(GA_LZ_RM) and GA_Pos_RM==100% then writeresponse(GA_LZ_RM, RUNTER); endif
:end
[/highlight]
und im Hauptprogramm so aufgerufen:
[highlight=epc]
Rolladen_AufAb_Simulation("UG Büro Tür LZ-0/0/14","UG Büro Tür LZ-0/0/14","UG Büro Tür Pos-0/0/15","UG Büro Tür Pos-0/0/15")
[/highlight]
Der Compiler melded nun "Ungültiger Datentyp in >eventwrite(GA_LZ< in >and< in >if_then<
und verweist auf die Zeile 16 des Makros.
Die Adressen zeigt EibStudio wie folgt an:
0/0/14 "UG Büro Tür LZ" Typ=b Len=01
0/0/15 "UG Büro Tür Pos" Typ=u Len=08
Wo liegt hier der Fehler?
Gruß, Joachim
EibStudio 2.308, Firmware 2.304, Patches 2.304
Kommentar