Dobrý den,
prosím o radu s Modbus RTU komunikací.
Mám CP-2005 a v tento okamžik elektroměr PRO380-Mod. V centrále je osazen MR-0131.
Nedaří se mi Foxtrot a elektroměrem zkomunikovat. Program v Mosaicu viz Printscreen v příloze.
ID elektroměru je 111, vyčítám pomocí funkce 03 hodnoty z registru 5002. Stále však dostávám error 131 - chyba v kontrolním součtu.
Zkoušel jsem měnit typy výstupní proměnné na Real, UDINT, UINT, i funkci 04. Vše beze změny. Vždy error 131.
Zkoušel jsem zkomunikovat PC program přes RS485 převodník s elektroměrem, a naprosto bez problémů (viz pravé okénko v printsreenu) .
Dakázali byste mi poradit kde by mohla být chyba?
Poznámka:
PC program pracuje s Hexa daty, jak vidím datovou zónu v Mosaicu vpravo, data jsou v dekadickém formátu. Nevím však jak toto v Mosaicu ovlivnit. Proti tomu jde však to, že pokud by byl číselný formát špatně, bylo by chybně odeslané Modbus ID. Když však zadám záměrně jiné ID, dostávám chybu "timeout error", takže to dekadické zadání 111 je evidentně správně. Což mi tu teorii s hexa formátem vyvrací.
Děkuji za radu. S pozdravem Tomáš Veselý
Odpovědi 2
Dobrý den,
dekadické a hexadecimální je pouze zobrazení a nemá vliv na binární formu dat. Kliknutím pravým tlačítkem ve sloupci hodnot vyvolá lokální menu, kde je možné formát změnit.
Na snímku obrazovky vidím dva rozdíli proti PC programu. Adresa registru v proměnné StartAdr je zadána decimálně jako 5002, zatímco v PC programu je 5002 hexadecimálně (V Mosaicu můžete hexadecimální hodnoty zadat ve formátu 16#xxxx, tedy v tomto případě 16#5002. Druhá nesrovnalost je hodnota na vstupu NoPoint, kde má být počet registrů čtených ze zařízení, ale je tam použita SIZEOF proměnné, která vrací bajtovou délkou. Protože jsou Modbus registry dvojbajtové je toto číslo 2 krát větší než by mělo být a při příjmu zprávy může dojít k přepsání dat ležících za proměnnou.
Pokud tyto dvě nesrovnalosti opravíte, měl byste vidět ve vysílací zóně data shodná s daty v PC programu.
Pokud i po těchto úpravách dostanete chybový kód, je pro diagnostiku nejlepší nastavit v ovládací (control) zóně kanálu logování. r16_p4_Control_CH1.LOG_HEX_ONLY := 1 zapne hexadecimální formát logu a r16_p4_Control_CH1.LOG_ON := 1 zapne logování. Soubor se zachycenými daty je pak možné stáhnout přes menu PLC > Souborový systém PLC... Zde ho najdete v adresáři WWW/LOGS/ pod názve CH1_UNI.LOG.
V případě, že nám log zašlete můžeme zjistit, co se bloku na odpovědi nelíbí.
Dobrý den,
ano, bylo to tak, ony dva body to vyřešily. StartAdr zadávat hexa a SIZEOF je počet "double-bytů".
Velice děkuji !!
TomV
Tento dotaz je vyřešený.