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.
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.
Kommentar