Sorry, dass ich so spät auf das Thema nochmal zurückkommen muss. Ich habe jetzt noch mal etwas experimentiert, aber verstehe das Ergebnis weiterhin nicht:
Ich frage ein Holdingregister als String ab und lese dann mit stringcast Teile des Strings aus. Wenn ich für dest das Argument 0 nehme, wird der korrekte Wert ausgelesen.
Wenn ich jedoch für dest das Argument 0u16 oder 0s16 wähle, um die ersten beiden bytes auszulesen, rutscht das 2. byte an die erste Stelle und das 1 byte an die zweite Stelle. Die bytes werden also vertauscht.
Leider verstehe ich von dem Thema zu wenig und wäre für einen Tipp sehr dankbar.
Grüße und ein schönes Wochenende!
Beispiel (s. Screenshot):
2025-04-12 10_25_42-Debugger.png
Ich frage ein Holdingregister als String ab und lese dann mit stringcast Teile des Strings aus. Wenn ich für dest das Argument 0 nehme, wird der korrekte Wert ausgelesen.
Wenn ich jedoch für dest das Argument 0u16 oder 0s16 wähle, um die ersten beiden bytes auszulesen, rutscht das 2. byte an die erste Stelle und das 1 byte an die zweite Stelle. Die bytes werden also vertauscht.
Leider verstehe ich von dem Thema zu wenig und wäre für einen Tipp sehr dankbar.
Grüße und ein schönes Wochenende!
Beispiel (s. Screenshot):
Rohdaten als s16: | b7 dd |
Rohdaten als c2: | b7 dd 00 |
Rohdaten stringcast 0,0u16 | b7 |
Rohdaten stringcast 0,1u16 | dd |
Rohdaten stringcast 0u16,0u16 | dd b7(?) |
Code:
mmPV=modbusmaster($172.20.10.16$, 502u16, 10u32, 240) status_mmPV=0 Test_PV_HR_40088c2=$$c2 if cycle(0,10) then { status_mmPV=readmodbus(mmPV, MB_HOLDING_REGISTER, 40087u16, Test_PV_HR_40088c2, BIG_ENDIAN, BIG_ENDIAN); } endif Test_PV_HR_40088_st_0=stringcast(Test_PV_HR_40088c2,0,0u16) Test_PV_HR_40088_st_1=stringcast(Test_PV_HR_40088c2,0,1u16) Test_PV_HR_40088_st_s16=stringcast(Test_PV_HR_40088c2,0s16,0u16) Test_PV_HR_40088_st_u16=stringcast(Test_PV_HR_40088c2,0u16,0u16)
2025-04-12 10_25_42-Debugger.png
Kommentar