Guten Morgen,
ich glaube ich hab das Verhalten von systemstart() nach all den Jahren doch noch nicht verstanden. Ich hatte ursprünglich folgenden Code:
Erwartet hätte ich, dass bei jeder Änderung von "interne Variable" je nach Wert die eine oder die andere Zeile ausgeführt wird. Macht es auch.
Zusätzlich hätte ich aber auch erwartete, dass eine der beiden Zeilen 5 Sekunden nach Systemstart ausgeführt wird. Das macht es NICHT.
Dieser Code führt zum erwarteten Ergebnis:
Meine Vermutung war jetzt, dass bei "after(5500)" LOS schon wieder auf AUS ist, bevor die anderen Zeilen ausgeführt werden.
Eine Änderung auf "after( 10.000)" hat nicht funktioniert.
Eine Änderung auf "after(100.000)" hat funktioniert.
Was sagt uns das? Der Erste Verarbeitugszyklus dauert mehr als 10 Sekunden und daher geht LOS im ersten Zyklus von EIN direkt wieder auf AUS zurück und die Zeilen mit "or LOS" sehen LOS immer als AUS?
Dann müsste die Zeile "after(systemstart(), 5500u64)" aber im ersten Zyklus ausgeführt werden, wohingegen "after(systemstart(), 10000u64)" nicht mehr im ersten Zyklus ausgeführt wird. Das wäre aber wenig deterministisch.
Hab dann zum besseren Verständnis noch folgenden Testcode ausgeführt und über die ETS den Gruppenmonitor mitlaufen lassen:
Im Gruppenmonitor sehe ich:
Die Abstände, in denen die Writes kommen, verstehe ich nicht.
ich glaube ich hab das Verhalten von systemstart() nach all den Jahren doch noch nicht verstanden. Ich hatte ursprünglich folgenden Code:
Code:
LOS = AUS if after(systemstart(), 5000u64) then LOS = EIN endif if after(systemstart(), 5500u64) then LOS = AUS endif .... interneVariable=0b01 if (change(interneVariable) or LOS) and interneVariable then if (change(interneVariable) or LOS) and !interneVariable then
Zusätzlich hätte ich aber auch erwartete, dass eine der beiden Zeilen 5 Sekunden nach Systemstart ausgeführt wird. Das macht es NICHT.
Dieser Code führt zum erwarteten Ergebnis:
Code:
LOS = AUS if after(systemstart(), 5000u64) then LOS = EIN endif //if after(systemstart(), 5500u64) then LOS = AUS endif .... interneVariable=0b01 if (change(interneVariable) or LOS) and interneVariable then if (change(interneVariable) or LOS) and !interneVariable then
Eine Änderung auf "after( 10.000)" hat nicht funktioniert.
Eine Änderung auf "after(100.000)" hat funktioniert.
Was sagt uns das? Der Erste Verarbeitugszyklus dauert mehr als 10 Sekunden und daher geht LOS im ersten Zyklus von EIN direkt wieder auf AUS zurück und die Zeilen mit "or LOS" sehen LOS immer als AUS?
Dann müsste die Zeile "after(systemstart(), 5500u64)" aber im ersten Zyklus ausgeführt werden, wohingegen "after(systemstart(), 10000u64)" nicht mehr im ersten Zyklus ausgeführt wird. Das wäre aber wenig deterministisch.
Hab dann zum besseren Verständnis noch folgenden Testcode ausgeführt und über die ETS den Gruppenmonitor mitlaufen lassen:
Code:
if systemstart() then write("Test-15/0/0", 0u16) endif
if after(systemstart(), 1000u64) then write("Test-15/0/0", 1u16) endif
if after(systemstart(), 5000u64) then write("Test-15/0/0", 5u16) endif
if after(systemstart(), 5500u64) then write("Test-15/0/0", 6u16) endif
if after(systemstart(), 10000u64) then write("Test-15/0/0", 10u16) endif
if after(systemstart(), 20000u64) then write("Test-15/0/0", 20u16) endif
if after(systemstart(), 30000u64) then write("Test-15/0/0", 30u16) endif
if after(systemstart(), 40000u64) then write("Test-15/0/0", 40u16) endif
if after(systemstart(), 50000u64) then write("Test-15/0/0", 50u16) endif
Code:
Timestamp Service Source Destination Hop Type Value Info 2026-10-27 05:49:58.219 vom Bus 1.0.8 alle INIT GA 6 GroupValue_Read 2026-10-27 05:50:48.133 vom Bus 1.0.8 15/0/0 6 GroupValue_Write 0000 00 00 | 0 2026-10-27 05:50:48.212 vom Bus 1.0.8 15/0/0 6 GroupValue_Write 0001 00 01 | 1 2026-10-27 05:50:48.329 vom Bus 1.0.8 15/0/0 6 GroupValue_Write 0005 00 05 | 5 2026-10-27 05:50:48.376 vom Bus 1.0.8 15/0/0 6 GroupValue_Write 0006 00 06 | 6 2026-10-27 05:50:48.457 vom Bus 1.0.8 15/0/0 6 GroupValue_Write 000A 00 0A | 10 2026-10-27 05:50:48.537 vom Bus 1.0.8 15/0/0 6 GroupValue_Write 0014 00 14 | 20 2026-10-27 05:50:54.839 vom Bus 1.0.8 15/0/0 6 GroupValue_Write 001E 00 1E | 30 2026-10-27 05:50:54.915 vom Bus 1.0.8 15/0/0 6 GroupValue_Write 0028 00 28 | 40 2026-10-27 05:50:54.991 vom Bus 1.0.8 15/0/0 6 GroupValue_Write 0032 00 32 | 50

