Ankündigung

Einklappen
Keine Ankündigung bisher.

Frage zu systemstart()

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [Firmware] Frage zu systemstart()

    Guten Morgen,

    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
    ​​
    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:
    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
    ​​
    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:
    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​
    Im Gruppenmonitor sehe ich:
    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
    ​
    Die Abstände, in denen die Writes kommen, verstehe ich nicht.
    ​
    Zuletzt geändert von Uwe!; Heute, 08:03.
    ....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!
Lädt...
X