Ankündigung

Einklappen
Keine Ankündigung bisher.

Auswertung von mehreren Modbus reads

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

    Auswertung von mehreren Modbus reads

    Hallo,

    mich würde interessieren, wie man mit EibPC2 mehrfache Modbus-Abfragen richtig auswertet und Variable für jeweiligen Register nur übernimmt wenn status==0.
    Die Syntax erlaubt nämlich keine nested-if statements und das ganze Konstrukt wird dann bei ~20 Datenpunkten etwas mühsam.

    Gewünscht wäre dieses:

    if cycle(0,10) then {
    status=readmodbus(mb_handle, MB_HOLDING_REGISTER , 1000u16, val1, BIG_ENDIAN, BIG_ENDIAN);
    if(status == 0) then val1_out=convert(val1,0f16); endif
    status=readmodbus(mb_handle, MB_HOLDING_REGISTER , 1001u16, val2, BIG_ENDIAN, BIG_ENDIAN);
    if(status == 0) then val2_out=convert(val2,0f16); endif
    ​status=readmodbus(mb_handle, MB_HOLDING_REGISTER , 1002u16, val3, BIG_ENDIAN, BIG_ENDIAN);
    if(status == 0) then val3_out=convert(val3,0f16); endif

    ​...

    } endif

    Eine Möglichkeit wäre status1, status2, ... zu verwenden und das zweite if-statement im Top-level zu haben. Das ist aber grauenhaft.
    Zuletzt geändert von samkva; 11.08.2023, 08:40.

    #2
    Hier gäbe es zwei Lösungen:
    1. Ein Macro schreiben ReadandConvert(...) und die Abfrage mit dem Status als Makrovariable schreiben. Dann schaut das alles sauber aus.

    2. Anstelle vom obigen Code wie folgt vorgehen:

    Code:
    if cycle(0,10) then {
    readmodbus(mb_handle, MB_HOLDING_REGISTER , 1000u16, val1, BIG_ENDIAN, BIG_ENDIAN);
    }
    if(change(val1) then val1_out=convert(val1,0f16); endif​
    Die Funktion readmodbus aktualisiert val1 nur, wenn der Zugriff erfolgreich war. Wenn sich der Wert nicht ändert würde, muss auch nicht neu konvertiert werden.
    Wobei auch hier u.U. ein Makro brauchbar ist, wenn man z.B. val1 gar nicht weiter verwenden will, den Code kapseln will und daher mit einer lokalen Makrovariablen arbeitet.
    offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
    Enertex Produkte kaufen

    Kommentar

    Lädt...
    X