Dobrý den,
měl bych dotaz k modbus TCP slave.
mám fb nastaven, offset adres, funguje. Potřebuji simulovat určité zařízení a musím dodržet čísla registrů.
40000-40350
212-217
500-515
Mám pro holding registry pole UINT o velikosti 350 a offset mi nastaví adresy do prvního rozsahu. To funguje.
Jenže nevím jak na stejném slavu adresovat i registry pod offsetem. Napadlo mě vyzoušet udělat pole o délce 1..40350 což asi není ideální ale jde to, ale nejde to již adresovat.
Když dám Suns_holding_regs[40001] := 0; tak index hlásí že je mimo rozsah
Tušíte jak toto udělat?
Díky
Pavel
Odpovědi 2
Dobrý den,
bohužel v aktuální verzi překladači je konstatní index pole omezen rozsah typu INT a při použití indexu na 32767 překladač hlásí chybu. Omezení je čistě historický relikt, kdy díky velikosti paměti PLC neměly větší pole smysl. Do budoucna omezení zrušíme.
Než bude nová verze připravena, lze problém obejít tím, že přistoupí do pole přes index definovaný proměnnou, tedy:
i := 40001;
Suns_holding_regs[i] := 0;
Druhá možnost je nadefinovat pole jako strukturu dvou polí, tedy:
TYPE
TModubusHoldingRegStruct : STRUCT
Reg0_39999 : ARRAY [0..39999] OF WORD;
Reg40000 : ARRAY[0..350] OF WORD;
END_STRUCT;
END_TYPE
a pro přístup k registrům nad 40 tisíc použít přístup:
Suns_holding_regs.Reg40000[1] := 0; //pristup na registr 40001
pomohlo přes proměnnou.
Děkuji
Vaše odpověď
Pro vložení odpovědi je nezbytné být přihlášený. Pokračujte na přihlášení.