Modbus Client Uu/Ul vs B/X

https://doc.ipesoft.com/label/D2DOCSK/protokoly_modbus

Dobrý deň,
chcem sa spýtať, či medzi adresami Uu/Ul a B/X je nejaký rozdiel. Ak to chápem správne, tak Uu & B berie horných 8 bitov registra a Ul & X berie dolných 8 bitov registra a obe sú unsigned.

Moje pôvodné chápanie bolo, že Uu vezme do úvahy horný byte registra, ale interpretuje ho ako Uint16, tzn. ak mám register 0xFFFF, tak vezmem do úvahy 0xFF00. To ale očividne nie je pravda, keďže výsledok čítania adresy cez Uu je 0xFF a nie 0xFF00. Obe adresy Uu & B a tiež Ul & X mi teda prídu identické.

Chápem to správne?

Dobry den.

Ak rozpravame o standardnom Modbus protokole, v ktorom ma register 2 bajty, tak naozaj Uu je podla dokumentacie “jeden register neznamienkovo, pričom sa z neho berie do úvahy iba vyšší bajt (1. v poradí)”, tj. horny bajt; hodnota 0-255. Rovnako ako B (“Byte neznamienkovo, iba horných 8 bitov hodnoty registra”).

A podobne Ul = “jeden register neznamienkovo, pričom sa z neho berie do úvahy iba nižší bajt (2. v poradí)”, cize to iste ako X (“Byte neznamienkovo, iba dolných 8 bitov hodnoty registra.”). V tom mate uplnu pravdu. Uu=B a Ul=X.

Ale: este mame parameter protokolu “Variable mode”, ktory umoznuje nastavit variabilny mod, kde register moze mat ROZNU dlzku. V tomto mode ak sa pouzije B alebo X, tak to hovori o 1-bajtovom registri. Ak sa pouzije U, tak sa hovori o 2-bajtovom registri (Uu o jeho hornom, Ul o jeho dolnom bajte).

A je tu este “Byte Mode”, ktory hovori o tom, ze register ma 1 bajt. V tom pripade U znamena 16-bitova premenna, ktora pokryva 2 registre (a napr. F a f su 32-bitove premenne zaberajuce 4 registre).

Teda v tychto modoch je rozdiel medzi Uu a B a medzi Ul a X a to taky, ze jednotlive zapisy specifikuju roznu velkost registra (variabilny mod) alebo rozny pocet registrov (bytovy mod).

Ako doplnkove citanie na hlbsie pochopenie zakernosti, s ktorymi sa mozete stretnut pri Modbus protokole, odporucam blog o Modbuse:

https://www.ipesoft.com/sk/blog/komunikácia-modbus-protokol

https://www.ipesoft.com/sk/blog/komunikácia-modbus-protokol-2

Pripadne tohtorocny anglicky preklad (ktory bol este rozsireny o sekciu problemov little-endianity)

Dakujem za vysvetlenie, aj za prilozene odkazy.